From ba62ffc23c2ea862bc4ef8e70c82b6b27b6982e3 Mon Sep 17 00:00:00 2001 From: Jaume Ramon Date: Wed, 26 Oct 2022 14:45:01 +0200 Subject: [PATCH 001/388] Downscaling recipie --- modules/Downscaling/Downscaling.R | 147 ++++++++++++++++++ .../testing_recipes/recipe_system5c3s-tas.yml | 60 ++++--- modules/test_seasonal.R | 3 +- modules/test_seasonal_downscaling.R | 27 ++++ 4 files changed, 212 insertions(+), 25 deletions(-) create mode 100644 modules/Downscaling/Downscaling.R create mode 100644 modules/test_seasonal_downscaling.R diff --git a/modules/Downscaling/Downscaling.R b/modules/Downscaling/Downscaling.R new file mode 100644 index 00000000..11c57a2a --- /dev/null +++ b/modules/Downscaling/Downscaling.R @@ -0,0 +1,147 @@ + +## TODO: Remove once CSDownscale is on CRAN +source('/esarchive/scratch/jramon/GitLab_jramon/downscaling/csdownscale/R/Interpolation.R') +source('/esarchive/scratch/jramon/GitLab_jramon/downscaling/csdownscale/R/Intbc.R') +source('/esarchive/scratch/jramon/GitLab_jramon/downscaling/csdownscale/R/Intlr.R') +source('/esarchive/scratch/jramon/GitLab_jramon/downscaling/csdownscale/R/Analogs.R') +source('/esarchive/scratch/jramon/GitLab_jramon/downscaling/csdownscale/R/Utils.R') +source("https://earth.bsc.es/gitlab/external/cstools/-/raw/master/R/CST_BiasCorrection.R") + + +## Entry params data and recipe? +downscale_datasets <- function(data, recipe) { + # Function that downscale the hindcast using the method stated in the + # recipe. For the moment, forecast must be null. + # + # data: list of s2dv_cube objects containing the hcst, obs and fcst. + # recipe: object obtained when passing the .yml recipe file to read_yaml() + + type <- tolower(recipe$Analysis$Workflow$Downscaling[["type"]]) + + if (!is.null(data$fcst)) { + warning("The downscaling will be only performed to the hindcast data") + data$fcst <- NULL + } + + if (type == "none") { + + hcst_calibrated <- data$hcst + DOWNSCAL_MSG <- "##### NO DOWNSCALING PERFORMED #####" + + } else { + # Downscaling function params + int_method <- tolower(recipe$Analysis$Workflow$Downscaling[["int_method"]]) + bc_method <- tolower(recipe$Analysis$Workflow$Downscaling[["bc_method"]]) + lr_method <- tolower(recipe$Analysis$Workflow$Downscaling[["lr_method"]]) + target_grid <- tolower(recipe$Analysis$Workflow$Downscaling[["target_grid"]]) + nanalogs <- tolower(recipe$Analysis$Workflow$Downscaling[["nanalogs"]]) + + if (is.null(recipe$Analysis$ncores)) { + ncores <- 1 + } else { + ncores <- recipe$Analysis$ncores + } + + if (is.null(recipe$Analysis$loocv)) { + loocv <- TRUE + } else { + loocv <- recipe$Analysis$loocv + } + + if (is.null(recipe$Analysis$remove_NAs)) { + na.rm = F + } else { + na.rm = recipe$Analysis$remove_NAs + } + + CALIB_MSG <- "##### CALIBRATION COMPLETE #####" + # Replicate observation array for the multi-model case + if (mm) { + obs.mm <- obs$data + for(dat in 1:(dim(data$hcst$data)['dat'][[1]]-1)) { + obs.mm <- abind(obs.mm, data$obs$data, + along=which(names(dim(data$obs$data)) == 'dat')) + } + names(dim(obs.mm)) <- names(dim(obs$data)) + data$obs$data <- obs.mm + remove(obs.mm) + } + + if (recipe$Analysis$Variables$freq == "monthly_mean") { + + CST_CALIB_METHODS <- c("bias", "evmos", "mse_min", "crps_min", "rpc-based") + ## TODO: implement other calibration methods + ## TODO: Restructure the code? + if (!(method %in% CST_CALIB_METHODS)) { + stop("Calibration method in the recipe is not available for monthly", + " data.") + } else { + ## Alba's version of CST_Calibration (pending merge) is being used + # Calibrate the hindcast + hcst_calibrated <- CST_Calibration(data$hcst, data$obs, + cal.method = method, + eval.method = "leave-one-out", + multi.model = mm, + na.fill = TRUE, + na.rm = na.rm, + apply_to = NULL, + alpha = NULL, + memb_dim = "ensemble", + sdate_dim = "syear", + ncores = ncores) + if (!is.null(data$fcst)) { + # Calibrate the forecast + fcst_calibrated <- CST_Calibration(data$hcst, data$obs, data$fcst, + cal.method = method, + eval.method = "leave-one-out", + multi.model = mm, + na.fill = TRUE, + na.rm = na.rm, + apply_to = NULL, + alpha = NULL, + memb_dim = "ensemble", + sdate_dim = "syear", + ncores = ncores) + } else { + fcst_calibrated <- NULL + } + } + } else if (recipe$Analysis$Variables$freq == "daily_mean") { + # Daily data calibration using Quantile Mapping + if (!(method %in% c("qmap"))) { + stop("Calibration method in the recipe is not available at daily ", + "frequency. Only quantile mapping 'qmap' is implemented.") + } + # Calibrate the hindcast + hcst_calibrated <- CST_QuantileMapping(data$hcst, data$obs, + exp_cor = NULL, + sample_dims = c("syear", + "time", + "ensemble"), + sample_length = NULL, + method = "QUANT", + wet.day = FALSE, + ncores = ncores, + na.rm = na.rm) + + if (!is.null(data$fcst)) { + # Calibrate the forecast + fcst_calibrated <- CST_QuantileMapping(data$hcst, data$obs, + exp_cor = data$fcst, + sample_dims = c("syear", + "time", + "ensemble"), + sample_length = NULL, + method = "QUANT", + wet.day = FALSE, + ncores = ncores, + na.rm = na.rm) + } else { + fcst_calibrated <- NULL + } + } + } +print(CALIB_MSG) + ## TODO: Return observations too? + return(list(hcst = hcst_calibrated, fcst = fcst_calibrated)) +} diff --git a/modules/Loading/testing_recipes/recipe_system5c3s-tas.yml b/modules/Loading/testing_recipes/recipe_system5c3s-tas.yml index 27cdccdc..15159553 100644 --- a/modules/Loading/testing_recipes/recipe_system5c3s-tas.yml +++ b/modules/Loading/testing_recipes/recipe_system5c3s-tas.yml @@ -1,11 +1,22 @@ +# ▄████▄ ██████ ▓█████▄ ▒█████ █ █░███▄ █ ██████ ▄████▄ ▄▄▄ ██▓ ▓█████ +#▒██▀ ▀█ ▒██ ▒ ▒██▀ ██▌▒██▒ ██▒▓█░ █ ░█░██ ▀█ █ ▒██ ▒ ▒██▀ ▀█ ▒████▄ ▓██▒ ▓█ ▀ +#▒▓█ ▄ ░ ▓██▄ ░██ █▌▒██░ ██▒▒█░ █ ░█▓██ ▀█ ██▒░ ▓██▄ ▒▓█ ▄ ▒██ ▀█▄ ▒██░ ▒███ +#▒▓▓▄ ▄██▒ ▒ ██▒░▓█▄ ▌▒██ ██░░█░ █ ░█▓██▒ ▐▌██▒ ▒ ██▒▒▓▓▄ ▄██▒░██▄▄▄▄██ ▒██░ ▒▓█ ▄ +#▒ ▓███▀ ░▒██████▒▒░▒████▓ ░ ████▓▒░░░██▒██▓▒██░ ▓██░▒██████▒▒▒ ▓███▀ ░ ▓█ ▓██▒░██████▒░▒████▒ +#░ ░▒ ▒ ░▒ ▒▓▒ ▒ ░ ▒▒▓ ▒ ░ ▒░▒░▒░ ░ ▓░▒ ▒ ░ ▒░ ▒ ▒ ▒ ▒▓▒ ▒ ░░ ░▒ ▒ ░ ▒▒ ▓▒█░░ ▒░▓ ░░░ ▒░ ░ +# ░ ▒ ░ ░▒ ░ ░ ░ ▒ ▒ ░ ▒ ▒░ ▒ ░ ░ ░ ░░ ░ ▒░░ ░▒ ░ ░ ░ ▒ ▒ ▒▒ ░░ ░ ▒ ░ ░ ░ ░ +#░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ▒ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ▒ ░ ░ ░ +#░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ +#░ ░ ░ Description: - Author: V. Agudetse + Author: J. Ramon +Info: downscaling of seasonal predictions from coarse to fine grids Analysis: Horizon: Seasonal Variables: name: tas - freq: monthly_mean + freq: daily_mean Datasets: System: name: system5c3s @@ -13,32 +24,33 @@ Analysis: Reference: name: era5 Time: - sdate: '0601' - fcst_year: '2020' - hcst_start: '1993' - hcst_end: '2006' + sdate: '0501' + hcst_start: '2000' + hcst_end: '2004' ftime_min: 1 ftime_max: 3 +#sometimes we want the region for the obs to be bigger than for hcst Region: - latmin: -10 - latmax: 10 - lonmin: 0 - lonmax: 20 - Regrid: - method: bilinear - type: to_system - Workflow: - Calibration: - method: raw - Skill: - metric: RPSS_specs BSS90_specs EnsCorr_specs FRPS_specs FRPSS_specs BSS10_specs FRPS - Probabilities: - percentiles: [[1/3, 2/3]] - Indicators: - index: no + latmin: 34.1 + latmax: 45.1 + lonmin: -12.5 + lonmax: 6.35 + Regrid: + type: none + Workflow: + Downscaling: + # Assumption 1: leave-one-out cross-validation is always applied + # TO DO: add downscaling to point locations + # TO DO: how can we pass the parameter 'predictors'? + type: # mandatory, 'none', 'int', 'intbc', 'intlr', 'analogs', 'logres' + int_method: # optional, regridding method accepted by CDO + bc_method: # optional, 'simple_bias', 'calibration', 'quantile_mapping' + lr_method: # optional, 'basic', 'large_scale', '4nn' + target_grid: # optional, nc file or grid accepted by CDO + nanalogs: # optional, number of analogs to be searched Output_format: S2S4E Run: Loglevel: INFO Terminal: yes - output_dir: /esarchive/scratch/vagudets/repos/auto-s2s/out-logs/ - code_dir: /esarchive/scratch/vagudets/repos/auto-s2s/ + output_dir: /esarchive/scratch/jramon/GitLab_jramon/auto-s2s/out-logs/ + code_dir: /esarchive/scratch/jramon/GitLab_jramon/auto-s2s/ diff --git a/modules/test_seasonal.R b/modules/test_seasonal.R index 5f59794f..b9f94b13 100644 --- a/modules/test_seasonal.R +++ b/modules/test_seasonal.R @@ -1,11 +1,12 @@ +setwd("/esarchive/scratch/jramon/GitLab_jramon/auto-s2s/") source("modules/Loading/Loading.R") source("modules/Calibration/Calibration.R") source("modules/Skill/Skill.R") source("modules/Saving/Saving.R") source("modules/Visualization/Visualization.R") -recipe_file <- "modules/Loading/testing_recipes/recipe_system7c3s-tas.yml" +recipe_file <- "modules/Loading/testing_recipes/recipe_system5c3s-tas.yml" recipe <- read_yaml(recipe_file) archive <- read_yaml(paste0(recipe$Run$code_dir, "conf/archive.yml"))$archive diff --git a/modules/test_seasonal_downscaling.R b/modules/test_seasonal_downscaling.R new file mode 100644 index 00000000..ec1d2f2e --- /dev/null +++ b/modules/test_seasonal_downscaling.R @@ -0,0 +1,27 @@ + +# DO source ../MODULES before opening the R session + +setwd("/esarchive/scratch/jramon/GitLab_jramon/auto-s2s/") +source("modules/Loading/Loading.R") +source("modules/Calibration/Calibration.R") +source("modules/Skill/Skill.R") +source("modules/Saving/Saving.R") +source("modules/Visualization/Visualization.R") + +recipe_file <- "modules/Loading/testing_recipes/recipe_system5c3s-tas.yml" +recipe <- read_yaml(recipe_file) +archive <- read_yaml(paste0(recipe$Run$code_dir, "conf/archive.yml"))$archive + +# Load datasets +data <- load_datasets(recipe_file) +# Calibrate datasets +calibrated_data <- calibrate_datasets(data, recipe) +# Compute skill metrics +skill_metrics <- compute_skill_metrics(calibrated_data$hcst, data$obs, recipe) +# Compute percentiles and probability bins +probabilities <- compute_probabilities(calibrated_data$hcst, recipe) +# Export all data to netCDF +save_data(recipe, archive, data, calibrated_data, skill_metrics, probabilities) +# Plot data +plot_data(recipe, archive, data, calibrated_data, skill_metrics, + probabilities, significance = T) -- GitLab From 0052980a4b978b76823d93afe0b716419dbed043 Mon Sep 17 00:00:00 2001 From: Jaume Ramon Date: Fri, 28 Oct 2022 15:09:28 +0200 Subject: [PATCH 002/388] Downscaling module v0 --- modules/Downscaling/Downscaling.R | 299 ++++++++++++++++++++---------- 1 file changed, 198 insertions(+), 101 deletions(-) diff --git a/modules/Downscaling/Downscaling.R b/modules/Downscaling/Downscaling.R index 11c57a2a..8ff8dee9 100644 --- a/modules/Downscaling/Downscaling.R +++ b/modules/Downscaling/Downscaling.R @@ -1,4 +1,13 @@ - +# ▄████▄ ██████ ▓█████▄ ▒█████ █ █░███▄ █ ██████ ▄████▄ ▄▄▄ ██▓ ▓█████ +#▒██▀ ▀█ ▒██ ▒ ▒██▀ ██▌▒██▒ ██▒▓█░ █ ░█░██ ▀█ █ ▒██ ▒ ▒██▀ ▀█ ▒████▄ ▓██▒ ▓█ ▀ +#▒▓█ ▄ ░ ▓██▄ ░██ █▌▒██░ ██▒▒█░ █ ░█▓██ ▀█ ██▒░ ▓██▄ ▒▓█ ▄ ▒██ ▀█▄ ▒██░ ▒███ +#▒▓▓▄ ▄██▒ ▒ ██▒░▓█▄ ▌▒██ ██░░█░ █ ░█▓██▒ ▐▌██▒ ▒ ██▒▒▓▓▄ ▄██▒░██▄▄▄▄██ ▒██░ ▒▓█ ▄ +#▒ ▓███▀ ░▒██████▒▒░▒████▓ ░ ████▓▒░░░██▒██▓▒██░ ▓██░▒██████▒▒▒ ▓███▀ ░ ▓█ ▓██▒░██████▒░▒████▒ +#░ ░▒ ▒ ░▒ ▒▓▒ ▒ ░ ▒▒▓ ▒ ░ ▒░▒░▒░ ░ ▓░▒ ▒ ░ ▒░ ▒ ▒ ▒ ▒▓▒ ▒ ░░ ░▒ ▒ ░ ▒▒ ▓▒█░░ ▒░▓ ░░░ ▒░ ░ +# ░ ▒ ░ ░▒ ░ ░ ░ ▒ ▒ ░ ▒ ▒░ ▒ ░ ░ ░ ░░ ░ ▒░░ ░▒ ░ ░ ░ ▒ ▒ ▒▒ ░░ ░ ▒ ░ ░ ░ ░ +#░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ▒ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ▒ ░ ░ ░ +#░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ +#░ ░ ░ ## TODO: Remove once CSDownscale is on CRAN source('/esarchive/scratch/jramon/GitLab_jramon/downscaling/csdownscale/R/Interpolation.R') source('/esarchive/scratch/jramon/GitLab_jramon/downscaling/csdownscale/R/Intbc.R') @@ -16,7 +25,7 @@ downscale_datasets <- function(data, recipe) { # data: list of s2dv_cube objects containing the hcst, obs and fcst. # recipe: object obtained when passing the .yml recipe file to read_yaml() - type <- tolower(recipe$Analysis$Workflow$Downscaling[["type"]]) + type <- tolower(recipe$Analysis$Workflow$Downscaling$type) if (!is.null(data$fcst)) { warning("The downscaling will be only performed to the hindcast data") @@ -30,118 +39,206 @@ downscale_datasets <- function(data, recipe) { } else { # Downscaling function params - int_method <- tolower(recipe$Analysis$Workflow$Downscaling[["int_method"]]) - bc_method <- tolower(recipe$Analysis$Workflow$Downscaling[["bc_method"]]) - lr_method <- tolower(recipe$Analysis$Workflow$Downscaling[["lr_method"]]) - target_grid <- tolower(recipe$Analysis$Workflow$Downscaling[["target_grid"]]) - nanalogs <- tolower(recipe$Analysis$Workflow$Downscaling[["nanalogs"]]) - + int_method <- tolower(recipe$Analysis$Workflow$Downscaling$int_method) + bc_method <- tolower(recipe$Analysis$Workflow$Downscaling$bc_method) + lr_method <- tolower(recipe$Analysis$Workflow$Downscaling$lr_method) + log_reg_method <- tolower(recipe$Analysis$Workflow$Downscaling$log_reg_method) + target_grid <- tolower(recipe$Analysis$Workflow$Downscaling$target_grid) + nanalogs <- tolower(recipe$Analysis$Workflow$Downscaling$nanalog) + if (is.null(recipe$Analysis$ncores)) { ncores <- 1 } else { ncores <- recipe$Analysis$ncores } - + + #TO DO: add the parametre loocv where it corresponds if (is.null(recipe$Analysis$loocv)) { loocv <- TRUE } else { loocv <- recipe$Analysis$loocv } - if (is.null(recipe$Analysis$remove_NAs)) { - na.rm = F - } else { - na.rm = recipe$Analysis$remove_NAs - } - - CALIB_MSG <- "##### CALIBRATION COMPLETE #####" - # Replicate observation array for the multi-model case - if (mm) { - obs.mm <- obs$data - for(dat in 1:(dim(data$hcst$data)['dat'][[1]]-1)) { - obs.mm <- abind(obs.mm, data$obs$data, - along=which(names(dim(data$obs$data)) == 'dat')) - } - names(dim(obs.mm)) <- names(dim(obs$data)) - data$obs$data <- obs.mm - remove(obs.mm) - } - - if (recipe$Analysis$Variables$freq == "monthly_mean") { + DOWNSCAL_TYPES <- c("none", "int", "intbc", "intlr", "analogs", "logres") + BC_METHODS <- c("simple_bias", "calibration", "quantile_mapping") + LR_METHODS <- c("basic", "large_scale", "4nn") + LOG_REG_METHODS <- c("ens_mean", "ens_mean_sd", "sorted_members") + + if (!(type %in% DOWNSCAL_TYPES)) { + stop("Downscaling type in the recipe is not available. Accepted types ", + "are 'none', 'int', 'intbc', 'intlr', 'analogs', 'logres'.") + } + + if (type == "int") { + if (is.null(int_method)) { + stop("Please provide one interpolation method in the recipe.") + } + + if (is.null(target_grid)) { + stop("Please provide the target grid in the recipe.") + } + + hcst_downscal <- CST_Interpolation(data$hcst$data, + points = NULL, + method_remap = int_method, + target_grid = target_grid, + lat_dim = "latitude", + lon_dim = "longitude", + region = NULL, + method_point_interp = NULL) + + + DOWNSCAL_MSG <- "##### DOWNSCALING COMPLETE #####" + } else if (type == "intbc") { + if (is.null(int_method)) { + stop("Please provide one interpolation method in the recipe.") + } + + + if (is.null(bc_method)) { + stop("Please provide one bias-correction method in the recipe. Accepted ", + "methods are 'simple_bias', 'calibration', 'quantile_mapping'.") + } + + if (is.null(target_grid)) { + stop("Please provide the target grid in the recipe.") + } + + if (!(bc_method %in% BC_METHODS)) { + stop("Bias-correction method in the recipe is not available. Accepted methods ", + "are 'simple_bias', 'calibration', 'quantile_mapping'.") + } + + hcst_downscal <- CST_Intbc(data$hcst$data, data$obs$data, + target_grid = target_grid, + bc_method = bc_method, + int_method = int_method, + points = NULL, + method_point_interp = NULL, + lat_dim = "latitude", + lon_dim = "longitude", + sdate_dim = "syear", + member_dim = "ensemble", + region = NULL, + ncores = ncores) - CST_CALIB_METHODS <- c("bias", "evmos", "mse_min", "crps_min", "rpc-based") - ## TODO: implement other calibration methods - ## TODO: Restructure the code? - if (!(method %in% CST_CALIB_METHODS)) { - stop("Calibration method in the recipe is not available for monthly", - " data.") - } else { - ## Alba's version of CST_Calibration (pending merge) is being used - # Calibrate the hindcast - hcst_calibrated <- CST_Calibration(data$hcst, data$obs, - cal.method = method, - eval.method = "leave-one-out", - multi.model = mm, - na.fill = TRUE, - na.rm = na.rm, - apply_to = NULL, - alpha = NULL, - memb_dim = "ensemble", - sdate_dim = "syear", - ncores = ncores) - if (!is.null(data$fcst)) { - # Calibrate the forecast - fcst_calibrated <- CST_Calibration(data$hcst, data$obs, data$fcst, - cal.method = method, - eval.method = "leave-one-out", - multi.model = mm, - na.fill = TRUE, - na.rm = na.rm, - apply_to = NULL, - alpha = NULL, - memb_dim = "ensemble", - sdate_dim = "syear", - ncores = ncores) - } else { - fcst_calibrated <- NULL + DOWNSCAL_MSG <- "##### DOWNSCALING COMPLETE #####" + } else if (type == "intlr") { + + if (is.null(int_method)) { + stop("Please provide one interpolation method in the recipe.") + } + + if (is.null(lr_method)) { + stop("Please provide one linear regression method in the recipe. Accepted ", + "methods are 'basic', 'large_scale', '4nn'.") + } + + if (is.null(target_grid)) { + stop("Please provide the target grid in the recipe.") + } + + if (!(lr_method %in% LR_METHODS)) { + stop("Linear regression method in the recipe is not available. Accepted methods ", + "are 'basic', 'large_scale', '4nn'.") + } + + # TO DO: add the possibility to have the element 'pred' in 'data' + if (lr_method == "large_scale") { + if (is.null(data$pred$data)) { + stop("Please provide the large scale predictors in the element 'data$pred$data'.") } - } - } else if (recipe$Analysis$Variables$freq == "daily_mean") { - # Daily data calibration using Quantile Mapping - if (!(method %in% c("qmap"))) { - stop("Calibration method in the recipe is not available at daily ", - "frequency. Only quantile mapping 'qmap' is implemented.") - } - # Calibrate the hindcast - hcst_calibrated <- CST_QuantileMapping(data$hcst, data$obs, - exp_cor = NULL, - sample_dims = c("syear", - "time", - "ensemble"), - sample_length = NULL, - method = "QUANT", - wet.day = FALSE, - ncores = ncores, - na.rm = na.rm) - - if (!is.null(data$fcst)) { - # Calibrate the forecast - fcst_calibrated <- CST_QuantileMapping(data$hcst, data$obs, - exp_cor = data$fcst, - sample_dims = c("syear", - "time", - "ensemble"), - sample_length = NULL, - method = "QUANT", - wet.day = FALSE, - ncores = ncores, - na.rm = na.rm) } else { - fcst_calibrated <- NULL + data$pred$data <- NULL + } + + if (is.null(target_grid)) { + stop("Please provide the target grid in the recipe.") + } + if (is.null(target_grid)) { + stop("Please provide the target grid in the recipe.") } + + + hcst_downscal <- CST_Intlr(data$hcst$data, data$obs$data, + lr_method = lr_method, + target_grid = target_grid, + points = NULL, + int_method = int_method, + method_point_interp = NULL, + predictors = data$pred$data, + lat_dim = "latitude", + lon_dim = "longitude", + sdate_dim = "syear", + time_dim = "time", + large_scale_predictor_dimname = 'vars', + loocv = loocv, + region = NULL, + ncores = ncores) + + DOWNSCAL_MSG <- "##### DOWNSCALING COMPLETE #####" + } else if (type == "analogs") { + + if (is.null(nanalogs)) { + warning("The number of analogs for searching has not been provided in the ", + "recipe. Setting it to 3.") + nanalogs <- 3 + } + + hcst_downscal <- CST_Analogs(data$hcst$data, data$obs$data, + grid_exp = data$hcst$source_files[1], + nanalogs = nanalogs, + fun_analog = NULL, + lat_dim = "latitude", + lon_dim = "longitude", + sdate_dim = "syear", + time_dim = "time", + region = NULL, + return_indices = FALSE, + loocv_window = loocv, + ncores = ncores) + + DOWNSCAL_MSG <- "##### DOWNSCALING COMPLETE #####" + } else if (type == "logres") { + + if (is.null(int_method)) { + stop("Please provide one interpolation method in the recipe.") + } + + if (is.null(log_reg_method)) { + stop("Please provide one logistic regression method in the recipe. Accepted ", + "methods are 'ens_mean', 'ens_mean_sd', 'sorted_members'.") + } + + if (is.null(target_grid)) { + stop("Please provide the target grid in the recipe.") + } + + if (!(log_reg_method %in% LOG_REG_METHODS)) { + stop("Logistic regression method in the recipe is not available. Accepted methods ", + "are 'ens_mean', 'ens_mean_sd', 'sorted_members'.") + } + + hcst_downscal <- CST_LogisticReg(data$hcst$data, data$obs$data, + target_grid = target_grid, + int_method = int_method, + log_reg_method = log_reg_method, + probs_cat = c(1/3,2/3), + return_most_likely_cat = FALSE, + points = NULL, + method_point_interp = NULL, + lat_dim = "latitude", + lon_dim = "longitude", + sdate_dim = "syear", + member_dim = "ensemble", + region = NULL, + loocv = loocv, + ncores = ncores) + + DOWNSCAL_MSG <- "##### DOWNSCALING COMPLETE #####" } - } -print(CALIB_MSG) - ## TODO: Return observations too? - return(list(hcst = hcst_calibrated, fcst = fcst_calibrated)) -} + + print(DOWNSCAL_MSG) + return(list(hcst = hcst_downscal, fcst = NULL)) +} + -- GitLab From 4a59cf73766e0d92544c069cd89fe6914330ecb2 Mon Sep 17 00:00:00 2001 From: Jaume Ramon Date: Wed, 2 Nov 2022 11:01:29 +0100 Subject: [PATCH 003/388] . --- .../testing_recipes/recipe_system5c3s-tas.yml | 61 ++++++++----------- .../recipe_system5c3s-tas_downscaling.yml | 57 +++++++++++++++++ modules/test_seasonal.R | 2 +- 3 files changed, 83 insertions(+), 37 deletions(-) create mode 100644 modules/Loading/testing_recipes/recipe_system5c3s-tas_downscaling.yml diff --git a/modules/Loading/testing_recipes/recipe_system5c3s-tas.yml b/modules/Loading/testing_recipes/recipe_system5c3s-tas.yml index 15159553..38e23c8b 100644 --- a/modules/Loading/testing_recipes/recipe_system5c3s-tas.yml +++ b/modules/Loading/testing_recipes/recipe_system5c3s-tas.yml @@ -1,22 +1,11 @@ -# ▄████▄ ██████ ▓█████▄ ▒█████ █ █░███▄ █ ██████ ▄████▄ ▄▄▄ ██▓ ▓█████ -#▒██▀ ▀█ ▒██ ▒ ▒██▀ ██▌▒██▒ ██▒▓█░ █ ░█░██ ▀█ █ ▒██ ▒ ▒██▀ ▀█ ▒████▄ ▓██▒ ▓█ ▀ -#▒▓█ ▄ ░ ▓██▄ ░██ █▌▒██░ ██▒▒█░ █ ░█▓██ ▀█ ██▒░ ▓██▄ ▒▓█ ▄ ▒██ ▀█▄ ▒██░ ▒███ -#▒▓▓▄ ▄██▒ ▒ ██▒░▓█▄ ▌▒██ ██░░█░ █ ░█▓██▒ ▐▌██▒ ▒ ██▒▒▓▓▄ ▄██▒░██▄▄▄▄██ ▒██░ ▒▓█ ▄ -#▒ ▓███▀ ░▒██████▒▒░▒████▓ ░ ████▓▒░░░██▒██▓▒██░ ▓██░▒██████▒▒▒ ▓███▀ ░ ▓█ ▓██▒░██████▒░▒████▒ -#░ ░▒ ▒ ░▒ ▒▓▒ ▒ ░ ▒▒▓ ▒ ░ ▒░▒░▒░ ░ ▓░▒ ▒ ░ ▒░ ▒ ▒ ▒ ▒▓▒ ▒ ░░ ░▒ ▒ ░ ▒▒ ▓▒█░░ ▒░▓ ░░░ ▒░ ░ -# ░ ▒ ░ ░▒ ░ ░ ░ ▒ ▒ ░ ▒ ▒░ ▒ ░ ░ ░ ░░ ░ ▒░░ ░▒ ░ ░ ░ ▒ ▒ ▒▒ ░░ ░ ▒ ░ ░ ░ ░ -#░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ▒ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ▒ ░ ░ ░ -#░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ -#░ ░ ░ Description: - Author: J. Ramon -Info: downscaling of seasonal predictions from coarse to fine grids + Author: V. Agudetse Analysis: Horizon: Seasonal Variables: name: tas - freq: daily_mean + freq: monthly_mean Datasets: System: name: system5c3s @@ -24,33 +13,33 @@ Analysis: Reference: name: era5 Time: - sdate: '0501' - hcst_start: '2000' - hcst_end: '2004' + sdate: '0601' + fcst_year: '2020' + hcst_start: '1993' + hcst_end: '2006' ftime_min: 1 ftime_max: 3 -#sometimes we want the region for the obs to be bigger than for hcst Region: - latmin: 34.1 - latmax: 45.1 - lonmin: -12.5 - lonmax: 6.35 - Regrid: - type: none - Workflow: - Downscaling: - # Assumption 1: leave-one-out cross-validation is always applied - # TO DO: add downscaling to point locations - # TO DO: how can we pass the parameter 'predictors'? - type: # mandatory, 'none', 'int', 'intbc', 'intlr', 'analogs', 'logres' - int_method: # optional, regridding method accepted by CDO - bc_method: # optional, 'simple_bias', 'calibration', 'quantile_mapping' - lr_method: # optional, 'basic', 'large_scale', '4nn' - target_grid: # optional, nc file or grid accepted by CDO - nanalogs: # optional, number of analogs to be searched + latmin: -10 + latmax: 10 + lonmin: 0 + lonmax: 20 + Regrid: + method: bilinear + type: to_system + Workflow: + Calibration: + method: raw + Skill: + metric: RPSS_specs BSS90_specs EnsCorr_specs FRPS_specs FRPSS_specs BSS10_specs FRPS + Probabilities: + percentiles: [[1/3, 2/3]] + Indicators: + index: no Output_format: S2S4E Run: Loglevel: INFO Terminal: yes - output_dir: /esarchive/scratch/jramon/GitLab_jramon/auto-s2s/out-logs/ - code_dir: /esarchive/scratch/jramon/GitLab_jramon/auto-s2s/ + output_dir: /esarchive/scratch/vagudets/repos/auto-s2s/out-logs/ + code_dir: /esarchive/scratch/vagudets/repos/auto-s2s/ + diff --git a/modules/Loading/testing_recipes/recipe_system5c3s-tas_downscaling.yml b/modules/Loading/testing_recipes/recipe_system5c3s-tas_downscaling.yml new file mode 100644 index 00000000..13f4e156 --- /dev/null +++ b/modules/Loading/testing_recipes/recipe_system5c3s-tas_downscaling.yml @@ -0,0 +1,57 @@ +# ▄████▄ ██████ ▓█████▄ ▒█████ █ █░███▄ █ ██████ ▄████▄ ▄▄▄ ██▓ ▓█████ +#▒██▀ ▀█ ▒██ ▒ ▒██▀ ██▌▒██▒ ██▒▓█░ █ ░█░██ ▀█ █ ▒██ ▒ ▒██▀ ▀█ ▒████▄ ▓██▒ ▓█ ▀ +#▒▓█ ▄ ░ ▓██▄ ░██ █▌▒██░ ██▒▒█░ █ ░█▓██ ▀█ ██▒░ ▓██▄ ▒▓█ ▄ ▒██ ▀█▄ ▒██░ ▒███ +#▒▓▓▄ ▄██▒ ▒ ██▒░▓█▄ ▌▒██ ██░░█░ █ ░█▓██▒ ▐▌██▒ ▒ ██▒▒▓▓▄ ▄██▒░██▄▄▄▄██ ▒██░ ▒▓█ ▄ +#▒ ▓███▀ ░▒██████▒▒░▒████▓ ░ ████▓▒░░░██▒██▓▒██░ ▓██░▒██████▒▒▒ ▓███▀ ░ ▓█ ▓██▒░██████▒░▒████▒ +#░ ░▒ ▒ ░▒ ▒▓▒ ▒ ░ ▒▒▓ ▒ ░ ▒░▒░▒░ ░ ▓░▒ ▒ ░ ▒░ ▒ ▒ ▒ ▒▓▒ ▒ ░░ ░▒ ▒ ░ ▒▒ ▓▒█░░ ▒░▓ ░░░ ▒░ ░ +# ░ ▒ ░ ░▒ ░ ░ ░ ▒ ▒ ░ ▒ ▒░ ▒ ░ ░ ░ ░░ ░ ▒░░ ░▒ ░ ░ ░ ▒ ▒ ▒▒ ░░ ░ ▒ ░ ░ ░ ░ +#░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ▒ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ▒ ░ ░ ░ +#░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ +#░ ░ ░ +Description: + Author: J. Ramon +Info: downscaling of seasonal predictions from coarse to fine grids + +Analysis: + Horizon: Seasonal + Variables: + name: tas + freq: daily_mean + Datasets: + System: + name: system5c3s + Multimodel: no + Reference: + name: era5 + Time: + sdate: '0501' + hcst_start: '2000' + hcst_end: '2004' + ftime_min: 1 + ftime_max: 3 +#sometimes we want the region for the obs to be bigger than for hcst + Region: + latmin: 34.1 + latmax: 45.1 + lonmin: -12.5 + lonmax: 6.35 + Regrid: + type: none + Workflow: + Downscaling: + # Assumption 1: leave-one-out cross-validation is always applied + # TO DO: add downscaling to point locations + # TO DO: how can we pass the parameter 'predictors'? + type: # mandatory, 'none', 'int', 'intbc', 'intlr', 'analogs', 'logreg' + int_method: # optional, regridding method accepted by CDO + bc_method: # optional, 'simple_bias', 'calibration', 'quantile_mapping' + lr_method: # optional, 'basic', 'large_scale', '4nn' + log_reg_method: # optional, 'ens_mean', 'ens_mean_sd', 'sorted_members' + target_grid: # optional, nc file or grid accepted by CDO + nanalogs: # optional, number of analogs to be searched + Output_format: S2S4E +Run: + Loglevel: INFO + Terminal: yes + output_dir: /esarchive/scratch/jramon/GitLab_jramon/auto-s2s/out-logs/ + code_dir: /esarchive/scratch/jramon/GitLab_jramon/auto-s2s/ diff --git a/modules/test_seasonal.R b/modules/test_seasonal.R index b9f94b13..58adece6 100644 --- a/modules/test_seasonal.R +++ b/modules/test_seasonal.R @@ -6,7 +6,7 @@ source("modules/Skill/Skill.R") source("modules/Saving/Saving.R") source("modules/Visualization/Visualization.R") -recipe_file <- "modules/Loading/testing_recipes/recipe_system5c3s-tas.yml" +recipe_file <- "modules/Loading/testing_recipes/recipe_system7c3s-tas.yml" recipe <- read_yaml(recipe_file) archive <- read_yaml(paste0(recipe$Run$code_dir, "conf/archive.yml"))$archive -- GitLab From fac2975020bc4efc5504a8fd0ed70bb1f5f56cc3 Mon Sep 17 00:00:00 2001 From: Jaume Ramon Date: Wed, 2 Nov 2022 17:30:21 +0100 Subject: [PATCH 004/388] Downscaling recipe with the downscaling module --- .../testing_recipes/recipe_system5c3s-tas_downscaling.yml | 8 +++++++- modules/test_seasonal_downscaling.R | 7 +++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/modules/Loading/testing_recipes/recipe_system5c3s-tas_downscaling.yml b/modules/Loading/testing_recipes/recipe_system5c3s-tas_downscaling.yml index 13f4e156..8b56f3aa 100644 --- a/modules/Loading/testing_recipes/recipe_system5c3s-tas_downscaling.yml +++ b/modules/Loading/testing_recipes/recipe_system5c3s-tas_downscaling.yml @@ -16,7 +16,7 @@ Analysis: Horizon: Seasonal Variables: name: tas - freq: daily_mean + freq: monthly_mean Datasets: System: name: system5c3s @@ -25,6 +25,7 @@ Analysis: name: era5 Time: sdate: '0501' + fcst_year: '2020' hcst_start: '2000' hcst_end: '2004' ftime_min: 1 @@ -36,8 +37,13 @@ Analysis: lonmin: -12.5 lonmax: 6.35 Regrid: + method: bilinear type: none Workflow: + Calibration: + method: raw + Skill: + metric: RPSS Downscaling: # Assumption 1: leave-one-out cross-validation is always applied # TO DO: add downscaling to point locations diff --git a/modules/test_seasonal_downscaling.R b/modules/test_seasonal_downscaling.R index ec1d2f2e..9043c2a9 100644 --- a/modules/test_seasonal_downscaling.R +++ b/modules/test_seasonal_downscaling.R @@ -3,17 +3,20 @@ setwd("/esarchive/scratch/jramon/GitLab_jramon/auto-s2s/") source("modules/Loading/Loading.R") +source("modules/Loading/Downscaling.R") source("modules/Calibration/Calibration.R") source("modules/Skill/Skill.R") source("modules/Saving/Saving.R") source("modules/Visualization/Visualization.R") -recipe_file <- "modules/Loading/testing_recipes/recipe_system5c3s-tas.yml" +recipe_file <- "modules/Loading/testing_recipes/recipe_system5c3s-tas_downscaling.yml" recipe <- read_yaml(recipe_file) archive <- read_yaml(paste0(recipe$Run$code_dir, "conf/archive.yml"))$archive # Load datasets -data <- load_datasets(recipe_file) +data <- load_datasets(recipe) +# Downscale datasets +downscaled_data <- downscale_datasets(data, recipe) # Calibrate datasets calibrated_data <- calibrate_datasets(data, recipe) # Compute skill metrics -- GitLab From 521489d25a4a1c4b72b73fd112b254b08b2c2b65 Mon Sep 17 00:00:00 2001 From: Jaume Ramon Date: Thu, 10 Nov 2022 12:53:13 +0100 Subject: [PATCH 005/388] module working for Interpolation and Intbc --- modules/Downscaling/Downscaling.R | 223 ++++++++++-------- .../recipe_system5c3s-tas_downscaling.yml | 14 +- modules/test_seasonal_downscaling.R | 24 +- 3 files changed, 134 insertions(+), 127 deletions(-) diff --git a/modules/Downscaling/Downscaling.R b/modules/Downscaling/Downscaling.R index 8ff8dee9..4d3edd2e 100644 --- a/modules/Downscaling/Downscaling.R +++ b/modules/Downscaling/Downscaling.R @@ -18,7 +18,7 @@ source("https://earth.bsc.es/gitlab/external/cstools/-/raw/master/R/CST_BiasCorr ## Entry params data and recipe? -downscale_datasets <- function(data, recipe) { +downscale_datasets <- function(recipe, data) { # Function that downscale the hindcast using the method stated in the # recipe. For the moment, forecast must be null. # @@ -34,17 +34,17 @@ downscale_datasets <- function(data, recipe) { if (type == "none") { - hcst_calibrated <- data$hcst + hcst_downscal <- data$hcst DOWNSCAL_MSG <- "##### NO DOWNSCALING PERFORMED #####" } else { # Downscaling function params - int_method <- tolower(recipe$Analysis$Workflow$Downscaling$int_method) - bc_method <- tolower(recipe$Analysis$Workflow$Downscaling$bc_method) - lr_method <- tolower(recipe$Analysis$Workflow$Downscaling$lr_method) - log_reg_method <- tolower(recipe$Analysis$Workflow$Downscaling$log_reg_method) - target_grid <- tolower(recipe$Analysis$Workflow$Downscaling$target_grid) - nanalogs <- tolower(recipe$Analysis$Workflow$Downscaling$nanalog) + int_methods <- tolower(recipe$Analysis$Workflow$Downscaling$int_method) + bc_methods <- tolower(recipe$Analysis$Workflow$Downscaling$bc_method) + lr_methods <- tolower(recipe$Analysis$Workflow$Downscaling$lr_method) + log_reg_methods <- tolower(recipe$Analysis$Workflow$Downscaling$log_reg_method) + target_grid <- tolower(recipe$Analysis$Workflow$Downscaling$target_grid) + nanalogs <- as.numeric(recipe$Analysis$Workflow$Downscaling$nanalogs) if (is.null(recipe$Analysis$ncores)) { ncores <- 1 @@ -70,32 +70,36 @@ downscale_datasets <- function(data, recipe) { } if (type == "int") { - if (is.null(int_method)) { - stop("Please provide one interpolation method in the recipe.") + if (is.null(int_methods)) { + stop("Please provide one or more interpolation methods in the recipe.") } if (is.null(target_grid)) { stop("Please provide the target grid in the recipe.") } - hcst_downscal <- CST_Interpolation(data$hcst$data, - points = NULL, - method_remap = int_method, - target_grid = target_grid, - lat_dim = "latitude", - lon_dim = "longitude", - region = NULL, - method_point_interp = NULL) - + hcst_downscal <- list() + for (int_method in strsplit(int_methods, ", | |,")[[1]]) { + + hcst_d <- CST_Interpolation(data$hcst, + points = NULL, + method_remap = int_method, + target_grid = target_grid, + lat_dim = "latitude", + lon_dim = "longitude", + region = NULL, + method_point_interp = NULL) + + hcst_downscal[[ int_method ]] <- hcst_d + } DOWNSCAL_MSG <- "##### DOWNSCALING COMPLETE #####" } else if (type == "intbc") { - if (is.null(int_method)) { - stop("Please provide one interpolation method in the recipe.") + if (is.null(int_methods) | (length(strsplit(int_methods, ", | |,")[[1]]) != 1)) { + stop("Please provide one (and only one) interpolation method in the recipe.") } - - if (is.null(bc_method)) { + if (is.null(bc_methods)) { stop("Please provide one bias-correction method in the recipe. Accepted ", "methods are 'simple_bias', 'calibration', 'quantile_mapping'.") } @@ -104,32 +108,38 @@ downscale_datasets <- function(data, recipe) { stop("Please provide the target grid in the recipe.") } - if (!(bc_method %in% BC_METHODS)) { - stop("Bias-correction method in the recipe is not available. Accepted methods ", - "are 'simple_bias', 'calibration', 'quantile_mapping'.") - } - - hcst_downscal <- CST_Intbc(data$hcst$data, data$obs$data, - target_grid = target_grid, - bc_method = bc_method, - int_method = int_method, - points = NULL, - method_point_interp = NULL, - lat_dim = "latitude", - lon_dim = "longitude", - sdate_dim = "syear", - member_dim = "ensemble", - region = NULL, - ncores = ncores) - + hcst_downscal <- list() + for (bc_method in strsplit(bc_methods, ", | |,")[[1]]) { + + if (!(bc_method %in% BC_METHODS)) { + stop(paste0(bc_method, " method in the recipe is not available. Accepted methods ", + "are 'simple_bias', 'calibration', 'quantile_mapping'.")) + } + + hcst_d <- CST_Intbc(data$hcst, data$obs, + target_grid = target_grid, + bc_method = bc_method, + int_method = int_methods, + points = NULL, + method_point_interp = NULL, + lat_dim = "latitude", + lon_dim = "longitude", + sdate_dim = "syear", + member_dim = "ensemble", + region = NULL, + ncores = ncores) + + hcst_downscal[[ bc_method ]] <- hcst_d + } + DOWNSCAL_MSG <- "##### DOWNSCALING COMPLETE #####" } else if (type == "intlr") { - if (is.null(int_method)) { - stop("Please provide one interpolation method in the recipe.") + if (is.null(int_methods) | (length(strsplit(int_methods, ", | |,")[[1]]) != 1)) { + stop("Please provide one (and only one) interpolation method in the recipe.") } - if (is.null(lr_method)) { + if (is.null(lr_methods)) { stop("Please provide one linear regression method in the recipe. Accepted ", "methods are 'basic', 'large_scale', '4nn'.") } @@ -138,44 +148,42 @@ downscale_datasets <- function(data, recipe) { stop("Please provide the target grid in the recipe.") } - if (!(lr_method %in% LR_METHODS)) { - stop("Linear regression method in the recipe is not available. Accepted methods ", - "are 'basic', 'large_scale', '4nn'.") - } + hcst_downscal <- list() + for (lr_method in strsplit(lr_methods, ", | |,")[[1]]) { - # TO DO: add the possibility to have the element 'pred' in 'data' - if (lr_method == "large_scale") { - if (is.null(data$pred$data)) { - stop("Please provide the large scale predictors in the element 'data$pred$data'.") + if (!(lr_method %in% LR_METHODS)) { + stop(paste0(lr_method, " method in the recipe is not available. Accepted methods ", + "are 'basic', 'large_scale', '4nn'.")) } - } else { - data$pred$data <- NULL - } - if (is.null(target_grid)) { - stop("Please provide the target grid in the recipe.") - } - if (is.null(target_grid)) { - stop("Please provide the target grid in the recipe.") - } + # TO DO: add the possibility to have the element 'pred' in 'data' + if (lr_method == "large_scale") { + if (is.null(data$pred$data)) { + stop("Please provide the large scale predictors in the element 'data$pred$data'.") + } + } else { + data$pred$data <- NULL + } + hcst_d <- CST_Intlr(data$hcst, data$obs, + lr_method = lr_method, + target_grid = target_grid, + points = NULL, + int_method = int_methods, + method_point_interp = NULL, + predictors = data$pred$data, + lat_dim = "latitude", + lon_dim = "longitude", + sdate_dim = "syear", + time_dim = "time", + large_scale_predictor_dimname = 'vars', + loocv = loocv, + region = NULL, + ncores = ncores) - hcst_downscal <- CST_Intlr(data$hcst$data, data$obs$data, - lr_method = lr_method, - target_grid = target_grid, - points = NULL, - int_method = int_method, - method_point_interp = NULL, - predictors = data$pred$data, - lat_dim = "latitude", - lon_dim = "longitude", - sdate_dim = "syear", - time_dim = "time", - large_scale_predictor_dimname = 'vars', - loocv = loocv, - region = NULL, - ncores = ncores) - + hcst_downscal[[ lr_method ]] <- hcst_d + } + DOWNSCAL_MSG <- "##### DOWNSCALING COMPLETE #####" } else if (type == "analogs") { @@ -184,8 +192,9 @@ downscale_datasets <- function(data, recipe) { "recipe. Setting it to 3.") nanalogs <- 3 } - - hcst_downscal <- CST_Analogs(data$hcst$data, data$obs$data, + + + hcst_downscal <- CST_Analogs(data$hcst, data$obs, grid_exp = data$hcst$source_files[1], nanalogs = nanalogs, fun_analog = NULL, @@ -201,11 +210,11 @@ downscale_datasets <- function(data, recipe) { DOWNSCAL_MSG <- "##### DOWNSCALING COMPLETE #####" } else if (type == "logres") { - if (is.null(int_method)) { - stop("Please provide one interpolation method in the recipe.") + if (is.null(int_methods) | (length(strsplit(int_methods, ", | |,")[[1]]) != 1)) { + stop("Please provide one (and only one) interpolation method in the recipe.") } - if (is.null(log_reg_method)) { + if (is.null(log_reg_methods)) { stop("Please provide one logistic regression method in the recipe. Accepted ", "methods are 'ens_mean', 'ens_mean_sd', 'sorted_members'.") } @@ -214,31 +223,37 @@ downscale_datasets <- function(data, recipe) { stop("Please provide the target grid in the recipe.") } - if (!(log_reg_method %in% LOG_REG_METHODS)) { - stop("Logistic regression method in the recipe is not available. Accepted methods ", - "are 'ens_mean', 'ens_mean_sd', 'sorted_members'.") - } + hcst_downscal <- list() + for (log_reg_method in strsplit(log_reg_methods, ", | |,")[[1]]) { + + if (!(log_reg_method %in% LOG_REG_METHODS)) { + stop(paste0(log_reg_method, " method in the recipe is not available. Accepted methods ", + "are 'ens_mean', 'ens_mean_sd', 'sorted_members'.")) + } - hcst_downscal <- CST_LogisticReg(data$hcst$data, data$obs$data, - target_grid = target_grid, - int_method = int_method, - log_reg_method = log_reg_method, - probs_cat = c(1/3,2/3), - return_most_likely_cat = FALSE, - points = NULL, - method_point_interp = NULL, - lat_dim = "latitude", - lon_dim = "longitude", - sdate_dim = "syear", - member_dim = "ensemble", - region = NULL, - loocv = loocv, - ncores = ncores) + hcst_d <- CST_LogisticReg(data$hcst, data$obs, + target_grid = target_grid, + int_method = int_methods, + log_reg_method = log_reg_method, + probs_cat = c(1/3,2/3), + return_most_likely_cat = FALSE, + points = NULL, + method_point_interp = NULL, + lat_dim = "latitude", + lon_dim = "longitude", + sdate_dim = "syear", + member_dim = "ensemble", + region = NULL, + loocv = loocv, + ncores = ncores) + + hcst_downscal[[ log_reg_method ]] <- hcst_d + } DOWNSCAL_MSG <- "##### DOWNSCALING COMPLETE #####" } - - print(DOWNSCAL_MSG) - return(list(hcst = hcst_downscal, fcst = NULL)) + } + print(DOWNSCAL_MSG) + return(list(hcst = hcst_downscal, fcst = NULL)) } diff --git a/modules/Loading/testing_recipes/recipe_system5c3s-tas_downscaling.yml b/modules/Loading/testing_recipes/recipe_system5c3s-tas_downscaling.yml index 8b56f3aa..a6549863 100644 --- a/modules/Loading/testing_recipes/recipe_system5c3s-tas_downscaling.yml +++ b/modules/Loading/testing_recipes/recipe_system5c3s-tas_downscaling.yml @@ -25,11 +25,10 @@ Analysis: name: era5 Time: sdate: '0501' - fcst_year: '2020' hcst_start: '2000' hcst_end: '2004' ftime_min: 1 - ftime_max: 3 + ftime_max: 1 #sometimes we want the region for the obs to be bigger than for hcst Region: latmin: 34.1 @@ -43,17 +42,16 @@ Analysis: Calibration: method: raw Skill: - metric: RPSS + metric: RPSS EnsCorr BSS90 Mean_Bias_SS Downscaling: # Assumption 1: leave-one-out cross-validation is always applied # TO DO: add downscaling to point locations - # TO DO: how can we pass the parameter 'predictors'? - type: # mandatory, 'none', 'int', 'intbc', 'intlr', 'analogs', 'logreg' - int_method: # optional, regridding method accepted by CDO - bc_method: # optional, 'simple_bias', 'calibration', 'quantile_mapping' + type: intbc # mandatory, 'none', 'int', 'intbc', 'intlr', 'analogs', 'logreg' + int_method: bilinear # optional, regridding method accepted by CDO + bc_method: simple_bias # optional, 'simple_bias', 'calibration', 'quantile_mapping' lr_method: # optional, 'basic', 'large_scale', '4nn' log_reg_method: # optional, 'ens_mean', 'ens_mean_sd', 'sorted_members' - target_grid: # optional, nc file or grid accepted by CDO + target_grid: /esarchive/recon/ecmwf/era5/monthly_mean/tas_f1h/tas_200002.nc # optional, nc file or grid accepted by CDO nanalogs: # optional, number of analogs to be searched Output_format: S2S4E Run: diff --git a/modules/test_seasonal_downscaling.R b/modules/test_seasonal_downscaling.R index 9043c2a9..2f9ffbd0 100644 --- a/modules/test_seasonal_downscaling.R +++ b/modules/test_seasonal_downscaling.R @@ -1,30 +1,24 @@ -# DO source ../MODULES before opening the R session +# DO source /esarchive/scratch/jramon/GitLab_jramon/auto-s2s/MODULES before opening the R session setwd("/esarchive/scratch/jramon/GitLab_jramon/auto-s2s/") source("modules/Loading/Loading.R") -source("modules/Loading/Downscaling.R") +source("modules/Downscaling/Downscaling.R") source("modules/Calibration/Calibration.R") source("modules/Skill/Skill.R") source("modules/Saving/Saving.R") source("modules/Visualization/Visualization.R") recipe_file <- "modules/Loading/testing_recipes/recipe_system5c3s-tas_downscaling.yml" -recipe <- read_yaml(recipe_file) -archive <- read_yaml(paste0(recipe$Run$code_dir, "conf/archive.yml"))$archive +recipe <- prepare_outputs(recipe_file) +#archive <- read_yaml(paste0(recipe$Run$code_dir, "conf/archive.yml"))$archive # Load datasets data <- load_datasets(recipe) # Downscale datasets -downscaled_data <- downscale_datasets(data, recipe) -# Calibrate datasets -calibrated_data <- calibrate_datasets(data, recipe) -# Compute skill metrics -skill_metrics <- compute_skill_metrics(calibrated_data$hcst, data$obs, recipe) -# Compute percentiles and probability bins -probabilities <- compute_probabilities(calibrated_data$hcst, recipe) -# Export all data to netCDF -save_data(recipe, archive, data, calibrated_data, skill_metrics, probabilities) +downscaled_data <- downscale_datasets(recipe, data) +# Compute skill +skill_metrics <- compute_skill_metrics(recipe, downscaled_data$hcst$simple_bias, data$obs) # Plot data -plot_data(recipe, archive, data, calibrated_data, skill_metrics, - probabilities, significance = T) +plot_data(recipe, calibrated_data = NULL, skill_metrics = NULL, + probabilities = NULL, significance = F) -- GitLab From 71d5f98fb2860b604c35c2553a037c8ab76121a5 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Wed, 23 Nov 2022 14:53:58 +0100 Subject: [PATCH 006/388] Add vitigeoss dict to .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index d95b20cb..ce85ad32 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ out-logs/ +conf/vitigeoss-vars-dict.yml -- GitLab From 1f80bdf61685b8eea370a9f953e284100eae1441 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Wed, 23 Nov 2022 17:15:19 +0100 Subject: [PATCH 007/388] First review of recipe checks (WIP) --- tools/check_recipe.R | 174 +++++++++++++++++++++++-------------------- 1 file changed, 93 insertions(+), 81 deletions(-) diff --git a/tools/check_recipe.R b/tools/check_recipe.R index 25536335..a25c5f80 100644 --- a/tools/check_recipe.R +++ b/tools/check_recipe.R @@ -1,65 +1,70 @@ -check_recipe <- function(recipe, logger) { +check_recipe <- function(recipe) { # recipe: yaml recipe already read it # output: errors or the total number of workflow (vars x regions) to compute - info(logger, paste("Checking recipe", recipe$filename)) + info(recipe$Run$logger, paste("Checking recipe", recipe$name)) # --------------------------------------------------------------------- # ANALYSIS CHECKS # --------------------------------------------------------------------- - TIME_SETTINGS = c('sdate','leadtimemin','leadtimemax','hcst_start','hcst_end') - PARAMS = c('Horizon','Time','Variables','Region','Regrid','Workflow','Datasets') - HORIZONS <- c('Subseasonal','Seasonal','Decadal') + TIME_SETTINGS = c('sdate', 'ftime_min', 'ftime_max', 'hcst_start', 'hcst_end') + PARAMS = c('Horizon', 'Time', 'Variables', 'Region', 'Regrid', 'Workflow', + 'Datasets') + HORIZONS <- c('subseasonal', 'seasonal', 'decadal') - # create output dirs: - if (!any(names(recipe) %in% "Analysis")) { - error(logger, "The recipe should contain an element called 'Analysis'.") + # Check basic elements in recipe:Analysis: + if (!("Analysis" %in% names(recipe))) { + error(recipe$Run$logger, + "The recipe must contain an element called 'Analysis'.") } if (!all(PARAMS %in% names(recipe$Analysis))) { error(logger, - paste("The element 'Analysis' in the recipe should contain these", - "elements:", paste(PARAMS, collapse = " "))) + paste("The element 'Analysis' in the recipe must contain these", + "elements:", paste(PARAMS, collapse = ", "))) } - if (!any(HORIZONS %in% recipe$Analysis$Horizon)) { + if (!any(HORIZONS %in% tolower(recipe$Analysis$Horizon))) { error(logger, - "The element 'Horizon' in the recipe should be one of the followings:", - paste(HORIZONS, collapse = " ")) + "The element 'Horizon' in the recipe must be one of the following:", + paste(HORIZONS, collapse = ", ")) } # Check temporal settings and # count the number of verifications if (!all(TIME_SETTINGS %in% names(recipe$Analysis$Time))) { - error(logger, - paste("The element 'Time' in the recipe should contain these elements:", + error(logger, + paste("The element 'Time' in the recipe must contain these elements:", paste(TIME_SETTINGS, collapse = " "))) } - if (is.null(recipe$Analysis$Time$sdate$fcst_year) || - recipe$Analysis$Time$sdate$fcst_year == 'None') { + ## TODO: Is this needed? + if (is.null(recipe$Analysis$Time$fcst_year) || + recipe$Analysis$Time$fcst_year == 'None') { stream <- "hindcast" - recipe$Analysis$Time$sdate$fcst_year <- 'YYYY' + # recipe$Analysis$Time$fcst_year <- 'YYYY' } else { stream <- "fcst" } - if (length(recipe$Analysis$Time$sdate$fcst_day) > 1 && - tolower(recipe$Analysis$Horizon) != "subseasonal") { + ## TODO: To be implemented in the future + # if (length(recipe$Analysis$Time$sdate$fcst_day) > 1 && + # tolower(recipe$Analysis$Horizon) != "subseasonal") { + # warn(logger, + # paste("Only subseasonal verification allows multiple forecast days."), + # "Element fcst_day in recipe set as 1.") + # recipe$Analysis$Time$sdate$fcst_day <- '01' + # } + ## TODO: Delete, this parameter was deprecated + # if (is.null(recipe$Analysis$Time$sdate$fcst_sday)) { + # error(logger, + # paste("The element 'fcst_sday' in the recipe should be defined.")) + # } + if (is.null(recipe$Analysis$Time$fcst_syear)) { warn(logger, - paste("Only subseasonal verification allows multiple forecast days."), - "Element fcst_day in recipe set as 1.") - recipe$Analysis$Time$sdate$fcst_day <- '01' + paste("The element 'fcst_year' is not defined in the recipe. + No forecast year will be used.")) } - if (is.null(recipe$Analysis$Time$sdate$fcst_sday)) { - error(logger, - paste("The element 'fcst_sday' in the recipe should be defined.")) - } - if (is.null(recipe$Analysis$Time$sdate$fcst_syear)) { - error(logger, - paste("The element 'fcst_syear' in the recipe should be defined.")) - } - - + ## TODO: Move this inside 'if'? fcst.sdate <- NULL for (syear in recipe$Analysis$Time$sdate$fcst_syear) { for (sday in recipe$Analysis$Time$sdate$fcst_sday) { @@ -72,22 +77,23 @@ check_recipe <- function(recipe, logger) { # Regrid checks: if (length(recipe$Analysis$Regrid) != 2) { error(logger, - "The 'Regrid' element should specified the 'method' and 'type'.") + "The 'Regrid' element should specify the 'method' and 'type'.") stop("EXECUTION FAILED") } -# more checks + # TODO: Add Workflow checks? # ... # calculate number of workflows to create for each variable and if (length(recipe$Analysis$Horizon) > 1) { - error(logger, "Only 1 Horizon can be specified in the recipe") - stop("EXECUTION FAILED") - } - nvar <- length(recipe$Analysis$Variables) - if (nvar > 2) { - error(logger, - "Only two type of Variables can be listed: ECVs and Indicators.") + error(logger, "Only one single Horizon can be specified in the recipe") stop("EXECUTION FAILED") } + ## TODO: Refine this + # nvar <- length(recipe$Analysis$Variables) + # if (nvar > 2) { + # error(logger, + # "Only two type of Variables can be listed: ECVs and Indicators.") + # stop("EXECUTION FAILED") + # } # remove NULL or None Indicators or ECVs from the recipe: if (!is.null(recipe$Analysis$Variables$Indicators) && !is.list(recipe$Analysis$Variables$Indicators)) { @@ -100,41 +106,44 @@ check_recipe <- function(recipe, logger) { -which(names(recipe$Analysis$Variables) == 'ECVs')] } # Only one Calibration method allowed: + ## TODO: Make sure this condition is correctly written if ((is.logical(recipe$Analysis$Workflow$Calibration[[1]]) && - recipe$Analysis$Workflow$Calibration[[1]] == FALSE) || - recipe$Analysis$Workflow$Calibration[[1]] == 'None' || - is.null(recipe$Analysis$Workflow$Calibration[[1]])) { + recipe$Analysis$Workflow$Calibration[[1]] == FALSE) || + recipe$Analysis$Workflow$Calibration[[1]] == 'None' || + is.null(recipe$Analysis$Workflow$Calibration[[1]])) { warn(logger, "There is no Calibration method selected, raw data verification.") - recipe$Analysis$Workflow$Calibration[[1]] <- FALSE + recipe$Analysis$Workflow$Calibration[[1]] <- 'raw' } else { # remove multiple calibration methods if (is.null(names(recipe$Analysis$Workflow$Calibration))) { error(logger, - "The 'Calibration' element should specified at least the 'method'.") + "The 'Calibration' element 'method' must be specified.") stop("EXECUTION FAILED") } } if ("Region" %in% names(recipe$Analysis)) { - nregions <- length(recipe$Analysis$Region$Regional) limits <- c('latmin', 'latmax', 'lonmin', 'lonmax') - for (i in 1:length(recipe$Analysis$Region)) { - if (!all(limits %in% names(recipe$Analysis$Region[[i]]))) { - limits <- paste(limits, collapse = " ") - error(logger, - paste("Each region defined in element 'Regional'", - "should have 4 elements:", - limits)) - stop("EXECUTION FAILED") - } - # are numeric? class list mode list + if (!all(limits %in% names(recipe$Analysis$Region))) { + error(recipe$Run$logger, paste("There must be 4 elements in 'Region':", + limits)) } + ## TODO: Implement multiple regions + # nregions <- length(recipe$Analysis$Region$Regional) + # for (i in 1:length(recipe$Analysis$Region)) { + # if (!all(limits %in% names(recipe$Analysis$Region[[i]]))) { + # limits <- paste(limits, collapse = " ") + # error(logger, + # paste("Each region defined in element 'Regional'", + # "should have 4 elements:", + # limits)) + # stop("EXECUTION FAILED") + # } + # # are numeric? class list mode list + # } } else { - error(logger, - paste("'Region'", - "should be defined", - limits)) + error(recipe$Run$logger, "'Region' must be defined.") stop("EXECUTION FAILED") } @@ -142,39 +151,42 @@ check_recipe <- function(recipe, logger) { # RUN CHECKS # --------------------------------------------------------------------- - RUN_FIELDS = c("Loglevel","Terminal","output_dir","code_dir") - LOG_LEVELS = c("INFO","DEBUG","WARNING","ERROR") + RUN_FIELDS = c("Loglevel", "Terminal", "output_dir", "code_dir") + LOG_LEVELS = c("INFO", "DEBUG", "WARN", "ERROR", "FATAL") - if (!any(names(recipe) %in% "Run")) { - error(logger, "The recipe should contain an element called 'Run'.") + if (!("Run" %in% names(recipe))) { + stop("The recipe must contain an element named 'Run'.") } if (!all(RUN_FIELDS %in% names(recipe$Run))) { - error(logger, paste0("Run should contain the fields: ", - paste(RUN_FIELDS,collapse=", "), ".")) + error(recipe$Run$logger, paste("Recipe element 'Run' must contain", + "all of the following fields:", + paste(RUN_FIELDS, collapse=", "), ".")) } if (!is.character(recipe$Run$output_dir)) { - error(logger, - paste("The Run element 'output_dir' in", recipe$filename,"file ", + error(recipe$Run$logger, + paste("The Run element 'output_dir' in", recipe$name, "file ", "should be a character string indicating the path ", - "where to save the outputs.")) + "where the outputs should be saved.")) } if (!is.character(recipe$Run$code_dir)) { - error(logger, - paste("The Run element 'code_dir' in", recipe$filename,"file ", + error(recipe$Run$logger, + paste("The Run element 'code_dir' in", recipe$name, "file ", "should be a character string indicating the path ", "where the code is.")) } if (!is.logical(recipe$Run$Terminal)) { - error(logger, - paste("The Run element 'Terminal' in", recipe$filename,"file ", - "should be a boolean value indicating wether to print or not the log", - "in the terminal.")) + error(recipe$Run$logger, + paste("The Run element 'Terminal' in", recipe$filename, "file ", + "should be a boolean value indicating whether or not to", + "print the logs in the terminal.")) } - if (!is.character(recipe$Run$Loglevel) || !any(recipe$Run$Loglevel %in% LOG_LEVELS)) { + ## TODO: Review this case, since default value is allowed + if (!is.character(recipe$Run$Loglevel) || + !any(recipe$Run$Loglevel %in% LOG_LEVELS)) { error(logger, - paste("The Run element 'Loglevel' in", recipe$filename,"file ", - "should be a character string indicating one of the levels available: ", - paste0(LOG_LEVELS,collapse='/'))) + paste("The Run element 'Loglevel' in", recipe$name, "file ", + "should be a character string specifying one of the levels available: ", + paste0(LOG_LEVELS, collapse='/'))) } # --------------------------------------------------------------------- -- GitLab From 3680e1cbca0c88df9d880a8e55a9b3fe69bb72e2 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Fri, 25 Nov 2022 10:20:18 +0100 Subject: [PATCH 008/388] Update check_recipe() --- .../testing_recipes/wrong_recipe_example.yml | 44 +++++++ tools/check_recipe.R | 124 +++++++++++------- 2 files changed, 117 insertions(+), 51 deletions(-) create mode 100644 modules/Loading/testing_recipes/wrong_recipe_example.yml diff --git a/modules/Loading/testing_recipes/wrong_recipe_example.yml b/modules/Loading/testing_recipes/wrong_recipe_example.yml new file mode 100644 index 00000000..e5d59ad8 --- /dev/null +++ b/modules/Loading/testing_recipes/wrong_recipe_example.yml @@ -0,0 +1,44 @@ +Description: + Author: V. Agudetse + Info: Incomplete recipe with incorrect fields to test the recipe checker. + +Analysis: + Horizon: Seasoning + Variables: + name: tas + freq: monthly_mean + Petaflops: + System: + name: system7c3s + Multimodel: False + Reference: + name: era5 + Time: + sdate: '1101' + fcst_year: '2020' + hcst_start: '1993' + hcst_end: '2016' + ftime_max: 6 + Region: + latmax: 10 + lonmin: 0 + lonmax: 20 + Regrid: + method: bilinear + type: to_system + Workflow: + Calibration: + method: + Skill: + metric: RPS RPSS + Probabilities: + percentiles: [[1/3, 2/3], [1/10, 9/10], [1/4, 2/4, 3/4]] + Indicators: + index: no + ncores: 7 + remove_NAs: yes + Output_format: S2S4E +Run: + Loglevel: INFO + Terminal: yes + output_dir: /esarchive/scratch/vagudets/repos/auto-s2s/out-logs/ diff --git a/tools/check_recipe.R b/tools/check_recipe.R index a25c5f80..dbbfd665 100644 --- a/tools/check_recipe.R +++ b/tools/check_recipe.R @@ -3,7 +3,7 @@ check_recipe <- function(recipe) { # recipe: yaml recipe already read it # output: errors or the total number of workflow (vars x regions) to compute - info(recipe$Run$logger, paste("Checking recipe", recipe$name)) + info(recipe$Run$logger, paste("Checking recipe:", recipe$name)) # --------------------------------------------------------------------- # ANALYSIS CHECKS @@ -13,30 +13,36 @@ check_recipe <- function(recipe) { PARAMS = c('Horizon', 'Time', 'Variables', 'Region', 'Regrid', 'Workflow', 'Datasets') HORIZONS <- c('subseasonal', 'seasonal', 'decadal') + # Define error status variable + error_status <- F # Check basic elements in recipe:Analysis: if (!("Analysis" %in% names(recipe))) { error(recipe$Run$logger, "The recipe must contain an element called 'Analysis'.") + error_status <- T } if (!all(PARAMS %in% names(recipe$Analysis))) { - error(logger, - paste("The element 'Analysis' in the recipe must contain these", - "elements:", paste(PARAMS, collapse = ", "))) + error(recipe$Run$logger, + paste0("The element 'Analysis' in the recipe must contain all of ", + "the following: ", paste(PARAMS, collapse = ", "), ".")) + error_status <- T } if (!any(HORIZONS %in% tolower(recipe$Analysis$Horizon))) { - error(logger, - "The element 'Horizon' in the recipe must be one of the following:", - paste(HORIZONS, collapse = ", ")) + error(recipe$Run$logger, + paste0("The element 'Horizon' in the recipe must be one of the ", + "following: ", paste(HORIZONS, collapse = ", "), ".")) + error_status <- T } # Check temporal settings and # count the number of verifications if (!all(TIME_SETTINGS %in% names(recipe$Analysis$Time))) { - error(logger, - paste("The element 'Time' in the recipe must contain these elements:", - paste(TIME_SETTINGS, collapse = " "))) + error(recipe$Run$logger, + paste0("The element 'Time' in the recipe must contain all of the ", + "following: ", paste(TIME_SETTINGS, collapse = ", "), ".")) + error_status <- T } ## TODO: Is this needed? if (is.null(recipe$Analysis$Time$fcst_year) || @@ -49,48 +55,49 @@ check_recipe <- function(recipe) { ## TODO: To be implemented in the future # if (length(recipe$Analysis$Time$sdate$fcst_day) > 1 && # tolower(recipe$Analysis$Horizon) != "subseasonal") { - # warn(logger, + # warn(recipe$Run$logger, # paste("Only subseasonal verification allows multiple forecast days."), # "Element fcst_day in recipe set as 1.") # recipe$Analysis$Time$sdate$fcst_day <- '01' # } ## TODO: Delete, this parameter was deprecated # if (is.null(recipe$Analysis$Time$sdate$fcst_sday)) { - # error(logger, + # error(recipe$Run$logger, # paste("The element 'fcst_sday' in the recipe should be defined.")) # } - if (is.null(recipe$Analysis$Time$fcst_syear)) { - warn(logger, - paste("The element 'fcst_year' is not defined in the recipe. - No forecast year will be used.")) + if (is.null(recipe$Analysis$Time$fcst_year)) { + warn(recipe$Run$logger, + paste("The element 'fcst_year' is not defined in the recipe.", + "No forecast year will be used.")) } - ## TODO: Move this inside 'if'? + ## TODO: Adapt and move this inside 'if'? fcst.sdate <- NULL - for (syear in recipe$Analysis$Time$sdate$fcst_syear) { - for (sday in recipe$Analysis$Time$sdate$fcst_sday) { - fcst.sdate <- c(fcst.sdate, - paste0(syear, - sprintf("%04d", as.numeric(sday)))) - } + for (syear in recipe$Analysis$Time$fcst_year) { + for (sday in recipe$Analysis$Time$sdate) { + fcst.sdate <- c(fcst.sdate, + paste0(syear, + sprintf("%04d", as.numeric(sday)))) + } } fcst.sdate <- list(stream = stream, fcst.sdate = fcst.sdate) # Regrid checks: if (length(recipe$Analysis$Regrid) != 2) { - error(logger, - "The 'Regrid' element should specify the 'method' and 'type'.") - stop("EXECUTION FAILED") + error(recipe$Run$logger, + "The 'Regrid' element must specify the 'method' and 'type'.") + error_status <- T } # TODO: Add Workflow checks? # ... # calculate number of workflows to create for each variable and if (length(recipe$Analysis$Horizon) > 1) { - error(logger, "Only one single Horizon can be specified in the recipe") - stop("EXECUTION FAILED") + error(recipe$Run$logger, + "Only one single Horizon can be specified in the recipe") + error_status <- T } ## TODO: Refine this # nvar <- length(recipe$Analysis$Variables) # if (nvar > 2) { - # error(logger, + # error(recipe$Run$logger, # "Only two type of Variables can be listed: ECVs and Indicators.") # stop("EXECUTION FAILED") # } @@ -107,34 +114,36 @@ check_recipe <- function(recipe) { } # Only one Calibration method allowed: ## TODO: Make sure this condition is correctly written - if ((is.logical(recipe$Analysis$Workflow$Calibration[[1]]) && - recipe$Analysis$Workflow$Calibration[[1]] == FALSE) || - recipe$Analysis$Workflow$Calibration[[1]] == 'None' || - is.null(recipe$Analysis$Workflow$Calibration[[1]])) { - warn(logger, - "There is no Calibration method selected, raw data verification.") - recipe$Analysis$Workflow$Calibration[[1]] <- 'raw' + if ((is.logical(recipe$Analysis$Workflow$Calibration$method) && + recipe$Analysis$Workflow$Calibration$method == FALSE) || + recipe$Analysis$Workflow$Calibration$method == 'None' || + is.null(recipe$Analysis$Workflow$Calibration$method)) { + warn(recipe$Run$logger, + "No Calibration method was specified, raw data verification.") + recipe$Analysis$Workflow$Calibration$method <- 'raw' } else { # remove multiple calibration methods if (is.null(names(recipe$Analysis$Workflow$Calibration))) { - error(logger, + error(recipe$Run$logger, "The 'Calibration' element 'method' must be specified.") - stop("EXECUTION FAILED") + error_status <- T } - } + } if ("Region" %in% names(recipe$Analysis)) { limits <- c('latmin', 'latmax', 'lonmin', 'lonmax') if (!all(limits %in% names(recipe$Analysis$Region))) { - error(recipe$Run$logger, paste("There must be 4 elements in 'Region':", - limits)) + error(recipe$Run$logger, + paste0("There must be 4 elements in 'Region': ", + paste(limits, collapse = ", "), ".")) + error_status <- T } ## TODO: Implement multiple regions # nregions <- length(recipe$Analysis$Region$Regional) # for (i in 1:length(recipe$Analysis$Region)) { # if (!all(limits %in% names(recipe$Analysis$Region[[i]]))) { # limits <- paste(limits, collapse = " ") - # error(logger, + # error(recipe$Run$logger, # paste("Each region defined in element 'Regional'", # "should have 4 elements:", # limits)) @@ -144,7 +153,7 @@ check_recipe <- function(recipe) { # } } else { error(recipe$Run$logger, "'Region' must be defined.") - stop("EXECUTION FAILED") + error_status <- T } # --------------------------------------------------------------------- @@ -161,24 +170,28 @@ check_recipe <- function(recipe) { error(recipe$Run$logger, paste("Recipe element 'Run' must contain", "all of the following fields:", paste(RUN_FIELDS, collapse=", "), ".")) + error_status <- T } if (!is.character(recipe$Run$output_dir)) { error(recipe$Run$logger, - paste("The Run element 'output_dir' in", recipe$name, "file ", - "should be a character string indicating the path ", - "where the outputs should be saved.")) + paste("The Run element 'output_dir' in", recipe$name, "file", + "should be a character string indicating the path where", + "the outputs should be saved.")) + error_status <- T } if (!is.character(recipe$Run$code_dir)) { error(recipe$Run$logger, paste("The Run element 'code_dir' in", recipe$name, "file ", "should be a character string indicating the path ", "where the code is.")) + error_status <- T } if (!is.logical(recipe$Run$Terminal)) { error(recipe$Run$logger, - paste("The Run element 'Terminal' in", recipe$filename, "file ", + paste("The Run element 'Terminal' in", recipe$name, "file ", "should be a boolean value indicating whether or not to", "print the logs in the terminal.")) + error_status <- T } ## TODO: Review this case, since default value is allowed if (!is.character(recipe$Run$Loglevel) || @@ -187,6 +200,7 @@ check_recipe <- function(recipe) { paste("The Run element 'Loglevel' in", recipe$name, "file ", "should be a character string specifying one of the levels available: ", paste0(LOG_LEVELS, collapse='/'))) + error_status <- T } # --------------------------------------------------------------------- @@ -194,10 +208,18 @@ check_recipe <- function(recipe) { # --------------------------------------------------------------------- # Check workflow: need to define restrictions? # e.g. only one calibration method - nverifications <- check_number_of_dependent_verifications(recipe) - info(logger, paste("Start Dates", paste(fcst.sdate, collapse = " "))) - info(logger, "Recipe checked succsessfully.") - return(append(nverifications, fcst.sdate)) + ## TODO: Implement numbr of dependent verifications + #nverifications <- check_number_of_dependent_verifications(recipe) + info(recipe$Run$logger, paste("Start Dates:", + paste(fcst.sdate, collapse = " "))) + + # Return error if any check has failed + if (error_status) { + stop("Recipe check failed. Please check the logs for a list of errors.") + } else { + info(recipe$Run$logger, "##### RECIPE CHECKS WERE SUCCESSFULL #####.") + # return(append(nverifications, fcst.sdate)) + } } check_number_of_dependent_verifications <- function(recipe) { -- GitLab From 99bf98713140707e445a4c29182d17cd70497671 Mon Sep 17 00:00:00 2001 From: Jaume Ramon Date: Tue, 29 Nov 2022 11:57:10 +0100 Subject: [PATCH 009/388] Workflow work arounded --- modules/test_seasonal_downscaling.R | 45 ++++++++++++++++++++++++++--- 1 file changed, 41 insertions(+), 4 deletions(-) diff --git a/modules/test_seasonal_downscaling.R b/modules/test_seasonal_downscaling.R index 2f9ffbd0..898af7eb 100644 --- a/modules/test_seasonal_downscaling.R +++ b/modules/test_seasonal_downscaling.R @@ -9,16 +9,53 @@ source("modules/Skill/Skill.R") source("modules/Saving/Saving.R") source("modules/Visualization/Visualization.R") +# use this development to run the analogs function. Also change the Interpolation.R script to +# not load CDORemap from s2dv. +library(easyNCDF) +library(ncdf4) +library(ClimProjDiags) +source('https://earth.bsc.es/gitlab/es/s2dv/-/raw/master/R/Utils.R') +source('https://earth.bsc.es/gitlab/es/s2dv/-/raw/master/R/CDORemap.R') + recipe_file <- "modules/Loading/testing_recipes/recipe_system5c3s-tas_downscaling.yml" recipe <- prepare_outputs(recipe_file) -#archive <- read_yaml(paste0(recipe$Run$code_dir, "conf/archive.yml"))$archive # Load datasets data <- load_datasets(recipe) + # Downscale datasets downscaled_data <- downscale_datasets(recipe, data) + # Compute skill -skill_metrics <- compute_skill_metrics(recipe, downscaled_data$hcst$simple_bias, data$obs) +# NOTE: LogReg method does not have member dimension because it provides directly the +# predicted categories +# The following line should work only for Interpolation, Intbc, Intlr, Analogs +stopifnot(recipe$Analysis$Workflow$Downscaling$type %in% c('int', 'intbc', 'intlr', 'analogs')) +skill_metrics <- lapply(downscaled_data$hcst, function(x) compute_skill_metrics(recipe, x$exp, x$obs)) + +# Plot downscaled data +lapply(downscaled_data$hcst, function(x) plot_data(recipe, downscaled_data = x, data = NULL)) + +# Plot skill data +my_data <- list() +my_data$hcst <- downscaled_data$hcst$bilinear$exp +plot_data(recipe, skill_metrics = skill_metrics$bilinear, data = my_data) #Plot skill metrics + +################################## +# EXAMPLE FOR SEASONAL CALIBRATION +################################## +#data <- load_datasets(recipe) +# Calibrate datasets +#calibrated_data <- calibrate_datasets(recipe, data) +# Compute skill metrics +#skill_metrics <- compute_skill_metrics(recipe, calibrated_data$hcst, data$obs) +# Compute percentiles and probability bins +#probabilities <- compute_probabilities(recipe, calibrated_data$hcst) +# Export all data to netCDF +#save_data(recipe, data, calibrated_data, skill_metrics, probabilities) # Plot data -plot_data(recipe, calibrated_data = NULL, skill_metrics = NULL, - probabilities = NULL, significance = F) +#plot_data(recipe, data, calibrated_data, skill_metrics, probabilities, +# significance = T) + + + -- GitLab From 35476e7d5dd22e3f0f03136bf183ac5d938a18f9 Mon Sep 17 00:00:00 2001 From: Jaume Ramon Date: Tue, 29 Nov 2022 17:18:49 +0100 Subject: [PATCH 010/388] Scripts adapted to work with several downscaling methods --- modules/Downscaling/Downscaling.R | 80 ++++++++++++++----- .../recipe_system5c3s-tas_downscaling.yml | 11 +-- modules/Saving/paths2save.R | 24 ++++-- modules/Visualization/Visualization.R | 29 +++++-- modules/test_seasonal_downscaling.R | 7 +- 5 files changed, 115 insertions(+), 36 deletions(-) diff --git a/modules/Downscaling/Downscaling.R b/modules/Downscaling/Downscaling.R index 4d3edd2e..c3d063b4 100644 --- a/modules/Downscaling/Downscaling.R +++ b/modules/Downscaling/Downscaling.R @@ -13,6 +13,7 @@ source('/esarchive/scratch/jramon/GitLab_jramon/downscaling/csdownscale/R/Interp source('/esarchive/scratch/jramon/GitLab_jramon/downscaling/csdownscale/R/Intbc.R') source('/esarchive/scratch/jramon/GitLab_jramon/downscaling/csdownscale/R/Intlr.R') source('/esarchive/scratch/jramon/GitLab_jramon/downscaling/csdownscale/R/Analogs.R') +source('/esarchive/scratch/jramon/GitLab_jramon/downscaling/csdownscale/R/LogisticReg.R') source('/esarchive/scratch/jramon/GitLab_jramon/downscaling/csdownscale/R/Utils.R') source("https://earth.bsc.es/gitlab/external/cstools/-/raw/master/R/CST_BiasCorrection.R") @@ -59,14 +60,14 @@ downscale_datasets <- function(recipe, data) { loocv <- recipe$Analysis$loocv } - DOWNSCAL_TYPES <- c("none", "int", "intbc", "intlr", "analogs", "logres") + DOWNSCAL_TYPES <- c("none", "int", "intbc", "intlr", "analogs", "logreg") BC_METHODS <- c("simple_bias", "calibration", "quantile_mapping") LR_METHODS <- c("basic", "large_scale", "4nn") LOG_REG_METHODS <- c("ens_mean", "ens_mean_sd", "sorted_members") if (!(type %in% DOWNSCAL_TYPES)) { stop("Downscaling type in the recipe is not available. Accepted types ", - "are 'none', 'int', 'intbc', 'intlr', 'analogs', 'logres'.") + "are 'none', 'int', 'intbc', 'intlr', 'analogs', 'logreg'.") } if (type == "int") { @@ -81,21 +82,43 @@ downscale_datasets <- function(recipe, data) { hcst_downscal <- list() for (int_method in strsplit(int_methods, ", | |,")[[1]]) { + # Ensure that observations are in the same grid as experiments + # Only needed for this method because the others already return the + # observations + latmin <- data$hcst$lat[1] + lonmin <- data$hcst$lon[1] + latmax <- data$hcst$lat[length(data$hcst$lat)] + lonmax <- data$hcst$lon[length(data$hcst$lon)] hcst_d <- CST_Interpolation(data$hcst, points = NULL, method_remap = int_method, target_grid = target_grid, lat_dim = "latitude", lon_dim = "longitude", - region = NULL, + region = c(lonmin, lonmax, latmin, latmax), method_point_interp = NULL) + obs_d <- CST_Interpolation(data$obs, + points = NULL, + method_remap = int_method, + target_grid = target_grid, + lat_dim = "latitude", + lon_dim = "longitude", + region = c(lonmin, lonmax, latmin, latmax), + method_point_interp = NULL) + + + hcst_d$obs <- obs_d$exp hcst_downscal[[ int_method ]] <- hcst_d } DOWNSCAL_MSG <- "##### DOWNSCALING COMPLETE #####" } else if (type == "intbc") { - if (is.null(int_methods) | (length(strsplit(int_methods, ", | |,")[[1]]) != 1)) { + if (length(int_methods) == 0) { + stop("Please provide one (and only one) interpolation method in the recipe.") + } + + if (length(strsplit(int_methods, ", | |,")[[1]]) != 1) { stop("Please provide one (and only one) interpolation method in the recipe.") } @@ -134,8 +157,11 @@ downscale_datasets <- function(recipe, data) { DOWNSCAL_MSG <- "##### DOWNSCALING COMPLETE #####" } else if (type == "intlr") { + if (length(int_methods) == 0) { + stop("Please provide one (and only one) interpolation method in the recipe.") + } - if (is.null(int_methods) | (length(strsplit(int_methods, ", | |,")[[1]]) != 1)) { + if (length(strsplit(int_methods, ", | |,")[[1]]) != 1) { stop("Please provide one (and only one) interpolation method in the recipe.") } @@ -176,6 +202,7 @@ downscale_datasets <- function(recipe, data) { lon_dim = "longitude", sdate_dim = "syear", time_dim = "time", + member_dim = "ensemble", large_scale_predictor_dimname = 'vars', loocv = loocv, region = NULL, @@ -193,24 +220,29 @@ downscale_datasets <- function(recipe, data) { nanalogs <- 3 } - - hcst_downscal <- CST_Analogs(data$hcst, data$obs, - grid_exp = data$hcst$source_files[1], - nanalogs = nanalogs, - fun_analog = NULL, - lat_dim = "latitude", - lon_dim = "longitude", - sdate_dim = "syear", - time_dim = "time", - region = NULL, - return_indices = FALSE, - loocv_window = loocv, - ncores = ncores) + hcst_downscal <- list() + hcst_downscal[["analogs"]] <- CST_Analogs(data$hcst, data$obs, + grid_exp = data$hcst$source_files[1], + nanalogs = nanalogs, + fun_analog = "min", + lat_dim = "latitude", + lon_dim = "longitude", + sdate_dim = "syear", + time_dim = "time", + member_dim = "ensemble", + region = NULL, + return_indices = FALSE, + loocv_window = loocv, + ncores = ncores) DOWNSCAL_MSG <- "##### DOWNSCALING COMPLETE #####" - } else if (type == "logres") { + } else if (type == "logreg") { - if (is.null(int_methods) | (length(strsplit(int_methods, ", | |,")[[1]]) != 1)) { + if (length(int_methods) == 0) { + stop("Please provide one (and only one) interpolation method in the recipe.") + } + + if (length(strsplit(int_methods, ", | |,")[[1]]) != 1) { stop("Please provide one (and only one) interpolation method in the recipe.") } @@ -222,6 +254,14 @@ downscale_datasets <- function(recipe, data) { if (is.null(target_grid)) { stop("Please provide the target grid in the recipe.") } + + # Since we are forcing to create three categories, and applying cross-validation, + # we need at least six years of data for the logistic regression function to not + # crash + if (dim(data$hcst$data)[names(dim(data$hcst$data)) == "syear"] <= 5) { + stop("The number of start dates is insufficient for the logisitic regression method. ", + "Please provide six or more.") + } hcst_downscal <- list() for (log_reg_method in strsplit(log_reg_methods, ", | |,")[[1]]) { diff --git a/modules/Loading/testing_recipes/recipe_system5c3s-tas_downscaling.yml b/modules/Loading/testing_recipes/recipe_system5c3s-tas_downscaling.yml index a6549863..400448b7 100644 --- a/modules/Loading/testing_recipes/recipe_system5c3s-tas_downscaling.yml +++ b/modules/Loading/testing_recipes/recipe_system5c3s-tas_downscaling.yml @@ -26,7 +26,7 @@ Analysis: Time: sdate: '0501' hcst_start: '2000' - hcst_end: '2004' + hcst_end: '2005' ftime_min: 1 ftime_max: 1 #sometimes we want the region for the obs to be bigger than for hcst @@ -45,14 +45,15 @@ Analysis: metric: RPSS EnsCorr BSS90 Mean_Bias_SS Downscaling: # Assumption 1: leave-one-out cross-validation is always applied + # Assumption 2: for analogs, we select the best analog (minimum distance) # TO DO: add downscaling to point locations - type: intbc # mandatory, 'none', 'int', 'intbc', 'intlr', 'analogs', 'logreg' - int_method: bilinear # optional, regridding method accepted by CDO - bc_method: simple_bias # optional, 'simple_bias', 'calibration', 'quantile_mapping' + type: int # mandatory, 'none', 'int', 'intbc', 'intlr', 'analogs', 'logreg' + int_method: bilinear nn conservative # optional, regridding method accepted by CDO + bc_method: # optional, 'simple_bias', 'calibration', 'quantile_mapping' lr_method: # optional, 'basic', 'large_scale', '4nn' log_reg_method: # optional, 'ens_mean', 'ens_mean_sd', 'sorted_members' target_grid: /esarchive/recon/ecmwf/era5/monthly_mean/tas_f1h/tas_200002.nc # optional, nc file or grid accepted by CDO - nanalogs: # optional, number of analogs to be searched + nanalogs: 1 # optional, number of analogs to be searched Output_format: S2S4E Run: Loglevel: INFO diff --git a/modules/Saving/paths2save.R b/modules/Saving/paths2save.R index f48ebe7b..e34a6cf8 100644 --- a/modules/Saving/paths2save.R +++ b/modules/Saving/paths2save.R @@ -60,13 +60,27 @@ get_dir <- function(recipe, agg = "global") { calib.method <- tolower(recipe$Analysis$Workflow$Calibration$method) store.freq <- recipe$Analysis$Variables$freq - + downsc.type <- tolower(recipe$Analysis$Workflow$Downscaling$type) + if (downsc.type == "int") { + downsc.method <- strsplit(tolower(recipe$Analysis$Workflow$Downscaling$int_method), ", | |,")[[1]] + } else if (downsc.type == "intbc") { + downsc.method <- strsplit(tolower(recipe$Analysis$Workflow$Downscaling$bc_method), ", | |,")[[1]] + } else if (downsc.type == "intlr") { + downsc.method <- strsplit(tolower(recipe$Analysis$Workflow$Downscaling$lr_method), ", | |,")[[1]] + } else if (downsc.type == "analogs") { + downsc.method <- "analogs" + } else if (downsc.type == "logreg") { + downsc.method <- strsplit(tolower(recipe$Analysis$Workflow$Downscaling$log_reg_method), ", | |,")[[1]] + } + switch(tolower(agg), - "country" = {dir <- paste0(outdir, "/", calib.method, "-", - store.freq, "/", variable, + "country" = {dir <- paste0(outdir, calib.method, "-", + store.freq, "/", downsc.type, "/", + downsc.method, "/", variable, "_country/", fcst.sdate, "/")}, - "global" = {dir <- paste0(outdir, "/", calib.method, "-", - store.freq, "/", variable, "/", + "global" = {dir <- paste0(outdir, calib.method, "-", + store.freq, "/", downsc.type, "/", + downsc.method, "/", variable, "/", fcst.sdate, "/")}) return(dir) diff --git a/modules/Visualization/Visualization.R b/modules/Visualization/Visualization.R index ff0e9fd4..17f58196 100644 --- a/modules/Visualization/Visualization.R +++ b/modules/Visualization/Visualization.R @@ -8,7 +8,8 @@ source("modules/Visualization/tmp/PlotCombinedMap.R") plot_data <- function(recipe, data, - calibrated_data = NULL, + downscaled_data = NULL, + calibrated_data = NULL, skill_metrics = NULL, probabilities = NULL, archive = NULL, @@ -23,11 +24,12 @@ plot_data <- function(recipe, # skill_metrics: list of arrays containing the computed skill metrics # significance: Bool. Whether to include significance dots where applicable - outdir <- paste0(get_dir(recipe), "/plots/") - dir.create(outdir, showWarnings = FALSE, recursive = TRUE) + outdir <- paste0(get_dir(recipe), "plots/") + sapply(outdir, dir.create, showWarnings = FALSE, recursive = TRUE) + #dir.create(outdir, showWarnings = FALSE, recursive = TRUE) if ((is.null(skill_metrics)) && (is.null(calibrated_data)) && - (is.null(data$fcst))) { + (is.null(data$fcst)) && (is.null(downscaled_data))) { stop("The Visualization module has been called, but there is no data ", "that can be plotted.") } @@ -47,6 +49,12 @@ plot_data <- function(recipe, plot_skill_metrics(recipe, archive, data$hcst, skill_metrics, outdir, significance) } + + # Plot forecast ensemble mean + if (!is.null(downscaled_data)) { + plot_downscaled_data(recipe, archive, downscaled_data, outdir) + #plot_ensemble_mean(recipe, archive, downscaled_data$exp, outdir) + } # Plot forecast ensemble mean if (!is.null(calibrated_data$fcst)) { @@ -69,6 +77,16 @@ plot_data <- function(recipe, } } +plot_downscaled_data <- function(recipe, archive, data_ls, outdir) { + + methods <- names(data_ls) + for (method in methods) { + outdir_method <- grep(pattern = method, x = outdir, value = TRUE) + print(outdir_method) + plot_ensemble_mean(recipe, archive, fcst = data_ls[[method]]$exp, outdir = outdir_method) + } +} + plot_skill_metrics <- function(recipe, archive, data_cube, skill_metrics, outdir, significance = F) { @@ -80,9 +98,10 @@ plot_skill_metrics <- function(recipe, archive, data_cube, skill_metrics, if (!is.list(skill_metrics) || is.null(names(skill_metrics))) { stop("The element 'skill_metrics' must be a list of named arrays.") } - + latitude <- data_cube$lat longitude <- data_cube$lon + system_name <- archive$System[[recipe$Analysis$Datasets$System$name]]$name hcst_period <- paste0(recipe$Analysis$Time$hcst_start, "-", recipe$Analysis$Time$hcst_end) diff --git a/modules/test_seasonal_downscaling.R b/modules/test_seasonal_downscaling.R index 898af7eb..12026bba 100644 --- a/modules/test_seasonal_downscaling.R +++ b/modules/test_seasonal_downscaling.R @@ -34,7 +34,12 @@ stopifnot(recipe$Analysis$Workflow$Downscaling$type %in% c('int', 'intbc', 'intl skill_metrics <- lapply(downscaled_data$hcst, function(x) compute_skill_metrics(recipe, x$exp, x$obs)) # Plot downscaled data -lapply(downscaled_data$hcst, function(x) plot_data(recipe, downscaled_data = x, data = NULL)) +plot_data(recipe, downscaled_data = downscaled_data$hcst, data = NULL) + +# Plot raw data +my_data <- list() +my_data$fcst <- data$hcst +plot_data(recipe, data = my_data) # Plot skill data my_data <- list() -- GitLab From cae758b0e71e818fc27f5b76acda85f5f01accc1 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Mon, 12 Dec 2022 15:25:19 +0100 Subject: [PATCH 011/388] Add example of main recipe --- recipes/recipe_example.yml | 58 ++++++++++++++++++++++++++++++++++++++ tools/divide_recipe.R | 6 ++-- 2 files changed, 62 insertions(+), 2 deletions(-) create mode 100644 recipes/recipe_example.yml diff --git a/recipes/recipe_example.yml b/recipes/recipe_example.yml new file mode 100644 index 00000000..27f74df9 --- /dev/null +++ b/recipes/recipe_example.yml @@ -0,0 +1,58 @@ +################################################################################ +## RECIPE DESCRIPTION +################################################################################ + +Description: + Author: V. Agudetse + Info: Test for main recipe + +################################################################################ +## ANALYSIS CONFIGURATION +################################################################################ + +Analysis: + Horizon: Seasonal + Variables: # ECVs and Indicators? + - {name: tas, freq: monthly_mean} + - {name: prlr, freq: monthly_mean} + Datasets: + System: # multiple systems for single model, split if Multimodel = F + - {name: system7c3s} + - {name: system5c3s} + Multimodel: False # single option + Reference: + name: era5 # multiple references for single model? + Time: + sdate: '1101' # list, split + fcst_year: '2020' # list, don't split, handled internally + hcst_start: '1993' # single option + hcst_end: '2016' # single option + ftime_min: 1 # single option + ftime_max: 6 # singl eoption + Region: # multiple lists, split? Add region name if length(Region) > 1 + - {name: "global", latmin: -90, latmax: 90, lonmin: 0, lonmax: 360} + - {name: "nino34", latmin: -5, latmax: 5, lonmin: -10, lonmax: 60} + Regrid: + method: bilinear # allow multiple methods? + type: to_system + Workflow: + Calibration: + method: mse_min # list, split? + Skill: + metric: RPS, RPSS, CRPS, CRPSS, FRPSS, BSS10, BSS90, mean_bias, mean_bias_SS # list, don't split + Probabilities: + percentiles: [[1/3, 2/3], [1/10, 9/10], [1/4, 2/4, 3/4]] # list, don't split + Indicators: + index: no # ? + ncores: 7 + remove_NAs: yes # bool, don't split + Output_format: S2S4E # string, don't split + +################################################################################ +## Run CONFIGURATION +################################################################################ +Run: + Loglevel: INFO + Terminal: yes + output_dir: /esarchive/scratch/vagudets/repos/auto-s2s/out-logs/ + code_dir: /esarchive/scratch/vagudets/repos/auto-s2s/ diff --git a/tools/divide_recipe.R b/tools/divide_recipe.R index dafc8704..8f4ef35a 100644 --- a/tools/divide_recipe.R +++ b/tools/divide_recipe.R @@ -2,6 +2,8 @@ # verifications: the output from check_recipe # folder: the name of the output folder for this run # logger: the log file obtain from prepare_outputs + +## TODO: Rethink strategy and adapt function accordingly divide_recipe <- function(recipe, verifications, folder, logger) { info(logger, "Spliting recipe in single verifications.") beta_recipe <- list(Description = append(recipe$Description, @@ -14,8 +16,8 @@ divide_recipe <- function(recipe, verifications, folder, logger) { Regrid = recipe$Analysis$Regrid, Workflow = recipe$Analysis$Workflow, Output_format = - recipe$Analysis$Output_format), - Run = recipe$Run) + recipe$Analysis$Output_format), + Run = recipe$Run) # duplicate recipe by Variables considering dep and indep: all_recipes <- list(beta_recipe) i <- 1 # to get track of the recipe number -- GitLab From 8b132385c63266b5a024a997ee10a03518ba2db5 Mon Sep 17 00:00:00 2001 From: aho Date: Tue, 13 Dec 2022 07:58:00 +0100 Subject: [PATCH 012/388] Adapt to new as.s2dv_cube() --- modules/Loading/Loading.R | 6 ++++-- modules/Loading/Loading_decadal.R | 8 ++++---- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/modules/Loading/Loading.R b/modules/Loading/Loading.R index 8d54d63d..93eadea7 100644 --- a/modules/Loading/Loading.R +++ b/modules/Loading/Loading.R @@ -4,7 +4,9 @@ source("/esarchive/scratch/vagudets/repos/csoperational/R/get_regrid_params.R") source("modules/Loading/dates2load.R") source("modules/Loading/check_latlon.R") source("tools/libs.R") - +#TODO: remove these two lines when new as.s2dv_cube() is in CSTools +source('https://earth.bsc.es/gitlab/external/cstools/-/raw/develop-new_s2dv_cube/R/as.s2dv_cube.R') +source('https://earth.bsc.es/gitlab/external/cstools/-/raw/develop-new_s2dv_cube/R/zzz.R') load_datasets <- function(recipe) { @@ -203,7 +205,7 @@ load_datasets <- function(recipe) { # Obtain dates and date dimensions from the loaded hcst data to make sure # the corresponding observations are loaded correctly. - dates <- hcst$Dates$start + dates <- hcst$attrs$Dates dim(dates) <- dim(Subset(hcst$data, along=c('dat', 'var', 'latitude', 'longitude', 'ensemble'), diff --git a/modules/Loading/Loading_decadal.R b/modules/Loading/Loading_decadal.R index 8046344b..394d29ff 100644 --- a/modules/Loading/Loading_decadal.R +++ b/modules/Loading/Loading_decadal.R @@ -11,8 +11,9 @@ source("modules/Loading/helper_loading_decadal.R") source("modules/Loading/dates2load.R") source("modules/Loading/check_latlon.R") source("tools/libs.R") -## TODO: Remove once the fun is included in CSTools -source("tools/tmp/as.s2dv_cube.R") +#TODO: remove these two lines when new as.s2dv_cube() is in CSTools +source('https://earth.bsc.es/gitlab/external/cstools/-/raw/develop-new_s2dv_cube/R/as.s2dv_cube.R') +source('https://earth.bsc.es/gitlab/external/cstools/-/raw/develop-new_s2dv_cube/R/zzz.R') #==================================================================== @@ -275,7 +276,7 @@ load_datasets <- function(recipe) { # Get from startR_cube # dates <- attr(hcst, 'Variables')$common$time # Get from s2dv_cube - dates <- hcst$Dates$start + dates <- hcst$attrs$Dates dates_file <- sapply(dates, format, '%Y%m') dim(dates_file) <- dim(dates) @@ -358,7 +359,6 @@ load_datasets <- function(recipe) { obs <- as.s2dv_cube(obs) ) - #------------------------------------------- # Step 4. Verify the consistance between data #------------------------------------------- -- GitLab From cc0be2e9f75bd786a97b3aff0cdb0f48c5f5c3d7 Mon Sep 17 00:00:00 2001 From: aho Date: Tue, 13 Dec 2022 08:14:53 +0100 Subject: [PATCH 013/388] Correct time attributes --- tests/testthat/test-decadal_daily_1.R | 12 ++++++------ tests/testthat/test-decadal_monthly_1.R | 10 +++++----- tests/testthat/test-decadal_monthly_2.R | 10 +++++----- tests/testthat/test-decadal_monthly_3.R | 10 +++++----- tests/testthat/test-seasonal_daily.R | 10 +++++----- tests/testthat/test-seasonal_monthly.R | 10 +++++----- 6 files changed, 31 insertions(+), 31 deletions(-) diff --git a/tests/testthat/test-decadal_daily_1.R b/tests/testthat/test-decadal_daily_1.R index c9833d2b..264371f7 100644 --- a/tests/testthat/test-decadal_daily_1.R +++ b/tests/testthat/test-decadal_daily_1.R @@ -72,7 +72,7 @@ dim(data$fcst$data), c(dat = 1, var = 1, sday = 1, sweek = 1, syear = 2, time = 90, latitude = 7, longitude = 11, ensemble = 3) ) expect_equal( -dim(data$hcst$Dates$start), +dim(data$hcst$attrs$Dates), c(sday = 1, sweek = 1, syear = 3, time = 90) ) # hcst data @@ -111,23 +111,23 @@ tolerance = 0.0001 # time value expect_equal( -(data$hcst$Dates$start)[1], +(data$hcst$attrs$Dates)[1], as.POSIXct("1991-01-01 12:00:00", tz = 'UTC') ) expect_equal( -(data$hcst$Dates$start)[2], +(data$hcst$attrs$Dates)[2], as.POSIXct("1992-01-01 12:00:00", tz = 'UTC') ) expect_equal( -(data$hcst$Dates$start)[5], +(data$hcst$attrs$Dates)[5], as.POSIXct("1992-01-02 12:00:00", tz = 'UTC') ) expect_equal( -(data$hcst$Dates$start)[1, 1, 3, 90], +(data$hcst$attrs$Dates)[1, 1, 3, 90], as.POSIXct("1993-03-31 12:00:00", tz = 'UTC') ) expect_equal( -(data$hcst$Dates$start)[1, 1, 2, 90], +(data$hcst$attrs$Dates)[1, 1, 2, 90], as.POSIXct("1992-03-30 12:00:00", tz = 'UTC') ) diff --git a/tests/testthat/test-decadal_monthly_1.R b/tests/testthat/test-decadal_monthly_1.R index 5cf1922e..249bcc6e 100644 --- a/tests/testthat/test-decadal_monthly_1.R +++ b/tests/testthat/test-decadal_monthly_1.R @@ -91,7 +91,7 @@ dim(data$fcst$data), c(dat = 1, var = 1, sday = 1, sweek = 1, syear = 1, time = 3, latitude = 5, longitude = 4, ensemble = 2) ) expect_equal( -dim(data$hcst$Dates$start), +dim(data$hcst$attr$Dates), c(sday = 1, sweek = 1, syear = 4, time = 3) ) expect_equal( @@ -110,19 +110,19 @@ c(281.7395, 294.2467), tolerance = 0.0001 ) expect_equal( -(data$hcst$Dates$start)[1], +(data$hcst$attrs$Dates)[1], as.POSIXct("1991-11-16", tz = 'UTC') ) expect_equal( -(data$hcst$Dates$start)[2], +(data$hcst$attrs$Dates)[2], as.POSIXct("1992-11-16", tz = 'UTC') ) expect_equal( -(data$hcst$Dates$start)[5], +(data$hcst$attrs$Dates)[5], as.POSIXct("1991-12-16 12:00:00", tz = 'UTC') ) expect_equal( -(data$hcst$Dates$start)[10], +(data$hcst$attrs$Dates)[10], as.POSIXct("1993-01-16 12:00:00", tz = 'UTC') ) diff --git a/tests/testthat/test-decadal_monthly_2.R b/tests/testthat/test-decadal_monthly_2.R index 4dd72ebf..7e9f74b4 100644 --- a/tests/testthat/test-decadal_monthly_2.R +++ b/tests/testthat/test-decadal_monthly_2.R @@ -73,7 +73,7 @@ dim(data$fcst$data), c(dat = 1, var = 1, sday = 1, sweek = 1, syear = 2, time = 14, latitude = 8, longitude = 5, ensemble = 3) ) expect_equal( -dim(data$hcst$Dates$start), +dim(data$hcst$attrs$Dates), c(sday = 1, sweek = 1, syear = 3, time = 14) ) #expect_equal( @@ -109,19 +109,19 @@ tolerance = 0.0001 ) expect_equal( -(data$hcst$Dates$start)[1], +(data$hcst$attrs$Dates)[1], as.POSIXct("1990-11-16", tz = 'UTC') ) expect_equal( -(data$hcst$Dates$start)[2], +(data$hcst$attrs$Dates)[2], as.POSIXct("1991-11-16", tz = 'UTC') ) expect_equal( -(data$hcst$Dates$start)[5], +(data$hcst$attrs$Dates)[5], as.POSIXct("1991-12-16 12:00:00", tz = 'UTC') ) expect_equal( -(data$hcst$Dates$start)[10], +(data$hcst$attrs$Dates)[10], as.POSIXct("1991-02-15", tz = 'UTC') ) diff --git a/tests/testthat/test-decadal_monthly_3.R b/tests/testthat/test-decadal_monthly_3.R index 7535e8dc..042f2055 100644 --- a/tests/testthat/test-decadal_monthly_3.R +++ b/tests/testthat/test-decadal_monthly_3.R @@ -66,7 +66,7 @@ dim(data$hcst$data), c(dat = 1, var = 1, sday = 1, sweek = 1, syear = 4, time = 3, latitude = 25, longitude = 16, ensemble = 3) ) expect_equal( -dim(data$hcst$Dates$start), +dim(data$hcst$attrs$Dates), c(sday = 1, sweek = 1, syear = 4, time = 3) ) # hcst data @@ -87,19 +87,19 @@ tolerance = 0.0001 ) expect_equal( -(data$hcst$Dates$start)[1], +(data$hcst$attrs$Dates)[1], as.POSIXct("2016-04-16", tz = 'UTC') ) expect_equal( -(data$hcst$Dates$start)[2], +(data$hcst$attrs$Dates)[2], as.POSIXct("2017-04-16", tz = 'UTC') ) expect_equal( -(data$hcst$Dates$start)[5], +(data$hcst$attrs$Dates)[5], as.POSIXct("2016-05-16 12:00:00", tz = 'UTC') ) expect_equal( -(data$hcst$Dates$start)[12], +(data$hcst$attrs$Dates)[12], as.POSIXct("2019-06-16", tz = 'UTC') ) diff --git a/tests/testthat/test-seasonal_daily.R b/tests/testthat/test-seasonal_daily.R index 5b771d77..89686ad3 100644 --- a/tests/testthat/test-seasonal_daily.R +++ b/tests/testthat/test-seasonal_daily.R @@ -61,7 +61,7 @@ dim(data$obs$data), c(dat = 1, var = 1, sday = 1, sweek = 1, syear = 4, time = 31, latitude = 4, longitude = 4, ensemble = 1) ) expect_equal( -dim(data$obs$Dates$start), +dim(data$obs$attrs$Dates), c(sday = 1, sweek = 1, syear = 4, time = 31) ) expect_equal( @@ -80,19 +80,19 @@ c(280.1490, 298.2324), tolerance = 0.0001 ) expect_equal( -(data$hcst$Dates$start)[1], +(data$hcst$attrs$Dates)[1], as.POSIXct("1993-12-01 18:00:00 UTC", tz = 'UTC') ) expect_equal( -(data$hcst$Dates$start)[2], +(data$hcst$attrs$Dates)[2], as.POSIXct("1994-12-01 18:00:00 UTC", tz = 'UTC') ) expect_equal( -(data$hcst$Dates$start)[5], +(data$hcst$attrs$Dates)[5], as.POSIXct("1993-12-02 18:00:00 UTC", tz = 'UTC') ) expect_equal( -(data$obs$Dates$start)[10], +(data$obs$attrs$Dates)[10], as.POSIXct("1994-12-03 11:30:00 UTC", tz = 'UTC') ) diff --git a/tests/testthat/test-seasonal_monthly.R b/tests/testthat/test-seasonal_monthly.R index 86feedfb..2052bfab 100644 --- a/tests/testthat/test-seasonal_monthly.R +++ b/tests/testthat/test-seasonal_monthly.R @@ -88,7 +88,7 @@ dim(data$fcst$data), c(dat = 1, var = 1, sday = 1, sweek = 1, syear = 1, time = 3, latitude = 3, longitude = 3, ensemble = 51) ) expect_equal( -dim(data$hcst$Dates$start), +dim(data$hcst$attrs$Dates), c(sday = 1, sweek = 1, syear = 4, time = 3) ) expect_equal( @@ -107,19 +107,19 @@ c(284.7413, 299.6219), tolerance = 0.0001 ) expect_equal( -(data$hcst$Dates$start)[1], +(data$hcst$attrs$Dates)[1], as.POSIXct("1993-12-01", tz = 'UTC') ) expect_equal( -(data$hcst$Dates$start)[2], +(data$hcst$attrs$Dates)[2], as.POSIXct("1994-12-01", tz = 'UTC') ) expect_equal( -(data$hcst$Dates$start)[5], +(data$hcst$attrs$Dates)[5], as.POSIXct("1994-01-01", tz = 'UTC') ) expect_equal( -(data$obs$Dates$start)[10], +(data$obs$attrs$Dates)[10], as.POSIXct("1995-02-14", tz = 'UTC') ) -- GitLab From 50a70879ce2171fd5c97f035f641e6c4d623e423 Mon Sep 17 00:00:00 2001 From: aho Date: Tue, 13 Dec 2022 08:20:45 +0100 Subject: [PATCH 014/388] Correct s2dv_cube list name --- tests/testthat/test-decadal_daily_1.R | 2 +- tests/testthat/test-decadal_monthly_1.R | 2 +- tests/testthat/test-decadal_monthly_2.R | 2 +- tests/testthat/test-decadal_monthly_3.R | 2 +- tests/testthat/test-seasonal_daily.R | 2 +- tests/testthat/test-seasonal_monthly.R | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/testthat/test-decadal_daily_1.R b/tests/testthat/test-decadal_daily_1.R index 264371f7..400b864d 100644 --- a/tests/testthat/test-decadal_daily_1.R +++ b/tests/testthat/test-decadal_daily_1.R @@ -53,7 +53,7 @@ class(data$obs), ) expect_equal( names(data$hcst), -c("data", "lon", "lat", "Variable", "Datasets", "Dates", "when", "source_files", "load_parameters") +c("data", "dims", "coords", "attrs") ) expect_equal( names(data$hcst), diff --git a/tests/testthat/test-decadal_monthly_1.R b/tests/testthat/test-decadal_monthly_1.R index 249bcc6e..69b51b06 100644 --- a/tests/testthat/test-decadal_monthly_1.R +++ b/tests/testthat/test-decadal_monthly_1.R @@ -72,7 +72,7 @@ class(data$obs), ) expect_equal( names(data$hcst), -c("data", "lon", "lat", "Variable", "Datasets", "Dates", "when", "source_files", "load_parameters") +c("data", "dims", "coords", "attrs") ) expect_equal( names(data$hcst), diff --git a/tests/testthat/test-decadal_monthly_2.R b/tests/testthat/test-decadal_monthly_2.R index 7e9f74b4..c0860fd4 100644 --- a/tests/testthat/test-decadal_monthly_2.R +++ b/tests/testthat/test-decadal_monthly_2.R @@ -54,7 +54,7 @@ class(data$obs), ) expect_equal( names(data$hcst), -c("data", "lon", "lat", "Variable", "Datasets", "Dates", "when", "source_files", "load_parameters") +c("data", "dims", "coords", "attrs") ) expect_equal( names(data$hcst), diff --git a/tests/testthat/test-decadal_monthly_3.R b/tests/testthat/test-decadal_monthly_3.R index 042f2055..c1e9a8af 100644 --- a/tests/testthat/test-decadal_monthly_3.R +++ b/tests/testthat/test-decadal_monthly_3.R @@ -55,7 +55,7 @@ class(data$obs), ) expect_equal( names(data$hcst), -c("data", "lon", "lat", "Variable", "Datasets", "Dates", "when", "source_files", "load_parameters") +c("data", "dims", "coords", "attrs") ) expect_equal( names(data$hcst), diff --git a/tests/testthat/test-seasonal_daily.R b/tests/testthat/test-seasonal_daily.R index 89686ad3..cf403a47 100644 --- a/tests/testthat/test-seasonal_daily.R +++ b/tests/testthat/test-seasonal_daily.R @@ -46,7 +46,7 @@ class(data$obs), ) expect_equal( names(data$hcst), -c("data", "lon", "lat", "Variable", "Datasets", "Dates", "when", "source_files", "load_parameters") +c("data", "dims", "coords", "attrs") ) expect_equal( names(data$hcst), diff --git a/tests/testthat/test-seasonal_monthly.R b/tests/testthat/test-seasonal_monthly.R index 2052bfab..e8b661b6 100644 --- a/tests/testthat/test-seasonal_monthly.R +++ b/tests/testthat/test-seasonal_monthly.R @@ -69,7 +69,7 @@ class(data$obs), ) expect_equal( names(data$hcst), -c("data", "lon", "lat", "Variable", "Datasets", "Dates", "when", "source_files", "load_parameters") +c("data", "dims", "coords", "attrs") ) expect_equal( names(data$hcst), -- GitLab From 908dcf20f92d79372fa3ceaee5a849c758ba8f0a Mon Sep 17 00:00:00 2001 From: aho Date: Tue, 13 Dec 2022 08:33:52 +0100 Subject: [PATCH 015/388] Correct time attributes --- modules/Loading/Loading_decadal.R | 4 ++-- modules/Saving/Saving.R | 20 ++++++++++---------- modules/Visualization/Visualization.R | 6 +++--- tools/data_summary.R | 6 +++--- 4 files changed, 18 insertions(+), 18 deletions(-) diff --git a/modules/Loading/Loading_decadal.R b/modules/Loading/Loading_decadal.R index 394d29ff..d8715ba8 100644 --- a/modules/Loading/Loading_decadal.R +++ b/modules/Loading/Loading_decadal.R @@ -378,8 +378,8 @@ load_datasets <- function(recipe) { } # time attribute - if (!identical(format(hcst$Dates$start, '%Y%m'), - format(obs$Dates$start, '%Y%m'))) { + if (!identical(format(hcst$attrs$Dates, '%Y%m'), + format(obs$attrs$Dates, '%Y%m'))) { error(recipe$Run$logger, "hcst and obs don't share the same time.") stop() diff --git a/modules/Saving/Saving.R b/modules/Saving/Saving.R index 961bacee..e49e9781 100644 --- a/modules/Saving/Saving.R +++ b/modules/Saving/Saving.R @@ -183,7 +183,7 @@ save_forecast <- function(data_cube, # } # Generate vector containing leadtimes - dates <- as.PCICt(ClimProjDiags::Subset(data_cube$Dates$start, 'syear', 1), + dates <- as.PCICt(ClimProjDiags::Subset(data_cube$attrs$Dates, 'syear', 1), cal = calendar) if (fcst.horizon == 'decadal') { # Method 1: Use the first date as init_date. But it may be better to use the real initialized date (ask users) @@ -216,7 +216,7 @@ save_forecast <- function(data_cube, syears <- seq(1:dim(data_cube$data)['syear'][[1]]) # expect dim = [sday = 1, sweek = 1, syear, time] - syears_val <- lubridate::year(data_cube$Dates$start[1, 1, , 1]) + syears_val <- lubridate::year(data_cube$attrs$Dates[1, 1, , 1]) for (i in syears) { # Select year from array and rearrange dimensions fcst <- ClimProjDiags::Subset(data_cube$data, 'syear', i, drop = T) @@ -318,7 +318,7 @@ save_observations <- function(data_cube, # Generate vector containing leadtimes ## TODO: Move to a separate function? - dates <- as.PCICt(ClimProjDiags::Subset(data_cube$Dates$start, 'syear', 1), + dates <- as.PCICt(ClimProjDiags::Subset(data_cube$attrs$Dates, 'syear', 1), cal = calendar) if (fcst.horizon == 'decadal') { # Method 1: Use the first date as init_date. But it may be better to use the real initialized date (ask users) @@ -339,7 +339,7 @@ save_observations <- function(data_cube, syears <- seq(1:dim(data_cube$data)['syear'][[1]]) ## expect dim = [sday = 1, sweek = 1, syear, time] - syears_val <- lubridate::year(data_cube$Dates$start[1, 1, , 1]) + syears_val <- lubridate::year(data_cube$attrs$Dates[1, 1, , 1]) for (i in syears) { # Select year from array and rearrange dimensions fcst <- ClimProjDiags::Subset(data_cube$data, 'syear', i, drop = T) @@ -390,7 +390,7 @@ save_observations <- function(data_cube, fcst.sdate <- data_cube$load_parameters$dat1$file_date[[1]][i] fcst.sdate <- as.Date(paste0(fcst.sdate, "01"), '%Y%m%d') } else { - fcst.sdate <- as.Date(data_cube$Dates$start[i]) + fcst.sdate <- as.Date(data_cube$attrs$Dates[i]) } } @@ -485,7 +485,7 @@ save_metrics <- function(skill, calendar <- archive$System[[global_attributes$system]]$calendar # Generate vector containing leadtimes - dates <- as.PCICt(ClimProjDiags::Subset(data_cube$Dates$start, 'syear', 1), + dates <- as.PCICt(ClimProjDiags::Subset(data_cube$attrs$Dates, 'syear', 1), cal = calendar) if (fcst.horizon == 'decadal') { @@ -592,7 +592,7 @@ save_corr <- function(skill, calendar <- archive$System[[global_attributes$system]]$calendar # Generate vector containing leadtimes - dates <- as.PCICt(ClimProjDiags::Subset(data_cube$Dates$start, 'syear', 1), + dates <- as.PCICt(ClimProjDiags::Subset(data_cube$attrs$Dates, 'syear', 1), cal = calendar) if (fcst.horizon == 'decadal') { init_month <- archive$System[[recipe$Analysis$Datasets$System$name]]$initial_month @@ -691,7 +691,7 @@ save_percentiles <- function(percentiles, store.freq <- recipe$Analysis$Variables$freq calendar <- archive$System[[global_attributes$system]]$calendar # Generate vector containing leadtimes - dates <- as.PCICt(ClimProjDiags::Subset(data_cube$Dates$start, 'syear', 1), + dates <- as.PCICt(ClimProjDiags::Subset(data_cube$attrs$Dates, 'syear', 1), cal = calendar) if (fcst.horizon == 'decadal') { init_month <- archive$System[[recipe$Analysis$Datasets$System$name]]$initial_month @@ -775,7 +775,7 @@ save_probabilities <- function(probs, # Generate vector containing leadtimes ## TODO: Move to a separate function? - dates <- as.PCICt(ClimProjDiags::Subset(data_cube$Dates$start, 'syear', 1), + dates <- as.PCICt(ClimProjDiags::Subset(data_cube$attrs$Dates, 'syear', 1), cal = calendar) if (fcst.horizon == 'decadal') { init_month <- archive$System[[recipe$Analysis$Datasets$System$name]]$initial_month @@ -793,7 +793,7 @@ save_probabilities <- function(probs, syears <- seq(1:dim(data_cube$data)['syear'][[1]]) ## expect dim = [sday = 1, sweek = 1, syear, time] - syears_val <- lubridate::year(data_cube$Dates$start[1, 1, , 1]) + syears_val <- lubridate::year(data_cube$attrs$Dates[1, 1, , 1]) for (i in syears) { # Select year from array and rearrange dimensions probs_syear <- lapply(probs, ClimProjDiags::Subset, 'syear', i, drop = 'selected') diff --git a/modules/Visualization/Visualization.R b/modules/Visualization/Visualization.R index 2d50a1a0..ff9b4981 100644 --- a/modules/Visualization/Visualization.R +++ b/modules/Visualization/Visualization.R @@ -168,7 +168,7 @@ plot_skill_metrics <- function(recipe, archive, data_cube, skill_metrics, outfile <- paste0(outdir, name, ".png") toptitle <- paste(display_name, "-", data_cube$Variable$varName, "-", system_name, "-", init_month, hcst_period) - months <- unique(lubridate::month(data_cube$Dates$start, + months <- unique(lubridate::month(data_cube$attrs$Dates, label = T, abb = F)) titles <- as.vector(months) # Plot @@ -247,7 +247,7 @@ plot_ensemble_mean <- function(recipe, archive, fcst, outdir) { } toptitle <- paste("Forecast Ensemble Mean -", variable, "-", system_name, "- Initialization:", i_syear) - months <- lubridate::month(fcst$Dates$start[1, 1, which(start_date == i_syear), ], + months <- lubridate::month(fcst$attrs$Dates[1, 1, which(start_date == i_syear), ], label = T, abb = F) titles <- as.vector(months) # Plots @@ -326,7 +326,7 @@ plot_most_likely_terciles <- function(recipe, archive, } toptitle <- paste("Most Likely Tercile -", variable, "-", system_name, "-", "Initialization:", i_syear) - months <- lubridate::month(fcst$Dates$start[1, 1, which(start_date == i_syear), ], + months <- lubridate::month(fcst$attrs$Dates[1, 1, which(start_date == i_syear), ], label = T, abb = F) ## TODO: Ensure this works for daily and sub-daily cases titles <- as.vector(months) diff --git a/tools/data_summary.R b/tools/data_summary.R index 34b6bd6e..8fffd3b4 100644 --- a/tools/data_summary.R +++ b/tools/data_summary.R @@ -12,10 +12,10 @@ data_summary <- function(data_cube, recipe) { } else if (recipe$Analysis$Variables$freq == "daily_mean") { date_format <- '%b %d %Y' } - months <- unique(format(as.Date(data_cube$Dates[[1]]), format = '%B')) + months <- unique(format(as.Date(data_cube$attrs$Dates[[1]]), format = '%B')) months <- paste(as.character(months), collapse=", ") - sdate_min <- format(min(as.Date(data_cube$Dates[[1]])), format = date_format) - sdate_max <- format(max(as.Date(data_cube$Dates[[1]])), format = date_format) + sdate_min <- format(min(as.Date(data_cube$attrs$Dates[[1]])), format = date_format) + sdate_max <- format(max(as.Date(data_cube$attrs$Dates[[1]])), format = date_format) # Create log instance and sink output to logfile and terminal info(recipe$Run$logger, "DATA SUMMARY:") -- GitLab From fbb329af5930396261b8f8e4e28ff3cca2ddd106 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Tue, 13 Dec 2022 11:43:21 +0100 Subject: [PATCH 016/388] Formatting --- tools/check_recipe.R | 2 +- tools/data_summary.R | 11 +++++------ 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/tools/check_recipe.R b/tools/check_recipe.R index dbbfd665..316b26f7 100644 --- a/tools/check_recipe.R +++ b/tools/check_recipe.R @@ -26,7 +26,7 @@ check_recipe <- function(recipe) { if (!all(PARAMS %in% names(recipe$Analysis))) { error(recipe$Run$logger, paste0("The element 'Analysis' in the recipe must contain all of ", - "the following: ", paste(PARAMS, collapse = ", "), ".")) + "the following: ", paste(PARAMS, collapse = ", "), ".")) error_status <- T } diff --git a/tools/data_summary.R b/tools/data_summary.R index 34b6bd6e..cddd4f9e 100644 --- a/tools/data_summary.R +++ b/tools/data_summary.R @@ -8,15 +8,15 @@ data_summary <- function(data_cube, recipe) { # Get name, leadtime months and date range object_name <- deparse(substitute(data_cube)) if (recipe$Analysis$Variables$freq == "monthly_mean") { - date_format <- '%b %Y' + date_format <- "%b %Y" } else if (recipe$Analysis$Variables$freq == "daily_mean") { - date_format <- '%b %d %Y' + date_format <- "%b %d %Y" } - months <- unique(format(as.Date(data_cube$Dates[[1]]), format = '%B')) - months <- paste(as.character(months), collapse=", ") + months <- unique(format(as.Date(data_cube$Dates[[1]]), format = "%B")) + months <- paste(as.character(months), collapse = ", ") sdate_min <- format(min(as.Date(data_cube$Dates[[1]])), format = date_format) sdate_max <- format(max(as.Date(data_cube$Dates[[1]])), format = date_format) - + # Create log instance and sink output to logfile and terminal info(recipe$Run$logger, "DATA SUMMARY:") sink(recipe$Run$logfile, append = TRUE, split = TRUE) @@ -29,4 +29,3 @@ data_summary <- function(data_cube, recipe) { print("---------------------------------------------") sink() } - -- GitLab From 4bc28d1a46349d496fd3b53dd4f5cd1b924cdf67 Mon Sep 17 00:00:00 2001 From: aho Date: Wed, 14 Dec 2022 06:32:22 +0100 Subject: [PATCH 017/388] Correct varName attributes --- modules/Saving/Saving.R | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/modules/Saving/Saving.R b/modules/Saving/Saving.R index e49e9781..c7a26a57 100644 --- a/modules/Saving/Saving.R +++ b/modules/Saving/Saving.R @@ -170,7 +170,7 @@ save_forecast <- function(data_cube, lalo <- c('longitude', 'latitude') - variable <- data_cube$Variable$varName + variable <- data_cube$attrs$Variable$varName var.longname <- attr(data_cube$Variable, 'variable')$long_name global_attributes <- get_global_attributes(recipe, archive) fcst.horizon <- tolower(recipe$Analysis$Horizon) @@ -273,7 +273,7 @@ save_forecast <- function(data_cube, time <- times$time # Generate name of output file - outfile <- get_filename(outdir, recipe, data_cube$Variable$varName, + outfile <- get_filename(outdir, recipe, data_cube$attrs$Variable$varName, fcst.sdate, agg, "exp") # Get grid data and metadata and export to netCDF @@ -309,7 +309,7 @@ save_observations <- function(data_cube, lalo <- c('longitude', 'latitude') - variable <- data_cube$Variable$varName + variable <- data_cube$attrs$Variable$varName var.longname <- attr(data_cube$Variable, 'variable')$long_name global_attributes <- get_global_attributes(recipe, archive) fcst.horizon <- tolower(recipe$Analysis$Horizon) @@ -408,7 +408,7 @@ save_observations <- function(data_cube, time <- times$time # Generate name of output file - outfile <- get_filename(outdir, recipe, data_cube$Variable$varName, + outfile <- get_filename(outdir, recipe, data_cube$attrs$Variable$varName, fcst.sdate, agg, "obs") # Get grid data and metadata and export to netCDF @@ -525,7 +525,7 @@ save_metrics <- function(skill, time <- times$time # Generate name of output file - outfile <- get_filename(outdir, recipe, data_cube$Variable$varName, + outfile <- get_filename(outdir, recipe, data_cube$attrs$Variable$varName, fcst.sdate, agg, "skill") # Get grid data and metadata and export to netCDF @@ -631,7 +631,7 @@ save_corr <- function(skill, time <- times$time # Generate name of output file - outfile <- get_filename(outdir, recipe, data_cube$Variable$varName, + outfile <- get_filename(outdir, recipe, data_cube$attrs$Variable$varName, fcst.sdate, agg, "corr") # Get grid data and metadata and export to netCDF @@ -730,7 +730,7 @@ save_percentiles <- function(percentiles, time <- times$time # Generate name of output file - outfile <- get_filename(outdir, recipe, data_cube$Variable$varName, + outfile <- get_filename(outdir, recipe, data_cube$attrs$Variable$varName, fcst.sdate, agg, "percentiles") # Get grid data and metadata and export to netCDF @@ -766,7 +766,7 @@ save_probabilities <- function(probs, lalo <- c('longitude', 'latitude') - variable <- data_cube$Variable$varName + variable <- data_cube$attrs$Variable$varName var.longname <- attr(data_cube$Variable, 'variable')$long_name global_attributes <- get_global_attributes(recipe, archive) fcst.horizon <- tolower(recipe$Analysis$Horizon) @@ -837,7 +837,7 @@ save_probabilities <- function(probs, time <- times$time # Generate name of output file - outfile <- get_filename(outdir, recipe, data_cube$Variable$varName, + outfile <- get_filename(outdir, recipe, data_cube$attrs$Variable$varName, fcst.sdate, agg, "probs") # Get grid data and metadata and export to netCDF -- GitLab From a483ea10d1c55eb3ee3c9de325ab4aca84aae315 Mon Sep 17 00:00:00 2001 From: aho Date: Wed, 14 Dec 2022 06:44:40 +0100 Subject: [PATCH 018/388] Change lat/lon attributes level --- modules/Saving/Saving.R | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/modules/Saving/Saving.R b/modules/Saving/Saving.R index c7a26a57..77c6ad03 100644 --- a/modules/Saving/Saving.R +++ b/modules/Saving/Saving.R @@ -281,8 +281,8 @@ save_forecast <- function(data_cube, country <- get_countries(grid) ArrayToNc(append(country, time, fcst), outfile) } else { - latitude <- data_cube$lat[1:length(data_cube$lat)] - longitude <- data_cube$lon[1:length(data_cube$lon)] + latitude <- data_cube$coords$lat[1:length(data_cube$lat)] + longitude <- data_cube$coords$lon[1:length(data_cube$lon)] latlon <- get_latlon(latitude, longitude) # Compile variables into a list and export to netCDF vars <- list(latlon$lat, latlon$lon, time) @@ -416,8 +416,8 @@ save_observations <- function(data_cube, country <- get_countries(grid) ArrayToNc(append(country, time, fcst), outfile) } else { - latitude <- data_cube$lat[1:length(data_cube$lat)] - longitude <- data_cube$lon[1:length(data_cube$lon)] + latitude <- data_cube$coords$lat[1:length(data_cube$lat)] + longitude <- data_cube$coords$lon[1:length(data_cube$lon)] latlon <- get_latlon(latitude, longitude) # Compile variables into a list and export to netCDF vars <- list(latlon$lat, latlon$lon, time) @@ -533,8 +533,8 @@ save_metrics <- function(skill, country <- get_countries(grid) ArrayToNc(append(country, time, skill), outfile) } else { - latitude <- data_cube$lat[1:length(data_cube$lat)] - longitude <- data_cube$lon[1:length(data_cube$lon)] + latitude <- data_cube$coords$lat[1:length(data_cube$lat)] + longitude <- data_cube$coords$lon[1:length(data_cube$lon)] latlon <- get_latlon(latitude, longitude) # Compile variables into a list and export to netCDF vars <- list(latlon$lat, latlon$lon, time) @@ -639,8 +639,8 @@ save_corr <- function(skill, country <- get_countries(grid) ArrayToNc(append(country, time, skill), outfile) } else { - latitude <- data_cube$lat[1:length(data_cube$lat)] - longitude <- data_cube$lon[1:length(data_cube$lon)] + latitude <- data_cube$coords$lat[1:length(data_cube$lat)] + longitude <- data_cube$coords$lon[1:length(data_cube$lon)] latlon <- get_latlon(latitude, longitude) # Compile variables into a list and export to netCDF vars <- list(latlon$lat, latlon$lon, time) @@ -738,8 +738,8 @@ save_percentiles <- function(percentiles, country <- get_countries(grid) ArrayToNc(append(country, time, percentiles), outfile) } else { - latitude <- data_cube$lat[1:length(data_cube$lat)] - longitude <- data_cube$lon[1:length(data_cube$lon)] + latitude <- data_cube$coords$lat[1:length(data_cube$lat)] + longitude <- data_cube$coords$lon[1:length(data_cube$lon)] latlon <- get_latlon(latitude, longitude) # Compile variables into a list and export to netCDF vars <- list(latlon$lat, latlon$lon, time) @@ -845,8 +845,8 @@ save_probabilities <- function(probs, country <- get_countries(grid) ArrayToNc(append(country, time, probs_syear), outfile) } else { - latitude <- data_cube$lat[1:length(data_cube$lat)] - longitude <- data_cube$lon[1:length(data_cube$lon)] + latitude <- data_cube$coords$lat[1:length(data_cube$lat)] + longitude <- data_cube$coords$lon[1:length(data_cube$lon)] latlon <- get_latlon(latitude, longitude) # Compile variables into a list and export to netCDF vars <- list(latlon$lat, latlon$lon, time) -- GitLab From 95fa10cc86e47db4dcaf6d8fd17807cb7699a295 Mon Sep 17 00:00:00 2001 From: aho Date: Wed, 14 Dec 2022 07:17:57 +0100 Subject: [PATCH 019/388] Crrect attributes levels --- modules/Saving/Saving.R | 42 ++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/modules/Saving/Saving.R b/modules/Saving/Saving.R index 77c6ad03..5246b320 100644 --- a/modules/Saving/Saving.R +++ b/modules/Saving/Saving.R @@ -171,7 +171,7 @@ save_forecast <- function(data_cube, lalo <- c('longitude', 'latitude') variable <- data_cube$attrs$Variable$varName - var.longname <- attr(data_cube$Variable, 'variable')$long_name + var.longname <- data_cube$attrs$Variable$variables[[variable]]$long_name global_attributes <- get_global_attributes(recipe, archive) fcst.horizon <- tolower(recipe$Analysis$Horizon) store.freq <- recipe$Analysis$Variables$freq @@ -241,7 +241,7 @@ save_forecast <- function(data_cube, dims <- c(lalo, 'ensemble', 'time') var.expname <- variable var.sdname <- var.sdname - var.units <- attr(data_cube$Variable, 'variable')$units + var.units <- data_cube$attrs$Variable$variables[[variable]]$units } metadata <- list(fcst = list(name = var.expname, @@ -265,7 +265,7 @@ save_forecast <- function(data_cube, fcst.sdate <- format(fcst.sdate, '%Y%m%d') } else { - fcst.sdate <- data_cube$load_parameters$dat1$file_date[[1]][i] + fcst.sdate <- data_cube$attrs$load_parameters$dat1$file_date[[1]][i] } # Get time dimension values and metadata @@ -281,8 +281,8 @@ save_forecast <- function(data_cube, country <- get_countries(grid) ArrayToNc(append(country, time, fcst), outfile) } else { - latitude <- data_cube$coords$lat[1:length(data_cube$lat)] - longitude <- data_cube$coords$lon[1:length(data_cube$lon)] + latitude <- data_cube$coords$lat[1:length(data_cube$coords$lat)] + longitude <- data_cube$coords$lon[1:length(data_cube$coords$lon)] latlon <- get_latlon(latitude, longitude) # Compile variables into a list and export to netCDF vars <- list(latlon$lat, latlon$lon, time) @@ -310,7 +310,7 @@ save_observations <- function(data_cube, lalo <- c('longitude', 'latitude') variable <- data_cube$attrs$Variable$varName - var.longname <- attr(data_cube$Variable, 'variable')$long_name + var.longname <- data_cube$attrs$Variable$variables[[variable]]$long_name global_attributes <- get_global_attributes(recipe, archive) fcst.horizon <- tolower(recipe$Analysis$Horizon) store.freq <- recipe$Analysis$Variables$freq @@ -359,11 +359,11 @@ save_observations <- function(data_cube, dims <- c('Country', 'time') var.expname <- paste0(variable, '_country') var.longname <- paste0("Country-Aggregated ", var.longname) - var.units <- attr(data_cube$Variable, 'variable')$units + var.units <- data_cube$attrs$Variable$variables[[variable]]$units } else { dims <- c(lalo, 'time') var.expname <- variable - var.units <- attr(data_cube$Variable, 'variable')$units + var.units <- data_cube$attrs$Variable$variables[[variable]]$units } metadata <- list(fcst = list(name = var.expname, @@ -387,7 +387,7 @@ save_observations <- function(data_cube, } else { if (store.freq == "monthly_mean") { - fcst.sdate <- data_cube$load_parameters$dat1$file_date[[1]][i] + fcst.sdate <- data_cube$attrs$load_parameters$dat1$file_date[[1]][i] fcst.sdate <- as.Date(paste0(fcst.sdate, "01"), '%Y%m%d') } else { fcst.sdate <- as.Date(data_cube$attrs$Dates[i]) @@ -416,8 +416,8 @@ save_observations <- function(data_cube, country <- get_countries(grid) ArrayToNc(append(country, time, fcst), outfile) } else { - latitude <- data_cube$coords$lat[1:length(data_cube$lat)] - longitude <- data_cube$coords$lon[1:length(data_cube$lon)] + latitude <- data_cube$coords$lat[1:length(data_cube$coords$lat)] + longitude <- data_cube$coords$lon[1:length(data_cube$coords$lon)] latlon <- get_latlon(latitude, longitude) # Compile variables into a list and export to netCDF vars <- list(latlon$lat, latlon$lon, time) @@ -533,8 +533,8 @@ save_metrics <- function(skill, country <- get_countries(grid) ArrayToNc(append(country, time, skill), outfile) } else { - latitude <- data_cube$coords$lat[1:length(data_cube$lat)] - longitude <- data_cube$coords$lon[1:length(data_cube$lon)] + latitude <- data_cube$coords$lat[1:length(data_cube$coords$lat)] + longitude <- data_cube$coords$lon[1:length(data_cube$coords$lon)] latlon <- get_latlon(latitude, longitude) # Compile variables into a list and export to netCDF vars <- list(latlon$lat, latlon$lon, time) @@ -639,8 +639,8 @@ save_corr <- function(skill, country <- get_countries(grid) ArrayToNc(append(country, time, skill), outfile) } else { - latitude <- data_cube$coords$lat[1:length(data_cube$lat)] - longitude <- data_cube$coords$lon[1:length(data_cube$lon)] + latitude <- data_cube$coords$lat[1:length(data_cube$coords$lat)] + longitude <- data_cube$coords$lon[1:length(data_cube$coords$lon)] latlon <- get_latlon(latitude, longitude) # Compile variables into a list and export to netCDF vars <- list(latlon$lat, latlon$lon, time) @@ -738,8 +738,8 @@ save_percentiles <- function(percentiles, country <- get_countries(grid) ArrayToNc(append(country, time, percentiles), outfile) } else { - latitude <- data_cube$coords$lat[1:length(data_cube$lat)] - longitude <- data_cube$coords$lon[1:length(data_cube$lon)] + latitude <- data_cube$coords$lat[1:length(data_cube$coords$lat)] + longitude <- data_cube$coords$lon[1:length(data_cube$coords$lon)] latlon <- get_latlon(latitude, longitude) # Compile variables into a list and export to netCDF vars <- list(latlon$lat, latlon$lon, time) @@ -767,7 +767,7 @@ save_probabilities <- function(probs, lalo <- c('longitude', 'latitude') variable <- data_cube$attrs$Variable$varName - var.longname <- attr(data_cube$Variable, 'variable')$long_name + var.longname <- data_cube$attrs$Variable$variables[[variable]]$long_name global_attributes <- get_global_attributes(recipe, archive) fcst.horizon <- tolower(recipe$Analysis$Horizon) store.freq <- recipe$Analysis$Variables$freq @@ -829,7 +829,7 @@ save_probabilities <- function(probs, fcst.sdate <- init_date + lubridate::years(syears_val[i] - lubridate::year(init_date)) fcst.sdate <- format(fcst.sdate, '%Y%m%d') } else { - fcst.sdate <- data_cube$load_parameters$dat1$file_date[[1]][i] + fcst.sdate <- data_cube$attrs$load_parameters$dat1$file_date[[1]][i] } # Get time dimension values and metadata @@ -845,8 +845,8 @@ save_probabilities <- function(probs, country <- get_countries(grid) ArrayToNc(append(country, time, probs_syear), outfile) } else { - latitude <- data_cube$coords$lat[1:length(data_cube$lat)] - longitude <- data_cube$coords$lon[1:length(data_cube$lon)] + latitude <- data_cube$coords$lat[1:length(data_cube$coords$lat)] + longitude <- data_cube$coords$lon[1:length(data_cube$coords$lon)] latlon <- get_latlon(latitude, longitude) # Compile variables into a list and export to netCDF vars <- list(latlon$lat, latlon$lon, time) -- GitLab From 2a5ca81b6a70ec6dc7283631980f5d783a2f4e44 Mon Sep 17 00:00:00 2001 From: aho Date: Wed, 14 Dec 2022 07:24:28 +0100 Subject: [PATCH 020/388] Correct lat/lon attribures level --- modules/Visualization/Visualization.R | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/Visualization/Visualization.R b/modules/Visualization/Visualization.R index ff9b4981..f9498739 100644 --- a/modules/Visualization/Visualization.R +++ b/modules/Visualization/Visualization.R @@ -81,8 +81,8 @@ plot_skill_metrics <- function(recipe, archive, data_cube, skill_metrics, stop("The element 'skill_metrics' must be a list of named arrays.") } - latitude <- data_cube$lat - longitude <- data_cube$lon + latitude <- data_cube$coords$lat + longitude <- data_cube$coords$lon system_name <- archive$System[[recipe$Analysis$Datasets$System$name]]$name hcst_period <- paste0(recipe$Analysis$Time$hcst_start, "-", recipe$Analysis$Time$hcst_end) @@ -166,7 +166,7 @@ plot_skill_metrics <- function(recipe, archive, data_cube, skill_metrics, } # Define output file name and titles outfile <- paste0(outdir, name, ".png") - toptitle <- paste(display_name, "-", data_cube$Variable$varName, + toptitle <- paste(display_name, "-", data_cube$attrs$Variable$varName, "-", system_name, "-", init_month, hcst_period) months <- unique(lubridate::month(data_cube$attrs$Dates, label = T, abb = F)) -- GitLab From 32c44e8846cdb6bb56ca5095bff97a8aedd8b8d1 Mon Sep 17 00:00:00 2001 From: aho Date: Wed, 14 Dec 2022 07:52:03 +0100 Subject: [PATCH 021/388] Correct attributes level --- modules/Visualization/Visualization.R | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/Visualization/Visualization.R b/modules/Visualization/Visualization.R index f9498739..b16fb4a7 100644 --- a/modules/Visualization/Visualization.R +++ b/modules/Visualization/Visualization.R @@ -201,8 +201,8 @@ plot_ensemble_mean <- function(recipe, archive, fcst, outdir) { stop("Visualization functions not yet implemented for daily data.") } - latitude <- fcst$lat - longitude <- fcst$lon + latitude <- fcst$coords$lat + longitude <- fcst$coords$lon system_name <- archive$System[[recipe$Analysis$Datasets$System$name]]$name variable <- recipe$Analysis$Variables$name units <- attr(fcst$Variable, "variable")$units @@ -278,8 +278,8 @@ plot_most_likely_terciles <- function(recipe, archive, stop("Visualization functions not yet implemented for daily data.") } - latitude <- fcst$lat - longitude <- fcst$lon + latitude <- fcst$coords$lat + longitude <- fcst$coords$lon system_name <- archive$System[[recipe$Analysis$Datasets$System$name]]$name variable <- recipe$Analysis$Variables$name start_date <- paste0(recipe$Analysis$Time$fcst_year, -- GitLab From 8da9afb6c3de5ba472b7aaf22f69c70a4d7662d3 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Thu, 15 Dec 2022 15:09:52 +0100 Subject: [PATCH 022/388] Update wrong example and recipe checker --- .../testing_recipes/wrong_recipe_example.yml | 2 +- tools/check_recipe.R | 28 +++++++++++-------- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/modules/Loading/testing_recipes/wrong_recipe_example.yml b/modules/Loading/testing_recipes/wrong_recipe_example.yml index e5d59ad8..12e2fc06 100644 --- a/modules/Loading/testing_recipes/wrong_recipe_example.yml +++ b/modules/Loading/testing_recipes/wrong_recipe_example.yml @@ -15,7 +15,7 @@ Analysis: name: era5 Time: sdate: '1101' - fcst_year: '2020' + fcst_syear: '2020' hcst_start: '1993' hcst_end: '2016' ftime_max: 6 diff --git a/tools/check_recipe.R b/tools/check_recipe.R index 316b26f7..8f945b6c 100644 --- a/tools/check_recipe.R +++ b/tools/check_recipe.R @@ -139,16 +139,21 @@ check_recipe <- function(recipe) { error_status <- T } ## TODO: Implement multiple regions - # nregions <- length(recipe$Analysis$Region$Regional) + # nregions <- length(recipe$Analysis$Region) # for (i in 1:length(recipe$Analysis$Region)) { # if (!all(limits %in% names(recipe$Analysis$Region[[i]]))) { # limits <- paste(limits, collapse = " ") # error(recipe$Run$logger, - # paste("Each region defined in element 'Regional'", - # "should have 4 elements:", - # limits)) - # stop("EXECUTION FAILED") + # paste0("Each region defined in element 'Region' ", + # "should have 4 elements: ", + # paste(limits, collapse = ", "), ".")) + # error_status <- T # } + # if (length(recipe$Analysis$Region) > 1) { + # if (!("name" %in% names(recipe$Analysis$Region[[i]]))) { + # error(recipe$Run$logger, + # paste("If multiple regions are requested, each region must", + # "have a 'name'".) # # are numeric? class list mode list # } } else { @@ -182,7 +187,7 @@ check_recipe <- function(recipe) { if (!is.character(recipe$Run$code_dir)) { error(recipe$Run$logger, paste("The Run element 'code_dir' in", recipe$name, "file ", - "should be a character string indicating the path ", + "should be a character string indicating the path", "where the code is.")) error_status <- T } @@ -197,8 +202,8 @@ check_recipe <- function(recipe) { if (!is.character(recipe$Run$Loglevel) || !any(recipe$Run$Loglevel %in% LOG_LEVELS)) { error(logger, - paste("The Run element 'Loglevel' in", recipe$name, "file ", - "should be a character string specifying one of the levels available: ", + paste("The Run element 'Loglevel' in", recipe$name, "file", + "should be a character string specifying one of the levels available:", paste0(LOG_LEVELS, collapse='/'))) error_status <- T } @@ -208,16 +213,17 @@ check_recipe <- function(recipe) { # --------------------------------------------------------------------- # Check workflow: need to define restrictions? # e.g. only one calibration method - ## TODO: Implement numbr of dependent verifications + ## TODO: Implement number of dependent verifications #nverifications <- check_number_of_dependent_verifications(recipe) info(recipe$Run$logger, paste("Start Dates:", paste(fcst.sdate, collapse = " "))) # Return error if any check has failed if (error_status) { - stop("Recipe check failed. Please check the logs for a list of errors.") + error(recipe$Run$logger, "RECIPE CHECK FAILED.") + stop("The recipe contains some errors. The full list is in the logs.") } else { - info(recipe$Run$logger, "##### RECIPE CHECKS WERE SUCCESSFULL #####.") + info(recipe$Run$logger, "##### RECIPE CHECK SUCCESSFULL #####") # return(append(nverifications, fcst.sdate)) } } -- GitLab From d3193f9aaf3a4dba672b277f36befd40ce6e022e Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Tue, 20 Dec 2022 16:07:51 +0100 Subject: [PATCH 023/388] update checker --- tools/check_recipe.R | 104 ++++++++++++++++++++++++++++++------------- 1 file changed, 73 insertions(+), 31 deletions(-) diff --git a/tools/check_recipe.R b/tools/check_recipe.R index 8f945b6c..a70a5b90 100644 --- a/tools/check_recipe.R +++ b/tools/check_recipe.R @@ -46,12 +46,13 @@ check_recipe <- function(recipe) { } ## TODO: Is this needed? if (is.null(recipe$Analysis$Time$fcst_year) || - recipe$Analysis$Time$fcst_year == 'None') { + tolower(recipe$Analysis$Time$fcst_year) == 'none') { stream <- "hindcast" # recipe$Analysis$Time$fcst_year <- 'YYYY' } else { stream <- "fcst" } + ## TODO: To be implemented in the future # if (length(recipe$Analysis$Time$sdate$fcst_day) > 1 && # tolower(recipe$Analysis$Horizon) != "subseasonal") { @@ -65,6 +66,7 @@ check_recipe <- function(recipe) { # error(recipe$Run$logger, # paste("The element 'fcst_sday' in the recipe should be defined.")) # } + if (is.null(recipe$Analysis$Time$fcst_year)) { warn(recipe$Run$logger, paste("The element 'fcst_year' is not defined in the recipe.", @@ -88,12 +90,13 @@ check_recipe <- function(recipe) { } # TODO: Add Workflow checks? # ... - # calculate number of workflows to create for each variable and + # calculate number of workflows to create for each variable and if (length(recipe$Analysis$Horizon) > 1) { error(recipe$Run$logger, "Only one single Horizon can be specified in the recipe") error_status <- T } + ## TODO: Refine this # nvar <- length(recipe$Analysis$Variables) # if (nvar > 2) { @@ -101,6 +104,7 @@ check_recipe <- function(recipe) { # "Only two type of Variables can be listed: ECVs and Indicators.") # stop("EXECUTION FAILED") # } + # remove NULL or None Indicators or ECVs from the recipe: if (!is.null(recipe$Analysis$Variables$Indicators) && !is.list(recipe$Analysis$Variables$Indicators)) { @@ -112,32 +116,15 @@ check_recipe <- function(recipe) { recipe$Analysis$Variables <- recipe$Analysis$Variables[ -which(names(recipe$Analysis$Variables) == 'ECVs')] } - # Only one Calibration method allowed: - ## TODO: Make sure this condition is correctly written - if ((is.logical(recipe$Analysis$Workflow$Calibration$method) && - recipe$Analysis$Workflow$Calibration$method == FALSE) || - recipe$Analysis$Workflow$Calibration$method == 'None' || - is.null(recipe$Analysis$Workflow$Calibration$method)) { - warn(recipe$Run$logger, - "No Calibration method was specified, raw data verification.") - recipe$Analysis$Workflow$Calibration$method <- 'raw' - } else { - # remove multiple calibration methods - if (is.null(names(recipe$Analysis$Workflow$Calibration))) { - error(recipe$Run$logger, - "The 'Calibration' element 'method' must be specified.") - error_status <- T - } - } - if ("Region" %in% names(recipe$Analysis)) { - limits <- c('latmin', 'latmax', 'lonmin', 'lonmax') - if (!all(limits %in% names(recipe$Analysis$Region))) { - error(recipe$Run$logger, - paste0("There must be 4 elements in 'Region': ", - paste(limits, collapse = ", "), ".")) - error_status <- T - } + # Region checks: + LIMITS <- c('latmin', 'latmax', 'lonmin', 'lonmax') + if (!all(LIMITS %in% names(recipe$Analysis$Region))) { + error(recipe$Run$logger, + paste0("There must be 4 elements in 'Region': ", + paste(LIMITS, collapse = ", "), ".")) + error_status <- T + } ## TODO: Implement multiple regions # nregions <- length(recipe$Analysis$Region) # for (i in 1:length(recipe$Analysis$Region)) { @@ -156,11 +143,66 @@ check_recipe <- function(recipe) { # "have a 'name'".) # # are numeric? class list mode list # } + # --------------------------------------------------------------------- + # WORKFLOW CHECKS + # --------------------------------------------------------------------- + + # Only one Calibration method allowed: + if ((is.logical(recipe$Analysis$Workflow$Calibration$method) && + recipe$Analysis$Workflow$Calibration$method == FALSE) || + tolower(recipe$Analysis$Workflow$Calibration$method) == 'none' || + is.null(recipe$Analysis$Workflow$Calibration$method)) { + warn(recipe$Run$logger, + "No Calibration method was specified, raw data verification.") + recipe$Analysis$Workflow$Calibration$method <- 'raw' } else { - error(recipe$Run$logger, "'Region' must be defined.") + if (is.null(recipe$Analysis$Workflow$Calibration$method)) { + error(recipe$Run$logger, + "The 'Calibration' element 'method' must be specified.") + error_status <- T + } + } + # Anomalies + if ("Anomalies" %in% names(recipe$Analysis$Workflow)) { + if (!is.null(recipe$Analysis$Workflow$Anomalies$compute)) { + error(recipe$Run$logger, + "Parameter 'compute' must be defined under 'Anomalies'.") + error_status <- T + } else if (!(is.logical(recipe$Analysis$Workflows$Anomalies$compute))) { + error(recipe$Run$logger, + paste("Parameter 'Anomalies:compute' must be a logical value", + "(True/False or yes/no).")) + error_status <- T + } else if ((recipe$Analysis$Workflows$Anomalies$compute) && + (!is.logical(recipe$Analysis$Workflow$Anomalies))) { + error(recipe$Run$logger, + paste("If anomaly computation is requested, parameter", + "'cross_validation' must be defined under 'Anomalies', + and it must be a logical value (True/False or yes/no).")) + error_status <- T + } + } + # Skill + if (("Skill" %in% names(recipe$Analysis$Workflow)) && + (is.null(recipe$Analysis$Workflow$Skill$metric))) { + error(recipe$Run$logger, + "Parameter 'metric' must be defined under 'Skill'.") error_status <- T } - + # Probabilities + if ("Probabilities" %in% names(recipe$Analysis$Workflow)) { + if (is.null(recipe$Analysis$Workflow$Probabilities$percentiles)) { + error(recipe$Run$logger, + "Parameter 'percentiles' must be defined under 'Skill'.") + error_status <- T + } else if (!is.list(recipe$Analysis$Workflow$Probabilities$percentiles)) { + error(recipe$Run$logger, + paste("Parameter 'Probabilities:percentiles' expects a list.", + "See documentation in the wiki for examples.")) + error_status <- T + } + } + # --------------------------------------------------------------------- # RUN CHECKS # --------------------------------------------------------------------- @@ -215,8 +257,8 @@ check_recipe <- function(recipe) { # e.g. only one calibration method ## TODO: Implement number of dependent verifications #nverifications <- check_number_of_dependent_verifications(recipe) - info(recipe$Run$logger, paste("Start Dates:", - paste(fcst.sdate, collapse = " "))) + # info(recipe$Run$logger, paste("Start Dates:", + # paste(fcst.sdate, collapse = " "))) # Return error if any check has failed if (error_status) { -- GitLab From a20f175b79fe2910ce25851d4aa7276b537fc087 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Tue, 20 Dec 2022 16:08:15 +0100 Subject: [PATCH 024/388] Add recipe checker to prepare_outputs --- modules/test_seasonal.R | 2 +- tools/prepare_outputs.R | 22 ++++++++++++---------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/modules/test_seasonal.R b/modules/test_seasonal.R index 854e293f..c74fd1b1 100644 --- a/modules/test_seasonal.R +++ b/modules/test_seasonal.R @@ -6,7 +6,7 @@ source("modules/Saving/Saving.R") source("modules/Visualization/Visualization.R") recipe_file <- "modules/Loading/testing_recipes/recipe_seasonal-tests.yml" -recipe <- prepare_outputs(recipe_file) +recipe <- prepare_outputs(recipe_file, enable_checks = F) ## archive <- read_yaml(paste0(recipe$Run$code_dir, "conf/archive.yml"))$archive # Load datasets diff --git a/tools/prepare_outputs.R b/tools/prepare_outputs.R index da5d2562..d6eb970e 100644 --- a/tools/prepare_outputs.R +++ b/tools/prepare_outputs.R @@ -20,10 +20,11 @@ #' #'@export -prepare_outputs <- function(recipe_file) { +prepare_outputs <- function(recipe_file, + enable_checks = TRUE) { -# recipe: the content of the readed recipe -# file: the recipe file name +# recipe_file: path to recipe YAML file +# enable_checker: Whether or not to run the recipe checker recipe <- read_yaml(recipe_file) recipe$recipe_path <- recipe_file @@ -33,32 +34,30 @@ prepare_outputs <- function(recipe_file) { # Create output folders: folder_name <- paste0(gsub(".yml", "", gsub("/", "_", recipe$name)), "_", gsub(" ", "", gsub(":", "", gsub("-", "", Sys.time())))) - print("Saving all outputs to:") print(output_dir) print(folder_name) - dir.create(file.path(output_dir, folder_name, 'outputs'), recursive = TRUE) dir.create(file.path(output_dir, folder_name, 'logs')) dir.create(file.path(output_dir, folder_name, 'logs', 'recipes')) - + # Copy recipe to output folder file.copy(recipe$recipe_path, file.path(output_dir, folder_name, 'logs', 'recipes')) - + # Create log output file logfile <- file.path(output_dir, folder_name, 'logs', 'log.txt') file.create(logfile) - # Set default behaviour of log output file: + # Set default behaviour of logger if (is.null(recipe$Run)) { recipe$Run <- list(Loglevel = 'INFO', Terminal = TRUE) } if (is.null(recipe$Run$Loglevel)) { recipe$Run$Loglevel <- 'INFO' } - if (!is.logical(recipe$Run$Terminal)) { recipe$Run$Terminal <- TRUE } + # logger set-up if (recipe$Run$Terminal) { logger <- log4r::logger(threshold = recipe$Run$Loglevel, appenders = list(console_appender(layout = default_log_layout()), @@ -69,10 +68,13 @@ prepare_outputs <- function(recipe_file) { appenders = list(file_appende(logfile, append = TRUE, layout = default_log_layout()))) } - recipe$Run$output_dir <- file.path(output_dir, folder_name) recipe$Run$logger <- logger recipe$Run$logfile <- logfile + # Run recipe checker + if (enable_checks) { + check_recipe(recipe) + } return(recipe) } -- GitLab From ba419683e13cc1d14217b0116edabbb22bf317e2 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Tue, 20 Dec 2022 16:18:58 +0100 Subject: [PATCH 025/388] Print full path to recipe; fix bug in Anomalies check --- tools/check_recipe.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/check_recipe.R b/tools/check_recipe.R index a70a5b90..c17a7cd9 100644 --- a/tools/check_recipe.R +++ b/tools/check_recipe.R @@ -3,7 +3,7 @@ check_recipe <- function(recipe) { # recipe: yaml recipe already read it # output: errors or the total number of workflow (vars x regions) to compute - info(recipe$Run$logger, paste("Checking recipe:", recipe$name)) + info(recipe$Run$logger, paste("Checking recipe:", recipe$path)) # --------------------------------------------------------------------- # ANALYSIS CHECKS @@ -164,7 +164,7 @@ check_recipe <- function(recipe) { } # Anomalies if ("Anomalies" %in% names(recipe$Analysis$Workflow)) { - if (!is.null(recipe$Analysis$Workflow$Anomalies$compute)) { + if (is.null(recipe$Analysis$Workflow$Anomalies$compute)) { error(recipe$Run$logger, "Parameter 'compute' must be defined under 'Anomalies'.") error_status <- T -- GitLab From 89ed146257cbded2fb8e7cc52cad5c54a0bc07d5 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Tue, 20 Dec 2022 16:19:48 +0100 Subject: [PATCH 026/388] Add TODO --- tools/check_recipe.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/check_recipe.R b/tools/check_recipe.R index c17a7cd9..2381309b 100644 --- a/tools/check_recipe.R +++ b/tools/check_recipe.R @@ -1,7 +1,7 @@ check_recipe <- function(recipe) { # recipe: yaml recipe already read it - # output: errors or the total number of workflow (vars x regions) to compute + ## TODO: Adapt to decadal case info(recipe$Run$logger, paste("Checking recipe:", recipe$path)) -- GitLab From 508683900950925f1bb894a447f49d2cdc34e841 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Tue, 20 Dec 2022 16:22:02 +0100 Subject: [PATCH 027/388] Fix bug caused by typo --- tools/check_recipe.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/check_recipe.R b/tools/check_recipe.R index 2381309b..153c4a18 100644 --- a/tools/check_recipe.R +++ b/tools/check_recipe.R @@ -168,12 +168,12 @@ check_recipe <- function(recipe) { error(recipe$Run$logger, "Parameter 'compute' must be defined under 'Anomalies'.") error_status <- T - } else if (!(is.logical(recipe$Analysis$Workflows$Anomalies$compute))) { + } else if (!(is.logical(recipe$Analysis$Workflow$Anomalies$compute))) { error(recipe$Run$logger, paste("Parameter 'Anomalies:compute' must be a logical value", "(True/False or yes/no).")) error_status <- T - } else if ((recipe$Analysis$Workflows$Anomalies$compute) && + } else if ((recipe$Analysis$Workflow$Anomalies$compute) && (!is.logical(recipe$Analysis$Workflow$Anomalies))) { error(recipe$Run$logger, paste("If anomaly computation is requested, parameter", -- GitLab From eb36caeeb545ce7811d2f8d2fb239f59b6f71a0a Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Tue, 20 Dec 2022 16:35:37 +0100 Subject: [PATCH 028/388] Fix pipeline --- tools/check_recipe.R | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/tools/check_recipe.R b/tools/check_recipe.R index 153c4a18..fcd30ef3 100644 --- a/tools/check_recipe.R +++ b/tools/check_recipe.R @@ -3,16 +3,18 @@ check_recipe <- function(recipe) { # recipe: yaml recipe already read it ## TODO: Adapt to decadal case - info(recipe$Run$logger, paste("Checking recipe:", recipe$path)) + info(recipe$Run$logger, paste("Checking recipe:", recipe$recipe_path)) # --------------------------------------------------------------------- # ANALYSIS CHECKS # --------------------------------------------------------------------- - TIME_SETTINGS = c('sdate', 'ftime_min', 'ftime_max', 'hcst_start', 'hcst_end') - PARAMS = c('Horizon', 'Time', 'Variables', 'Region', 'Regrid', 'Workflow', - 'Datasets') - HORIZONS <- c('subseasonal', 'seasonal', 'decadal') + TIME_SETTINGS_SEASONAL <- c("sdate", "ftime_min", "ftime_max", "hcst_start", + "hcst_end") + TIME_SETTINGS_DECADAL <- c("ftime_min", "ftime_max", "hcst_start", "hcst_end") + PARAMS <- c("Horizon", "Time", "Variables", "Region", "Regrid", "Workflow", + "Datasets") + HORIZONS <- c("subseasonal", "seasonal", "decadal") # Define error status variable error_status <- F @@ -38,11 +40,22 @@ check_recipe <- function(recipe) { } # Check temporal settings and # count the number of verifications - if (!all(TIME_SETTINGS %in% names(recipe$Analysis$Time))) { - error(recipe$Run$logger, - paste0("The element 'Time' in the recipe must contain all of the ", - "following: ", paste(TIME_SETTINGS, collapse = ", "), ".")) - error_status <- T + if (tolower(recipe$Analysis$Horizon) == "seasonal") { + if (!all(TIME_SETTINGS_SEASONAL %in% names(recipe$Analysis$Time))) { + error(recipe$Run$logger, + paste0("The element 'Time' in the recipe must contain all of the ", + "following: ", paste(TIME_SETTINGS_SEASONAL, + collapse = ", "), ".")) + error_status <- T + } + } else if (tolower(recipe$Analysis$Horizon) == "decadal") { + if (!all(TIME_SETTINGS_DECADAL %in% names(recipe$Analysis$Time))) { + error(recipe$Run$logger, + paste0("The element 'Time' in the recipe must contain all of the ", + "following: ", paste(TIME_SETTINGS_DECADAL, + collapse = ", "), ".")) + error_status <- T + } } ## TODO: Is this needed? if (is.null(recipe$Analysis$Time$fcst_year) || -- GitLab From 7a985badf5d0cb06eec6504d56f20c1100ca1d57 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Fri, 23 Dec 2022 15:01:01 +0100 Subject: [PATCH 029/388] Add more detailed time section checks --- tools/check_recipe.R | 39 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/tools/check_recipe.R b/tools/check_recipe.R index fcd30ef3..5fca3597 100644 --- a/tools/check_recipe.R +++ b/tools/check_recipe.R @@ -38,8 +38,7 @@ check_recipe <- function(recipe) { "following: ", paste(HORIZONS, collapse = ", "), ".")) error_status <- T } - # Check temporal settings and - # count the number of verifications + # Check time settings if (tolower(recipe$Analysis$Horizon) == "seasonal") { if (!all(TIME_SETTINGS_SEASONAL %in% names(recipe$Analysis$Time))) { error(recipe$Run$logger, @@ -57,6 +56,42 @@ check_recipe <- function(recipe) { error_status <- T } } + # Check ftime_min and ftime_max + if ((!(recipe$Analysis$Time$ftime_min > 0)) || + (!is.integer(recipe$Analysis$Time$ftime_min))) { + error(recipe$Run$logger, + "The element 'ftime_min' must be an integer larger than 0.") + error_status <- T + } + if ((!(recipe$Analysis$Time$ftime_max > 0)) || + (!is.integer(recipe$Analysis$Time$ftime_max))) { + error(recipe$Run$logger, + "The element 'ftime_max' must be an integer larger than 0.") + error_status <- T + } + if (recipe$Analysis$Time$ftime_max < recipe$Analysis$Time$ftime_min) { + error(recipe$Run$logger, + "'ftime_max' cannot be smaller than 'ftime_min'.") + error_status <- T + } + # Check consistency of hindcast years + if (!(as.numeric(recipe$Analysis$Time$hcst_start) %% 1 == 0) || + (!(recipe$Analysis$Time$hcst_start > 0))) { + error(recipe$Run$logger, + "The element 'hcst_start' must be a valid year.") + error_status <- T + } + if (!(as.numeric(recipe$Analysis$Time$hcst_end) %% 1 == 0) || + (!(recipe$Analysis$Time$hcst_end > 0))) { + error(recipe$Run$logger, + "The element 'hcst_end' must be a valid year.") + error_status <- T + } + if (recipe$Analysis$Time$hcst_end < recipe$Analysis$Time$hcst_start) { + error(recipe$Run$logger, + "'hcst_end' cannot be smaller than 'hcst_start'.") + error_status <- T + } ## TODO: Is this needed? if (is.null(recipe$Analysis$Time$fcst_year) || tolower(recipe$Analysis$Time$fcst_year) == 'none') { -- GitLab From d7ea2794b6df6e1492888546679aeba8758f63e3 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Thu, 29 Dec 2022 15:11:47 +0100 Subject: [PATCH 030/388] Update script to divide recipe --- ...ample.yml => recipe_splitting_example.yml} | 16 +-- tools/divide_recipe.R | 98 ++++++++++--------- 2 files changed, 61 insertions(+), 53 deletions(-) rename recipes/{recipe_example.yml => recipe_splitting_example.yml} (86%) diff --git a/recipes/recipe_example.yml b/recipes/recipe_splitting_example.yml similarity index 86% rename from recipes/recipe_example.yml rename to recipes/recipe_splitting_example.yml index 27f74df9..e62611ab 100644 --- a/recipes/recipe_example.yml +++ b/recipes/recipe_splitting_example.yml @@ -4,7 +4,7 @@ Description: Author: V. Agudetse - Info: Test for main recipe + Info: Test for recipe splitting ################################################################################ ## ANALYSIS CONFIGURATION @@ -21,23 +21,25 @@ Analysis: - {name: system5c3s} Multimodel: False # single option Reference: - name: era5 # multiple references for single model? + - {name: era5} # multiple references for single model? Time: - sdate: '1101' # list, split + sdate: # list, split + - '1101' + - '1201' fcst_year: '2020' # list, don't split, handled internally hcst_start: '1993' # single option hcst_end: '2016' # single option ftime_min: 1 # single option - ftime_max: 6 # singl eoption + ftime_max: 6 # single option Region: # multiple lists, split? Add region name if length(Region) > 1 - - {name: "global", latmin: -90, latmax: 90, lonmin: 0, lonmax: 360} + - {name: "global", latmin: -90, latmax: 90, lonmin: 0, lonmax: 359.9} - {name: "nino34", latmin: -5, latmax: 5, lonmin: -10, lonmax: 60} Regrid: - method: bilinear # allow multiple methods? + method: bilinear ## TODO: allow multiple methods? type: to_system Workflow: Calibration: - method: mse_min # list, split? + method: mse_min ## TODO: list, split? Skill: metric: RPS, RPSS, CRPS, CRPSS, FRPSS, BSS10, BSS90, mean_bias, mean_bias_SS # list, don't split Probabilities: diff --git a/tools/divide_recipe.R b/tools/divide_recipe.R index 8f4ef35a..fd4efc6e 100644 --- a/tools/divide_recipe.R +++ b/tools/divide_recipe.R @@ -1,11 +1,8 @@ -# recipe: the content of the recipe -# verifications: the output from check_recipe -# folder: the name of the output folder for this run -# logger: the log file obtain from prepare_outputs +# recipe: the recipe as returned by prepare_outputs() +divide_recipe <- function(recipe) { -## TODO: Rethink strategy and adapt function accordingly -divide_recipe <- function(recipe, verifications, folder, logger) { - info(logger, "Spliting recipe in single verifications.") + ## TODO: Implement dependent vs independent verifications? + info(recipe$Run$logger, "Spliting recipe in single verifications.") beta_recipe <- list(Description = append(recipe$Description, "split version"), Analysis = list(Horizon = recipe$Analysis$Horizon, @@ -17,37 +14,37 @@ divide_recipe <- function(recipe, verifications, folder, logger) { Workflow = recipe$Analysis$Workflow, Output_format = recipe$Analysis$Output_format), - Run = recipe$Run) - # duplicate recipe by Variables considering dep and indep: - all_recipes <- list(beta_recipe) - i <- 1 # to get track of the recipe number - for (indep in verifications$independent) { - all_recipes[[i]]$Analysis$Variables <- indep - i = i + 1 - all_recipes <- append(all_recipes, list(beta_recipe)) - } - for (dep in verifications$dependent) { - all_recipes[[i]]$Analysis$Variables <- dep - i = i + 1 - all_recipes <- append(all_recipes, list(beta_recipe)) + Run = recipe$Run[c("Loglevel", "output_dir", "Terminal", + "code_dir", "logfile")]) + + # duplicate recipe by independent 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]] } - all_recipes <- all_recipes[-length(all_recipes)] + # for (dep in verifications$dependent) { + # all_recipes[[i]]$Analysis$Variables <- dep + # i = i + 1 + # all_recipes <- append(all_recipes, list(beta_recipe)) + # } + # all_recipes <- all_recipes[-length(all_recipes)] # wth does this do + # duplicate recipe by Datasets: # check Systems if (recipe$Analysis$Datasets$Multimodel) { for (reci in 1:length(all_recipes)) { - all_recipes[[reci]]$Analysis$Datasets <- list( - System = recipe$Analysis$Datasets$System, - Multimodel = recipe$Analysis$Datasets$Multimodel, - Reference = NULL) + all_recipes[[reci]]$Analysis$Datasets <- + list(System = recipe$Analysis$Datasets$System, + Multimodel = recipe$Analysis$Datasets$Multimodel, + Reference = NULL) } } else { for (sys in 1:length(recipe$Analysis$Datasets$System)) { for (reci in 1:length(all_recipes)) { - all_recipes[[reci]]$Analysis$Datasets <- list( - System = recipe$Analysis$Datasets$System[[sys]], - Multimodel = recipe$Analysis$Datasets$Multimodel, - Reference = NULL) + all_recipes[[reci]]$Analysis$Datasets <- + list(System = recipe$Analysis$Datasets$System[[sys]], + Multimodel = recipe$Analysis$Datasets$Multimodel, + Reference = NULL) } if (sys == 1) { recipes <- all_recipes @@ -74,28 +71,28 @@ divide_recipe <- function(recipe, verifications, folder, logger) { # Duplicate recipe by Region recipes <- list() for (reg in 1:length(recipe$Analysis$Region)) { - if (length(recipe$Analysis$Region[[reg]]) == 4) { ##TODO: THIS SHOULD BE ONLY CHECK IN THE RECIPE CHECKER? + # if (length(recipe$Analysis$Region[[reg]]) == 4) { ##TODO: THIS SHOULD BE ONLY CHECK IN THE RECIPE CHECKER? for (reci in 1:length(all_recipes)) { - all_recipes[[reci]]$Analysis$Region <- - recipe$Analysis$Region[[reg]] + all_recipes[[reci]]$Analysis$Region <- recipe$Analysis$Region[[reg]] } recipes <- append(recipes, all_recipes) - } + # } } all_recipes <- recipes rm(list = 'recipes') + # Duplicate recipe by start date if (tolower(recipe$Analysis$Horizon) == 'seasonal') { - for (sday in 1:length(recipe$Analysis$Time$sdate$fcst_sday)) { + for (sdate in 1:length(recipe$Analysis$Time$sdate)) { for (reci in 1:length(all_recipes)) { - all_recipes[[reci]]$Analysis$Time <- list(sdate = list( - fcst_syear = recipe$Analysis$Time$sdate$fcst_syear, - fcst_sday = recipe$Analysis$Time$sdate$fcst_sday[[sday]]), - hcst_start = recipe$Analysis$Time$hcst_start, - hcst_end = recipe$Analysis$Time$hcst_end, - leadtimemin = recipe$Analysis$Time$leadtimemin, - leadtimemax = recipe$Analysis$Time$leadtimemax) + 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) } - if (sday == 1) { + if (sdate == 1) { recipes <- all_recipes } else { recipes <- append(recipes, all_recipes) @@ -104,12 +101,21 @@ divide_recipe <- function(recipe, verifications, folder, logger) { all_recipes <- recipes rm(list = 'recipes') } # Rest of horizons - # Finally, save all recipes in saparated yaml files + # Save all recipes in separate YAML files + ## TODO: Re-add recipe$Run$logger for (reci in 1:length(all_recipes)) { + if (reci < 10) { + recipe_number <- paste0("0", reci) + } else { + recipe_number <- reci + } write_yaml(all_recipes[[reci]], - paste0(folder, "/logs/recipes/recipe_", reci, ".yml")) + paste0(recipe$Run$output_dir, "/logs/recipes/recipe_", + recipe_number, ".yml")) + all_recipes[[reci]]$Run$logger <- recipe$Run$logger } - text <- paste0("See folder ",folder,"/logs/recipes/ to see the individual recipes.") - info(logger, text) + text <- paste0("See recipe$Run$output_dir ", recipe$Run$output_dir, + "/logs/recipes/ to see the individual recipes.") + info(recipe$Run$logger, text) return(all_recipes) } -- GitLab From 449258ad087a30faa1ae236eb381bd4e711dd481 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Thu, 29 Dec 2022 15:14:25 +0100 Subject: [PATCH 031/388] Move old test recipes to new directory --- recipes/tests/{ => old_tests}/execute_tests.R | 0 recipes/tests/{ => old_tests}/seasonal_testWorkflow1.yml | 0 recipes/tests/{ => old_tests}/seasonal_testWorkflow2.yml | 0 recipes/tests/{ => old_tests}/seasonal_testWorkflow3.yml | 0 recipes/tests/{ => old_tests}/seasonal_testWorkflow4.yml | 0 recipes/tests/{ => old_tests}/seasonal_testWorkflow5.yml | 0 recipes/tests/{ => old_tests}/seasonal_testWorkflow6.yml | 0 recipes/tests/{ => old_tests}/seasonal_testWorkflow7.yml | 0 recipes/tests/{ => old_tests}/seasonal_testWorkflow8.yml | 0 9 files changed, 0 insertions(+), 0 deletions(-) rename recipes/tests/{ => old_tests}/execute_tests.R (100%) rename recipes/tests/{ => old_tests}/seasonal_testWorkflow1.yml (100%) rename recipes/tests/{ => old_tests}/seasonal_testWorkflow2.yml (100%) rename recipes/tests/{ => old_tests}/seasonal_testWorkflow3.yml (100%) rename recipes/tests/{ => old_tests}/seasonal_testWorkflow4.yml (100%) rename recipes/tests/{ => old_tests}/seasonal_testWorkflow5.yml (100%) rename recipes/tests/{ => old_tests}/seasonal_testWorkflow6.yml (100%) rename recipes/tests/{ => old_tests}/seasonal_testWorkflow7.yml (100%) rename recipes/tests/{ => old_tests}/seasonal_testWorkflow8.yml (100%) diff --git a/recipes/tests/execute_tests.R b/recipes/tests/old_tests/execute_tests.R similarity index 100% rename from recipes/tests/execute_tests.R rename to recipes/tests/old_tests/execute_tests.R diff --git a/recipes/tests/seasonal_testWorkflow1.yml b/recipes/tests/old_tests/seasonal_testWorkflow1.yml similarity index 100% rename from recipes/tests/seasonal_testWorkflow1.yml rename to recipes/tests/old_tests/seasonal_testWorkflow1.yml diff --git a/recipes/tests/seasonal_testWorkflow2.yml b/recipes/tests/old_tests/seasonal_testWorkflow2.yml similarity index 100% rename from recipes/tests/seasonal_testWorkflow2.yml rename to recipes/tests/old_tests/seasonal_testWorkflow2.yml diff --git a/recipes/tests/seasonal_testWorkflow3.yml b/recipes/tests/old_tests/seasonal_testWorkflow3.yml similarity index 100% rename from recipes/tests/seasonal_testWorkflow3.yml rename to recipes/tests/old_tests/seasonal_testWorkflow3.yml diff --git a/recipes/tests/seasonal_testWorkflow4.yml b/recipes/tests/old_tests/seasonal_testWorkflow4.yml similarity index 100% rename from recipes/tests/seasonal_testWorkflow4.yml rename to recipes/tests/old_tests/seasonal_testWorkflow4.yml diff --git a/recipes/tests/seasonal_testWorkflow5.yml b/recipes/tests/old_tests/seasonal_testWorkflow5.yml similarity index 100% rename from recipes/tests/seasonal_testWorkflow5.yml rename to recipes/tests/old_tests/seasonal_testWorkflow5.yml diff --git a/recipes/tests/seasonal_testWorkflow6.yml b/recipes/tests/old_tests/seasonal_testWorkflow6.yml similarity index 100% rename from recipes/tests/seasonal_testWorkflow6.yml rename to recipes/tests/old_tests/seasonal_testWorkflow6.yml diff --git a/recipes/tests/seasonal_testWorkflow7.yml b/recipes/tests/old_tests/seasonal_testWorkflow7.yml similarity index 100% rename from recipes/tests/seasonal_testWorkflow7.yml rename to recipes/tests/old_tests/seasonal_testWorkflow7.yml diff --git a/recipes/tests/seasonal_testWorkflow8.yml b/recipes/tests/old_tests/seasonal_testWorkflow8.yml similarity index 100% rename from recipes/tests/seasonal_testWorkflow8.yml rename to recipes/tests/old_tests/seasonal_testWorkflow8.yml -- GitLab From db4d66fb1edb19085f882ed545df2b66740de349 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Thu, 29 Dec 2022 15:18:56 +0100 Subject: [PATCH 032/388] Change enable_checks param to disable_checks, default FALSE --- tools/prepare_outputs.R | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/tools/prepare_outputs.R b/tools/prepare_outputs.R index d6eb970e..56ab56c6 100644 --- a/tools/prepare_outputs.R +++ b/tools/prepare_outputs.R @@ -1,7 +1,7 @@ #'Read recipe YAML file and create and store logfile info #' #'The purpose of this function is to read the recipe configuration for Auto-S2S -#'workflows and create logfiles stores in an the output directory specified in +#'workflows and create logfiles stored in an the output directory specified in #'the recipe. It returns an object of class logger that stores information on #'the recipe configuration and errors. #' @@ -21,10 +21,10 @@ #'@export prepare_outputs <- function(recipe_file, - enable_checks = TRUE) { + disable_checks = FALSE) { # recipe_file: path to recipe YAML file -# enable_checker: Whether or not to run the recipe checker +# disable_checks: If TRUE, does not perform checks on recipe recipe <- read_yaml(recipe_file) recipe$recipe_path <- recipe_file @@ -72,9 +72,8 @@ prepare_outputs <- function(recipe_file, recipe$Run$logger <- logger recipe$Run$logfile <- logfile # Run recipe checker - if (enable_checks) { + if !(disable_checks) { check_recipe(recipe) } - return(recipe) } -- GitLab From 9187ec11aa61e6ad87d0f257ffb3e593328e832f Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Thu, 29 Dec 2022 16:36:28 +0100 Subject: [PATCH 033/388] New recipe; test multiple verifications run serially; fix bug in prepare_outputs() --- modules/test_seasonal.R | 3 +- .../tests/recipe_seasonal_two-variables.yml | 60 +++++++++++++++++++ tools/divide_recipe.R | 7 ++- tools/prepare_outputs.R | 2 +- 4 files changed, 68 insertions(+), 4 deletions(-) create mode 100644 recipes/tests/recipe_seasonal_two-variables.yml diff --git a/modules/test_seasonal.R b/modules/test_seasonal.R index c74fd1b1..d776609d 100644 --- a/modules/test_seasonal.R +++ b/modules/test_seasonal.R @@ -5,8 +5,9 @@ source("modules/Skill/Skill.R") source("modules/Saving/Saving.R") source("modules/Visualization/Visualization.R") -recipe_file <- "modules/Loading/testing_recipes/recipe_seasonal-tests.yml" +recipe_file <- "recipes/recipe_splitting_example.yml" recipe <- prepare_outputs(recipe_file, enable_checks = F) +atomic_recipes <- divide_recipe(recipe) ## archive <- read_yaml(paste0(recipe$Run$code_dir, "conf/archive.yml"))$archive # Load datasets diff --git a/recipes/tests/recipe_seasonal_two-variables.yml b/recipes/tests/recipe_seasonal_two-variables.yml new file mode 100644 index 00000000..89406ece --- /dev/null +++ b/recipes/tests/recipe_seasonal_two-variables.yml @@ -0,0 +1,60 @@ +################################################################################ +## RECIPE DESCRIPTION +################################################################################ + +Description: + Author: V. Agudetse + Info: Test Independent verification of two variables + +################################################################################ +## ANALYSIS CONFIGURATION +################################################################################ + +Analysis: + Horizon: Seasonal + Variables: # ECVs and Indicators? + - {name: tas, freq: monthly_mean} + - {name: prlr, freq: monthly_mean} + Datasets: + System: # multiple systems for single model, split if Multimodel = F + - {name: system5c3s} + Multimodel: False # single option + Reference: + - {name: era5} # multiple references for single model? + Time: + sdate: # list, split + - '0101' + fcst_year: '2020' # list, don't split, handled internally + hcst_start: '2000' # single option + hcst_end: '2016' # single option + ftime_min: 1 # single option + ftime_max: 3 # single option + Region: # multiple lists, split? Add region name if length(Region) > 1 + - {name: "nino34", latmin: -5, latmax: 5, lonmin: -10, lonmax: 60} + Regrid: + method: bilinear ## TODO: allow multiple methods? + type: to_system + Workflow: + Anomalies: + compute: yes + cross_validation: yes + Calibration: + method: mse_min ## TODO: list, split? + Skill: + metric: RPS, RPSS, CRPS, CRPSS, FRPSS, BSS10, BSS90, mean_bias, mean_bias_SS # list, don't split + Probabilities: + percentiles: [[1/3, 2/3], [1/10, 9/10], [1/4, 2/4, 3/4]] # list, don't split + Indicators: + index: no # ? + ncores: 7 + remove_NAs: yes # bool, don't split + Output_format: S2S4E # string, don't split + +################################################################################ +## Run CONFIGURATION +################################################################################ +Run: + Loglevel: INFO + Terminal: yes + output_dir: /esarchive/scratch/vagudets/repos/auto-s2s/out-logs/ + code_dir: /esarchive/scratch/vagudets/repos/auto-s2s/ diff --git a/tools/divide_recipe.R b/tools/divide_recipe.R index fd4efc6e..6cc8ce4a 100644 --- a/tools/divide_recipe.R +++ b/tools/divide_recipe.R @@ -114,8 +114,11 @@ divide_recipe <- function(recipe) { recipe_number, ".yml")) all_recipes[[reci]]$Run$logger <- recipe$Run$logger } - text <- paste0("See recipe$Run$output_dir ", recipe$Run$output_dir, - "/logs/recipes/ to see the individual recipes.") + info(recipe$Run$logger, + paste("The main recipe has been devided into", length(all_recipes), + "atomic recipes.")) + text <- paste0("See output directory ", recipe$Run$output_dir, + "/logs/recipes/ to see all the individual atomic recipes.") info(recipe$Run$logger, text) return(all_recipes) } diff --git a/tools/prepare_outputs.R b/tools/prepare_outputs.R index 56ab56c6..72fc5433 100644 --- a/tools/prepare_outputs.R +++ b/tools/prepare_outputs.R @@ -72,7 +72,7 @@ prepare_outputs <- function(recipe_file, recipe$Run$logger <- logger recipe$Run$logfile <- logfile # Run recipe checker - if !(disable_checks) { + if (!disable_checks) { check_recipe(recipe) } return(recipe) -- GitLab From 8b30132f06d7cce5b4202d68400ee36b30e382a5 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Thu, 29 Dec 2022 17:01:50 +0100 Subject: [PATCH 034/388] Add info to atomic recipe, fix typo --- tools/divide_recipe.R | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tools/divide_recipe.R b/tools/divide_recipe.R index 6cc8ce4a..18962f93 100644 --- a/tools/divide_recipe.R +++ b/tools/divide_recipe.R @@ -4,7 +4,9 @@ divide_recipe <- function(recipe) { ## TODO: Implement dependent vs independent verifications? info(recipe$Run$logger, "Spliting recipe in single verifications.") beta_recipe <- list(Description = append(recipe$Description, - "split version"), + list(Origin = paste("Atomic recipe,", + "split from:", + recipe$name))), Analysis = list(Horizon = recipe$Analysis$Horizon, Variables = NULL, Datasets = NULL, @@ -115,7 +117,7 @@ divide_recipe <- function(recipe) { all_recipes[[reci]]$Run$logger <- recipe$Run$logger } info(recipe$Run$logger, - paste("The main recipe has been devided into", length(all_recipes), + paste("The main recipe has been divided into", length(all_recipes), "atomic recipes.")) text <- paste0("See output directory ", recipe$Run$output_dir, "/logs/recipes/ to see all the individual atomic recipes.") -- GitLab From 8a589bfe32da3bf2e5ddeb3662d96294f4988481 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Fri, 30 Dec 2022 10:16:56 +0100 Subject: [PATCH 035/388] Simple example using a for loop --- modules/test_seasonal.R | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/modules/test_seasonal.R b/modules/test_seasonal.R index d776609d..921e8f96 100644 --- a/modules/test_seasonal.R +++ b/modules/test_seasonal.R @@ -5,23 +5,25 @@ source("modules/Skill/Skill.R") source("modules/Saving/Saving.R") source("modules/Visualization/Visualization.R") -recipe_file <- "recipes/recipe_splitting_example.yml" -recipe <- prepare_outputs(recipe_file, enable_checks = F) +recipe_file <- "recipes/tests/recipe_seasonal_two-variables.yml" +recipe <- prepare_outputs(recipe_file, disable_checks = T) atomic_recipes <- divide_recipe(recipe) ## archive <- read_yaml(paste0(recipe$Run$code_dir, "conf/archive.yml"))$archive -# Load datasets -data <- load_datasets(recipe) -# Calibrate datasets -calibrated_data <- calibrate_datasets(recipe, data) -# Compute anomalies -calibrated_data <- compute_anomalies(recipe, calibrated_data) -# Compute skill metrics -skill_metrics <- compute_skill_metrics(recipe, calibrated_data) -# Compute percentiles and probability bins -probabilities <- compute_probabilities(recipe, calibrated_data) -# Export all data to netCDF -save_data(recipe, calibrated_data, skill_metrics, probabilities) -# Plot data -plot_data(recipe, calibrated_data, skill_metrics, probabilities, - significance = T) +for (atomic_recipe in atomic_recipes) { + # Load datasets + data <- load_datasets(atomic_recipe) + # Calibrate datasets + calibrated_data <- calibrate_datasets(atomic_recipe, data) + # Compute anomalies + calibrated_data <- compute_anomalies(atomic_recipe, calibrated_data) + # Compute skill metrics + skill_metrics <- compute_skill_metrics(atomic_recipe, calibrated_data) + # Compute percentiles and probability bins + probabilities <- compute_probabilities(atomic_recipe, calibrated_data) + # Export all data to netCDF + save_data(atomic_recipe, calibrated_data, skill_metrics, probabilities) + # Plot data + plot_data(atomic_recipe, calibrated_data, skill_metrics, probabilities, + significance = T) +} -- GitLab From 200d3eefd7b197e11701da2cc92e83da726a198d Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Fri, 30 Dec 2022 10:18:34 +0100 Subject: [PATCH 036/388] Add a TODO --- modules/Saving/paths2save.R | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/Saving/paths2save.R b/modules/Saving/paths2save.R index 2d6353fe..2d5a0a4e 100644 --- a/modules/Saving/paths2save.R +++ b/modules/Saving/paths2save.R @@ -1,4 +1,6 @@ ## TODO: Separate by time aggregation +## TODO: Build a default path that accounts for: +## variable, system, reference, start date and region name get_filename <- function(dir, recipe, var, date, agg, file.type) { # This function builds the path of the output file based on directory, -- GitLab From 2473ba5d0f791e71de913f92331229bd59ca6fe4 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Wed, 11 Jan 2023 15:53:03 +0100 Subject: [PATCH 037/388] Adapt check_recipe() and prepare_outputs() to main recipe, improve generation of atomic recipes --- tools/check_recipe.R | 30 ++++++++++++++------ tools/divide_recipe.R | 23 +++++++-------- tools/prepare_outputs.R | 30 ++++++++++++-------- tools/read_atomic_recipe.R | 57 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 106 insertions(+), 34 deletions(-) create mode 100644 tools/read_atomic_recipe.R diff --git a/tools/check_recipe.R b/tools/check_recipe.R index 5fca3597..3371b61f 100644 --- a/tools/check_recipe.R +++ b/tools/check_recipe.R @@ -1,8 +1,8 @@ check_recipe <- function(recipe) { - # recipe: yaml recipe already read it + ## TODO: Change input to recipe_file?? + ## TODO: Adapt to main recipe, generate 'recipe_check.log' file ## TODO: Adapt to decadal case - info(recipe$Run$logger, paste("Checking recipe:", recipe$recipe_path)) # --------------------------------------------------------------------- @@ -167,11 +167,22 @@ check_recipe <- function(recipe) { # Region checks: LIMITS <- c('latmin', 'latmax', 'lonmin', 'lonmax') - if (!all(LIMITS %in% names(recipe$Analysis$Region))) { - error(recipe$Run$logger, - paste0("There must be 4 elements in 'Region': ", - paste(LIMITS, collapse = ", "), ".")) - error_status <- T + for (region in recipe$Analysis$Region) { + if (!all(LIMITS %in% names(region))) { + error(recipe$Run$logger, + paste0("There must be 4 elements in 'Region': ", + paste(LIMITS, collapse = ", "), ".")) + error_status <- T + } + } + if (length(recipe$Analysis$Region) > 1) { + for (region in recipe$Analysis$Region) { + if (is.null(region$name)) { + error(recipe$Run$logger, + paste("If more than one region has been defined, every region", + "must have a unique name.")) + } + } } ## TODO: Implement multiple regions # nregions <- length(recipe$Analysis$Region) @@ -222,7 +233,7 @@ check_recipe <- function(recipe) { "(True/False or yes/no).")) error_status <- T } else if ((recipe$Analysis$Workflow$Anomalies$compute) && - (!is.logical(recipe$Analysis$Workflow$Anomalies))) { + (!is.logical(recipe$Analysis$Workflow$Anomalies$cross_validation))) { error(recipe$Run$logger, paste("If anomaly computation is requested, parameter", "'cross_validation' must be defined under 'Anomalies', @@ -311,7 +322,8 @@ check_recipe <- function(recipe) { # Return error if any check has failed if (error_status) { error(recipe$Run$logger, "RECIPE CHECK FAILED.") - stop("The recipe contains some errors. The full list is in the logs.") + stop("The recipe contains some errors. Find the full list in the", + "startup.log file.") } else { info(recipe$Run$logger, "##### RECIPE CHECK SUCCESSFULL #####") # return(append(nverifications, fcst.sdate)) diff --git a/tools/divide_recipe.R b/tools/divide_recipe.R index 18962f93..f2ab44eb 100644 --- a/tools/divide_recipe.R +++ b/tools/divide_recipe.R @@ -2,7 +2,7 @@ divide_recipe <- function(recipe) { ## TODO: Implement dependent vs independent verifications? - info(recipe$Run$logger, "Spliting recipe in single verifications.") + info(recipe$Run$logger, "Splitting recipe in single verifications.") beta_recipe <- list(Description = append(recipe$Description, list(Origin = paste("Atomic recipe,", "split from:", @@ -18,7 +18,6 @@ divide_recipe <- function(recipe) { recipe$Analysis$Output_format), Run = recipe$Run[c("Loglevel", "output_dir", "Terminal", "code_dir", "logfile")]) - # duplicate recipe by independent variables: all_recipes <- rep(list(beta_recipe), length(recipe$Analysis$Variables)) for (var in 1:length(recipe$Analysis$Variables)) { @@ -73,12 +72,10 @@ divide_recipe <- function(recipe) { # Duplicate recipe by Region recipes <- list() for (reg in 1:length(recipe$Analysis$Region)) { - # if (length(recipe$Analysis$Region[[reg]]) == 4) { ##TODO: THIS SHOULD BE ONLY CHECK IN THE RECIPE CHECKER? - for (reci in 1:length(all_recipes)) { - all_recipes[[reci]]$Analysis$Region <- recipe$Analysis$Region[[reg]] - } - recipes <- append(recipes, all_recipes) - # } + for (reci in 1:length(all_recipes)) { + all_recipes[[reci]]$Analysis$Region <- recipe$Analysis$Region[[reg]] + } + recipes <- append(recipes, all_recipes) } all_recipes <- recipes rm(list = 'recipes') @@ -104,7 +101,6 @@ divide_recipe <- function(recipe) { rm(list = 'recipes') } # Rest of horizons # Save all recipes in separate YAML files - ## TODO: Re-add recipe$Run$logger for (reci in 1:length(all_recipes)) { if (reci < 10) { recipe_number <- paste0("0", reci) @@ -112,15 +108,16 @@ divide_recipe <- function(recipe) { recipe_number <- reci } write_yaml(all_recipes[[reci]], - paste0(recipe$Run$output_dir, "/logs/recipes/recipe_", + paste0(recipe$Run$output_dir, "/logs/recipes/atomic_recipe_", recipe_number, ".yml")) - all_recipes[[reci]]$Run$logger <- recipe$Run$logger + # all_recipes[[reci]]$Run$logger <- recipe$Run$logger } info(recipe$Run$logger, paste("The main recipe has been divided into", length(all_recipes), "atomic recipes.")) - text <- paste0("See output directory ", recipe$Run$output_dir, + text <- paste0("Check output directory ", recipe$Run$output_dir, "/logs/recipes/ to see all the individual atomic recipes.") info(recipe$Run$logger, text) - return(all_recipes) + ## TODO: Change returns? + return(recipe$Run$output_dir) } diff --git a/tools/prepare_outputs.R b/tools/prepare_outputs.R index 72fc5433..79f6b44d 100644 --- a/tools/prepare_outputs.R +++ b/tools/prepare_outputs.R @@ -21,30 +21,35 @@ #'@export prepare_outputs <- function(recipe_file, - disable_checks = FALSE) { - -# recipe_file: path to recipe YAML file -# disable_checks: If TRUE, does not perform checks on recipe - + disable_checks = FALSE, + disable_uniqueID = FALSE) { + # recipe_file: path to recipe YAML file + # disable_checks: If TRUE, does not perform checks on recipe + # disable_uniqueID: If TRUE, does not add a unique ID to output dir recipe <- read_yaml(recipe_file) recipe$recipe_path <- recipe_file recipe$name <- tools::file_path_sans_ext(basename(recipe_file)) output_dir = recipe$Run$output_dir - # Create output folders: - folder_name <- paste0(gsub(".yml", "", gsub("/", "_", recipe$name)), "_", - gsub(" ", "", gsub(":", "", gsub("-", "", Sys.time())))) + # Create output folders + if (disable_uniqueID) { + folder_name <- paste0(gsub(".yml", "", gsub("/", "_", recipe$name))) + } else { + folder_name <- paste0(gsub(".yml", "", gsub("/", "_", recipe$name)), "_", + gsub(" ", "", gsub(":", "", gsub("-", "", + Sys.time())))) + } print("Saving all outputs to:") - print(output_dir) - print(folder_name) + print(paste0(output_dir, folder_name)) dir.create(file.path(output_dir, folder_name, 'outputs'), recursive = TRUE) dir.create(file.path(output_dir, folder_name, 'logs')) dir.create(file.path(output_dir, folder_name, 'logs', 'recipes')) + ## TODO: Move this part to main recipe # Copy recipe to output folder file.copy(recipe$recipe_path, file.path(output_dir, folder_name, 'logs', 'recipes')) # Create log output file - logfile <- file.path(output_dir, folder_name, 'logs', 'log.txt') + logfile <- file.path(output_dir, folder_name, 'logs', 'startup.log') file.create(logfile) # Set default behaviour of logger @@ -65,9 +70,10 @@ prepare_outputs <- function(recipe_file, layout = default_log_layout()))) } else { logger <- log4r::logger(threshold = recipe$Run$Loglevel, - appenders = list(file_appende(logfile, append = TRUE, + appenders = list(file_appender(logfile, append = TRUE, layout = default_log_layout()))) } + ## TODO: Move output_dir assignation recipe$Run$output_dir <- file.path(output_dir, folder_name) recipe$Run$logger <- logger recipe$Run$logfile <- logfile diff --git a/tools/read_atomic_recipe.R b/tools/read_atomic_recipe.R new file mode 100644 index 00000000..1eadb707 --- /dev/null +++ b/tools/read_atomic_recipe.R @@ -0,0 +1,57 @@ +#'Read recipe YAML file and create and store logfile info +#' +#'The purpose of this function is to read the atomic recipe generated by +#'divide_recipe() and create its individual logfile in the output directory +#'specified in the recipe. It returns the recipe as a list with an object of +#'class logger added to it, that stores information on the workflow execution +#'and errors. +#' +#'@param recipe_file path to a YAML file with Auto-S2S configuration recipe +#' +#'@return list contaning recipe with logger, log file name and log dir name +#' +#'@import log4r +#'@import yaml +#' +#'@examples +#'setwd("/esarchive/scratch/vagudets/repos/auto-s2s/") +#'library(yaml) +#'recipe <- prepare_outputs("modules/data_load/recipe_1.yml") +#'info(recipe$Run$logger, "This is an info message") +#' +#'@export + +read_atomic_recipe <- function(recipe_file) { + # recipe_file: path to recipe YAML file + recipe <- read_yaml(recipe_file) + recipe$recipe_path <- recipe_file + recipe$name <- tools::file_path_sans_ext(basename(recipe_file)) + # Create log file for atomic recipe + logfile <- file.path(recipe$Run$output_dir, 'logs', + paste0(recipe$name, '.log')) + file.create(logfile) + # Set default behaviour of logger + if (is.null(recipe$Run)) { + recipe$Run <- list(Loglevel = 'INFO', Terminal = TRUE) + } + if (is.null(recipe$Run$Loglevel)) { + recipe$Run$Loglevel <- 'INFO' + } + if (!is.logical(recipe$Run$Terminal)) { + recipe$Run$Terminal <- TRUE + } + # logger set-up + if (recipe$Run$Terminal) { + logger <- log4r::logger(threshold = recipe$Run$Loglevel, + appenders = list(console_appender(layout = default_log_layout()), + file_appender(logfile, append = TRUE, + layout = default_log_layout()))) + } else { + logger <- log4r::logger(threshold = recipe$Run$Loglevel, + appenders = list(file_appender(logfile, append = TRUE, + layout = default_log_layout()))) + } + recipe$Run$logger <- logger + recipe$Run$logfile <- logfile + return(recipe) +} -- GitLab From ddd75337e16e4f642d8d2f4cbd54d5fb2c5ed2d2 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Wed, 11 Jan 2023 15:54:56 +0100 Subject: [PATCH 038/388] Add read_atomic_recipe() to libs --- tools/libs.R | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tools/libs.R b/tools/libs.R index a0767f76..e3c3c277 100644 --- a/tools/libs.R +++ b/tools/libs.R @@ -16,7 +16,7 @@ library(RColorBrewer) library(grDevices) # # library(parallel) -# library(pryr) # To check mem usage. +library(pryr) # To check mem usage. #setwd("/esarchive/scratch/nperez/git/S2S4E-backend-BSC/data-analysis/") # source('export_2_nc.R') # source('S2S/s2s.filefmt.R') @@ -32,4 +32,5 @@ source("tools/check_recipe.R") source("tools/prepare_outputs.R") source("tools/divide_recipe.R") source("tools/data_summary.R") +source("tools/read_atomic_recipe.R") # source("tools/add_dims.R") # Not sure if necessary yet -- GitLab From f5f58b933ad9a671479450110f371d1f40b529e3 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Thu, 12 Jan 2023 09:44:03 +0100 Subject: [PATCH 039/388] Add ncores and remove_NAs --- tools/divide_recipe.R | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tools/divide_recipe.R b/tools/divide_recipe.R index f2ab44eb..6b154f1d 100644 --- a/tools/divide_recipe.R +++ b/tools/divide_recipe.R @@ -14,6 +14,8 @@ divide_recipe <- function(recipe) { Region = NULL, Regrid = recipe$Analysis$Regrid, Workflow = recipe$Analysis$Workflow, + ncores = recipe$Analysis$ncores, + remove_NAs = recipe$Analysis$remove_NAs, Output_format = recipe$Analysis$Output_format), Run = recipe$Run[c("Loglevel", "output_dir", "Terminal", -- GitLab From 4ef0412cb8c32927a9e092829b86654da147c477 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Thu, 12 Jan 2023 11:14:07 +0100 Subject: [PATCH 040/388] Fix 'expected unary operator' message --- MODULES | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/MODULES b/MODULES index 0a01a979..f23a459d 100644 --- a/MODULES +++ b/MODULES @@ -3,7 +3,7 @@ # WARNING: CDO HAS TO BE ON VERSION 1.9.4 # (If not, conflicts with weekly means computation could appear) -if [ $BSC_MACHINE == "power" ]; then +if [[ $BSC_MACHINE == "power" ]]; then module unuse /apps/modules/modulefiles/applications module use /gpfs/projects/bsc32/software/rhel/7.4/ppc64le/POWER9/modules/all/ @@ -11,7 +11,7 @@ if [ $BSC_MACHINE == "power" ]; then module load CDO/1.9.4-foss-2018b module load R/3.6.1-foss-2018b -elif [ $BSC_MACHINE == "nord3v2" ]; then +elif [[ $BSC_MACHINE == "nord3v2" ]]; then module use /gpfs/projects/bsc32/software/suselinux/11/modules/all module unuse /apps/modules/modulefiles/applications /apps/modules/modulefiles/compilers /apps/modules/modulefiles/tools /apps/modules/modulefiles/libraries /apps/modules/modulefiles/environment -- GitLab From 6fb775171db03cf7b6bb3f78a0267a0ac8b012b3 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Thu, 12 Jan 2023 11:14:17 +0100 Subject: [PATCH 041/388] Add a TODO --- modules/Loading/Loading.R | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/Loading/Loading.R b/modules/Loading/Loading.R index 66a53451..21a9bd7c 100644 --- a/modules/Loading/Loading.R +++ b/modules/Loading/Loading.R @@ -324,6 +324,7 @@ load_datasets <- function(recipe) { } # Convert prlr from m/s to mm/day + ## TODO: Revise this ## TODO: Make a unit conversion function? if (variable == "prlr") { # Verify that the units are m/s and the same in obs and hcst -- GitLab From 3d97761563843a89fad4ad9e0e715c2386d5a4b5 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Thu, 12 Jan 2023 11:14:42 +0100 Subject: [PATCH 042/388] Restore single verification wf --- modules/test_seasonal.R | 34 ++++++++++++++++------------------ 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/modules/test_seasonal.R b/modules/test_seasonal.R index 921e8f96..1a723478 100644 --- a/modules/test_seasonal.R +++ b/modules/test_seasonal.R @@ -6,24 +6,22 @@ source("modules/Saving/Saving.R") source("modules/Visualization/Visualization.R") recipe_file <- "recipes/tests/recipe_seasonal_two-variables.yml" -recipe <- prepare_outputs(recipe_file, disable_checks = T) +recipe <- prepare_outputs(recipe_file) atomic_recipes <- divide_recipe(recipe) ## archive <- read_yaml(paste0(recipe$Run$code_dir, "conf/archive.yml"))$archive -for (atomic_recipe in atomic_recipes) { - # Load datasets - data <- load_datasets(atomic_recipe) - # Calibrate datasets - calibrated_data <- calibrate_datasets(atomic_recipe, data) - # Compute anomalies - calibrated_data <- compute_anomalies(atomic_recipe, calibrated_data) - # Compute skill metrics - skill_metrics <- compute_skill_metrics(atomic_recipe, calibrated_data) - # Compute percentiles and probability bins - probabilities <- compute_probabilities(atomic_recipe, calibrated_data) - # Export all data to netCDF - save_data(atomic_recipe, calibrated_data, skill_metrics, probabilities) - # Plot data - plot_data(atomic_recipe, calibrated_data, skill_metrics, probabilities, - significance = T) -} +# Load datasets +data <- load_datasets(recipe) +# Calibrate datasets +data <- calibrate_datasets(recipe, data) +# Compute anomalies +data <- compute_anomalies(recipe, data) +# Compute skill metrics +skill_metrics <- compute_skill_metrics(recipe, data) +# Compute percentiles and probability bins +probabilities <- compute_probabilities(recipe, data) +# Export all data to netCDF +save_data(recipe, data, skill_metrics, probabilities) +# Plot data +plot_data(recipe, data, skill_metrics, probabilities, + significance = T) -- GitLab From b738aa2eda2b1f4cd37a9481444c8f3bb6926dab Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Thu, 12 Jan 2023 11:15:05 +0100 Subject: [PATCH 043/388] tests for multiple verifications and parallelization --- modules/test_parallel_workflow.R | 25 +++++++++++++++++++ modules/test_split.R | 8 ++++++ modules/test_split_and_run.sh | 17 +++++++++++++ .../tests/recipe_seasonal_two-variables.yml | 4 +-- 4 files changed, 52 insertions(+), 2 deletions(-) create mode 100644 modules/test_parallel_workflow.R create mode 100644 modules/test_split.R create mode 100644 modules/test_split_and_run.sh diff --git a/modules/test_parallel_workflow.R b/modules/test_parallel_workflow.R new file mode 100644 index 00000000..30c9cb91 --- /dev/null +++ b/modules/test_parallel_workflow.R @@ -0,0 +1,25 @@ +source("modules/Loading/Loading.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") + +args = commandArgs(trailingOnly = TRUE) +recipe_file <- args[1] +recipe <- read_atomic_recipe(recipe_file) +# Load datasets +data <- load_datasets(recipe) +# Calibrate datasets +data <- calibrate_datasets(recipe, data) +# Compute anomalies +data <- compute_anomalies(recipe, data) +# Compute skill metrics +skill_metrics <- compute_skill_metrics(recipe, data) +# Compute percentiles and probability bins +probabilities <- compute_probabilities(recipe, data) +# Export all data to netCDF +save_data(recipe, data, skill_metrics, probabilities) +# Plot data +plot_data(recipe, data, skill_metrics, probabilities, + significance = T) diff --git a/modules/test_split.R b/modules/test_split.R new file mode 100644 index 00000000..e66a5422 --- /dev/null +++ b/modules/test_split.R @@ -0,0 +1,8 @@ +source("tools/libs.R") + +# Define recipe file path +recipe_file <- "recipes/tests/recipe_seasonal_two-variables.yml" +# Check recipe and prepare output directories +recipe <- prepare_outputs(recipe_file) +# Split recipe into atomic recipes +divide_recipe(recipe) diff --git a/modules/test_split_and_run.sh b/modules/test_split_and_run.sh new file mode 100644 index 00000000..f1ca1f90 --- /dev/null +++ b/modules/test_split_and_run.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +source MODULES + +tmpfile=$(mktemp /tmp/test_split.XXXXXX) +Rscript modules/test_split.R | tee $tmpfile +outdir=$( tail -n 1 $tmpfile | sed 's/"//g' ) +outdir=($outdir) +rm $tmpfile + +## These will have to be separate scripts to work with autosubmit +## Create a tmpfile inside the projdir with a consistent name?? +## '??' would be a chunk +## TODO: Add sbatch +for recipe in ${outdir[1]}/logs/recipes/atomic_recipe_??.yml; do + Rscript modules/test_parallel_workflow.R ${recipe} +done diff --git a/recipes/tests/recipe_seasonal_two-variables.yml b/recipes/tests/recipe_seasonal_two-variables.yml index 89406ece..af262e4d 100644 --- a/recipes/tests/recipe_seasonal_two-variables.yml +++ b/recipes/tests/recipe_seasonal_two-variables.yml @@ -30,7 +30,7 @@ Analysis: ftime_min: 1 # single option ftime_max: 3 # single option Region: # multiple lists, split? Add region name if length(Region) > 1 - - {name: "nino34", latmin: -5, latmax: 5, lonmin: -10, lonmax: 60} + - {name: "tropics", latmin: -5, latmax: 5, lonmin: -10, lonmax: 10} Regrid: method: bilinear ## TODO: allow multiple methods? type: to_system @@ -39,7 +39,7 @@ Analysis: compute: yes cross_validation: yes Calibration: - method: mse_min ## TODO: list, split? + method: raw ## TODO: list, split? Skill: metric: RPS, RPSS, CRPS, CRPSS, FRPSS, BSS10, BSS90, mean_bias, mean_bias_SS # list, don't split Probabilities: -- GitLab From 485a40062089c9c3a50d8bd76ba99ffc334dd143 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Thu, 12 Jan 2023 12:29:22 +0100 Subject: [PATCH 044/388] Fix unary error --- MODULES | 1 - 1 file changed, 1 deletion(-) diff --git a/MODULES b/MODULES index f23a459d..ff2a2a34 100644 --- a/MODULES +++ b/MODULES @@ -16,7 +16,6 @@ elif [[ $BSC_MACHINE == "nord3v2" ]]; then module use /gpfs/projects/bsc32/software/suselinux/11/modules/all module unuse /apps/modules/modulefiles/applications /apps/modules/modulefiles/compilers /apps/modules/modulefiles/tools /apps/modules/modulefiles/libraries /apps/modules/modulefiles/environment - module load CDO/1.9.8-foss-2019b module load R/4.1.2-foss-2019b module load OpenMPI/4.0.5-GCC-8.3.0-nord3-v2 -- GitLab From e60038ed6c800019815656ef4601b2b9cd65f9c6 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Tue, 17 Jan 2023 08:28:01 +0100 Subject: [PATCH 045/388] Test sbatch --- modules/test_parallel_workflow.sh | 13 +++++++++++++ modules/test_split_and_run.sh | 4 +++- 2 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 modules/test_parallel_workflow.sh diff --git a/modules/test_parallel_workflow.sh b/modules/test_parallel_workflow.sh new file mode 100644 index 00000000..4a5dc512 --- /dev/null +++ b/modules/test_parallel_workflow.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +#SBATCH -n 1 +#SBATCH -t 23:59:59 +#SBATCH -J med +#SBATCH -e /esarchive/scratch/vagudets/tmp/auto-s2s-logs/run-%j.err +#SBATCH -o /esarchive/scratch/vagudets/tmp/auto-s2s-logs/run-%j.out + +atomic_recipe=$1 + +source MODULES + +Rscript modules/test_parallel_workflow.R ${atomic_recipe} diff --git a/modules/test_split_and_run.sh b/modules/test_split_and_run.sh index f1ca1f90..97b9a9f7 100644 --- a/modules/test_split_and_run.sh +++ b/modules/test_split_and_run.sh @@ -2,6 +2,8 @@ source MODULES +set -vx + tmpfile=$(mktemp /tmp/test_split.XXXXXX) Rscript modules/test_split.R | tee $tmpfile outdir=$( tail -n 1 $tmpfile | sed 's/"//g' ) @@ -13,5 +15,5 @@ rm $tmpfile ## '??' would be a chunk ## TODO: Add sbatch for recipe in ${outdir[1]}/logs/recipes/atomic_recipe_??.yml; do - Rscript modules/test_parallel_workflow.R ${recipe} + sbatch modules/test_parallel_workflow.sh ${recipe} done -- GitLab From 086eb3ae63b98477c071579611eee55471d4684e Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Mon, 30 Jan 2023 17:16:05 +0100 Subject: [PATCH 046/388] Adapt Anomalies module --- modules/Anomalies/Anomalies.R | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/modules/Anomalies/Anomalies.R b/modules/Anomalies/Anomalies.R index 552f895a..41fd286f 100644 --- a/modules/Anomalies/Anomalies.R +++ b/modules/Anomalies/Anomalies.R @@ -45,13 +45,14 @@ compute_anomalies <- function(recipe, data) { data$obs <- anom$obs remove(anom) # Change variable metadata - # data$hcst$Variable$varName <- paste0(data$hcst$Variable$varName, "anomaly") - attr(data$hcst$Variable, "variable")$long_name <- - paste(attr(data$hcst$Variable, "variable")$long_name, "anomaly") - # data$obs$Variable$varName <- paste0(data$obs$Variable$varName, "anomaly") - attr(data$obs$Variable, "variable")$long_name <- - paste(attr(data$obs$Variable, "variable")$long_name, "anomaly") - + for (var in data$hcst$attrs$Variable$varName) { + # Change hcst longname + data$hcst$attrs$Variable$variables[[var]]$long_name <- + paste(data$hcst$attrs$Variable$variables[[var]]$long_name, "anomaly") + # Change obs longname + data$obs$attrs$Variable$variables[[var]]$long_name <- + paste(data$obs$attrs$Variable$variables[[var]]$long_name, "anomaly") + } # Compute forecast anomaly field if (!is.null(data$fcst)) { # Compute hindcast climatology ensemble mean @@ -70,9 +71,10 @@ compute_anomalies <- function(recipe, data) { # Get fcst anomalies data$fcst$data <- data$fcst$data - clim_hcst # Change metadata - # data$fcst$Variable$varName <- paste0(data$fcst$Variable$varName, "anomaly") - attr(data$fcst$Variable, "variable")$long_name <- - paste(attr(data$fcst$Variable, "variable")$long_name, "anomaly") + for (var in data$fcst$attrs$Variable$varName) { + data$fcst$attrs$Variable$variables[[var]]$long_name <- + paste(data$fcst$attrs$Variable$variables[[var]]$long_name, "anomaly") + } } info(recipe$Run$logger, -- GitLab From 4b14eb4f4ee0be2e222426f371cfe3a3e17e74b8 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Fri, 3 Feb 2023 10:57:31 +0100 Subject: [PATCH 047/388] Rearrange, clean and generalize scripts --- launch.sh | 30 ++++++++++++++++++++++++++++++ modules/{test_split.R => split.R} | 7 ++++--- modules/test_parallel_workflow.sh | 13 ------------- modules/test_split_and_run.sh | 19 ------------------- run_parallel_workflow.sh | 14 ++++++++++++++ 5 files changed, 48 insertions(+), 35 deletions(-) create mode 100644 launch.sh rename modules/{test_split.R => split.R} (52%) delete mode 100644 modules/test_parallel_workflow.sh delete mode 100644 modules/test_split_and_run.sh create mode 100644 run_parallel_workflow.sh diff --git a/launch.sh b/launch.sh new file mode 100644 index 00000000..543a203a --- /dev/null +++ b/launch.sh @@ -0,0 +1,30 @@ +#!/bin/bash + +source MODULES + +# set -vx + +# Define recipe and script +recipe=recipes/tests/recipe_seasonal_two-variables.yml +script=modules/test_parallel_workflow.R + +# Define tmp file to store necessary information +tmpfile=$(mktemp /tmp/test_split.XXXXXX) + +# Create outdir and split recipes +Rscript modules/split.R ${recipe} | tee $tmpfile +outdir=$( tail -n 1 $tmpfile | sed 's/"//g' ) +outdir=($outdir) + +rm $tmpfile + +# Create directory for slurm output +mkdir -p /esarchive/scratch/$(whoami)/tmp/auto-s2s-logs + +## These will have to be separate scripts to work with autosubmit +## Create a tmpfile inside the projdir with a consistent name?? +## '??' would be a chunk +# Launch one job per atomic recipe +for atomic_recipe in ${outdir[1]}/logs/recipes/atomic_recipe_??.yml; do + sbatch run_parallel_workflow.sh ${script} ${atomic_recipe} +done diff --git a/modules/test_split.R b/modules/split.R similarity index 52% rename from modules/test_split.R rename to modules/split.R index e66a5422..58391808 100644 --- a/modules/test_split.R +++ b/modules/split.R @@ -1,7 +1,8 @@ -source("tools/libs.R") +suppressMessages(source("tools/libs.R")) -# Define recipe file path -recipe_file <- "recipes/tests/recipe_seasonal_two-variables.yml" +# Retrieve recipe file path +args = commandArgs(trailingOnly = TRUE) +recipe_file <- args[1] # Check recipe and prepare output directories recipe <- prepare_outputs(recipe_file) # Split recipe into atomic recipes diff --git a/modules/test_parallel_workflow.sh b/modules/test_parallel_workflow.sh deleted file mode 100644 index 4a5dc512..00000000 --- a/modules/test_parallel_workflow.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash - -#SBATCH -n 1 -#SBATCH -t 23:59:59 -#SBATCH -J med -#SBATCH -e /esarchive/scratch/vagudets/tmp/auto-s2s-logs/run-%j.err -#SBATCH -o /esarchive/scratch/vagudets/tmp/auto-s2s-logs/run-%j.out - -atomic_recipe=$1 - -source MODULES - -Rscript modules/test_parallel_workflow.R ${atomic_recipe} diff --git a/modules/test_split_and_run.sh b/modules/test_split_and_run.sh deleted file mode 100644 index 97b9a9f7..00000000 --- a/modules/test_split_and_run.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash - -source MODULES - -set -vx - -tmpfile=$(mktemp /tmp/test_split.XXXXXX) -Rscript modules/test_split.R | tee $tmpfile -outdir=$( tail -n 1 $tmpfile | sed 's/"//g' ) -outdir=($outdir) -rm $tmpfile - -## These will have to be separate scripts to work with autosubmit -## Create a tmpfile inside the projdir with a consistent name?? -## '??' would be a chunk -## TODO: Add sbatch -for recipe in ${outdir[1]}/logs/recipes/atomic_recipe_??.yml; do - sbatch modules/test_parallel_workflow.sh ${recipe} -done diff --git a/run_parallel_workflow.sh b/run_parallel_workflow.sh new file mode 100644 index 00000000..dd325b8d --- /dev/null +++ b/run_parallel_workflow.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +#SBATCH -n 1 +#SBATCH -t 23:59:59 +#SBATCH -J med +#SBATCH -e /esarchive/scratch/%u/tmp/auto-s2s-logs/run-%j.err +#SBATCH -o /esarchive/scratch/%u/tmp/auto-s2s-logs/run-%j.out + +script=$1 +atomic_recipe=$2 + +source MODULES + +Rscript ${script} ${atomic_recipe} -- GitLab From d39ca067839b207af3025b1731b57f2e54b681b2 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Fri, 3 Feb 2023 12:09:25 +0100 Subject: [PATCH 048/388] Add new example recipe --- launch.sh | 2 +- recipes/recipe_splitting_example.yml | 2 +- recipes/tests/recipe_seasonal_example.yml | 62 +++++++++++++++++++++++ 3 files changed, 64 insertions(+), 2 deletions(-) create mode 100644 recipes/tests/recipe_seasonal_example.yml diff --git a/launch.sh b/launch.sh index 543a203a..89bc75ce 100644 --- a/launch.sh +++ b/launch.sh @@ -5,7 +5,7 @@ source MODULES # set -vx # Define recipe and script -recipe=recipes/tests/recipe_seasonal_two-variables.yml +recipe=recipes/tests/recipe_seasonal_example.yml script=modules/test_parallel_workflow.R # Define tmp file to store necessary information diff --git a/recipes/recipe_splitting_example.yml b/recipes/recipe_splitting_example.yml index e62611ab..5759a23b 100644 --- a/recipes/recipe_splitting_example.yml +++ b/recipes/recipe_splitting_example.yml @@ -48,7 +48,7 @@ Analysis: index: no # ? ncores: 7 remove_NAs: yes # bool, don't split - Output_format: S2S4E # string, don't split + Output_format: Scorecards # string, don't split ################################################################################ ## Run CONFIGURATION diff --git a/recipes/tests/recipe_seasonal_example.yml b/recipes/tests/recipe_seasonal_example.yml new file mode 100644 index 00000000..7a836b2c --- /dev/null +++ b/recipes/tests/recipe_seasonal_example.yml @@ -0,0 +1,62 @@ +################################################################################ +## RECIPE DESCRIPTION +################################################################################ + +Description: + Author: V. Agudetse + Info: Test Independent verification of two variables, two sdates, two systems + +################################################################################ +## ANALYSIS CONFIGURATION +################################################################################ + +Analysis: + Horizon: Seasonal + Variables: # ECVs and Indicators? + - {name: tas, freq: monthly_mean} + - {name: prlr, freq: monthly_mean} + Datasets: + System: # multiple systems for single model, split if Multimodel = F + - {name: system5c3s} + - {name: system7c3s} + Multimodel: False # single option + Reference: + - {name: era5} # multiple references for single model? + Time: + sdate: # list, split + - '0101' + - '0201' + fcst_year: # list, don't split, handled internally + hcst_start: '2000' # single option + hcst_end: '2016' # single option + ftime_min: 1 # single option + ftime_max: 3 # single option + Region: # multiple lists, Add region name if there is more than 1 region + - {latmin: -5, latmax: 5, lonmin: -10, lonmax: 10} + Regrid: + method: bilinear ## TODO: allow multiple methods? + type: to_system + Workflow: + Anomalies: + compute: yes + cross_validation: yes + Calibration: + method: raw ## TODO: list, split? + Skill: + metric: RPS, RPSS, CRPS, CRPSS, FRPSS, BSS10, BSS90, mean_bias, mean_bias_SS # list, don't split + Probabilities: + percentiles: [[1/3, 2/3], [1/10, 9/10], [1/4, 2/4, 3/4]] # list, don't split + Indicators: + index: no # ? + ncores: 7 + remove_NAs: yes # bool, don't split + Output_format: Scorecards # string, don't split + +################################################################################ +## Run CONFIGURATION +################################################################################ +Run: + Loglevel: INFO + Terminal: yes + output_dir: /esarchive/scratch/vagudets/repos/auto-s2s/out-logs/ + code_dir: /esarchive/scratch/vagudets/repos/auto-s2s/ -- GitLab From c235b4932a91ee4d051de89b3196371002aba56d Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Wed, 8 Feb 2023 09:51:36 +0100 Subject: [PATCH 049/388] Fix bug in data summary --- tools/data_summary.R | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/data_summary.R b/tools/data_summary.R index 49f3c8ea..597f42cb 100644 --- a/tools/data_summary.R +++ b/tools/data_summary.R @@ -11,10 +11,10 @@ data_summary <- function(data_cube, recipe) { } else if (recipe$Analysis$Variables$freq == "daily_mean") { date_format <- '%b %d %Y' } - months <- unique(format(as.Date(data_cube$attrs$Dates[[1]]), format = '%B')) + months <- unique(format(as.Date(data_cube$attrs$Dates), format = '%B')) months <- paste(as.character(months), collapse=", ") - sdate_min <- format(min(as.Date(data_cube$attrs$Dates[[1]])), format = date_format) - sdate_max <- format(max(as.Date(data_cube$attrs$Dates[[1]])), format = date_format) + sdate_min <- format(min(as.Date(data_cube$attrs$Dates)), format = date_format) + sdate_max <- format(max(as.Date(data_cube$attrs$Dates)), format = date_format) # Create log instance and sink output to logfile and terminal info(recipe$Run$logger, "DATA SUMMARY:") -- GitLab From 4c82c76ffc24eb292b2abd0bb0b692bd432402f0 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Fri, 10 Feb 2023 17:00:34 +0100 Subject: [PATCH 050/388] Create function to generate autosubmit experiment configuration (WIP) --- autosubmit/conf/autosubmit.conf | 42 ++++++++++++ autosubmit/conf/expdef.conf | 78 +++++++++++++++++++++++ autosubmit/conf/jobs.conf | 9 +++ autosubmit/conf/platforms.conf | 20 ++++++ autosubmit/conf/proj.conf | 4 ++ recipes/tests/recipe_seasonal_example.yml | 21 ++++++ tools/write_autosubmit_conf.R | 51 +++++++++++++++ 7 files changed, 225 insertions(+) create mode 100644 autosubmit/conf/autosubmit.conf create mode 100644 autosubmit/conf/expdef.conf create mode 100644 autosubmit/conf/jobs.conf create mode 100644 autosubmit/conf/platforms.conf create mode 100644 autosubmit/conf/proj.conf create mode 100644 tools/write_autosubmit_conf.R diff --git a/autosubmit/conf/autosubmit.conf b/autosubmit/conf/autosubmit.conf new file mode 100644 index 00000000..fd69390a --- /dev/null +++ b/autosubmit/conf/autosubmit.conf @@ -0,0 +1,42 @@ +[config] +# Experiment identifier +# No need to change +EXPID = +# No need to change. +# Autosubmit version identifier +AUTOSUBMIT_VERSION = "3.14.0" +# Default maximum number of jobs to be waiting in any platform +# Default = 3 +MAXWAITINGJOBS = 20 +# Default maximum number of jobs to be running at the same time at any platform +# Default = 6 +TOTALJOBS = 20 +# Time (seconds) between connections to the HPC queue scheduler to poll already submitted jobs status +# Default = 10 +SAFETYSLEEPTIME = 10 +# Number of retrials if a job fails. Can be override at job level +# Default = 0 +RETRIALS = 0 + +[mail] +# Enable mail notifications +# Default = False +NOTIFICATIONS = +# Mail address where notifications will be received +TO = + +[communications] +# Communications library used to connect with platforms: paramiko or saga. +# Default = paramiko +API = paramiko + +[storage] +# Defines the way of storing the progress of the experiment. The available options are: +# A PICKLE file (pkl) or an SQLite database (db). Default = pkl +TYPE = pkl +# Defines if the remote logs will be copied to the local platform. Default = True. +COPY_REMOTE_LOGS = False + +[migrate] +# Changes experiment files owner. +TO_USER = diff --git a/autosubmit/conf/expdef.conf b/autosubmit/conf/expdef.conf new file mode 100644 index 00000000..6ea998d9 --- /dev/null +++ b/autosubmit/conf/expdef.conf @@ -0,0 +1,78 @@ +[DEFAULT] +# Experiment identifier +# No need to change +EXPID = +# HPC name. +# No need to change +HPCARCH = nord3v2 + +[experiment] +# Supply the list of start dates. Available formats: YYYYMMDD YYYYMMDDhh YYYYMMDDhhmm +# You can also use an abbreviated syntax for multiple dates with common parts: 200001[01 15] <=> 20000101 20000115 +# 200001[01-04] <=> 20000101 20000102 20000103 20000104 +# DATELIST = 19600101 19650101 19700101 +# DATELIST = 1960[0101 0201 0301] +# DATELIST = 19[60-65] +DATELIST = 20201015 +# Supply the list of members. Format fcX +# You can also use an abreviated syntax for multiple members: fc[0 1 2] <=> fc0 fc1 fc2 +# fc[0-2] <=> fc0 fc1 fc2 +# MEMBERS = fc0 fc1 fc2 fc3 fc4 +#MEMBERS = fc4 +MEMBERS = fc[0-6] + + +# Chunk size unit. STRING = hour, day, month, year +CHUNKSIZEUNIT = month +# Chunk size. NUMERIC = 4, 6, 12 +CHUNKSIZE = 1 +# Total number of chunks in experiment. NUMERIC = 30, 15, 10 +NUMCHUNKS = +# Initial chunk of the experiment. Optional. DEFAULT = 1 +CHUNKINI = +# Calendar used. LIST: standard, noleap +CALENDAR = standard + +[project] +# Select project type. STRING = git, svn, local, none +# If PROJECT_TYPE is set to none, Autosubmit self-contained dummy templates will be used +PROJECT_TYPE = local +# Destination folder name for project. type = STRING, default = leave empty, +PROJECT_DESTINATION = auto-s2s + +# If PROJECT_TYPE is not git, no need to change +[git] +# Repository URL STRING = 'https://github.com/torvalds/linux.git' +PROJECT_ORIGIN = https://earth.bsc.es/gitlab/es/auto-s2s.git +# Select branch or tag, STRING, default = 'master', help = {'master' (default), 'develop', 'v3.1b', ...} +PROJECT_BRANCH = master +# type = STRING, default = leave empty, help = if model branch is a TAG leave empty +PROJECT_COMMIT = + +# If PROJECT_TYPE is not svn, no need to change +[svn] +# type = STRING, help = 'https://svn.ec-earth.org/ecearth3' +PROJECT_URL = +# Select revision number. NUMERIC = 1778 +PROJECT_REVISION = + +# If PROJECT_TYPE is not local, no need to change +[local] +# type = STRING, help = /foo/bar/ecearth +PROJECT_PATH = /esarchive/scratch/vagudets/repos/auto-s2s/ + +# If PROJECT_TYPE is none, no need to change +[project_files] +# Where is PROJECT CONFIGURATION file location relative to project root path +FILE_PROJECT_CONF = +# Where is JOBS CONFIGURATION file location relative to project root path +FILE_JOBS_CONF = +# Default job scripts type in the project. type = STRING, default = bash, supported = 'bash', 'python' or 'r' +JOB_SCRIPTS_TYPE = + +[rerun] +# Is a rerun or not? [Default: Do set FALSE]. BOOLEAN = TRUE, FALSE +RERUN = FALSE +# If RERUN = TRUE then supply the list of chunks to rerun +# LIST = [ 19601101 [ fc0 [1 2 3 4] fc1 [1] ] 19651101 [ fc0 [16-30] ] ] +CHUNKLIST = diff --git a/autosubmit/conf/jobs.conf b/autosubmit/conf/jobs.conf new file mode 100644 index 00000000..e2d7c56e --- /dev/null +++ b/autosubmit/conf/jobs.conf @@ -0,0 +1,9 @@ +[verification] +FILE = autosubmit/auto-verification.sh +RUNNING = chunk +WALLCLOCK = +NOTIFY_ON = +PLATFORM = nord3v2 +MEMORY = +PROCESSORS = + diff --git a/autosubmit/conf/platforms.conf b/autosubmit/conf/platforms.conf new file mode 100644 index 00000000..33825817 --- /dev/null +++ b/autosubmit/conf/platforms.conf @@ -0,0 +1,20 @@ +[power9] +TYPE = slurm +HOST = plogin1.bsc.es +PROJECT = bsc32 +USER = bsc32036 +QUEUE = bsc_es +SCRATCH_DIR = /gpfs/scratch +ADD_PROJECT_TO_HOST = false + +[nord3v2] +TYPE = slurm +HOST = nord4.bsc.es +PROJECT = bsc32 +ADD_PROJECT_TO_HOST = False +USER = +SCRATCH_DIR = /gpfs/scratch +PROCESSORS_PER_NODE = 16 +SERIAL_QUEUE = debug +QUEUE = bsc_es +CUSTOM_DIRECTIVES = ["#SBATCH --exclusive"] diff --git a/autosubmit/conf/proj.conf b/autosubmit/conf/proj.conf new file mode 100644 index 00000000..7eacf6c4 --- /dev/null +++ b/autosubmit/conf/proj.conf @@ -0,0 +1,4 @@ +[common] + +MODULES = "MODULES" +OUTDIR = diff --git a/recipes/tests/recipe_seasonal_example.yml b/recipes/tests/recipe_seasonal_example.yml index 7a836b2c..10eb0f90 100644 --- a/recipes/tests/recipe_seasonal_example.yml +++ b/recipes/tests/recipe_seasonal_example.yml @@ -60,3 +60,24 @@ Run: Terminal: yes output_dir: /esarchive/scratch/vagudets/repos/auto-s2s/out-logs/ code_dir: /esarchive/scratch/vagudets/repos/auto-s2s/ + autosubmit: yes + # fill only if using autosubmit + auto_conf: + expid: # if left empty, a new experiment will be created + wallclock: '04:00' # hh:mm + memory_per_job: '120000' + processors_per_job: 8 + platform: nord3v2 # make this constant? + email_notifications: yes + notify_completed: no + notify_failed: yes + email_address: victoria.agudetse@bsc.es + +################################################################################ +### Autosubmit CONFIGURATION +################################################################################# +Autosubmit: + use_autosubmit: yes + # fill only if using autosubmit + # + diff --git a/tools/write_autosubmit_conf.R b/tools/write_autosubmit_conf.R new file mode 100644 index 00000000..40614985 --- /dev/null +++ b/tools/write_autosubmit_conf.R @@ -0,0 +1,51 @@ +function write_autosubmit_conf(recipe, outdir) { + # Function to write autosubmit configuration from an Auto-S2S recipe + template_dir <- "autosubmit/conf/" + ## TODO: create folder for auto experiment + conf_dest_dir <- paste0("/esarchive/autosubmit/", expid "/conf/") + + for (file in list.files(template_dir)) { + # Define destionation directory and file name accordin to expid + conf_type <- strsplit(file, split = "[.]")[[1]][1] + extension <- strsplit(file, split = "[.]")[[1]][2] + dest_file <- paste0(conf_type, "_", expid, ".", extension) + dest_dir <- paste0("/esarchive/autosubmit/", expid, "/") + # Read configuration file + conf <- read.config(file = paste0(template_dir, file)) + if (conf_type == "autosubmit") { + ## Section 1: autosubmit.conf + ## expid, email notifications and address + conf$config$EXPID <- expid + conf$mail$NOTIFICATIONS < recipe$Run$auto_conf$email_notifications + conf$mail$TO <- recipe$Run$auto_conf$email_address + } else if (conf_type == "expdef") { + ## Section 2: expdef + ## expid, hpcarch?, numchunks, project_type, project?, project_destination = auto-s2s + conf$DEFAULT$EXPID <- expid + # conf$experiment$NUMCHUNKS <- + conf$local$PROJECT_PATH <- recipe$Run$code_dir + } else if (conf_type == "jobs") { + ## Section 3: jobs + ## wallclock, notify_on?, platform?, processors, retrials (none?) + conf$verification$WALLCLOCK <- recipe$Run$auto_conf$wallclock + if (recipe$Run$auto_conf$notify_completed) { + conf$verification$NOTIFY_ON <- paste(conf$verification$NOTIFY_ON, + "COMPLETED") + } + if (recipe$Run$auto_conf$notify_failed) { + conf$verification$NOTIFY_ON <- paste(conf$verification$NOTIFY_ON, + "FAILED") + } + conf$verification$MEMORY <- recipe$Run$auto_conf$memory + conf$verification$PROCESSORS <- recipe$Run$auto_conf$processors + } else if (conf_type = platform) { + ## Section 4: platform configuration + ## nord3v2 configuration... platform name? user, processors_per_node + # conf$nord3v2$USER <- + } (conf_type = proj) { + ## Section 5: proj + ## modules? Info that goes on script, e.g. output directory + conf$common$OUTDIR <- outdir + } + write.config(conf, paste0(dest_dir, dest_file), "ini") +} -- GitLab From 7318b4604c9865ad3d74c223b54356c3354287c2 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Mon, 13 Feb 2023 16:02:37 +0100 Subject: [PATCH 051/388] First version of tests to create a configuration for autosubmit and run it --- auto-verification.sh | 18 ++++++++++ autosubmit/conf/autosubmit.conf | 6 ++-- autosubmit/conf/expdef.conf | 6 ++-- autosubmit/conf/jobs.conf | 3 +- autosubmit/conf/platforms.conf | 9 ----- modules/split.R | 12 +++++-- recipes/tests/recipe_seasonal_example.yml | 25 +++++-------- tools/divide_recipe.R | 3 +- tools/libs.R | 2 ++ tools/write_autosubmit_conf.R | 43 +++++++++++++++-------- 10 files changed, 73 insertions(+), 54 deletions(-) create mode 100644 auto-verification.sh diff --git a/auto-verification.sh b/auto-verification.sh new file mode 100644 index 00000000..c2328a72 --- /dev/null +++ b/auto-verification.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +############ AUTOSUBMIT INPUTS ############ +proj_dir=%PROJDIR% +outdir=%OUTDIR% +CHUNK=%CHUNK% +############################### + +## TODO: How to define the script +cd $proj_dir + +script=modules/test_parallel_workflow.R +atomic_recipe_number=$(printf "%02d" $CHUNK) +atomic_recipe=${outdir}/logs/recipes/atomic_recipe_${atomic_recipe_number}.yml + +source MODULES + +Rscript ${script} ${atomic_recipe} diff --git a/autosubmit/conf/autosubmit.conf b/autosubmit/conf/autosubmit.conf index fd69390a..12723d14 100644 --- a/autosubmit/conf/autosubmit.conf +++ b/autosubmit/conf/autosubmit.conf @@ -4,13 +4,13 @@ EXPID = # No need to change. # Autosubmit version identifier -AUTOSUBMIT_VERSION = "3.14.0" +AUTOSUBMIT_VERSION = 3.14.0 # Default maximum number of jobs to be waiting in any platform # Default = 3 -MAXWAITINGJOBS = 20 +MAXWAITINGJOBS = 16 # Default maximum number of jobs to be running at the same time at any platform # Default = 6 -TOTALJOBS = 20 +TOTALJOBS = 16 # Time (seconds) between connections to the HPC queue scheduler to poll already submitted jobs status # Default = 10 SAFETYSLEEPTIME = 10 diff --git a/autosubmit/conf/expdef.conf b/autosubmit/conf/expdef.conf index 6ea998d9..8cae214c 100644 --- a/autosubmit/conf/expdef.conf +++ b/autosubmit/conf/expdef.conf @@ -13,15 +13,13 @@ HPCARCH = nord3v2 # DATELIST = 19600101 19650101 19700101 # DATELIST = 1960[0101 0201 0301] # DATELIST = 19[60-65] -DATELIST = 20201015 +DATELIST = # Supply the list of members. Format fcX # You can also use an abreviated syntax for multiple members: fc[0 1 2] <=> fc0 fc1 fc2 # fc[0-2] <=> fc0 fc1 fc2 # MEMBERS = fc0 fc1 fc2 fc3 fc4 #MEMBERS = fc4 -MEMBERS = fc[0-6] - - +MEMBERS = # Chunk size unit. STRING = hour, day, month, year CHUNKSIZEUNIT = month # Chunk size. NUMERIC = 4, 6, 12 diff --git a/autosubmit/conf/jobs.conf b/autosubmit/conf/jobs.conf index e2d7c56e..b4369031 100644 --- a/autosubmit/conf/jobs.conf +++ b/autosubmit/conf/jobs.conf @@ -1,9 +1,8 @@ [verification] -FILE = autosubmit/auto-verification.sh +FILE = auto-verification.sh RUNNING = chunk WALLCLOCK = NOTIFY_ON = PLATFORM = nord3v2 -MEMORY = PROCESSORS = diff --git a/autosubmit/conf/platforms.conf b/autosubmit/conf/platforms.conf index 33825817..0f6819d0 100644 --- a/autosubmit/conf/platforms.conf +++ b/autosubmit/conf/platforms.conf @@ -1,12 +1,3 @@ -[power9] -TYPE = slurm -HOST = plogin1.bsc.es -PROJECT = bsc32 -USER = bsc32036 -QUEUE = bsc_es -SCRATCH_DIR = /gpfs/scratch -ADD_PROJECT_TO_HOST = false - [nord3v2] TYPE = slurm HOST = nord4.bsc.es diff --git a/modules/split.R b/modules/split.R index 58391808..ca6adca1 100644 --- a/modules/split.R +++ b/modules/split.R @@ -1,9 +1,15 @@ suppressMessages(source("tools/libs.R")) # Retrieve recipe file path -args = commandArgs(trailingOnly = TRUE) -recipe_file <- args[1] +# args = commandArgs(trailingOnly = TRUE) +# recipe_file <- args[1] +recipe_file <- "recipes/tests/recipe_seasonal_example.yml" # Check recipe and prepare output directories recipe <- prepare_outputs(recipe_file) # Split recipe into atomic recipes -divide_recipe(recipe) +## TODO: Add autosubmit yes/no to the parameters? +run_parameters <- divide_recipe(recipe) +if (recipe$Run$autosubmit) { + write_autosubmit_conf(recipe, run_parameters$n_atomic_recipes) +} +run_parameters$outdir diff --git a/recipes/tests/recipe_seasonal_example.yml b/recipes/tests/recipe_seasonal_example.yml index 10eb0f90..f9d6a799 100644 --- a/recipes/tests/recipe_seasonal_example.yml +++ b/recipes/tests/recipe_seasonal_example.yml @@ -63,21 +63,12 @@ Run: autosubmit: yes # fill only if using autosubmit auto_conf: - expid: # if left empty, a new experiment will be created - wallclock: '04:00' # hh:mm - memory_per_job: '120000' - processors_per_job: 8 + expid: a5no ## if left empty, create new exp? + hpc_user: bsc32762 # your hpc username + wallclock: 04:00 # hh:mm + processors_per_job: 8 # use ncores parameter? platform: nord3v2 # make this constant? - email_notifications: yes - notify_completed: no - notify_failed: yes - email_address: victoria.agudetse@bsc.es - -################################################################################ -### Autosubmit CONFIGURATION -################################################################################# -Autosubmit: - use_autosubmit: yes - # fill only if using autosubmit - # - + email_notifications: yes # enable/disable email notifications + email_address: victoria.agudetse@bsc.es # email address for notifications + notify_completed: yes # notify me by email when a job finishes + notify_failed: yes # notify me by email when a job fails diff --git a/tools/divide_recipe.R b/tools/divide_recipe.R index 2119eee7..d2a263bc 100644 --- a/tools/divide_recipe.R +++ b/tools/divide_recipe.R @@ -121,5 +121,6 @@ divide_recipe <- function(recipe) { "/logs/recipes/ to see all the individual atomic recipes.") info(recipe$Run$logger, text) ## TODO: Change returns? - return(recipe$Run$output_dir) + return(list(n_atomic_recipes = length(all_recipes), + outdir = recipe$Run$output_dir)) } diff --git a/tools/libs.R b/tools/libs.R index e3c3c277..826a1f19 100644 --- a/tools/libs.R +++ b/tools/libs.R @@ -14,6 +14,7 @@ library(lubridate) library(PCICt) library(RColorBrewer) library(grDevices) +library(configr) # # library(parallel) library(pryr) # To check mem usage. @@ -33,4 +34,5 @@ source("tools/prepare_outputs.R") source("tools/divide_recipe.R") source("tools/data_summary.R") source("tools/read_atomic_recipe.R") +source("tools/write_autosubmit_conf.R") # source("tools/add_dims.R") # Not sure if necessary yet diff --git a/tools/write_autosubmit_conf.R b/tools/write_autosubmit_conf.R index 40614985..f6ad9318 100644 --- a/tools/write_autosubmit_conf.R +++ b/tools/write_autosubmit_conf.R @@ -1,9 +1,9 @@ -function write_autosubmit_conf(recipe, outdir) { +write_autosubmit_conf <- function(recipe, nchunks) { # Function to write autosubmit configuration from an Auto-S2S recipe + expid <- recipe$Run$auto_conf$expid template_dir <- "autosubmit/conf/" - ## TODO: create folder for auto experiment - conf_dest_dir <- paste0("/esarchive/autosubmit/", expid "/conf/") - + conf_dest_dir <- paste0("/esarchive/autosubmit/", expid, "/conf/") + # Modify the configuration files according to the info in the recipe for (file in list.files(template_dir)) { # Define destionation directory and file name accordin to expid conf_type <- strsplit(file, split = "[.]")[[1]][1] @@ -16,17 +16,21 @@ function write_autosubmit_conf(recipe, outdir) { ## Section 1: autosubmit.conf ## expid, email notifications and address conf$config$EXPID <- expid - conf$mail$NOTIFICATIONS < recipe$Run$auto_conf$email_notifications + if (recipe$Run$auto_conf$email_notifications) { + conf$mail$NOTIFICATIONS <- "True" + } else { + conf$mail$NOTIFICATIONS <- "False" + } conf$mail$TO <- recipe$Run$auto_conf$email_address } else if (conf_type == "expdef") { ## Section 2: expdef - ## expid, hpcarch?, numchunks, project_type, project?, project_destination = auto-s2s + ## expid, numchunks, project_type?, project_destination = auto-s2s conf$DEFAULT$EXPID <- expid - # conf$experiment$NUMCHUNKS <- + conf$experiment$NUMCHUNKS <- nchunks conf$local$PROJECT_PATH <- recipe$Run$code_dir } else if (conf_type == "jobs") { ## Section 3: jobs - ## wallclock, notify_on?, platform?, processors, retrials (none?) + ## wallclock, notify_on, platform?, processors conf$verification$WALLCLOCK <- recipe$Run$auto_conf$wallclock if (recipe$Run$auto_conf$notify_completed) { conf$verification$NOTIFY_ON <- paste(conf$verification$NOTIFY_ON, @@ -36,16 +40,25 @@ function write_autosubmit_conf(recipe, outdir) { conf$verification$NOTIFY_ON <- paste(conf$verification$NOTIFY_ON, "FAILED") } - conf$verification$MEMORY <- recipe$Run$auto_conf$memory - conf$verification$PROCESSORS <- recipe$Run$auto_conf$processors - } else if (conf_type = platform) { + conf$verification$PROCESSORS <- recipe$Run$auto_conf$processors_per_job # ncores? + } else if (conf_type == "platforms") { ## Section 4: platform configuration ## nord3v2 configuration... platform name? user, processors_per_node - # conf$nord3v2$USER <- - } (conf_type = proj) { + conf$nord3v2$USER <- recipe$Run$auto_conf$hpc_user + } else if (conf_type == "proj") { ## Section 5: proj ## modules? Info that goes on script, e.g. output directory - conf$common$OUTDIR <- outdir + conf$common$OUTDIR <- recipe$Run$output_dir } - write.config(conf, paste0(dest_dir, dest_file), "ini") + # Write config file inside autosubmit dir + write.config(conf, paste0(conf_dest_dir, dest_file), write.type = "ini") + Sys.chmod(paste0(conf_dest_dir, dest_file), mode = "755", use_umask = F) + } + info(recipe$Run$logger, + paste("##### AUTOSUBMIT CONFIGURATION WRITTEN FOR", expid, "#####")) + print(paste("Please SSH into bscesautosubmit01 or bscesautosubmit02 and run", + "the following commands:")) + print("module load autosubmit/3.14.0-foss-2015a-Python-2.7.9") + print(paste("autosubmit create", expid)) + print(paste("nohup autosubmit run", expid, "& disown")) } -- GitLab From 4259c3e6ef4b0285e8cf7e98ea2d188b5aee3c95 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Mon, 13 Feb 2023 16:40:14 +0100 Subject: [PATCH 052/388] Add DATELIST and MEMBER --- autosubmit/conf/expdef.conf | 4 ++-- tools/write_autosubmit_conf.R | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/autosubmit/conf/expdef.conf b/autosubmit/conf/expdef.conf index 8cae214c..d3a3370a 100644 --- a/autosubmit/conf/expdef.conf +++ b/autosubmit/conf/expdef.conf @@ -13,13 +13,13 @@ HPCARCH = nord3v2 # DATELIST = 19600101 19650101 19700101 # DATELIST = 1960[0101 0201 0301] # DATELIST = 19[60-65] -DATELIST = +DATELIST = # Supply the list of members. Format fcX # You can also use an abreviated syntax for multiple members: fc[0 1 2] <=> fc0 fc1 fc2 # fc[0-2] <=> fc0 fc1 fc2 # MEMBERS = fc0 fc1 fc2 fc3 fc4 #MEMBERS = fc4 -MEMBERS = +MEMBERS = fc0 # Chunk size unit. STRING = hour, day, month, year CHUNKSIZEUNIT = month # Chunk size. NUMERIC = 4, 6, 12 diff --git a/tools/write_autosubmit_conf.R b/tools/write_autosubmit_conf.R index f6ad9318..bc99a713 100644 --- a/tools/write_autosubmit_conf.R +++ b/tools/write_autosubmit_conf.R @@ -26,6 +26,7 @@ write_autosubmit_conf <- function(recipe, nchunks) { ## Section 2: expdef ## expid, numchunks, project_type?, project_destination = auto-s2s conf$DEFAULT$EXPID <- expid + conf$experiment$DATELIST <- format(Sys.Date(), "%Y%m%d") conf$experiment$NUMCHUNKS <- nchunks conf$local$PROJECT_PATH <- recipe$Run$code_dir } else if (conf_type == "jobs") { -- GitLab From 4b46ded058ad3cd78e20c6a8e2a121c294946a92 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Tue, 14 Feb 2023 17:03:25 +0100 Subject: [PATCH 053/388] Change 'archive' to 'esarchive' in YAML config; remove code_dir absolute path --- conf/archive.yml | 4 +--- conf/archive_decadal.yml | 2 +- modules/Loading/Loading.R | 3 ++- modules/Loading/Loading_decadal.R | 3 ++- modules/Saving/Saving.R | 8 ++++---- modules/Visualization/Visualization.R | 8 ++++---- 6 files changed, 14 insertions(+), 14 deletions(-) diff --git a/conf/archive.yml b/conf/archive.yml index 0251beaf..52f08f1d 100644 --- a/conf/archive.yml +++ b/conf/archive.yml @@ -1,6 +1,4 @@ - - -archive: +esarchive: src: "/esarchive/" System: system5c3s: diff --git a/conf/archive_decadal.yml b/conf/archive_decadal.yml index 2b74bff8..91637024 100644 --- a/conf/archive_decadal.yml +++ b/conf/archive_decadal.yml @@ -1,4 +1,4 @@ -archive: +esarchive: src: "/esarchive/" System: # ---- diff --git a/modules/Loading/Loading.R b/modules/Loading/Loading.R index 40af39dd..7db2a3e9 100644 --- a/modules/Loading/Loading.R +++ b/modules/Loading/Loading.R @@ -48,7 +48,8 @@ load_datasets <- function(recipe) { ##fcst.name <- recipe$Analysis$Datasets$System[[sys]]$name # get esarchive datasets dict: - archive <- read_yaml(paste0(recipe$Run$code_dir, "conf/archive.yml"))$archive + ## TODO: Adapt to 'filesystem' option in recipe + archive <- read_yaml("conf/archive.yml")$esarchive exp_descrip <- archive$System[[exp.name]] freq.hcst <- unlist(exp_descrip[[store.freq]][variable]) diff --git a/modules/Loading/Loading_decadal.R b/modules/Loading/Loading_decadal.R index 0a95d9a4..43f2276f 100644 --- a/modules/Loading/Loading_decadal.R +++ b/modules/Loading/Loading_decadal.R @@ -21,7 +21,8 @@ source("tools/tmp/as.s2dv_cube.R") load_datasets <- function(recipe) { - archive <- read_yaml(paste0(recipe$Run$code_dir, "conf/archive_decadal.yml"))$archive + ## + archive <- read_yaml(paste0("conf/archive_decadal.yml"))$esarchive # Print Start() info or not DEBUG <- FALSE diff --git a/modules/Saving/Saving.R b/modules/Saving/Saving.R index 28b5e552..608c1faf 100644 --- a/modules/Saving/Saving.R +++ b/modules/Saving/Saving.R @@ -28,11 +28,11 @@ save_data <- function(recipe, data, } if (is.null(archive)) { if (tolower(recipe$Analysis$Horizon) == "seasonal") { - archive <- read_yaml(paste0(recipe$Run$code_dir, - "conf/archive.yml"))$archive + archive <- + read_yaml(paste0("conf/archive.yml"))[[recipe$Run$filesystem]] } else if (tolower(recipe$Analysis$Horizon) == "decadal") { - archive <- read_yaml(paste0(recipe$Run$code_dir, - "conf/archive_decadal.yml"))$archive + archive <- + read_yaml(paste0("conf/archive_decadal.yml"))[[recipe$Run$filesystem]] } } dict <- read_yaml("conf/variable-dictionary.yml") diff --git a/modules/Visualization/Visualization.R b/modules/Visualization/Visualization.R index a8664569..839060ac 100644 --- a/modules/Visualization/Visualization.R +++ b/modules/Visualization/Visualization.R @@ -34,11 +34,11 @@ plot_data <- function(recipe, if (is.null(archive)) { if (tolower(recipe$Analysis$Horizon) == "seasonal") { - archive <- read_yaml(paste0(recipe$Run$code_dir, - "conf/archive.yml"))$archive + archive <- + read_yaml(paste0("conf/archive.yml"))[[recipe$Run$filesystem]] } else if (tolower(recipe$Analysis$Horizon) == "decadal") { - archive <- read_yaml(paste0(recipe$Run$code_dir, - "conf/archive_decadal.yml"))$archive + archive <- + read_yaml(paste0("conf/archive_decadal.yml"))[[recipe$Run$filesystem]] } } -- GitLab From 6b27c413efb30cf6945614f856064b401b560113 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Tue, 14 Feb 2023 17:11:42 +0100 Subject: [PATCH 054/388] Include autosubmit recipe checks; generalize autosubmit code for use outside of BSC environment --- .../{conf => conf_esarchive}/autosubmit.conf | 2 +- .../{conf => conf_esarchive}/expdef.conf | 0 autosubmit/{conf => conf_esarchive}/jobs.conf | 0 .../{conf => conf_esarchive}/platforms.conf | 0 autosubmit/{conf => conf_esarchive}/proj.conf | 0 conf/autosubmit.yml | 5 ++ recipes/tests/recipe_seasonal_example.yml | 3 +- tests/testthat/test-seasonal_daily.R | 2 +- tests/testthat/test-seasonal_monthly.R | 2 +- tools/check_recipe.R | 54 +++++++++++++++++++ tools/divide_recipe.R | 2 +- tools/prepare_outputs.R | 3 ++ tools/write_autosubmit_conf.R | 53 +++++++++++------- 13 files changed, 103 insertions(+), 23 deletions(-) rename autosubmit/{conf => conf_esarchive}/autosubmit.conf (97%) rename autosubmit/{conf => conf_esarchive}/expdef.conf (100%) rename autosubmit/{conf => conf_esarchive}/jobs.conf (100%) rename autosubmit/{conf => conf_esarchive}/platforms.conf (100%) rename autosubmit/{conf => conf_esarchive}/proj.conf (100%) create mode 100644 conf/autosubmit.yml diff --git a/autosubmit/conf/autosubmit.conf b/autosubmit/conf_esarchive/autosubmit.conf similarity index 97% rename from autosubmit/conf/autosubmit.conf rename to autosubmit/conf_esarchive/autosubmit.conf index 12723d14..685876a1 100644 --- a/autosubmit/conf/autosubmit.conf +++ b/autosubmit/conf_esarchive/autosubmit.conf @@ -35,7 +35,7 @@ API = paramiko # A PICKLE file (pkl) or an SQLite database (db). Default = pkl TYPE = pkl # Defines if the remote logs will be copied to the local platform. Default = True. -COPY_REMOTE_LOGS = False +COPY_REMOTE_LOGS = True [migrate] # Changes experiment files owner. diff --git a/autosubmit/conf/expdef.conf b/autosubmit/conf_esarchive/expdef.conf similarity index 100% rename from autosubmit/conf/expdef.conf rename to autosubmit/conf_esarchive/expdef.conf diff --git a/autosubmit/conf/jobs.conf b/autosubmit/conf_esarchive/jobs.conf similarity index 100% rename from autosubmit/conf/jobs.conf rename to autosubmit/conf_esarchive/jobs.conf diff --git a/autosubmit/conf/platforms.conf b/autosubmit/conf_esarchive/platforms.conf similarity index 100% rename from autosubmit/conf/platforms.conf rename to autosubmit/conf_esarchive/platforms.conf diff --git a/autosubmit/conf/proj.conf b/autosubmit/conf_esarchive/proj.conf similarity index 100% rename from autosubmit/conf/proj.conf rename to autosubmit/conf_esarchive/proj.conf diff --git a/conf/autosubmit.yml b/conf/autosubmit.yml new file mode 100644 index 00000000..3f852776 --- /dev/null +++ b/conf/autosubmit.yml @@ -0,0 +1,5 @@ +esarchive: + platform: nord3v2 + module_version: autosubmit/3.14.0-foss-2015a-Python-2.7.9 + experiment_dir: /esarchive/autosubmit/ + userID: bsc32 diff --git a/recipes/tests/recipe_seasonal_example.yml b/recipes/tests/recipe_seasonal_example.yml index f9d6a799..8b40d21a 100644 --- a/recipes/tests/recipe_seasonal_example.yml +++ b/recipes/tests/recipe_seasonal_example.yml @@ -58,6 +58,7 @@ Analysis: Run: Loglevel: INFO Terminal: yes + filesystem: esarchive output_dir: /esarchive/scratch/vagudets/repos/auto-s2s/out-logs/ code_dir: /esarchive/scratch/vagudets/repos/auto-s2s/ autosubmit: yes @@ -70,5 +71,5 @@ Run: platform: nord3v2 # make this constant? email_notifications: yes # enable/disable email notifications email_address: victoria.agudetse@bsc.es # email address for notifications - notify_completed: yes # notify me by email when a job finishes + notify_completed: no # notify me by email when a job finishes notify_failed: yes # notify me by email when a job fails diff --git a/tests/testthat/test-seasonal_daily.R b/tests/testthat/test-seasonal_daily.R index ddcca22f..53a235e7 100644 --- a/tests/testthat/test-seasonal_daily.R +++ b/tests/testthat/test-seasonal_daily.R @@ -6,7 +6,7 @@ source("modules/Skill/Skill.R") source("modules/Saving/Saving.R") recipe_file <- "tests/recipes/recipe-seasonal_daily_1.yml" -recipe <- prepare_outputs(recipe_file) +recipe <- prepare_outputs(recipe_file, disable_checks = T) # Load datasets suppressWarnings({invisible(capture.output( data <- load_datasets(recipe) diff --git a/tests/testthat/test-seasonal_monthly.R b/tests/testthat/test-seasonal_monthly.R index de03bf73..4ea7f9ab 100644 --- a/tests/testthat/test-seasonal_monthly.R +++ b/tests/testthat/test-seasonal_monthly.R @@ -7,7 +7,7 @@ source("modules/Saving/Saving.R") source("modules/Visualization/Visualization.R") recipe_file <- "tests/recipes/recipe-seasonal_monthly_1.yml" -recipe <- prepare_outputs(recipe_file) +recipe <- prepare_outputs(recipe_file, disable_checks = T) archive <- read_yaml(paste0(recipe$Run$code_dir, "conf/archive.yml"))$archive # Load datasets diff --git a/tools/check_recipe.R b/tools/check_recipe.R index 67ba4d0d..521db407 100644 --- a/tools/check_recipe.R +++ b/tools/check_recipe.R @@ -310,6 +310,60 @@ check_recipe <- function(recipe) { error_status <- T } + # --------------------------------------------------------------------- + # AUTOSUBMIT CHECKS + # --------------------------------------------------------------------- + + AUTO_PARAMS <- c("expid", "hpc_user", "wallclock", "processors_per_job", + "platform", "email_notifications", "email_address", + "notify_completed", "notify_failed") + + if (recipe$Run$autosubmit) { + # Read autosubmit info for the specific filesystem (e.g. esarchive) + auto_specs <- read_yaml("conf/autosubmit.yml")[[recipe$Run$filesystem]] + # Check that the autosubmit configuration parameters are present + if (!("auto_conf" %in% names(recipe$Run))) { + error(recipe$Run$logger, + "The 'auto_conf' is missing from the 'Run' section of the recipe.") + error_status <- T + } else if (!all(AUTO_PARAMS %in% names(recipe$Run$auto_conf))) { + error(recipe$Run$logger, + paste0("The element 'Run:auto_conf' must contain all of the ", + "following: ", paste(AUTO_PARAMS, collapse = ", "), ".")) + error_status <- T + } + # Check that the experiment ID exists + if (is.null(recipe$Run$auto_conf$expid)) { + error(recipe$Run$logger, + paste("The Autosubmit EXPID is missing. You can create one by", + "running the following commands on the autosubmit machine:")) + error(recipe$Run$logger, + paste("module load", auto_specs$module_version)) + error(recipe$Run$logger, + paste("autosubmit expid -H", auto_specs$platform, + "-d ")) + } else if (!dir.exists(paste0(auto_specs$experiment_dir, + recipe$Run$auto_conf$expid))) { + error(recipe$Run$logger, + paste0("No folder in ", auto_specs$experiment_dir, + " for the EXPID", recipe$Run$auto_conf$expid, + ". Please make sure it is correct.")) + } + if ((recipe$Run$auto_conf$email_notifications) && + (is.null(recipe$Run$auto_conf$email_address))) { + error(recipe$Run$logger, + "Autosubmit notifications are enabled but email address is empty!") + } + if (is.null(recipe$Run$auto_conf$hpc_user)) { + error(recipe$Run$logger, + "The 'Run:auto_conf:hpc_user' field can not be empty.") + } else if ((recipe$Run$filesystem == "esarchive") && + (!substr(recipe$Run$auto_conf$hpc_user, 1, 5) == "bsc32")) { + error(recipe$Run$logger, + "Please check your hpc_user ID. It should look like: 'bsc32xxx'") + } + } + # --------------------------------------------------------------------- # WORKFLOW CHECKS # --------------------------------------------------------------------- diff --git a/tools/divide_recipe.R b/tools/divide_recipe.R index d2a263bc..403304c4 100644 --- a/tools/divide_recipe.R +++ b/tools/divide_recipe.R @@ -19,7 +19,7 @@ divide_recipe <- function(recipe) { Output_format = recipe$Analysis$Output_format), Run = recipe$Run[c("Loglevel", "output_dir", "Terminal", - "code_dir", "logfile")]) + "code_dir", "logfile", "filesystem")]) # duplicate recipe by independent variables: all_recipes <- rep(list(beta_recipe), length(recipe$Analysis$Variables)) diff --git a/tools/prepare_outputs.R b/tools/prepare_outputs.R index c9bdd74c..85be5c46 100644 --- a/tools/prepare_outputs.R +++ b/tools/prepare_outputs.R @@ -30,6 +30,9 @@ prepare_outputs <- function(recipe_file, recipe <- read_yaml(recipe_file) recipe$recipe_path <- recipe_file recipe$name <- tools::file_path_sans_ext(basename(recipe_file)) + if (is.null(recipe$Run$filesystem)) { + recipe$Run$filesystem <- "esarchive" + } output_dir = recipe$Run$output_dir # Create output folders diff --git a/tools/write_autosubmit_conf.R b/tools/write_autosubmit_conf.R index bc99a713..097b2afd 100644 --- a/tools/write_autosubmit_conf.R +++ b/tools/write_autosubmit_conf.R @@ -1,19 +1,22 @@ +# Function to write autosubmit configuration from an Auto-S2S recipe write_autosubmit_conf <- function(recipe, nchunks) { - # Function to write autosubmit configuration from an Auto-S2S recipe + # Experiment ID expid <- recipe$Run$auto_conf$expid - template_dir <- "autosubmit/conf/" - conf_dest_dir <- paste0("/esarchive/autosubmit/", expid, "/conf/") + # Directory with the experiment templates + template_dir <- paste0("autosubmit/conf_", recipe$Run$filesystem, "/") + # Read autosubmit info for the specific filesystem (e.g. esarchive) + auto_specs <- read_yaml("conf/autosubmit.yml")[[recipe$Run$filesystem]] + # Output directory + dest_dir <- paste0(auto_specs$experiment_dir, expid, "/conf/") # Modify the configuration files according to the info in the recipe for (file in list.files(template_dir)) { - # Define destionation directory and file name accordin to expid conf_type <- strsplit(file, split = "[.]")[[1]][1] extension <- strsplit(file, split = "[.]")[[1]][2] dest_file <- paste0(conf_type, "_", expid, ".", extension) - dest_dir <- paste0("/esarchive/autosubmit/", expid, "/") # Read configuration file conf <- read.config(file = paste0(template_dir, file)) if (conf_type == "autosubmit") { - ## Section 1: autosubmit.conf + # Section 1: autosubmit.conf ## expid, email notifications and address conf$config$EXPID <- expid if (recipe$Run$auto_conf$email_notifications) { @@ -23,14 +26,14 @@ write_autosubmit_conf <- function(recipe, nchunks) { } conf$mail$TO <- recipe$Run$auto_conf$email_address } else if (conf_type == "expdef") { - ## Section 2: expdef + # Section 2: expdef ## expid, numchunks, project_type?, project_destination = auto-s2s conf$DEFAULT$EXPID <- expid conf$experiment$DATELIST <- format(Sys.Date(), "%Y%m%d") conf$experiment$NUMCHUNKS <- nchunks conf$local$PROJECT_PATH <- recipe$Run$code_dir } else if (conf_type == "jobs") { - ## Section 3: jobs + # Section 3: jobs ## wallclock, notify_on, platform?, processors conf$verification$WALLCLOCK <- recipe$Run$auto_conf$wallclock if (recipe$Run$auto_conf$notify_completed) { @@ -43,23 +46,37 @@ write_autosubmit_conf <- function(recipe, nchunks) { } conf$verification$PROCESSORS <- recipe$Run$auto_conf$processors_per_job # ncores? } else if (conf_type == "platforms") { - ## Section 4: platform configuration + # Section 4: platform configuration ## nord3v2 configuration... platform name? user, processors_per_node - conf$nord3v2$USER <- recipe$Run$auto_conf$hpc_user + conf[[auto_specs$platform]]$USER <- recipe$Run$auto_conf$hpc_user } else if (conf_type == "proj") { - ## Section 5: proj + # Section 5: proj ## modules? Info that goes on script, e.g. output directory conf$common$OUTDIR <- recipe$Run$output_dir } # Write config file inside autosubmit dir - write.config(conf, paste0(conf_dest_dir, dest_file), write.type = "ini") - Sys.chmod(paste0(conf_dest_dir, dest_file), mode = "755", use_umask = F) + write.config(conf, paste0(dest_dir, dest_file), write.type = "ini") + Sys.chmod(paste0(dest_dir, dest_file), mode = "755", use_umask = F) } info(recipe$Run$logger, paste("##### AUTOSUBMIT CONFIGURATION WRITTEN FOR", expid, "#####")) - print(paste("Please SSH into bscesautosubmit01 or bscesautosubmit02 and run", - "the following commands:")) - print("module load autosubmit/3.14.0-foss-2015a-Python-2.7.9") - print(paste("autosubmit create", expid)) - print(paste("nohup autosubmit run", expid, "& disown")) + # Print instructions/commands for user + if (recipe$Run$Terminal) { + ## TODO: Change SSH message for other environments (outside BSC) + info(recipe$Run$logger, + paste("Please SSH into bscesautosubmit01 or bscesautosubmit02 and run", + "the following commands:")) + info(recipe$Run$logger, + paste("module load", auto_specs$module_version)) + info(recipe$Run$logger, + paste("autosubmit create", expid)) + info(recipe$Run$logger, + paste("nohup autosubmit run", expid, "& disown")) + } else { + print(paste("Please SSH into bscesautosubmit01 or bscesautosubmit02 and run", + "the following commands:")) + print(paste("module load", auto_specs$module_version)) + print(paste("autosubmit create", expid)) + print(paste("nohup autosubmit run", expid, "& disown")) + } } -- GitLab From 07d3f53501fd29cd11364ae6a3dcd3bd03ea0eb3 Mon Sep 17 00:00:00 2001 From: Jaume Ramon Date: Thu, 16 Feb 2023 15:06:04 +0100 Subject: [PATCH 055/388] last changes before git pull --- modules/Downscaling/Downscaling.R | 269 ++++++++---------- .../testing_recipes/recipe_system5c3s-tas.yml | 2 +- .../recipe_system5c3s-tas_downscaling.yml | 8 +- modules/Visualization/Visualization.R | 24 +- modules/test_seasonal_downscaling.R | 65 ++++- 5 files changed, 182 insertions(+), 186 deletions(-) diff --git a/modules/Downscaling/Downscaling.R b/modules/Downscaling/Downscaling.R index c3d063b4..1f814b74 100644 --- a/modules/Downscaling/Downscaling.R +++ b/modules/Downscaling/Downscaling.R @@ -15,7 +15,7 @@ source('/esarchive/scratch/jramon/GitLab_jramon/downscaling/csdownscale/R/Intlr. source('/esarchive/scratch/jramon/GitLab_jramon/downscaling/csdownscale/R/Analogs.R') source('/esarchive/scratch/jramon/GitLab_jramon/downscaling/csdownscale/R/LogisticReg.R') source('/esarchive/scratch/jramon/GitLab_jramon/downscaling/csdownscale/R/Utils.R') -source("https://earth.bsc.es/gitlab/external/cstools/-/raw/master/R/CST_BiasCorrection.R") +#source("https://earth.bsc.es/gitlab/external/cstools/-/raw/master/R/CST_BiasCorrection.R") ## Entry params data and recipe? @@ -40,12 +40,12 @@ downscale_datasets <- function(recipe, data) { } else { # Downscaling function params - int_methods <- tolower(recipe$Analysis$Workflow$Downscaling$int_method) - bc_methods <- tolower(recipe$Analysis$Workflow$Downscaling$bc_method) - lr_methods <- tolower(recipe$Analysis$Workflow$Downscaling$lr_method) - log_reg_methods <- tolower(recipe$Analysis$Workflow$Downscaling$log_reg_method) - target_grid <- tolower(recipe$Analysis$Workflow$Downscaling$target_grid) - nanalogs <- as.numeric(recipe$Analysis$Workflow$Downscaling$nanalogs) + int_method <- tolower(recipe$Analysis$Workflow$Downscaling$int_method) + bc_method <- tolower(recipe$Analysis$Workflow$Downscaling$bc_method) + lr_method <- tolower(recipe$Analysis$Workflow$Downscaling$lr_method) + log_reg_method <- tolower(recipe$Analysis$Workflow$Downscaling$log_reg_method) + target_grid <- tolower(recipe$Analysis$Workflow$Downscaling$target_grid) + nanalogs <- as.numeric(recipe$Analysis$Workflow$Downscaling$nanalogs) if (is.null(recipe$Analysis$ncores)) { ncores <- 1 @@ -71,58 +71,48 @@ downscale_datasets <- function(recipe, data) { } if (type == "int") { - if (is.null(int_methods)) { - stop("Please provide one or more interpolation methods in the recipe.") + if (is.null(int_method)) { + stop("Please provide one interpolation method in the recipe.") } if (is.null(target_grid)) { stop("Please provide the target grid in the recipe.") } - hcst_downscal <- list() - for (int_method in strsplit(int_methods, ", | |,")[[1]]) { - - # Ensure that observations are in the same grid as experiments - # Only needed for this method because the others already return the - # observations - latmin <- data$hcst$lat[1] - lonmin <- data$hcst$lon[1] - latmax <- data$hcst$lat[length(data$hcst$lat)] - lonmax <- data$hcst$lon[length(data$hcst$lon)] - hcst_d <- CST_Interpolation(data$hcst, - points = NULL, - method_remap = int_method, - target_grid = target_grid, - lat_dim = "latitude", - lon_dim = "longitude", - region = c(lonmin, lonmax, latmin, latmax), - method_point_interp = NULL) - - obs_d <- CST_Interpolation(data$obs, - points = NULL, - method_remap = int_method, - target_grid = target_grid, - lat_dim = "latitude", - lon_dim = "longitude", - region = c(lonmin, lonmax, latmin, latmax), - method_point_interp = NULL) - - - hcst_d$obs <- obs_d$exp - hcst_downscal[[ int_method ]] <- hcst_d - } + # Ensure that observations are in the same grid as experiments + # Only needed for this method because the others already return the + # observations + latmin <- data$hcst$lat[1] + lonmin <- data$hcst$lon[1] + latmax <- data$hcst$lat[length(data$hcst$lat)] + lonmax <- data$hcst$lon[length(data$hcst$lon)] + hcst_downscal <- CST_Interpolation(data$hcst, + points = NULL, + method_remap = int_method, + target_grid = target_grid, + lat_dim = "latitude", + lon_dim = "longitude", + region = c(lonmin, lonmax, latmin, latmax), + method_point_interp = NULL) + + obs_downscal <- CST_Interpolation(data$obs, + points = NULL, + method_remap = int_method, + target_grid = target_grid, + lat_dim = "latitude", + lon_dim = "longitude", + region = c(lonmin, lonmax, latmin, latmax), + method_point_interp = NULL) + + hcst_downscal$obs <- obs_downscal$exp DOWNSCAL_MSG <- "##### DOWNSCALING COMPLETE #####" } else if (type == "intbc") { - if (length(int_methods) == 0) { - stop("Please provide one (and only one) interpolation method in the recipe.") - } - - if (length(strsplit(int_methods, ", | |,")[[1]]) != 1) { + if (length(int_method) == 0) { stop("Please provide one (and only one) interpolation method in the recipe.") } - if (is.null(bc_methods)) { + if (is.null(bc_method)) { stop("Please provide one bias-correction method in the recipe. Accepted ", "methods are 'simple_bias', 'calibration', 'quantile_mapping'.") } @@ -131,41 +121,31 @@ downscale_datasets <- function(recipe, data) { stop("Please provide the target grid in the recipe.") } - hcst_downscal <- list() - for (bc_method in strsplit(bc_methods, ", | |,")[[1]]) { - - if (!(bc_method %in% BC_METHODS)) { - stop(paste0(bc_method, " method in the recipe is not available. Accepted methods ", - "are 'simple_bias', 'calibration', 'quantile_mapping'.")) - } + if (!(bc_method %in% BC_METHODS)) { + stop(paste0(bc_method, " method in the recipe is not available. Accepted methods ", + "are 'simple_bias', 'calibration', 'quantile_mapping'.")) + } - hcst_d <- CST_Intbc(data$hcst, data$obs, - target_grid = target_grid, - bc_method = bc_method, - int_method = int_methods, - points = NULL, - method_point_interp = NULL, - lat_dim = "latitude", - lon_dim = "longitude", - sdate_dim = "syear", - member_dim = "ensemble", - region = NULL, - ncores = ncores) + hcst_downscal <- CST_Intbc(data$hcst, data$obs, + target_grid = target_grid, + bc_method = bc_method, + int_method = int_method, + points = NULL, + method_point_interp = NULL, + lat_dim = "latitude", + lon_dim = "longitude", + sdate_dim = "syear", + member_dim = "ensemble", + region = NULL, + ncores = ncores) - hcst_downscal[[ bc_method ]] <- hcst_d - } - DOWNSCAL_MSG <- "##### DOWNSCALING COMPLETE #####" } else if (type == "intlr") { - if (length(int_methods) == 0) { - stop("Please provide one (and only one) interpolation method in the recipe.") - } - - if (length(strsplit(int_methods, ", | |,")[[1]]) != 1) { + if (length(int_method) == 0) { stop("Please provide one (and only one) interpolation method in the recipe.") } - if (is.null(lr_methods)) { + if (is.null(lr_method)) { stop("Please provide one linear regression method in the recipe. Accepted ", "methods are 'basic', 'large_scale', '4nn'.") } @@ -174,43 +154,37 @@ downscale_datasets <- function(recipe, data) { stop("Please provide the target grid in the recipe.") } - hcst_downscal <- list() - for (lr_method in strsplit(lr_methods, ", | |,")[[1]]) { - - if (!(lr_method %in% LR_METHODS)) { - stop(paste0(lr_method, " method in the recipe is not available. Accepted methods ", - "are 'basic', 'large_scale', '4nn'.")) - } + if (!(lr_method %in% LR_METHODS)) { + stop(paste0(lr_method, " method in the recipe is not available. Accepted methods ", + "are 'basic', 'large_scale', '4nn'.")) + } - # TO DO: add the possibility to have the element 'pred' in 'data' - if (lr_method == "large_scale") { - if (is.null(data$pred$data)) { - stop("Please provide the large scale predictors in the element 'data$pred$data'.") - } - } else { - data$pred$data <- NULL + # TO DO: add the possibility to have the element 'pred' in 'data' + if (lr_method == "large_scale") { + if (is.null(data$pred$data)) { + stop("Please provide the large scale predictors in the element 'data$pred$data'.") } + } else { + data$pred$data <- NULL + } - hcst_d <- CST_Intlr(data$hcst, data$obs, - lr_method = lr_method, - target_grid = target_grid, - points = NULL, - int_method = int_methods, - method_point_interp = NULL, - predictors = data$pred$data, - lat_dim = "latitude", - lon_dim = "longitude", - sdate_dim = "syear", - time_dim = "time", - member_dim = "ensemble", - large_scale_predictor_dimname = 'vars', - loocv = loocv, - region = NULL, - ncores = ncores) + hcst_downscal <- CST_Intlr(data$hcst, data$obs, + lr_method = lr_method, + target_grid = target_grid, + points = NULL, + int_method = int_method, + method_point_interp = NULL, + predictors = data$pred$data, + lat_dim = "latitude", + lon_dim = "longitude", + sdate_dim = "syear", + time_dim = "time", + member_dim = "ensemble", + large_scale_predictor_dimname = 'vars', + loocv = loocv, + region = NULL, + ncores = ncores) - hcst_downscal[[ lr_method ]] <- hcst_d - } - DOWNSCAL_MSG <- "##### DOWNSCALING COMPLETE #####" } else if (type == "analogs") { @@ -220,33 +194,28 @@ downscale_datasets <- function(recipe, data) { nanalogs <- 3 } - hcst_downscal <- list() - hcst_downscal[["analogs"]] <- CST_Analogs(data$hcst, data$obs, - grid_exp = data$hcst$source_files[1], - nanalogs = nanalogs, - fun_analog = "min", - lat_dim = "latitude", - lon_dim = "longitude", - sdate_dim = "syear", - time_dim = "time", - member_dim = "ensemble", - region = NULL, - return_indices = FALSE, - loocv_window = loocv, - ncores = ncores) + hcst_downscal <- CST_Analogs(data$hcst, data$obs, + grid_exp = data$hcst$source_files[1], + nanalogs = nanalogs, + fun_analog = "min", + lat_dim = "latitude", + lon_dim = "longitude", + sdate_dim = "syear", + time_dim = "time", + member_dim = "ensemble", + region = NULL, + return_indices = FALSE, + loocv_window = loocv, + ncores = ncores) DOWNSCAL_MSG <- "##### DOWNSCALING COMPLETE #####" } else if (type == "logreg") { - if (length(int_methods) == 0) { + if (length(int_method) == 0) { stop("Please provide one (and only one) interpolation method in the recipe.") } - if (length(strsplit(int_methods, ", | |,")[[1]]) != 1) { - stop("Please provide one (and only one) interpolation method in the recipe.") - } - - if (is.null(log_reg_methods)) { + if (is.null(log_reg_method)) { stop("Please provide one logistic regression method in the recipe. Accepted ", "methods are 'ens_mean', 'ens_mean_sd', 'sorted_members'.") } @@ -263,33 +232,27 @@ downscale_datasets <- function(recipe, data) { "Please provide six or more.") } - hcst_downscal <- list() - for (log_reg_method in strsplit(log_reg_methods, ", | |,")[[1]]) { - - if (!(log_reg_method %in% LOG_REG_METHODS)) { - stop(paste0(log_reg_method, " method in the recipe is not available. Accepted methods ", - "are 'ens_mean', 'ens_mean_sd', 'sorted_members'.")) - } - - hcst_d <- CST_LogisticReg(data$hcst, data$obs, - target_grid = target_grid, - int_method = int_methods, - log_reg_method = log_reg_method, - probs_cat = c(1/3,2/3), - return_most_likely_cat = FALSE, - points = NULL, - method_point_interp = NULL, - lat_dim = "latitude", - lon_dim = "longitude", - sdate_dim = "syear", - member_dim = "ensemble", - region = NULL, - loocv = loocv, - ncores = ncores) - - hcst_downscal[[ log_reg_method ]] <- hcst_d + if (!(log_reg_method %in% LOG_REG_METHODS)) { + stop(paste0(log_reg_method, " method in the recipe is not available. Accepted methods ", + "are 'ens_mean', 'ens_mean_sd', 'sorted_members'.")) } + hcst_downscal <- CST_LogisticReg(data$hcst, data$obs, + target_grid = target_grid, + int_method = int_method, + log_reg_method = log_reg_method, + probs_cat = c(1/3,2/3), + return_most_likely_cat = FALSE, + points = NULL, + method_point_interp = NULL, + lat_dim = "latitude", + lon_dim = "longitude", + sdate_dim = "syear", + member_dim = "ensemble", + region = NULL, + loocv = loocv, + ncores = ncores) + DOWNSCAL_MSG <- "##### DOWNSCALING COMPLETE #####" } } diff --git a/modules/Loading/testing_recipes/recipe_system5c3s-tas.yml b/modules/Loading/testing_recipes/recipe_system5c3s-tas.yml index 38e23c8b..9ed0bf80 100644 --- a/modules/Loading/testing_recipes/recipe_system5c3s-tas.yml +++ b/modules/Loading/testing_recipes/recipe_system5c3s-tas.yml @@ -40,6 +40,6 @@ Analysis: Run: Loglevel: INFO Terminal: yes - output_dir: /esarchive/scratch/vagudets/repos/auto-s2s/out-logs/ + output_dir: /esarchive/scratch/jramon/GitLab_jramon/auto-s2s/out-logs/ code_dir: /esarchive/scratch/vagudets/repos/auto-s2s/ diff --git a/modules/Loading/testing_recipes/recipe_system5c3s-tas_downscaling.yml b/modules/Loading/testing_recipes/recipe_system5c3s-tas_downscaling.yml index 400448b7..0cad69ec 100644 --- a/modules/Loading/testing_recipes/recipe_system5c3s-tas_downscaling.yml +++ b/modules/Loading/testing_recipes/recipe_system5c3s-tas_downscaling.yml @@ -42,18 +42,18 @@ Analysis: Calibration: method: raw Skill: - metric: RPSS EnsCorr BSS90 Mean_Bias_SS + metric: BSS10 BSS90 Mean_Bias_SS RPSS ROCSS Downscaling: # Assumption 1: leave-one-out cross-validation is always applied # Assumption 2: for analogs, we select the best analog (minimum distance) # TO DO: add downscaling to point locations - type: int # mandatory, 'none', 'int', 'intbc', 'intlr', 'analogs', 'logreg' - int_method: bilinear nn conservative # optional, regridding method accepted by CDO + type: # mandatory, 'none', 'int', 'intbc', 'intlr', 'analogs', 'logreg' + int_method: # optional, regridding method accepted by CDO bc_method: # optional, 'simple_bias', 'calibration', 'quantile_mapping' lr_method: # optional, 'basic', 'large_scale', '4nn' log_reg_method: # optional, 'ens_mean', 'ens_mean_sd', 'sorted_members' target_grid: /esarchive/recon/ecmwf/era5/monthly_mean/tas_f1h/tas_200002.nc # optional, nc file or grid accepted by CDO - nanalogs: 1 # optional, number of analogs to be searched + nanalogs: 4 # optional, number of analogs to be searched Output_format: S2S4E Run: Loglevel: INFO diff --git a/modules/Visualization/Visualization.R b/modules/Visualization/Visualization.R index 17f58196..61f5de9a 100644 --- a/modules/Visualization/Visualization.R +++ b/modules/Visualization/Visualization.R @@ -8,8 +8,8 @@ source("modules/Visualization/tmp/PlotCombinedMap.R") plot_data <- function(recipe, data, - downscaled_data = NULL, calibrated_data = NULL, + downscaled_data = NULL, skill_metrics = NULL, probabilities = NULL, archive = NULL, @@ -25,8 +25,7 @@ plot_data <- function(recipe, # significance: Bool. Whether to include significance dots where applicable outdir <- paste0(get_dir(recipe), "plots/") - sapply(outdir, dir.create, showWarnings = FALSE, recursive = TRUE) - #dir.create(outdir, showWarnings = FALSE, recursive = TRUE) + dir.create(outdir, showWarnings = FALSE, recursive = TRUE) if ((is.null(skill_metrics)) && (is.null(calibrated_data)) && (is.null(data$fcst)) && (is.null(downscaled_data))) { @@ -49,12 +48,11 @@ plot_data <- function(recipe, plot_skill_metrics(recipe, archive, data$hcst, skill_metrics, outdir, significance) } - - # Plot forecast ensemble mean + + # Plot downscaled data if (!is.null(downscaled_data)) { - plot_downscaled_data(recipe, archive, downscaled_data, outdir) - #plot_ensemble_mean(recipe, archive, downscaled_data$exp, outdir) - } + plot_ensemble_mean(recipe, archive, downscaled_data$hcst$exp, outdir) + } # Plot forecast ensemble mean if (!is.null(calibrated_data$fcst)) { @@ -77,16 +75,6 @@ plot_data <- function(recipe, } } -plot_downscaled_data <- function(recipe, archive, data_ls, outdir) { - - methods <- names(data_ls) - for (method in methods) { - outdir_method <- grep(pattern = method, x = outdir, value = TRUE) - print(outdir_method) - plot_ensemble_mean(recipe, archive, fcst = data_ls[[method]]$exp, outdir = outdir_method) - } -} - plot_skill_metrics <- function(recipe, archive, data_cube, skill_metrics, outdir, significance = F) { diff --git a/modules/test_seasonal_downscaling.R b/modules/test_seasonal_downscaling.R index 12026bba..5f375abe 100644 --- a/modules/test_seasonal_downscaling.R +++ b/modules/test_seasonal_downscaling.R @@ -17,12 +17,27 @@ library(ClimProjDiags) source('https://earth.bsc.es/gitlab/es/s2dv/-/raw/master/R/Utils.R') source('https://earth.bsc.es/gitlab/es/s2dv/-/raw/master/R/CDORemap.R') +# Loop all downscaling methods and types +#types <- c('int', 'intbc', 'intlr', 'analogs', 'logreg') +#int_methods <- c('con', 'bil', 'bic', 'nn', 'con2') +#bc_methods <- c('simple_bias', 'calibration', 'quantile_mapping') +#lr_methods <- c('basic', 'large_scale', '4nn') +#logreg_methods <- c('ens_mean', 'ens_mean_sd', 'sorted_members') + +# Read recipe recipe_file <- "modules/Loading/testing_recipes/recipe_system5c3s-tas_downscaling.yml" recipe <- prepare_outputs(recipe_file) # Load datasets data <- load_datasets(recipe) +# Modify the recipe manually +recipe$Analysis$Workflow$Downscaling$type <- 'analogs' +recipe$Analysis$Workflow$Downscaling$int_method <- NULL # con, bil, bic, nn, con2 +recipe$Analysis$Workflow$Downscaling$bc_method <- NULL +recipe$Analysis$Workflow$Downscaling$lr_method <- NULL +recipe$Analysis$Workflow$Downscaling$log_reg_method <- NULL + # Downscale datasets downscaled_data <- downscale_datasets(recipe, data) @@ -30,21 +45,51 @@ downscaled_data <- downscale_datasets(recipe, data) # NOTE: LogReg method does not have member dimension because it provides directly the # predicted categories # The following line should work only for Interpolation, Intbc, Intlr, Analogs -stopifnot(recipe$Analysis$Workflow$Downscaling$type %in% c('int', 'intbc', 'intlr', 'analogs')) -skill_metrics <- lapply(downscaled_data$hcst, function(x) compute_skill_metrics(recipe, x$exp, x$obs)) +#stopifnot(recipe$Analysis$Workflow$Downscaling$type %in% c('int', 'intbc', 'intlr', 'analogs')) +#skill_metrics <- compute_skill_metrics(recipe, downscaled_data$hcst$exp, downscaled_data$hcst$obs) + +# Save downscaled data to later intercompare them +saveRDS(downscaled_data, file = paste0('/esarchive/scratch/jramon/downscaling/data/FOCUS/', + recipe$Analysis$Workflow$Downscaling$type, '-', + recipe$Analysis$Workflow$Downscaling$int_method, '-', + recipe$Analysis$Workflow$Downscaling$bc_method, '-', + recipe$Analysis$Workflow$Downscaling$lr_method, '-', + recipe$Analysis$Workflow$Downscaling$log_reg_method, '.RDS')) # Plot downscaled data -plot_data(recipe, downscaled_data = downscaled_data$hcst, data = NULL) +plot_data(recipe, data = NULL, downscaled_data = downscaled_data) -# Plot raw data +# Plot skill metrics my_data <- list() -my_data$fcst <- data$hcst -plot_data(recipe, data = my_data) +my_data$hcst <- downscaled_data$hcst$exp +plot_data(recipe, data = my_data, skill_metrics = skill_metrics) -# Plot skill data -my_data <- list() -my_data$hcst <- downscaled_data$hcst$bilinear$exp -plot_data(recipe, skill_metrics = skill_metrics$bilinear, data = my_data) #Plot skill metrics +# Plot Taylor diagram intercomparison +source('/esarchive/scratch/jramon/GitLab_jramon/nc2ts/taylor_diagram.R') +rds_files <- list.files(path = '/esarchive/scratch/jramon/downscaling/data/FOCUS', full.names = T) +down_data <- list() +methods <- c(list.files(path = '/esarchive/scratch/jramon/downscaling/data/FOCUS')) +for (nfile in seq(rds_files)) { + + # to plot all points in the same Taylor diagram + flag <- ifelse(nfile == 1, F, T) + + down_data[[nfile]] <- readRDS(rds_files[[nfile]]) + + #compute model ensemble mean + ens_mean <- Apply(down_data[[nfile]]$hcst$exp$data, 'ensemble', mean)$output1 + + # remove ensemble dimension in obs + obs <- Subset(down_data[[nfile]]$hcst$obs$data, along = 'ensemble', indices = 1, drop = 'selected') + + ens_mean <- .reorder_dims(arr_ref = obs, arr_to_reorder = ens_mean) + + plot <- taylor.diagram(ref = as.vector(obs), model = as.vector(ens_mean), normalize = TRUE, + add = flag, pch = nfile, sd.arcs = TRUE, maxsd = 1.5) + +} + +legend(1.3, 1.5, cex = 0.8, pt.cex = 1, legend = methods, pch = 1:length(rds_files), ncol = 1) ################################## # EXAMPLE FOR SEASONAL CALIBRATION -- GitLab From f8bbaa4a8adc15b8b01223c35c058236994dd0e6 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Thu, 23 Feb 2023 15:43:51 +0100 Subject: [PATCH 056/388] Add message about conf dir --- tools/write_autosubmit_conf.R | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tools/write_autosubmit_conf.R b/tools/write_autosubmit_conf.R index 097b2afd..8e6c6ba1 100644 --- a/tools/write_autosubmit_conf.R +++ b/tools/write_autosubmit_conf.R @@ -60,6 +60,9 @@ write_autosubmit_conf <- function(recipe, nchunks) { } info(recipe$Run$logger, paste("##### AUTOSUBMIT CONFIGURATION WRITTEN FOR", expid, "#####")) + info(recipe$Run$logger, + paste0("You can check your experiment configuration at: ", + "/esarchive/autosubmit/", expid, "/conf/")) # Print instructions/commands for user if (recipe$Run$Terminal) { ## TODO: Change SSH message for other environments (outside BSC) -- GitLab From 0c11cc44ce155aa1a2c0ff351a47c2ecfb485256 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Mon, 27 Feb 2023 09:21:43 +0100 Subject: [PATCH 057/388] Move scripts and update example recipe --- .../auto-verification.sh | 0 autosubmit/conf_esarchive/jobs.conf | 2 +- recipes/tests/recipe_seasonal_example.yml | 12 ++++++------ modules/split.R => split.R | 0 4 files changed, 7 insertions(+), 7 deletions(-) rename auto-verification.sh => autosubmit/auto-verification.sh (100%) rename modules/split.R => split.R (100%) diff --git a/auto-verification.sh b/autosubmit/auto-verification.sh similarity index 100% rename from auto-verification.sh rename to autosubmit/auto-verification.sh diff --git a/autosubmit/conf_esarchive/jobs.conf b/autosubmit/conf_esarchive/jobs.conf index b4369031..88f3565c 100644 --- a/autosubmit/conf_esarchive/jobs.conf +++ b/autosubmit/conf_esarchive/jobs.conf @@ -1,5 +1,5 @@ [verification] -FILE = auto-verification.sh +FILE = autosubmit/auto-verification.sh RUNNING = chunk WALLCLOCK = NOTIFY_ON = diff --git a/recipes/tests/recipe_seasonal_example.yml b/recipes/tests/recipe_seasonal_example.yml index 8b40d21a..8c38b8bc 100644 --- a/recipes/tests/recipe_seasonal_example.yml +++ b/recipes/tests/recipe_seasonal_example.yml @@ -17,11 +17,11 @@ Analysis: - {name: prlr, freq: monthly_mean} Datasets: System: # multiple systems for single model, split if Multimodel = F - - {name: system5c3s} - - {name: system7c3s} + - {name: ECMWF-SEAS5} + - {name: Meteo-France-System7} Multimodel: False # single option Reference: - - {name: era5} # multiple references for single model? + - {name: ERA5} # multiple references for single model? Time: sdate: # list, split - '0101' @@ -30,11 +30,11 @@ Analysis: hcst_start: '2000' # single option hcst_end: '2016' # single option ftime_min: 1 # single option - ftime_max: 3 # single option + ftime_max: 6 # single option Region: # multiple lists, Add region name if there is more than 1 region - {latmin: -5, latmax: 5, lonmin: -10, lonmax: 10} Regrid: - method: bilinear ## TODO: allow multiple methods? + method: conservative ## TODO: allow multiple methods? type: to_system Workflow: Anomalies: @@ -48,7 +48,7 @@ Analysis: percentiles: [[1/3, 2/3], [1/10, 9/10], [1/4, 2/4, 3/4]] # list, don't split Indicators: index: no # ? - ncores: 7 + ncores: 8 remove_NAs: yes # bool, don't split Output_format: Scorecards # string, don't split diff --git a/modules/split.R b/split.R similarity index 100% rename from modules/split.R rename to split.R -- GitLab From 3612aba02819687dd4819b5858262e1644bd8842 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Mon, 27 Feb 2023 09:40:30 +0100 Subject: [PATCH 058/388] Change output format in example --- recipes/tests/recipe_seasonal_example.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/recipes/tests/recipe_seasonal_example.yml b/recipes/tests/recipe_seasonal_example.yml index 8c38b8bc..a866bf5c 100644 --- a/recipes/tests/recipe_seasonal_example.yml +++ b/recipes/tests/recipe_seasonal_example.yml @@ -50,7 +50,7 @@ Analysis: index: no # ? ncores: 8 remove_NAs: yes # bool, don't split - Output_format: Scorecards # string, don't split + Output_format: S2S4E # string, don't split ################################################################################ ## Run CONFIGURATION -- GitLab From 2b740366574198c22794c08ab52de749deb3f9ca Mon Sep 17 00:00:00 2001 From: aho Date: Tue, 28 Feb 2023 11:55:57 +0100 Subject: [PATCH 059/388] Changes for new HadGEM3 path and structure --- conf/archive_decadal.yml | 8 ++++---- modules/Loading/Loading_decadal.R | 2 +- modules/Loading/testing_recipes/recipe_decadal.yml | 6 +++--- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/conf/archive_decadal.yml b/conf/archive_decadal.yml index 2b74bff8..6b6ca44a 100644 --- a/conf/archive_decadal.yml +++ b/conf/archive_decadal.yml @@ -91,12 +91,12 @@ archive: first_dcppB_syear: 2019 monthly_mean: table: {"tas":"Amon", "pr":"Amon", "psl":"Amon", "ts":"Amon", "tos":"Omon"} - grid: {"tas":"gr", "psl":"gr", "pr":"gr", "ts":"gr", "tos":"gr"} + grid: {"tas":"gn", "psl":"gr", "pr":"gr", "ts":"gr", "tos":"gr"} #version depends on member and variable - version: {"tas":"v20200316", "psl":"v20200316", "pr":"v20200316", "ts":"v20200316", "tos":"v20200417"} + version: {"tas":"v20200417", "psl":"v20200316", "pr":"v20200316", "ts":"v20200316", "tos":"v20200417"} daily_mean: - grid: {"tas":"gn"} - version: {"tasmin":"v20200101", "tasmax":"v20200101", "pr":"v20200417"} + grid: {"tasmin":"gn", "tasmax":"gn", "pr":"gn"} + version: {"tasmin":"v20200417", "tasmax":"v20200417", "pr":"v20200417"} calendar: "360-day" member: r1i1p1f2,r2i1p1f2,r3i1p1f2,r4i1p1f2,r5i1p1f2,r6i1p1f2,r7i1p1f2,r8i1p1f2,r9i1p1f2,r10i1p1f2 initial_month: 11 diff --git a/modules/Loading/Loading_decadal.R b/modules/Loading/Loading_decadal.R index e3677e1d..b3844159 100644 --- a/modules/Loading/Loading_decadal.R +++ b/modules/Loading/Loading_decadal.R @@ -84,7 +84,7 @@ load_datasets <- function(recipe) { regrid_params <- get_regrid_params(recipe, archive) # Only if the time length in each chunk may differ that we need largest_dims_length to be TRUE. Otherwise, set FALSE to increase efficiency. - need_largest_dims_length <- ifelse(exp.name == 'EC-Earth3-i2', TRUE, FALSE) + need_largest_dims_length <- ifelse(exp.name %in% c('HadGEM3-GC31-MM', 'EC-Earth3-i2'), TRUE, FALSE) #------------------------------------------- diff --git a/modules/Loading/testing_recipes/recipe_decadal.yml b/modules/Loading/testing_recipes/recipe_decadal.yml index 986578f7..f724e25b 100644 --- a/modules/Loading/testing_recipes/recipe_decadal.yml +++ b/modules/Loading/testing_recipes/recipe_decadal.yml @@ -8,8 +8,8 @@ Analysis: freq: monthly_mean Datasets: System: - name: EC-Earth3-i4 #CanESM5 - member: r1i4p1f1,r2i4p1f1,r3i4p1f1 #'all' + name: HadGEM3-GC31-MM #EC-Earth3-i4 #CanESM5 + member: r1i1p1f2,r2i1p1f2,r3i1p1f2 #'all' Multimodel: no Reference: name: ERA5 #JRA-55 @@ -19,7 +19,7 @@ Analysis: hcst_end: 1993 # season: 'Annual' ftime_min: 2 - ftime_max: 14 + ftime_max: 24 Region: latmin: 10 #-90 latmax: 20 #90 -- GitLab From 24a3170d27fd55b10763eed8a924118f0220d856 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Tue, 28 Feb 2023 12:15:13 +0100 Subject: [PATCH 060/388] Fix bug in recipe checker (system/ref name check) --- tools/check_recipe.R | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/tools/check_recipe.R b/tools/check_recipe.R index 559d0492..964c4446 100644 --- a/tools/check_recipe.R +++ b/tools/check_recipe.R @@ -61,19 +61,23 @@ check_recipe <- function(recipe) { collapse = ", "), ".")) error_status <- T } + } else { + archive <- NULL } # Check system names - if (!all(recipe$Analysis$Datasets$System$name %in% names(archive$System))) { - error(recipe$Run$logger, - "The specified System name was not found in the archive.") - error_status <- T - } - # Check reference names - if (!all(recipe$Analysis$Datasets$Reference$name %in% - names(archive$Reference))) { - error(recipe$Run$logger, - "The specified Reference name was not found in the archive.") - error_status <- T + if (!is.null(archive)) { + if (!all(recipe$Analysis$Datasets$System$name %in% names(archive$System))) { + error(recipe$Run$logger, + "The specified System name was not found in the archive.") + error_status <- T + } + # Check reference names + if (!all(recipe$Analysis$Datasets$Reference$name %in% + names(archive$Reference))) { + error(recipe$Run$logger, + "The specified Reference name was not found in the archive.") + error_status <- T + } } # Check ftime_min and ftime_max if ((!(recipe$Analysis$Time$ftime_min > 0)) || -- GitLab From 2e647dad4193b29dcaab865342dcc9a70af300bb Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Thu, 2 Mar 2023 08:37:19 +0100 Subject: [PATCH 061/388] Remove hardcoded recipe --- split.R | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/split.R b/split.R index ca6adca1..8e33f916 100644 --- a/split.R +++ b/split.R @@ -1,9 +1,9 @@ suppressMessages(source("tools/libs.R")) # Retrieve recipe file path -# args = commandArgs(trailingOnly = TRUE) -# recipe_file <- args[1] -recipe_file <- "recipes/tests/recipe_seasonal_example.yml" +args = commandArgs(trailingOnly = TRUE) +recipe_file <- args[1] +# recipe_file <- "recipes/tests/recipe_seasonal_example.yml" # Check recipe and prepare output directories recipe <- prepare_outputs(recipe_file) # Split recipe into atomic recipes -- GitLab From e991b0743e2773ffb3ecd650480a16390acd02d0 Mon Sep 17 00:00:00 2001 From: Jaume Ramon Date: Thu, 2 Mar 2023 17:10:26 +0100 Subject: [PATCH 062/388] Return hcst and obs separately --- modules/Downscaling/Downscaling.R | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/modules/Downscaling/Downscaling.R b/modules/Downscaling/Downscaling.R index 1f814b74..32098b3f 100644 --- a/modules/Downscaling/Downscaling.R +++ b/modules/Downscaling/Downscaling.R @@ -15,8 +15,6 @@ source('/esarchive/scratch/jramon/GitLab_jramon/downscaling/csdownscale/R/Intlr. source('/esarchive/scratch/jramon/GitLab_jramon/downscaling/csdownscale/R/Analogs.R') source('/esarchive/scratch/jramon/GitLab_jramon/downscaling/csdownscale/R/LogisticReg.R') source('/esarchive/scratch/jramon/GitLab_jramon/downscaling/csdownscale/R/Utils.R') -#source("https://earth.bsc.es/gitlab/external/cstools/-/raw/master/R/CST_BiasCorrection.R") - ## Entry params data and recipe? downscale_datasets <- function(recipe, data) { @@ -257,6 +255,6 @@ downscale_datasets <- function(recipe, data) { } } print(DOWNSCAL_MSG) - return(list(hcst = hcst_downscal, fcst = NULL)) + return(list(hcst = hcst_downscal$exp, obs = hcst_downscal$obs, fcst = NULL)) } -- GitLab From 70f94cdf152bc9a8b04d39b795b4ec16eaf16096 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Fri, 3 Mar 2023 10:36:40 +0100 Subject: [PATCH 063/388] Change one CSDownscale function for testing, fix Viz module --- modules/Downscaling/Downscaling.R | 14 +++++++------- .../recipe_system5c3s-tas_downscaling.yml | 18 +++++++++--------- modules/Visualization/Visualization.R | 5 ----- modules/test_seasonal.R | 10 ++++++---- 4 files changed, 22 insertions(+), 25 deletions(-) diff --git a/modules/Downscaling/Downscaling.R b/modules/Downscaling/Downscaling.R index 1f814b74..4c32d09a 100644 --- a/modules/Downscaling/Downscaling.R +++ b/modules/Downscaling/Downscaling.R @@ -9,12 +9,12 @@ #░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ #░ ░ ░ ## TODO: Remove once CSDownscale is on CRAN -source('/esarchive/scratch/jramon/GitLab_jramon/downscaling/csdownscale/R/Interpolation.R') -source('/esarchive/scratch/jramon/GitLab_jramon/downscaling/csdownscale/R/Intbc.R') -source('/esarchive/scratch/jramon/GitLab_jramon/downscaling/csdownscale/R/Intlr.R') -source('/esarchive/scratch/jramon/GitLab_jramon/downscaling/csdownscale/R/Analogs.R') -source('/esarchive/scratch/jramon/GitLab_jramon/downscaling/csdownscale/R/LogisticReg.R') -source('/esarchive/scratch/jramon/GitLab_jramon/downscaling/csdownscale/R/Utils.R') +source('/esarchive/scratch/vagudets/repos/csdownscale/R/Interpolation.R') +source('/esarchive/scratch/vagudets/repos/csdownscale/R/Intbc.R') +source('/esarchive/scratch/vagudets/repos/csdownscale/R/Intlr.R') +source('/esarchive/scratch/vagudets/repos/csdownscale/R/Analogs.R') +source('/esarchive/scratch/vagudets/repos/csdownscale/R/LogisticReg.R') +source('/esarchive/scratch/vagudets/repos/csdownscale/R/Utils.R') #source("https://earth.bsc.es/gitlab/external/cstools/-/raw/master/R/CST_BiasCorrection.R") @@ -257,6 +257,6 @@ downscale_datasets <- function(recipe, data) { } } print(DOWNSCAL_MSG) - return(list(hcst = hcst_downscal, fcst = NULL)) + return(list(hcst = hcst_downscal$exp, obs = hcst_downscal$obs, fcst = NULL)) } diff --git a/modules/Loading/testing_recipes/recipe_system5c3s-tas_downscaling.yml b/modules/Loading/testing_recipes/recipe_system5c3s-tas_downscaling.yml index 0cad69ec..b5d57c6f 100644 --- a/modules/Loading/testing_recipes/recipe_system5c3s-tas_downscaling.yml +++ b/modules/Loading/testing_recipes/recipe_system5c3s-tas_downscaling.yml @@ -19,10 +19,10 @@ Analysis: freq: monthly_mean Datasets: System: - name: system5c3s + name: ECMWF-SEAS5 Multimodel: no Reference: - name: era5 + name: ERA5 Time: sdate: '0501' hcst_start: '2000' @@ -47,16 +47,16 @@ Analysis: # Assumption 1: leave-one-out cross-validation is always applied # Assumption 2: for analogs, we select the best analog (minimum distance) # TO DO: add downscaling to point locations - type: # mandatory, 'none', 'int', 'intbc', 'intlr', 'analogs', 'logreg' - int_method: # optional, regridding method accepted by CDO - bc_method: # optional, 'simple_bias', 'calibration', 'quantile_mapping' - lr_method: # optional, 'basic', 'large_scale', '4nn' - log_reg_method: # optional, 'ens_mean', 'ens_mean_sd', 'sorted_members' + type: intbc # mandatory, 'none', 'int', 'intbc', 'intlr', 'analogs', 'logreg' + int_method: conservative # optional, regridding method accepted by CDO + bc_method: simple_bias # optional, 'simple_bias', 'calibration', 'quantile_mapping' + lr_method: basic # optional, 'basic', 'large_scale', '4nn' + log_reg_method: ens_mean # optional, 'ens_mean', 'ens_mean_sd', 'sorted_members' target_grid: /esarchive/recon/ecmwf/era5/monthly_mean/tas_f1h/tas_200002.nc # optional, nc file or grid accepted by CDO nanalogs: 4 # optional, number of analogs to be searched Output_format: S2S4E Run: Loglevel: INFO Terminal: yes - output_dir: /esarchive/scratch/jramon/GitLab_jramon/auto-s2s/out-logs/ - code_dir: /esarchive/scratch/jramon/GitLab_jramon/auto-s2s/ + output_dir: /esarchive/scratch/vagudets/repos/auto-s2s/out-logs/ + code_dir: /esarchive/scratch/vagudets/repos/auto-s2s/ diff --git a/modules/Visualization/Visualization.R b/modules/Visualization/Visualization.R index e7236da3..9e453bdc 100644 --- a/modules/Visualization/Visualization.R +++ b/modules/Visualization/Visualization.R @@ -48,11 +48,6 @@ plot_data <- function(recipe, significance) } - # Plot downscaled data - if (!is.null(downscaled_data)) { - plot_ensemble_mean(recipe, archive, downscaled_data$hcst$exp, outdir) - } - # Plot forecast ensemble mean if (!is.null(data$fcst)) { plot_ensemble_mean(recipe, archive, data$fcst, outdir) diff --git a/modules/test_seasonal.R b/modules/test_seasonal.R index 44394cbd..bf784c1f 100644 --- a/modules/test_seasonal.R +++ b/modules/test_seasonal.R @@ -1,20 +1,22 @@ -setwd("/esarchive/scratch/jramon/GitLab_jramon/auto-s2s/") source("modules/Loading/Loading.R") source("modules/Calibration/Calibration.R") +source("modules/Downscaling/Downscaling.R") source("modules/Anomalies/Anomalies.R") source("modules/Skill/Skill.R") source("modules/Saving/Saving.R") source("modules/Visualization/Visualization.R") -recipe_file <- "modules/Loading/testing_recipes/recipe_seasonal-tests.yml" +recipe_file <- "modules/Loading/testing_recipes/recipe_system5c3s-tas_downscaling.yml" recipe <- prepare_outputs(recipe_file) # Load datasets data <- load_datasets(recipe) +# Downscale datasets +data <- downscale_datasets(recipe, data) # Calibrate datasets -calibrated_data <- calibrate_datasets(recipe, data) +# data <- calibrate_datasets(recipe, data) # Compute anomalies -calibrated_data <- compute_anomalies(recipe, calibrated_data) +# calibrated_data <- compute_anomalies(recipe, calibrated_data) # Compute skill metrics skill_metrics <- compute_skill_metrics(recipe, calibrated_data) # Compute percentiles and probability bins -- GitLab From c524fbe95c959abe226c145810b8640231cc6b2a Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Fri, 3 Mar 2023 16:14:08 +0100 Subject: [PATCH 064/388] Restructure downscaling checks (WIP) --- modules/Downscaling/Downscaling.R | 186 +++++++++++++++++------------- 1 file changed, 103 insertions(+), 83 deletions(-) diff --git a/modules/Downscaling/Downscaling.R b/modules/Downscaling/Downscaling.R index 4c32d09a..1e8fb5d9 100644 --- a/modules/Downscaling/Downscaling.R +++ b/modules/Downscaling/Downscaling.R @@ -9,6 +9,7 @@ #░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ #░ ░ ░ ## TODO: Remove once CSDownscale is on CRAN +## TODO: Move recipe checks to check_recipe() source('/esarchive/scratch/vagudets/repos/csdownscale/R/Interpolation.R') source('/esarchive/scratch/vagudets/repos/csdownscale/R/Intbc.R') source('/esarchive/scratch/vagudets/repos/csdownscale/R/Intlr.R') @@ -29,56 +30,60 @@ downscale_datasets <- function(recipe, data) { type <- tolower(recipe$Analysis$Workflow$Downscaling$type) if (!is.null(data$fcst)) { - warning("The downscaling will be only performed to the hindcast data") + warn(recipe$Run$logger, + "The downscaling will be only performed to the hindcast data") data$fcst <- NULL } if (type == "none") { - hcst_downscal <- data$hcst DOWNSCAL_MSG <- "##### NO DOWNSCALING PERFORMED #####" - } else { # Downscaling function params int_method <- tolower(recipe$Analysis$Workflow$Downscaling$int_method) bc_method <- tolower(recipe$Analysis$Workflow$Downscaling$bc_method) lr_method <- tolower(recipe$Analysis$Workflow$Downscaling$lr_method) - log_reg_method <- tolower(recipe$Analysis$Workflow$Downscaling$log_reg_method) + logreg_method <- tolower(recipe$Analysis$Workflow$Downscaling$logreg_method) target_grid <- tolower(recipe$Analysis$Workflow$Downscaling$target_grid) nanalogs <- as.numeric(recipe$Analysis$Workflow$Downscaling$nanalogs) - + ## TODO: Compute number of cores if (is.null(recipe$Analysis$ncores)) { ncores <- 1 } else { ncores <- recipe$Analysis$ncores } - - #TO DO: add the parametre loocv where it corresponds + ## TODO: add the parametre loocv where it corresponds if (is.null(recipe$Analysis$loocv)) { loocv <- TRUE } else { loocv <- recipe$Analysis$loocv } - + # Define downscaling options DOWNSCAL_TYPES <- c("none", "int", "intbc", "intlr", "analogs", "logreg") BC_METHODS <- c("simple_bias", "calibration", "quantile_mapping") LR_METHODS <- c("basic", "large_scale", "4nn") - LOG_REG_METHODS <- c("ens_mean", "ens_mean_sd", "sorted_members") + LOGREG_METHODS <- c("ens_mean", "ens_mean_sd", "sorted_members") if (!(type %in% DOWNSCAL_TYPES)) { - stop("Downscaling type in the recipe is not available. Accepted types ", - "are 'none', 'int', 'intbc', 'intlr', 'analogs', 'logreg'.") - } - + error(recipe$Run$logger, + paste("Downscaling type in the recipe is not available.", + "Accepted entries are:", DOWNSCAL_TYPES)) + } + # Interpolation if (type == "int") { - if (is.null(int_method)) { - stop("Please provide one interpolation method in the recipe.") + # Check method + if (length(int_method) == 0) { + error(recipe$Run$logger, + paste("Downscaling type 'int' was requested, but no", + "interpolation method is provided in the recipe.")) } - + # Check target grid if (is.null(target_grid)) { - stop("Please provide the target grid in the recipe.") + error(recipe$Run$logger, + paste("Downscaling type 'int' was requested, but no", + "target grid is provided in the recipe.")) } - + ## TODO: Move this check elsewhere # Ensure that observations are in the same grid as experiments # Only needed for this method because the others already return the # observations @@ -86,6 +91,7 @@ downscale_datasets <- function(recipe, data) { lonmin <- data$hcst$lon[1] latmax <- data$hcst$lat[length(data$hcst$lat)] lonmax <- data$hcst$lon[length(data$hcst$lon)] + # Interpolate hcst hcst_downscal <- CST_Interpolation(data$hcst, points = NULL, method_remap = int_method, @@ -94,7 +100,7 @@ downscale_datasets <- function(recipe, data) { lon_dim = "longitude", region = c(lonmin, lonmax, latmin, latmax), method_point_interp = NULL) - + # Interpolate obs obs_downscal <- CST_Interpolation(data$obs, points = NULL, method_remap = int_method, @@ -103,29 +109,34 @@ downscale_datasets <- function(recipe, data) { lon_dim = "longitude", region = c(lonmin, lonmax, latmin, latmax), method_point_interp = NULL) - hcst_downscal$obs <- obs_downscal$exp - DOWNSCAL_MSG <- "##### DOWNSCALING COMPLETE #####" } else if (type == "intbc") { if (length(int_method) == 0) { - stop("Please provide one (and only one) interpolation method in the recipe.") + error(recipe$Run$logger, + paste("Downscaling type 'intbc' was requested in the recipe, but", + "no interpolation method is provided.")) + stop() } - - if (is.null(bc_method)) { - stop("Please provide one bias-correction method in the recipe. Accepted ", - "methods are 'simple_bias', 'calibration', 'quantile_mapping'.") + if (length(bc_method) == 0) { + error(recipe$Run$logger, + paste("Downscaling type 'intbc' was requested in the recipe, but", + "no bias correction method is provided.")) + stop() ## "methods are 'simple_bias', 'calibration', 'quantile_mapping'.") } - - if (is.null(target_grid)) { - stop("Please provide the target grid in the recipe.") + if (length(target_grid) == 0) { + error(recipe$Run$logger, + paste("Downscaling type 'intbc' was requested in the recipe, but", + "no target grid is provided.")) + stop() } - if (!(bc_method %in% BC_METHODS)) { - stop(paste0(bc_method, " method in the recipe is not available. Accepted methods ", - "are 'simple_bias', 'calibration', 'quantile_mapping'.")) + error(recipe$Run$logger, + paste0(bc_method, " method in the recipe is not available.", + "The available methods are:", BC_METHODS)) + stop() } - + # Interpolate hcst and obs with bias correction hcst_downscal <- CST_Intbc(data$hcst, data$obs, target_grid = target_grid, bc_method = bc_method, @@ -138,28 +149,32 @@ downscale_datasets <- function(recipe, data) { member_dim = "ensemble", region = NULL, ncores = ncores) - - DOWNSCAL_MSG <- "##### DOWNSCALING COMPLETE #####" } else if (type == "intlr") { + ## TODO: Logger if (length(int_method) == 0) { - stop("Please provide one (and only one) interpolation method in the recipe.") + error(recipe$Run$logger, + paste("Downscaling type 'intlr' was requested in the recipe, but", + "no interpolation method is provided.")) + stop() } - - if (is.null(lr_method)) { - stop("Please provide one linear regression method in the recipe. Accepted ", - "methods are 'basic', 'large_scale', '4nn'.") + if (length(lr_method) == 0) { + error(recipe$Run$logger, + paste("Downscaling type 'intlr' was requested in the recipe, but", + "no linear regression method is provided.")) + stop() } - - if (is.null(target_grid)) { - stop("Please provide the target grid in the recipe.") + if (length(target_grid) == 0) { + error(recipe$Run$logger, + paste("Downscaling type 'intlr' was requested in the recipe, but", + "no target grid is provided.")) + stop() } - if (!(lr_method %in% LR_METHODS)) { - stop(paste0(lr_method, " method in the recipe is not available. Accepted methods ", - "are 'basic', 'large_scale', '4nn'.")) + error(recipe$Run$logger, + paste0("The accepted linear regression methods are:", LR_METHODS)) + stop() } - - # TO DO: add the possibility to have the element 'pred' in 'data' + ## TODO: add the possibility to have the element 'pred' in 'data' if (lr_method == "large_scale") { if (is.null(data$pred$data)) { stop("Please provide the large scale predictors in the element 'data$pred$data'.") @@ -167,7 +182,7 @@ downscale_datasets <- function(recipe, data) { } else { data$pred$data <- NULL } - + # Interpolate hcst and obs with linear regression hcst_downscal <- CST_Intlr(data$hcst, data$obs, lr_method = lr_method, target_grid = target_grid, @@ -175,25 +190,23 @@ downscale_datasets <- function(recipe, data) { int_method = int_method, method_point_interp = NULL, predictors = data$pred$data, - lat_dim = "latitude", + lat_dim = "latitude", lon_dim = "longitude", - sdate_dim = "syear", - time_dim = "time", + sdate_dim = "syear", + time_dim = "time", member_dim = "ensemble", large_scale_predictor_dimname = 'vars', loocv = loocv, - region = NULL, + region = NULL, ncores = ncores) - - DOWNSCAL_MSG <- "##### DOWNSCALING COMPLETE #####" } else if (type == "analogs") { - - if (is.null(nanalogs)) { - warning("The number of analogs for searching has not been provided in the ", - "recipe. Setting it to 3.") + if (length(nanalogs) == 0) { + warn(recipe$Run$logger, + paste("The number of analogs for searching has not been provided", + "in the recipe. Setting it to 3.")) nanalogs <- 3 } - + # Apply analogs method to hcst and obs hcst_downscal <- CST_Analogs(data$hcst, data$obs, grid_exp = data$hcst$source_files[1], nanalogs = nanalogs, @@ -207,36 +220,43 @@ downscale_datasets <- function(recipe, data) { return_indices = FALSE, loocv_window = loocv, ncores = ncores) - - DOWNSCAL_MSG <- "##### DOWNSCALING COMPLETE #####" } else if (type == "logreg") { - if (length(int_method) == 0) { - stop("Please provide one (and only one) interpolation method in the recipe.") + error(recipe$Run$logger, + paste("Downscaling type 'logreg' was requested in the recipe, but", + "no interpolation method is provided.")) + stop() } - - if (is.null(log_reg_method)) { - stop("Please provide one logistic regression method in the recipe. Accepted ", - "methods are 'ens_mean', 'ens_mean_sd', 'sorted_members'.") + if (length(logreg_method) == 0) { + error(recipe$Run$logger, + paste("Downscaling type 'logreg' was requested in the recipe, but", + "no logistic regression method is provided. The accepted", + "methods are:", LOG_REG_METHODS)) + stop() } - - if (is.null(target_grid)) { - stop("Please provide the target grid in the recipe.") + if (length(target_grid) == 0) { + error(recipe$Run$logger, + paste("Downscaling type 'logreg' was requested in the recipe, but", + "no target grid is provided.")) + stop() } - + ## Keep this check here # Since we are forcing to create three categories, and applying cross-validation, # we need at least six years of data for the logistic regression function to not # crash - if (dim(data$hcst$data)[names(dim(data$hcst$data)) == "syear"] <= 5) { - stop("The number of start dates is insufficient for the logisitic regression method. ", - "Please provide six or more.") + if (dim(data$hcst$data)[["syear"]] < 6) { + error(recipe$Run$logger, + paste("The number of start dates is insufficient for the", + "logistic regression method. Please provide six or more.")) + stop() } - - if (!(log_reg_method %in% LOG_REG_METHODS)) { - stop(paste0(log_reg_method, " method in the recipe is not available. Accepted methods ", - "are 'ens_mean', 'ens_mean_sd', 'sorted_members'.")) + if (!(logreg_method %in% LOGREG_METHODS)) { + error(recipe$Run$logger, + paste("The accepted methos for logistic regression are:", + LOGREG_METHODS)) + stop() } - + # Apply logistic regression to hcst and obs hcst_downscal <- CST_LogisticReg(data$hcst, data$obs, target_grid = target_grid, int_method = int_method, @@ -253,10 +273,10 @@ downscale_datasets <- function(recipe, data) { loocv = loocv, ncores = ncores) - DOWNSCAL_MSG <- "##### DOWNSCALING COMPLETE #####" } - } - print(DOWNSCAL_MSG) + DOWNSCAL_MSG <- "##### DOWNSCALING COMPLETE #####" + } + info(recipe$Run$logger, DOWNSCAL_MSG) return(list(hcst = hcst_downscal$exp, obs = hcst_downscal$obs, fcst = NULL)) } -- GitLab From a78ef83f6cb30dc7f567e8ab3e1172cc7f840f73 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Wed, 8 Mar 2023 10:46:49 +0100 Subject: [PATCH 065/388] Rewrite downscaling checks --- modules/Downscaling/Downscaling.R | 12 ++++++------ .../recipe_system5c3s-tas_downscaling.yml | 6 +++--- modules/test_seasonal.R | 12 ++++++------ 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/modules/Downscaling/Downscaling.R b/modules/Downscaling/Downscaling.R index 1e8fb5d9..f2a51b48 100644 --- a/modules/Downscaling/Downscaling.R +++ b/modules/Downscaling/Downscaling.R @@ -10,12 +10,12 @@ #░ ░ ░ ## TODO: Remove once CSDownscale is on CRAN ## TODO: Move recipe checks to check_recipe() -source('/esarchive/scratch/vagudets/repos/csdownscale/R/Interpolation.R') -source('/esarchive/scratch/vagudets/repos/csdownscale/R/Intbc.R') -source('/esarchive/scratch/vagudets/repos/csdownscale/R/Intlr.R') -source('/esarchive/scratch/vagudets/repos/csdownscale/R/Analogs.R') -source('/esarchive/scratch/vagudets/repos/csdownscale/R/LogisticReg.R') -source('/esarchive/scratch/vagudets/repos/csdownscale/R/Utils.R') +source('/esarchive/scratch/jramon/GitLab_jramon/downscaling/csdownscale/R/Interpolation.R') +source('/esarchive/scratch/jramon/GitLab_jramon/downscaling/csdownscale/R/Intbc.R') +source('/esarchive/scratch/jramon/GitLab_jramon/downscaling/csdownscale/R/Intlr.R') +source('/esarchive/scratch/jramon/GitLab_jramon/downscaling/csdownscale/R/Analogs.R') +source('/esarchive/scratch/jramon/GitLab_jramon/downscaling/csdownscale/R/LogisticReg.R') +source('/esarchive/scratch/jramon/GitLab_jramon/downscaling/csdownscale/R/Utils.R') #source("https://earth.bsc.es/gitlab/external/cstools/-/raw/master/R/CST_BiasCorrection.R") diff --git a/modules/Loading/testing_recipes/recipe_system5c3s-tas_downscaling.yml b/modules/Loading/testing_recipes/recipe_system5c3s-tas_downscaling.yml index b5d57c6f..99e02c7d 100644 --- a/modules/Loading/testing_recipes/recipe_system5c3s-tas_downscaling.yml +++ b/modules/Loading/testing_recipes/recipe_system5c3s-tas_downscaling.yml @@ -50,10 +50,10 @@ Analysis: type: intbc # mandatory, 'none', 'int', 'intbc', 'intlr', 'analogs', 'logreg' int_method: conservative # optional, regridding method accepted by CDO bc_method: simple_bias # optional, 'simple_bias', 'calibration', 'quantile_mapping' - lr_method: basic # optional, 'basic', 'large_scale', '4nn' - log_reg_method: ens_mean # optional, 'ens_mean', 'ens_mean_sd', 'sorted_members' + lr_method: # optional, 'basic', 'large_scale', '4nn' + log_reg_method: # optional, 'ens_mean', 'ens_mean_sd', 'sorted_members' target_grid: /esarchive/recon/ecmwf/era5/monthly_mean/tas_f1h/tas_200002.nc # optional, nc file or grid accepted by CDO - nanalogs: 4 # optional, number of analogs to be searched + nanalogs: # optional, number of analogs to be searched Output_format: S2S4E Run: Loglevel: INFO diff --git a/modules/test_seasonal.R b/modules/test_seasonal.R index bf784c1f..1f3b8b9b 100644 --- a/modules/test_seasonal.R +++ b/modules/test_seasonal.R @@ -14,15 +14,15 @@ data <- load_datasets(recipe) # Downscale datasets data <- downscale_datasets(recipe, data) # Calibrate datasets -# data <- calibrate_datasets(recipe, data) +data <- calibrate_datasets(recipe, data) # Compute anomalies -# calibrated_data <- compute_anomalies(recipe, calibrated_data) +# data <- compute_anomalies(recipe, data) # Compute skill metrics -skill_metrics <- compute_skill_metrics(recipe, calibrated_data) +skill_metrics <- compute_skill_metrics(recipe, data) # Compute percentiles and probability bins -probabilities <- compute_probabilities(recipe, calibrated_data) +# probabilities <- compute_probabilities(recipe, data) # Export all data to netCDF -save_data(recipe, calibrated_data, skill_metrics, probabilities) +save_data(recipe, data, skill_metrics, probabilities) # Plot data -plot_data(recipe, calibrated_data, skill_metrics, probabilities, +plot_data(recipe, data, skill_metrics, probabilities, significance = T) -- GitLab From 04d739b89c511541c0447f768cfe2d818b58211d Mon Sep 17 00:00:00 2001 From: vagudets Date: Wed, 8 Mar 2023 11:35:40 +0100 Subject: [PATCH 066/388] Add CERRA and CERRA-Land --- conf/archive.yml | 19 +++++++++++++++++++ conf/variable-dictionary.yml | 15 +++++++++++++++ modules/Loading/Loading.R | 4 ++-- .../testing_recipes/recipe_seasonal-tests.yml | 8 ++++---- 4 files changed, 40 insertions(+), 6 deletions(-) diff --git a/conf/archive.yml b/conf/archive.yml index 1f226a07..eb8e86a5 100644 --- a/conf/archive.yml +++ b/conf/archive.yml @@ -179,5 +179,24 @@ archive: monthly_mean: {"tas":"_f6h/"} calendar: "proleptic_gregorian" reference_grid: "/esarchive/recon/ecmwf/uerra_mescan/daily_mean/tas_f6h/tas_201805.nc" + CERRA: + name: "ECMWF CERRA" + institution: "European Centre for Medium-Range Weather Forecasts" + src: "recon/ecmwf/cerra/" + daily_mean: {"hur":"_f3h-r2631x1113/", "ps":"_f3h-r2631x1113/", "sfcWind":"_f3h-r2631x1113/", + "tas":"_f3h-r2631x1113/", "winddir":"_f3h-r2631x1113/"} + monthly_mean: {"hur":"_f3h-r2631x1113/", "ps":"_f3h-r2631x1113/", "sfcWind":"_f3h-r2631x1113/", + "tas":"_f3h-r2631x1113/", "winddir":"_f3h-r2631x1113/","tasmin":"_f24h-r2631x1113/","tasmax":"_f24h-r2631x1113/"} + calendar: "proleptic_gregorian" + reference_grid: "/esarchive/recon/ecmwf/cerra/monthly_mean/tas_f3h-r2631x1113/tas_200506.nc" + CERRA-Land: + name: "ECMWF CERRA-Land" + institution: "European Centre for Medium-Range Weather Forecasts" + src: "recon/ecmwf/cerraland/" + daily_mean: {"prlr":"_f6h-r2631x1113/"} + monthly_mean: {"prlr":"_f6h-r2631x1113/"} + calendar: "proleptic_gregorian" + reference_grid: "/esarchive/recon/ecmwf/cerraland/monthly_mean/prlr_f6h-r2631x1113/prlr_200412.nc" + diff --git a/conf/variable-dictionary.yml b/conf/variable-dictionary.yml index 18e694ba..917abc64 100644 --- a/conf/variable-dictionary.yml +++ b/conf/variable-dictionary.yml @@ -60,6 +60,11 @@ vars: long_name: "Daily Maximum Near-Surface Wind Speed" standard_name: "wind_speed" accum: no + winddir: + units: "degrees" + long_name: "10 metre wind direction" + standard_name: + accum: no # outname: "wind" rsds: units: "W m-2" @@ -89,6 +94,11 @@ vars: long_name: "Geopotential" standard_name: "geopotential" accum: no + ps: + units: "Pa" + long_name: "Surface pressure" + standard_name: "surface_air_pressure" + accum: no pr: units: "kg m-2 s-1" long_name: "Precipitation" @@ -109,6 +119,11 @@ vars: long_name: "Total Cloud Cover Percentage" standard_name: "cloud_area_fraction" accum: no + hur: + units: "%" + long_name: "2 metre relative humidity" + standard_name: "relative_humidity" + accum: no hurs: units: "%" long_name: "Near-Surface Relative Humidity" diff --git a/modules/Loading/Loading.R b/modules/Loading/Loading.R index 598ddd0e..e5dafd0d 100644 --- a/modules/Loading/Loading.R +++ b/modules/Loading/Loading.R @@ -234,8 +234,8 @@ load_datasets <- function(recipe) { transform_params = list(grid = regrid_params$obs.gridtype, method = regrid_params$obs.gridmethod), transform_vars = c('latitude', 'longitude'), - synonims = list(latitude = c('lat','latitude'), - longitude = c('lon','longitude')), + synonims = list(latitude = c('lat', 'y', 'latitude'), + longitude = c('lon', 'x', 'longitude')), return_vars = list(latitude = 'dat', longitude = 'dat', time = 'file_date'), diff --git a/modules/Loading/testing_recipes/recipe_seasonal-tests.yml b/modules/Loading/testing_recipes/recipe_seasonal-tests.yml index cda98c91..b4e05fc4 100644 --- a/modules/Loading/testing_recipes/recipe_seasonal-tests.yml +++ b/modules/Loading/testing_recipes/recipe_seasonal-tests.yml @@ -11,12 +11,12 @@ Analysis: name: ECMWF-SEAS5.1 Multimodel: False Reference: - name: ERA5 + name: CERRA Time: sdate: '0101' fcst_year: hcst_start: '2000' - hcst_end: '2015' + hcst_end: '2005' ftime_min: 1 ftime_max: 2 Region: @@ -25,8 +25,8 @@ Analysis: lonmin: -10 lonmax: 30 Regrid: - method: bilinear - type: to_system + method: + type: none Workflow: Calibration: method: raw -- GitLab From 58de1d9b91617cf12ac8238d718400dce3bb752a Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Wed, 8 Mar 2023 12:30:31 +0100 Subject: [PATCH 067/388] Fix typo in Saving module error message --- modules/Saving/Saving.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/Saving/Saving.R b/modules/Saving/Saving.R index 28b5e552..f481be70 100644 --- a/modules/Saving/Saving.R +++ b/modules/Saving/Saving.R @@ -21,7 +21,7 @@ save_data <- function(recipe, data, } if (is.null(data)) { - error(recupe$Run$logger, + error(recipe$Run$logger, paste("The 'data' parameter is mandatory. It should be a list", "of at least two s2dv_cubes containing the hcst and obs.")) stop() -- GitLab From 3a788ac65c3d2dca10e6a9356f95e8084b4583b7 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Wed, 8 Mar 2023 16:12:15 +0100 Subject: [PATCH 068/388] Move checks from Downscaling.R to recipe checker --- modules/Downscaling/Downscaling.R | 97 +---------------------------- tools/check_recipe.R | 100 +++++++++++++++++++++++++++++- 2 files changed, 102 insertions(+), 95 deletions(-) diff --git a/modules/Downscaling/Downscaling.R b/modules/Downscaling/Downscaling.R index f2a51b48..d8522b65 100644 --- a/modules/Downscaling/Downscaling.R +++ b/modules/Downscaling/Downscaling.R @@ -64,25 +64,8 @@ downscale_datasets <- function(recipe, data) { LR_METHODS <- c("basic", "large_scale", "4nn") LOGREG_METHODS <- c("ens_mean", "ens_mean_sd", "sorted_members") - if (!(type %in% DOWNSCAL_TYPES)) { - error(recipe$Run$logger, - paste("Downscaling type in the recipe is not available.", - "Accepted entries are:", DOWNSCAL_TYPES)) - } # Interpolation if (type == "int") { - # Check method - if (length(int_method) == 0) { - error(recipe$Run$logger, - paste("Downscaling type 'int' was requested, but no", - "interpolation method is provided in the recipe.")) - } - # Check target grid - if (is.null(target_grid)) { - error(recipe$Run$logger, - paste("Downscaling type 'int' was requested, but no", - "target grid is provided in the recipe.")) - } ## TODO: Move this check elsewhere # Ensure that observations are in the same grid as experiments # Only needed for this method because the others already return the @@ -112,31 +95,7 @@ downscale_datasets <- function(recipe, data) { hcst_downscal$obs <- obs_downscal$exp } else if (type == "intbc") { - if (length(int_method) == 0) { - error(recipe$Run$logger, - paste("Downscaling type 'intbc' was requested in the recipe, but", - "no interpolation method is provided.")) - stop() - } - if (length(bc_method) == 0) { - error(recipe$Run$logger, - paste("Downscaling type 'intbc' was requested in the recipe, but", - "no bias correction method is provided.")) - stop() ## "methods are 'simple_bias', 'calibration', 'quantile_mapping'.") - } - if (length(target_grid) == 0) { - error(recipe$Run$logger, - paste("Downscaling type 'intbc' was requested in the recipe, but", - "no target grid is provided.")) - stop() - } - if (!(bc_method %in% BC_METHODS)) { - error(recipe$Run$logger, - paste0(bc_method, " method in the recipe is not available.", - "The available methods are:", BC_METHODS)) - stop() - } - # Interpolate hcst and obs with bias correction + # Interpolate hcst and obs with bias correction hcst_downscal <- CST_Intbc(data$hcst, data$obs, target_grid = target_grid, bc_method = bc_method, @@ -150,30 +109,6 @@ downscale_datasets <- function(recipe, data) { region = NULL, ncores = ncores) } else if (type == "intlr") { - ## TODO: Logger - if (length(int_method) == 0) { - error(recipe$Run$logger, - paste("Downscaling type 'intlr' was requested in the recipe, but", - "no interpolation method is provided.")) - stop() - } - if (length(lr_method) == 0) { - error(recipe$Run$logger, - paste("Downscaling type 'intlr' was requested in the recipe, but", - "no linear regression method is provided.")) - stop() - } - if (length(target_grid) == 0) { - error(recipe$Run$logger, - paste("Downscaling type 'intlr' was requested in the recipe, but", - "no target grid is provided.")) - stop() - } - if (!(lr_method %in% LR_METHODS)) { - error(recipe$Run$logger, - paste0("The accepted linear regression methods are:", LR_METHODS)) - stop() - } ## TODO: add the possibility to have the element 'pred' in 'data' if (lr_method == "large_scale") { if (is.null(data$pred$data)) { @@ -201,7 +136,7 @@ downscale_datasets <- function(recipe, data) { ncores = ncores) } else if (type == "analogs") { if (length(nanalogs) == 0) { - warn(recipe$Run$logger, + info(recipe$Run$logger, paste("The number of analogs for searching has not been provided", "in the recipe. Setting it to 3.")) nanalogs <- 3 @@ -221,41 +156,15 @@ downscale_datasets <- function(recipe, data) { loocv_window = loocv, ncores = ncores) } else if (type == "logreg") { - if (length(int_method) == 0) { - error(recipe$Run$logger, - paste("Downscaling type 'logreg' was requested in the recipe, but", - "no interpolation method is provided.")) - stop() - } - if (length(logreg_method) == 0) { - error(recipe$Run$logger, - paste("Downscaling type 'logreg' was requested in the recipe, but", - "no logistic regression method is provided. The accepted", - "methods are:", LOG_REG_METHODS)) - stop() - } - if (length(target_grid) == 0) { - error(recipe$Run$logger, - paste("Downscaling type 'logreg' was requested in the recipe, but", - "no target grid is provided.")) - stop() - } - ## Keep this check here # Since we are forcing to create three categories, and applying cross-validation, # we need at least six years of data for the logistic regression function to not # crash if (dim(data$hcst$data)[["syear"]] < 6) { error(recipe$Run$logger, - paste("The number of start dates is insufficient for the", + paste("The number of years of data is insufficient for the", "logistic regression method. Please provide six or more.")) stop() } - if (!(logreg_method %in% LOGREG_METHODS)) { - error(recipe$Run$logger, - paste("The accepted methos for logistic regression are:", - LOGREG_METHODS)) - stop() - } # Apply logistic regression to hcst and obs hcst_downscal <- CST_LogisticReg(data$hcst, data$obs, target_grid = target_grid, diff --git a/tools/check_recipe.R b/tools/check_recipe.R index 964c4446..617bd169 100644 --- a/tools/check_recipe.R +++ b/tools/check_recipe.R @@ -222,7 +222,9 @@ check_recipe <- function(recipe) { # WORKFLOW CHECKS # --------------------------------------------------------------------- - # Only one Calibration method allowed: + # Calibration + # If 'method' is FALSE/no/'none' or NULL, set to 'raw' + ## TODO: Review this check if ((is.logical(recipe$Analysis$Workflow$Calibration$method) && recipe$Analysis$Workflow$Calibration$method == FALSE) || tolower(recipe$Analysis$Workflow$Calibration$method) == 'none' || @@ -257,6 +259,102 @@ check_recipe <- function(recipe) { error_status <- T } } + # Downscaling + ## TODO: Simplify checks (reduce number of lines) + downscal_params <- lapply(recipe$Analysis$Workflow$Downscaling, tolower) + # Define accepted entries + DOWNSCAL_TYPES <- c("none", "int", "intbc", "intlr", "analogs", "logreg") + BC_METHODS <- c("simple_bias", "calibration", "quantile_mapping") + LR_METHODS <- c("basic", "large_scale", "4nn") + LOGREG_METHODS <- c("ens_mean", "ens_mean_sd", "sorted_members") + # Check downscaling type + ## TODO: Consider 'NULL' case + if (!((downscal_params$type) %in% DOWNSCAL_TYPES)) { + error(recipe$Run$logger, + paste0("The type of Downscaling request in the recipe is not ", + "available. It must be one of the following: ", + paste(DOWNSCAL_TYPES, collapse = ", "), ".")) + error_status <- T + } + if ((downscal_params$type %in% c("int", "intbc", "intlr", "logreg")) && + (is.null(downscal_params$target_grid))) { + error(recipe$Run$logger, + paste("A target grid is required for the downscaling method", + "requested in the recipe.")) + error_status <- T + } + if (downscal_params$type == "int") { + if (is.null(downscal_params$int_method)) { + error(recipe$Run$logger, + paste("Downscaling type 'int' was requested, but no", + "interpolation method is provided in the recipe.")) + error_status <- T + } + } else if (downscal_params$type == "intbc") { + if (is.null(downscal_params$int_method)) { + error(recipe$Run$logger, + paste("Downscaling type 'int' was requested in the recipe, but no", + "interpolation method is provided.")) + error_status <- T + } + if (is.null(downscal_params$bc_method)) { + error(recipe$Run$logger, + paste0("Downscaling type 'intbc' was requested in the recipe, but", + "no bias correction method is provided.")) + error_status <- T + } else if (!(downscal_params$bc_method %in% BC_METHODS)) { + error(recipe$Run$logger, + paste0("The accepted Bias Correction methods for the downscaling", + "module are: ", paste(BC_METHODS, collapse = ", "), ".")) + error_status <- T + } + } else if (downscal_params$type == "intlr") { + if (is.null(downscal_params$int_method)) { + error(recipe$Run$logger, + paste("Downscaling type 'intlr' was requested in the recipe, but", + "no interpolation method was provided.")) + error_status <- T + } + if (is.null(downscal_params$lr_method)) { + error(recipe$Run$logger, + paste0("Downscaling type 'intlr' was requested in the recipe, but", + "no linear regression method was provided.")) + error_status <- T + } else if (!(downscal_params$lr_method %in% LR_METHODS)) { + error(recipe$Run$logger, + paste0("The accepted linear regression methods for the", + "downscaling module are: ", + paste(LR_METHODS, collapse = ", "), ".")) + error_status <- T + } + } else if (downscal_params$type == "analogs") { + if (length(nanalogs) == 0) { + warn(recipe$Run$logger, + paste("Downscaling type is 'analogs, but the number of analogs", + "has not been provided in the recipe.")) + } + } else if (downscal_params$type == "logreg") { + if (is.null(downscal_params$int_method)) { + error(recipe$Run$logger, + paste("Downscaling type 'logreg' was requested in the recipe, but", + "no interpolation method was provided.")) + error_status <- T + } + if (is.null(downscal_params$log_reg_method)) { + error(recipe$Run$logger, + paste0("Downscaling type 'logreg' was requested in the recipe, but", + "no logistic regression method is provided. The accepted", + "methods are:", + paste(LOG_REG_METHODS, collapse = ", "), ".")) + error_status <- T + } else if (!(downscal_params$log_reg_method %in% LOGREG_METHODS)) { + error(recipe$Run$logger, + paste0("The accepted logistic regression methods for the ", + "downscaling module are: ", + paste(LOGREG_METHODS, collapse = ", "), ".")) + error_status <- T + } + } # Skill if (("Skill" %in% names(recipe$Analysis$Workflow)) && (is.null(recipe$Analysis$Workflow$Skill$metric))) { -- GitLab From bdbe693e7dbd9f6f90288caaac8ddda0b9087971 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Thu, 9 Mar 2023 11:50:22 +0100 Subject: [PATCH 069/388] Refine downscaling checks --- tools/check_recipe.R | 166 ++++++++++++++++++++++--------------------- 1 file changed, 85 insertions(+), 81 deletions(-) diff --git a/tools/check_recipe.R b/tools/check_recipe.R index 617bd169..b2c62e44 100644 --- a/tools/check_recipe.R +++ b/tools/check_recipe.R @@ -1,8 +1,6 @@ check_recipe <- function(recipe) { - # recipe: yaml recipe already read it - ## TODO: Adapt to decadal case - + ## TODO: set up logger-less case info(recipe$Run$logger, paste("Checking recipe:", recipe$recipe_path)) # --------------------------------------------------------------------- @@ -268,92 +266,97 @@ check_recipe <- function(recipe) { LR_METHODS <- c("basic", "large_scale", "4nn") LOGREG_METHODS <- c("ens_mean", "ens_mean_sd", "sorted_members") # Check downscaling type - ## TODO: Consider 'NULL' case - if (!((downscal_params$type) %in% DOWNSCAL_TYPES)) { - error(recipe$Run$logger, - paste0("The type of Downscaling request in the recipe is not ", - "available. It must be one of the following: ", - paste(DOWNSCAL_TYPES, collapse = ", "), ".")) - error_status <- T - } - if ((downscal_params$type %in% c("int", "intbc", "intlr", "logreg")) && - (is.null(downscal_params$target_grid))) { - error(recipe$Run$logger, - paste("A target grid is required for the downscaling method", - "requested in the recipe.")) - error_status <- T - } - if (downscal_params$type == "int") { - if (is.null(downscal_params$int_method)) { - error(recipe$Run$logger, - paste("Downscaling type 'int' was requested, but no", - "interpolation method is provided in the recipe.")) - error_status <- T - } - } else if (downscal_params$type == "intbc") { - if (is.null(downscal_params$int_method)) { - error(recipe$Run$logger, - paste("Downscaling type 'int' was requested in the recipe, but no", - "interpolation method is provided.")) - error_status <- T - } - if (is.null(downscal_params$bc_method)) { - error(recipe$Run$logger, - paste0("Downscaling type 'intbc' was requested in the recipe, but", - "no bias correction method is provided.")) - error_status <- T - } else if (!(downscal_params$bc_method %in% BC_METHODS)) { - error(recipe$Run$logger, - paste0("The accepted Bias Correction methods for the downscaling", - "module are: ", paste(BC_METHODS, collapse = ", "), ".")) - error_status <- T - } - } else if (downscal_params$type == "intlr") { - if (is.null(downscal_params$int_method)) { - error(recipe$Run$logger, - paste("Downscaling type 'intlr' was requested in the recipe, but", - "no interpolation method was provided.")) - error_status <- T - } - if (is.null(downscal_params$lr_method)) { - error(recipe$Run$logger, - paste0("Downscaling type 'intlr' was requested in the recipe, but", - "no linear regression method was provided.")) - error_status <- T - } else if (!(downscal_params$lr_method %in% LR_METHODS)) { - error(recipe$Run$logger, - paste0("The accepted linear regression methods for the", - "downscaling module are: ", - paste(LR_METHODS, collapse = ", "), ".")) - error_status <- T - } - } else if (downscal_params$type == "analogs") { - if (length(nanalogs) == 0) { + if ("type" %in% names(downscal_params)) { + if (length(downscal_params$type) == 0) { + downscal_params$type <- "none" warn(recipe$Run$logger, - paste("Downscaling type is 'analogs, but the number of analogs", - "has not been provided in the recipe.")) + paste("Downscaling 'type' is empty in the recipe, setting it to", + "'none'.")) } - } else if (downscal_params$type == "logreg") { - if (is.null(downscal_params$int_method)) { + if (!(downscal_params$type %in% DOWNSCAL_TYPES)) { error(recipe$Run$logger, - paste("Downscaling type 'logreg' was requested in the recipe, but", - "no interpolation method was provided.")) + paste0("The type of Downscaling request in the recipe is not ", + "available. It must be one of the following: ", + paste(DOWNSCAL_TYPES, collapse = ", "), ".")) error_status <- T } - if (is.null(downscal_params$log_reg_method)) { + if ((downscal_params$type %in% c("int", "intbc", "intlr", "logreg")) && + (length(downscal_params$target_grid) == 0)) { error(recipe$Run$logger, - paste0("Downscaling type 'logreg' was requested in the recipe, but", - "no logistic regression method is provided. The accepted", - "methods are:", - paste(LOG_REG_METHODS, collapse = ", "), ".")) - error_status <- T - } else if (!(downscal_params$log_reg_method %in% LOGREG_METHODS)) { - error(recipe$Run$logger, - paste0("The accepted logistic regression methods for the ", - "downscaling module are: ", - paste(LOGREG_METHODS, collapse = ", "), ".")) + paste("A target grid is required for the downscaling method", + "requested in the recipe.")) error_status <- T } + if (downscal_params$type == "int") { + if (length(downscal_params$int_method) == 0) { + error(recipe$Run$logger, + paste("Downscaling type 'int' was requested, but no", + "interpolation method is provided in the recipe.")) + error_status <- T + } + } else if (downscal_params$type == "intbc") { + if (length(downscal_params$int_method) == 0) { + error(recipe$Run$logger, + paste("Downscaling type 'int' was requested in the recipe, but no", + "interpolation method is provided.")) + error_status <- T + } + if (length(downscal_params$bc_method)== 0) { + error(recipe$Run$logger, + paste("Downscaling type 'intbc' was requested in the recipe, but", + "no bias correction method is provided.")) + error_status <- T + } else if (!(downscal_params$bc_method %in% BC_METHODS)) { + error(recipe$Run$logger, + paste0("The accepted Bias Correction methods for the downscaling", + " module are: ", paste(BC_METHODS, collapse = ", "), ".")) + error_status <- T + } + } else if (downscal_params$type == "intlr") { + if (length(downscal_params$int_method) == 0) { + error(recipe$Run$logger, + paste("Downscaling type 'intlr' was requested in the recipe, but", + "no interpolation method was provided.")) + error_status <- T + } + if (length(downscal_params$lr_method) == 0) { + error(recipe$Run$logger, + paste("Downscaling type 'intlr' was requested in the recipe, but", + "no linear regression method was provided.")) + error_status <- T + } else if (!(downscal_params$lr_method %in% LR_METHODS)) { + error(recipe$Run$logger, + paste0("The accepted linear regression methods for the", + " downscaling module are: ", + paste(LR_METHODS, collapse = ", "), ".")) + error_status <- T + } + } else if (downscal_params$type == "analogs") { + if (length(nanalogs) == 0) { + warn(recipe$Run$logger, + paste("Downscaling type is 'analogs, but the number of analogs", + "has not been provided in the recipe.")) + } + } else if (downscal_params$type == "logreg") { + if (length(downscal_params$int_method) == 0) { + error(recipe$Run$logger, + paste("Downscaling type 'logreg' was requested in the recipe, but", + "no interpolation method was provided.")) + error_status <- T + } + if (length(downscal_params$log_reg_method) == 0) { + error(recipe$Run$logger, + paste("Downscaling type 'logreg' was requested in the recipe,", + "but no logistic regression method is provided.")) + error_status <- T + } else if (!(downscal_params$log_reg_method %in% LOGREG_METHODS)) { + error(recipe$Run$logger, + paste0("The accepted logistic regression methods for the ", + "downscaling module are: ", + paste(LOGREG_METHODS, collapse = ", "), ".")) + error_status <- T + } + } } # Skill if (("Skill" %in% names(recipe$Analysis$Workflow)) && @@ -380,6 +383,7 @@ check_recipe <- function(recipe) { # RUN CHECKS # --------------------------------------------------------------------- + ## TODO: These checks should probably go first RUN_FIELDS = c("Loglevel", "Terminal", "output_dir", "code_dir") LOG_LEVELS = c("INFO", "DEBUG", "WARN", "ERROR", "FATAL") -- GitLab From e2a8a33bf99c67901e6e16bd982c02f70fd48f48 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Thu, 9 Mar 2023 13:27:47 +0100 Subject: [PATCH 070/388] Add CSDownscale functions --- modules/Downscaling/tmp/Analogs.R | 537 +++++++++++++++++ modules/Downscaling/tmp/Intbc.R | 325 +++++++++++ modules/Downscaling/tmp/Interpolation.R | 739 ++++++++++++++++++++++++ modules/Downscaling/tmp/Intlr.R | 525 +++++++++++++++++ modules/Downscaling/tmp/LogisticReg.R | 497 ++++++++++++++++ modules/Downscaling/tmp/Utils.R | 31 + 6 files changed, 2654 insertions(+) create mode 100644 modules/Downscaling/tmp/Analogs.R create mode 100644 modules/Downscaling/tmp/Intbc.R create mode 100644 modules/Downscaling/tmp/Interpolation.R create mode 100644 modules/Downscaling/tmp/Intlr.R create mode 100644 modules/Downscaling/tmp/LogisticReg.R create mode 100644 modules/Downscaling/tmp/Utils.R diff --git a/modules/Downscaling/tmp/Analogs.R b/modules/Downscaling/tmp/Analogs.R new file mode 100644 index 00000000..fd6e2f97 --- /dev/null +++ b/modules/Downscaling/tmp/Analogs.R @@ -0,0 +1,537 @@ +#'@rdname CST_Analogs +#'@title Downscaling using Analogs based on large scale fields. +#' +#'@author J. Ramon, \email{jaume.ramon@bsc.es} +#' +#'@description This function performs a downscaling using Analogs. To compute +#'the analogs given a coarse-scale field, the function looks for days with +#'similar conditions in the historical observations. The coarse scale and +#'observation data can be either global or regional. In the latter case, the +#'region is defined by the user. In principle, the coarse and observation data +#'should be of the same variable, although different variables can also be admitted. +#'The analogs function will find the N best analogs based in Minimum Euclidean +#'distance. +#' +#'The search of analogs must be done in the longest dataset posible, but might +#'require high-memory computational resources. This is important since it is +#'necessary to have a good representation of the possible states of the field in +#'the past, and therefore, to get better analogs. The function can also look for +#'analogs within a window of D days, but is the user who has to define that window. +#'Otherwise, the function will look for analogs in the whole dataset. This function +#'is intended to downscale climate prediction data (i.e., sub-seasonal, seasonal +#'and decadal predictions) but can admit climate projections or reanalyses. It does +#'not have constrains of specific region or variables to downscale. +#'@param exp an 's2dv' object with named dimensions containing the experimental field on +#'the coarse scale for which the downscaling is aimed. The object must have, at least, +#'the dimensions latitude, longitude, start date and time. The object is expected to be +#'already subset for the desired region. Data can be in one or two integrated regions, e.g., +#'crossing the Greenwich meridian. To get the correct results in the latter case, +#'the borders of the region should be specified in the parameter 'region'. See parameter +#''region'. +#'@param obs an 's2dv' object with named dimensions containing the observational field. +#'The object must have, at least, the dimensions latitude, longitude and start date. +#'The object is expected to be already subset for the desired region. +#'@param obs2 an 's2dv' object with named dimensions containing a different observational +#'field to that in 'obs'. If provided, these observations will be used in the training, +#'i.e. the searching for analogs, so that they should be in a coarser grid to those in +#''obs'. Training with observations on a grid with a spatial resolution closer to that +#'in 'exp', will in principle ensure better results. The object must have, at least, the +#'dimensions latitude, longitude and start date. The object is expected to be already +#'subset for the desired region. +#'@param grid_exp a character vector with a path to an example file of the exp data. +#'It can be either a path to another NetCDF file which to read the target grid from +#'(a single grid must be defined in such file) or a character vector indicating the +#'coarse grid to be passed to CDO, and it must be a grid recognised by CDO. +#'@param nanalogs an integer indicating the number of analogs to be searched +#'@param fun_analog a function to be applied over the found analogs. Only these options +#'are valid: "mean", "wmean", "max", "min", "median" or NULL. If set to NULL (default), +#'the function returns the found analogs. +#'@param lat_dim a character vector indicating the latitude dimension name in the element +#''data' in exp and obs. Default set to "lat". +#'@param lon_dim a character vector indicating the longitude dimension name in the element +#''data' in exp and obs. Default set to "lon". +#'@param sdate_dim a character vector indicating the start date dimension name in the +#'element 'data' in exp and obs. Default set to "sdate". +#'@param time_dim a character vector indicating the time dimension name in the element +#''data' in exp and obs. Default set to "time". +#'@param member_dim a character vector indicating the member dimension name in the element +#''data' in exp and obs. Default set to "member". +#'@param region a numeric vector indicating the borders of the region defined in exp. +#'It consists of four elements in this order: lonmin, lonmax, latmin, latmax. lonmin refers +#'to the left border, while lonmax refers to the right border. latmin indicates the lower +#'border, whereas latmax indicates the upper border. If set to NULL (default), the function +#'takes the first and last elements of the latitudes and longitudes. +#'@param return_indices a logical vector indicating whether to return the indices of the +#'analogs together with the downscaled fields. Default to FALSE. +#'@param loocv_window a logical vector only to be used if 'obs' does not have the dimension +#''window'. It indicates whether to apply leave-one-out cross-validation in the creation +#'of the window. It is recommended to be set to TRUE. Default to TRUE. +#'@param ncores an integer indicating the number of cores to use in parallel computation. +#' +#'@return An 's2dv' object. The element 'data' contains the dowscaled field, 'lat' the +#'downscaled latitudes, and 'lon' the downscaled longitudes. If fun_analog is set to NULL +#'(default), the output array in 'data' also contains the dimension 'analog' with the best +#'analog days. +#'@examples +#'exp <- rnorm(15000) +#'dim(exp) <- c(member = 5, lat = 4, lon = 5, sdate = 5, time = 30) +#'exp_lons <- 1:5 +#'exp_lats <- 1:4 +#'obs <- rnorm(27000) +#'dim(obs) <- c(lat = 12, lon = 15, sdate = 5, time = 30) +#'obs_lons <- seq(0,6, 6/14) +#'obs_lats <- seq(0,6, 6/11) +#'exp <- s2dv_cube(data = exp, lat = exp_lats, lon = exp_lons) +#'obs <- s2dv_cube(data = obs, lat = obs_lats, lon = obs_lons) +#'downscaled_field <- CST_Analogs(exp = exp, obs = obs, grid_exp = 'r360x180') +#'@export +CST_Analogs <- function(exp, obs, grid_exp, obs2 = NULL, nanalogs = 3, fun_analog = NULL, lat_dim = "lat", + lon_dim = "lon", sdate_dim = "sdate", time_dim = "time", member_dim = "member", + region = NULL, return_indices = FALSE, loocv_window = TRUE, ncores = 1) { + + # input exp and obs must be s2dv_cube objects + if (!inherits(exp,'s2dv_cube')) { + stop("Parameter 'exp' must be of the class 's2dv_cube'") + } + + # input exp and obs must be s2dv_cube objects + if (!inherits(obs,'s2dv_cube')) { + stop("Parameter 'obs' must be of the class 's2dv_cube'") + } + + res <- Analogs(exp = exp$data, obs = obs$data, exp_lats = exp$lat, exp_lons = exp$lon, + obs_lats = obs$lat, obs_lons = obs$lon, grid_exp = grid_exp, + nanalogs = nanalogs, fun_analog = fun_analog, lat_dim = lat_dim, lon_dim = lon_dim, + sdate_dim = sdate_dim, time_dim = time_dim, member_dim = member_dim, + region = region, return_indices = return_indices, loocv_window = loocv_window, + ncores = ncores) + + # Modify data, lat and lon in the origina s2dv_cube, adding the downscaled data + exp$data <- res$data + exp$lon <- res$lon + exp$lat <- res$lat + + obs$data <- res$obs + obs$lat <- res$lat + obs$lon <- res$lon + + res_s2dv <- list(exp = exp, obs = obs) + return(res_s2dv) +} + +#'@rdname Analogs +#'@title Downscaling using Analogs based on large scale fields. +#' +#'@author J. Ramon, \email{jaume.ramon@bsc.es} +#'@author Ll. Lledó, \email{llorenc.lledo@ecmwf.int} +#' +#'@description This function performs a downscaling using Analogs. To compute +#'the analogs given a coarse-scale field, the function looks for days with +#'similar conditions in the historical observations. The coarse scale and +#'observation data can be either global or regional. In the latter case, the +#'region is defined by the user. In principle, the coarse and observation data +#'should be of the same variable, although different variables can also be admitted. +#'The analogs function will find the N best analogs based in Minimum Euclidean +#'distance. +#' +#'The search of analogs must be done in the longest dataset posible, but might +#'require high-memory computational resources. This is important since it is +#'necessary to have a good representation of the possible states of the field in +#'the past, and therefore, to get better analogs. The function can also look for +#'analogs within a window of D days, but is the user who has to define that window. +#'Otherwise, the function will look for analogs in the whole dataset. This function +#'is intended to downscale climate prediction data (i.e., sub-seasonal, seasonal +#'and decadal predictions) but can admit climate projections or reanalyses. It does +#'not have constrains of specific region or variables to downscale. +#'@param exp an array with named dimensions containing the experimental field on the +#'coarse scale for which the downscaling is aimed. The object must have, at least, +#'the dimensions latitude, longitude, start date and time. The object is expected to be +#'already subset for the desired region. Data can be in one or two integrated regions, e.g., +#'crossing the Greenwich meridian. To get the correct results in the latter case, +#'the borders of the region should be specified in the parameter 'region'. See parameter +#''region'. +#'@param obs an array with named dimensions containing the observational field. The object +#'must have, at least, the dimensions latitude, longitude, start date and time. The object +#'is expected to be already subset for the desired region. Optionally, 'obs' can have the +#'dimension 'window', containing the sampled fields into which the function will look for +#'the analogs. See function 'generate_window()'. Otherwise, the function will look for +#'analogs using all the possible fields contained in obs. +#'@param exp_lats a numeric vector containing the latitude values in 'exp'. Latitudes must +#'range from -90 to 90. +#'@param exp_lons a numeric vector containing the longitude values in 'exp'. Longitudes +#'can range from -180 to 180 or from 0 to 360. +#'@param obs_lats a numeric vector containing the latitude values in 'obs'. Latitudes must +#'range from -90 to 90. +#'@param obs_lons a numeric vector containing the longitude values in 'obs'. Longitudes +#'can range from -180 to 180 or from 0 to 360. +#'@param grid_exp a character vector with a path to an example file of the exp data. +#'It can be either a path to another NetCDF file which to read the target grid from +#'(a single grid must be defined in such file) or a character vector indicating the +#'coarse grid to be passed to CDO, and it must be a grid recognised by CDO. +#'@param obs2 an 's2dv' object with named dimensions containing a different observational +#'field to that in 'obs'. If provided, these observations will be used in the training, +#'i.e. the searching for analogs, so that they should be in a coarser grid to those in +#''obs'. Training with observations on a grid with a spatial resolution closer to that +#'in 'exp', will in principle ensure better results. The object must have, at least, the +#'dimensions latitude, longitude and start date. The object is expected to be already +#'subset for the desired region. +#'@param nanalogs an integer indicating the number of analogs to be searched. +#'@param fun_analog a function to be applied over the found analogs. Only these options +#'are valid: "mean", "wmean", "max", "min", "median" or NULL. If set to NULL (default), +#'the function returns the found analogs. +#'@param lat_dim a character vector indicating the latitude dimension name in the element +#''data' in exp and obs. Default set to "lat". +#'@param lon_dim a character vector indicating the longitude dimension name in the element +#''data' in exp and obs. Default set to "lon". +#'@param sdate_dim a character vector indicating the start date dimension name in the +#'element 'data' in exp and obs. Default set to "sdate". +#'@param time_dim a character vector indicating the time dimension name in the element +#''data' in exp and obs. Default set to "time". +#'@param member_dim a character vector indicating the member dimension name in the element +#''data' in exp and obs. Default set to "member". +#'@param region a numeric vector indicating the borders of the region defined in exp. +#'It consists of four elements in this order: lonmin, lonmax, latmin, latmax. lonmin refers +#'to the left border, while lonmax refers to the right border. latmin indicates the lower +#'border, whereas latmax indicates the upper border. If set to NULL (default), the function +#'takes the first and last elements of the latitudes and longitudes. +#'@param return_indices a logical vector indicating whether to return the indices of the +#'analogs together with the downscaled fields. The indices refer to the position of the +#'element in the vector time * start_date. If 'obs' contain the dimension 'window', it will +#'refer to the position of the element in the dimension 'window'. Default to FALSE. +#'@param loocv_window a logical vector only to be used if 'obs' does not have the dimension +#''window'. It indicates whether to apply leave-one-out cross-validation in the creation +#'of the window. It is recommended to be set to TRUE. Default to TRUE. +#'@param ncores an integer indicating the number of cores to use in parallel computation. +#'@import multiApply +#'@import CSTools +#'@importFrom s2dv InsertDim CDORemap +#'@importFrom FNN get.knnx +#' +#'@seealso \code{\link[s2dverification]{CDORemap}} +#' +#'@return A list of three elements. 'data' contains the dowscaled field, 'lat' the +#'downscaled latitudes, and 'lon' the downscaled longitudes. If fun_analog is set to NULL +#'(default), the output array in 'data' also contains the dimension 'analog' with the best +#'analog days. +#'@examples +#'exp <- rnorm(15000) +#'dim(exp) <- c(member = 5, lat = 4, lon = 5, sdate = 5, time = 30) +#'exp_lons <- 1:5 +#'exp_lats <- 1:4 +#'obs <- rnorm(27000) +#'dim(obs) <- c(lat = 12, lon = 15, sdate = 5, time = 30) +#'obs_lons <- seq(0,6, 6/14) +#'obs_lats <- seq(0,6, 6/11) +#'downscaled_field <- Analogs(exp = exp, obs = obs, exp_lats = exp_lats, exp_lons = exp_lons, +#'obs_lats = obs_lats, obs_lons = obs_lons, grid_exp = 'r360x180') +#'@export +Analogs <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, grid_exp, obs2 = NULL, + obs2_lats = NULL, obs2_lons = NULL, nanalogs = 3, fun_analog = NULL, + lat_dim = "lat", lon_dim = "lon", sdate_dim = "sdate", time_dim = "time", + member_dim = "member", region = NULL, return_indices = FALSE, + loocv_window = TRUE, ncores = 1) { + #----------------------------------- + # Checkings + #----------------------------------- + if (!inherits(grid_exp, 'character')) { + stop("Parameter 'grid_exp' must be of class 'character'. It can be either a path ", + "to another NetCDF file which to read the target grid from (a single grid must be ", + "defined in such file) or a character vector indicating the coarse grid to ", + "be passed to CDO, and it must be a grid recognised by CDO or a NetCDF file.") + } + + if (!inherits(nanalogs, 'numeric')) { + stop("Parameter 'nanalogs' must be of the class 'numeric'") + } + + if (!inherits(lat_dim, 'character')) { + stop("Parameter 'lat_dim' must be of the class 'character'") + } + + if (!inherits(lon_dim, 'character')) { + stop("Parameter 'lon_dim' must be of the class 'character'") + } + + if (!inherits(sdate_dim, 'character')) { + stop("Parameter 'sdate_dim' must be of the class 'character'") + } + + if (!inherits(time_dim, 'character')) { + stop("Parameter 'time_dim' must be of the class 'character'") + } + + # Do not allow synonims for lat (latitude), lon (longitude) and time (sdate) dimension names + if (is.na(match(lon_dim, names(dim(exp)))) | is.na(match(lon_dim, names(dim(obs))))) { + stop("Missing longitude dimension in 'exp' and/or 'obs', or does not match the parameter ", + "'lon_dim'") + } + + if (is.na(match(lat_dim, names(dim(exp)))) | is.na(match(lat_dim, names(dim(obs))))) { + stop("Missing latitude dimension in 'exp' and/or 'obs', or does not match the parameter ", + "'lat_dim'") + } + + if (is.na(match(sdate_dim, names(dim(exp)))) | is.na(match(sdate_dim, names(dim(obs))))) { + stop("Missing start date dimension in 'exp' and/or 'obs', or does not match the parameter ", + "'sdate_dim'") + } + + if (is.na(match(time_dim, names(dim(exp)))) | is.na(match(time_dim, names(dim(obs))))) { + stop("Missing time dimension in 'exp' and/or 'obs', or does not match the parameter ", + "'time_dim'") + } + + # Ensure we have enough data to interpolate from high-res to coarse grid + #if ((obs_lats[1] > exp_lats[1]) | (obs_lats[length(obs_lats)] < exp_lats[length(exp_lats)]) | + # (obs_lons[1] > exp_lons[1]) | (obs_lons[length(obs_lons)] < exp_lons[length(exp_lons)])) { + + # stop("There are not enough data in 'obs'. Please to add more latitudes or ", + # "longitudes.") + #} + + # the code is not yet prepared to handle members in the observations + restore_ens <- FALSE + if (member_dim %in% names(dim(obs))) { + if (identical(as.numeric(dim(obs)[member_dim]), 1)) { + restore_ens <- TRUE + obs <- ClimProjDiags::Subset(x = obs, along = member_dim, indices = 1, drop = 'selected') + } else { + stop("Not implemented for observations with members ('obs' can have 'member_dim', ", + "but it should be of length = 1).") + } + } + + if (!is.null(obs2)) { + # the code is not yet prepared to handle members in the observations + if (member_dim %in% names(dim(obs2))) { + if (identical(as.numeric(dim(obs2)[member_dim]), 1)) { + obs2 <- ClimProjDiags::Subset(x = obs2, along = member_dim, indices = 1, drop = 'selected') + } else { + stop("Not implemented for observations with members ('obs2' can have 'member_dim', ", + "but it should be of length = 1).") + } + } + + if (is.null(obs2_lats) | is.null(obs2_lons)) { + stop("Missing latitudes and/or longitudes for the provided training observations. Please ", + "provide them with the parametres 'obs2_lats' and 'obs2_lons'") + } + + if (is.na(match(lon_dim, names(dim(obs2))))) { + stop("Missing longitude dimension in 'obs2', or does not match the parameter 'lon_dim'") + } + + if (is.na(match(lat_dim, names(dim(obs2))))) { + stop("Missing latitude dimension in 'obs2', or does not match the parameter 'lat_dim'") + } + + if (is.na(match(sdate_dim, names(dim(obs2))))) { + stop("Missing start date dimension in 'obs2', or does not match the parameter 'sdate_dim'") + } + + if (is.na(match(time_dim, names(dim(obs2))))) { + stop("Missing time dimension in 'obs2', or does not match the parameter 'time_dim'") + } + } + + # Select a function to apply to the analogs selected for a given observation + if (!is.null(fun_analog)) { + stopifnot(fun_analog %in% c("mean", "wmean", "max", "min", "median")) + } + + if (!is.null(obs2)) { + obs_train <- obs2 + obs_train_lats <- obs2_lats + obs_train_lons <- obs2_lons + } else { + obs_train <- obs + obs_train_lats <- obs_lats + obs_train_lons <- obs_lons + } + + # Correct indices later if cross-validation + loocv_correction <- FALSE + if ( !("window" %in% names(dim(obs_train))) & loocv_window) { + loocv_correction <- TRUE + } + + #----------------------------------- + # Interpolate high-res observations to the coarse grid + #----------------------------------- + if (is.null(region)) { + warning("The borders of the downscaling region have not been provided. Assuming the four borders of the ", + "downscaling region are defined by the first and last elements of the parametres 'exp_lats' and ", + "'exp_lons'.") + region <- c(exp_lons[1], exp_lons[length(exp_lons)], exp_lats[1], exp_lats[length(exp_lats)]) + } + + obs_interpolated <- Interpolation(exp = obs_train, lats = obs_train_lats, lons = obs_train_lons, + target_grid = grid_exp, lat_dim = lat_dim, lon_dim = lon_dim, + method_remap = "conservative", region = region) + # If after interpolating 'obs' data the coordinates do not match, the exp data is interpolated to + # the same grid to force the matching + if (!.check_coords(lat1 = obs_interpolated$lat, lat2 = exp_lats, lon1 = obs_interpolated$lon, lon2 = exp_lons)) { + exp_interpolated <- Interpolation(exp = exp, lats = exp_lats, lons = exp_lons, target_grid = grid_exp, + lat_dim = lat_dim, lon_dim = lon_dim, method_remap = "conservative", + region = region)$data + } else { + exp_interpolated <- exp + } + + # Create window if user does not have it in the training observations + if ( !("window" %in% names(dim(obs_interpolated$data))) ) { + obs_train_interpolated <- generate_window(obj = obs_interpolated$data, sdate_dim = sdate_dim, + time_dim = time_dim, loocv = loocv_window) + obs_hres <- generate_window(obj = obs, sdate_dim = sdate_dim, time_dim = time_dim, loocv = loocv_window) + } + + #----------------------------------- + # Reshape train and test + #----------------------------------- + res.data <- Apply(list(obs_train_interpolated, exp_interpolated, obs_hres), + target_dims = list(c("window", lat_dim, lon_dim), c(lat_dim, lon_dim), + c("window", lat_dim, lon_dim)), + fun = function(tr, te, ob) .analogs(train = tr, test = te, obs_hres = ob, k = nanalogs, + fun_analog = fun_analog), ncores = ncores)$output1 + + # Return the indices of the best analogs + if (return_indices) { + res.ind <- Apply(list(obs_train_interpolated, exp_interpolated, obs_hres), + target_dims = list(c("window", lat_dim, lon_dim), c(lat_dim, lon_dim), + c("window", lat_dim, lon_dim)), + fun = function(tr, te, ob) .analogs(train = tr, test = te, obs_hres = ob, k = nanalogs, + fun_analog = fun_analog, return_indices = TRUE), ncores = ncores, output_dims = 'ind')$output1 + + # If cross-validation has been applied, correct the indices + if (loocv_correction) { + nsdates <- dim(res.ind)[names(dim(res.ind)) == sdate_dim] + ntimes <- dim(res.ind)[names(dim(res.ind)) == time_dim] + res.ind <- Apply(res.ind, target_dims = c("ind", sdate_dim), function(x) + sapply(1:nsdates, function(s) seq(ntimes * nsdates)[ - (ntimes * (s - 1) + 1:ntimes)][x[, s]]), + output_dims = c("ind", sdate_dim))$output1 + } + + # restore ensemble dimension in observations if it existed originally + if (restore_ens) { + obs <- s2dv::InsertDim(obs, posdim = 1, lendim = 1, name = member_dim) + } + + res <- list(data = res.data, ind = res.ind, obs = obs, lon = obs_lons, lat = obs_lats) + } + else { + # restore ensemble dimension in observations if it existed originally + if (restore_ens) { + obs <- s2dv::InsertDim(obs, posdim = 1, lendim = 1, name = member_dim) + } + + res <- list(data = res.data, obs = obs, lon = obs_lons, lat = obs_lats) + } + + return(res) +} + +# For each element in test, find the indices of the k nearest neigbhors in train +.analogs <- function(train, test, obs_hres, k, fun_analog, return_indices = FALSE) { + + require(FNN) + + # train and obs_hres dim: 3 dimensions window, lat and lon (in this order) + # test dim: 2 dimensions lat and lon (in this order) + # Number of lats/lons of the high-resolution data + space_dims_hres <- dim(obs_hres)[c(2,3)] + + # Reformat train and test as an array with (time, points) + train <- apply(train, 1, as.vector); names(dim(train))[1] <- "space" + test <- as.vector(test) + obs_hres <- apply(obs_hres, 1, as.vector); names(dim(obs_hres))[1] <- "space" + + # Identify and remove NA's + idx_na_tr <- is.na(train[ , 1]) + idx_na_te <- is.na(test) + idx_na <- idx_na_tr | idx_na_te + tr_wo_na <- t(train[!idx_na , ]) + te_wo_na <- test[!idx_na] + te_wo_na <- InsertDim(data = te_wo_na, posdim = 1, lendim = 1, name = "time") + + knn.ind <- get.knnx(tr_wo_na, te_wo_na, k) + + dist <- knn.ind$nn.dist + idx <- knn.ind$nn.index + + # Either return only the indices or the analogs + if (return_indices) { + res <- as.numeric(idx) + } else { + res <- obs_hres[ , idx] + dim(res) <- c(space_dims_hres, analogs = k) + + if (!is.null(fun_analog)) { + if (fun_analog == "wmean") { + weight <- 1 / dist + res <- apply(res, c(1,2), function(x) weighted.mean(x, weight)) + } else { + res <- apply(res, c(1,2), fun_analog) + } + } + } + + return(res) +} + +# Add the dimension window to an array that contains, at least, the start date and time +# dimensions +# object has at least dimensions sdate and time +generate_window <- function(obj, sdate_dim, time_dim, loocv, size = NULL) { + + rsdates <- 1:dim(obj)[names(dim(obj)) == sdate_dim] + ntimes <- dim(obj)[names(dim(obj)) == time_dim] + rtimes <- 1:dim(obj)[names(dim(obj)) == time_dim] + + # Generate a window containing all the data + if (is.null(size)) { + + # Generate window removing one start date each time (leave-one-out cross-validation) + if (loocv) { + obj_window <- Apply(obj, target_dims = c(time_dim, sdate_dim), + fun = function(x) sapply(rsdates, function(s) as.vector(x[ rtimes, -s])), + output_dims = c('window', sdate_dim))$output1 + # Generate window without cross-validation + } else { + obj_window <- Apply(obj, target_dims = c(time_dim, sdate_dim), + fun = as.vector, output_dims = 'window')$output1 + } + } + # Generate window of the size specified by the user. Only applied with CV + else { + # For an accurate generation of the window, it is mandatory to add some "extra" data. + if (!("smonth" %in% names(dim(obj)))) { + stop("Missing 'smonth' dimension") + } + + # Concatenate data from previous, target and posterior months + obj_new <- Apply(obj, target_dims = list(c("time", "smonth")), + fun = as.vector, output_dims = "time")$output1 + + if (loocv) { + obj_window <- Apply(list(obj_new, rtimes, rsdates), target_dims = list(c(time_dim, sdate_dim), NULL, NULL), + fun = function(x, t, s) as.vector(x[(ntimes + t - size):(ntimes + t + size), -s]), + output_dims = 'window')$output1 + names(dim(obj_window))[(length(names(dim(obj_window))) - 1):length(names(dim(obj_window)))] <- c(time_dim, sdate_dim) + } else { + obj_window <- Apply(obj_new, target_dims = c(time_dim, sdate_dim), + fun = function(x) sapply(rtimes, function(t) as.vector(x[(ntimes + t - size):(ntimes + t + size), ])), + output_dims = c('window', time_dim))$output1 + + } + } + + return(obj_window) +} + + + + + + + + diff --git a/modules/Downscaling/tmp/Intbc.R b/modules/Downscaling/tmp/Intbc.R new file mode 100644 index 00000000..86bb5a9c --- /dev/null +++ b/modules/Downscaling/tmp/Intbc.R @@ -0,0 +1,325 @@ +#'@rdname CST_Intbc +#'@title Downscaling using interpolation and bias adjustment. +#' +#'@author J. Ramon, \email{jaume.ramon@bsc.es} +#' +#'@description This function performs a downscaling using an interpolation and a later bias +#'adjustment. It is recommended that the observations are passed already in the target grid. +#'Otherwise, the function will also perform an interpolation of the observed field into the +#'target grid. The coarse scale and observation data can be either global or regional. In the +#'latter case, the region is defined by the user. In principle, the coarse and observation data +#'are intended to be of the same variable, although different variables can also be admitted. +#' +#'@param exp an 's2dv object' containing the experimental field on the +#'coarse scale for which the downscaling is aimed. The object must have, at least, +#'the dimensions latitude, longitude, start date and member. The object is expected to be +#'already subset for the desired region. Data can be in one or two integrated regions, e.g., +#'crossing the Greenwich meridian. To get the correct results in the latter case, +#'the borders of the region should be specified in the parameter 'region'. See parameter +#''region'. +#'@param obs an 's2dv object' containing the observational field. The object +#'must have, at least, the dimensions latitude, longitude and start date. The object is +#'expected to be already subset for the desired region. +#'@param target_grid a character vector indicating the target grid to be passed to CDO. +#'It must be a grid recognised by CDO or a NetCDF file. +#'@param bc_method a character vector indicating the bias adjustment method to be applied after +#'the interpolation. Accepted methods are 'simple_bias', 'calibration', 'quantile_mapping'. The +#'abbreviations 'sbc', 'cal', 'qm' can also be used. +#'@param int_method a character vector indicating the regridding method to be passed to CDORemap. +#'Accepted methods are "con", "bil", "bic", "nn", "con2". If "nn" method is to be used, CDO_1.9.8 +#'or newer version is required. +#'@param points a list of two elements containing the point latitudes and longitudes +#'of the locations to downscale the model data. The list must contain the two elements +#'named as indicated in the parameters 'lat_dim' and 'lon_dim'. If the downscaling is +#'to a point location, only regular grids are allowed for exp and obs. Only needed if the +#'downscaling is to a point location. +#'@param method_point_interp a character vector indicating the interpolation method to interpolate +#'model gridded data into the point locations. Accepted methods are "nearest", "bilinear", "9point", +#'"invdist4nn", "NE", "NW", "SE", "SW". Only needed if the downscaling is to a point location. +#'@param lat_dim a character vector indicating the latitude dimension name in the element 'data' +#'in exp and obs. Default set to "lat". +#'@param lon_dim a character vector indicating the longitude dimension name in the element 'data' +#'in exp and obs. Default set to "lon". +#'@param sdate_dim a character vector indicating the start date dimension name in the element +#''data' in exp and obs. Default set to "sdate". +#'@param member_dim a character vector indicating the member dimension name in the element +#''data' in exp and obs. Default set to "member". +#'@param region a numeric vector indicating the borders of the region defined in obs. +#'It consists of four elements in this order: lonmin, lonmax, latmin, latmax. lonmin refers +#'to the left border, while lonmax refers to the right border. latmin indicates the lower +#'border, whereas latmax indicates the upper border. If set to NULL (default), the function +#'takes the first and last elements of the latitudes and longitudes. +#'@param ncores an integer indicating the number of cores to use in parallel computation. +#'@return An 's2dv' object. The element 'data' contains the dowscaled field, 'lat' the +#'downscaled latitudes, and 'lon' the downscaled longitudes. +#'@examples +#'exp <- rnorm(500) +#'dim(exp) <- c(member = 5, lat = 4, lon = 5, sdate = 5) +#'exp_lons <- 1:5 +#'exp_lats <- 1:4 +#'obs <- rnorm(900) +#'dim(obs) <- c(lat = 12, lon = 15, sdate = 5) +#'obs_lons <- seq(1,5, 4/14) +#'obs_lats <- seq(1,4, 3/11) +#'exp <- s2dv_cube(data = exp, lat = exp_lats, lon = exp_lons) +#'obs <- s2dv_cube(data = obs, lat = obs_lats, lon = obs_lons) +#'res <- CST_Intbc(exp = exp, obs = obs, target_grid = 'r1280x640', bc_method = 'simple_bias', int_method = 'conservative') +#'@export + +CST_Intbc <- function(exp, obs, target_grid, bc_method, int_method = NULL, points = NULL, + method_point_interp = NULL, lat_dim = "lat", lon_dim = "lon", + sdate_dim = "sdate", member_dim = "member", region = NULL, ncores = 1) +{ + if (!inherits(exp,'s2dv_cube')) { + stop("Parameter 'exp' must be of the class 's2dv_cube'") + } + + if (!inherits(obs,'s2dv_cube')) { + stop("Parameter 'obs' must be of the class 's2dv_cube'") + } + + res <- Intbc(exp = exp$data, obs = obs$data, exp_lats = exp$lat, exp_lons = exp$lon, + obs_lats = obs$lat, obs_lons = obs$lon, target_grid = target_grid, + int_method = int_method, bc_method = bc_method, points = points, source_file = exp$source_files[1], + method_point_interp = method_point_interp, lat_dim = lat_dim, lon_dim = lon_dim, + sdate_dim = sdate_dim, member_dim = member_dim, region = region, ncores = ncores) + + # Modify data, lat and lon in the origina s2dv_cube, adding the downscaled data + exp$data <- res$data + exp$lon <- res$lon + exp$lat <- res$lat + + obs$data <- res$obs + obs$lat <- res$lat + obs$lon <- res$lon + + res_s2dv <- list(exp = exp, obs = obs) + return(res_s2dv) + +} + +#'@rdname Intbc +#'@title Downscaling using interpolation and bias adjustment. +#' +#'@author J. Ramon, \email{jaume.ramon@bsc.es} +#' +#'@description This function performs a downscaling using an interpolation and a later bias +#'adjustment. It is recommended that the observations are passed already in the target grid. +#'Otherwise, the function will also perform an interpolation of the observed field into the +#'target grid. The coarse scale and observation data can be either global or regional. In the +#'latter case, the region is defined by the user. In principle, the coarse and observation data +#'are intended to be of the same variable, although different variables can also be admitted. +#' +#'@param exp an array with named dimensions containing the experimental field on the +#'coarse scale for which the downscaling is aimed. The object must have, at least, +#'the dimensions latitude, longitude, start date and member. The object is expected to be +#'already subset for the desired region. Data can be in one or two integrated regions, e.g., +#'crossing the Greenwich meridian. To get the correct results in the latter case, +#'the borders of the region should be specified in the parameter 'region'. See parameter +#''region'. +#'@param obs an array with named dimensions containing the observational field. The object +#'must have, at least, the dimensions latitude, longitude and start date. The object is +#'expected to be already subset for the desired region. +#'@param exp_lats a numeric vector containing the latitude values in 'exp'. Latitudes must +#'range from -90 to 90. +#'@param exp_lons a numeric vector containing the longitude values in 'exp'. Longitudes +#'can range from -180 to 180 or from 0 to 360. +#'@param obs_lats a numeric vector containing the latitude values in 'obs'. Latitudes must +#'range from -90 to 90. +#'@param obs_lons a numeric vector containing the longitude values in 'obs'. Longitudes +#'can range from -180 to 180 or from 0 to 360. +#'@param target_grid a character vector indicating the target grid to be passed to CDO. +#'It must be a grid recognised by CDO or a NetCDF file. +#'@param bc_method a character vector indicating the bias adjustment method to be applied after +#'the interpolation. Accepted methods are 'simple_bias', 'calibration', 'quantile_mapping'. The +#'abbreviations 'sbc', 'cal', 'qm' can also be used. +#'@param int_method a character vector indicating the regridding method to be passed to CDORemap. +#'Accepted methods are "con", "bil", "bic", "nn", "con2". If "nn" method is to be used, CDO_1.9.8 +#'or newer version is required. +#'@param points a list of two elements containing the point latitudes and longitudes +#'of the locations to downscale the model data. The list must contain the two elements +#'named as indicated in the parameters 'lat_dim' and 'lon_dim'. If the downscaling is +#'to a point location, only regular grids are allowed for exp and obs. Only needed if the +#'downscaling is to a point location. +#'@param method_point_interp a character vector indicating the interpolation method to interpolate +#'model gridded data into the point locations. Accepted methods are "nearest", "bilinear", "9point", +#'"invdist4nn", "NE", "NW", "SE", "SW". Only needed if the downscaling is to a point location. +#'@param lat_dim a character vector indicating the latitude dimension name in the element 'data' +#'in exp and obs. Default set to "lat". +#'@param lon_dim a character vector indicating the longitude dimension name in the element 'data' +#'in exp and obs. Default set to "lon". +#'@param sdate_dim a character vector indicating the start date dimension name in the element +#''data' in exp and obs. Default set to "sdate". +#'@param member_dim a character vector indicating the member dimension name in the element +#''data' in exp and obs. Default set to "member". +#'@param source_file a character vector with a path to an example file of the exp data. +#'Only needed if the downscaling is to a point location. +#'@param region a numeric vector indicating the borders of the region defined in obs. +#'It consists of four elements in this order: lonmin, lonmax, latmin, latmax. lonmin refers +#'to the left border, while lonmax refers to the right border. latmin indicates the lower +#'border, whereas latmax indicates the upper border. If set to NULL (default), the function +#'takes the first and last elements of the latitudes and longitudes. +#'@param ncores an integer indicating the number of cores to use in parallel computation. +#' +#'@import CSTools +#' +#'@seealso \code{\link[CSTools]{BiasCorrection}} +#'@seealso \code{\link[CSTools]{Calibration}} +#'@seealso \code{\link[CSTools]{QuantileMapping}} +#' +#'@return An list of three elements. 'data' contains the dowscaled field, 'lat' the +#'downscaled latitudes, and 'lon' the downscaled longitudes. +#'@examples +#'exp <- rnorm(500) +#'dim(exp) <- c(member = 5, lat = 4, lon = 5, sdate = 5) +#'exp_lons <- 1:5 +#'exp_lats <- 1:4 +#'obs <- rnorm(900) +#'dim(obs) <- c(lat = 12, lon = 15, sdate = 5) +#'obs_lons <- seq(1,5, 4/14) +#'obs_lats <- seq(1,4, 3/11) +#'res <- Intbc(exp = exp, obs = obs, exp_lats = exp_lats, exp_lons = exp_lons, obs_lats = obs_lats, +#'obs_lons = obs_lons, target_grid = 'r1280x640', bc_method = 'simple_bias', int_method = 'conservative') +#'@export +Intbc <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, target_grid, bc_method, int_method = NULL, + points = NULL, method_point_interp = NULL, lat_dim = "lat", lon_dim = "lon", sdate_dim = "sdate", + time_dim = "time", member_dim = "member", source_file = NULL, region = NULL, ncores = 1, ...) { + + if (!inherits(bc_method, 'character')) { + stop("Parameter 'bc_method' must be of the class 'character'") + } + + if (!inherits(lat_dim, 'character')) { + stop("Parameter 'lat_dim' must be of the class 'character'") + } + + if (!inherits(lon_dim, 'character')) { + stop("Parameter 'lon_dim' must be of the class 'character'") + } + + if (!inherits(sdate_dim, 'character')) { + stop("Parameter 'sdate_dim' must be of the class 'character'") + } + + if (!inherits(member_dim, 'character')) { + stop("Parameter 'member_dim' must be of the class 'character'") + } + + # Do not allow synonims for lat (latitude), lon (longitude) and time (sdate) dimension names + if (is.na(match(lon_dim, names(dim(exp)))) | is.na(match(lon_dim, names(dim(obs))))) { + stop("Missing longitude dimension in 'exp' and/or 'obs', or does not match the parameter ", + "'lon_dim'") + } + + if (is.na(match(lat_dim, names(dim(exp)))) | is.na(match(lat_dim, names(dim(obs))))) { + stop("Missing latitude dimension in 'exp' and/or 'obs', or does not match the parameter ", + "'lat_dim'") + } + + if (is.na(match(sdate_dim, names(dim(exp)))) | is.na(match(sdate_dim, names(dim(obs))))) { + stop("Missing start date dimension in 'exp' and/or 'obs', or does not match the parameter ", + "'sdate_dim'") + } + + if (is.na(match(member_dim, names(dim(exp))))) { + stop("Missing member dimension in 'exp', or does not match the parameter 'member_dim'") + } + + if (!(bc_method %in% c('sbc', 'cal', 'qm', 'dbc', 'simple_bias', 'calibration', + 'quantile_mapping', 'dynamical_bias'))) { + stop("Parameter 'bc_method' must be a character vector indicating the bias adjustment method. ", + "Accepted methods are 'simple_bias', 'calibration', 'quantile_mapping'. The abbreviations ", + "'sbc', 'cal', 'qm' can also be used.") + } + + if (!is.null(points) & is.null(source_file)) { + stop("No source file found. Source file must be provided in the parameter 'source_file'.") + } + + if (!is.null(points) & is.null(method_point_interp)) { + stop("Please provide the interpolation method to interpolate gridded data to point locations ", + "through the parameter 'method_point_interp'.") + } + + if (is.null(region)) { + warning("The borders of the downscaling region have not been provided. Assuming the four borders ", + "of the downscaling region are defined by the first and last elements of the parametres ", + "'obs_lats' and 'obs_lons'.") + region <- c(obs_lons[1], obs_lons[length(obs_lons)], obs_lats[1], obs_lats[length(obs_lats)]) + } + + exp_interpolated <- Interpolation(exp = exp, lats = exp_lats, lons = exp_lons, target_grid = target_grid, + method_remap = int_method, points = points, source_file = source_file, + lat_dim = lat_dim, lon_dim = lon_dim, method_point_interp = method_point_interp, + region = region) + + # If after interpolating 'exp' data the coordinates do not match, the obs data is interpolated to + # the same grid to force the matching + if ((!.check_coords(lat1 = exp_interpolated$lat, lat2 = obs_lats, + lon1 = exp_interpolated$lon, lon2 = obs_lons)) | !is.null(points)) { + obs_interpolated <- Interpolation(exp = obs, lats = obs_lats, lons = obs_lons, target_grid = target_grid, + method_remap = int_method, points = points, source_file = source_file, + lat_dim = lat_dim, lon_dim = lon_dim, + method_point_interp = method_point_interp, region = region) + obs_ref <- obs_interpolated$data + } else { + obs_ref <- obs + } + + # Some functions only accept the dimension names "member" and "sdate" for exp and + # "sdate" for obs + #if (member_dim != 'member') { + # names(dim(exp_interpolated$data)) <- replace(names(dim(exp_interpolated$data)), + # which(names(dim(exp_interpolated$data)) == member_dim), 'member') + #} + + #if (sdate_dim != 'sdate') { + # names(dim(exp_interpolated$data)) <- replace(names(dim(exp_interpolated$data)), + # which(names(dim(exp_interpolated$data)) == sdate_dim), 'sdate') + # names(dim(obs_ref)) <- replace(names(dim(obs_ref)), + # which(names(dim(obs_ref)) == sdate_dim), 'sdate') + #} + + if (bc_method == 'sbc' | bc_method == 'simple_bias') { + if (dim(obs_ref)[sdate_dim] == 1) { + warning('Simple Bias Correction should not be used with only one observation. Returning NA.') + } + + res <- BiasCorrection(exp = exp_interpolated$data, obs = obs_ref, memb_dim = member_dim, + sdate_dim = sdate_dim, ...) + } + else if (bc_method == 'cal' | bc_method == 'calibration') { + if (dim(exp_interpolated$data)[member_dim] == 1) { + stop('Calibration must not be used with only one ensemble member.') + } + res <- Calibration(exp = exp_interpolated$data, obs = obs_ref, memb_dim = member_dim, + sdate_dim = sdate_dim, ...) + } + else if (bc_method == 'qm' | bc_method == 'quantile_mapping') { + + res <- QuantileMapping(exp = exp_interpolated$data, obs = obs_ref, na.rm = TRUE, + memb_dim = member_dim, sdate_dim = sdate_dim, ...) + } + else if (bc_method == 'dbc' | bc_method == 'dynamical_bias') { + # the temporal dimension must be only one dimension called "time" + if (all(c(time_dim, sdate_dim) %in% names(dim(exp_interpolated$data)))) { + exp_interpolated$data <- Apply(exp_interpolated$data, target_dims = c(time_dim, sdate_dim), + fun = as.vector, output_dims = "time")$output1 + } + if (all(c(time_dim, sdate_dim) %in% names(dim(obs_ref)))) { + obs_ref <- Apply(obs_ref, target_dims = c(time_dim, sdate_dim), fun = as.vector, + output_dims = "time")$output1 + } + # REMEMBER to add na.rm = T in colMeans in .proxiesattractor + res <- DynBiasCorrection(exp = exp_interpolated$data, obs = obs_ref, ...) + } + + # Return a list of three elements + res <- list(data = res, obs = obs_ref, lon = exp_interpolated$lon, lat = exp_interpolated$lat) + + return(res) +} + + + + diff --git a/modules/Downscaling/tmp/Interpolation.R b/modules/Downscaling/tmp/Interpolation.R new file mode 100644 index 00000000..e594691f --- /dev/null +++ b/modules/Downscaling/tmp/Interpolation.R @@ -0,0 +1,739 @@ +#'@rdname CST_Interpolation +#'@title Regrid or interpolate gridded data to a point location. +#' +#'@author J. Ramon, \email{jaume.ramon@bsc.es} +#' +#'@description This function interpolates gridded model data from one grid to +#'another (regrid) or interpolates gridded model data to a set of point locations. +#'The gridded model data can be either global or regional. In the latter case, the +#'region is defined by the user. It does not have constrains of specific region or +#'variables to downscale. +#'@param exp s2dv object containing the experimental field on the +#'coarse scale for which the downscaling is aimed. The object must have, at least, +#'the dimensions latitude and longitude. The field data is expected to be already subset +#'for the desired region. Data can be in one or two integrated regions, e.g., +#'crossing the Greenwich meridian. To get the correct results in the latter case, +#'the borders of the region should be specified in the parameter 'region'. See parameter +#''region'. +#'@param points a list of two elements containing the point latitudes and longitudes +#'of the locations to downscale the model data. The list must contain the two elements +#'named as indicated in the parameters 'lat_dim' and 'lon_dim'. If the downscaling is +#'to a point location, only regular grids are allowed for exp and obs. Only needed if the +#'downscaling is to a point location. +#'@param method_remap a character vector indicating the regridding method to be passed +#'to CDORemap. Accepted methods are "con", "bil", "bic", "nn", "con2". If "nn" method is +#'to be used, CDO_1.9.8 or newer version is required. +#'@param target_grid a character vector indicating the target grid to be passed to CDO. +#'It must be a grid recognised by CDO or a NetCDF file. +#'@param lat_dim a character vector indicating the latitude dimension name in the element +#''exp' and/or 'points'. Default set to "lat". +#'@param lon_dim a character vector indicating the longitude dimension name in the element +#''exp' and/or 'points'. Default set to "lon". +#'@param region a numeric vector indicating the borders of the region defined in exp. +#'It consists of four elements in this order: lonmin, lonmax, latmin, latmax. lonmin refers +#'to the left border, while lonmax refers to the right border. latmin indicates the lower +#'border, whereas latmax indicates the upper border. If set to NULL (default), the function +#'takes the first and last elements of the latitudes and longitudes. +#'@param method_point_interp a character vector indicating the interpolation method to +#'interpolate model gridded data into the point locations. Accepted methods are "nearest", +#'"bilinear", "9point", "invdist4nn", "NE", "NW", "SE", "SW". +#' +#'@seealso \code{\link[s2dverification]{CDORemap}} +#' +#'@return An s2dv object containing the dowscaled field. +#' +#'@examples +#'exp <- rnorm(500) +#'dim(exp) <- c(member = 5, lat = 4, lon = 5, sdate = 5, time = 1) +#'lons <- 1:5 +#'lats <- 1:4 +#'exp <- s2dv_cube(data = exp, lat = lats, lon = lons) +#'res <- CST_Interpolation(exp = exp, method_remap = 'conservative', target_grid = 'r1280x640') +#'@export +CST_Interpolation <- function(exp, points = NULL, method_remap = NULL, target_grid = NULL, + lat_dim = "lat", lon_dim = "lon", region = NULL, + method_point_interp = NULL) +{ + if (!inherits(exp,'s2dv_cube')) { + stop("Parameter 'exp' must be of the class 's2dv_cube'") + } + + #if (is.null(exp[[lat_dim]]) | is.null(exp[[lon_dim]])) { + # stop("The name of the latitude/longitude elements in 'exp' must match the parametres ", + # "'lat_dim' and 'lon_dim'") + #} + + if ((length(which(names(dim(exp$data)) == lat_dim)) == 0) | (length(which(names(dim(exp$data)) == lon_dim)) == 0)) { + stop("The name of the latitude/longitude dimensions in 'exp$data' must match the parametres 'lat_dim' and 'lon_dim'") + } + + res <- Interpolation(exp = exp$data, lats = exp$lat, lons = exp$lon, + source_file = exp$source_files[1], points = points, + method_remap = method_remap, target_grid = target_grid, lat_dim = lat_dim, + lon_dim = lon_dim, region = region, method_point_interp = method_point_interp) + + # Modify data, lat and lon in the origina s2dv_cube, adding the downscaled data + exp$data <- res$data + exp$lon <- res$lon + exp$lat <- res$lat + + res_s2dv <- list(exp = exp, obs = NULL) + return(res_s2dv) +} + +#'@rdname Interpolation +#'@title Regrid or interpolate gridded data to a point location. +#' +#'@author J. Ramon, \email{jaume.ramon@bsc.es} +#'@author Ll. Lledó, \email{llorenc.lledo@ecmwf.int} +#' +#'@description This function interpolates gridded model data from one grid to +#'another (regrid) or interpolates gridded model data to a set of point locations. +#'The gridded model data can be either global or regional. In the latter case, the +#'region is defined by the user. It does not have constrains of specific region or +#'variables to downscale. +#'@param exp an array with named dimensions containing the experimental field on the +#'coarse scale for which the downscaling is aimed. The object must have, at least, +#'the dimensions latitude and longitude. The object is expected to be already subset +#'for the desired region. Data can be in one or two integrated regions, e.g., +#'crossing the Greenwich meridian. To get the correct results in the latter case, +#'the borders of the region should be specified in the parameter 'region'. See parameter +#''region'. +#'@param lats a numeric vector containing the latitude values. Latitudes must range from +#'-90 to 90. +#'@param lons a numeric vector containing the longitude values. Longitudes can range from +#'-180 to 180 or from 0 to 360. +#'@param points a list of two elements containing the point latitudes and longitudes +#'of the locations to downscale the model data. The list must contain the two elements +#'named as indicated in the parameters 'lat_dim' and 'lon_dim'. If the downscaling is +#'to a point location, only regular grids are allowed for exp and obs. Only needed if the +#'downscaling is to a point location. +#'@param source_file a character vector with a path to an example file of the exp data. +#'Only needed if the downscaling is to a point location. +#'@param method_remap a character vector indicating the regridding method to be passed +#'to CDORemap. Accepted methods are "con", "bil", "bic", "nn", "con2". If "nn" method is +#'to be used, CDO_1.9.8 or newer version is required. +#'@param target_grid a character vector indicating the target grid to be passed to CDO. +#'It must be a grid recognised by CDO or a NetCDF file. +#'@param lat_dim a character vector indicating the latitude dimension name in the element +#''exp' and/or 'points'. Default set to "lat". +#'@param lon_dim a character vector indicating the longitude dimension name in the element +#''exp' and/or 'points'. Default set to "lon". +#'@param region a numeric vector indicating the borders of the region defined in exp. +#'It consists of four elements in this order: lonmin, lonmax, latmin, latmax. lonmin refers +#'to the left border, while lonmax refers to the right border. latmin indicates the lower +#'border, whereas latmax indicates the upper border. If set to NULL (default), the function +#'takes the first and last elements of the latitudes and longitudes. +#'@param method_point_interp a character vector indicating the interpolation method to +#'interpolate model gridded data into the point locations. Accepted methods are "nearest", +#'"bilinear", "9point", "invdist4nn", "NE", "NW", "SE", "SW". Only needed if the downscaling +#'is to a point location. +#'@import multiApply +#'@import plyr +#'@importFrom s2dv CDORemap +#' +#'@seealso \code{\link[s2dverification]{CDORemap}} +#' +#'@return An list of three elements. 'data' contains the dowscaled field, 'lat' the +#'downscaled latitudes, and 'lon' the downscaled longitudes. +#' +#'@examples +#'exp <- rnorm(500) +#'dim(exp) <- c(member = 5, lat = 4, lon = 5, sdate = 5, time = 1) +#'lons <- 1:5 +#'lats <- 1:4 +#'res <- Interpolation(exp = exp, lats = lats, lons = lons, method_remap = 'conservative', target_grid = 'r1280x640') +#'@export +Interpolation <- function(exp, lats, lons, points = NULL, source_file = NULL, method_remap = NULL, + target_grid = NULL, lat_dim = "lat", lon_dim = "lon", region = NULL, + method_point_interp = NULL) +{ + if (!is.null(method_remap)) { + if (!inherits(method_remap, 'character')) { + stop("Parameter 'method_remap' must be of the class 'character'") + } + } + + if (!is.null(method_point_interp)) { + if (!inherits(method_point_interp, 'character')) { + stop("Parameter 'method_point_interp' must be of the class 'character'") + } + } + + if (is.na(match(lon_dim, names(dim(exp))))) { + stop("Missing longitude dimension in 'exp', or does not match the parameter 'lon_dim'") + } + + if (is.na(match(lat_dim, names(dim(exp))))) { + stop("Missing latitude dimension in 'exp', or does not match the parameter 'lat_dim'") + } + + # Check for negative latitudes in the exp data + if (any(lats < -90 | lats > 90) ) { + stop("Out-of-range latitudes have been found. Latitudes must range from -90 to 90") + } + + # checkings for the case of interpolation to point locations + if (!is.null(points)) { + if (!inherits(points, 'list')) { + stop("Parameter 'points' must be a list of two elements containing the point ", + "latitudes and longitudes.") + } + + if (is.null(method_point_interp)) { + stop("Parameter 'method_point_interp' must be a character vector indicating the ", + "interpolation method. Accepted methods are nearest, bilinear, 9point, ", + "invdist4nn, NE, NW, SE, SW") + } + + if (!(method_point_interp %in% c('nearest', 'bilinear', '9point', 'invdist4nn', 'NE', 'NW', 'SE', 'SW'))) { + stop("Parameter 'method_point_interp' must be a character vector indicating the ", + "interpolation method. Accepted methods are nearest, bilinear, 9point, ", + "invdist4nn, NE, NW, SE, SW") + } + + # Points must be a list of two elements + if (length(points) != 2) { + stop("'points' must be a lis of two elements containing the point ", + "latitudes and longitudes in the form 'points$lat', 'points$lon'") + } + + # The names of the two elements must be 'lat' and 'lon' + if (any(!(c(lat_dim, lon_dim) %in% names(points)))) { + stop("The names of the elements in the list 'points' must coincide with the parametres ", + "'lat_dim' and 'lon_dim'") + } + + # Check that the number of latitudes and longitudes match + if (length(unique(lengths(points))) != 1L) { + stop("The number of latitudes and longitudes must match") + } + + # Check for negative latitudes in the point coordinates + if (any(points[[lat_dim]] < -90 | points[[lat_dim]] > 90) ) { + stop("Out-of-range latitudes have been found in 'points'. Latitudes must range from ", + "-90 to 90") + } + + if (is.null(source_file)) { + stop("No source file found. Source file must be provided in the parameter 'source_file'.") + } + } else { + if (is.null(method_remap)) { + stop("Parameter 'method_remap' must be a character vector indicating the ", + "interpolation method. Accepted methods are con, bil, bic, nn, con2") + } + + if (is.null(target_grid)) { + stop("Parameter 'target_grid' can be either a path ", + "to another NetCDF file which to read the target grid from (a single grid must be ", + "defined in such file) or a character vector indicating the coarse grid to ", + "be passed to CDO, and it must be a grid recognised by CDO or a NetCDF file.") + } + } + + #---------------------------------- + # Limits of the region defined by the model data + #---------------------------------- + # for the case when region limits are not passed by the user + # regions contains the following elements in order: lonmin, lonmax, latmin, latmax + if (is.null(region)) { + warning("The borders of the downscaling region have not been provided. Assuming the four borders of the ", + "downscaling region are defined by the first and last elements of the parametres 'lats' and 'lons'.") + region <- c(lons[1], lons[length(lons)], lats[1], lats[length(lats)]) + } + + # Ensure points to be within the region limits + if (!is.null(points)) { + if (any(points[[lat_dim]] > region[4]) | any(points[[lat_dim]] < region[3]) | + any(points[[lon_dim]] > region[2]) | any(points[[lon_dim]] < region[1])) { + stop("At least one of the points lies outside the model region") + } + } + + #---------------------------------- + # Map regrid with CDO + #---------------------------------- + if (is.null(points)) { + res <- CDORemap(data_array = exp, + lats = lats, + lons = lons, + grid = target_grid, + method = method_remap, + crop = region) + + # Return a list + res <- list(data = res$data_array, obs = NULL, lon = res$lons, lat = res$lats) + + #---------------------------------- + # Interpolate to point locations + #---------------------------------- + } else { + # First create interpolation weights, depending on the chosen method + weights <- create_interp_weights(ncfile = source_file, locids = 1:unique(lengths(points)), + lats = points[[lat_dim]], lons = points[[lon_dim]], + method = method_point_interp, region = list(lat_min = region[3], + lat_max = region[4], lon_min = region[1], lon_max = region[2])) + + # Select coarse-scale data to be interpolated + model_data_gridpoints <- get_model_data(weights.df = weights, mdata = exp) + + # Interpolate model data to point locations + res <- interpolate_data(model_data_gridpoints, weights) + + # Return a list + res <- list(data = res, obs = NULL, lon = points[[lon_dim]], lat = points[[lat_dim]]) + } + + return(res) +} + +#====================== +# Compute weights for interpolation at several (lat,lon) positions +# We assume that grid boxes are centered in the grid point. +#====================== +create_interp_weights <- function(ncfile, locids, lats, lons, region = NULL, + method = c("nearest", "bilinear", "9point", "invdist4nn", "NE", + "NW", "SE", "SW")) +{ + # crop the region to get the correct weights - save temporary file + nc_cropped1 <- paste0('tmp_cropped_', format(Sys.time(), "%Y%m%d%H%M"),'.nc') + nc_cropped2 <- paste0('tmp_cropped2_', format(Sys.time(), "%Y%m%d%H%M"),'.nc') + + system(paste0('cdo sellonlatbox,', region$lon_min, ',', region$lon_max, ',', region$lat_min, + ',', region$lat_max, ' ', ncfile, ' ', nc_cropped1)) + + #---------------- + # Read grid description and compute (i,j) of requested locations (including decimals) + #---------------- + griddes <- get_griddes(nc_cropped1) + + if (is.null(griddes$yinc)) { + system(paste0('rm ', nc_cropped1)) + stop("'griddes$yinc' not found in NetCDF file. Remember that only regular grids are accepted when ", + "downscaling to point locations.") + } + + # If latitudes are decreasingly ordered, revert them + if (griddes$yinc < 0) { + system(paste0('cdo invertlat ', nc_cropped1, ' ', nc_cropped2)) + griddes <- get_griddes(nc_cropped2) + } + # remove temporary files + system(paste0('rm ', nc_cropped1)) + system(paste0('rm ', nc_cropped2)) + + if (is.null(griddes)) { + stop("'griddes' not found in the NetCDF source files") + } + + gridpoints <- latlon2ij(griddes, lats, lons) + + #---------------- + # Compute the weights according to the selected method + #---------------- + if(method == "nearest") { + #---------------- + # Round i and j to closest integer. Weight is always 1. + #---------------- + + # | | | + # -+-----+-----+- + # | x| | + # | a | | + # | | | + # -+-----+-----+- + # | | | + + centeri <- round(gridpoints$i,0) + centeri[centeri == griddes$xsize+1] <- 1 # close longitudes + + weights.df <- data.frame(locid = locids, + lat = lats, + lon = lons, + rawi = gridpoints$i, + rawj = gridpoints$j, + i = centeri, + j = round(gridpoints$j, 0), + weight = 1) + } else if (method %in% c("bilinear","invdist4nn")) { + #---------------- + # Get the (i,j) coordinates of the 4 points (a,b,c,d) around x. + # This plot shows i increasing to the right and + # j increasing to the top, but the computations are generic. + #---------------- + # | | | + #- +-----+-----+- + # | | | + # | b | c | + # | | | + #- +-----+-----+- + # | x| | + # | a | d | + # | | | + #- +-----+-----+- + # | | | + + lowi <- floor(gridpoints$i) + highi <- ceiling(gridpoints$i) + highi[highi == griddes$xsize+1] <- 1 # close the longitudes + lowj <- floor(gridpoints$j) + highj <- ceiling(gridpoints$j) + # Note: highi and lowi are the same if i is integer + # Note: highj and lowj are the same if j is integer + + #---------------- + # Get x position wrt ad and ab axes (from 0 to 1) + #---------------- + pcti <- gridpoints$i - lowi + pctj <- gridpoints$j - lowj + + #---------------- + # Compute weights for a,b,c,d grid points + #---------------- + if(method == "bilinear") { + wa = (1 - pcti) * (1 - pctj) + wb = (1 - pcti) * pctj + wc = pcti * pctj + wd = pcti * (1 - pctj) + } else if(method == "invdist4nn") { + #---------------- + # Note: the distance is computed in the (i,j) space. + # Note2: this method does not guarantees a continuous interpolation. + # Use bilinear if that's desirable. + # When x is on the ab line, c and d would be used. In the limit of x + # being just left of ab other points would be used. + # Here we just dropped c and d coeffs when over ab. Same for ad line, + # b and c coeffs dropped. This prevents repeated nodes. + #---------------- + ida = 1 / sqrt(pcti^2 + pctj^2) + idb = 1 / sqrt(pcti^2 + (1 - pctj)^2) + idc = 1 / sqrt((1-pcti)^2 + (1-pctj)^2) + idd = 1 / sqrt((1-pcti)^2 + pctj^2) + idb[pctj == 0] <- 0; + idc[pctj == 0] <- 0; + idc[pcti == 0] <- 0; + idd[pcti == 0] <- 0; + + #---------------- + # Normalize vector of inverse distances + #---------------- + invdist <- cbind(ida, idb, idc, idd) + print(invdist) + w <- t(apply(invdist, 1, function(x) { print(x); if(any(is.infinite(x))) { + x <- is.infinite(x) * 1 } ; x <- x/sum(x) })) + print(w) + + wa = w[ , 1] + wb = w[ , 2] + wc = w[ , 3] + wd = w[ , 4] + } + + #---------------- + # Put info in dataframes and rbind them + #---------------- + weightsa.df <- data.frame(locid = locids, lat = lats,lon = lons, rawi = gridpoints$i, + rawj = gridpoints$j, i = lowi, j = lowj, weight = wa) + weightsb.df <- data.frame(locid = locids, lat = lats, lon = lons, rawi = gridpoints$i, + rawj = gridpoints$j, i = lowi, j = highj, weight = wb) + weightsc.df <- data.frame(locid = locids, lat = lats, lon = lons, rawi = gridpoints$i, + rawj = gridpoints$j, i = highi, j = highj, weight = wc) + weightsd.df <- data.frame(locid = locids, lat = lats, lon = lons, rawi = gridpoints$i, + rawj = gridpoints$j, i = highi, j = lowj, weight = wd) + weights.df <- rbind(weightsa.df, weightsb.df, weightsc.df, weightsd.df) + } else if(method == "9point") { + #---------------- + # Get the (i,j) coordinates of the 9 points (a,b,...,i) around x + # This plot shows i increasing to the right and + # j increasing to the top, but the computations are generic. + #---------------- + # | | | | + #-+-----+-----+-----+- + # | | | | + # | c | f | i | + # | | | | + #-+-----+-----+-----+- + # | | x| | + # | b | e | h | + # | | | | + #-+-----+-----+-----+- + # | | | | + # | a | d | g | + # | | | | + #-+-----+-----+-----+- + # | | | | + + centeri <- round(gridpoints$i, 0) + centeri[centeri == griddes$xsize + 1] <- 1 + centerj <- round(gridpoints$j, 0) + lowi <- centeri - 1 + highi <- centeri + 1 + lowi[lowi == 0] <- griddes$xsize # close the longitudes + highi[highi == griddes$xsize+1] <- 1 # close the longitudes + lowj <- centerj - 1 + highj <- centerj + 1 + + #---------------- + # For the north and south pole do a 6-point average + #---------------- + w_highj <- ifelse(centerj == 1,1/6,ifelse(centerj == griddes$ysize,0 ,1/9)) + w_centerj <- ifelse(centerj == 1,1/6,ifelse(centerj == griddes$ysize,1/6,1/9)) + w_lowj <- ifelse(centerj == 1,0 ,ifelse(centerj == griddes$ysize,1/6,1/9)) + + #---------------- + # Put info in dataframes and rbind them + #---------------- + weightsa.df <- data.frame(locid = locids, lat = lats, lon = lons, rawi = gridpoints$i, + rawj = gridpoints$j, i = lowi, j = lowj, weight = w_lowj) + weightsb.df <- data.frame(locid = locids, lat = lats, lon = lons, rawi = gridpoints$i, + rawj = gridpoints$j, i = lowi, j = centerj, weight = w_centerj) + weightsc.df <- data.frame(locid = locids, lat = lats, lon = lons, rawi = gridpoints$i, + rawj = gridpoints$j, i = lowi, j = highj, weight = w_highj) + weightsd.df <- data.frame(locid = locids, lat = lats, lon = lons, rawi = gridpoints$i, + rawj = gridpoints$j, i = centeri, j = lowj, weight = w_lowj) + weightse.df <- data.frame(locid = locids, lat = lats, lon = lons, rawi = gridpoints$i, + rawj = gridpoints$j, i = centeri, j = centerj, weight = w_centerj) + weightsf.df <- data.frame(locid = locids, lat = lats, lon = lons, rawi = gridpoints$i, + rawj = gridpoints$j, i = centeri, j = highj, weight = w_highj) + weightsg.df <- data.frame(locid = locids, lat = lats, lon = lons, rawi = gridpoints$i, + rawj = gridpoints$j, i = highi, j = lowj, weight = w_lowj) + weightsh.df <- data.frame(locid = locids, lat = lats, lon = lons, rawi = gridpoints$i, + rawj = gridpoints$j, i = highi, j = centerj, weight = w_centerj) + weightsi.df <- data.frame(locid = locids, lat = lats, lon = lons, rawi = gridpoints$i, + rawj = gridpoints$j, i = highi, j = highj, weight = w_highj) + weights.df <- rbind(weightsa.df, weightsb.df, weightsc.df, weightsd.df, weightse.df, + weightsf.df, weightsg.df, weightsh.df, weightsi.df) + } else if(method %in% c("NE", "NW", "SW", "SE")) { + #---------------- + # Find if increasing i and j increases or decreases lat and lon + #---------------- + westtoeast <- (griddes$xinc > 0) + southtonorth <- T + if(griddes$gridtype == "gaussian") { + # We assume gaussian grid latitudes are ordered north to south + southtonorth <- F + } else { #lonlat + if(griddes$yinc < 0) {southtonorth <- F} + } + + #---------------- + # Get the (i,j) coordinates of the desired point (a,b,c or d) around x + #---------------- + # | | | + #- +-----+-----+- + # | | | + # | b | c | + # | | | + #- +-----+-----+- + # | x| | + # | a | d | + # | | | + #- +-----+-----+- + # | | | + + if(substr(method,1,1) == "N" & southtonorth == T) { selj <- ceiling(gridpoints$j) } + if(substr(method,1,1) == "S" & southtonorth == T) { selj <- floor(gridpoints$j) } + if(substr(method,1,1) == "N" & southtonorth == F) { selj <- floor(gridpoints$j) } + if(substr(method,1,1) == "S" & southtonorth == F) { selj <- ceiling(gridpoints$j) } + + if(substr(method,2,2) == "E" & westtoeast == T) {seli <- ceiling(gridpoints$i) } + if(substr(method,2,2) == "W" & westtoeast == T) {seli <- floor(gridpoints$i) } + if(substr(method,2,2) == "E" & westtoeast == F) {seli <- floor(gridpoints$i) } + if(substr(method,2,2) == "W" & westtoeast == F) {seli <- ceiling(gridpoints$i) } + + seli[seli == griddes$xsize + 1] <- 1 # close the longitudes + + weights.df <- data.frame(locid = locids, lat = lats, lon = lons, rawi = gridpoints$i, + rawj = gridpoints$j, i = seli, j = selj, weight = 1) + } else { + stop(paste0("Method " ,method, " not implemented")) + } + + #---------------- + # Order by locid and remove lines with 0 weight + # This also removes some duplicates in the bilinear/invdist4nn methods when i + # or j is a whole number, or in the 9-point method when at the poles. + #---------------- + weights.df <- weights.df[order(weights.df$locid), ] + weights.df <- weights.df[weights.df$weight != 0, ] + + #---------------- + # Add as attributes the method and the nc file used to compute the weights + #---------------- + attributes(weights.df)$nc_file <- normalizePath(ncfile) + attributes(weights.df)$method <- method + + return(weights.df) +} + +#====================== +# Compute (i,j) from (lat,lon). +# Works only for 'lonlat' and 'gaussian' grids. +# Grids are supposed to cover whole globe. +#====================== +latlon2ij <- function(griddes, lats, lons) { + #------------ + # Check input params + #------------ + if(length(lons) != length(lats)) {stop("Input lat and lon have different lengths.")} + if(any(lats < -90) | any(lats > 90)) {stop("Latitude out of valid range")} + if((griddes$xfirst > 180) & (any(lons < 0))) { + stop("Please use the same convention for the longitudes in the source file and the ", + "longitude values in 'points'.") + } + #if(round(griddes$xinc*griddes$xsize) != 360) {stop("Grid is not global")} + # no need to resize lons to [0,360) + + #------------ + # Compute i (with decimals) + # i lies in [1,xsize+1) + # %% gives the remainder + #------------ + gridpoints <- list() + gridpoints$i <- 1 + (((lons - griddes$xfirst) / griddes$xinc) %% griddes$xsize) + + #------------ + # Compute j (with decimals) + #------------ + if(griddes$gridtype=='lonlat') { + gridpoints$j <- 1 + (lats - griddes$yfirst) / griddes$yinc + } else if(griddes$gridtype == 'gaussian') { + # We assume gaussian grid latitudes are ordered north to south + # findInterval can only work with monotonic ascending values so we revert twice + northj <- griddes$ysize-findInterval(lats, -griddes$yvals) + southj <- northj + 1 + + # Special case: We are north of the first lat + gridpoints$j[northj == 0] <- 1 + + # Special case: We are south of the last lat + gridpoints$j[southj == griddes$ysize + 1] <- griddes$ysize + + # Generic case + ok_idx <- !(northj == 0 | southj == griddes$ysize+1) + gridpoints$j[ok_idx] <- northj[ok_idx] + (griddes$yvals[northj[ok_idx]] - + lats[ok_idx])/(griddes$yvals[northj[ok_idx]] - griddes$yvals[southj[ok_idx]]) + } else { stop("Unsupported grid") } + + return(gridpoints) +} + +#====================== +# Use cdo griddes to obtain grid information +#====================== +get_griddes <- function(ncfile) { + tmp <- system(paste0("cdo griddes ", ncfile, + " 2>/dev/null | egrep 'gridtype|xsize|ysize|xfirst|xinc|yfirst|yinc'"), intern = T) + arr <- do.call(rbind, strsplit(tmp,"\\s+= ", perl = T)) + griddes <- as.list(arr[,2]) + names(griddes) <- arr[,1] + + if(griddes$gridtype == "gaussian") { + griddes$yvals <- get_lats(ncfile) + } + + # Convert some fields to numeric. Ensures all fields are present. + for(nm in c("xsize", "ysize", "xfirst", "yfirst", "xinc", "yinc")) { + griddes[[nm]] <- ifelse(is.null(griddes[[nm]]), NA, as.numeric(griddes[[nm]])) + } + + return(griddes) +} + +#====================== +# Use nco to obtain latitudes. Latitudes shall be named "lat" or "latitude". +#====================== +get_lats <- function(ncfile) { + + tmp <- system(paste0('ncks -H -s "%f " -v latitude ',ncfile),intern=T) + + if(!is.null(attributes(tmp)$status)) { + tmp <- system(paste0('ncks -H -s "%f " -v lat ',ncfile),intern=T) + } + + lats <- as.numeric(strsplit(tmp[1],"\\s+",perl=T)[[1]]) + + return(lats) +} + +#====================== +# Load model data at all (i,j) pairs listed in the weights dataframe. +# Uses StartR. All ... parameters go to Start (i.e. specify dat, var, +# sdate, time, ensemble, num_procs, etc) +#====================== +get_model_data <- function(weights.df, mdata) { + + #----------------- + # Get data for all combinations of i and j. + # (inefficient, getting many unneded pairs). + # Avoid retrieving duplicates with unique() + # These are the indices of the global grid + #----------------- + is <- weights.df$i + js <- weights.df$j + + #----------------- + # Get indices of original is and js in unique(is),unique(js) that were requested + #----------------- + idxi <- match(is, unique(is)) + idxj <- match(js, unique(js)) + + #----------------- + # Subsample mdata to keep only the needed (i,j) pairs. + #----------------- + if (is.na(match("longitude", names(dim(mdata))))) { + londim <- match("lon", names(dim(mdata))) + } else { + londim <- match("longitude", names(dim(mdata))) + } + if (is.na(match("latitude", names(dim(mdata))))) { + latdim <- match("lat", names(dim(mdata))) + } else { + latdim <- match("latitude", names(dim(mdata))) + } + + # trick: exchange idxi and idxj + #if(londim > latdim) { idx.tmp <- idxi; idxi <- idxj; idxj <- idx.tmp } + #keepdims <- (1:length(dim(mdata)))[-c(londim,latdim)] + + #sub_mdata <- apply(mdata, keepdims, function(x) { + # laply(1:length(is),function(k) { x[idxi[k],idxj[k]] }) }) + #names(dim(sub_mdata))[1] <- "gridpoint" + + #----------------- + # Retrieve with multiApply + #----------------- + sub_mdata <- Apply(mdata, target_dims = list(c(latdim, londim)), fun = function(x) {laply(1:length(is),function(k) { x[js[k],is[k]] }) })$output1 + names(dim(sub_mdata))[1] <- "gridpoint" + + #----------------- + # Return an array that contains as many gridpoints as (i,j) pairs were requested + #----------------- + return(sub_mdata) +} + +#====================== +# Multiply the grid-point series by the weights, +# to obtain the desired interpolations +#====================== +interpolate_data <- function(model_data, weights.df) { + #----------------- + # Multiply each gridpoint matrix by its corresponding weight + #----------------- + gpdim <- match("gridpoint", names(dim(model_data))) + weighted_data <- sweep(model_data, gpdim, weights.df$weight, "*") + + #----------------- + # Sum all series that belong to same interpolation point + # Return an array that contains the requested locations and interpolation type + #----------------- + #interp_data <- apply(weighted_data, -gpdim, function(x) { rowsum(x, weights.df$locid) }) + #names(dim(interp_data))[1] <- "location" + interp_data <- Apply(weighted_data, target_dims = gpdim, fun = function(x) { + rowsum(x, weights.df$locid)}, output_dims = c("location", "aux"))$output1 + + return(interp_data) +} + + diff --git a/modules/Downscaling/tmp/Intlr.R b/modules/Downscaling/tmp/Intlr.R new file mode 100644 index 00000000..565e3046 --- /dev/null +++ b/modules/Downscaling/tmp/Intlr.R @@ -0,0 +1,525 @@ +#'@rdname CST_Intlr +#'@title Downscaling using interpolation and linear regression. +#' +#'@author J. Ramon, \email{jaume.ramon@bsc.es} +#' +#'@description This function performs a downscaling using an interpolation and a linear +#'regression. Different methodologies that employ linear regressions are available. See +#'parameter 'lr_method' for more information. It is recommended that the observations +#'are passed already in the target grid. Otherwise, the function will also perform an +#'interpolation of the observed field into the target grid. The coarse scale and +#'observation data can be either global or regional. In the latter case, the region is +#'defined by the user. In principle, the coarse and observation data are intended to +#'be of the same variable, although different variables can also be admitted. +#' +#'@param exp an 's2dv object' containing the experimental field on the +#'coarse scale for which the downscaling is aimed. The object must have, at least, +#'the dimensions latitude, longitude, start date and member. The object is expected to be +#'already subset for the desired region. Data can be in one or two integrated regions, e.g., +#'crossing the Greenwich meridian. To get the correct results in the latter case, +#'the borders of the region should be specified in the parameter 'region'. See parameter +#''region'. +#'@param obs an 's2dv object' containing the observational field. The object +#'must have, at least, the dimensions latitude, longitude and start date. The object is +#'expected to be already subset for the desired region. +#'@param lr_method a character vector indicating the linear regression method to be applied +#'after the interpolation. Accepted methods are 'basic', 'large-scale' and '4nn'. The 'basic' +#'method fits a linear regression using high resolution observations as predictands and the +#'interpolated model data as predictor. Then, the regression equation is to the interpolated +#'model data to correct the interpolated values. The 'large-scale' method fits a linear +#'regression with large-scale predictors from the same model (e.g. teleconnection indices) +#'as predictors and high-resolution observations as predictands. This equation is then +#'applied to the interpolated model values. Finally, the '4nn' method uses a linear +#'regression with the four nearest neighbours as predictors and high-resolution observations +#'as predictands. It is then applied to model data to correct the interpolated values. +#'@param target_grid a character vector indicating the target grid to be passed to CDO. +#'It must be a grid recognised by CDO or a NetCDF file. +#'@param points a list of two elements containing the point latitudes and longitudes +#'of the locations to downscale the model data. The list must contain the two elements +#'named as indicated in the parameters 'lat_dim' and 'lon_dim'. If the downscaling is +#'to a point location, only regular grids are allowed for exp and obs. Only needed if the +#'downscaling is to a point location. +#'@param int_method a character vector indicating the regridding method to be passed +#'to CDORemap. Accepted methods are "con", "bil", "bic", "nn", "con2". If "nn" method is +#'to be used, CDO_1.9.8 or newer version is required. +#'@param method_point_interp a character vector indicating the interpolation method to +#'interpolate model gridded data into the point locations. Accepted methods are "nearest", +#'"bilinear", "9point", "invdist4nn", "NE", "NW", "SE", "SW". +#'@param predictors an array with large-scale data to be used in the 'large-scale' method. +#'Only needed if the linear regression method is set to 'large-scale'. It must have, at +#'least the dimension start date and another dimension whose name has to be specified in +#'the parameter 'large_scale_predictor_dimname'. It should contain as many elements as the +#'number of large-scale predictors. +#'@param lat_dim a character vector indicating the latitude dimension name in the element 'data' +#'in exp and obs. Default set to "lat". +#'@param lon_dim a character vector indicating the longitude dimension name in the element 'data' +#'in exp and obs. Default set to "lon". +#'@param sdate_dim a character vector indicating the start date dimension name in the element +#''data' in exp and obs. Default set to "sdate". +#'@param time_dim a character vector indicating the time dimension name in the element +#''data' in exp and obs. Default set to "time". +#'@param large_scale_predictor_dimname a character vector indicating the name of the +#'dimension in 'predictors' that contain the predictor variables. See parameter 'predictors'. +#'@param loocv a logical indicating whether to apply leave-one-out cross-validation when +#'generating the linear regressions. Default to FALSE. +#'@param region a numeric vector indicating the borders of the region defined in exp. +#'It consists of four elements in this order: lonmin, lonmax, latmin, latmax. lonmin refers +#'to the left border, while lonmax refers to the right border. latmin indicates the lower +#'border, whereas latmax indicates the upper border. If set to NULL (default), the function +#'takes the first and last elements of the latitudes and longitudes. +#'@param ncores an integer indicating the number of cores to use in parallel computation. +#' +#'@import multiApply +#' +#'@return A list of three elements. 'data' contains the dowscaled field, 'lat' the +#'downscaled latitudes, and 'lon' the downscaled longitudes. +#'@examples +#'exp <- rnorm(500) +#'dim(exp) <- c(member = 5, lat = 4, lon = 5, sdate = 5) +#'exp_lons <- 1:5 +#'exp_lats <- 1:4 +#'obs <- rnorm(900) +#'dim(obs) <- c(lat = 12, lon = 15, sdate = 5) +#'obs_lons <- seq(1,5, 4/14) +#'obs_lats <- seq(1,4, 3/11) +#'exp <- s2dv_cube(data = exp, lat = exp_lats, lon = exp_lons) +#'obs <- s2dv_cube(data = obs, lat = obs_lats, lon = obs_lons) +#'res <- CST_Intlr(exp = exp, obs = obs, target_grid = 'r1280x640', lr_method = 'basic', int_method = 'conservative') +#'@export +CST_Intlr <- function(exp, obs, lr_method, target_grid = NULL, points = NULL, int_method = NULL, + method_point_interp = NULL, predictors = NULL, lat_dim = "lat", lon_dim = "lon", + sdate_dim = "sdate", time_dim = "time", member_dim = "member", + large_scale_predictor_dimname = 'vars', loocv = FALSE, region = NULL, ncores = 1) { + + if (!inherits(exp,'s2dv_cube')) { + stop("Parameter 'exp' must be of the class 's2dv_cube'") + } + + if (!inherits(obs,'s2dv_cube')) { + stop("Parameter 'obs' must be of the class 's2dv_cube'") + } + + res <- Intlr(exp = exp$data, obs = obs$data, exp_lats = exp$lat, exp_lons = exp$lon, + obs_lats = obs$lat, obs_lons = obs$lon, points = points, source_file_exp = exp$source_files[1], + source_file_obs = obs$source_files[1], target_grid = target_grid, lr_method = lr_method, + int_method = int_method, method_point_interp = method_point_interp, predictors = predictors, + lat_dim = lat_dim, lon_dim = lon_dim, sdate_dim = sdate_dim, time_dim = time_dim, + member_dim = member_dim, large_scale_predictor_dimname = large_scale_predictor_dimname, + loocv = loocv, region = region, ncores = ncores) + + # Modify data, lat and lon in the origina s2dv_cube, adding the downscaled data + exp$data <- res$data + exp$lon <- res$lon + exp$lat <- res$lat + + obs$data <- res$obs + obs$lat <- res$lat + obs$lon <- res$lon + + res_s2dv <- list(exp = exp, obs = obs) + return(res_s2dv) +} + +#'@rdname Intlr +#'@title Downscaling using interpolation and linear regression. +#' +#'@author J. Ramon, \email{jaume.ramon@bsc.es} +#' +#'@description This function performs a downscaling using an interpolation and a linear +#'regression. Different methodologies that employ linear regressions are available. See +#'parameter 'lr_method' for more information. It is recommended that the observations +#'are passed already in the target grid. Otherwise, the function will also perform an +#'interpolation of the observed field into the target grid. The coarse scale and +#'observation data can be either global or regional. In the latter case, the region is +#'defined by the user. In principle, the coarse and observation data are intended to +#'be of the same variable, although different variables can also be admitted. +#' +#'@param exp an array with named dimensions containing the experimental field on the +#'coarse scale for which the downscaling is aimed. The object must have, at least, +#'the dimensions latitude, longitude and start date. The object is expected to be +#'already subset for the desired region. Data can be in one or two integrated regions, e.g., +#'crossing the Greenwich meridian. To get the correct results in the latter case, +#'the borders of the region should be specified in the parameter 'region'. See parameter +#''region'. +#'@param obs an array with named dimensions containing the observational field. The object +#'must have, at least, the dimensions latitude, longitude and start date. The object is +#'expected to be already subset for the desired region. +#'@param exp_lats a numeric vector containing the latitude values in 'exp'. Latitudes must +#'range from -90 to 90. +#'@param exp_lons a numeric vector containing the longitude values in 'exp'. Longitudes +#'can range from -180 to 180 or from 0 to 360. +#'@param obs_lats a numeric vector containing the latitude values in 'obs'. Latitudes must +#'range from -90 to 90. +#'@param obs_lons a numeric vector containing the longitude values in 'obs'. Longitudes +#'can range from -180 to 180 or from 0 to 360. +#'@param lr_method a character vector indicating the linear regression method to be applied +#'after the interpolation. Accepted methods are 'basic', 'large-scale' and '4nn'. The 'basic' +#'method fits a linear regression using high resolution observations as predictands and the +#'interpolated model data as predictor. Then, the regression equation is to the interpolated +#'model data to correct the interpolated values. The 'large-scale' method fits a linear +#'regression with large-scale predictors from the same model (e.g. teleconnection indices) +#'as predictors and high-resolution observations as predictands. This equation is then +#'applied to the interpolated model values. Finally, the '4nn' method uses a linear +#'regression with the four nearest neighbours as predictors and high-resolution observations +#'as predictands. It is then applied to model data to correct the interpolated values. +#'@param target_grid a character vector indicating the target grid to be passed to CDO. +#'It must be a grid recognised by CDO or a NetCDF file. +#'@param points a list of two elements containing the point latitudes and longitudes +#'of the locations to downscale the model data. The list must contain the two elements +#'named as indicated in the parameters 'lat_dim' and 'lon_dim'. If the downscaling is +#'to a point location, only regular grids are allowed for exp and obs. Only needed if the +#'downscaling is to a point location. +#'@param int_method a character vector indicating the regridding method to be passed +#'to CDORemap. Accepted methods are "con", "bil", "bic", "nn", "con2". If "nn" method is +#'to be used, CDO_1.9.8 or newer version is required. +#'@param method_point_interp a character vector indicating the interpolation method to +#'interpolate model gridded data into the point locations. Accepted methods are "nearest", +#'"bilinear", "9point", "invdist4nn", "NE", "NW", "SE", "SW". +#'@param source_file_exp a character vector with a path to an example file of the exp data. +#'Only needed if the downscaling is to a point location. +#'@param source_file_obs a character vector with a path to an example file of the obs data. +#'Only needed if the downscaling is to a point location. +#'@param predictors an array with large-scale data to be used in the 'large-scale' method. +#'Only needed if the linear regression method is set to 'large-scale'. It must have, at +#'least the dimension start date and another dimension whose name has to be specified in +#'the parameter 'large_scale_predictor_dimname'. It should contain as many elements as the +#'number of large-scale predictors. +#'@param lat_dim a character vector indicating the latitude dimension name in the element 'data' +#'in exp and obs. Default set to "lat". +#'@param lon_dim a character vector indicating the longitude dimension name in the element 'data' +#'in exp and obs. Default set to "lon". +#'@param sdate_dim a character vector indicating the start date dimension name in the element +#''data' in exp and obs. Default set to "sdate". +#'@param time_dim a character vector indicating the time dimension name in the element +#''data' in exp and obs. Default set to "time". +#'@param region a numeric vector indicating the borders of the region defined in exp. +#'It consists of four elements in this order: lonmin, lonmax, latmin, latmax. lonmin refers +#'to the left border, while lonmax refers to the right border. latmin indicates the lower +#'border, whereas latmax indicates the upper border. If set to NULL (default), the function +#'takes the first and last elements of the latitudes and longitudes. +#'@param large_scale_predictor_dimname a character vector indicating the name of the +#'dimension in 'predictors' that contain the predictor variables. See parameter 'predictors'. +#'@param loocv a logical indicating whether to apply leave-one-out cross-validation when +#'generating the linear regressions. Default to FALSE. +#'@param ncores an integer indicating the number of cores to use in parallel computation. +#' +#'@import multiApply +#' +#'@return A list of three elements. 'data' contains the dowscaled field, 'lat' the +#'downscaled latitudes, and 'lon' the downscaled longitudes. +#'@examples +#'exp <- rnorm(500) +#'dim(exp) <- c(member = 5, lat = 4, lon = 5, sdate = 5) +#'exp_lons <- 1:5 +#'exp_lats <- 1:4 +#'obs <- rnorm(900) +#'dim(obs) <- c(lat = 12, lon = 15, sdate = 5) +#'obs_lons <- seq(1,5, 4/14) +#'obs_lats <- seq(1,4, 3/11) +#'res <- Intlr(exp = exp, obs = obs, exp_lats = exp_lats, exp_lons = exp_lons, obs_lats = obs_lats, +#'obs_lons = obs_lons, target_grid = 'r1280x640', lr_method = 'basic', int_method = 'conservative') +#'@export +Intlr <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, lr_method, target_grid = NULL, points = NULL, + int_method = NULL, method_point_interp = NULL, source_file_exp = NULL, source_file_obs = NULL, + predictors = NULL, lat_dim = "lat", lon_dim = "lon", sdate_dim = "sdate", time_dim = "time", + member_dim = "member", region = NULL, large_scale_predictor_dimname = 'vars', loocv = FALSE, + ncores = 1) { + + #----------------------------------- + # Checkings + #----------------------------------- + if (!inherits(lr_method, 'character')) { + stop("Parameter 'lr_method' must be of the class 'character'") + } + + if (!inherits(large_scale_predictor_dimname, 'character')) { + stop("Parameter 'large_scale_predictor_dimname' must be of the class 'character'") + } + + if (!inherits(loocv, 'logical')) { + stop("Parameter 'loocv' must be set to TRUE or FALSE") + } + + if (!inherits(lat_dim, 'character')) { + stop("Parameter 'lat_dim' must be of the class 'character'") + } + + if (!inherits(lon_dim, 'character')) { + stop("Parameter 'lon_dim' must be of the class 'character'") + } + + if (!inherits(sdate_dim, 'character')) { + stop("Parameter 'sdate_dim' must be of the class 'character'") + } + + if (!inherits(large_scale_predictor_dimname, 'character')) { + stop("Parameter 'large_scale_predictor_dimname' must be of the class 'character'") + } + + if (is.na(match(lon_dim, names(dim(exp)))) | is.na(match(lon_dim, names(dim(obs))))) { + stop("Missing longitude dimension in 'exp' and/or 'obs', or does not match the parameter ", + "'lon_dim'") + } + + if (is.na(match(lat_dim, names(dim(exp)))) | is.na(match(lat_dim, names(dim(obs))))) { + stop("Missing latitude dimension in 'exp' and/or 'obs', or does not match the parameter ", + "'lat_dim'") + } + + if (is.na(match(sdate_dim, names(dim(exp)))) | is.na(match(sdate_dim, names(dim(obs))))) { + stop("Missing start date dimension in 'exp' and/or 'obs', or does not match the parameter ", + "'sdate_dim'") + } + + if (!is.null(points) & (is.null(source_file_exp) | is.null(source_file_obs))) { + stop("No source files found. Source files for exp and obs must be provided in the parameters ", + "'source_file_exp' and 'source_file_obs', respectively.") + } + + if (!is.null(points) & is.null(method_point_interp)) { + stop("Please provide the interpolation method to interpolate gridded data to point locations ", + "through the parameter 'method_point_interp'.") + } + + # sdate must be the time dimension in the input data + stopifnot(sdate_dim %in% names(dim(exp))) + stopifnot(sdate_dim %in% names(dim(obs))) + + # the code is not yet prepared to handle members in the observations + restore_ens <- FALSE + if (member_dim %in% names(dim(obs))) { + if (identical(as.numeric(dim(obs)[member_dim]), 1)) { + obs <- ClimProjDiags::Subset(x = obs, along = member_dim, indices = 1, drop = 'selected') + restore_ens <- TRUE + } else { + stop("Not implemented for observations with members ('obs' can have 'member_dim', ", + "but it should be of length = 1).") + } + } + + # checkings for the parametre 'predictors' + if (!is.null(predictors)) { + if (!is.array(predictors)) { + stop("Parameter 'predictors' must be of the class 'array'") + } else { + # ensure the predictor variable name matches the parametre large_scale_predictor_dimname + stopifnot(large_scale_predictor_dimname %in% names(dim(predictors))) + stopifnot(sdate_dim %in% names(dim(predictors))) + stopifnot(dim(predictors)[sdate_dim] == dim(exp)[sdate_dim]) + } + } + + #----------------------------------- + # Interpolation + #----------------------------------- + if (lr_method != '4nn') { + + if (is.null(int_method)) { + stop("Parameter 'int_method' must be a character vector indicating the interpolation method. ", + "Accepted methods are con, bil, bic, nn, con2") + } + + if (is.null(region)) { + warning("The borders of the downscaling region have not been provided. Assuming the ", + "four borders of the downscaling region are defined by the first and last ", + "elements of the parametres 'obs_lats' and 'obs_lons'.") + region <- c(obs_lons[1], obs_lons[length(obs_lons)], obs_lats[1], obs_lats[length(obs_lats)]) + } + + exp_interpolated <- Interpolation(exp = exp, lats = exp_lats, lons = exp_lons, target_grid = target_grid, + points = points, method_point_interp = method_point_interp, + source_file = source_file_exp, lat_dim = lat_dim, lon_dim = lon_dim, + method_remap = int_method, region = region) + + # If after interpolating 'exp' data the coordinates do not match, the obs data is interpolated to + # the same grid to force the matching + if ((!.check_coords(lat1 = exp_interpolated$lat, lat2 = obs_lats, + lon1 = exp_interpolated$lon, lon2 = obs_lons)) | !is.null(points)) { + obs_interpolated <- Interpolation(exp = obs, lats = obs_lats, lons = obs_lons, target_grid = target_grid, + points = points, method_point_interp = method_point_interp, + source_file = source_file_obs, lat_dim = lat_dim, lon_dim = lon_dim, + method_remap = int_method, region = region) + + lats <- obs_interpolated$lat + lons <- obs_interpolated$lon + obs_interpolated <- obs_interpolated$data + } else { + obs_interpolated <- obs + lats <- obs_lats + lons <- obs_lons + } + } + + #----------------------------------- + # Linear regressions + #----------------------------------- + # Pointwise linear regression + # Predictor: model data + # Predictand: observations + if (lr_method == 'basic') { + predictor <- exp_interpolated$data + predictand <- obs_interpolated + + target_dims_predictor <- sdate_dim + target_dims_predictand <- sdate_dim + } + + # (Multi) linear regression with large-scale predictors + # Predictor: passed through the parameter 'predictors' by the user. Can be model or observations + # Predictand: model data + else if (lr_method == 'large-scale') { + if (is.null(predictors)) { + stop("The large-scale predictors must be passed through the parametre 'predictors'") + } + + predictand <- obs_interpolated + predictor <- predictors + + target_dims_predictor <- c(sdate_dim, large_scale_predictor_dimname) + target_dims_predictand <- sdate_dim + } + + # Multi-linear regression with the four nearest neighbours + # Predictors: model data + # Predictand: observations + else if (lr_method == '4nn') { + predictor <- find_nn(coar = exp, lats_hres = obs_lats, lons_hres = obs_lons, lats_coar = exp_lats, + lons_coar = exp_lons, lat_dim = lat_dim, lon_dim = lon_dim, nn = 4) + + if (is.null(points)) { + if (!is.null(target_grid)) { + warning("Interpolating to the 'obs' grid") + } + predictand <- obs + + lats <- obs_lats + lons <- obs_lons + } + # If the downscaling is to point locations: Once the 4 nearest neighbours have been found, + # interpolate to point locations + else { + predictor <- Interpolation(exp = predictor, lats = obs_lats, lons = obs_lons, target_grid = NULL, + points = points, method_point_interp = method_point_interp, + source_file = source_file_obs, method_remap = NULL, region = region) + + predictand <- Interpolation(exp = obs, lats = obs_lats, lons = obs_lons, target_grid = NULL, + points = points, method_point_interp = method_point_interp, + source_file = source_file_obs, method_remap = NULL, region = region) + + lats <- predictor$lat + lons <- predictor$lon + predictor <- predictor$data + predictand <- predictand$data + } + + target_dims_predictor <- c(sdate_dim,'nn') + target_dims_predictand <- sdate_dim + } + + else { + stop(paste0(lr_method, " method is not implemented yet")) + } + + # Apply the linear regressions + res <- Apply(list(predictor, predictand), target_dims = list(target_dims_predictor, target_dims_predictand), + fun = .intlr, loocv = loocv, ncores = ncores)$output1 + + names(dim(res))[1] <- sdate_dim + + # restore ensemble dimension in observations if it existed originally + if (restore_ens) { + predictand <- s2dv::InsertDim(predictand, posdim = 1, lendim = 1, name = member_dim) + } + + # Return a list of three elements + res <- list(data = res, obs = predictand, lon = lons, lat = lats) + + return(res) +} + +#----------------------------------- +# Atomic function to generate and apply the linear regressions +#----------------------------------- +.intlr <- function(x, y, loocv) { + + tmp_df <- data.frame(x = x, y = y) + + # if the data is all NA, force return return NA + if (all(is.na(tmp_df)) | (sum(apply(tmp_df, 2, function(x) !all(is.na(x)))) == 1)) { + + n <- nrow(tmp_df) + res <- rep(NA, n) + + } else { + # training + lm1 <- train_lm(df = tmp_df, loocv = loocv) + + # prediction + res <- pred_lm(lm1 = lm1, df = tmp_df, loocv = loocv) + } + + return(res) + +} + +#----------------------------------- +# Function to generate the linear regressions. +# Returns a list +#----------------------------------- +train_lm <- function(df, loocv) { + + # Remove columns containing only NA's + df <- df[ , apply(df, 2, function(x) !all(is.na(x)))] + + if (loocv) { + + lm1 <- lapply(1:nrow(df), function(j) lm(df[-j,], formula = y ~ .)) + + } else { + + lm1 <- list(lm(data = df, formula = y ~ .)) + } + + return(lm1) +} + +#----------------------------------- +# Function to apply the linear regressions. +#----------------------------------- +pred_lm <- function(df, lm1, loocv) { + + if (loocv) { + + pred_vals <- sapply(1:nrow(df), function(j) predict(lm1[[j]], df[j,])) + + } else { + + pred_vals_ls <- lapply(lm1, predict, data = df) + pred_vals <- unlist(pred_vals_ls) + } + + return(pred_vals) +} + +#----------------------------------- +# Function to find N nearest neighbours. +# 'coar' is an array with named dimensions +#----------------------------------- +find_nn <- function(coar, lats_hres, lons_hres, lats_coar, lons_coar, lat_dim, lon_dim, nn = 4) { + + # Sort the distances from closest to furthest + idx_lat <- as.array(sapply(lats_hres, function(x) order(abs(lats_coar - x))[1:nn])) + idx_lon <- as.array(sapply(lons_hres, function(x) order(abs(lons_coar - x))[1:nn])) + + names(dim(idx_lat)) <- c('nn', lat_dim) + names(dim(idx_lon)) <- c('nn', lon_dim) + + # obtain the values of the nearest neighbours + nearest <- Apply(list(coar, idx_lat, idx_lon), + target_dims = list(c(lat_dim, lon_dim), lat_dim, lon_dim), + fun = function(x, y, z) x[y, z])$output1 + + return(nearest) +} + + diff --git a/modules/Downscaling/tmp/LogisticReg.R b/modules/Downscaling/tmp/LogisticReg.R new file mode 100644 index 00000000..24be6936 --- /dev/null +++ b/modules/Downscaling/tmp/LogisticReg.R @@ -0,0 +1,497 @@ +#'@rdname CST_LogisticReg +#'@title Downscaling using interpolation and logistic regression. +#' +#'@author J. Ramon, \email{jaume.ramon@bsc.es} +#' +#'@description This function performs a downscaling using an interpolation and a logistic +#'regression. See \code{\link[nnet]{multinom}} for further details. It is recommended that +#'the observations are passed already in the target grid. Otherwise, the function will also +#'perform an interpolation of the observed field into the target grid. The coarse scale and +#'observation data can be either global or regional. In the latter case, the region is +#'defined by the user. In principle, the coarse and observation data are intended to be of +#'the same variable, although different variables can also be admitted. +#' +#'@param exp an 's2dv object' with named dimensions containing the experimental field on +#'the coarse scale for which the downscaling is aimed. The object must have, at least, +#'the dimensions latitude, longitude, start date and member. The object is expected to be +#'already subset for the desired region. Data can be in one or two integrated regions, e.g., +#'crossing the Greenwich meridian. To get the correct results in the latter case, +#'the borders of the region should be specified in the parameter 'region'. See parameter +#''region'. +#'@param obs an 's2dv object' with named dimensions containing the observational field. +#'The object must have, at least, the dimensions latitude, longitude and start date. The +#'object is expected to be already subset for the desired region. +#'@param target_grid a character vector indicating the target grid to be passed to CDO. +#'It must be a grid recognised by CDO or a NetCDF file. +#'@param int_method a character vector indicating the regridding method to be passed to CDORemap. +#'Accepted methods are "con", "bil", "bic", "nn", "con2". If "nn" method is to be used, CDO_1.9.8 +#'or newer version is required. +#'@param log_reg_method a character vector indicating the logistic regression method to be used. +#'Accepted methods are "ens_mean", "ens_mean_sd", "sorted_members". "ens_mean" uses the ensemble +#'mean anomalies as predictors in the logistic regression, "ens_mean_sd" uses the ensemble +#'mean anomalies and the ensemble spread (computed as the standard deviation of all the members) +#'as predictors in the logistic regression, and "sorted_members" considers all the members +#'ordered decreasingly as predictors in the logistic regression. Default method is "ens_mean". +#'@param probs_cat a numeric vector indicating the percentile thresholds separating the +#'climatological distribution into different classes (categories). Default to c(1/3, 2/3). See +#'\code{\link[easyVerification]{convert2prob}}. +#'@param return_most_likely_cat if TRUE, the function returns the most likely category. If +#'FALSE, the function returns the probabilities for each category. Default to FALSE. +#'@param points a list of two elements containing the point latitudes and longitudes +#'of the locations to downscale the model data. The list must contain the two elements +#'named as indicated in the parameters 'lat_dim' and 'lon_dim'. If the downscaling is +#'to a point location, only regular grids are allowed for exp and obs. Only needed if the +#'downscaling is to a point location. +#'@param method_point_interp a character vector indicating the interpolation method to interpolate +#'model gridded data into the point locations. Accepted methods are "nearest", "bilinear", "9point", +#'"invdist4nn", "NE", "NW", "SE", "SW". Only needed if the downscaling is to a point location. +#'@param lat_dim a character vector indicating the latitude dimension name in the element 'data' +#'in exp and obs. Default set to "lat". +#'@param lon_dim a character vector indicating the longitude dimension name in the element 'data' +#'in exp and obs. Default set to "lon". +#'@param sdate_dim a character vector indicating the start date dimension name in the element +#''data' in exp and obs. Default set to "sdate". +#'@param member_dim a character vector indicating the member dimension name in the element +#''data' in exp and obs. Default set to "member". +#'@param source_file a character vector with a path to an example file of the exp data. +#'Only needed if the downscaling is to a point location. +#'@param region a numeric vector indicating the borders of the region defined in obs. +#'It consists of four elements in this order: lonmin, lonmax, latmin, latmax. lonmin refers +#'to the left border, while lonmax refers to the right border. latmin indicates the lower +#'border, whereas latmax indicates the upper border. If set to NULL (default), the function +#'takes the first and last elements of the latitudes and longitudes. +#'@param loocv a logical vector indicating whether to perform leave-one-out cross-validation +#'in the fitting of the logistic regression. Default to FALSE. +#'@param ncores an integer indicating the number of cores to use in parallel computation. +#' +#'@import multiApply +#'@import nnet +#'@importFrom laply plyr +#' +#'@seealso \code{\link[nnet]{multinom}} +#' +#'@return An list of three elements. 'data' contains the dowscaled data, that could be either +#'in the form of probabilities for each category or the most likely category. 'lat' contains the +#'downscaled latitudes, and 'lon' the downscaled longitudes. +#' +#'@examples +#'exp <- rnorm(1500) +#'dim(exp) <- c(member = 5, lat = 4, lon = 5, sdate = 15) +#'exp_lons <- 1:5 +#'exp_lats <- 1:4 +#'obs <- rnorm(2700) +#'dim(obs) <- c(lat = 12, lon = 15, sdate = 15) +#'obs_lons <- seq(1,5, 4/14) +#'obs_lats <- seq(1,4, 3/11) +#'exp <- s2dv_cube(data = exp, lat = exp_lats, lon = exp_lons) +#'obs <- s2dv_cube(data = obs, lat = obs_lats, lon = obs_lons) +#'res <- CST_LogisticReg(exp = exp, obs = obs, int_method = 'bil', target_grid = 'r1280x640', +#'probs_cat = c(1/3, 2/3)) +#'@export +CST_LogisticReg <- function(exp, obs, target_grid, int_method = NULL, log_reg_method = "ens_mean", + probs_cat = c(1/3,2/3), return_most_likely_cat = FALSE, points = NULL, + method_point_interp = NULL, lat_dim = "lat", lon_dim = "lon", sdate_dim = "sdate", + member_dim = "member", region = NULL, loocv = FALSE, ncores = 1) { + + if (!inherits(exp,'s2dv_cube')) { + stop("Parameter 'exp' must be of the class 's2dv_cube'") + } + + if (!inherits(obs,'s2dv_cube')) { + stop("Parameter 'obs' must be of the class 's2dv_cube'") + } + + res <- LogisticReg(exp = exp$data, obs = obs$data, exp_lats = exp$lat, exp_lons = exp$lon, + obs_lats = obs$lat, obs_lons = obs$lon, target_grid = target_grid, + probs_cat = probs_cat, return_most_likely_cat = return_most_likely_cat, + int_method = int_method, log_reg_method = log_reg_method, points = points, + method_point_interp = method_point_interp, lat_dim = lat_dim, + lon_dim = lon_dim, sdate_dim = sdate_dim, member_dim = member_dim, + source_file = exp$source_files[1], region = region, loocv = loocv, + ncores = ncores) + + # Modify data, lat and lon in the origina s2dv_cube, adding the downscaled data + exp$data <- res$data + exp$lon <- res$lon + exp$lat <- res$lat + + obs$data <- res$obs + obs$lat <- res$lat + obs$lon <- res$lon + + res_s2dv <- list(exp = exp, obs = obs) + return(res_s2dv) +} + +#'@rdname LogisticReg +#'@title Downscaling using interpolation and logistic regression. +#' +#'@author J. Ramon, \email{jaume.ramon@bsc.es} +#' +#'@description This function performs a downscaling using an interpolation and a logistic +#'regression. See \code{\link[nnet]{multinom}} for further details. It is recommended that +#'the observations are passed already in the target grid. Otherwise, the function will also +#'perform an interpolation of the observed field into the target grid. The coarse scale and +#'observation data can be either global or regional. In the latter case, the region is +#'defined by the user. In principle, the coarse and observation data are intended to be of +#'the same variable, although different variables can also be admitted. +#' +#'@param exp an array with named dimensions containing the experimental field on the +#'coarse scale for which the downscaling is aimed. The object must have, at least, +#'the dimensions latitude, longitude, start date and member. The object is expected to be +#'already subset for the desired region. Data can be in one or two integrated regions, e.g., +#'crossing the Greenwich meridian. To get the correct results in the latter case, +#'the borders of the region should be specified in the parameter 'region'. See parameter +#''region'. +#'@param obs an array with named dimensions containing the observational field. The object +#'must have, at least, the dimensions latitude, longitude and start date. The object is +#'expected to be already subset for the desired region. +#'@param exp_lats a numeric vector containing the latitude values in 'exp'. Latitudes must +#'range from -90 to 90. +#'@param exp_lons a numeric vector containing the longitude values in 'exp'. Longitudes +#'can range from -180 to 180 or from 0 to 360. +#'@param obs_lats a numeric vector containing the latitude values in 'obs'. Latitudes must +#'range from -90 to 90. +#'@param obs_lons a numeric vector containing the longitude values in 'obs'. Longitudes +#'can range from -180 to 180 or from 0 to 360. +#'@param target_grid a character vector indicating the target grid to be passed to CDO. +#'It must be a grid recognised by CDO or a NetCDF file. +#'@param int_method a character vector indicating the regridding method to be passed to CDORemap. +#'Accepted methods are "con", "bil", "bic", "nn", "con2". If "nn" method is to be used, CDO_1.9.8 +#'or newer version is required. +#'@param log_reg_method a character vector indicating the logistic regression method to be used. +#'Accepted methods are "ens_mean", "ens_mean_sd", "sorted_members". "ens_mean" uses the ensemble +#'mean anomalies as predictors in the logistic regression, "ens_mean_sd" uses the ensemble +#'mean anomalies and the ensemble spread (computed as the standard deviation of all the members) +#'as predictors in the logistic regression, and "sorted_members" considers all the members +#'ordered decreasingly as predictors in the logistic regression. Default method is "ens_mean". +#'@param probs_cat a numeric vector indicating the percentile thresholds separating the +#'climatological distribution into different classes (categories). Default to c(1/3, 2/3). See +#'\code{\link[easyVerification]{convert2prob}}. +#'@param return_most_likely_cat if TRUE, the function returns the most likely category. If +#'FALSE, the function returns the probabilities for each category. Default to FALSE. +#'@param points a list of two elements containing the point latitudes and longitudes +#'of the locations to downscale the model data. The list must contain the two elements +#'named as indicated in the parameters 'lat_dim' and 'lon_dim'. If the downscaling is +#'to a point location, only regular grids are allowed for exp and obs. Only needed if the +#'downscaling is to a point location. +#'@param method_point_interp a character vector indicating the interpolation method to interpolate +#'model gridded data into the point locations. Accepted methods are "nearest", "bilinear", "9point", +#'"invdist4nn", "NE", "NW", "SE", "SW". Only needed if the downscaling is to a point location. +#'@param lat_dim a character vector indicating the latitude dimension name in the element 'data' +#'in exp and obs. Default set to "lat". +#'@param lon_dim a character vector indicating the longitude dimension name in the element 'data' +#'in exp and obs. Default set to "lon". +#'@param sdate_dim a character vector indicating the start date dimension name in the element +#''data' in exp and obs. Default set to "sdate". +#'@param member_dim a character vector indicating the member dimension name in the element +#''data' in exp and obs. Default set to "member". +#'@param source_file a character vector with a path to an example file of the exp data. +#'Only needed if the downscaling is to a point location. +#'@param region a numeric vector indicating the borders of the region defined in obs. +#'It consists of four elements in this order: lonmin, lonmax, latmin, latmax. lonmin refers +#'to the left border, while lonmax refers to the right border. latmin indicates the lower +#'border, whereas latmax indicates the upper border. If set to NULL (default), the function +#'takes the first and last elements of the latitudes and longitudes. +#'@param loocv a logical vector indicating whether to perform leave-one-out cross-validation +#'in the fitting of the logistic regression. Default to FALSE. +#'@param ncores an integer indicating the number of cores to use in parallel computation. +#' +#'@import multiApply +#'@import nnet +#'@importFrom laply plyr +#' +#'@seealso \code{\link[nnet]{multinom}} +#' +#'@return An list of three elements. 'data' contains the dowscaled data, that could be either +#'in the form of probabilities for each category or the most likely category. 'lat' contains the +#'downscaled latitudes, and 'lon' the downscaled longitudes. +#' +#'@examples +#'exp <- rnorm(1500) +#'dim(exp) <- c(member = 5, lat = 4, lon = 5, sdate = 15) +#'exp_lons <- 1:5 +#'exp_lats <- 1:4 +#'obs <- rnorm(2700) +#'dim(obs) <- c(lat = 12, lon = 15, sdate = 15) +#'obs_lons <- seq(1,5, 4/14) +#'obs_lats <- seq(1,4, 3/11) +#'res <- LogisticReg(exp = exp, obs = obs, exp_lats = exp_lats, exp_lons = exp_lons, +#'obs_lats = obs_lats, obs_lons = obs_lons, int_method = 'bil', target_grid = 'r1280x640', +#'probs_cat = c(1/3, 2/3)) +#'@export +LogisticReg <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, target_grid, + int_method = NULL, log_reg_method = "ens_mean", probs_cat = c(1/3,2/3), + return_most_likely_cat = FALSE, points = NULL, method_point_interp = NULL, + lat_dim = "lat", lon_dim = "lon", sdate_dim = "sdate", member_dim = "member", + source_file = NULL, region = NULL, loocv = FALSE, ncores = 1) { + + #----------------------------------- + # Checkings + #----------------------------------- + if (!inherits(target_grid, 'character')) { + stop("Parameter 'target_grid' must be of the class 'character'") + } + + if (!is.null(int_method) & !inherits(int_method, 'character')) { + stop("Parameter 'int_method' must be of the class 'character'") + } + + if (!is.null(method_point_interp) & !inherits(method_point_interp, 'character')) { + stop("Parameter 'method_point_interp' must be of the class 'character'") + } + + if (!inherits(lat_dim, 'character')) { + stop("Parameter 'lat_dim' must be of the class 'character'") + } + + if (!inherits(lon_dim, 'character')) { + stop("Parameter 'lon_dim' must be of the class 'character'") + } + + if (!inherits(sdate_dim, 'character')) { + stop("Parameter 'sdate_dim' must be of the class 'character'") + } + + if (!inherits(member_dim, 'character')) { + stop("Parameter 'member_dim' must be of the class 'character'") + } + + if (!is.null(source_file) & !inherits(source_file, 'character')) { + stop("Parameter 'source_file' must be of the class 'character'") + } + + if (!inherits(loocv, 'logical')) { + stop("Parameter 'loocv' must be set to TRUE or FALSE") + } + + if (is.na(match(lon_dim, names(dim(exp)))) | is.na(match(lon_dim, names(dim(obs))))) { + stop("Missing longitude dimension in 'exp' and/or 'obs', or does not match the parameter ", + "'lon_dim'") + } + + if (is.na(match(lat_dim, names(dim(exp)))) | is.na(match(lat_dim, names(dim(obs))))) { + stop("Missing latitude dimension in 'exp' and/or 'obs', or does not match the parameter ", + "'lat_dim'") + } + + if (is.na(match(sdate_dim, names(dim(exp)))) | is.na(match(sdate_dim, names(dim(obs))))) { + stop("Missing start date dimension in 'exp' and/or 'obs', or does not match the parameter ", + "'sdate_dim'") + } + + if (is.na(match(member_dim, names(dim(exp))))) { + stop("Missing member dimension in 'exp' and/or 'obs', or does not match the parameter ", + "'member_dim'") + } + + if (!is.null(points) & (is.null(source_file))) { + stop("No source files found. One source file for exp must be provided in the parameter 'source_file'.") + } + + if (!is.null(points) & is.null(method_point_interp)) { + stop("Please provide the interpolation method to interpolate gridded data to point locations ", + "through the parameter 'method_point_interp'.") + } + + if (is.null(region)) { + warning("The borders of the downscaling region have not been provided. Assuming the four borders ", + "of the downscaling region are defined by the first and last elements of the parametres ", + "'obs_lats' and 'obs_lons'.") + region <- c(obs_lons[1], obs_lons[length(obs_lons)], obs_lats[1], obs_lats[length(obs_lats)]) + } + + # the code is not yet prepared to handle members in the observations + restore_ens <- FALSE + if (member_dim %in% names(dim(obs))) { + if (identical(as.numeric(dim(obs)[member_dim]), 1)) { + restore_ens <- TRUE + obs <- ClimProjDiags::Subset(x = obs, along = member_dim, indices = 1, drop = 'selected') + } else { + stop("Not implemented for observations with members ('obs' can have 'member_dim', ", + "but it should be of length = 1).") + } + } + + exp_interpolated <- Interpolation(exp = exp, lats = exp_lats, lons = exp_lons, target_grid = target_grid, + method_remap = int_method, points = points, source_file = source_file, + lat_dim = lat_dim, lon_dim = lon_dim, method_point_interp = method_point_interp, + region = region) + + # compute ensemble mean anomalies + if (log_reg_method == "ens_mean") { + predictor <- get_ens_mean_anom(obj_ens = exp_interpolated$data, member_dim = member_dim, sdate_dim = sdate_dim) + + target_dims_predictor <- sdate_dim + } + else if (log_reg_method == "ens_mean_sd") { + ens_mean_anom <- get_ens_mean_anom(obj_ens = exp_interpolated$data, member_dim = member_dim, + sdate_dim = sdate_dim) + ens_sd <- get_ens_sd(obj_ens = exp_interpolated$data, member_dim = member_dim) + + #merge two arrays into one array of predictors + predictor <- abind(ens_mean_anom, ens_sd, along = 1/2) + names(dim(predictor)) <- c("pred", names(dim(ens_mean_anom))) + + target_dims_predictor <- c(sdate_dim, "pred") + } else if (log_reg_method == "sorted_members") { + predictor <- sort_members(obj_ens = exp_interpolated$data, member_dim = member_dim) + + target_dims_predictor <- c(sdate_dim, member_dim) + } else { + stop(paste0(log_reg_method, " not recognised or not implemented.")) + } + + # If after interpolating 'exp' data the coordinates do not match, the obs data is interpolated to + # the same grid to force the matching + if ((!.check_coords(lat1 = exp_interpolated$lat, lat2 = obs_lats, + lon1 = exp_interpolated$lon, lon2 = obs_lons)) | !is.null(points)) { + obs_interpolated <- Interpolation(exp = obs, lats = obs_lats, lons = obs_lons, target_grid = target_grid, + method_remap = int_method, points = points, source_file = source_file, + lat_dim = lat_dim, lon_dim = lon_dim, + method_point_interp = method_point_interp, region = region) + obs_ref <- obs_interpolated$data + } else { + obs_ref <- obs + } + + # convert observations to categorical predictands + obs_cat <- Apply(obs_ref, target_dims = sdate_dim, function(x) { + terc <- convert2prob(as.vector(x), prob = probs_cat) + apply(terc, 1, function(r) which (r == 1))}, + output_dims = sdate_dim)$output1 + + res <- Apply(list(predictor, obs_cat), target_dims = list(target_dims_predictor, sdate_dim), fun = function(x, y) + .log_reg(x = x, y = y, loocv = loocv), output_dims = c(sdate_dim, "category"))$output1 + + if (return_most_likely_cat) { + res <- Apply(res, target_dims = c(sdate_dim, "category"), most_likely_category, + output_dims = sdate_dim)$output1 + } + + # restore ensemble dimension in observations if it existed originally + if (restore_ens) { + obs_ref <- s2dv::InsertDim(obs_ref, posdim = 1, lendim = 1, name = member_dim) + } + + res <- list(data = res, obs = obs_ref, lon = exp_interpolated$lon, lat = exp_interpolated$lat) + + return(res) +} + +most_likely_category <- function(data) { +# data, expected dims: start date, category (in this order) + + if (all(is.na(data))) { + mlc <- rep(NA, nrow(data)) + } else { + mlc <- apply(data, 1, which.max) + } + return(mlc) +} + +sort_members <- function(obj_ens, member_dim) { + + sorted <- Apply(obj_ens, target_dims = member_dim, sort, decreasing = TRUE, na.last = TRUE)$output1 + + return(sorted) +} + +get_ens_sd <- function(obj_ens, member_dim) { + + # compute ensemble spread + ens_sd <- Apply(obj_ens, target_dims = member_dim, sd, na.rm = TRUE)$output1 + + return(ens_sd) +} + +get_ens_mean_anom <- function(obj_ens, member_dim, sdate_dim) { + + require(s2dv) + + # compute climatology + clim <- Apply(obj_ens, target_dims = c(member_dim, sdate_dim), mean)$output1 + + # compute ensemble mean + ens_mean <- Apply(obj_ens, target_dims = member_dim, mean, na.rm = TRUE)$output1 + + # compute ensemble mean anomalies + anom <- Ano(ens_mean, clim) + + return(anom) +} + +# atomic functions for logistic regressions +.log_reg <- function(x, y, loocv) { + + tmp_df <- data.frame(x = x, y = y) + + # if the data is all NA, force return return NA + if (all(is.na(tmp_df)) | (sum(apply(tmp_df, 2, function(x) !all(is.na(x)))) == 1)) { + + n <- nrow(tmp_df) + res <- matrix(NA, nrow = n, ncol = length(unique(tmp_df$y))) + + } else { + # training + lm1 <- train_lr(df = tmp_df, loocv = loocv) + + # prediction + res <- pred_lr(lm1 = lm1, df = tmp_df, loocv = loocv) + } + return(res) +} + +#----------------------------------- +# Function to train the logistic regressions. +#----------------------------------- +train_lr <- function(df, loocv) { + + require(nnet) + + # Remove columns containing only NA's + df <- df[ , apply(df, 2, function(x) !all(is.na(x)))] + + if (loocv) { + + lm1 <- lapply(1:nrow(df), function(j) multinom(y ~ ., data = df[ -j, ])) + + } else { + + lm1 <- list(multinom(y ~ ., data = df)) + + } + + return(lm1) +} + +#----------------------------------- +# Function to apply the logistic regressions. +#----------------------------------- +pred_lr <- function(df, lm1, loocv) { + + require(plyr) + + if (loocv) { + + # The error: "Error: Results must have the same dimensions." can + # appear when the number of sdates is insufficient + pred_vals_ls <- list() + for (j in 1:nrow(df)) { + pred_vals_ls[[j]] <- predict(lm1[[j]], df[j,], type = "probs") + } + + pred_vals <- laply(pred_vals_ls, .fun = as.array) + + } else { + + # type = class, probs + #pred_vals_ls <- lapply(lm1, predict, data = df, type = "probs") + #pred_vals <- unlist(pred_vals_ls) + pred_vals <- predict(lm1[[1]], df, type = "probs") + } + + return(pred_vals) +} + + diff --git a/modules/Downscaling/tmp/Utils.R b/modules/Downscaling/tmp/Utils.R new file mode 100644 index 00000000..4c727465 --- /dev/null +++ b/modules/Downscaling/tmp/Utils.R @@ -0,0 +1,31 @@ +.check_coords <- function(lat1, lon1, lat2, lon2) { + match <- TRUE + if (!((length(lat1) == length(lat2)) & (length(lon1) == length(lon2)))) { + match <- FALSE + } + return(match) +} + +# reorder dims to a reference array. If they do not exist, they are created +# example +#arr_ref <- array(NA, c(dataset = 1, sdate = 8, member = 3, ftime = 1, lon = 269, lat = 181)) +#arr_to_reorder <- array(NA, c(dataset = 1, member = 3, sdate = 8, lat = 181, lon = 269, pp = 1)) + +.reorder_dims <- function(arr_ref, arr_to_reorder) { + + miss_dims <- names(dim(arr_ref))[!(names(dim(arr_ref)) %in% names(dim(arr_to_reorder)))] + + if (length(miss_dims) != 0) { + for (m in seq(miss_dims)) { + arr_to_reorder <- InsertDim(data = arr_to_reorder, posdim = length(dim(arr_to_reorder)) + 1, lendim = 1, + name = miss_dims[m]) + } + } + + # TODO: add code to reorder dimensions and put the non-common dimensions at the end + + orddim <- match(names(dim(arr_ref)),names(dim(arr_to_reorder))) + return(Reorder(data = arr_to_reorder, order = orddim)) +} + + -- GitLab From 64036d79a200d0b28782376bb35460b1bb83cda0 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Thu, 9 Mar 2023 13:29:44 +0100 Subject: [PATCH 071/388] Source functions from temporary folder --- modules/Downscaling/Downscaling.R | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/modules/Downscaling/Downscaling.R b/modules/Downscaling/Downscaling.R index d8522b65..97732c40 100644 --- a/modules/Downscaling/Downscaling.R +++ b/modules/Downscaling/Downscaling.R @@ -10,12 +10,12 @@ #░ ░ ░ ## TODO: Remove once CSDownscale is on CRAN ## TODO: Move recipe checks to check_recipe() -source('/esarchive/scratch/jramon/GitLab_jramon/downscaling/csdownscale/R/Interpolation.R') -source('/esarchive/scratch/jramon/GitLab_jramon/downscaling/csdownscale/R/Intbc.R') -source('/esarchive/scratch/jramon/GitLab_jramon/downscaling/csdownscale/R/Intlr.R') -source('/esarchive/scratch/jramon/GitLab_jramon/downscaling/csdownscale/R/Analogs.R') -source('/esarchive/scratch/jramon/GitLab_jramon/downscaling/csdownscale/R/LogisticReg.R') -source('/esarchive/scratch/jramon/GitLab_jramon/downscaling/csdownscale/R/Utils.R') +source('modules/Downscaling/tmp/Interpolation.R') +source('modules/Downscaling/tmp/Intbc') +source('modules/Downscaling/tmp/Intlr.R') +source('modules/Downscaling/tmp/Analogs.R') +source('modules/Downscaling/tmp/LogisticReg.R') +source('modules/Downscaling/tmp/Utils.R') #source("https://earth.bsc.es/gitlab/external/cstools/-/raw/master/R/CST_BiasCorrection.R") -- GitLab From ffacccc6e90f51ab3a153748a8a5b3cda9600892 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Fri, 10 Mar 2023 10:22:41 +0100 Subject: [PATCH 072/388] Remove unneeded call to grDevices --- tools/libs.R | 1 - 1 file changed, 1 deletion(-) diff --git a/tools/libs.R b/tools/libs.R index a0767f76..387d9b90 100644 --- a/tools/libs.R +++ b/tools/libs.R @@ -13,7 +13,6 @@ library(CSTools) library(lubridate) library(PCICt) library(RColorBrewer) -library(grDevices) # # library(parallel) # library(pryr) # To check mem usage. -- GitLab From 575fe297b608820cd129b2cd04a2e308ca81d61f Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Tue, 14 Mar 2023 11:02:29 +0100 Subject: [PATCH 073/388] Fix bug (error when sourcing function) and modify path names for downscaling --- modules/Downscaling/Downscaling.R | 2 +- modules/Saving/paths2save.R | 11 ++++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/modules/Downscaling/Downscaling.R b/modules/Downscaling/Downscaling.R index 97732c40..23586788 100644 --- a/modules/Downscaling/Downscaling.R +++ b/modules/Downscaling/Downscaling.R @@ -11,7 +11,7 @@ ## TODO: Remove once CSDownscale is on CRAN ## TODO: Move recipe checks to check_recipe() source('modules/Downscaling/tmp/Interpolation.R') -source('modules/Downscaling/tmp/Intbc') +source('modules/Downscaling/tmp/Intbc.R') source('modules/Downscaling/tmp/Intlr.R') source('modules/Downscaling/tmp/Analogs.R') source('modules/Downscaling/tmp/LogisticReg.R') diff --git a/modules/Saving/paths2save.R b/modules/Saving/paths2save.R index 93196b86..b2023ae6 100644 --- a/modules/Saving/paths2save.R +++ b/modules/Saving/paths2save.R @@ -92,8 +92,17 @@ get_dir <- function(recipe, agg = "global") { fcst.sdate <- paste0("hcst-", recipe$Analysis$Time$sdate) } } - + # Calibration or downscaling method calib.method <- tolower(recipe$Analysis$Workflow$Calibration$method) + if ((calib.method == "raw") && + (!is.null(recipe$Analysis$Workflow$Downscaling))) { + if (recipe$Analysis$Workflow$Downscaling$type == "none") { + calib.method <- "raw" + } else { + calib.method <- recipe$Analysis$Workflow$Downscaling$type + } + } + # Frequency store.freq <- recipe$Analysis$Variables$freq ## TODO: Change "_country" switch(tolower(agg), -- GitLab From 571293eba68fb32b2d334913714c1da1d90714e9 Mon Sep 17 00:00:00 2001 From: aho Date: Tue, 14 Mar 2023 13:05:50 +0100 Subject: [PATCH 074/388] GRIB loading module, testing recipe and script, archive --- conf/archive_GRIB.yml | 24 ++ .../griddes_GRIB_system5_m1.txt | 246 ++++++++++++++ modules/Loading/GRIB/GrbLoad.R | 227 +++++++++++++ modules/Loading/GRIB/s2dv_cube.R | 227 +++++++++++++ modules/Loading/Loading_GRIB.R | 299 ++++++++++++++++++ .../recipe_GRIB_system5_era5.yml | 50 +++ modules/test_GRIB.R | 57 ++++ 7 files changed, 1130 insertions(+) create mode 100644 conf/archive_GRIB.yml create mode 100644 conf/grid_description/griddes_GRIB_system5_m1.txt create mode 100644 modules/Loading/GRIB/GrbLoad.R create mode 100644 modules/Loading/GRIB/s2dv_cube.R create mode 100644 modules/Loading/Loading_GRIB.R create mode 100644 modules/Loading/testing_recipes/recipe_GRIB_system5_era5.yml create mode 100644 modules/test_GRIB.R diff --git a/conf/archive_GRIB.yml b/conf/archive_GRIB.yml new file mode 100644 index 00000000..c01e6a11 --- /dev/null +++ b/conf/archive_GRIB.yml @@ -0,0 +1,24 @@ +archive: + src: "/esarchive/scratch/aho/tmp/GRIB/" #"/mars/" + System: + ECMWF-SEAS5: + name: "ECMWF SEAS5" + institution: "European Centre for Medium-Range Weather Forecasts" + src: "GRIB_system5_tas_CORRECTED/" + monthly_mean: {"tas":""} + nmember: + fcst: 51 + hcst: 51 + calendar: "proleptic_gregorian" + time_stamp_lag: "+1" + reference_grid: "conf/grid_description/griddes_GRIB_system5_m1.txt" + Reference: + ERA5: + name: "ERA5" + institution: "European Centre for Medium-Range Weather Forecasts" + src: "GRIB_era5_tas/" + monthly_mean: {"tas":""} + calendar: "standard" + reference_grid: "conf/grid_description/griddes_GRIB_system5_m1.txt" + + diff --git a/conf/grid_description/griddes_GRIB_system5_m1.txt b/conf/grid_description/griddes_GRIB_system5_m1.txt new file mode 100644 index 00000000..7e38b73a --- /dev/null +++ b/conf/grid_description/griddes_GRIB_system5_m1.txt @@ -0,0 +1,246 @@ +# +# gridID system5_m1 +# +gridtype = lonlat +gridsize = 819200 +xname = longitude +xlongname = longitude +xunits = degrees_east +yname = latitude +ylongname = latitude +yunits = degrees_north +xsize = 1280 +ysize = 640 +xvals = 0 0.2812502 0.5625004 0.8437506 1.125001 1.406251 1.687501 1.968751 2.250002 + 2.531252 2.812502 3.093752 3.375002 3.656253 3.937503 4.218753 4.500003 +4.781253 5.062504 5.343754 5.625004 5.906254 6.187504 6.468754 6.750005 +7.031255 7.312505 7.593755 7.875005 8.156256 8.437506 8.718756 9.000006 +9.281256 9.562507 9.843757 10.12501 10.40626 10.68751 10.96876 11.25001 +11.53126 11.81251 12.09376 12.37501 12.65626 12.93751 13.21876 13.50001 +13.78126 14.06251 14.34376 14.62501 14.90626 15.18751 15.46876 15.75001 +16.03126 16.31251 16.59376 16.87501 17.15626 17.43751 17.71876 18.00001 +18.28126 18.56251 18.84376 19.12501 19.40626 19.68751 19.96876 20.25001 +20.53126 20.81251 21.09376 21.37501 21.65627 21.93752 22.21877 22.50002 +22.78127 23.06252 23.34377 23.62502 23.90627 24.18752 24.46877 24.75002 +25.03127 25.31252 25.59377 25.87502 26.15627 26.43752 26.71877 27.00002 +27.28127 27.56252 27.84377 28.12502 28.40627 28.68752 28.96877 29.25002 +29.53127 29.81252 30.09377 30.37502 30.65627 30.93752 31.21877 31.50002 +31.78127 32.06252 32.34377 32.62502 32.90627 33.18752 33.46877 33.75002 +34.03127 34.31252 34.59377 34.87502 35.15627 35.43752 35.71877 36.00003 +36.28128 36.56253 36.84378 37.12503 37.40628 37.68753 37.96878 38.25003 +38.53128 38.81253 39.09378 39.37503 39.65628 39.93753 40.21878 40.50003 +40.78128 41.06253 41.34378 41.62503 41.90628 42.18753 42.46878 42.75003 +43.03128 43.31253 43.59378 43.87503 44.15628 44.43753 44.71878 45.00003 +45.28128 45.56253 45.84378 46.12503 46.40628 46.68753 46.96878 47.25003 +47.53128 47.81253 48.09378 48.37503 48.65628 48.93753 49.21878 49.50003 +49.78128 50.06253 50.34378 50.62504 50.90629 51.18754 51.46879 51.75004 +52.03129 52.31254 52.59379 52.87504 53.15629 53.43754 53.71879 54.00004 +54.28129 54.56254 54.84379 55.12504 55.40629 55.68754 55.96879 56.25004 +56.53129 56.81254 57.09379 57.37504 57.65629 57.93754 58.21879 58.50004 +58.78129 59.06254 59.34379 59.62504 59.90629 60.18754 60.46879 60.75004 +61.03129 61.31254 61.59379 61.87504 62.15629 62.43754 62.71879 63.00004 +63.28129 63.56254 63.84379 64.12504 64.40629 64.68754 64.9688 65.25005 65.5313 +65.81255 66.0938 66.37505 66.6563 66.93755 67.2188 67.50005 67.7813 68.06255 +68.3438 68.62505 68.9063 69.18755 69.4688 69.75005 70.0313 70.31255 70.5938 +70.87505 71.1563 71.43755 71.7188 72.00005 72.2813 72.56255 72.8438 73.12505 +73.4063 73.68755 73.9688 74.25005 74.5313 74.81255 75.0938 75.37505 75.6563 +75.93755 76.2188 76.50005 76.7813 77.06255 77.3438 77.62505 77.9063 78.18755 +78.4688 78.75005 79.0313 79.31256 79.59381 79.87506 80.15631 80.43756 80.71881 +81.00006 81.28131 81.56256 81.84381 82.12506 82.40631 82.68756 82.96881 +83.25006 83.53131 83.81256 84.09381 84.37506 84.65631 84.93756 85.21881 +85.50006 85.78131 86.06256 86.34381 86.62506 86.90631 87.18756 87.46881 +87.75006 88.03131 88.31256 88.59381 88.87506 89.15631 89.43756 89.71881 +90.00006 90.28131 90.56256 90.84381 91.12506 91.40631 91.68756 91.96881 +92.25006 92.53131 92.81256 93.09381 93.37506 93.65632 93.93757 94.21882 +94.50007 94.78132 95.06257 95.34382 95.62507 95.90632 96.18757 96.46882 +96.75007 97.03132 97.31257 97.59382 97.87507 98.15632 98.43757 98.71882 +99.00007 99.28132 99.56257 99.84382 100.1251 100.4063 100.6876 100.9688 +101.2501 101.5313 101.8126 102.0938 102.3751 102.6563 102.9376 103.2188 +103.5001 103.7813 104.0626 104.3438 104.6251 104.9063 105.1876 105.4688 +105.7501 106.0313 106.3126 106.5938 106.8751 107.1563 107.4376 107.7188 +108.0001 108.2813 108.5626 108.8438 109.1251 109.4063 109.6876 109.9688 +110.2501 110.5313 110.8126 111.0938 111.3751 111.6563 111.9376 112.2188 +112.5001 112.7813 113.0626 113.3438 113.6251 113.9063 114.1876 114.4688 +114.7501 115.0313 115.3126 115.5938 115.8751 116.1563 116.4376 116.7188 +117.0001 117.2813 117.5626 117.8438 118.1251 118.4063 118.6876 118.9688 +119.2501 119.5313 119.8126 120.0938 120.3751 120.6563 120.9376 121.2188 +121.5001 121.7813 122.0626 122.3438 122.6251 122.9063 123.1876 123.4688 +123.7501 124.0313 124.3126 124.5938 124.8751 125.1563 125.4376 125.7188 +126.0001 126.2813 126.5626 126.8438 127.1251 127.4063 127.6876 127.9688 +128.2501 128.5313 128.8126 129.0938 129.3751 129.6563 129.9376 130.2188 +130.5001 130.7813 131.0626 131.3438 131.6251 131.9063 132.1876 132.4688 +132.7501 133.0313 133.3126 133.5938 133.8751 134.1563 134.4376 134.7188 +135.0001 135.2813 135.5626 135.8438 136.1251 136.4063 136.6876 136.9688 +137.2501 137.5313 137.8126 138.0938 138.3751 138.6563 138.9376 139.2188 +139.5001 139.7813 140.0626 140.3438 140.6251 140.9063 141.1876 141.4688 +141.7501 142.0313 142.3126 142.5938 142.8751 143.1563 143.4376 143.7188 +144.0001 144.2814 144.5626 144.8439 145.1251 145.4064 145.6876 145.9689 +146.2501 146.5314 146.8126 147.0939 147.3751 147.6564 147.9376 148.2189 +148.5001 148.7814 149.0626 149.3439 149.6251 149.9064 150.1876 150.4689 +150.7501 151.0314 151.3126 151.5939 151.8751 152.1564 152.4376 152.7189 +153.0001 153.2814 153.5626 153.8439 154.1251 154.4064 154.6876 154.9689 +155.2501 155.5314 155.8126 156.0939 156.3751 156.6564 156.9376 157.2189 +157.5001 157.7814 158.0626 158.3439 158.6251 158.9064 159.1876 159.4689 +159.7501 160.0314 160.3126 160.5939 160.8751 161.1564 161.4376 161.7189 +162.0001 162.2814 162.5626 162.8439 163.1251 163.4064 163.6876 163.9689 +164.2501 164.5314 164.8126 165.0939 165.3751 165.6564 165.9376 166.2189 +166.5001 166.7814 167.0626 167.3439 167.6251 167.9064 168.1876 168.4689 +168.7501 169.0314 169.3126 169.5939 169.8751 170.1564 170.4376 170.7189 +171.0001 171.2814 171.5626 171.8439 172.1251 172.4064 172.6876 172.9689 +173.2501 173.5314 173.8126 174.0939 174.3751 174.6564 174.9376 175.2189 +175.5001 175.7814 176.0626 176.3439 176.6251 176.9064 177.1876 177.4689 +177.7501 178.0314 178.3126 178.5939 178.8751 179.1564 179.4376 179.7189 +180.0001 180.2814 180.5626 180.8439 181.1251 181.4064 181.6876 181.9689 +182.2501 182.5314 182.8126 183.0939 183.3751 183.6564 183.9376 184.2189 +184.5001 184.7814 185.0626 185.3439 185.6251 185.9064 186.1876 186.4689 +186.7501 187.0314 187.3126 187.5939 187.8751 188.1564 188.4376 188.7189 +189.0001 189.2814 189.5626 189.8439 190.1251 190.4064 190.6876 190.9689 +191.2501 191.5314 191.8126 192.0939 192.3751 192.6564 192.9376 193.2189 +193.5001 193.7814 194.0626 194.3439 194.6251 194.9064 195.1876 195.4689 +195.7501 196.0314 196.3126 196.5939 196.8751 197.1564 197.4376 197.7189 +198.0001 198.2814 198.5626 198.8439 199.1251 199.4064 199.6876 199.9689 +200.2501 200.5314 200.8126 201.0939 201.3751 201.6564 201.9376 202.2189 +202.5001 202.7814 203.0626 203.3439 203.6251 203.9064 204.1876 204.4689 +204.7501 205.0314 205.3126 205.5939 205.8751 206.1564 206.4376 206.7189 +207.0001 207.2814 207.5626 207.8439 208.1251 208.4064 208.6876 208.9689 +209.2501 209.5314 209.8126 210.0939 210.3751 210.6564 210.9376 211.2189 +211.5001 211.7814 212.0626 212.3439 212.6251 212.9064 213.1876 213.4689 +213.7501 214.0314 214.3126 214.5939 214.8751 215.1564 215.4376 215.7189 +216.0002 216.2814 216.5627 216.8439 217.1252 217.4064 217.6877 217.9689 +218.2502 218.5314 218.8127 219.0939 219.3752 219.6564 219.9377 220.2189 +220.5002 220.7814 221.0627 221.3439 221.6252 221.9064 222.1877 222.4689 +222.7502 223.0314 223.3127 223.5939 223.8752 224.1564 224.4377 224.7189 +225.0002 225.2814 225.5627 225.8439 226.1252 226.4064 226.6877 226.9689 +227.2502 227.5314 227.8127 228.0939 228.3752 228.6564 228.9377 229.2189 +229.5002 229.7814 230.0627 230.3439 230.6252 230.9064 231.1877 231.4689 +231.7502 232.0314 232.3127 232.5939 232.8752 233.1564 233.4377 233.7189 +234.0002 234.2814 234.5627 234.8439 235.1252 235.4064 235.6877 235.9689 +236.2502 236.5314 236.8127 237.0939 237.3752 237.6564 237.9377 238.2189 +238.5002 238.7814 239.0627 239.3439 239.6252 239.9064 240.1877 240.4689 +240.7502 241.0314 241.3127 241.5939 241.8752 242.1564 242.4377 242.7189 +243.0002 243.2814 243.5627 243.8439 244.1252 244.4064 244.6877 244.9689 +245.2502 245.5314 245.8127 246.0939 246.3752 246.6564 246.9377 247.2189 +247.5002 247.7814 248.0627 248.3439 248.6252 248.9064 249.1877 249.4689 +249.7502 250.0314 250.3127 250.5939 250.8752 251.1564 251.4377 251.7189 +252.0002 252.2814 252.5627 252.8439 253.1252 253.4064 253.6877 253.9689 +254.2502 254.5314 254.8127 255.0939 255.3752 255.6564 255.9377 256.2189 +256.5002 256.7814 257.0627 257.3439 257.6252 257.9064 258.1877 258.4689 +258.7502 259.0314 259.3127 259.5939 259.8752 260.1564 260.4377 260.7189 +261.0002 261.2814 261.5627 261.8439 262.1252 262.4064 262.6877 262.9689 +263.2502 263.5314 263.8127 264.0939 264.3752 264.6564 264.9377 265.2189 +265.5002 265.7814 266.0627 266.3439 266.6252 266.9064 267.1877 267.4689 +267.7502 268.0314 268.3127 268.5939 268.8752 269.1564 269.4377 269.7189 +270.0002 270.2814 270.5627 270.8439 271.1252 271.4064 271.6877 271.9689 +272.2502 272.5314 272.8127 273.0939 273.3752 273.6564 273.9377 274.2189 +274.5002 274.7814 275.0627 275.3439 275.6252 275.9064 276.1877 276.4689 +276.7502 277.0314 277.3127 277.5939 277.8752 278.1564 278.4377 278.7189 +279.0002 279.2814 279.5627 279.8439 280.1252 280.4064 280.6877 280.9689 +281.2502 281.5314 281.8127 282.0939 282.3752 282.6564 282.9377 283.2189 +283.5002 283.7814 284.0627 284.3439 284.6252 284.9064 285.1877 285.4689 +285.7502 286.0314 286.3127 286.5939 286.8752 287.1564 287.4377 287.7189 +288.0002 288.2815 288.5627 288.844 289.1252 289.4065 289.6877 289.969 290.2502 +290.5315 290.8127 291.094 291.3752 291.6565 291.9377 292.219 292.5002 292.7815 +293.0627 293.344 293.6252 293.9065 294.1877 294.469 294.7502 295.0315 295.3127 +295.594 295.8752 296.1565 296.4377 296.719 297.0002 297.2815 297.5627 297.844 +298.1252 298.4065 298.6877 298.969 299.2502 299.5315 299.8127 300.094 300.3752 +300.6565 300.9377 301.219 301.5002 301.7815 302.0627 302.344 302.6252 302.9065 +303.1877 303.469 303.7502 304.0315 304.3127 304.594 304.8752 305.1565 305.4377 +305.719 306.0002 306.2815 306.5627 306.844 307.1252 307.4065 307.6877 307.969 +308.2502 308.5315 308.8127 309.094 309.3752 309.6565 309.9377 310.219 310.5002 +310.7815 311.0627 311.344 311.6252 311.9065 312.1877 312.469 312.7502 313.0315 +313.3127 313.594 313.8752 314.1565 314.4377 314.719 315.0002 315.2815 315.5627 +315.844 316.1252 316.4065 316.6877 316.969 317.2502 317.5315 317.8127 318.094 +318.3752 318.6565 318.9377 319.219 319.5002 319.7815 320.0627 320.344 320.6252 +320.9065 321.1877 321.469 321.7502 322.0315 322.3127 322.594 322.8752 323.1565 +323.4377 323.719 324.0002 324.2815 324.5627 324.844 325.1252 325.4065 325.6877 +325.969 326.2502 326.5315 326.8127 327.094 327.3752 327.6565 327.9377 328.219 +328.5002 328.7815 329.0627 329.344 329.6252 329.9065 330.1877 330.469 330.7502 +331.0315 331.3127 331.594 331.8752 332.1565 332.4377 332.719 333.0002 333.2815 +333.5627 333.844 334.1252 334.4065 334.6877 334.969 335.2502 335.5315 335.8127 +336.094 336.3752 336.6565 336.9377 337.219 337.5002 337.7815 338.0627 338.344 +338.6252 338.9065 339.1877 339.469 339.7502 340.0315 340.3127 340.594 340.8752 +341.1565 341.4377 341.719 342.0002 342.2815 342.5627 342.844 343.1252 343.4065 +343.6877 343.969 344.2502 344.5315 344.8127 345.094 345.3752 345.6565 345.9377 +346.219 346.5002 346.7815 347.0627 347.344 347.6252 347.9065 348.1877 348.469 +348.7502 349.0315 349.3127 349.594 349.8752 350.1565 350.4377 350.719 351.0002 +351.2815 351.5627 351.844 352.1252 352.4065 352.6877 352.969 353.2502 353.5315 +353.8127 354.094 354.3752 354.6565 354.9377 355.219 355.5002 355.7815 356.0627 +356.344 356.6252 356.9065 357.1877 357.469 357.7502 358.0315 358.3127 358.594 +358.8752 359.1565 359.4377 359.719 +yvals = 89.78488 89.5062 89.22588 88.94519 88.66436 88.38346 88.10252 87.82156 87.54058 +87.25959 86.97859 86.69759 86.41658 86.13557 85.85456 85.57355 85.29253 +85.01151 84.73049 84.44947 84.16845 83.88742 83.6064 83.32538 83.04435 82.76333 +82.4823 82.20128 81.92025 81.63923 81.3582 81.07717 80.79615 80.51512 80.23409 +79.95306 79.67204 79.39101 79.10998 78.82895 78.54792 78.26689 77.98587 +77.70484 77.42381 77.14278 76.86175 76.58072 76.29969 76.01867 75.73764 +75.45661 75.17558 74.89455 74.61352 74.33249 74.05146 73.77043 73.4894 73.20837 +72.92734 72.64631 72.36528 72.08426 71.80323 71.5222 71.24117 70.96014 70.67911 +70.39808 70.11705 69.83602 69.55499 69.27396 68.99293 68.7119 68.43087 68.14984 +67.86881 67.58778 67.30675 67.02572 66.74469 66.46366 66.18263 65.9016 65.62057 +65.33954 65.05851 64.77748 64.49645 64.21542 63.93439 63.65336 63.37233 63.0913 +62.81027 62.52924 62.24821 61.96718 61.68615 61.40512 61.12409 60.84306 +60.56203 60.281 59.99997 59.71894 59.43791 59.15688 58.87585 58.59482 58.31379 +58.03276 57.75173 57.4707 57.18967 56.90864 56.62761 56.34658 56.06555 55.78452 +55.50349 55.22246 54.94143 54.6604 54.37937 54.09834 53.81731 53.53628 53.25525 +52.97422 52.69319 52.41216 52.13113 51.85009 51.56906 51.28803 51.007 50.72597 +50.44494 50.16391 49.88288 49.60185 49.32082 49.03979 48.75876 48.47773 48.1967 +47.91567 47.63464 47.35361 47.07258 46.79155 46.51052 46.22949 45.94846 +45.66743 45.3864 45.10537 44.82434 44.54331 44.26228 43.98125 43.70022 43.41919 +43.13816 42.85713 42.5761 42.29507 42.01404 41.73301 41.45198 41.17094 40.88991 +40.60888 40.32785 40.04682 39.76579 39.48476 39.20373 38.9227 38.64167 38.36064 +38.07961 37.79858 37.51755 37.23652 36.95549 36.67446 36.39343 36.1124 35.83137 +35.55034 35.26931 34.98828 34.70725 34.42622 34.14519 33.86416 33.58313 33.3021 +33.02107 32.74004 32.45901 32.17797 31.89694 31.61591 31.33488 31.05385 +30.77282 30.49179 30.21076 29.92973 29.6487 29.36767 29.08664 28.80561 28.52458 +28.24355 27.96252 27.68149 27.40046 27.11943 26.8384 26.55737 26.27634 25.99531 +25.71428 25.43325 25.15222 24.87119 24.59016 24.30913 24.0281 23.74706 23.46603 +23.185 22.90397 22.62294 22.34191 22.06088 21.77985 21.49882 21.21779 20.93676 +20.65573 20.3747 20.09367 19.81264 19.53161 19.25058 18.96955 18.68852 18.40749 +18.12646 17.84543 17.5644 17.28337 17.00234 16.72131 16.44028 16.15925 15.87822 +15.59718 15.31615 15.03512 14.75409 14.47306 14.19203 13.911 13.62997 13.34894 +13.06791 12.78688 12.50585 12.22482 11.94379 11.66276 11.38173 11.1007 10.81967 +10.53864 10.25761 9.976578 9.695547 9.414517 9.133487 8.852456 8.571426 +8.290396 8.009365 7.728335 7.447305 7.166274 6.885244 6.604213 6.323183 +6.042153 5.761122 5.480092 5.199062 4.918031 4.637001 4.355971 4.07494 3.79391 +3.512879 3.231849 2.950819 2.669788 2.388758 2.107728 1.826697 1.545667 +1.264637 0.9836063 0.7025759 0.4215455 0.1405152 -0.1405152 -0.4215455 +-0.7025759 -0.9836063 -1.264637 -1.545667 -1.826697 -2.107728 -2.388758 +-2.669788 -2.950819 -3.231849 -3.512879 -3.79391 -4.07494 -4.355971 -4.637001 +-4.918031 -5.199062 -5.480092 -5.761122 -6.042153 -6.323183 -6.604213 -6.885244 +-7.166274 -7.447305 -7.728335 -8.009365 -8.290396 -8.571426 -8.852456 -9.133487 +-9.414517 -9.695547 -9.976578 -10.25761 -10.53864 -10.81967 -11.1007 -11.38173 +-11.66276 -11.94379 -12.22482 -12.50585 -12.78688 -13.06791 -13.34894 -13.62997 +-13.911 -14.19203 -14.47306 -14.75409 -15.03512 -15.31615 -15.59718 -15.87822 +-16.15925 -16.44028 -16.72131 -17.00234 -17.28337 -17.5644 -17.84543 -18.12646 +-18.40749 -18.68852 -18.96955 -19.25058 -19.53161 -19.81264 -20.09367 -20.3747 +-20.65573 -20.93676 -21.21779 -21.49882 -21.77985 -22.06088 -22.34191 -22.62294 +-22.90397 -23.185 -23.46603 -23.74706 -24.0281 -24.30913 -24.59016 -24.87119 +-25.15222 -25.43325 -25.71428 -25.99531 -26.27634 -26.55737 -26.8384 -27.11943 +-27.40046 -27.68149 -27.96252 -28.24355 -28.52458 -28.80561 -29.08664 -29.36767 +-29.6487 -29.92973 -30.21076 -30.49179 -30.77282 -31.05385 -31.33488 -31.61591 +-31.89694 -32.17797 -32.45901 -32.74004 -33.02107 -33.3021 -33.58313 -33.86416 +-34.14519 -34.42622 -34.70725 -34.98828 -35.26931 -35.55034 -35.83137 -36.1124 +-36.39343 -36.67446 -36.95549 -37.23652 -37.51755 -37.79858 -38.07961 -38.36064 +-38.64167 -38.9227 -39.20373 -39.48476 -39.76579 -40.04682 -40.32785 -40.60888 +-40.88991 -41.17094 -41.45198 -41.73301 -42.01404 -42.29507 -42.5761 -42.85713 +-43.13816 -43.41919 -43.70022 -43.98125 -44.26228 -44.54331 -44.82434 -45.10537 +-45.3864 -45.66743 -45.94846 -46.22949 -46.51052 -46.79155 -47.07258 -47.35361 +-47.63464 -47.91567 -48.1967 -48.47773 -48.75876 -49.03979 -49.32082 -49.60185 +-49.88288 -50.16391 -50.44494 -50.72597 -51.007 -51.28803 -51.56906 -51.85009 +-52.13113 -52.41216 -52.69319 -52.97422 -53.25525 -53.53628 -53.81731 -54.09834 +-54.37937 -54.6604 -54.94143 -55.22246 -55.50349 -55.78452 -56.06555 -56.34658 +-56.62761 -56.90864 -57.18967 -57.4707 -57.75173 -58.03276 -58.31379 -58.59482 +-58.87585 -59.15688 -59.43791 -59.71894 -59.99997 -60.281 -60.56203 -60.84306 +-61.12409 -61.40512 -61.68615 -61.96718 -62.24821 -62.52924 -62.81027 -63.0913 +-63.37233 -63.65336 -63.93439 -64.21542 -64.49645 -64.77748 -65.05851 -65.33954 +-65.62057 -65.9016 -66.18263 -66.46366 -66.74469 -67.02572 -67.30675 -67.58778 +-67.86881 -68.14984 -68.43087 -68.7119 -68.99293 -69.27396 -69.55499 -69.83602 +-70.11705 -70.39808 -70.67911 -70.96014 -71.24117 -71.5222 -71.80323 -72.08426 +-72.36528 -72.64631 -72.92734 -73.20837 -73.4894 -73.77043 -74.05146 -74.33249 +-74.61352 -74.89455 -75.17558 -75.45661 -75.73764 -76.01867 -76.29969 -76.58072 +-76.86175 -77.14278 -77.42381 -77.70484 -77.98587 -78.26689 -78.54792 -78.82895 +-79.10998 -79.39101 -79.67204 -79.95306 -80.23409 -80.51512 -80.79615 -81.07717 +-81.3582 -81.63923 -81.92025 -82.20128 -82.4823 -82.76333 -83.04435 -83.32538 +-83.6064 -83.88742 -84.16845 -84.44947 -84.73049 -85.01151 -85.29253 -85.57355 +-85.85456 -86.13557 -86.41658 -86.69759 -86.97859 -87.25959 -87.54058 -87.82156 +-88.10252 -88.38346 -88.66436 -88.94519 -89.22588 -89.5062 -89.78488 diff --git a/modules/Loading/GRIB/GrbLoad.R b/modules/Loading/GRIB/GrbLoad.R new file mode 100644 index 00000000..2ba86bea --- /dev/null +++ b/modules/Loading/GRIB/GrbLoad.R @@ -0,0 +1,227 @@ +#---------------------------------------------------------------------------------- +# Use gribr package to load GRIB files +# Assume that all the messages have the same metadata; one message is one time step +# If exp, has.memb is a number; if obs, has.memb = NULL +# syear_time_dim is the time attr dim of exp as the input for obs +#---------------------------------------------------------------------------------- +GrbLoad <- function (dat, time_step = 1, has.memb = NULL, syear_time_dim = NULL) { + + library(gribr) + + result <- vector('list', length = length(dat)) + times <- vector('list', length = length(dat)) + times <- lapply(times, '[<-', rep(NA, length(time_step))) #NOTE: length is 0 (slower in loop?) +# times <- lapply(times, '[<-', .POSIXct(rep(NA, length(time_step)), tz = 'UTC')) + + for (dat_i in 1:length(dat)) { + + file_to_load <- grib_open(dat[[dat_i]]) + + #---------------------------------------- + # HOW TO FIND THE VALUE OF EACH FTIME STEP? + #---------------------------------------- + #NOTE: ValidityTime is not considered now. So if the time frequency is less than daily, it has problem. + + # METHOD 1: Get first message to figure out the validityDate/Time of each message + #NOTE: gm1$validityDate should be "s", "m", "h", etc. according to document. But our files have "1". + gm1 <- grib_get_message(file_to_load, 1) + first_ftime <- as.character(gm1$validityDate) + first_ftime_hour <- gm1$validityTime + # For monthly data + #NOTE: may not be correct because it is calculated by the first message + cdo_time_attr <- clock::add_months(as.POSIXct(paste0(first_ftime, ' ', first_ftime_hour), + format = "%Y%m%d %H", tz = 'UTC'), time_step - 1) + cdo_time <- format(cdo_time_attr, "%Y%m%d") + +# # METHOD 2: Use cdo showtimestamp (DEPENDENCY!) +# #TODO: Change to method 1 because can't predict what cdo will produce +# cdo_time <- system(paste0("cdo showtimestamp ", dat[[dat_i]]), intern = T) +# cdo_time <- strsplit(cdo_time, " ")[[length(cdo_time)]] +# cdo_time <- cdo_time[which(cdo_time != "")] +## # Check if there is member dim or not +## has_memb <- ifelse((length(unique(cdo_time)) == length(cdo_time)), FALSE, TRUE) +# if (has.memb) memb_dim_length <- length(cdo_time)/length(unique(cdo_time)) +# cdo_time <- unique(cdo_time)[time_step] #"2000-12-01T00:00:00" +# cdo_time_attr <- as.POSIXct(gsub('T', ' ', cdo_time), tz = 'UTC') +# cdo_time <- sapply(sapply(cdo_time, strsplit, "T"), '[[', 1) +# cdo_time <- gsub('-', '', cdo_time) + + #---------------------------------------- + + # all members + ftimes: length should be memb*ftime (e.g., 51*7) + ## Method 1: use grib_select and real values to filter + memb_ftime <- grib_select(file_to_load, list(validityDate = cdo_time)) + if (inherits(memb_ftime, 'gribMessage')) memb_ftime <- list(memb_ftime) + +# ## Method 2: Calculate which messages are the desired ones +# gm <- grib_get_message(file_to_load, time_step) +# if (length(time_step) == 1) { +# gm <- list(gm) +# } + + ################################################################## + # Get data as an array [longitude, latitude, (memb*)time] + ################################################################## + if (grepl("reduced", memb_ftime[[1]]$gridType)) { + #NOTE: Need to call gribr::grib_expand_grids because I don't know how to make .Call("gribr_redtoreg") work outside that function + # https://github.com/nawendt/gribr/blob/main/src/redtoreg.c + values_l <- vector('list', length = length(memb_ftime)) + for (gm_i in 1:length(memb_ftime)) { + values_l[[gm_i]] <- grib_expand_grids(memb_ftime[[gm_i]]) + } + result[[dat_i]] <- array(unlist(values_l), dim = c(longitude = memb_ftime[[1]]$Nj * 2, latitude = memb_ftime[[1]]$Nj, time = length(values_l))) + + } else { + result[[dat_i]] <- .grib_expand_grids(memb_ftime) + } + + ################################################################## + # Get metadata + ################################################################## + ## (1-1) Everything from the first message of first file + if (dat_i == 1) { + gm1 <- memb_ftime[[1]] + ## (1-1) Everything from the first message of first file +# dims <- dim(result[[dat_i]]) +# attributes(result) <- gm1 +# # turn result into array again +# dim(result[[dat_i]]) <- dims + + ## (1-2) Only save the necessary attributes + attr(result, 'edition') <- gm1$edition + attr(result, 'shortName') <- gm1$shortName + #NOTE: Tune varaible name!! + if (gm1$shortName == '2t') attr(result, 'shortName') <- 'tas' + attr(result, 'name') <- gm1$name + attr(result, 'units') <- gm1$units +# attr(result, 'validityDate') <- gm1$validityDate +# attr(result, 'validityTime') <- gm1$validityTime + + ## (2) Lat and lon + latlon <- grib_latlons(gm1, expand = TRUE) + lats <- unique(as.vector(c(latlon$lats))) + lons <- unique(as.vector(c(latlon$lons))) + + #NOTE: Find another way to check regular grid; Ni/Nj not always exist +# if (has.key(gm1, "Nx") && has.key(gm1, "Ny")) { +# nx <- gm1$Nx +# ny <- gm1$Ny +# } else { +# nx <- gm1$Ni +# ny <- gm1$Nj +# } +# if (length(lats) != ny | length(lons) != nx) { +# stop("Latitude and Longitude seem to be non-regular grid.") +# } + attr(result, 'longitude') <- lons + attr(result, 'latitude') <- lats + + } + +#-------------------------------- +#NOTE: Just use cdo_time +# ## (3) Date and time: Need to get from each massage +# for (time_i in 1:length(time_step)) { +# gm1 <- gm[[time_i]] +# #NOTE: What's the correct time? +## dates <- gm1$validityDate #Date of validity of the forecast +## times <- gm1$validityTime +## dates <- gm1$dataDate # Reference date +# times[[dat_i]][time_i] <- as.POSIXct( +# lubridate::ymd_hms(paste0(paste(gm1$year,gm1$month,gm1$day, '-'), ' ', +# paste(gm1$hour, gm1$minute, gm1$second, ':'))) +# ) +# } + times[[dat_i]] <- cdo_time_attr +#-------------------------------- + + ################################################################## + grib_close(file_to_load) + gc() + ################################################################## +} #for loop dat + + # Turn result list into array + attr <- attributes(result) + res_dim <- c(dim(result[[1]]), syear = length(result)) #[longitude, latitude, (memb*)time, syear] + result <- unlist(result) + dim(result) <- res_dim + + # Generate date/time attributes + times <- array(unlist(times), dim = c(time = length(time_step), syear = length(dat), + sday = 1, sweek = 1)) + times <- s2dv::Reorder(times, c('sday', 'sweek', 'syear', 'time')) + if (!is.null(syear_time_dim)) dim(times) <- syear_time_dim + times <- as.POSIXct(times, origin = '1970-01-01', tz = 'UTC') + + # Reshape and reorder array + if (is.null(has.memb)) { # obs doesn't have memb; reshape syear/time dim + result <- s2dv::Reorder(result, c("syear", "time", "latitude", "longitude")) + result <- array(result, dim = c(dat = 1, var = 1, + syear_time_dim, dim(result)[3:4])) + } else { + result <- array(result, dim = c(dim(result)[1:2], ensemble = has.memb, + time = length(time_step), dim(result)[4])) + result <- s2dv::Reorder(result, c("syear", "time", "latitude", "longitude", "ensemble")) + dim(result) <- c(dat = 1, var = 1, sday = 1, sweek = 1, dim(result)) + } + + # Add attributes back + attr$dim <- dim(result) + attributes(result) <- attr + attr(result, 'time') <- times + + return(result) +} + +######################################################################### +######################################################################### + +.grib_expand_grids <- function(gribMessages, vector = FALSE) { + # gribMessages is a list of multiple messages + gribMessage <- gribMessages[[1]] + + if (gribr::has.key(gribMessage, "Nx") && gribr::has.key(gribMessage, "Ny")) { + nx <- gribMessage$Nx + ny <- gribMessage$Ny + } else { + nx <- gribMessage$Ni + ny <- gribMessage$Nj + } + + if (is.null(nx) || is.null(ny)) { + stop("Unsupported grid type: ", gribMessage$gridType) + } + + if (grepl("reduced", gribMessage$gridType)) { + #TODO: This part is not used now. + nx <- ny * 2 + values <- .Call("gribr_redtoreg", nx, gribMessage$pl, + gribMessage$values) + values <- matrix(values, nx, ny, + byrow = gribMessage$jPointsAreConsecutive) + +# values_l <- vector('list', length = length(gribMessages)) +# for (gm_i in 1:length(gribMessages)) { +# values <- .Call("gribr_redtoreg", nx, gribMessages[[gm_i]]$pl, +# gribMessages[[gm_i]]$values) +# values <- matrix(values, nx, ny, +# byrow = gribMessage$jPointsAreConsecutive) +# values_l[[gm_i]] <- values +# } + + } else { +# values <- matrix(gribMessage$values, nx, ny, +# byrow = gribMessage$jPointsAreConsecutive) + values_l <- lapply(gribMessages, '[[', 'values') + values_l <- lapply(values_l, matrix, nx, ny, byrow = gribMessage$jPointsAreConsecutive) + values <- array(unlist(values_l), dim = c(longitude = nx, latitude = ny, time = length(values_l))) + } + + if (vector) { + values <- as.numeric(values) + } + + values +} + diff --git a/modules/Loading/GRIB/s2dv_cube.R b/modules/Loading/GRIB/s2dv_cube.R new file mode 100644 index 00000000..d44b99e2 --- /dev/null +++ b/modules/Loading/GRIB/s2dv_cube.R @@ -0,0 +1,227 @@ +#'Creation of a 's2dv_cube' object +#' +#'@description This function allows to create an 's2dv_cube' object by passing +#'information through its parameters. This function will be needed if the data +#'hasn't been loaded using CST_Load or has been transformed with other methods. +#'An 's2dv_cube' object has many different components including metadata. This +#'function will allow to create 's2dv_cube' objects even if not all elements +#'are defined and for each expected missed parameter a warning message will be +#'returned. +#' +#'@author Perez-Zanon Nuria, \email{nuria.perez@bsc.es} +#' +#'@param data A multidimensional array with named dimensions, typically with +#' dimensions: dataset, member, sdate, ftime, lat and lon. +#'@param coords A named list with elements of the coordinates corresponding to +#' the dimensions of the data parameter. The names and length of each element +#' must correspond to the names of the dimensions. If any coordinate is not +#' provided, it is set as an index vector with the values from 1 to the length +#' of the corresponding dimension. +#'@param varName A character string indicating the abbreviation of the variable +#' name. +#'@param metadata A named list where each element is a variable containing the +#' corresponding information. The information can be contained in a list of +#' lists for each variable. +#'@param Datasets Character strings indicating the names of the dataset. It +#' there are multiple datasets it can be a vector of its names or a list of +#' lists with additional information. +#'@param Dates A POSIXct array of time dimensions containing the Dates. +#'@param when A time stamp of the date when the data has been loaded. This +#' parameter is also found in Load() and Start() functions output. +#'@param source_files A vector of character strings with complete paths to all +#' the found files involved in loading the data. +#'@param \dots Additional elements to be added in the object. They will be +#' stored in the end of 'attrs' element. Multiple elements are accepted. +#' +#'@return The function returns an object of class 's2dv_cube' with the following +#' elements in the structure:\cr +#'\itemize{ +#' \item{'data', array with named dimensions.} +#' \item{'dims', named vector of the data dimensions.} +#' \item{'coords', named list with elements of the coordinates corresponding to +#' the dimensions of the data parameter. If any coordinate is not provided, it +#' is set as an index vector with the values from 1 to the length of the +#' corresponding dimension. The attribute 'indices' indicates wether the +#' coordinate is an index vector (TRUE) or not (FALSE).} +#' \item{'attrs', named list with elements: +#' \itemize{ +#' \item{'Dates', array with named temporal dimensions of class 'POSIXct' from +#' time values in the data.} +#' \item{'Variable', has the following components: +#' \itemize{ +#' \item{'varName', with the short name of the loaded variable as specified +#' in the parameter 'var'.} +#' \item{''metadata', named list of elements with variable metadata. +#' They can be from coordinates variables (e.g. longitude) or +#' main variables (e.g. 'var').} +#' } +#' } +#' \item{'Datasets', character strings indicating the names of the dataset.} +#' \item{'source_files', a vector of character strings with complete paths to +#' all the found files involved in loading the data.} +#' \item{'when', a time stamp of the date issued by the Start() or Load() call to +#' obtain the data.} +#' \item{'load_parameters', it contains the components used in the arguments to +#' load the data from Start() or Load() functions.} +#' } +#' } +#'} +#' +#'@seealso \code{\link[s2dv]{Load}} and \code{\link{CST_Load}} +#'@examples +#'exp_original <- 1:100 +#'dim(exp_original) <- c(lat = 2, time = 10, lon = 5) +#'exp1 <- s2dv_cube(data = exp_original) +#'class(exp1) +#'coords <- list(lon = seq(-10, 10, 5), lat = c(45, 50)) +#'exp2 <- s2dv_cube(data = exp_original, coords = coords) +#'class(exp2) +#'metadata <- list(tas = list(level = '2m')) +#'exp3 <- s2dv_cube(data = exp_original, coords = coords, +#' varName = 'tas', metadata = metadata) +#'class(exp3) +#'Dates = as.POSIXct(paste0(rep("01", 10), rep("01", 10), 1990:1999), format = "%d%m%Y") +#'dim(Dates) <- c(time = 10) +#'exp4 <- s2dv_cube(data = exp_original, coords = coords, +#' varName = 'tas', metadata = metadata, +#' Dates = Dates) +#'class(exp4) +#'exp5 <- s2dv_cube(data = exp_original, coords = coords, +#' varName = 'tas', metadata = metadata, +#' Dates = Dates, when = "2019-10-23 19:15:29 CET") +#'class(exp5) +#'exp6 <- s2dv_cube(data = exp_original, coords = coords, +#' varName = 'tas', metadata = metadata, +#' Dates = Dates, +#' when = "2019-10-23 19:15:29 CET", +#' source_files = c("/path/to/file1.nc", "/path/to/file2.nc")) +#'class(exp6) +#'exp7 <- s2dv_cube(data = exp_original, coords = coords, +#' varName = 'tas', metadata = metadata, +#' Dates = Dates, +#' when = "2019-10-23 19:15:29 CET", +#' source_files = c("/path/to/file1.nc", "/path/to/file2.nc"), +#' Datasets = list( +#' exp1 = list(InitializationsDates = list(Member_1 = "01011990", +#' Members = "Member_1")))) +#'class(exp7) +#'dim(exp_original) <- c(dataset = 1, member = 1, time = 10, lat = 2, lon = 5) +#'exp8 <- s2dv_cube(data = exp_original, coords = coords, +#' varName = 'tas', metadata = metadata, +#' Dates = Dates, original_dates = Dates) +#'class(exp8) +#'@export +s2dv_cube <- function(data, coords = NULL, varName = NULL, metadata = NULL, + Datasets = NULL, Dates = NULL, when = NULL, + source_files = NULL, ...) { + + # data + if (is.null(data) | !is.array(data) | is.null(names(dim(data)))) { + stop("Parameter 'data' must be an array with named dimensions.") + } + # dims + dims <- dim(data) + + ## coords + if (!is.null(coords)) { + if (!all(names(coords) %in% names(dims))) { + coords <- coords[-which(!names(coords) %in% names(dims))] + } + for (i_coord in names(dims)) { + if (i_coord %in% names(coords)) { + if (length(coords[[i_coord]]) != dims[i_coord]) { + warning(paste0("Coordinate '", i_coord, "' has different lenght as ", + "its dimension and it will not be used.")) + coords[[i_coord]] <- 1:dims[i_coord] + attr(coords[[i_coord]], 'indices') <- TRUE + } else { + attr(coords[[i_coord]], 'indices') <- FALSE + } + } else { + warning(paste0("Coordinate '", i_coord, "' is not provided ", + "and it will be set as index in element coords.")) + coords[[i_coord]] <- 1:dims[i_coord] + attr(coords[[i_coord]], 'indices') <- TRUE + } + } + } else { + coords <- sapply(names(dims), function(x) 1:dims[x]) + for (i in 1:length(coords)) { + attr(coords[[i]], "indices") <- TRUE + } + } + + ## attrs + attrs <- list() + # Dates + if (is.null(Dates)) { + warning("Parameter 'Dates' is not provided so the metadata ", + "of 's2dv_cube' object will be incomplete.") + attrs$Dates <- NULL + } else if (length(Dates) == 1 & inherits(Dates[1], "POSIXct")) { + attrs$Dates <- Dates + } else { + if (!is.array(Dates)) { + warning("Parameter 'Dates' must be an array with named time dimensions.") + } else { + if (is.null(names(dim(Dates)))) { + warning("Parameter 'Dates' must have dimension names.") + } else if (!all(names(dim(Dates)) %in% names(dims))) { + warning("Parameter 'Dates' must have the corresponding time dimension names in 'data'.") + } else { + if (inherits(Dates[1], "POSIXct")) { + attrs$Dates <- Dates + } else { + warning("Parameter 'Dates' must be of class 'POSIXct'.") + } + } + } + } + # Variable + if (is.null(varName)) { + warning("Parameter 'varName' is not provided so the metadata ", + "of 's2dv_cube' object will be incomplete.") + attrs$Variable$varName <- NULL + } else { + if (!is.character(varName)) { + warning("Parameter 'varName' must be a character.") + } else { + attrs$Variable$varName <- varName + } + } + if (is.null(metadata)) { + warning("Parameter 'metadata' is not provided so the metadata ", + "of 's2dv_cube' object will be incomplete.") + attrs$Variable$metadata <- NULL + } else { + if (!is.list(metadata)) { + metadata <- list(metadata) + } + attrs$Variable$metadata <- metadata + } + # Datasets + if (!is.null(Datasets)) { + attrs$Datasets <- Datasets + } + # when + if (!is.null(when)) { + attrs$when <- when + } + # source_files + if (!is.null(source_files)) { + attrs$source_files <- source_files + } + # dots + dots <- list(...) + if (length(dots) != 0) { + for (i_arg in 1:length(dots)) { + attrs[[names(dots)[[i_arg]]]] <- dots[[i_arg]] + } + } + + ## object + object <- list(data = data, dims = dims, coords = coords, attrs = attrs) + class(object) <- 's2dv_cube' + return(object) +} + diff --git a/modules/Loading/Loading_GRIB.R b/modules/Loading/Loading_GRIB.R new file mode 100644 index 00000000..cfac3df1 --- /dev/null +++ b/modules/Loading/Loading_GRIB.R @@ -0,0 +1,299 @@ +################################################# +# Load GRIB files from MARS +################################################# + +source('modules/Loading/GRIB/GrbLoad.R') +library(yaml) +library(clock) + +load_datasets <- function(recipe) { + + + # Set params + #------------------------------------------------------------------- + + # get recipe info + hcst.inityear <- recipe$Analysis$Time$hcst_start + hcst.endyear <- recipe$Analysis$Time$hcst_end + hcst.sdate <- recipe$Analysis$Time$sdate + hcst.ftime <- as.numeric(recipe$Analysis$Time$ftime_min):as.numeric(recipe$Analysis$Time$ftime_max) + fcst.year <- recipe$Analysis$Time$fcst_year + lats.min <- recipe$Analysis$Region$latmin # can only be -90 + lats.max <- recipe$Analysis$Region$latmax # can only be 90 + lons.min <- recipe$Analysis$Region$lonmin # can only be 0 + lons.max <- recipe$Analysis$Region$lonmax # can only be 360 + ref.name <- recipe$Analysis$Datasets$Reference$name + exp.name <- recipe$Analysis$Datasets$System$name + variable <- recipe$Analysis$Variables$name #'tas' + store.freq <- recipe$Analysis$Variables$freq + + # get MARS datasets dict: + archive <- read_yaml("/esarchive/scratch/aho/git/aho-testtest/GRIB/GrbLoad/archive_GRIB.yml")$archive + exp_descrip <- archive$System[[exp.name]] + freq.hcst <- unlist(exp_descrip[[store.freq]][variable]) + reference_descrip <- archive$Reference[[ref.name]] + freq.obs <- unlist(reference_descrip[[store.freq]][variable]) + obs.dir <- reference_descrip$src + fcst.dir <- exp_descrip$src + hcst.dir <- exp_descrip$src + #NOTE: We can use this info in GrbLoad() to substitute param 'has.memb' + fcst.nmember <- exp_descrip$nmember$fcst + hcst.nmember <- exp_descrip$nmember$hcst + + print("========== PARAMETERS RETRIEVED. ==========") + + # Load hindcast + #------------------------------------------------------------------- + +## original file dir +#exp_path <- "/esarchive/exp/ecmwf/system5_m1/original_files/fcmean_od_sfc_msmm_ecmf/" +## soft link to original file dir +#exp_path <- "/esarchive/scratch/aho/tmp/GRIB/GRIB_system5_tas/" #files are not correct +# The correct files +#exp_path <- "/esarchive/scratch/aho/tmp/GRIB/GRIB_system5_tas_CORRECTED/" + + hcst.path <- paste0(archive$src, hcst.dir) + hcst.year <- paste0(as.numeric(hcst.inityear):as.numeric(hcst.endyear)) + hcst.files <- paste0(hcst.path, variable, '_', hcst.year, hcst.sdate, '.grb') + + hcst <- GrbLoad(dat = as.list(hcst.files), time_step = hcst.ftime, has.memb = hcst.nmember) + + print("========== HCST LOADED. ==========") + + # Load forecast + #------------------------------------------------------------------- + if (!is.null(fcst.year)) { + fcst.path <- paste0(archive$src, hcst.dir) + fcst.files <- paste0(fcst.path, variable, '_', fcst.year, hcst.sdate, '.grb') + + fcst <- GrbLoad(dat = as.list(fcst.files), time_step = hcst.ftime, has.memb = fcst.nmember) + } else { + fcst <- NULL + } + + print("========== FCST LOADED. ==========") + + # Load reference + #------------------------------------------------------------------- +#obs_path <- "/esarchive/scratch/aho/tmp/GRIB/GRIB_era5_tas/" + obs.path <- paste0(archive$src, obs.dir) + # Use hcst time attr to load obs + hcst_times <- attr(hcst, 'time') + hcst_times_strings <- format(hcst_times, '%Y%m') + + obs.files <- paste0(obs.path, variable, '_', hcst_times_strings, '.grb') + + #NOTE: only 1 time step in each obs file + obs <- GrbLoad(dat = as.list(obs.files), time_step = 1, has.memb = NULL, syear_time_dim = dim(hcst_times)) + + print("========== OBS LOADED. ==========") + + +################################################################################# + +#dim(hcst) +# syear time latitude longitude ensemble +# 4 3 640 1280 51 + +##BEFORE TRANSFER TO S2DV_CUBE +#str(hcst) +# num [1:4, 1:3, 1:640, 1:1280, 1:51] 252 252 252 252 251 ... +# - attr(*, "edition")= num 1 +# - attr(*, "shortName")= chr "2t" +# - attr(*, "longitude")= num [1:1280] 0 0.281 0.563 0.844 1.125 ... +# - attr(*, "latitude")= num [1:640] 89.8 89.5 89.2 88.9 88.7 ... +# - attr(*, "time")= POSIXct[1:12], format: "2000-12-01" "2001-12-01" ... + +#dim(attr(hcst, 'time')) +#syear time +# 4 3 + +##BEFORE TRANSFER TO S2DV_CUBE +#str(obs) +# num [1:4, 1:3, 1:640, 1:1280] 251 251 251 251 251 ... +# - attr(*, "edition")= num 1 +# - attr(*, "shortName")= chr "2t" +# - attr(*, "longitude")= num [1:1280] 0 0.281 0.562 0.844 1.125 ... +# - attr(*, "latitude")= num [1:640] 89.8 89.5 89.2 88.9 88.7 ... +# - attr(*, "time")= POSIXct[1:12], format: "2000-12-01" "2001-12-01" ... + +################################################################################# + + # Regridding + #------------------------------------------------------------------- + regrid.method <- recipe$Analysis$Regrid$method + regrid.type <- recipe$Analysis$Regrid$type + if (!is.null(regrid.method) & !is.null(regrid.type)) { + if (regrid.type == 'to_reference') { + gridtype <- exp_descrip$reference_grid + #NOTE: Do we need force_remap? + tmp <- s2dv::CDORemap(hcst, lons = attr(hcst, 'longitude'), lats = attr(hcst, 'latitude'), + grid = gridtype, method = regrid.method, force_remap = TRUE) + hcst <- tmp$data_array + attr(hcst, 'latitude') <- tmp$lats + attr(hcst, 'longitude') <- tmp$lons + + if (!is.null(fcst)) { + tmp <- s2dv::CDORemap(fcst, lons = attr(fcst, 'longitude'), lats = attr(fcst, 'latitude'), + grid = gridtype, method = regrid.method, force_remap = TRUE) + fcst <- tmp$data_array + attr(fcst, 'latitude') <- tmp$lats + attr(fcst, 'longitude') <- tmp$lons + } + + } else if (regrid.type == 'to_system') { + gridtype <- reference_descrip$reference_grid + tmp <- s2dv::CDORemap(obs, lons = attr(obs, 'longitude'), lats = attr(obs, 'latitude'), + grid = gridtype, method = regrid.method, force_remap = TRUE) + obs <- tmp$data_array + attr(obs, 'latitude') <- tmp$lats + attr(obs, 'longitude') <- tmp$lons + + } else if (regrid.type != 'none') { + gridtype <- recipe$Analysis$Regrid$type + # hcst + tmp <- s2dv::CDORemap(hcst, lons = attr(hcst, 'longitude'), lats = attr(hcst, 'latitude'), + grid = gridtype, method = regrid.method, force_remap = TRUE) + hcst <- tmp$data_array + attr(hcst, 'latitude') <- tmp$lats + attr(hcst, 'longitude') <- tmp$lons + # fcst + if (!is.null(fcst)) { + tmp <- s2dv::CDORemap(fcst, lons = attr(fcst, 'longitude'), lats = attr(fcst, 'latitude'), + grid = gridtype, method = regrid.method, force_remap = TRUE) + fcst <- tmp$data_array + attr(fcst, 'latitude') <- tmp$lats + attr(fcst, 'longitude') <- tmp$lons + } + # obs + tmp <- s2dv::CDORemap(obs, lons = attr(obs, 'longitude'), lats = attr(obs, 'latitude'), + grid = gridtype, method = regrid.method, force_remap = TRUE) + obs <- tmp$data_array + attr(obs, 'latitude') <- tmp$lats + attr(obs, 'longitude') <- tmp$lons + } + + } + + print("========== REGRID DONE. ==========") + + + # Turn into s2dv_cube + #------------------------------------------------------------------- + # hcst + metadata_list <- vector("list", length = 1) + names(metadata_list) <- variable + metadata_list[[variable]] <- list(long_name = attr(hcst, 'name'), + units = attr(hcst, 'units')) + load_parameters_list <- list(dat1 = list(file_date = list(paste0(hcst.year, hcst.sdate)))) + + hcst <- s2dv_cube(data = array(hcst, dim = dim(hcst)), + coords = list(dat = 'dat1', + var = variable, + sday = 1, + sweek = 1, + syear = hcst.year, + time = hcst.ftime, + latitude = attr(hcst, 'latitude'), + longitude = attr(hcst, 'longitude'), + ensemble = 1:hcst.nmember), + varName = attr(hcst, 'shortName'), + metadata = metadata_list, + Dates = attributes(hcst)$time, + source_files = hcst.files, + load_parameters = load_parameters_list, + # extra attrs + gribEdition = attr(hcst, 'edition')) + + # fcst + if (!is.null(fcst)) { + metadata_list <- vector("list", length = 1) + names(metadata_list) <- variable + metadata_list[[variable]] <- list(long_name = attr(fcst, 'name'), + units = attr(fcst, 'units')) + load_parameters_list <- list(dat1 = list(file_date = list(paste0(fcst.year, hcst.sdate)))) + + fcst <- s2dv_cube(data = array(fcst, dim = dim(fcst)), + coords = list(dat = 'dat1', + var = variable, + sday = 1, + sweek = 1, + syear = fcst.year, + time = hcst.ftime, + latitude = attr(fcst, 'latitude'), + longitude = attr(fcst, 'longitude'), + ensemble = 1:fcst.nmember), + varName = attr(fcst, 'shortName'), + metadata = metadata_list, + Dates = attributes(fcst)$time, + source_files = fcst.files, + load_parameters = load_parameters_list, + gribEdition = attr(fcst, 'edition')) + } + + # obs + metadata_list <- vector("list", length = 1) + names(metadata_list) <- variable + metadata_list[[variable]] <- list(long_name = attr(obs, 'name'), + units = attr(obs, 'units')) + load_parameters_list <- list(dat1 = list(file_date = list(hcst_times_strings))) + + obs <- s2dv_cube(data = array(obs, dim = dim(obs)), + coords = list(dat = 'dat1', + var = variable, + sday = 1, + sweek = 1, + #NOTE: Can we directly use hcst info? + syear = hcst.year, + time = hcst.ftime, + latitude = attr(obs, 'latitude'), + longitude = attr(obs, 'longitude')), + varName = attr(obs, 'shortName'), + metadata = metadata_list, + Dates = attributes(obs)$time, + source_files = obs.files, + load_parameters = load_parameters_list, + gribEdition = attr(obs, 'edition')) + + +#str(hcst) +#List of 4 +# $ data : num [1, 1, 1, 1, 1:2, 1:2, 1:640, 1:1280, 1:51] 252 253 248 251 251 ... +# ..- attr(*, "edition")= num 1 +# ..- attr(*, "shortName")= chr "2t" +# ..- attr(*, "longitude")= num [1:1280] 0 0.281 0.563 0.844 1.125 ... +# ..- attr(*, "latitude")= num [1:640] 89.8 89.5 89.2 88.9 88.7 ... +# ..- attr(*, "time")= POSIXct[1:4], format: "2000-12-01" "2001-12-01" ... +# $ dims : Named int [1:9] 1 1 1 1 2 2 640 1280 51 +# ..- attr(*, "names")= chr [1:9] "dat" "var" "sday" "sweek" ... +# $ coords:List of 9 +# ..$ dat : chr "dat1" +# .. ..- attr(*, "indices")= logi FALSE +# ..$ var : chr "tas" +# .. ..- attr(*, "indices")= logi FALSE +# ..$ sday : num 1 +# .. ..- attr(*, "indices")= logi FALSE +# ..$ sweek : num 1 +# .. ..- attr(*, "indices")= logi FALSE +# ..$ syear : chr [1:2] "2000" "2001" +# .. ..- attr(*, "indices")= logi FALSE +# ..$ time : int [1:2] 1 2 +# .. ..- attr(*, "indices")= logi FALSE +# ..$ latitude : num [1:640] 89.8 89.5 89.2 88.9 88.7 ... +# .. ..- attr(*, "indices")= logi FALSE +# ..$ longitude: num [1:1280] 0 0.281 0.563 0.844 1.125 ... +# .. ..- attr(*, "indices")= logi FALSE +# ..$ ensemble : int [1:51] 1 2 3 4 5 6 7 8 9 10 ... +# .. ..- attr(*, "indices")= logi FALSE +# $ attrs :List of 4 +# ..$ Dates : POSIXct[1:4], format: "2000-12-01" "2001-12-01" ... +# ..$ Variable :List of 1 +# .. ..$ varName: chr "2t" +# ..$ source_files: chr [1:2] "/esarchive/scratch/aho/tmp/GRIB/GRIB_system5_tas_CORRECTED/tas_20001101.grb" "/esarchive/scratch/aho/tmp/GRIB/GRIB_system5_tas_CORRECTED/tas_20011101.grb" +# ..$ gribEdition : num 1 +# - attr(*, "class")= chr "s2dv_cube" + + + return(list(hcst = hcst, fcst = fcst, obs = obs)) + +} diff --git a/modules/Loading/testing_recipes/recipe_GRIB_system5_era5.yml b/modules/Loading/testing_recipes/recipe_GRIB_system5_era5.yml new file mode 100644 index 00000000..e50aa2a3 --- /dev/null +++ b/modules/Loading/testing_recipes/recipe_GRIB_system5_era5.yml @@ -0,0 +1,50 @@ +Description: + Author: A. Ho + +Analysis: + Horizon: Seasonal + Variables: + name: tas + freq: monthly_mean + Datasets: + System: + name: ECMWF-SEAS5 + Multimodel: False + Reference: + name: ERA5 + Time: + sdate: '1101' + fcst_year: '2020' + hcst_start: '2000' + hcst_end: '2003' + ftime_min: 1 + ftime_max: 3 + Region: #NOT USED + latmin: -90 + latmax: 90 + lonmin: 0 + lonmax: 360 + Regrid: + method: bilinear + type: 'r360x180' #to_system + Workflow: + Calibration: + method: mse_min + Anomalies: + compute: yes + cross_validation: yes + Skill: + metric: mean_bias + Probabilities: + percentiles: [[1/3, 2/3], [1/10, 9/10]] + Indicators: + index: no + ncores: 8 + remove_NAs: yes + Output_format: S2S4E #Scorecards +Run: + Loglevel: INFO + Terminal: yes + output_dir: ./tests/out-logs/ + code_dir: /esarchive/scratch/aho/git/auto-s2s/ + diff --git a/modules/test_GRIB.R b/modules/test_GRIB.R new file mode 100644 index 00000000..429c8032 --- /dev/null +++ b/modules/test_GRIB.R @@ -0,0 +1,57 @@ +source('modules/Loading/GRIB/GrbLoad.R') +source('modules/Loading//Loading_GRIB.R') +source("tools/libs.R") # for prepare_outputs.R +#TODO: remove this line when new s2dv_cube() is in CSTools +source('modules/Loading/GRIB/s2dv_cube.R') + +library(yaml) +library(clock) + +recipe <- "modules/Loading/testing_recipes/recipe_GRIB_system5_era5.yml" +recipe <- prepare_outputs(recipe) + +# Load datasets +data <- load_datasets(recipe) + +str(data) + +#============================ +# Test the remaining modules +#============================ +source("modules/Calibration/Calibration.R") +source("modules/Skill/Skill.R") +source("modules/Saving/Saving.R") +source("modules/Visualization/Visualization.R") + +# Calibrate data +suppressWarnings({invisible(capture.output( +calibrated_data <- calibrate_datasets(recipe, data) +))}) +#pryr::mem_used() +#975 MB + +# Compute skill metrics +suppressWarnings({invisible(capture.output( +skill_metrics <- compute_skill_metrics(recipe, calibrated_data) +))}) + +suppressWarnings({invisible(capture.output( +probs <- compute_probabilities(recipe, calibrated_data) +))}) + +# Saving +suppressWarnings({invisible(capture.output( +save_data(recipe = recipe, data = calibrated_data, + skill_metrics = skill_metrics, probabilities = probs, + archive = read_yaml("conf/archive_GRIB.yml")$archive) +))}) + +# Plotting +suppressWarnings({invisible(capture.output( +plot_data(recipe = recipe, data = calibrated_data, + skill_metrics = skill_metrics, probabilities = probs, + significance = T, + archive = read_yaml("conf/archive_GRIB.yml")$archive) +))}) +outdir <- get_dir(recipe) + -- GitLab From bf47d55dd0bbf5d47c6cd09dcd80033032a73ffc Mon Sep 17 00:00:00 2001 From: aho Date: Tue, 14 Mar 2023 18:22:57 +0100 Subject: [PATCH 075/388] Change archive path in Loading --- modules/Loading/Loading_GRIB.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/Loading/Loading_GRIB.R b/modules/Loading/Loading_GRIB.R index cfac3df1..2adc6aa3 100644 --- a/modules/Loading/Loading_GRIB.R +++ b/modules/Loading/Loading_GRIB.R @@ -28,7 +28,7 @@ load_datasets <- function(recipe) { store.freq <- recipe$Analysis$Variables$freq # get MARS datasets dict: - archive <- read_yaml("/esarchive/scratch/aho/git/aho-testtest/GRIB/GrbLoad/archive_GRIB.yml")$archive + archive <- read_yaml(paste0(recipe$Run$code_dir, "conf/archive_GRIB.yml"))$archive exp_descrip <- archive$System[[exp.name]] freq.hcst <- unlist(exp_descrip[[store.freq]][variable]) reference_descrip <- archive$Reference[[ref.name]] -- GitLab From 456a34334bbf707920f9747c0195dc153e0aad1b Mon Sep 17 00:00:00 2001 From: aho Date: Wed, 15 Mar 2023 14:12:30 +0100 Subject: [PATCH 076/388] remove not needed object and add gc() --- modules/Loading/GRIB/GrbLoad.R | 30 +++++++++++++++++++++--------- modules/Loading/Loading_GRIB.R | 3 +++ 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/modules/Loading/GRIB/GrbLoad.R b/modules/Loading/GRIB/GrbLoad.R index 2ba86bea..5f15f627 100644 --- a/modules/Loading/GRIB/GrbLoad.R +++ b/modules/Loading/GRIB/GrbLoad.R @@ -50,9 +50,16 @@ GrbLoad <- function (dat, time_step = 1, has.memb = NULL, syear_time_dim = NULL) # all members + ftimes: length should be memb*ftime (e.g., 51*7) ## Method 1: use grib_select and real values to filter +#--------NEW------------- memb_ftime <- grib_select(file_to_load, list(validityDate = cdo_time)) if (inherits(memb_ftime, 'gribMessage')) memb_ftime <- list(memb_ftime) +# needed_attrs <- c('Nx', 'Ny', 'Ni', 'Nj', 'pl', 'values', 'jPointsAreConsecutive') +# memb_ftime <- lapply(grib_select(file_to_load, list(validityDate = cdo_time)), +# '[', needed_attrs) +# if (inherits(memb_ftime, 'gribMessage')) memb_ftime <- list(memb_ftime) +#-----------NEW_END------------ + # ## Method 2: Calculate which messages are the desired ones # gm <- grib_get_message(file_to_load, time_step) # if (length(time_step) == 1) { @@ -62,14 +69,16 @@ GrbLoad <- function (dat, time_step = 1, has.memb = NULL, syear_time_dim = NULL) ################################################################## # Get data as an array [longitude, latitude, (memb*)time] ################################################################## - if (grepl("reduced", memb_ftime[[1]]$gridType)) { + if (grepl("reduced", gm1$gridType)) { #NOTE: Need to call gribr::grib_expand_grids because I don't know how to make .Call("gribr_redtoreg") work outside that function # https://github.com/nawendt/gribr/blob/main/src/redtoreg.c values_l <- vector('list', length = length(memb_ftime)) for (gm_i in 1:length(memb_ftime)) { values_l[[gm_i]] <- grib_expand_grids(memb_ftime[[gm_i]]) } - result[[dat_i]] <- array(unlist(values_l), dim = c(longitude = memb_ftime[[1]]$Nj * 2, latitude = memb_ftime[[1]]$Nj, time = length(values_l))) + result[[dat_i]] <- array(unlist(values_l), dim = c(longitude = gm1$Nj * 2, latitude = gm1$Nj, time = length(values_l))) + # Save memory + rm(values_l); gc() } else { result[[dat_i]] <- .grib_expand_grids(memb_ftime) @@ -80,7 +89,6 @@ GrbLoad <- function (dat, time_step = 1, has.memb = NULL, syear_time_dim = NULL) ################################################################## ## (1-1) Everything from the first message of first file if (dat_i == 1) { - gm1 <- memb_ftime[[1]] ## (1-1) Everything from the first message of first file # dims <- dim(result[[dat_i]]) # attributes(result) <- gm1 @@ -99,8 +107,10 @@ GrbLoad <- function (dat, time_step = 1, has.memb = NULL, syear_time_dim = NULL) ## (2) Lat and lon latlon <- grib_latlons(gm1, expand = TRUE) - lats <- unique(as.vector(c(latlon$lats))) - lons <- unique(as.vector(c(latlon$lons))) + attr(result, 'latitude') <- unique(as.vector(c(latlon$lats))) + attr(result, 'longitude') <- unique(as.vector(c(latlon$lons))) + # Save memory (though it's small) + rm(latlon); gc() #NOTE: Find another way to check regular grid; Ni/Nj not always exist # if (has.key(gm1, "Nx") && has.key(gm1, "Ny")) { @@ -113,8 +123,6 @@ GrbLoad <- function (dat, time_step = 1, has.memb = NULL, syear_time_dim = NULL) # if (length(lats) != ny | length(lons) != nx) { # stop("Latitude and Longitude seem to be non-regular grid.") # } - attr(result, 'longitude') <- lons - attr(result, 'latitude') <- lats } @@ -136,8 +144,9 @@ GrbLoad <- function (dat, time_step = 1, has.memb = NULL, syear_time_dim = NULL) #-------------------------------- ################################################################## - grib_close(file_to_load) - gc() + # Save memory + rm(memb_ftime); rm(gm1); gc() + grib_close(file_to_load) # Doesn't impact memory ################################################################## } #for loop dat @@ -171,6 +180,9 @@ GrbLoad <- function (dat, time_step = 1, has.memb = NULL, syear_time_dim = NULL) attributes(result) <- attr attr(result, 'time') <- times + # Save memory + rm(times); rm(attr); gc() + return(result) } diff --git a/modules/Loading/Loading_GRIB.R b/modules/Loading/Loading_GRIB.R index 2adc6aa3..c8e675a9 100644 --- a/modules/Loading/Loading_GRIB.R +++ b/modules/Loading/Loading_GRIB.R @@ -57,6 +57,7 @@ load_datasets <- function(recipe) { hcst.files <- paste0(hcst.path, variable, '_', hcst.year, hcst.sdate, '.grb') hcst <- GrbLoad(dat = as.list(hcst.files), time_step = hcst.ftime, has.memb = hcst.nmember) + gc() print("========== HCST LOADED. ==========") @@ -67,6 +68,7 @@ load_datasets <- function(recipe) { fcst.files <- paste0(fcst.path, variable, '_', fcst.year, hcst.sdate, '.grb') fcst <- GrbLoad(dat = as.list(fcst.files), time_step = hcst.ftime, has.memb = fcst.nmember) + gc() } else { fcst <- NULL } @@ -85,6 +87,7 @@ load_datasets <- function(recipe) { #NOTE: only 1 time step in each obs file obs <- GrbLoad(dat = as.list(obs.files), time_step = 1, has.memb = NULL, syear_time_dim = dim(hcst_times)) + gc() print("========== OBS LOADED. ==========") -- GitLab From 23f6813af84acd5a9efd11efa39d1be89ff593b9 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Fri, 17 Mar 2023 10:43:49 +0100 Subject: [PATCH 077/388] Add saving options to recipe (provisional) --- .../testing_recipes/recipe_system7c3s-tas.yml | 4 ++++ modules/Saving/Saving.R | 13 +++++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/modules/Loading/testing_recipes/recipe_system7c3s-tas.yml b/modules/Loading/testing_recipes/recipe_system7c3s-tas.yml index c8d3b5e8..4e67943b 100644 --- a/modules/Loading/testing_recipes/recipe_system7c3s-tas.yml +++ b/modules/Loading/testing_recipes/recipe_system7c3s-tas.yml @@ -39,6 +39,10 @@ Analysis: percentiles: [[1/3, 2/3], [1/10, 9/10], [1/4, 2/4, 3/4]] Indicators: index: no + Saving: + save_hindcast: no + save_forecast: no + save_observations: no ncores: 1 remove_NAs: yes Output_format: S2S4E diff --git a/modules/Saving/Saving.R b/modules/Saving/Saving.R index f481be70..daf099c3 100644 --- a/modules/Saving/Saving.R +++ b/modules/Saving/Saving.R @@ -42,13 +42,18 @@ save_data <- function(recipe, data, dir.create(outdir, showWarnings = FALSE, recursive = TRUE) # Export hindcast, forecast and observations onto outfile - save_forecast(data$hcst, recipe, dict, outdir, archive = archive, - type = 'hcst') - if (!is.null(data$fcst)) { + if (recipe$Analysis$Workflow$Saving$save_hindcast) { + save_forecast(data$hcst, recipe, dict, outdir, archive = archive, + type = 'hcst') + } + if ((!is.null(data$fcst)) && + recipe$Analysis$Workflow$Saving$save_forecast) { save_forecast(data$fcst, recipe, dict, outdir, archive = archive, type = 'fcst') } - save_observations(data$obs, recipe, dict, outdir, archive = archive) + if (recipe$Analysis$Workflow$Saving$save_observations) { + save_observations(data$obs, recipe, dict, outdir, archive = archive) + } # Separate ensemble correlation from the rest of the metrics, as it has one # extra dimension "ensemble" and must be saved to a different file -- GitLab From 3b47c23bd99905c2426da3bc56940aca998d3270 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Fri, 17 Mar 2023 13:02:32 +0100 Subject: [PATCH 078/388] Modify saving functions to retrieve archive from recipe, rearrange parameters --- modules/Saving/Saving.R | 118 +++++++++++++++++----------------------- tools/get_archive.R | 12 ++++ tools/libs.R | 1 + 3 files changed, 63 insertions(+), 68 deletions(-) create mode 100644 tools/get_archive.R diff --git a/modules/Saving/Saving.R b/modules/Saving/Saving.R index 608c1faf..0a5cce93 100644 --- a/modules/Saving/Saving.R +++ b/modules/Saving/Saving.R @@ -4,8 +4,7 @@ source("modules/Saving/paths2save.R") save_data <- function(recipe, data, skill_metrics = NULL, - probabilities = NULL, - archive = NULL) { + probabilities = NULL) { # Wrapper for the saving functions. # recipe: The auto-s2s recipe # archive: The auto-s2s archive @@ -15,6 +14,7 @@ save_data <- function(recipe, data, # probabilities: output of compute_probabilities() # mean_bias: output of compute_mean_bias() + # Sanity checks if (is.null(recipe)) { error(recipe$Run$logger, "The 'recipe' parameter is mandatory.") stop() @@ -26,29 +26,18 @@ save_data <- function(recipe, data, "of at least two s2dv_cubes containing the hcst and obs.")) stop() } - if (is.null(archive)) { - if (tolower(recipe$Analysis$Horizon) == "seasonal") { - archive <- - read_yaml(paste0("conf/archive.yml"))[[recipe$Run$filesystem]] - } else if (tolower(recipe$Analysis$Horizon) == "decadal") { - archive <- - read_yaml(paste0("conf/archive_decadal.yml"))[[recipe$Run$filesystem]] - } - } - dict <- read_yaml("conf/variable-dictionary.yml") - # Create output directory outdir <- get_dir(recipe) dir.create(outdir, showWarnings = FALSE, recursive = TRUE) # Export hindcast, forecast and observations onto outfile - save_forecast(data$hcst, recipe, dict, outdir, archive = archive, + save_forecast(recipe = recipe, data_cube = data$hcst, outdir = outdir, type = 'hcst') if (!is.null(data$fcst)) { - save_forecast(data$fcst, recipe, dict, outdir, - archive = archive, type = 'fcst') + save_forecast(recipe = recipe, data_cube = data$fcst, outdir = outdir, + type = 'fcst') } - save_observations(data$obs, recipe, dict, outdir, archive = archive) + save_observations(recipe = recipe, data_cube = data$obs, outdir = outdir) # Separate ensemble correlation from the rest of the metrics, as it has one # extra dimension "ensemble" and must be saved to a different file @@ -65,23 +54,30 @@ save_data <- function(recipe, data, # Export skill metrics onto outfile if (!is.null(skill_metrics)) { - save_metrics(skill_metrics, recipe, dict, data$hcst, outdir, - archive = archive) + save_metrics(recipe = recipe, skill = skill_metrics, + data_cube = data$hcst, + outdir = outdir) } if (!is.null(corr_metrics)) { - save_corr(corr_metrics, recipe, dict, data$hcst, outdir, - archive = archive) + save_corr(recipe = recipe, skill = corr_metrics, + data_cube = data$hcst, + outdir = outdir) } # Export probabilities onto outfile if (!is.null(probabilities)) { - save_percentiles(probabilities$percentiles, recipe, data$hcst, outdir, - archive = archive) - save_probabilities(probabilities$probs, recipe, data$hcst, outdir, - archive = archive, type = "hcst") + save_percentiles(recipe = recipe, percentiles = probabilities$percentiles, + data_cube = data$hcst, + outdir = outdir) + save_probabilities(recipe = recipe, probs = probabilities$probs, + data_cube = data$hcst, + outdir = outdir, + type = "hcst") if (!is.null(probabilities$probs_fcst)) { - save_probabilities(probabilities$probs_fcst, recipe, data$fcst, outdir, - archive = archive, type = "fcst") + save_probabilities(recipe = recipe, probs = probabilities$probs_fcst, + data_cube = data$fcst, + outdir = outdir, + type = "fcst") } } } @@ -156,12 +152,10 @@ get_latlon <- function(latitude, longitude) { } -save_forecast <- function(data_cube, - recipe, - dictionary, +save_forecast <- function(recipe, + data_cube, outdir, agg = "global", - archive = NULL, type = NULL) { # Loops over the years in the s2dv_cube containing a hindcast or forecast # and exports each year to a netCDF file. @@ -171,7 +165,8 @@ save_forecast <- function(data_cube, # agg: aggregation, "global" or "country" lalo <- c('longitude', 'latitude') - + archive <- get_archive(recipe) + dictionary <- read_yaml("conf/variable-dictionary.yml") variable <- data_cube$Variable$varName var.longname <- attr(data_cube$Variable, 'variable')$long_name global_attributes <- get_global_attributes(recipe, archive) @@ -179,23 +174,16 @@ save_forecast <- function(data_cube, store.freq <- recipe$Analysis$Variables$freq calendar <- archive$System[[global_attributes$system]]$calendar -# if (fcst.horizon == "seasonal") { -# calendar <- attr(data_cube$Variable, "variable")$dim$time$calendar -# } else { -# calendar <- attr(data_cube$Variable, "variable")$dim[[3]]$calendar -# } - # Generate vector containing leadtimes dates <- as.PCICt(ClimProjDiags::Subset(data_cube$Dates$start, 'syear', 1), cal = calendar) if (fcst.horizon == 'decadal') { ## Method 1: Use the first date as init_date. But it may be better to use ## the real initialized date (ask users) -# init_date <- as.Date(data_cube$Dates$start[1], format = '%Y%m%d') + # init_date <- as.Date(data_cube$Dates$start[1], format = '%Y%m%d') ## Method 2: use initial month init_month <- archive$System[[recipe$Analysis$Datasets$System$name]]$initial_month if (type == 'hcst') { - ## PROBLEM for fcst!!!!!!!!!!!! init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, '-', sprintf('%02d', init_month), '-01'), cal = calendar) @@ -299,12 +287,10 @@ save_forecast <- function(data_cube, } -save_observations <- function(data_cube, - recipe, - dictionary, +save_observations <- function(recipe, + data_cube, outdir, - agg = "global", - archive = NULL) { + agg = "global") { # Loops over the years in the s2dv_cube containing the observations and # exports each year to a netCDF file. # data_cube: s2dv_cube containing the data and metadata @@ -313,7 +299,8 @@ save_observations <- function(data_cube, # agg: aggregation, "global" or "country" lalo <- c('longitude', 'latitude') - + archive <- get_archive(recipe) + dictionary <- read_yaml("conf/variable-dictionary.yml") variable <- data_cube$Variable$varName var.longname <- attr(data_cube$Variable, 'variable')$long_name global_attributes <- get_global_attributes(recipe, archive) @@ -443,24 +430,23 @@ save_observations <- function(data_cube, # lat=attr(var.obs, 'Variables')$dat1$latitude) # } -save_metrics <- function(skill, - recipe, - dictionary, +save_metrics <- function(recipe, + skill, data_cube, outdir, - agg = "global", - archive = NULL) { + agg = "global") { # This function adds metadata to the skill metrics in 'skill' # and exports them to a netCDF file inside 'outdir'. # Define grid dimensions and names lalo <- c('longitude', 'latitude') + archive <- get_archive(recipe) + dictionary <- read_yaml("conf/variable-dictionary.yml") # Remove singleton dimensions and rearrange lon, lat and time dims if (tolower(agg) == "global") { skill <- lapply(skill, function(x) { Reorder(x, c(lalo, 'time'))}) } - # Add global and variable attributes global_attributes <- get_global_attributes(recipe, archive) ## TODO: Sort out the logic once default behavior is decided @@ -559,16 +545,16 @@ save_metrics <- function(skill, info(recipe$Run$logger, "##### SKILL METRICS SAVED TO NETCDF FILE #####") } -save_corr <- function(skill, - recipe, - dictionary, +save_corr <- function(recipe, + skill, data_cube, outdir, - agg = "global", - archive = NULL) { + agg = "global") { # This function adds metadata to the ensemble correlation in 'skill' # and exports it to a netCDF file inside 'outdir'. + archive <- get_archive(recipe) + dictionary <- read_yaml("conf/variable-dictionary.yml") # Define grid dimensions and names lalo <- c('longitude', 'latitude') # Remove singleton dimensions and rearrange lon, lat and time dims @@ -576,7 +562,6 @@ save_corr <- function(skill, skill <- lapply(skill, function(x) { Reorder(x, c(lalo, 'ensemble', 'time'))}) } - # Add global and variable attributes global_attributes <- get_global_attributes(recipe, archive) ## TODO: Sort out the logic once default behavior is decided @@ -675,14 +660,14 @@ save_corr <- function(skill, "##### ENSEMBLE CORRELATION SAVED TO NETCDF FILE #####") } -save_percentiles <- function(percentiles, - recipe, +save_percentiles <- function(recipe, + percentiles, data_cube, outdir, - agg = "global", - archive = NULL) { + agg = "global") { # This function adds metadata to the percentiles # and exports them to a netCDF file inside 'outdir'. + archive <- get_archive(recipe) # Define grid dimensions and names lalo <- c('longitude', 'latitude') @@ -758,14 +743,12 @@ save_percentiles <- function(percentiles, fcst.sdate <- paste0("1970", recipe$Analysis$Time$sdate) } } - times <- get_times(store.freq, fcst.horizon, leadtimes, fcst.sdate, calendar) time <- times$time # Generate name of output file outfile <- get_filename(outdir, recipe, data_cube$Variable$varName, fcst.sdate, agg, "percentiles") - # Get grid data and metadata and export to netCDF if (tolower(agg) == "country") { country <- get_countries(grid) @@ -782,12 +765,11 @@ save_percentiles <- function(percentiles, info(recipe$Run$logger, "##### PERCENTILES SAVED TO NETCDF FILE #####") } -save_probabilities <- function(probs, - recipe, +save_probabilities <- function(recipe, + probs, data_cube, outdir, agg = "global", - archive = NULL, type = "hcst") { # Loops over the years in the s2dv_cube containing a hindcast or forecast # and exports the corresponding category probabilities to a netCDF file. @@ -800,7 +782,7 @@ save_probabilities <- function(probs, # type: 'hcst' or 'fcst' lalo <- c('longitude', 'latitude') - + archive <- get_archive(recipe) variable <- data_cube$Variable$varName var.longname <- attr(data_cube$Variable, 'variable')$long_name global_attributes <- get_global_attributes(recipe, archive) diff --git a/tools/get_archive.R b/tools/get_archive.R new file mode 100644 index 00000000..11602698 --- /dev/null +++ b/tools/get_archive.R @@ -0,0 +1,12 @@ +get_archive <- function(recipe) { + if (tolower(recipe$Analysis$Horizon) == "seasonal") { + archive <- + read_yaml(paste0("conf/archive.yml"))[[recipe$Run$filesystem]] + } else if (tolower(recipe$Analysis$Horizon) == "decadal") { + archive <- + read_yaml(paste0("conf/archive_decadal.yml"))[[recipe$Run$filesystem]] + } + ## TODO: Add dictionary filesystem dependency? + # dict <- read_yaml("conf/variable-dictionary.yml") + return(archive) +} diff --git a/tools/libs.R b/tools/libs.R index 826a1f19..54a6b4c2 100644 --- a/tools/libs.R +++ b/tools/libs.R @@ -35,4 +35,5 @@ source("tools/divide_recipe.R") source("tools/data_summary.R") source("tools/read_atomic_recipe.R") source("tools/write_autosubmit_conf.R") +source("tools/get_archive.R") # source("tools/add_dims.R") # Not sure if necessary yet -- GitLab From b24c8bd1403d4af36d9f7300b85e209a54ecf041 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Fri, 17 Mar 2023 15:28:47 +0100 Subject: [PATCH 079/388] Add script parameter to recipe autosubmit conf --- autosubmit/auto-verification.sh | 3 ++- autosubmit/conf_esarchive/proj.conf | 1 + recipes/tests/recipe_seasonal_example.yml | 5 +++-- tools/check_recipe.R | 6 +++++- tools/write_autosubmit_conf.R | 5 +++++ 5 files changed, 16 insertions(+), 4 deletions(-) diff --git a/autosubmit/auto-verification.sh b/autosubmit/auto-verification.sh index c2328a72..8408912b 100644 --- a/autosubmit/auto-verification.sh +++ b/autosubmit/auto-verification.sh @@ -3,13 +3,14 @@ ############ AUTOSUBMIT INPUTS ############ proj_dir=%PROJDIR% outdir=%OUTDIR% +script=%SCRIPT% CHUNK=%CHUNK% ############################### ## TODO: How to define the script cd $proj_dir -script=modules/test_parallel_workflow.R +# script=modules/test_parallel_workflow.R atomic_recipe_number=$(printf "%02d" $CHUNK) atomic_recipe=${outdir}/logs/recipes/atomic_recipe_${atomic_recipe_number}.yml diff --git a/autosubmit/conf_esarchive/proj.conf b/autosubmit/conf_esarchive/proj.conf index 7eacf6c4..c57e37eb 100644 --- a/autosubmit/conf_esarchive/proj.conf +++ b/autosubmit/conf_esarchive/proj.conf @@ -2,3 +2,4 @@ MODULES = "MODULES" OUTDIR = +SCRIPT = diff --git a/recipes/tests/recipe_seasonal_example.yml b/recipes/tests/recipe_seasonal_example.yml index a866bf5c..0a22d3ab 100644 --- a/recipes/tests/recipe_seasonal_example.yml +++ b/recipes/tests/recipe_seasonal_example.yml @@ -32,9 +32,9 @@ Analysis: ftime_min: 1 # single option ftime_max: 6 # single option Region: # multiple lists, Add region name if there is more than 1 region - - {latmin: -5, latmax: 5, lonmin: -10, lonmax: 10} + - {latmin: -10, latmax: 10, lonmin: -10, lonmax: 10} Regrid: - method: conservative ## TODO: allow multiple methods? + method: conservative type: to_system Workflow: Anomalies: @@ -64,6 +64,7 @@ Run: autosubmit: yes # fill only if using autosubmit auto_conf: + script: /esarchive/scratch/vagudets/repos/auto-s2s/modules/test_parallel_workflow.R # path to the script to run expid: a5no ## if left empty, create new exp? hpc_user: bsc32762 # your hpc username wallclock: 04:00 # hh:mm diff --git a/tools/check_recipe.R b/tools/check_recipe.R index 3a8759c5..ce4c15e2 100644 --- a/tools/check_recipe.R +++ b/tools/check_recipe.R @@ -336,7 +336,11 @@ check_recipe <- function(recipe) { AUTO_PARAMS <- c("expid", "hpc_user", "wallclock", "processors_per_job", "platform", "email_notifications", "email_address", "notify_completed", "notify_failed") - + # Autosubmit false by default + if (is.null(recipe$Run$autosubmit)) { + recipe$Run$autosubmit <- F + } + # Autosubmit configuration checks if (recipe$Run$autosubmit) { # Read autosubmit info for the specific filesystem (e.g. esarchive) auto_specs <- read_yaml("conf/autosubmit.yml")[[recipe$Run$filesystem]] diff --git a/tools/write_autosubmit_conf.R b/tools/write_autosubmit_conf.R index 8e6c6ba1..571294ce 100644 --- a/tools/write_autosubmit_conf.R +++ b/tools/write_autosubmit_conf.R @@ -53,8 +53,10 @@ write_autosubmit_conf <- function(recipe, nchunks) { # Section 5: proj ## modules? Info that goes on script, e.g. output directory conf$common$OUTDIR <- recipe$Run$output_dir + conf$common$SCRIPT <- recipe$Run$auto_conf$script } # Write config file inside autosubmit dir + ## TODO: Change write.type depending on autosubmit version write.config(conf, paste0(dest_dir, dest_file), write.type = "ini") Sys.chmod(paste0(dest_dir, dest_file), mode = "755", use_umask = F) } @@ -73,6 +75,8 @@ write_autosubmit_conf <- function(recipe, nchunks) { paste("module load", auto_specs$module_version)) info(recipe$Run$logger, paste("autosubmit create", expid)) + info(recipe$Run$logger, + paste("autosubmit refresh", expid)) info(recipe$Run$logger, paste("nohup autosubmit run", expid, "& disown")) } else { @@ -80,6 +84,7 @@ write_autosubmit_conf <- function(recipe, nchunks) { "the following commands:")) print(paste("module load", auto_specs$module_version)) print(paste("autosubmit create", expid)) + print(paste("autosubmit refresh", expid)) print(paste("nohup autosubmit run", expid, "& disown")) } } -- GitLab From ceaa8f8641a88d80889e5fde68affc2835a8b067 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Tue, 21 Mar 2023 12:01:38 +0100 Subject: [PATCH 080/388] Rearrange and simplify saving module fun args --- modules/Saving/Saving.R | 71 ++++++++++++++++++++++++++++------------- 1 file changed, 48 insertions(+), 23 deletions(-) diff --git a/modules/Saving/Saving.R b/modules/Saving/Saving.R index 0a5cce93..47669fa5 100644 --- a/modules/Saving/Saving.R +++ b/modules/Saving/Saving.R @@ -31,13 +31,16 @@ save_data <- function(recipe, data, dir.create(outdir, showWarnings = FALSE, recursive = TRUE) # Export hindcast, forecast and observations onto outfile - save_forecast(recipe = recipe, data_cube = data$hcst, outdir = outdir, - type = 'hcst') + save_forecast(recipe = recipe, data_cube = data$hcst, + type = 'hcst', + outdir = outdir) if (!is.null(data$fcst)) { - save_forecast(recipe = recipe, data_cube = data$fcst, outdir = outdir, - type = 'fcst') + save_forecast(recipe = recipe, data_cube = data$fcst, + type = 'fcst', + outdir = outdir) } - save_observations(recipe = recipe, data_cube = data$obs, outdir = outdir) + save_observations(recipe = recipe, data_cube = data$obs, + outdir = outdir) # Separate ensemble correlation from the rest of the metrics, as it has one # extra dimension "ensemble" and must be saved to a different file @@ -70,14 +73,14 @@ save_data <- function(recipe, data, data_cube = data$hcst, outdir = outdir) save_probabilities(recipe = recipe, probs = probabilities$probs, - data_cube = data$hcst, - outdir = outdir, - type = "hcst") + data_cube = data$hcst, + type = "hcst", + outdir = outdir) if (!is.null(probabilities$probs_fcst)) { save_probabilities(recipe = recipe, probs = probabilities$probs_fcst, data_cube = data$fcst, - outdir = outdir, - type = "fcst") + type = "fcst", + outdir = outdir) } } } @@ -154,9 +157,9 @@ get_latlon <- function(latitude, longitude) { save_forecast <- function(recipe, data_cube, - outdir, - agg = "global", - type = NULL) { + type = "hcst", + agg = "global", + outdir = NULL) { # Loops over the years in the s2dv_cube containing a hindcast or forecast # and exports each year to a netCDF file. # data_cube: s2dv_cube containing the data and metadata @@ -174,6 +177,10 @@ save_forecast <- function(recipe, store.freq <- recipe$Analysis$Variables$freq calendar <- archive$System[[global_attributes$system]]$calendar + if (is.null(outdir)) { + outdir <- get_dir(recipe) + } + # Generate vector containing leadtimes dates <- as.PCICt(ClimProjDiags::Subset(data_cube$Dates$start, 'syear', 1), cal = calendar) @@ -289,8 +296,8 @@ save_forecast <- function(recipe, save_observations <- function(recipe, data_cube, - outdir, - agg = "global") { + agg = "global", + outdir = NULL) { # Loops over the years in the s2dv_cube containing the observations and # exports each year to a netCDF file. # data_cube: s2dv_cube containing the data and metadata @@ -307,6 +314,10 @@ save_observations <- function(recipe, fcst.horizon <- tolower(recipe$Analysis$Horizon) store.freq <- recipe$Analysis$Variables$freq calendar <- archive$Reference[[global_attributes$reference]]$calendar + + if (is.null(outdir)) { + outdir <- get_dir(recipe) + } # Generate vector containing leadtimes ## TODO: Move to a separate function? @@ -433,8 +444,8 @@ save_observations <- function(recipe, save_metrics <- function(recipe, skill, data_cube, - outdir, - agg = "global") { + agg = "global", + outdir = NULL) { # This function adds metadata to the skill metrics in 'skill' # and exports them to a netCDF file inside 'outdir'. @@ -442,6 +453,8 @@ save_metrics <- function(recipe, lalo <- c('longitude', 'latitude') archive <- get_archive(recipe) dictionary <- read_yaml("conf/variable-dictionary.yml") + + # Remove singleton dimensions and rearrange lon, lat and time dims if (tolower(agg) == "global") { skill <- lapply(skill, function(x) { @@ -526,6 +539,9 @@ save_metrics <- function(recipe, time <- times$time # Generate name of output file + if (is.null(outdir)) { + outdir <- get_dir(recipe) + } outfile <- get_filename(outdir, recipe, data_cube$Variable$varName, fcst.sdate, agg, "skill") @@ -548,8 +564,8 @@ save_metrics <- function(recipe, save_corr <- function(recipe, skill, data_cube, - outdir, - agg = "global") { + agg = "global", + outdir = NULL) { # This function adds metadata to the ensemble correlation in 'skill' # and exports it to a netCDF file inside 'outdir'. @@ -640,6 +656,9 @@ save_corr <- function(recipe, time <- times$time # Generate name of output file + if (is.null(outdir)) { + outdir <- get_dir(recipe) + } outfile <- get_filename(outdir, recipe, data_cube$Variable$varName, fcst.sdate, agg, "corr") @@ -663,8 +682,8 @@ save_corr <- function(recipe, save_percentiles <- function(recipe, percentiles, data_cube, - outdir, - agg = "global") { + agg = "global", + outdir = NULL) { # This function adds metadata to the percentiles # and exports them to a netCDF file inside 'outdir'. archive <- get_archive(recipe) @@ -747,6 +766,9 @@ save_percentiles <- function(recipe, time <- times$time # Generate name of output file + if (is.null(outdir)) { + outdir <- get_dir(recipe) + } outfile <- get_filename(outdir, recipe, data_cube$Variable$varName, fcst.sdate, agg, "percentiles") # Get grid data and metadata and export to netCDF @@ -768,9 +790,9 @@ save_percentiles <- function(recipe, save_probabilities <- function(recipe, probs, data_cube, - outdir, agg = "global", - type = "hcst") { + type = "hcst", + outdir = NULL) { # Loops over the years in the s2dv_cube containing a hindcast or forecast # and exports the corresponding category probabilities to a netCDF file. # probs: array containing the probability data @@ -786,6 +808,9 @@ save_probabilities <- function(recipe, variable <- data_cube$Variable$varName var.longname <- attr(data_cube$Variable, 'variable')$long_name global_attributes <- get_global_attributes(recipe, archive) + if (is.null(outdir)) { + outdir <- get_dir(recipe) + } # Add anomaly computation to global attributes ## TODO: Sort out the logic once default behavior is decided if ((!is.null(recipe$Analysis$Workflow$Anomalies$compute)) && -- GitLab From 67b2f0f17a763abcdcadabc678762bab3a76caa3 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Tue, 21 Mar 2023 13:36:07 +0100 Subject: [PATCH 081/388] Adapt region checks to atomic and general case, fix pipeline --- tests/testthat/test-decadal_monthly_1.R | 2 +- tests/testthat/test-seasonal_daily.R | 2 +- tests/testthat/test-seasonal_monthly.R | 2 +- tools/check_recipe.R | 39 +++++++++++++++---------- tools/prepare_outputs.R | 11 +++++-- 5 files changed, 35 insertions(+), 21 deletions(-) diff --git a/tests/testthat/test-decadal_monthly_1.R b/tests/testthat/test-decadal_monthly_1.R index b76a216c..406ceaec 100644 --- a/tests/testthat/test-decadal_monthly_1.R +++ b/tests/testthat/test-decadal_monthly_1.R @@ -33,7 +33,7 @@ probs <- compute_probabilities(recipe, calibrated_data) # Saving suppressWarnings({invisible(capture.output( save_data(recipe = recipe, data = calibrated_data, - skill_metrics = skill_metrics, probabilities = probs, archive = archive) + skill_metrics = skill_metrics, probabilities = probs) ))}) # Plotting diff --git a/tests/testthat/test-seasonal_daily.R b/tests/testthat/test-seasonal_daily.R index 53a235e7..0aba1a0d 100644 --- a/tests/testthat/test-seasonal_daily.R +++ b/tests/testthat/test-seasonal_daily.R @@ -6,7 +6,7 @@ source("modules/Skill/Skill.R") source("modules/Saving/Saving.R") recipe_file <- "tests/recipes/recipe-seasonal_daily_1.yml" -recipe <- prepare_outputs(recipe_file, disable_checks = T) +recipe <- prepare_outputs(recipe_file, disable_checks = F) # Load datasets suppressWarnings({invisible(capture.output( data <- load_datasets(recipe) diff --git a/tests/testthat/test-seasonal_monthly.R b/tests/testthat/test-seasonal_monthly.R index 4ea7f9ab..d4084c81 100644 --- a/tests/testthat/test-seasonal_monthly.R +++ b/tests/testthat/test-seasonal_monthly.R @@ -7,7 +7,7 @@ source("modules/Saving/Saving.R") source("modules/Visualization/Visualization.R") recipe_file <- "tests/recipes/recipe-seasonal_monthly_1.yml" -recipe <- prepare_outputs(recipe_file, disable_checks = T) +recipe <- prepare_outputs(recipe_file, disable_checks = F) archive <- read_yaml(paste0(recipe$Run$code_dir, "conf/archive.yml"))$archive # Load datasets diff --git a/tools/check_recipe.R b/tools/check_recipe.R index ce4c15e2..d191f420 100644 --- a/tools/check_recipe.R +++ b/tools/check_recipe.R @@ -44,7 +44,7 @@ check_recipe <- function(recipe) { # Check time settings if (tolower(recipe$Analysis$Horizon) == "seasonal") { ## TODO: Specify filesystem - archive <- read_yaml(ARCHIVE_SEASONAL)$archive + archive <- read_yaml(ARCHIVE_SEASONAL)[[recipe$Run$filesystem]] if (!all(TIME_SETTINGS_SEASONAL %in% names(recipe$Analysis$Time))) { error(recipe$Run$logger, paste0("The element 'Time' in the recipe must contain all of the ", @@ -53,7 +53,7 @@ check_recipe <- function(recipe) { error_status <- T } } else if (tolower(recipe$Analysis$Horizon) == "decadal") { - archive <- read_yaml(ARCHIVE_DECADAL)$archive + archive <- read_yaml(ARCHIVE_DECADAL)[[recipe$Run$filesystem]] if (!all(TIME_SETTINGS_DECADAL %in% names(recipe$Analysis$Time))) { error(recipe$Run$logger, paste0("The element 'Time' in the recipe must contain all of the ", @@ -187,22 +187,31 @@ check_recipe <- function(recipe) { # Region checks: LIMITS <- c('latmin', 'latmax', 'lonmin', 'lonmax') - for (region in recipe$Analysis$Region) { - if (!all(LIMITS %in% names(region))) { - error(recipe$Run$logger, - paste0("There must be 4 elements in 'Region': ", - paste(LIMITS, collapse = ", "), ".")) - error_status <- T - } - } - if (length(recipe$Analysis$Region) > 1) { + # Ordinary recipe + if (is.null(names(recipe$Analysis$Region))) { for (region in recipe$Analysis$Region) { - if (is.null(region$name)) { - error(recipe$Run$logger, - paste("If more than one region has been defined, every region", - "must have a unique name.")) + if (!all(LIMITS %in% names(region))) { + error(recipe$Run$logger, + paste0("There must be 4 elements in 'Region': ", + paste(LIMITS, collapse = ", "), ".")) + error_status <- T } } + if (length(recipe$Analysis$Region) > 1) { + for (region in recipe$Analysis$Region) { + if (!("name" %in% names(region)) || (is.null(region$name))) { + error(recipe$Run$logger, + paste("If more than one region has been defined, every region", + "must have a unique name.")) + } + } + } + # Atomic recipe + } else if (!all(LIMITS %in% names(recipe$Analysis$Region))) { + error(recipe$Run$logger, + paste0("There must be 4 elements in 'Region': ", + paste(LIMITS, collapse = ", "), ".")) + error_status <- T } ## TODO: Implement multiple regions # nregions <- length(recipe$Analysis$Region) diff --git a/tools/prepare_outputs.R b/tools/prepare_outputs.R index 85be5c46..6d191d6e 100644 --- a/tools/prepare_outputs.R +++ b/tools/prepare_outputs.R @@ -30,9 +30,7 @@ prepare_outputs <- function(recipe_file, recipe <- read_yaml(recipe_file) recipe$recipe_path <- recipe_file recipe$name <- tools::file_path_sans_ext(basename(recipe_file)) - if (is.null(recipe$Run$filesystem)) { - recipe$Run$filesystem <- "esarchive" - } + output_dir = recipe$Run$output_dir # Create output folders @@ -81,6 +79,13 @@ prepare_outputs <- function(recipe_file, recipe$Run$output_dir <- file.path(output_dir, folder_name) recipe$Run$logger <- logger recipe$Run$logfile <- logfile + + # Set up default filesystem + if (is.null(recipe$Run$filesystem)) { + recipe$Run$filesystem <- "esarchive" + warn(recipe$Run$logger, + "Filesystem not specified in the recipe. Setting it to 'esarchive'.") + } # Run recipe checker if (disable_checks) { warn(recipe$Run$logger, -- GitLab From 36b65cf77e8f75fdaab60540492126e21c8ff8ba Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Tue, 21 Mar 2023 14:53:00 +0100 Subject: [PATCH 082/388] Change ncores in test recipe, rename 'startup' to 'log' --- modules/Loading/testing_recipes/recipe_system7c3s-tas.yml | 2 +- tools/prepare_outputs.R | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/Loading/testing_recipes/recipe_system7c3s-tas.yml b/modules/Loading/testing_recipes/recipe_system7c3s-tas.yml index c8d3b5e8..47cfc31b 100644 --- a/modules/Loading/testing_recipes/recipe_system7c3s-tas.yml +++ b/modules/Loading/testing_recipes/recipe_system7c3s-tas.yml @@ -39,7 +39,7 @@ Analysis: percentiles: [[1/3, 2/3], [1/10, 9/10], [1/4, 2/4, 3/4]] Indicators: index: no - ncores: 1 + ncores: 10 remove_NAs: yes Output_format: S2S4E Run: diff --git a/tools/prepare_outputs.R b/tools/prepare_outputs.R index 6d191d6e..61825738 100644 --- a/tools/prepare_outputs.R +++ b/tools/prepare_outputs.R @@ -51,7 +51,7 @@ prepare_outputs <- function(recipe_file, file.copy(recipe$recipe_path, file.path(output_dir, folder_name, 'logs', 'recipes')) # Create log output file - logfile <- file.path(output_dir, folder_name, 'logs', 'startup.log') + logfile <- file.path(output_dir, folder_name, 'logs', 'main.log') file.create(logfile) # Set default behaviour of logger -- GitLab From 02966e548092d63c0821fdd6569a22e836d1d265 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Tue, 21 Mar 2023 14:59:16 +0100 Subject: [PATCH 083/388] Move testing atomic recipes to another directory --- modules/test_decadal.R | 2 +- .../atomic_recipes}/recipe_decadal.yml | 0 .../atomic_recipes}/recipe_decadal_daily.yml | 0 .../atomic_recipes}/recipe_decadal_monthly_2.yml | 0 .../atomic_recipes}/recipe_seasonal-tests.yml | 0 .../atomic_recipes}/recipe_system5c3s-rsds.yml | 0 .../atomic_recipes}/recipe_system5c3s-tas.yml | 0 .../atomic_recipes}/recipe_system7c3s-prlr.yml | 0 .../atomic_recipes}/recipe_system7c3s-tas.yml | 0 .../atomic_recipes}/recipe_tas-daily-regrid-to-reference.yml | 0 .../atomic_recipes}/recipe_tas-daily-regrid-to-system.yml | 0 .../atomic_recipes}/recipe_test-logging.yml | 0 .../atomic_recipes}/recipe_test-new-metrics.yml | 0 .../atomic_recipes}/recipe_test_anomalies.yml | 0 .../atomic_recipes}/recipe_testing_nadia.yml | 0 .../atomic_recipes}/wrong_recipe_example.yml | 0 16 files changed, 1 insertion(+), 1 deletion(-) rename {modules/Loading/testing_recipes => recipes/atomic_recipes}/recipe_decadal.yml (100%) rename {modules/Loading/testing_recipes => recipes/atomic_recipes}/recipe_decadal_daily.yml (100%) rename {modules/Loading/testing_recipes => recipes/atomic_recipes}/recipe_decadal_monthly_2.yml (100%) rename {modules/Loading/testing_recipes => recipes/atomic_recipes}/recipe_seasonal-tests.yml (100%) rename {modules/Loading/testing_recipes => recipes/atomic_recipes}/recipe_system5c3s-rsds.yml (100%) rename {modules/Loading/testing_recipes => recipes/atomic_recipes}/recipe_system5c3s-tas.yml (100%) rename {modules/Loading/testing_recipes => recipes/atomic_recipes}/recipe_system7c3s-prlr.yml (100%) rename {modules/Loading/testing_recipes => recipes/atomic_recipes}/recipe_system7c3s-tas.yml (100%) rename {modules/Loading/testing_recipes => recipes/atomic_recipes}/recipe_tas-daily-regrid-to-reference.yml (100%) rename {modules/Loading/testing_recipes => recipes/atomic_recipes}/recipe_tas-daily-regrid-to-system.yml (100%) rename {modules/Loading/testing_recipes => recipes/atomic_recipes}/recipe_test-logging.yml (100%) rename {modules/Loading/testing_recipes => recipes/atomic_recipes}/recipe_test-new-metrics.yml (100%) rename {modules/Loading/testing_recipes => recipes/atomic_recipes}/recipe_test_anomalies.yml (100%) rename {modules/Loading/testing_recipes => recipes/atomic_recipes}/recipe_testing_nadia.yml (100%) rename {modules/Loading/testing_recipes => recipes/atomic_recipes}/wrong_recipe_example.yml (100%) diff --git a/modules/test_decadal.R b/modules/test_decadal.R index 8998cfbe..f9f9521d 100644 --- a/modules/test_decadal.R +++ b/modules/test_decadal.R @@ -5,7 +5,7 @@ source("modules/Skill/Skill.R") source("modules/Saving/Saving.R") source("modules/Visualization/Visualization.R") -recipe_file <- "modules/Loading/testing_recipes/recipe_decadal.yml" +recipe_file <- "recipes/atomic_recipes/recipe_decadal.yml" recipe <- prepare_outputs(recipe_file) # archive <- read_yaml(paste0(recipe$Run$code_dir, "conf/archive_decadal.yml"))$archive diff --git a/modules/Loading/testing_recipes/recipe_decadal.yml b/recipes/atomic_recipes/recipe_decadal.yml similarity index 100% rename from modules/Loading/testing_recipes/recipe_decadal.yml rename to recipes/atomic_recipes/recipe_decadal.yml diff --git a/modules/Loading/testing_recipes/recipe_decadal_daily.yml b/recipes/atomic_recipes/recipe_decadal_daily.yml similarity index 100% rename from modules/Loading/testing_recipes/recipe_decadal_daily.yml rename to recipes/atomic_recipes/recipe_decadal_daily.yml diff --git a/modules/Loading/testing_recipes/recipe_decadal_monthly_2.yml b/recipes/atomic_recipes/recipe_decadal_monthly_2.yml similarity index 100% rename from modules/Loading/testing_recipes/recipe_decadal_monthly_2.yml rename to recipes/atomic_recipes/recipe_decadal_monthly_2.yml diff --git a/modules/Loading/testing_recipes/recipe_seasonal-tests.yml b/recipes/atomic_recipes/recipe_seasonal-tests.yml similarity index 100% rename from modules/Loading/testing_recipes/recipe_seasonal-tests.yml rename to recipes/atomic_recipes/recipe_seasonal-tests.yml diff --git a/modules/Loading/testing_recipes/recipe_system5c3s-rsds.yml b/recipes/atomic_recipes/recipe_system5c3s-rsds.yml similarity index 100% rename from modules/Loading/testing_recipes/recipe_system5c3s-rsds.yml rename to recipes/atomic_recipes/recipe_system5c3s-rsds.yml diff --git a/modules/Loading/testing_recipes/recipe_system5c3s-tas.yml b/recipes/atomic_recipes/recipe_system5c3s-tas.yml similarity index 100% rename from modules/Loading/testing_recipes/recipe_system5c3s-tas.yml rename to recipes/atomic_recipes/recipe_system5c3s-tas.yml diff --git a/modules/Loading/testing_recipes/recipe_system7c3s-prlr.yml b/recipes/atomic_recipes/recipe_system7c3s-prlr.yml similarity index 100% rename from modules/Loading/testing_recipes/recipe_system7c3s-prlr.yml rename to recipes/atomic_recipes/recipe_system7c3s-prlr.yml diff --git a/modules/Loading/testing_recipes/recipe_system7c3s-tas.yml b/recipes/atomic_recipes/recipe_system7c3s-tas.yml similarity index 100% rename from modules/Loading/testing_recipes/recipe_system7c3s-tas.yml rename to recipes/atomic_recipes/recipe_system7c3s-tas.yml diff --git a/modules/Loading/testing_recipes/recipe_tas-daily-regrid-to-reference.yml b/recipes/atomic_recipes/recipe_tas-daily-regrid-to-reference.yml similarity index 100% rename from modules/Loading/testing_recipes/recipe_tas-daily-regrid-to-reference.yml rename to recipes/atomic_recipes/recipe_tas-daily-regrid-to-reference.yml diff --git a/modules/Loading/testing_recipes/recipe_tas-daily-regrid-to-system.yml b/recipes/atomic_recipes/recipe_tas-daily-regrid-to-system.yml similarity index 100% rename from modules/Loading/testing_recipes/recipe_tas-daily-regrid-to-system.yml rename to recipes/atomic_recipes/recipe_tas-daily-regrid-to-system.yml diff --git a/modules/Loading/testing_recipes/recipe_test-logging.yml b/recipes/atomic_recipes/recipe_test-logging.yml similarity index 100% rename from modules/Loading/testing_recipes/recipe_test-logging.yml rename to recipes/atomic_recipes/recipe_test-logging.yml diff --git a/modules/Loading/testing_recipes/recipe_test-new-metrics.yml b/recipes/atomic_recipes/recipe_test-new-metrics.yml similarity index 100% rename from modules/Loading/testing_recipes/recipe_test-new-metrics.yml rename to recipes/atomic_recipes/recipe_test-new-metrics.yml diff --git a/modules/Loading/testing_recipes/recipe_test_anomalies.yml b/recipes/atomic_recipes/recipe_test_anomalies.yml similarity index 100% rename from modules/Loading/testing_recipes/recipe_test_anomalies.yml rename to recipes/atomic_recipes/recipe_test_anomalies.yml diff --git a/modules/Loading/testing_recipes/recipe_testing_nadia.yml b/recipes/atomic_recipes/recipe_testing_nadia.yml similarity index 100% rename from modules/Loading/testing_recipes/recipe_testing_nadia.yml rename to recipes/atomic_recipes/recipe_testing_nadia.yml diff --git a/modules/Loading/testing_recipes/wrong_recipe_example.yml b/recipes/atomic_recipes/wrong_recipe_example.yml similarity index 100% rename from modules/Loading/testing_recipes/wrong_recipe_example.yml rename to recipes/atomic_recipes/wrong_recipe_example.yml -- GitLab From b65a4402af0147e5e6ccb990f65b6188e9b8863b Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Tue, 21 Mar 2023 15:15:13 +0100 Subject: [PATCH 084/388] Update README and NEWS --- NEWS.md | 19 +++++++++++++++++++ README.md | 2 ++ 2 files changed, 21 insertions(+) diff --git a/NEWS.md b/NEWS.md index fe7ea6e3..e8cda565 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,3 +1,22 @@ +ESS Verification Suite v1.1.0 + +Modules: Loading, Anomalies, Calibration, Skill, Saving, Visualization + +New features: + +New module for anomaly computation. +New 'Scorecards' output format (different file names and paths from the default format). +New 'recipe checker' feature in prepare_outputs(): It runs a series of checks on the recipe to detect potential errors, typos, or missing information. +Summary of fixes/improvements: + +Changed the names of the seasonal systems from the names in /esarchive to the official names in the CDS. +Fixed a bug in the conversion of precipitation units. +Fixed a bug related to the consistency between experiment and observation dates for some systems. +Function parameters have been simplified and uniformized. +Improvements in the logging functionality for longer messages. +Improvements to the plots generated by the Visualization module. +compute_probabilities() now returns the fcst probabilities as well. + ESS Verification Suite v1.0.0 ============================= diff --git a/README.md b/README.md index 4df05ecc..538fa029 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,8 @@ You can access the documentation of the Verification Suite through the wiki: You may also find useful information in the slides from past user meetings: +[User meeting March 2023](https://docs.google.com/presentation/d/18VoqgJCzcZTmqNyXL3op_KecsPxsWRkf/edit#slide=id.p1?target=_blank) + [User meeting September 2022](https://docs.google.com/presentation/d/14-qq__fblMt7xvJDaqS5UqfQMXWCf3Ju/edit#slide=id.p1?target=_blank) [User meeting June 2022](https://docs.google.com/presentation/d/1R8Gcz5R_NTgcBQvXBkCPG3jY31BVPDur/edit#slide=id.p1?target=_blank) -- GitLab From 9865d8cc194ee3c812141e7fee8ed2dd4cbe8ca0 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Tue, 21 Mar 2023 16:24:58 +0100 Subject: [PATCH 085/388] Add log4r to GRIB loading, source libs.R, make archive path relative --- modules/Loading/Loading_GRIB.R | 23 ++++++++++++++--------- modules/test_GRIB.R | 3 --- tools/libs.R | 1 + 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/modules/Loading/Loading_GRIB.R b/modules/Loading/Loading_GRIB.R index c8e675a9..313dc0a8 100644 --- a/modules/Loading/Loading_GRIB.R +++ b/modules/Loading/Loading_GRIB.R @@ -3,8 +3,7 @@ ################################################# source('modules/Loading/GRIB/GrbLoad.R') -library(yaml) -library(clock) +source('tools/libs.R') load_datasets <- function(recipe) { @@ -28,7 +27,7 @@ load_datasets <- function(recipe) { store.freq <- recipe$Analysis$Variables$freq # get MARS datasets dict: - archive <- read_yaml(paste0(recipe$Run$code_dir, "conf/archive_GRIB.yml"))$archive + archive <- read_yaml("conf/archive_GRIB.yml")$archive exp_descrip <- archive$System[[exp.name]] freq.hcst <- unlist(exp_descrip[[store.freq]][variable]) reference_descrip <- archive$Reference[[ref.name]] @@ -40,7 +39,8 @@ load_datasets <- function(recipe) { fcst.nmember <- exp_descrip$nmember$fcst hcst.nmember <- exp_descrip$nmember$hcst - print("========== PARAMETERS RETRIEVED. ==========") + info(recipe$Run$logger, + "========== PARAMETERS RETRIEVED. ==========") # Load hindcast #------------------------------------------------------------------- @@ -59,7 +59,8 @@ load_datasets <- function(recipe) { hcst <- GrbLoad(dat = as.list(hcst.files), time_step = hcst.ftime, has.memb = hcst.nmember) gc() - print("========== HCST LOADED. ==========") + info(recipe$Run$logger, + "========== HCST LOADED. ==========") # Load forecast #------------------------------------------------------------------- @@ -73,7 +74,8 @@ load_datasets <- function(recipe) { fcst <- NULL } - print("========== FCST LOADED. ==========") + info(recipe$Run$logger, + "========== FCST LOADED. ==========") # Load reference #------------------------------------------------------------------- @@ -89,7 +91,8 @@ load_datasets <- function(recipe) { obs <- GrbLoad(dat = as.list(obs.files), time_step = 1, has.memb = NULL, syear_time_dim = dim(hcst_times)) gc() - print("========== OBS LOADED. ==========") + info(recipe$Run$logger, + "========== OBS LOADED. ==========") ################################################################################# @@ -178,7 +181,8 @@ load_datasets <- function(recipe) { } - print("========== REGRID DONE. ==========") + info(recipe$Run$logger, + "========== REGRID DONE. ==========") # Turn into s2dv_cube @@ -295,7 +299,8 @@ load_datasets <- function(recipe) { # ..$ source_files: chr [1:2] "/esarchive/scratch/aho/tmp/GRIB/GRIB_system5_tas_CORRECTED/tas_20001101.grb" "/esarchive/scratch/aho/tmp/GRIB/GRIB_system5_tas_CORRECTED/tas_20011101.grb" # ..$ gribEdition : num 1 # - attr(*, "class")= chr "s2dv_cube" - + info(recipe$Run$logger, + "##### GRIB DATA LOADED SUCCESSFULLY #####") return(list(hcst = hcst, fcst = fcst, obs = obs)) diff --git a/modules/test_GRIB.R b/modules/test_GRIB.R index 429c8032..b29e6e54 100644 --- a/modules/test_GRIB.R +++ b/modules/test_GRIB.R @@ -4,9 +4,6 @@ source("tools/libs.R") # for prepare_outputs.R #TODO: remove this line when new s2dv_cube() is in CSTools source('modules/Loading/GRIB/s2dv_cube.R') -library(yaml) -library(clock) - recipe <- "modules/Loading/testing_recipes/recipe_GRIB_system5_era5.yml" recipe <- prepare_outputs(recipe) diff --git a/tools/libs.R b/tools/libs.R index 387d9b90..3ea238c2 100644 --- a/tools/libs.R +++ b/tools/libs.R @@ -12,6 +12,7 @@ library(easyNCDF) library(CSTools) library(lubridate) library(PCICt) +library(clock) library(RColorBrewer) # # library(parallel) -- GitLab From 4190ef62a29cba395ac6aa1173883804eb20a833 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Tue, 21 Mar 2023 17:05:25 +0100 Subject: [PATCH 086/388] Add MARS autosubmit configuration files (WIP) --- autosubmit/conf_mars/autosubmit.yml | 22 +++++++++++++++ autosubmit/conf_mars/expdef.yml | 43 +++++++++++++++++++++++++++++ autosubmit/conf_mars/jobs.yml | 9 ++++++ autosubmit/conf_mars/platforms.yml | 13 +++++++++ autosubmit/conf_mars/proj.yml | 4 +++ 5 files changed, 91 insertions(+) create mode 100644 autosubmit/conf_mars/autosubmit.yml create mode 100644 autosubmit/conf_mars/expdef.yml create mode 100644 autosubmit/conf_mars/jobs.yml create mode 100644 autosubmit/conf_mars/platforms.yml create mode 100644 autosubmit/conf_mars/proj.yml diff --git a/autosubmit/conf_mars/autosubmit.yml b/autosubmit/conf_mars/autosubmit.yml new file mode 100644 index 00000000..97534284 --- /dev/null +++ b/autosubmit/conf_mars/autosubmit.yml @@ -0,0 +1,22 @@ +config: + EXPID: + AUTOSUBMIT_VERSION: 3.14.0 + MAXWAITINGJOBS: 16 + # Default maximum number of jobs to be running at the same time at any platform + # Default: 6 + TOTALJOBS: 16 + SAFETYSLEEPTIME: 10 + RETRIALS: 0 +mail: + NOTIFICATIONS: + TO: +communications: + # Communications library used to connect with platforms: paramiko or saga. + # Default: paramiko + API: paramiko +storage: + # Defines the way of storing the progress of the experiment. The available options are: + # A PICKLE file (pkl) or an SQLite database (db). Default: pkl + TYPE: pkl + # Defines if the remote logs will be copied to the local platform. Default: True. + COPY_REMOTE_LOGS: True diff --git a/autosubmit/conf_mars/expdef.yml b/autosubmit/conf_mars/expdef.yml new file mode 100644 index 00000000..eee755d7 --- /dev/null +++ b/autosubmit/conf_mars/expdef.yml @@ -0,0 +1,43 @@ +DeFault: + EXPID: + HPCARCH: nord3v2 +experiment: + DATELIST: + MEMBERS: fc0 + CHUNKSIZEUNIT: month + NUMCHUNKS: + CHUNKINI: + CALENDAR: standard +project: + PROJECT_TYPE: local + # Destination folder name for project. type: STRING, default: leave empty, + PROJECT_DESTINATION: auto-s2s +# If PROJECT_TYPE is not git, no need to change +git: + # Repository URL STRING: 'https://github.com/torvalds/linux.git' + PROJECT_ORIGIN: https://earth.bsc.es/gitlab/es/auto-s2s.git + # Select branch or tag, STRING, default: 'master', help: {'master' (default), 'develop', 'v3.1b', ...} + PROJECT_BRANCH: master + # type: STRING, default: leave empty, help: if model branch is a TAG leave empty + PROJECT_COMMIT: '' +svn: + PROJECT_URL: '' + PROJECT_REVISION: '' +# If PROJECT_TYPE is not local, no need to change +local: + # type: STRING, help: /foo/bar/ecearth + PROJECT_PATH: /esarchive/scratch/vagudets/repos/auto-s2s/ +# If PROJECT_TYPE is none, no need to change +project_files: + # Where is PROJECT CONFIGURATION file location relative to project root path + FILE_PROJECT_CONF: '' + # Where is JOBS CONFIGURATION file location relative to project root path + FILE_JOBS_CONF: '' + # Default job scripts type in the project. type: STRING, default: bash, supported: 'bash', 'python' or 'r' + JOB_SCRIPTS_TYPE: '' +rerun: + # Is a rerun or not? [Default: Do set FALSE]. BOOLEAN: TRUE, FALSE + RERUN: FALSE + # If RERUN: TRUE then supply the list of chunks to rerun + # LIST: [ 19601101 [ fc0 [1 2 3 4] fc1 [1] ] 19651101 [ fc0 [16-30] ] ] + CHUNKLIST: '' diff --git a/autosubmit/conf_mars/jobs.yml b/autosubmit/conf_mars/jobs.yml new file mode 100644 index 00000000..daab7ed8 --- /dev/null +++ b/autosubmit/conf_mars/jobs.yml @@ -0,0 +1,9 @@ +JOBS: + verification: + FILE: autosubmit/auto-verification.sh + RUNNING: chunk + WALLCLOCK: + NOTIFY_ON: + PLATFORM: nord3v2 + PROCESSORS: + diff --git a/autosubmit/conf_mars/platforms.yml b/autosubmit/conf_mars/platforms.yml new file mode 100644 index 00000000..79aea18e --- /dev/null +++ b/autosubmit/conf_mars/platforms.yml @@ -0,0 +1,13 @@ +## TODO: Change platform +Platforms: + nord3v2: + TYPE: slurm + HOST: nord4.bsc.es + PROJECT: bsc32 + ADD_PROJECT_TO_HOST: False + USER: + SCRATCH_DIR: /gpfs/scratch + PROCESSORS_PER_NODE: 16 + SERIAL_QUEUE: debug + QUEUE: bsc_es + CUSTOM_DIRECTIVES: ["#SBATCH --exclusive"] diff --git a/autosubmit/conf_mars/proj.yml b/autosubmit/conf_mars/proj.yml new file mode 100644 index 00000000..679cf63b --- /dev/null +++ b/autosubmit/conf_mars/proj.yml @@ -0,0 +1,4 @@ +common: + MODULES: "MODULES" + OUTDIR: + SCRIPT: -- GitLab From f67cc696f74e595bbedfea06c6a2f606286c499c Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Wed, 22 Mar 2023 12:03:17 +0100 Subject: [PATCH 087/388] Add autosubmit v4 configuration for CERISE and dummy 'mars' filesystem --- autosubmit/auto-verification-v4.sh | 19 ++ autosubmit/conf_mars/autosubmit.yml | 2 +- autosubmit/conf_mars/expdef.yml | 7 +- autosubmit/conf_mars/jobs.yml | 5 +- autosubmit/conf_mars/platforms.yml | 7 +- conf/archive.yml | 181 +++++++++++++++++++ conf/autosubmit.yml | 9 + recipes/tests/recipe_autosubmit_marstest.yml | 76 ++++++++ tools/write_autosubmit_conf.R | 30 ++- 9 files changed, 319 insertions(+), 17 deletions(-) create mode 100644 autosubmit/auto-verification-v4.sh create mode 100644 recipes/tests/recipe_autosubmit_marstest.yml diff --git a/autosubmit/auto-verification-v4.sh b/autosubmit/auto-verification-v4.sh new file mode 100644 index 00000000..e21bef2d --- /dev/null +++ b/autosubmit/auto-verification-v4.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +############ AUTOSUBMIT INPUTS ############ +proj_dir=%PROJDIR% +outdir=%common.OUTDIR% +script=%common.SCRIPT% +CHUNK=%CHUNK% +############################### + +## TODO: How to define the script +cd $proj_dir + +# script=modules/test_parallel_workflow.R +atomic_recipe_number=$(printf "%02d" $CHUNK) +atomic_recipe=${outdir}/logs/recipes/atomic_recipe_${atomic_recipe_number}.yml + +source MODULES + +Rscript ${script} ${atomic_recipe} diff --git a/autosubmit/conf_mars/autosubmit.yml b/autosubmit/conf_mars/autosubmit.yml index 97534284..0fd5d5c6 100644 --- a/autosubmit/conf_mars/autosubmit.yml +++ b/autosubmit/conf_mars/autosubmit.yml @@ -1,6 +1,6 @@ config: EXPID: - AUTOSUBMIT_VERSION: 3.14.0 + AUTOSUBMIT_VERSION: 4.0.0b0 MAXWAITINGJOBS: 16 # Default maximum number of jobs to be running at the same time at any platform # Default: 6 diff --git a/autosubmit/conf_mars/expdef.yml b/autosubmit/conf_mars/expdef.yml index eee755d7..b4327f65 100644 --- a/autosubmit/conf_mars/expdef.yml +++ b/autosubmit/conf_mars/expdef.yml @@ -1,12 +1,13 @@ -DeFault: +DEFAULT: EXPID: - HPCARCH: nord3v2 + HPCARCH: NORD3 experiment: DATELIST: MEMBERS: fc0 CHUNKSIZEUNIT: month + CHUNKSIZE: 1 NUMCHUNKS: - CHUNKINI: + CHUNKINI: 1 CALENDAR: standard project: PROJECT_TYPE: local diff --git a/autosubmit/conf_mars/jobs.yml b/autosubmit/conf_mars/jobs.yml index daab7ed8..2d8e32af 100644 --- a/autosubmit/conf_mars/jobs.yml +++ b/autosubmit/conf_mars/jobs.yml @@ -1,9 +1,8 @@ JOBS: verification: - FILE: autosubmit/auto-verification.sh + FILE: autosubmit/auto-verification-CERISE.sh RUNNING: chunk WALLCLOCK: NOTIFY_ON: - PLATFORM: nord3v2 + PLATFORM: NORD3 PROCESSORS: - diff --git a/autosubmit/conf_mars/platforms.yml b/autosubmit/conf_mars/platforms.yml index 79aea18e..5f76557f 100644 --- a/autosubmit/conf_mars/platforms.yml +++ b/autosubmit/conf_mars/platforms.yml @@ -1,12 +1,11 @@ ## TODO: Change platform Platforms: - nord3v2: + NORD3: TYPE: slurm HOST: nord4.bsc.es - PROJECT: bsc32 - ADD_PROJECT_TO_HOST: False USER: - SCRATCH_DIR: /gpfs/scratch + PROJECT: bsc32 ## TO BE CHANGED + SCRATCH_DIR: /gpfs/scratch/ ## TO BE CHANGED PROCESSORS_PER_NODE: 16 SERIAL_QUEUE: debug QUEUE: bsc_es diff --git a/conf/archive.yml b/conf/archive.yml index 4450706a..200dd154 100644 --- a/conf/archive.yml +++ b/conf/archive.yml @@ -181,3 +181,184 @@ esarchive: reference_grid: "/esarchive/recon/ecmwf/uerra_mescan/daily_mean/tas_f6h/tas_201805.nc" +mars: + src: "/esarchive/" + System: + ECMWF-SEAS5: + name: "ECMWF SEAS5" + institution: "European Centre for Medium-Range Weather Forecasts" + src: "exp/ecmwf/system5c3s/" + daily_mean: {"tas":"_f6h/", "rsds":"_s0-24h/", + "prlr":"_s0-24h/", "sfcWind":"_f6h/", + "tasmin":"_f24h/", "tasmax":"_f24h/", + "ta300":"_f12h/", "ta500":"_f12h/", "ta850":"_f12h/", + "g300":"_f12h/", "g500":"_f12h/", "g850":"_f12h/", + "tdps":"_f6h/", "hurs":"_f6h/"} + monthly_mean: {"tas":"_f6h/", "rsds":"_s0-24h/", + "prlr":"_s0-24h/", "sfcWind":"_f6h/", + "tasmin":"_f24h/", "tasmax":"_f24h/", + "ta300":"_f12h/", "ta500":"_f12h/", "ta850":"_f12h/", + "g300":"_f12h/", "g500":"_f12h/", "g850":"_f12h/", + "tdps":"_f6h/"} + nmember: + fcst: 51 + hcst: 25 + calendar: "proleptic_gregorian" + time_stamp_lag: "0" + reference_grid: "/esarchive/exp/ecmwf/system5c3s/monthly_mean/tas_f6h/tas_20180501.nc" + ECMWF-SEAS5.1: + name: "ECMWF SEAS5 (v5.1)" + institution: "European Centre for Medium-Range Weather Forecasts" + src: "exp/ecmwf/system51c3s/" + daily_mean: {"tas":"_f6h/", "prlr":"_s0-24h/", "sfcWind":"_f6h/", + "uas":"_f6h/", "vas":"_f6h/", "psl":"_f6h/", + "tdps":"_f6h/"} + monthly_mean: {"tas":"_f6h/", "rsds":"_s0-24h/", "prlr":"_s0-24h/", + "sfcWind":"_f6h/", "tasmin":"_f24h/", "tasmax":"_f24h/", + "uas":"_f6h/", "vas":"_f6h/", "psl":"_f6h/", + "tdps":"_f6h/"} + nmember: + fcst: 51 + hcst: 25 + calendar: "proleptic_gregorian" + time_stamp_lag: "0" + reference_grid: "conf/grid_description/griddes_system51c3s.txt" + Meteo-France-System7: + name: "Meteo-France System 7" + institution: "European Centre for Medium-Range Weather Forecasts" + src: "exp/meteofrance/system7c3s/" + monthly_mean: {"tas":"_f6h/", "g500":"_f12h/", + "prlr":"_f24h/", "sfcWind": "_f6h/", + "tasmax":"_f6h/", "tasmin": "_f6h/"} + nmember: + fcst: 51 + hcst: 25 + time_stamp_lag: "+1" + calendar: "proleptic_gregorian" + reference_grid: "conf/grid_description/griddes_system7c3s.txt" + DWD-GCFS2.1: + name: "DWD GCFS 2.1" + institution: "European Centre for Medium-Range Weather Forecasts" + src: "exp/dwd/system21_m1/" + monthly_mean: {"tas":"_f6h/", "prlr":"_f24h/", + "g500":"_f12h/", "sfcWind":"_f6h/", + "tasmin":"_f24h/", "tasmax":"_f24h/"} + nmember: + fcst: 50 + hcst: 30 + calendar: "proleptic_gregorian" + time_stamp_lag: "+1" + reference_grid: "conf/grid_description/griddes_system21_m1.txt" + CMCC-SPS3.5: + name: "CMCC-SPS3.5" + institution: "European Centre for Medium-Range Weather Forecasts" + src: "exp/cmcc/system35c3s/" + monthly_mean: {"tas":"_f6h/", "g500":"_f12h/", + "prlr":"_f24h/", "sfcWind": "_f6h/", + "tasmax":"_f24h/", "tasmin":"_f24h"} + nmember: + fcst: 50 + hcst: 40 + calendar: "proleptic_gregorian" + time_stamp_lag: "+1" + reference_grid: "conf/grid_description/griddes_system35c3s.txt" + JMA-CPS2: + name: "JMA System 2" + institution: "European Centre for Medium-Range Weather Forecasts" + src: "exp/jma/system2c3s/" + monthly_mean: {"tas":"_f6h/", "prlr":"_f6h/", + "tasmax":"_f6h/", "tasmin":"_f6h/"} + nmember: + fcst: 10 + hcst: 10 + calendar: "proleptic_gregorian" + time_stamp_lag: "+1" + reference_grid: "conf/grid_description/griddes_system2c3s.txt" + ECCC-CanCM4i: + name: "ECCC CanCM4i" + institution: "European Centre for Medium-Range Weather Forecasts" + src: "exp/eccc/eccc1/" + monthly_mean: {"tas":"_f6h/", "prlr":"_f6h/", + "tasmax":"_f6h/", "tasmin":"_f6h/"} + nmember: + fcst: 10 + hcst: 10 + calendar: "proleptic_gregorian" + time_stamp_lag: "+1" + reference_grid: "conf/grid_description/griddes_eccc1.txt" + UK-MetOffice-Glosea600: + name: "UK MetOffice GloSea 6 (v6.0)" + institution: "European Centre for Medium-Range Weather Forecasts" + src: "exp/ukmo/glosea6_system600-c3s/" + monthly_mean: {"tas":"_f6h/", "tasmin":"_f24h/", + "tasmax":"_f24h/", "prlr":"_f24h/"} + nmember: + fcst: 62 + hcst: 28 + calendar: "proleptic_gregorian" + time_stamp_lag: "+1" + reference_grid: "conf/grid_description/griddes_ukmo600.txt" + NCEP-CFSv2: + name: "NCEP CFSv2" + institution: "NOAA NCEP" #? + src: "exp/ncep/cfs-v2/" + monthly_mean: {"tas":"_f6h/", "prlr":"_f6h/", + "tasmax":"_f6h/", "tasmin":"_f6h/"} + nmember: + fcst: 20 + hcst: 20 + calendar: "gregorian" + time_stamp_lag: "0" + reference_grid: "conf/grid_description/griddes_ncep-cfsv2.txt" + Reference: + ERA5: + name: "ERA5" + institution: "European Centre for Medium-Range Weather Forecasts" + src: "recon/ecmwf/era5/" + daily_mean: {"tas":"_f1h-r1440x721cds/", + "rsds":"_f1h-r1440x721cds/", + "prlr":"_f1h-r1440x721cds/", + "g300":"_f1h-r1440x721cds/", + "g500":"_f1h-r1440x721cds/", + "g850":"_f1h-r1440x721cds/", + "sfcWind":"_f1h-r1440x721cds/", + "tasmax":"_f1h-r1440x721cds/", + "tasmin":"_f1h-r1440x721cds/", + "ta300":"_f1h-r1440x721cds/", + "ta500":"_f1h-r1440x721cds/", + "ta850":"_f1h-r1440x721cds/", + "hurs":"_f1h-r1440x721cds/"} + monthly_mean: {"tas":"_f1h-r1440x721cds/", + "prlr":"_f1h-r1440x721cds/", + "rsds":"_f1h-r1440x721cds/", + "g300":"_f1h-r1440x721cds/", + "g500":"_f1h-r1440x721cds/", + "g850":"_f1h-r1440x721cds/", + "sfcWind":"_f1h-r1440x721cds/", + "tasmax":"_f1h-r1440x721cds/", + "tasmin":"_f1h-r1440x721cds/", + "ta300":"_f1h-r1440x721cds/", + "ta500":"_f1h-r1440x721cds/", + "ta850":"_f1h-r1440x721cds/"} + calendar: "standard" + reference_grid: "/esarchive/recon/ecmwf/era5/monthly_mean/tas_f1h-r1440x721cds/tas_201805.nc" + ERA5-Land: + name: "ERA5-Land" + institution: "European Centre for Medium-Range Weather Forecasts" + src: "recon/ecmwf/era5land/" + daily_mean: {"tas":"_f1h/", "rsds":"_f1h/", + "prlr":"_f1h/", "sfcWind":"_f1h/"} + monthly_mean: {"tas":"_f1h/","tasmin":"_f24h/", + "tasmax":"_f24h/", "prlr":"_f1h/", + "sfcWind":"_f1h/", "rsds":"_f1h/", + "tdps":"_f1h/"} + calendar: "proleptic_gregorian" + reference_grid: "/esarchive/recon/ecmwf/era5land/daily_mean/tas_f1h/tas_201805.nc" + UERRA: + name: "ECMWF UERRA" + institution: "European Centre for Medium-Range Weather Forecasts" + src: "recon/ecmwf/uerra_mescan/" + daily_mean: {"tas":"_f6h/"} + monthly_mean: {"tas":"_f6h/"} + calendar: "proleptic_gregorian" + reference_grid: "/esarchive/recon/ecmwf/uerra_mescan/daily_mean/tas_f6h/tas_201805.nc" diff --git a/conf/autosubmit.yml b/conf/autosubmit.yml index 3f852776..8b653a65 100644 --- a/conf/autosubmit.yml +++ b/conf/autosubmit.yml @@ -1,5 +1,14 @@ esarchive: platform: nord3v2 module_version: autosubmit/3.14.0-foss-2015a-Python-2.7.9 + auto_version: 3.14.0 + conf_format: ini experiment_dir: /esarchive/autosubmit/ userID: bsc32 +mars: + platform: NORD3 ## TO BE CHANGED + module_version: autosubmit/4.0.0b-foss-2015a-Python-3.7.3 ## TO BE CHANGED + auto_version: 4.0.0 + conf_format: yaml + experiment_dir: /esarchive/autosubmit/ ## TO BE CHANGED + userID: bsc32 ## TO BE CHANGED diff --git a/recipes/tests/recipe_autosubmit_marstest.yml b/recipes/tests/recipe_autosubmit_marstest.yml new file mode 100644 index 00000000..dfd2159f --- /dev/null +++ b/recipes/tests/recipe_autosubmit_marstest.yml @@ -0,0 +1,76 @@ +################################################################################ +## RECIPE DESCRIPTION +################################################################################ + +Description: + Author: V. Agudetse + Info: Test Independent verification of two variables, two sdates, two systems + +################################################################################ +## ANALYSIS CONFIGURATION +################################################################################ + +Analysis: + Horizon: Seasonal + Variables: # ECVs and Indicators? + - {name: tas, freq: monthly_mean} + - {name: prlr, freq: monthly_mean} + Datasets: + System: # multiple systems for single model, split if Multimodel = F + - {name: ECMWF-SEAS5} + - {name: Meteo-France-System7} + Multimodel: False # single option + Reference: + - {name: ERA5} # multiple references for single model? + Time: + sdate: # list, split + - '0101' + - '0201' + fcst_year: # list, don't split, handled internally + hcst_start: '2000' # single option + hcst_end: '2016' # single option + ftime_min: 1 # single option + ftime_max: 6 # single option + Region: # multiple lists, Add region name if there is more than 1 region + - {latmin: -10, latmax: 10, lonmin: -10, lonmax: 10} + Regrid: + method: conservative + type: to_system + Workflow: + Anomalies: + compute: yes + cross_validation: yes + Calibration: + method: raw ## TODO: list, split? + Skill: + metric: RPS, RPSS, CRPS, CRPSS, FRPSS, BSS10, BSS90, mean_bias, mean_bias_SS # list, don't split + Probabilities: + percentiles: [[1/3, 2/3], [1/10, 9/10], [1/4, 2/4, 3/4]] # list, don't split + Indicators: + index: no # ? + ncores: 8 + remove_NAs: yes # bool, don't split + Output_format: S2S4E # string, don't split + +################################################################################ +## Run CONFIGURATION +################################################################################ +Run: + Loglevel: INFO + Terminal: yes + filesystem: mars + output_dir: /esarchive/scratch/vagudets/repos/auto-s2s/out-logs/ + code_dir: /esarchive/scratch/vagudets/repos/auto-s2s/ + autosubmit: yes + # fill only if using autosubmit + auto_conf: + script: /esarchive/scratch/vagudets/repos/auto-s2s/modules/test_parallel_workflow.R # path to the script to run + expid: a5ta ## if left empty, create new exp? + hpc_user: bsc32762 # your hpc username + wallclock: 04:00 # hh:mm + processors_per_job: 8 # use ncores parameter? + platform: nord3v2 # make this constant? + email_notifications: yes # enable/disable email notifications + email_address: victoria.agudetse@bsc.es # email address for notifications + notify_completed: no # notify me by email when a job finishes + notify_failed: yes # notify me by email when a job fails diff --git a/tools/write_autosubmit_conf.R b/tools/write_autosubmit_conf.R index 571294ce..a0208a9e 100644 --- a/tools/write_autosubmit_conf.R +++ b/tools/write_autosubmit_conf.R @@ -35,20 +35,37 @@ write_autosubmit_conf <- function(recipe, nchunks) { } else if (conf_type == "jobs") { # Section 3: jobs ## wallclock, notify_on, platform?, processors - conf$verification$WALLCLOCK <- recipe$Run$auto_conf$wallclock + # Different file structure depending on autosubmit version + if (auto_specs$auto_version == "4.0.0") { + jobs <- conf$JOBS + } else { + jobs <- conf + } + jobs$verification$WALLCLOCK <- recipe$Run$auto_conf$wallclock if (recipe$Run$auto_conf$notify_completed) { - conf$verification$NOTIFY_ON <- paste(conf$verification$NOTIFY_ON, + jobs$verification$NOTIFY_ON <- paste(jobs$verification$NOTIFY_ON, "COMPLETED") } if (recipe$Run$auto_conf$notify_failed) { - conf$verification$NOTIFY_ON <- paste(conf$verification$NOTIFY_ON, + jobs$verification$NOTIFY_ON <- paste(jobs$verification$NOTIFY_ON, "FAILED") } - conf$verification$PROCESSORS <- recipe$Run$auto_conf$processors_per_job # ncores? + jobs$verification$PROCESSORS <- recipe$Run$auto_conf$processors_per_job # ncores? + # Return to original list + if (auto_specs$auto_version == "4.0.0") { + conf$JOBS <- jobs + } else { + conf <- jobs + } } else if (conf_type == "platforms") { # Section 4: platform configuration ## nord3v2 configuration... platform name? user, processors_per_node - conf[[auto_specs$platform]]$USER <- recipe$Run$auto_conf$hpc_user + if (auto_specs$auto_version == "4.0.0") { + conf$Platforms[[auto_specs$platform]]$USER <- + recipe$Run$auto_conf$hpc_user + } else { + conf[[auto_specs$platform]]$USER <- recipe$Run$auto_conf$hpc_user + } } else if (conf_type == "proj") { # Section 5: proj ## modules? Info that goes on script, e.g. output directory @@ -57,7 +74,8 @@ write_autosubmit_conf <- function(recipe, nchunks) { } # Write config file inside autosubmit dir ## TODO: Change write.type depending on autosubmit version - write.config(conf, paste0(dest_dir, dest_file), write.type = "ini") + write.config(conf, paste0(dest_dir, dest_file), + write.type = auto_specs$conf_format) Sys.chmod(paste0(dest_dir, dest_file), mode = "755", use_umask = F) } info(recipe$Run$logger, -- GitLab From 84234d8a1c3b2237ae3d4fe683fbd6a0a5d36f3c Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Wed, 22 Mar 2023 12:31:08 +0100 Subject: [PATCH 088/388] add condition --- split.R | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/split.R b/split.R index 8e33f916..9a3cbf72 100644 --- a/split.R +++ b/split.R @@ -11,5 +11,6 @@ recipe <- prepare_outputs(recipe_file) run_parameters <- divide_recipe(recipe) if (recipe$Run$autosubmit) { write_autosubmit_conf(recipe, run_parameters$n_atomic_recipes) +} else { + run_parameters$outdir } -run_parameters$outdir -- GitLab From 13ba15c34037454092a43e31e87e3f16543659cb Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Wed, 22 Mar 2023 14:40:24 +0100 Subject: [PATCH 089/388] Add mars archive development to GRIB functions --- conf/archive.yml | 177 +----------------- conf/archive_GRIB.yml | 24 --- modules/Loading/Loading_GRIB.R | 2 +- .../recipe_GRIB_system5_era5.yml | 1 + 4 files changed, 10 insertions(+), 194 deletions(-) delete mode 100644 conf/archive_GRIB.yml diff --git a/conf/archive.yml b/conf/archive.yml index a982b84f..0bab1c06 100644 --- a/conf/archive.yml +++ b/conf/archive.yml @@ -198,186 +198,25 @@ esarchive: calendar: "proleptic_gregorian" reference_grid: "/esarchive/recon/ecmwf/cerraland/monthly_mean/prlr_f6h-r2631x1113/prlr_200412.nc" - - mars: - src: "/esarchive/" + src: "/esarchive/scratch/aho/tmp/GRIB/" #"/mars/" System: ECMWF-SEAS5: name: "ECMWF SEAS5" institution: "European Centre for Medium-Range Weather Forecasts" - src: "exp/ecmwf/system5c3s/" - daily_mean: {"tas":"_f6h/", "rsds":"_s0-24h/", - "prlr":"_s0-24h/", "sfcWind":"_f6h/", - "tasmin":"_f24h/", "tasmax":"_f24h/", - "ta300":"_f12h/", "ta500":"_f12h/", "ta850":"_f12h/", - "g300":"_f12h/", "g500":"_f12h/", "g850":"_f12h/", - "tdps":"_f6h/", "hurs":"_f6h/"} - monthly_mean: {"tas":"_f6h/", "rsds":"_s0-24h/", - "prlr":"_s0-24h/", "sfcWind":"_f6h/", - "tasmin":"_f24h/", "tasmax":"_f24h/", - "ta300":"_f12h/", "ta500":"_f12h/", "ta850":"_f12h/", - "g300":"_f12h/", "g500":"_f12h/", "g850":"_f12h/", - "tdps":"_f6h/"} + src: "GRIB_system5_tas_CORRECTED/" + monthly_mean: {"tas":""} nmember: fcst: 51 - hcst: 25 - calendar: "proleptic_gregorian" - time_stamp_lag: "0" - reference_grid: "/esarchive/exp/ecmwf/system5c3s/monthly_mean/tas_f6h/tas_20180501.nc" - ECMWF-SEAS5.1: - name: "ECMWF SEAS5 (v5.1)" - institution: "European Centre for Medium-Range Weather Forecasts" - src: "exp/ecmwf/system51c3s/" - daily_mean: {"tas":"_f6h/", "prlr":"_s0-24h/", "sfcWind":"_f6h/", - "uas":"_f6h/", "vas":"_f6h/", "psl":"_f6h/", - "tdps":"_f6h/"} - monthly_mean: {"tas":"_f6h/", "rsds":"_s0-24h/", "prlr":"_s0-24h/", - "sfcWind":"_f6h/", "tasmin":"_f24h/", "tasmax":"_f24h/", - "uas":"_f6h/", "vas":"_f6h/", "psl":"_f6h/", - "tdps":"_f6h/"} - nmember: - fcst: 51 - hcst: 25 - calendar: "proleptic_gregorian" - time_stamp_lag: "0" - reference_grid: "conf/grid_description/griddes_system51c3s.txt" - Meteo-France-System7: - name: "Meteo-France System 7" - institution: "European Centre for Medium-Range Weather Forecasts" - src: "exp/meteofrance/system7c3s/" - monthly_mean: {"tas":"_f6h/", "g500":"_f12h/", - "prlr":"_f24h/", "sfcWind": "_f6h/", - "tasmax":"_f6h/", "tasmin": "_f6h/"} - nmember: - fcst: 51 - hcst: 25 - time_stamp_lag: "+1" - calendar: "proleptic_gregorian" - reference_grid: "conf/grid_description/griddes_system7c3s.txt" - DWD-GCFS2.1: - name: "DWD GCFS 2.1" - institution: "European Centre for Medium-Range Weather Forecasts" - src: "exp/dwd/system21_m1/" - monthly_mean: {"tas":"_f6h/", "prlr":"_f24h/", - "g500":"_f12h/", "sfcWind":"_f6h/", - "tasmin":"_f24h/", "tasmax":"_f24h/"} - nmember: - fcst: 50 - hcst: 30 - calendar: "proleptic_gregorian" - time_stamp_lag: "+1" - reference_grid: "conf/grid_description/griddes_system21_m1.txt" - CMCC-SPS3.5: - name: "CMCC-SPS3.5" - institution: "European Centre for Medium-Range Weather Forecasts" - src: "exp/cmcc/system35c3s/" - monthly_mean: {"tas":"_f6h/", "g500":"_f12h/", - "prlr":"_f24h/", "sfcWind": "_f6h/", - "tasmax":"_f24h/", "tasmin":"_f24h"} - nmember: - fcst: 50 - hcst: 40 - calendar: "proleptic_gregorian" - time_stamp_lag: "+1" - reference_grid: "conf/grid_description/griddes_system35c3s.txt" - JMA-CPS2: - name: "JMA System 2" - institution: "European Centre for Medium-Range Weather Forecasts" - src: "exp/jma/system2c3s/" - monthly_mean: {"tas":"_f6h/", "prlr":"_f6h/", - "tasmax":"_f6h/", "tasmin":"_f6h/"} - nmember: - fcst: 10 - hcst: 10 + hcst: 51 calendar: "proleptic_gregorian" time_stamp_lag: "+1" - reference_grid: "conf/grid_description/griddes_system2c3s.txt" - ECCC-CanCM4i: - name: "ECCC CanCM4i" - institution: "European Centre for Medium-Range Weather Forecasts" - src: "exp/eccc/eccc1/" - monthly_mean: {"tas":"_f6h/", "prlr":"_f6h/", - "tasmax":"_f6h/", "tasmin":"_f6h/"} - nmember: - fcst: 10 - hcst: 10 - calendar: "proleptic_gregorian" - time_stamp_lag: "+1" - reference_grid: "conf/grid_description/griddes_eccc1.txt" - UK-MetOffice-Glosea600: - name: "UK MetOffice GloSea 6 (v6.0)" - institution: "European Centre for Medium-Range Weather Forecasts" - src: "exp/ukmo/glosea6_system600-c3s/" - monthly_mean: {"tas":"_f6h/", "tasmin":"_f24h/", - "tasmax":"_f24h/", "prlr":"_f24h/"} - nmember: - fcst: 62 - hcst: 28 - calendar: "proleptic_gregorian" - time_stamp_lag: "+1" - reference_grid: "conf/grid_description/griddes_ukmo600.txt" - NCEP-CFSv2: - name: "NCEP CFSv2" - institution: "NOAA NCEP" #? - src: "exp/ncep/cfs-v2/" - monthly_mean: {"tas":"_f6h/", "prlr":"_f6h/", - "tasmax":"_f6h/", "tasmin":"_f6h/"} - nmember: - fcst: 20 - hcst: 20 - calendar: "gregorian" - time_stamp_lag: "0" - reference_grid: "conf/grid_description/griddes_ncep-cfsv2.txt" + reference_grid: "conf/grid_description/griddes_GRIB_system5_m1.txt" Reference: ERA5: name: "ERA5" institution: "European Centre for Medium-Range Weather Forecasts" - src: "recon/ecmwf/era5/" - daily_mean: {"tas":"_f1h-r1440x721cds/", - "rsds":"_f1h-r1440x721cds/", - "prlr":"_f1h-r1440x721cds/", - "g300":"_f1h-r1440x721cds/", - "g500":"_f1h-r1440x721cds/", - "g850":"_f1h-r1440x721cds/", - "sfcWind":"_f1h-r1440x721cds/", - "tasmax":"_f1h-r1440x721cds/", - "tasmin":"_f1h-r1440x721cds/", - "ta300":"_f1h-r1440x721cds/", - "ta500":"_f1h-r1440x721cds/", - "ta850":"_f1h-r1440x721cds/", - "hurs":"_f1h-r1440x721cds/"} - monthly_mean: {"tas":"_f1h-r1440x721cds/", - "prlr":"_f1h-r1440x721cds/", - "rsds":"_f1h-r1440x721cds/", - "g300":"_f1h-r1440x721cds/", - "g500":"_f1h-r1440x721cds/", - "g850":"_f1h-r1440x721cds/", - "sfcWind":"_f1h-r1440x721cds/", - "tasmax":"_f1h-r1440x721cds/", - "tasmin":"_f1h-r1440x721cds/", - "ta300":"_f1h-r1440x721cds/", - "ta500":"_f1h-r1440x721cds/", - "ta850":"_f1h-r1440x721cds/"} + src: "GRIB_era5_tas/" + monthly_mean: {"tas":""} calendar: "standard" - reference_grid: "/esarchive/recon/ecmwf/era5/monthly_mean/tas_f1h-r1440x721cds/tas_201805.nc" - ERA5-Land: - name: "ERA5-Land" - institution: "European Centre for Medium-Range Weather Forecasts" - src: "recon/ecmwf/era5land/" - daily_mean: {"tas":"_f1h/", "rsds":"_f1h/", - "prlr":"_f1h/", "sfcWind":"_f1h/"} - monthly_mean: {"tas":"_f1h/","tasmin":"_f24h/", - "tasmax":"_f24h/", "prlr":"_f1h/", - "sfcWind":"_f1h/", "rsds":"_f1h/", - "tdps":"_f1h/"} - calendar: "proleptic_gregorian" - reference_grid: "/esarchive/recon/ecmwf/era5land/daily_mean/tas_f1h/tas_201805.nc" - UERRA: - name: "ECMWF UERRA" - institution: "European Centre for Medium-Range Weather Forecasts" - src: "recon/ecmwf/uerra_mescan/" - daily_mean: {"tas":"_f6h/"} - monthly_mean: {"tas":"_f6h/"} - calendar: "proleptic_gregorian" - reference_grid: "/esarchive/recon/ecmwf/uerra_mescan/daily_mean/tas_f6h/tas_201805.nc" + reference_grid: "conf/grid_description/griddes_GRIB_system5_m1.txt" diff --git a/conf/archive_GRIB.yml b/conf/archive_GRIB.yml deleted file mode 100644 index c01e6a11..00000000 --- a/conf/archive_GRIB.yml +++ /dev/null @@ -1,24 +0,0 @@ -archive: - src: "/esarchive/scratch/aho/tmp/GRIB/" #"/mars/" - System: - ECMWF-SEAS5: - name: "ECMWF SEAS5" - institution: "European Centre for Medium-Range Weather Forecasts" - src: "GRIB_system5_tas_CORRECTED/" - monthly_mean: {"tas":""} - nmember: - fcst: 51 - hcst: 51 - calendar: "proleptic_gregorian" - time_stamp_lag: "+1" - reference_grid: "conf/grid_description/griddes_GRIB_system5_m1.txt" - Reference: - ERA5: - name: "ERA5" - institution: "European Centre for Medium-Range Weather Forecasts" - src: "GRIB_era5_tas/" - monthly_mean: {"tas":""} - calendar: "standard" - reference_grid: "conf/grid_description/griddes_GRIB_system5_m1.txt" - - diff --git a/modules/Loading/Loading_GRIB.R b/modules/Loading/Loading_GRIB.R index 313dc0a8..8e19dd82 100644 --- a/modules/Loading/Loading_GRIB.R +++ b/modules/Loading/Loading_GRIB.R @@ -27,7 +27,7 @@ load_datasets <- function(recipe) { store.freq <- recipe$Analysis$Variables$freq # get MARS datasets dict: - archive <- read_yaml("conf/archive_GRIB.yml")$archive + archive <- read_yaml("conf/archive_GRIB.yml")[[recipe$Run$filesystem]] exp_descrip <- archive$System[[exp.name]] freq.hcst <- unlist(exp_descrip[[store.freq]][variable]) reference_descrip <- archive$Reference[[ref.name]] diff --git a/modules/Loading/testing_recipes/recipe_GRIB_system5_era5.yml b/modules/Loading/testing_recipes/recipe_GRIB_system5_era5.yml index e50aa2a3..71615afd 100644 --- a/modules/Loading/testing_recipes/recipe_GRIB_system5_era5.yml +++ b/modules/Loading/testing_recipes/recipe_GRIB_system5_era5.yml @@ -47,4 +47,5 @@ Run: Terminal: yes output_dir: ./tests/out-logs/ code_dir: /esarchive/scratch/aho/git/auto-s2s/ + filesystem: mars -- GitLab From 823ebfbc83335a572a6073b1df4c281e33aa9b29 Mon Sep 17 00:00:00 2001 From: eduzenli Date: Wed, 22 Mar 2023 15:46:39 +0100 Subject: [PATCH 090/388] can retrieve hurs variable from CERRA dataset --- conf/archive.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/archive.yml b/conf/archive.yml index eb8e86a5..6da69a65 100644 --- a/conf/archive.yml +++ b/conf/archive.yml @@ -186,7 +186,7 @@ archive: daily_mean: {"hur":"_f3h-r2631x1113/", "ps":"_f3h-r2631x1113/", "sfcWind":"_f3h-r2631x1113/", "tas":"_f3h-r2631x1113/", "winddir":"_f3h-r2631x1113/"} monthly_mean: {"hur":"_f3h-r2631x1113/", "ps":"_f3h-r2631x1113/", "sfcWind":"_f3h-r2631x1113/", - "tas":"_f3h-r2631x1113/", "winddir":"_f3h-r2631x1113/","tasmin":"_f24h-r2631x1113/","tasmax":"_f24h-r2631x1113/"} + "tas":"_f3h-r2631x1113/", "winddir":"_f3h-r2631x1113/","tasmin":"_f24h-r2631x1113/","tasmax":"_f24h-r2631x1113/","hurs":"_f3h-r2631x1113/"} calendar: "proleptic_gregorian" reference_grid: "/esarchive/recon/ecmwf/cerra/monthly_mean/tas_f3h-r2631x1113/tas_200506.nc" CERRA-Land: -- GitLab From 65981563db5824cd1d2b97bd588176d544998631 Mon Sep 17 00:00:00 2001 From: eduzenli Date: Wed, 22 Mar 2023 15:49:39 +0100 Subject: [PATCH 091/388] applies the updates in the Intbc function --- modules/Downscaling/Downscaling.R | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/modules/Downscaling/Downscaling.R b/modules/Downscaling/Downscaling.R index 23586788..58b9c22f 100644 --- a/modules/Downscaling/Downscaling.R +++ b/modules/Downscaling/Downscaling.R @@ -42,11 +42,13 @@ downscale_datasets <- function(recipe, data) { # Downscaling function params int_method <- tolower(recipe$Analysis$Workflow$Downscaling$int_method) bc_method <- tolower(recipe$Analysis$Workflow$Downscaling$bc_method) + cal_method <- tolower(recipe$Analysis$Workflow$Downscaling$cal_method) lr_method <- tolower(recipe$Analysis$Workflow$Downscaling$lr_method) logreg_method <- tolower(recipe$Analysis$Workflow$Downscaling$logreg_method) target_grid <- tolower(recipe$Analysis$Workflow$Downscaling$target_grid) nanalogs <- as.numeric(recipe$Analysis$Workflow$Downscaling$nanalogs) - ## TODO: Compute number of cores + + ## TODO: Compute number of cores if (is.null(recipe$Analysis$ncores)) { ncores <- 1 } else { @@ -94,12 +96,13 @@ downscale_datasets <- function(recipe, data) { method_point_interp = NULL) hcst_downscal$obs <- obs_downscal$exp - } else if (type == "intbc") { - # Interpolate hcst and obs with bias correction + } else if (type == "intbc" & (bc_method=="cal" | bc_method=="calibration")) { + # Interpolate hcst and obs with bias correction (via calibration) hcst_downscal <- CST_Intbc(data$hcst, data$obs, target_grid = target_grid, bc_method = bc_method, int_method = int_method, + cal.method=cal_method, points = NULL, method_point_interp = NULL, lat_dim = "latitude", @@ -108,7 +111,23 @@ downscale_datasets <- function(recipe, data) { member_dim = "ensemble", region = NULL, ncores = ncores) - } else if (type == "intlr") { + + } else if (type == "intbc" & !(bc_method=="cal" | bc_method=="calibration")) { + # Interpolate hcst and obs with bias correction (any other method than calibration) + hcst_downscal <- CST_Intbc(data$hcst, data$obs, + target_grid = target_grid, + bc_method = bc_method, + int_method = int_method, + points = NULL, + method_point_interp = NULL, + lat_dim = "latitude", + lon_dim = "longitude", + sdate_dim = "syear", + member_dim = "ensemble", + region = NULL, + ncores = ncores) + + } else if (type == "intlr") { ## TODO: add the possibility to have the element 'pred' in 'data' if (lr_method == "large_scale") { if (is.null(data$pred$data)) { -- GitLab From b771b442e0acae4f193b0d80f6ca4d0b63e37b0c Mon Sep 17 00:00:00 2001 From: eduzenli Date: Wed, 22 Mar 2023 15:50:56 +0100 Subject: [PATCH 092/388] different 'int + calibration' methods can be tested --- modules/Downscaling/tmp/Intbc.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/Downscaling/tmp/Intbc.R b/modules/Downscaling/tmp/Intbc.R index 86bb5a9c..5a5275bf 100644 --- a/modules/Downscaling/tmp/Intbc.R +++ b/modules/Downscaling/tmp/Intbc.R @@ -68,7 +68,7 @@ CST_Intbc <- function(exp, obs, target_grid, bc_method, int_method = NULL, points = NULL, method_point_interp = NULL, lat_dim = "lat", lon_dim = "lon", - sdate_dim = "sdate", member_dim = "member", region = NULL, ncores = 1) + sdate_dim = "sdate", member_dim = "member", region = NULL, ncores = 1,...) { if (!inherits(exp,'s2dv_cube')) { stop("Parameter 'exp' must be of the class 's2dv_cube'") @@ -82,7 +82,7 @@ CST_Intbc <- function(exp, obs, target_grid, bc_method, int_method = NULL, point obs_lats = obs$lat, obs_lons = obs$lon, target_grid = target_grid, int_method = int_method, bc_method = bc_method, points = points, source_file = exp$source_files[1], method_point_interp = method_point_interp, lat_dim = lat_dim, lon_dim = lon_dim, - sdate_dim = sdate_dim, member_dim = member_dim, region = region, ncores = ncores) + sdate_dim = sdate_dim, member_dim = member_dim, region = region, ncores = ncores,...) # Modify data, lat and lon in the origina s2dv_cube, adding the downscaled data exp$data <- res$data -- GitLab From c9b0fa436f451c8e924c85f4260e20120f920b4c Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Thu, 23 Mar 2023 09:46:49 +0100 Subject: [PATCH 093/388] Remove temporary s2dv functions after release, fix testing recipe --- .../testing_recipes/recipe_seasonal-tests.yml | 4 +- modules/Skill/Skill.R | 28 +- modules/Skill/tmp/AbsBiasSS.R | 281 ----------- modules/Skill/tmp/Bias.R | 189 ------- modules/Skill/tmp/Corr.R | 463 ------------------ modules/Skill/tmp/RMSSS.R | 448 ----------------- modules/Skill/tmp/RandomWalkTest.R | 82 ---- 7 files changed, 13 insertions(+), 1482 deletions(-) delete mode 100644 modules/Skill/tmp/AbsBiasSS.R delete mode 100644 modules/Skill/tmp/Bias.R delete mode 100644 modules/Skill/tmp/Corr.R delete mode 100644 modules/Skill/tmp/RMSSS.R delete mode 100644 modules/Skill/tmp/RandomWalkTest.R diff --git a/modules/Loading/testing_recipes/recipe_seasonal-tests.yml b/modules/Loading/testing_recipes/recipe_seasonal-tests.yml index b4e05fc4..2e1ac394 100644 --- a/modules/Loading/testing_recipes/recipe_seasonal-tests.yml +++ b/modules/Loading/testing_recipes/recipe_seasonal-tests.yml @@ -25,8 +25,8 @@ Analysis: lonmin: -10 lonmax: 30 Regrid: - method: - type: none + method: bilinear + type: to_system Workflow: Calibration: method: raw diff --git a/modules/Skill/Skill.R b/modules/Skill/Skill.R index 9f97e688..afe697ac 100644 --- a/modules/Skill/Skill.R +++ b/modules/Skill/Skill.R @@ -10,12 +10,6 @@ source("modules/Skill/compute_quants.R") source("modules/Skill/compute_probs.R") source("modules/Skill/s2s.metrics.R") -## TODO: Remove when new version of s2dv is released -source("modules/Skill/tmp/RandomWalkTest.R") -source("modules/Skill/tmp/Bias.R") -source("modules/Skill/tmp/AbsBiasSS.R") -source("modules/Skill/tmp/RMSSS.R") -source("modules/Skill/tmp/Corr.R") ## TODO: Implement this in the future ## Which parameter are required? @@ -211,17 +205,17 @@ compute_skill_metrics <- function(recipe, data) { } else if (metric %in% c('enscorr', 'corr')) { ## TODO: Return significance ## TODO: Implement option for Kendall and Spearman methods? - skill <- Corr(data$hcst$data, data$obs$data, - dat_dim = 'dat', - time_dim = time_dim, - method = 'pearson', - memb_dim = memb_dim, - memb = memb, - conf = F, - pval = F, - sign = T, - alpha = 0.05, - ncores = ncores) + skill <- s2dv::Corr(data$hcst$data, data$obs$data, + dat_dim = 'dat', + time_dim = time_dim, + method = 'pearson', + memb_dim = memb_dim, + memb = memb, + conf = F, + pval = F, + sign = T, + alpha = 0.05, + ncores = ncores) skill <- lapply(skill, function(x) { .drop_dims(x)}) skill_metrics[[ metric ]] <- skill$corr diff --git a/modules/Skill/tmp/AbsBiasSS.R b/modules/Skill/tmp/AbsBiasSS.R deleted file mode 100644 index 0ceb009c..00000000 --- a/modules/Skill/tmp/AbsBiasSS.R +++ /dev/null @@ -1,281 +0,0 @@ -#'Compute the Absolute Mean Bias Skill Score -#' -#'The Absolute Mean Bias Skill Score is based on the Absolute Mean Error (Wilks, -#' 2011) between the ensemble mean forecast and the observations. It measures -#'the accuracy of the forecast in comparison with a reference forecast to assess -#'whether the forecast presents an improvement or a worsening with respect to -#'that reference. The Mean Bias Skill Score ranges between minus infinite and 1. -#'Positive values indicate that the forecast has higher skill than the reference -#'forecast, while negative values indicate that it has a lower skill. Examples -#'of reference forecasts are the climatological forecast (average of the -#'observations), a previous model version, or another model. It is computed as -#'\code{AbsBiasSS = 1 - AbsBias_exp / AbsBias_ref}. The statistical significance -#'is obtained based on a Random Walk test at the 95% confidence level (DelSole -#'and Tippett, 2016). If there is more than one dataset, the result will be -#'computed for each pair of exp and obs data. -#' -#'@param exp A named numerical array of the forecast with at least time -#' dimension. -#'@param obs A named numerical array of the observation with at least time -#' dimension. The dimensions must be the same as 'exp' except 'memb_dim' and -#' 'dat_dim'. -#'@param ref A named numerical array of the reference forecast data with at -#' least time dimension. The dimensions must be the same as 'exp' except -#' 'memb_dim' and 'dat_dim'. If there is only one reference dataset, it should -#' not have dataset dimension. If there is corresponding reference for each -#' experiement, the dataset dimension must have the same length as in 'exp'. If -#' 'ref' is NULL, the climatological forecast is used as reference forecast. -#' The default value is NULL. -#'@param time_dim A character string indicating the name of the time dimension. -#' The default value is 'sdate'. -#'@param memb_dim A character string indicating the name of the member dimension -#' to compute the ensemble mean; it should be set to NULL if the parameter 'exp' -#' and 'ref' are already the ensemble mean. The default value is NULL. -#'@param dat_dim A character string indicating the name of dataset dimension. -#' The length of this dimension can be different between 'exp' and 'obs'. -#' The default value is NULL. -#'@param na.rm A logical value indicating if NAs should be removed (TRUE) or -#' kept (FALSE) for computation. The default value is FALSE. -#'@param ncores An integer indicating the number of cores to use for parallel -#' computation. The default value is NULL. -#' -#'@return -#'\item{$biasSS}{ -#' A numerical array of BiasSS with dimensions nexp, nobs and the rest -#' dimensions of 'exp' except 'time_dim' and 'memb_dim'. -#'} -#'\item{$sign}{ -#' A logical array of the statistical significance of the BiasSS -#' with the same dimensions as $biasSS. nexp is the number of -#' experiment (i.e., 'dat_dim' in exp), and nobs is the number of observation -#' (i.e., 'dat_dim' in obs). If dat_dim is NULL, nexp and nobs are omitted. -#'} -#' -#'@references -#'Wilks, 2011; https://doi.org/10.1016/B978-0-12-385022-5.00008-7 -#'DelSole and Tippett, 2016; https://doi.org/10.1175/MWR-D-15-0218.1 -#' -#'@examples -#'exp <- array(rnorm(1000), dim = c(dat = 1, lat = 3, lon = 5, member = 10, sdate = 50)) -#'ref <- array(rnorm(1000), dim = c(dat = 1, lat = 3, lon = 5, member = 10, sdate = 50)) -#'obs <- array(rnorm(1000), dim = c(dat = 1, lat = 3, lon = 5, sdate = 50)) -#'biasSS1 <- AbsBiasSS(exp = exp, obs = obs, ref = ref, memb_dim = 'member') -#'biasSS2 <- AbsBiasSS(exp = exp, obs = obs, ref = NULL, memb_dim = 'member') -#' -#'@import multiApply -#'@export -AbsBiasSS <- function(exp, obs, ref = NULL, time_dim = 'sdate', memb_dim = NULL, - dat_dim = NULL, na.rm = FALSE, ncores = NULL) { - - # Check inputs - ## exp, obs, and ref (1) - if (!is.array(exp) | !is.numeric(exp)) { - stop("Parameter 'exp' must be a numeric array.") - } - if (!is.array(obs) | !is.numeric(obs)) { - stop("Parameter 'obs' must be a numeric array.") - } - if (any(is.null(names(dim(exp))))| any(nchar(names(dim(exp))) == 0) | - any(is.null(names(dim(obs))))| any(nchar(names(dim(obs))) == 0)) { - stop("Parameter 'exp' and 'obs' must have dimension names.") - } - if (!is.null(ref)) { - if (!is.array(ref) | !is.numeric(ref)) - stop("Parameter 'ref' must be a numeric array.") - if (any(is.null(names(dim(ref))))| any(nchar(names(dim(ref))) == 0)) { - stop("Parameter 'ref' must have dimension names.") - } - } - ## time_dim - if (!is.character(time_dim) | length(time_dim) != 1) { - stop("Parameter 'time_dim' must be a character string.") - } - if (!time_dim %in% names(dim(exp)) | !time_dim %in% names(dim(obs))) { - stop("Parameter 'time_dim' is not found in 'exp' or 'obs' dimension.") - } - if (!is.null(ref) & !time_dim %in% names(dim(ref))) { - stop("Parameter 'time_dim' is not found in 'ref' dimension.") - } - ## memb_dim - if (!is.null(memb_dim)) { - if (!is.character(memb_dim) | length(memb_dim) > 1) { - stop("Parameter 'memb_dim' must be a character string.") - } - if (!memb_dim %in% names(dim(exp))) { - stop("Parameter 'memb_dim' is not found in 'exp' dimension.") - } - if (memb_dim %in% names(dim(obs))) { - if (identical(as.numeric(dim(obs)[memb_dim]), 1)) { - obs <- ClimProjDiags::Subset(x = obs, along = memb_dim, indices = 1, drop = 'selected') - } else { - stop("Not implemented for observations with members ('obs' can have 'memb_dim', ", - "but it should be of length = 1).") - } - } - } - ## dat_dim - if (!is.null(dat_dim)) { - if (!is.character(dat_dim) | length(dat_dim) > 1) { - stop("Parameter 'dat_dim' must be a character string.") - } - if (!dat_dim %in% names(dim(exp)) | !dat_dim %in% names(dim(obs))) { - stop("Parameter 'dat_dim' is not found in 'exp' or 'obs' dimension.", - " Set it as NULL if there is no dataset dimension.") - } - } - ## exp, obs, and ref (2) - name_exp <- sort(names(dim(exp))) - name_obs <- sort(names(dim(obs))) - if (!is.null(memb_dim)) { - name_exp <- name_exp[-which(name_exp == memb_dim)] - } - if (!is.null(dat_dim)) { - name_exp <- name_exp[-which(name_exp == dat_dim)] - name_obs <- name_obs[-which(name_obs == dat_dim)] - } - if (!identical(length(name_exp), length(name_obs)) | - !identical(dim(exp)[name_exp], dim(obs)[name_obs])) { - stop(paste0("Parameter 'exp' and 'obs' must have same length of ", - "all dimensions except 'memb_dim' and 'dat_dim'.")) - } - if (!is.null(ref)) { - name_ref <- sort(names(dim(ref))) - if (!is.null(memb_dim) && memb_dim %in% name_ref) { - name_ref <- name_ref[-which(name_ref == memb_dim)] - } - if (!is.null(dat_dim)) { - if (dat_dim %in% name_ref) { - if (!identical(dim(exp)[dat_dim], dim(ref)[dat_dim])) { - stop(paste0("If parameter 'ref' has dataset dimension, it must be", - " equal to dataset dimension of 'exp'.")) - } - name_ref <- name_ref[-which(name_ref == dat_dim)] - } - } - if (!identical(length(name_exp), length(name_ref)) | - !identical(dim(exp)[name_exp], dim(ref)[name_ref])) { - stop(paste0("Parameter 'exp' and 'ref' must have the same length of ", - "all dimensions except 'memb_dim' and 'dat_dim' if there is ", - "only one reference dataset.")) - } - } - ## na.rm - if (!is.logical(na.rm) | length(na.rm) > 1) { - stop("Parameter 'na.rm' must be one logical value.") - } - ## ncores - if (!is.null(ncores)) { - if (!is.numeric(ncores) | ncores %% 1 != 0 | ncores <= 0 | - length(ncores) > 1) { - stop("Parameter 'ncores' must be either NULL or a positive integer.") - } - } - - ############################ - - ## Ensemble mean - if (!is.null(memb_dim)) { - exp <- MeanDims(exp, memb_dim, na.rm = na.rm) - if (!is.null(ref) & memb_dim %in% names(dim(ref))) { - ref <- MeanDims(ref, memb_dim, na.rm = na.rm) - } - } - - ## Mean bias skill score - if (!is.null(ref)) { # use "ref" as reference forecast - if (!is.null(dat_dim) && dat_dim %in% names(dim(ref))) { - target_dims_ref <- c(time_dim, dat_dim) - } else { - target_dims_ref <- c(time_dim) - } - data <- list(exp = exp, obs = obs, ref = ref) - target_dims = list(exp = c(time_dim, dat_dim), - obs = c(time_dim, dat_dim), - ref = target_dims_ref) - } else { - data <- list(exp = exp, obs = obs) - target_dims = list(exp = c(time_dim, dat_dim), - obs = c(time_dim, dat_dim)) - } - - output <- Apply(data, - target_dims = target_dims, - fun = .AbsBiasSS, - dat_dim = dat_dim, - na.rm = na.rm, - ncores = ncores) - - return(output) -} - -.AbsBiasSS <- function(exp, obs, ref = NULL, dat_dim = NULL, na.rm = FALSE) { - # exp and obs: [sdate, (dat_dim)] - # ref: [sdate, (dat_dim)] or NULL - - # Adjust exp, obs, ref to have dat_dim temporarily - if (is.null(dat_dim)) { - nexp <- 1 - nobs <- 1 - exp <- InsertDim(exp, posdim = 2, lendim = 1, name = 'dataset') - obs <- InsertDim(obs, posdim = 2, lendim = 1, name = 'dataset') - if (!is.null(ref)) { - ref <- InsertDim(ref, posdim = 2, lendim = 1, name = 'dataset') - } - ref_dat_dim <- FALSE - } else { - nexp <- as.numeric(dim(exp)[dat_dim]) - nobs <- as.numeric(dim(obs)[dat_dim]) - if (length(dim(ref)) == 1) { # ref: [sdate] - ref_dat_dim <- FALSE - } else { - ref_dat_dim <- TRUE - } - } - - biasSS <- array(dim = c(nexp = nexp, nobs = nobs)) - sign <- array(dim = c(nexp = nexp, nobs = nobs)) - - for (i in 1:nexp) { - exp_data <- exp[, i] - if (isTRUE(ref_dat_dim)) { - ref_data <- ref[, i] - } else { - ref_data <- ref - } - for (j in 1:nobs) { - obs_data <- obs[, j] - - if (isTRUE(na.rm)) { - if (is.null(ref)) { - good_values <- !is.na(exp_data) & !is.na(obs_data) - exp_data <- exp_data[good_values] - obs_data <- obs_data[good_values] - } else { - good_values <- !is.na(exp_data) & !is.na(ref_data) & !is.na(obs_data) - exp_data <- exp_data[good_values] - ref_data <- ref_data[good_values] - obs_data <- obs_data[good_values] - } - } - - ## Bias of the exp - bias_exp <- .Bias(exp = exp_data, obs = obs_data, na.rm = na.rm, absolute = TRUE, time_mean = FALSE) - ## Bias of the ref - if (is.null(ref)) { ## Climatological forecast - ref_data <- rep(mean(obs_data, na.rm = na.rm), length(obs_data)) - } - bias_ref <- .Bias(exp = ref_data, obs = obs_data, na.rm = na.rm, absolute = TRUE, time_mean = FALSE) - ## Skill score and significance - biasSS[i, j] <- 1 - mean(bias_exp) / mean(bias_ref) - sign[i, j] <- .RandomWalkTest(skill_A = bias_exp, skill_B = bias_ref)$signif - } - } - - if (is.null(dat_dim)) { - dim(biasSS) <- NULL - dim(sign) <- NULL - } - - - return(list(biasSS = biasSS, sign = sign)) -} diff --git a/modules/Skill/tmp/Bias.R b/modules/Skill/tmp/Bias.R deleted file mode 100644 index 0319a0f0..00000000 --- a/modules/Skill/tmp/Bias.R +++ /dev/null @@ -1,189 +0,0 @@ -#'Compute the Mean Bias -#' -#'The Mean Bias or Mean Error (Wilks, 2011) is defined as the mean difference -#'between the ensemble mean forecast and the observations. It is a deterministic -#'metric. Positive values indicate that the forecasts are on average too high -#'and negative values indicate that the forecasts are on average too low. -#'It also allows to compute the Absolute Mean Bias or bias without temporal -#'mean. If there is more than one dataset, the result will be computed for each -#'pair of exp and obs data. -#' -#'@param exp A named numerical array of the forecast with at least time -#' dimension. -#'@param obs A named numerical array of the observation with at least time -#' dimension. The dimensions must be the same as 'exp' except 'memb_dim' and -#' 'dat_dim'. -#'@param time_dim A character string indicating the name of the time dimension. -#' The default value is 'sdate'. -#'@param dat_dim A character string indicating the name of dataset dimension. -#' The length of this dimension can be different between 'exp' and 'obs'. -#' The default value is NULL. -#'@param memb_dim A character string indicating the name of the member dimension -#' to compute the ensemble mean; it should be set to NULL if the parameter -#' 'exp' is already the ensemble mean. The default value is NULL. -#'@param na.rm A logical value indicating if NAs should be removed (TRUE) or -#' kept (FALSE) for computation. The default value is FALSE. -#'@param absolute A logical value indicating whether to compute the absolute -#' bias. The default value is FALSE. -#'@param time_mean A logical value indicating whether to compute the temporal -#' mean of the bias. The default value is TRUE. -#'@param ncores An integer indicating the number of cores to use for parallel -#' computation. The default value is NULL. -#' -#'@return -#'A numerical array of bias with dimensions c(nexp, nobs, the rest dimensions of -#''exp' except 'time_dim' (if time_mean = T) and 'memb_dim'). nexp is the number -#'of experiment (i.e., 'dat_dim' in exp), and nobs is the number of observation -#'(i.e., 'dat_dim' in obs). If dat_dim is NULL, nexp and nobs are omitted. -#' -#'@references -#'Wilks, 2011; https://doi.org/10.1016/B978-0-12-385022-5.00008-7 -#' -#'@examples -#'exp <- array(rnorm(1000), dim = c(dat = 1, lat = 3, lon = 5, member = 10, sdate = 50)) -#'obs <- array(rnorm(1000), dim = c(dat = 1, lat = 3, lon = 5, sdate = 50)) -#'bias <- Bias(exp = exp, obs = obs, memb_dim = 'member') -#' -#'@import multiApply -#'@importFrom ClimProjDiags Subset -#'@export -Bias <- function(exp, obs, time_dim = 'sdate', memb_dim = NULL, dat_dim = NULL, na.rm = FALSE, - absolute = FALSE, time_mean = TRUE, ncores = NULL) { - - # Check inputs - ## exp and obs (1) - if (!is.array(exp) | !is.numeric(exp)) - stop("Parameter 'exp' must be a numeric array.") - if (!is.array(obs) | !is.numeric(obs)) - stop("Parameter 'obs' must be a numeric array.") - if(any(is.null(names(dim(exp))))| any(nchar(names(dim(exp))) == 0) | - any(is.null(names(dim(obs))))| any(nchar(names(dim(obs))) == 0)) { - stop("Parameter 'exp' and 'obs' must have dimension names.") - } - ## time_dim - if (!is.character(time_dim) | length(time_dim) != 1) - stop("Parameter 'time_dim' must be a character string.") - if (!time_dim %in% names(dim(exp)) | !time_dim %in% names(dim(obs))) { - stop("Parameter 'time_dim' is not found in 'exp' or 'obs' dimension.") - } - ## memb_dim - if (!is.null(memb_dim)) { - if (!is.character(memb_dim) | length(memb_dim) > 1) { - stop("Parameter 'memb_dim' must be a character string.") - } - if (!memb_dim %in% names(dim(exp))) { - stop("Parameter 'memb_dim' is not found in 'exp' dimension.") - } - if (memb_dim %in% names(dim(obs))) { - if (identical(as.numeric(dim(obs)[memb_dim]), 1)) { - obs <- ClimProjDiags::Subset(x = obs, along = memb_dim, indices = 1, drop = 'selected') - } else { - stop("Not implemented for observations with members ('obs' can have 'memb_dim', ", - "but it should be of length = 1).") - } - } - } - ## dat_dim - if (!is.null(dat_dim)) { - if (!is.character(dat_dim) | length(dat_dim) > 1) { - stop("Parameter 'dat_dim' must be a character string.") - } - if (!dat_dim %in% names(dim(exp)) | !dat_dim %in% names(dim(obs))) { - stop("Parameter 'dat_dim' is not found in 'exp' or 'obs' dimension.", - " Set it as NULL if there is no dataset dimension.") - } - } - ## exp and obs (2) - name_exp <- sort(names(dim(exp))) - name_obs <- sort(names(dim(obs))) - if (!is.null(memb_dim)) { - name_exp <- name_exp[-which(name_exp == memb_dim)] - } - if (!is.null(dat_dim)) { - name_exp <- name_exp[-which(name_exp == dat_dim)] - name_obs <- name_obs[-which(name_obs == dat_dim)] - } - if (!identical(length(name_exp), length(name_obs)) | - !identical(dim(exp)[name_exp], dim(obs)[name_obs])) { - stop(paste0("Parameter 'exp' and 'obs' must have same length of ", - "all dimensions except 'memb_dim' and 'dat_dim'.")) - } - ## na.rm - if (!is.logical(na.rm) | length(na.rm) > 1) { - stop("Parameter 'na.rm' must be one logical value.") - } - ## absolute - if (!is.logical(absolute) | length(absolute) > 1) { - stop("Parameter 'absolute' must be one logical value.") - } - ## time_mean - if (!is.logical(time_mean) | length(time_mean) > 1) { - stop("Parameter 'time_mean' must be one logical value.") - } - ## ncores - if (!is.null(ncores)) { - if (!is.numeric(ncores) | ncores %% 1 != 0 | ncores <= 0 | - length(ncores) > 1) { - stop("Parameter 'ncores' must be either NULL or a positive integer.") - } - } - - ############################### - - ## Ensemble mean - if (!is.null(memb_dim)) { - exp <- MeanDims(exp, memb_dim, na.rm = na.rm) - } - - ## (Mean) Bias - bias <- Apply(data = list(exp, obs), - target_dims = c(time_dim, dat_dim), - fun = .Bias, - time_dim = time_dim, - dat_dim = dat_dim, - na.rm = na.rm, - absolute = absolute, - time_mean = time_mean, - ncores = ncores)$output1 - - return(bias) -} - - -.Bias <- function(exp, obs, time_dim = 'sdate', dat_dim = NULL, na.rm = FALSE, - absolute = FALSE, time_mean = TRUE) { - # exp and obs: [sdate, (dat)] - - if (is.null(dat_dim)) { - bias <- exp - obs - - if (isTRUE(absolute)) { - bias <- abs(bias) - } - - if (isTRUE(time_mean)) { - bias <- mean(bias, na.rm = na.rm) - } - - } else { - nexp <- as.numeric(dim(exp)[dat_dim]) - nobs <- as.numeric(dim(obs)[dat_dim]) - bias <- array(dim = c(dim(exp)[time_dim], nexp = nexp, nobs = nobs)) - - for (i in 1:nexp) { - for (j in 1:nobs) { - bias[, i, j] <- exp[, i] - obs[, j] - } - } - - if (isTRUE(absolute)) { - bias <- abs(bias) - } - - if (isTRUE(time_mean)) { - bias <- MeanDims(bias, time_dim, na.rm = na.rm) - } - } - - return(bias) -} diff --git a/modules/Skill/tmp/Corr.R b/modules/Skill/tmp/Corr.R deleted file mode 100644 index c95b1034..00000000 --- a/modules/Skill/tmp/Corr.R +++ /dev/null @@ -1,463 +0,0 @@ -#'Compute the correlation coefficient between an array of forecast and their corresponding observation -#' -#'Calculate the correlation coefficient (Pearson, Kendall or Spearman) for -#'an array of forecast and an array of observation. The correlations are -#'computed along 'time_dim' that usually refers to the start date dimension. If -#''comp_dim' is given, the correlations are computed only if obs along comp_dim -#'dimension are complete between limits[1] and limits[2], i.e., there is no NA -#'between limits[1] and limits[2]. This option can be activated if the user -#'wants to account only for the forecasts which the corresponding observations -#'are available at all leadtimes.\cr -#'The confidence interval is computed by the Fisher transformation and the -#'significance level relies on an one-sided student-T distribution.\cr -#'The function can calculate ensemble mean before correlation by 'memb_dim' -#'specified and 'memb = F'. If ensemble mean is not calculated, correlation will -#'be calculated for each member. -#'If there is only one dataset for exp and obs, you can simply use cor() to -#'compute the correlation. -#' -#'@param exp A named numeric array of experimental data, with at least dimension -#' 'time_dim'. -#'@param obs A named numeric array of observational data, same dimensions as -#' parameter 'exp' except along 'dat_dim' and 'memb_dim'. -#'@param time_dim A character string indicating the name of dimension along -#' which the correlations are computed. The default value is 'sdate'. -#'@param dat_dim A character string indicating the name of dataset (nobs/nexp) -#' dimension. The default value is 'dataset'. If there is no dataset -#' dimension, set NULL. -#'@param comp_dim A character string indicating the name of dimension along which -#' obs is taken into account only if it is complete. The default value -#' is NULL. -#'@param limits A vector of two integers indicating the range along comp_dim to -#' be completed. The default is c(1, length(comp_dim dimension)). -#'@param method A character string indicating the type of correlation: -#' 'pearson', 'spearman', or 'kendall'. The default value is 'pearson'. -#'@param memb_dim A character string indicating the name of the member -#' dimension. It must be one dimension in 'exp' and 'obs'. If there is no -#' member dimension, set NULL. The default value is NULL. -#'@param memb A logical value indicating whether to remain 'memb_dim' dimension -#' (TRUE) or do ensemble mean over 'memb_dim' (FALSE). Only functional when -#' 'memb_dim' is not NULL. The default value is TRUE. -#'@param pval A logical value indicating whether to return or not the p-value -#' of the test Ho: Corr = 0. The default value is TRUE. -#'@param conf A logical value indicating whether to return or not the confidence -#' intervals. The default value is TRUE. -#'@param sign A logical value indicating whether to retrieve the statistical -#' significance of the test Ho: Corr = 0 based on 'alpha'. The default value is -#' FALSE. -#'@param alpha A numeric indicating the significance level for the statistical -#' significance test. The default value is 0.05. -#'@param ncores An integer indicating the number of cores to use for parallel -#' computation. The default value is NULL. -#' -#'@return -#'A list containing the numeric arrays with dimension:\cr -#' c(nexp, nobs, exp_memb, obs_memb, all other dimensions of exp except -#' time_dim and memb_dim).\cr -#'nexp is the number of experiment (i.e., 'dat_dim' in exp), and nobs is the -#'number of observation (i.e., 'dat_dim' in obs). If dat_dim is NULL, nexp and -#'nobs are omitted. exp_memb is the number of member in experiment (i.e., -#''memb_dim' in exp) and obs_memb is the number of member in observation (i.e., -#''memb_dim' in obs). If memb = F, exp_memb and obs_memb are omitted.\cr\cr -#'\item{$corr}{ -#' The correlation coefficient. -#'} -#'\item{$p.val}{ -#' The p-value. Only present if \code{pval = TRUE}. -#'} -#'\item{$conf.lower}{ -#' The lower confidence interval. Only present if \code{conf = TRUE}. -#'} -#'\item{$conf.upper}{ -#' The upper confidence interval. Only present if \code{conf = TRUE}. -#'} -#'\item{$sign}{ -#' The statistical significance. Only present if \code{sign = TRUE}. -#'} -#' -#'@examples -#'# Case 1: Load sample data as in Load() example: -#'example(Load) -#'clim <- Clim(sampleData$mod, sampleData$obs) -#'ano_exp <- Ano(sampleData$mod, clim$clim_exp) -#'ano_obs <- Ano(sampleData$obs, clim$clim_obs) -#'runmean_months <- 12 -#' -#'# Smooth along lead-times -#'smooth_ano_exp <- Smoothing(ano_exp, runmeanlen = runmean_months) -#'smooth_ano_obs <- Smoothing(ano_obs, runmeanlen = runmean_months) -#'required_complete_row <- 3 # Discard start dates which contain any NA lead-times -#'leadtimes_per_startdate <- 60 -#'corr <- Corr(MeanDims(smooth_ano_exp, 'member'), -#' MeanDims(smooth_ano_obs, 'member'), -#' comp_dim = 'ftime', -#' limits = c(ceiling((runmean_months + 1) / 2), -#' leadtimes_per_startdate - floor(runmean_months / 2))) -#' -#'# Case 2: Keep member dimension -#'corr <- Corr(smooth_ano_exp, smooth_ano_obs, memb_dim = 'member') -#'# ensemble mean -#'corr <- Corr(smooth_ano_exp, smooth_ano_obs, memb_dim = 'member', memb = FALSE) -#' -#'@import multiApply -#'@importFrom ClimProjDiags Subset -#'@importFrom stats cor pt qnorm -#'@export -Corr <- function(exp, obs, time_dim = 'sdate', dat_dim = 'dataset', - comp_dim = NULL, limits = NULL, method = 'pearson', - memb_dim = NULL, memb = TRUE, - pval = TRUE, conf = TRUE, sign = FALSE, - alpha = 0.05, ncores = NULL) { - - # Check inputs - ## exp and obs (1) - if (is.null(exp) | is.null(obs)) { - stop("Parameter 'exp' and 'obs' cannot be NULL.") - } - if (!is.numeric(exp) | !is.numeric(obs)) { - stop("Parameter 'exp' and 'obs' must be a numeric array.") - } - if (is.null(dim(exp)) | is.null(dim(obs))) { - stop(paste0("Parameter 'exp' and 'obs' must be at least two dimensions ", - "containing time_dim and dat_dim.")) - } - if(any(is.null(names(dim(exp))))| any(nchar(names(dim(exp))) == 0) | - any(is.null(names(dim(obs))))| any(nchar(names(dim(obs))) == 0)) { - stop("Parameter 'exp' and 'obs' must have dimension names.") - } - if(!all(names(dim(exp)) %in% names(dim(obs))) | - !all(names(dim(obs)) %in% names(dim(exp)))) { - stop("Parameter 'exp' and 'obs' must have same dimension name") - } - ## time_dim - if (!is.character(time_dim) | length(time_dim) > 1) { - stop("Parameter 'time_dim' must be a character string.") - } - if (!time_dim %in% names(dim(exp)) | !time_dim %in% names(dim(obs))) { - stop("Parameter 'time_dim' is not found in 'exp' or 'obs' dimension.") - } - ## dat_dim - if (!is.null(dat_dim)) { - if (!is.character(dat_dim) | length(dat_dim) > 1) { - stop("Parameter 'dat_dim' must be a character string or NULL.") - } - if (!dat_dim %in% names(dim(exp)) | !dat_dim %in% names(dim(obs))) { - stop("Parameter 'dat_dim' is not found in 'exp' or 'obs' dimension.", - " Set it as NULL if there is no dataset dimension.") - } - } - ## comp_dim - if (!is.null(comp_dim)) { - if (!is.character(comp_dim) | length(comp_dim) > 1) { - stop("Parameter 'comp_dim' must be a character string.") - } - if (!comp_dim %in% names(dim(exp)) | !comp_dim %in% names(dim(obs))) { - stop("Parameter 'comp_dim' is not found in 'exp' or 'obs' dimension.") - } - } - ## limits - if (!is.null(limits)) { - if (is.null(comp_dim)) { - stop("Paramter 'comp_dim' cannot be NULL if 'limits' is assigned.") - } - if (!is.numeric(limits) | any(limits %% 1 != 0) | any(limits < 0) | - length(limits) != 2 | any(limits > dim(exp)[comp_dim])) { - stop(paste0("Parameter 'limits' must be a vector of two positive ", - "integers smaller than the length of paramter 'comp_dim'.")) - } - } - ## method - if (!(method %in% c("kendall", "spearman", "pearson"))) { - stop("Parameter 'method' must be one of 'kendall', 'spearman' or 'pearson'.") - } - ## memb_dim - if (!is.null(memb_dim)) { - if (!is.character(memb_dim) | length(memb_dim) > 1) { - stop("Parameter 'memb_dim' must be a character string.") - } - if (!memb_dim %in% names(dim(exp)) | !memb_dim %in% names(dim(obs))) { - stop("Parameter 'memb_dim' is not found in 'exp' or 'obs' dimension.") - } - } - ## memb - if (!is.logical(memb) | length(memb) > 1) { - stop("Parameter 'memb' must be one logical value.") - } - ## pval - if (!is.logical(pval) | length(pval) > 1) { - stop("Parameter 'pval' must be one logical value.") - } - ## conf - if (!is.logical(conf) | length(conf) > 1) { - stop("Parameter 'conf' must be one logical value.") - } - ## sign - if (!is.logical(sign) | length(sign) > 1) { - stop("Parameter 'sign' must be one logical value.") - } - ## alpha - if (!is.numeric(alpha) | alpha < 0 | alpha > 1 | length(alpha) > 1) { - stop("Parameter 'alpha' must be a numeric number between 0 and 1.") - } - ## ncores - if (!is.null(ncores)) { - if (!is.numeric(ncores) | ncores %% 1 != 0 | ncores <= 0 | - length(ncores) > 1) { - stop("Parameter 'ncores' must be a positive integer.") - } - } - ## exp and obs (2) - name_exp <- sort(names(dim(exp))) - name_obs <- sort(names(dim(obs))) - if (!is.null(dat_dim)) { - name_exp <- name_exp[-which(name_exp == dat_dim)] - name_obs <- name_obs[-which(name_obs == dat_dim)] - } - if (!is.null(memb_dim)) { - name_exp <- name_exp[-which(name_exp == memb_dim)] - name_obs <- name_obs[-which(name_obs == memb_dim)] - } - if(!all(dim(exp)[name_exp] == dim(obs)[name_obs])) { - stop(paste0("Parameter 'exp' and 'obs' must have same length of ", - "all dimension except 'dat_dim' and 'memb_dim'.")) - } - if (dim(exp)[time_dim] < 3) { - stop("The length of time_dim must be at least 3 to compute correlation.") - } - - - ############################### - # Sort dimension - name_exp <- names(dim(exp)) - name_obs <- names(dim(obs)) - order_obs <- match(name_exp, name_obs) - obs <- Reorder(obs, order_obs) - - - ############################### - # Calculate Corr - - # Remove data along comp_dim dim if there is at least one NA between limits - if (!is.null(comp_dim)) { - pos <- which(names(dim(obs)) == comp_dim) - if (is.null(limits)) { - obs_sub <- obs - } else { - obs_sub <- ClimProjDiags::Subset(obs, pos, list(limits[1]:limits[2])) - } - outrows <- is.na(MeanDims(obs_sub, pos, na.rm = FALSE)) - outrows <- InsertDim(outrows, pos, dim(obs)[comp_dim]) - obs[which(outrows)] <- NA - rm(obs_sub, outrows) - } - - if (!is.null(memb_dim)) { - if (!memb) { #ensemble mean - exp <- MeanDims(exp, memb_dim, na.rm = TRUE) - obs <- MeanDims(obs, memb_dim, na.rm = TRUE) -# name_exp <- names(dim(exp)) -# margin_dims_ind <- c(1:length(name_exp))[-which(name_exp == memb_dim)] -# exp <- apply(exp, margin_dims_ind, mean, na.rm = TRUE) #NOTE: remove NAs here -# obs <- apply(obs, margin_dims_ind, mean, na.rm = TRUE) - memb_dim <- NULL - } - } - - res <- Apply(list(exp, obs), - target_dims = list(c(time_dim, dat_dim, memb_dim), - c(time_dim, dat_dim, memb_dim)), - fun = .Corr, - dat_dim = dat_dim, memb_dim = memb_dim, - time_dim = time_dim, method = method, - pval = pval, conf = conf, sign = sign, alpha = alpha, - ncores = ncores) - - return(res) -} - -.Corr <- function(exp, obs, dat_dim = 'dataset', memb_dim = 'member', - time_dim = 'sdate', method = 'pearson', - conf = TRUE, pval = TRUE, sign = FALSE, alpha = 0.05) { - if (is.null(memb_dim)) { - if (is.null(dat_dim)) { - # exp: [sdate] - # obs: [sdate] - nexp <- 1 - nobs <- 1 - CORR <- array(dim = c(nexp = nexp, nobs = nobs)) - if (any(!is.na(exp)) && sum(!is.na(obs)) > 2) { - CORR <- cor(exp, obs, use = "pairwise.complete.obs", method = method) - } - } else { - # exp: [sdate, dat_exp] - # obs: [sdate, dat_obs] - nexp <- as.numeric(dim(exp)[dat_dim]) - nobs <- as.numeric(dim(obs)[dat_dim]) - CORR <- array(dim = c(nexp = nexp, nobs = nobs)) - for (j in 1:nobs) { - for (y in 1:nexp) { - if (any(!is.na(exp[, y])) && sum(!is.na(obs[, j])) > 2) { - CORR[y, j] <- cor(exp[, y], obs[, j], - use = "pairwise.complete.obs", - method = method) - } - } - } -#---------------------------------------- -# Same as above calculation. -#TODO: Compare which is faster. -# CORR <- sapply(1:nobs, function(i) { -# sapply(1:nexp, function (x) { -# if (any(!is.na(exp[, x])) && sum(!is.na(obs[, i])) > 2) { -# cor(exp[, x], obs[, i], -# use = "pairwise.complete.obs", -# method = method) -# } else { -# NA -# } -# }) -# }) -#----------------------------------------- - } - - } else { # memb_dim != NULL - exp_memb <- as.numeric(dim(exp)[memb_dim]) # memb_dim - obs_memb <- as.numeric(dim(obs)[memb_dim]) - - if (is.null(dat_dim)) { - # exp: [sdate, memb_exp] - # obs: [sdate, memb_obs] - nexp <- 1 - nobs <- 1 - CORR <- array(dim = c(nexp = nexp, nobs = nobs, exp_memb = exp_memb, obs_memb = obs_memb)) - - for (j in 1:obs_memb) { - for (y in 1:exp_memb) { - - if (any(!is.na(exp[,y])) && sum(!is.na(obs[, j])) > 2) { - CORR[, , y, j] <- cor(exp[, y], obs[, j], - use = "pairwise.complete.obs", - method = method) - } - - } - } - } else { - # exp: [sdate, dat_exp, memb_exp] - # obs: [sdate, dat_obs, memb_obs] - nexp <- as.numeric(dim(exp)[dat_dim]) - nobs <- as.numeric(dim(obs)[dat_dim]) - - CORR <- array(dim = c(nexp = nexp, nobs = nobs, exp_memb = exp_memb, obs_memb = obs_memb)) - - for (j in 1:obs_memb) { - for (y in 1:exp_memb) { - CORR[, , y, j] <- sapply(1:nobs, function(i) { - sapply(1:nexp, function (x) { - if (any(!is.na(exp[, x, y])) && sum(!is.na(obs[, i, j])) > 2) { - cor(exp[, x, y], obs[, i, j], - use = "pairwise.complete.obs", - method = method) - } else { - NA - } - }) - }) - - } - } - } - - } - - -# if (pval) { -# for (i in 1:nobs) { -# p.val[, i] <- try(sapply(1:nexp, -# function(x) {(cor.test(exp[, x], obs[, i], -# use = "pairwise.complete.obs", -# method = method)$p.value)/2}), silent = TRUE) -# if (class(p.val[, i]) == 'character') { -# p.val[, i] <- NA -# } -# } -# } - - if (pval || conf || sign) { - if (method == "kendall" | method == "spearman") { - if (!is.null(dat_dim) | !is.null(memb_dim)) { - tmp <- apply(obs, c(1:length(dim(obs)))[-1], rank) # for memb_dim = NULL, 2; for memb_dim, c(2, 3) - names(dim(tmp))[1] <- time_dim - eno <- Eno(tmp, time_dim) - } else { - tmp <- rank(obs) - tmp <- array(tmp) - names(dim(tmp)) <- time_dim - eno <- Eno(tmp, time_dim) - } - } else if (method == "pearson") { - eno <- Eno(obs, time_dim) - } - - if (is.null(memb_dim)) { - eno_expand <- array(dim = c(nexp = nexp, nobs = nobs)) - for (i in 1:nexp) { - eno_expand[i, ] <- eno - } - } else { #member - eno_expand <- array(dim = c(nexp = nexp, nobs = nobs, exp_memb = exp_memb, obs_memb = obs_memb)) - for (i in 1:nexp) { - for (j in 1:exp_memb) { - eno_expand[i, , j, ] <- eno - } - } - } - - } - -#############old################# -#This doesn't return error but it's diff from cor.test() when method is spearman and kendall - if (pval || sign) { - t <- sqrt(CORR * CORR * (eno_expand - 2) / (1 - (CORR ^ 2))) - p.val <- pt(t, eno_expand - 2, lower.tail = FALSE) - if (sign) signif <- !is.na(p.val) & p.val <= alpha - } -################################### - if (conf) { - conf.lower <- alpha / 2 - conf.upper <- 1 - conf.lower - suppressWarnings({ - conflow <- tanh(atanh(CORR) + qnorm(conf.lower) / sqrt(eno_expand - 3)) - confhigh <- tanh(atanh(CORR) + qnorm(conf.upper) / sqrt(eno_expand - 3)) - }) - } - -################################### - # Remove nexp and nobs if dat_dim = NULL - if (is.null(dat_dim) & !is.null(memb_dim)) { - dim(CORR) <- dim(CORR)[3:length(dim(CORR))] - if (pval) { - dim(p.val) <- dim(p.val)[3:length(dim(p.val))] - } - if (conf) { - dim(conflow) <- dim(conflow)[3:length(dim(conflow))] - dim(confhigh) <- dim(confhigh)[3:length(dim(confhigh))] - } - } - -################################### - - res <- list(corr = CORR) - if (pval) { - res <- c(res, list(p.val = p.val)) - } - if (conf) { - res <- c(res, list(conf.lower = conflow, conf.upper = confhigh)) - } - if (sign) { - res <- c(res, list(sign = signif)) - } - - return(res) - -} diff --git a/modules/Skill/tmp/RMSSS.R b/modules/Skill/tmp/RMSSS.R deleted file mode 100644 index d2ff4861..00000000 --- a/modules/Skill/tmp/RMSSS.R +++ /dev/null @@ -1,448 +0,0 @@ -#'Compute root mean square error skill score -#' -#'Compute the root mean square error skill score (RMSSS) between an array of -#'forecast 'exp' and an array of observation 'obs'. The two arrays should -#'have the same dimensions except along dat_dim, where the length can be -#'different, with the number of experiments/models (nexp) and the number of -#'observational datasets (nobs).\cr -#'RMSSS computes the root mean square error skill score of each jexp in 1:nexp -#'against each job in 1:nobs which gives nexp * nobs RMSSS for each grid point -#'of the array.\cr -#'The RMSSS are computed along the time_dim dimension which should correspond -#'to the start date dimension.\cr -#'The p-value and significance test are optionally provided by an one-sided -#'Fisher test or Random Walk test.\cr -#' -#'@param exp A named numeric array of experimental data which contains at least -#' two dimensions for dat_dim and time_dim. It can also be a vector with the -#' same length as 'obs', then the vector will automatically be 'time_dim' and -#' 'dat_dim' will be 1. -#'@param obs A named numeric array of observational data which contains at least -#' two dimensions for dat_dim and time_dim. The dimensions should be the same -#' as paramter 'exp' except the length of 'dat_dim' dimension. The order of -#' dimension can be different. It can also be a vector with the same length as -#' 'exp', then the vector will automatically be 'time_dim' and 'dat_dim' will -#' be 1. -#'@param ref A named numerical array of the reference forecast data with at -#' least time dimension, or 0 (typical climatological forecast) or 1 -#' (normalized climatological forecast). If it is an array, the dimensions must -#' be the same as 'exp' except 'memb_dim' and 'dat_dim'. If there is only one -#' reference dataset, it should not have dataset dimension. If there is -#' corresponding reference for each experiment, the dataset dimension must -#' have the same length as in 'exp'. If 'ref' is NULL, the typical -#' climatological forecast is used as reference forecast (equivelant to 0.) -#' The default value is NULL. -#'@param dat_dim A character string indicating the name of dataset (nobs/nexp) -#' dimension. The default value is 'dataset'. -#'@param time_dim A character string indicating the name of dimension along -#' which the RMSSS are computed. The default value is 'sdate'. -#'@param memb_dim A character string indicating the name of the member dimension -#' to compute the ensemble mean; it should be set to NULL if the parameter 'exp' -#' and 'ref' are already the ensemble mean. The default value is NULL. -#'@param pval A logical value indicating whether to compute or not the p-value -#' of the test Ho: RMSSS = 0. The default value is TRUE. -#'@param sign A logical value indicating whether to compute or not the -#' statistical significance of the test Ho: RMSSS = 0. The default value is -#' FALSE. -#'@param alpha A numeric of the significance level to be used in the -#' statistical significance test. The default value is 0.05. -#'@param sig_method A character string indicating the significance method. The -#' options are "one-sided Fisher" (default) and "Random Walk". -#'@param ncores An integer indicating the number of cores to use for parallel -#' computation. The default value is NULL. -#' -#'@return -#'A list containing the numeric arrays with dimension:\cr -#' c(nexp, nobs, all other dimensions of exp except time_dim).\cr -#'nexp is the number of experiment (i.e., dat_dim in exp), and nobs is the -#'number of observation (i.e., dat_dim in obs). If dat_dim is NULL, nexp and -#'nobs are omitted.\cr -#'\item{$rmsss}{ -#' A numerical array of the root mean square error skill score. -#'} -#'\item{$p.val}{ -#' A numerical array of the p-value with the same dimensions as $rmsss. -#' Only present if \code{pval = TRUE}. -#'} -#'\item{sign}{ -#' A logical array of the statistical significance of the RMSSS with the same -#' dimensions as $rmsss. Only present if \code{sign = TRUE}. -#'} -#' -#'@examples -#' set.seed(1) -#' exp <- array(rnorm(30), dim = c(dataset = 2, time = 3, memb = 5)) -#' set.seed(2) -#' obs <- array(rnorm(15), dim = c(time = 3, memb = 5, dataset = 1)) -#' res <- RMSSS(exp, obs, time_dim = 'time', dat_dim = 'dataset') -#' -#'@rdname RMSSS -#'@import multiApply -#'@importFrom stats pf -#'@export -RMSSS <- function(exp, obs, ref = NULL, time_dim = 'sdate', dat_dim = 'dataset', - memb_dim = NULL, pval = TRUE, sign = FALSE, alpha = 0.05, - sig_method = 'one-sided Fisher', ncores = NULL) { - - # Check inputs - ## exp, obs, and ref (1) - if (is.null(exp) | is.null(obs)) { - stop("Parameter 'exp' and 'obs' cannot be NULL.") - } - if (!is.numeric(exp) | !is.numeric(obs)) { - stop("Parameter 'exp' and 'obs' must be a numeric array.") - } - if (is.null(dim(exp)) & is.null(dim(obs))) { #is vector - if (length(exp) == length(obs)) { - exp <- array(exp, dim = c(length(exp), 1)) - names(dim(exp)) <- c(time_dim, dat_dim) - obs <- array(obs, dim = c(length(obs), 1)) - names(dim(obs)) <- c(time_dim, dat_dim) - } else { - stop(paste0("Parameter 'exp' and 'obs' must be array with as least two ", - "dimensions time_dim and dat_dim, or vector of same length.")) - } - } else if (is.null(dim(exp)) | is.null(dim(obs))) { - stop(paste0("Parameter 'exp' and 'obs' must be array with as least two ", - "dimensions time_dim and dat_dim, or vector of same length.")) - } - if(any(is.null(names(dim(exp))))| any(nchar(names(dim(exp))) == 0) | - any(is.null(names(dim(obs))))| any(nchar(names(dim(obs))) == 0)) { - stop("Parameter 'exp' and 'obs' must have dimension names.") - } - if(!all(names(dim(exp)) %in% names(dim(obs))) | - !all(names(dim(obs)) %in% names(dim(exp)))) { - stop("Parameter 'exp' and 'obs' must have same dimension name.") - } - if (!is.null(ref)) { - if (!is.numeric(ref)) { - stop("Parameter 'ref' must be numeric.") - } - if (is.array(ref)) { - if (any(is.null(names(dim(ref))))| any(nchar(names(dim(ref))) == 0)) { - stop("Parameter 'ref' must have dimension names.") - } - } else if (length(ref) != 1 | any(!ref %in% c(0, 1))) { - stop("Parameter 'ref' must be a numeric array or number 0 or 1.") - } - } - - ## time_dim - if (!is.character(time_dim) | length(time_dim) > 1) { - stop("Parameter 'time_dim' must be a character string.") - } - if (!time_dim %in% names(dim(exp)) | !time_dim %in% names(dim(obs))) { - stop("Parameter 'time_dim' is not found in 'exp' or 'obs' dimension.") - } - ## dat_dim - if (!is.null(dat_dim)) { - if (!is.character(dat_dim) | length(dat_dim) > 1) { - stop("Parameter 'dat_dim' must be a character string or NULL.") - } - if (!dat_dim %in% names(dim(exp)) | !dat_dim %in% names(dim(obs))) { - stop("Parameter 'dat_dim' is not found in 'exp' or 'obs' dimension.", - " Set it as NULL if there is no dataset dimension.") - } - } - ## memb_dim - if (!is.null(memb_dim)) { - if (!is.character(memb_dim) | length(memb_dim) > 1) { - stop("Parameter 'memb_dim' must be a character string.") - } - if (!memb_dim %in% names(dim(exp))) { - stop("Parameter 'memb_dim' is not found in 'exp' dimension.") - } - if (memb_dim %in% names(dim(obs))) { - if (identical(as.numeric(dim(obs)[memb_dim]), 1)) { - obs <- ClimProjDiags::Subset(x = obs, along = memb_dim, indices = 1, drop = 'selected') - } else { - stop("Not implemented for observations with members ('obs' can have 'memb_dim', ", - "but it should be of length = 1).") - } - } - } - ## pval - if (!is.logical(pval) | length(pval) > 1) { - stop("Parameter 'pval' must be one logical value.") - } - ## sign - if (!is.logical(sign) | length(sign) > 1) { - stop("Parameter 'sign' must be one logical value.") - } - ## alpha - if (!is.numeric(alpha) | length(alpha) > 1) { - stop("Parameter 'alpha' must be one numeric value.") - } - ## sig_method - if (length(sig_method) != 1 | !any(sig_method %in% c('one-sided Fisher', 'Random Walk'))) { - stop("Parameter 'sig_method' must be one of 'one-sided Fisher' or 'Random Walk'.") - } - if (sig_method == "Random Walk" & pval == T) { - warning("p-value cannot be calculated by significance method 'Random Walk'.") - pval <- FALSE - } - ## ncores - if (!is.null(ncores)) { - if (!is.numeric(ncores) | ncores %% 1 != 0 | ncores <= 0 | - length(ncores) > 1) { - stop("Parameter 'ncores' must be a positive integer.") - } - } - ## exp and obs (2) - name_exp <- sort(names(dim(exp))) - name_obs <- sort(names(dim(obs))) - if (!is.null(memb_dim)) { - name_exp <- name_exp[-which(name_exp == memb_dim)] - } - if (!is.null(dat_dim)) { - name_exp <- name_exp[-which(name_exp == dat_dim)] - name_obs <- name_obs[-which(name_obs == dat_dim)] - } - if(!all(dim(exp)[name_exp] == dim(obs)[name_obs])) { - stop(paste0("Parameter 'exp' and 'obs' must have same length of ", - "all dimension except 'memb_dim' and 'dat_dim'.")) - } - if (!is.null(ref)) { - name_ref <- sort(names(dim(ref))) - if (!is.null(memb_dim) && memb_dim %in% name_ref) { - name_ref <- name_ref[-which(name_ref == memb_dim)] - } - if (!is.null(dat_dim)) { - if (dat_dim %in% name_ref) { - if (!identical(dim(exp)[dat_dim], dim(ref)[dat_dim])) { - stop(paste0("If parameter 'ref' has dataset dimension, it must be ", - "equal to dataset dimension of 'exp'.")) - } - name_ref <- name_ref[-which(name_ref == dat_dim)] - } - } - if (!identical(length(name_exp), length(name_ref)) | - !identical(dim(exp)[name_exp], dim(ref)[name_ref])) { - stop(paste0("Parameter 'exp' and 'ref' must have the same length of ", - "all dimensions except 'memb_dim' and 'dat_dim' if there is ", - "only one reference dataset.")) - } - } - - if (dim(exp)[time_dim] <= 2) { - stop("The length of time_dim must be more than 2 to compute RMSSS.") - } - - - ############################### -# # Sort dimension -# name_exp <- names(dim(exp)) -# name_obs <- names(dim(obs)) -# order_obs <- match(name_exp, name_obs) -# obs <- Reorder(obs, order_obs) - - - ############################### - # Create ref array if needed - if (is.null(ref)) ref <- 0 - if (!is.array(ref)) { - ref <- array(data = ref, dim = dim(exp)) - } - - ############################### - ## Ensemble mean - if (!is.null(memb_dim)) { - exp <- MeanDims(exp, memb_dim, na.rm = T) - if (!is.null(ref) & memb_dim %in% names(dim(ref))) { - ref <- MeanDims(ref, memb_dim, na.rm = T) - } - } - - ############################### - # Calculate RMSSS - -# if (!is.null(ref)) { # use "ref" as reference forecast -# if (!is.null(dat_dim) && dat_dim %in% names(dim(ref))) { -# target_dims_ref <- c(time_dim, dat_dim) -# } else { -# target_dims_ref <- c(time_dim) -# } -# data <- list(exp = exp, obs = obs, ref = ref) -# target_dims = list(exp = c(time_dim, dat_dim), -# obs = c(time_dim, dat_dim), -# ref = target_dims_ref) -# } else { -# data <- list(exp = exp, obs = obs) -# target_dims = list(exp = c(time_dim, dat_dim), -# obs = c(time_dim, dat_dim)) -# } - data <- list(exp = exp, obs = obs, ref = ref) - if (!is.null(dat_dim)) { - if (dat_dim %in% names(dim(ref))) { - target_dims <- list(exp = c(time_dim, dat_dim), - obs = c(time_dim, dat_dim), - ref = c(time_dim, dat_dim)) - } else { - target_dims <- list(exp = c(time_dim, dat_dim), - obs = c(time_dim, dat_dim), - ref = c(time_dim)) - } - } else { - target_dims <- list(exp = time_dim, obs = time_dim, ref = time_dim) - } - - res <- Apply(data, - target_dims = target_dims, - fun = .RMSSS, - time_dim = time_dim, dat_dim = dat_dim, - pval = pval, sign = sign, alpha = alpha, - sig_method = sig_method, - ncores = ncores) - - return(res) -} - -.RMSSS <- function(exp, obs, ref = NULL, time_dim = 'sdate', dat_dim = 'dataset', pval = TRUE, - sign = FALSE, alpha = 0.05, sig_method = 'one-sided Fisher') { - # exp: [sdate, (dat)] - # obs: [sdate, (dat)] - # ref: [sdate, (dat)] or NULL - - if (is.null(ref)) { - ref <- array(data = 0, dim = dim(obs)) - } else if (identical(ref, 0) | identical(ref, 1)) { - ref <- array(ref, dim = dim(exp)) - } - - if (is.null(dat_dim)) { - # exp: [sdate] - # obs: [sdate] - nexp <- 1 - nobs <- 1 - nref <- 1 - # Add dat dim back temporarily - dim(exp) <- c(dim(exp), dat = 1) - dim(obs) <- c(dim(obs), dat = 1) - dim(ref) <- c(dim(ref), dat = 1) - - } else { - # exp: [sdate, dat_exp] - # obs: [sdate, dat_obs] - nexp <- as.numeric(dim(exp)[2]) - nobs <- as.numeric(dim(obs)[2]) - if (dat_dim %in% names(dim(ref))) { - nref <- as.numeric(dim(ref)[2]) - } else { - dim(ref) <- c(dim(ref), dat = 1) - nref <- 1 - } - } - - nsdate <- as.numeric(dim(exp)[1]) - - # RMS of forecast - dif1 <- array(dim = c(nsdate, nexp, nobs)) - names(dim(dif1)) <- c(time_dim, 'nexp', 'nobs') - - for (i in 1:nobs) { - dif1[, , i] <- sapply(1:nexp, function(x) {exp[, x] - obs[, i]}) - } - - rms_exp <- apply(dif1^2, c(2, 3), mean, na.rm = TRUE)^0.5 #array(dim = c(nexp, nobs)) - - # RMS of reference -# if (!is.null(ref)) { - dif2 <- array(dim = c(nsdate, nref, nobs)) - names(dim(dif2)) <- c(time_dim, 'nexp', 'nobs') - for (i in 1:nobs) { - dif2[, , i] <- sapply(1:nref, function(x) {ref[, x] - obs[, i]}) - } - rms_ref <- apply(dif2^2, c(2, 3), mean, na.rm = TRUE)^0.5 #array(dim = c(nref, nobs)) - if (nexp != nref) { - # expand rms_ref to nexp (nref is 1) - rms_ref <- array(rms_ref, dim = c(nobs = nobs, nexp = nexp)) - rms_ref <- Reorder(rms_ref, c(2, 1)) - } -# } else { -# rms_ref <- array(colMeans(obs^2, na.rm = TRUE)^0.5, dim = c(nobs = nobs, nexp = nexp)) -## rms_ref[which(abs(rms_ref) <= (max(abs(rms_ref), na.rm = TRUE) / 1000))] <- max(abs( -## rms_ref), na.rm = TRUE) / 1000 -# rms_ref <- Reorder(rms_ref, c(2, 1)) -# #rms_ref above: [nexp, nobs] -# } - - rmsss <- 1 - rms_exp / rms_ref - -################################################# - -# if (conf) { -# conflow <- (1 - conf.lev) / 2 -# confhigh <- 1 - conflow -# conf_low <- array(dim = c(nexp = nexp, nobs = nobs)) -# conf_high <- array(dim = c(nexp = nexp, nobs = nobs)) -# } - - if (sig_method == 'one-sided Fisher') { - p_val <- array(dim = c(nexp = nexp, nobs = nobs)) - ## pval and sign - if (pval || sign) { - eno1 <- Eno(dif1, time_dim) - if (is.null(ref)) { - eno2 <- Eno(obs, time_dim) - eno2 <- array(eno2, dim = c(nobs = nobs, nexp = nexp)) - eno2 <- Reorder(eno2, c(2, 1)) - } else { - eno2 <- Eno(dif2, time_dim) - if (nref != nexp) { - eno2 <- array(eno2, dim = c(nobs = nobs, nexp = nexp)) - eno2 <- Reorder(eno2, c(2, 1)) - } - } - - F.stat <- (eno2 * rms_ref^2 / (eno2 - 1)) / ((eno1 * rms_exp^2 / (eno1- 1))) - tmp <- !is.na(eno1) & !is.na(eno2) & eno1 > 2 & eno2 > 2 - p_val <- 1 - pf(F.stat, eno1 - 1, eno2 - 1) - if (sign) signif <- p_val <= alpha - # If there isn't enough valid data, return NA - p_val[which(!tmp)] <- NA - if (sign) signif[which(!tmp)] <- NA - - # change not enough valid data rmsss to NA - rmsss[which(!tmp)] <- NA - } - - } else if (sig_method == "Random Walk") { - signif <- array(dim = c(nexp = nexp, nobs = nobs)) - for (i in 1:nexp) { - for (j in 1:nobs) { - - # Error - error_exp <- array(data = abs(exp[, i] - obs[, j]), dim = c(time = nsdate)) - if (nref == nexp) { - error_ref <- array(data = abs(ref[, i] - obs[, j]), dim = c(time = nsdate)) - } else { - # nref = 1 - error_ref <- array(data = abs(ref - obs[, j]), dim = c(time = nsdate)) - } - signif[i, j] <- .RandomWalkTest(skill_A = error_exp, skill_B = error_ref)$signif - } - } - } - - ################################### - # Remove extra dimensions if dat_dim = NULL - if (is.null(dat_dim)) { - dim(rmsss) <- NULL - dim(p_val) <- NULL - if (sign) dim(signif) <- NULL - } - ################################### - - # output - res <- list(rmsss = rmsss) - if (pval) { - p.val <- list(p.val = p_val) - res <- c(res, p.val) - } - if (sign) { - signif <- list(sign = signif) - res <- c(res, signif) - } - - return(res) -} diff --git a/modules/Skill/tmp/RandomWalkTest.R b/modules/Skill/tmp/RandomWalkTest.R deleted file mode 100644 index adeadc1e..00000000 --- a/modules/Skill/tmp/RandomWalkTest.R +++ /dev/null @@ -1,82 +0,0 @@ -#'Random walk test for skill differences -#' -#'Forecast comparison of the skill obtained with 2 forecasts (with respect to a -#'common reference) based on Random Walks, with significance estimate at the 95% -#'confidence level, as in DelSole and Tippett (2016). -#' -#'@param skill_A A numerical array of the time series of the skill with the -#' forecaster A's. -#'@param skill_B A numerical array of the time series of the skill with the -#' forecaster B's. The dimensions should be identical as parameter 'skill_A'. -#'@param time_dim A character string indicating the name of the dimension along -#' which the tests are computed. The default value is 'sdate'. -#'@param ncores An integer indicating the number of cores to use for parallel -#' computation. The default value is NULL. -#' -#'@return A list of 2: -#'\item{$score}{ -#' A numerical array with the same dimensions as the input arrays except -#' 'time_dim'. The number of times that forecaster A has been better than -#' forecaster B minus the number of times that forecaster B has been better -#' than forecaster A (for skill positively oriented). If $score is positive -#' forecaster A is better than forecaster B, and if $score is negative -#' forecaster B is better than forecaster B. -#'} -#'\item{$signif}{ -#' A logical array with the same dimensions as the input arrays except -#' 'time_dim'. Whether the difference is significant or not at the 5% -#' significance level. -#'} -#' -#'@examples -#' fcst_A <- array(c(11:50), dim = c(sdate = 10, lat = 2, lon = 2)) -#' fcst_B <- array(c(21:60), dim = c(sdate = 10, lat = 2, lon = 2)) -#' reference <- array(1:40, dim = c(sdate = 10, lat = 2, lon = 2)) -#' skill_A <- abs(fcst_A - reference) -#' skill_B <- abs(fcst_B - reference) -#' RandomWalkTest(skill_A = skill_A, skill_B = skill_B, time_dim = 'sdate', ncores = 1) -#' -#'@import multiApply -#'@export -RandomWalkTest <- function(skill_A, skill_B, time_dim = 'sdate', ncores = NULL){ - - ## Check inputs - if (is.null(skill_A) | is.null(skill_B)){ - stop("Parameters 'skill_A' and 'skill_B' cannot be NULL.") - } - if(!is.numeric(skill_A) | !is.numeric(skill_B)){ - stop("Parameters 'skill_A' and 'skill_B' must be a numerical array.") - } - if (!identical(dim(skill_A),dim(skill_B))){ - stop("Parameters 'skill_A' and 'skill_B' must have the same dimensions.") - } - if(!is.character(time_dim)){ - stop("Parameter 'time_dim' must be a character string.") - } - if(!time_dim %in% names(dim(skill_A)) | !time_dim %in% names(dim(skill_B))){ - stop("Parameter 'time_dim' is not found in 'skill_A' or 'skill_B' dimensions.") - } - if (!is.null(ncores)){ - if (!is.numeric(ncores) | ncores %% 1 != 0 | ncores <= 0 | length(ncores) > 1){ - stop("Parameter 'ncores' must be a positive integer.") - } - } - - ## Compute the Random Walk Test - res <- multiApply::Apply(data = list(skill_A, skill_B), - target_dims = time_dim, - fun = .RandomWalkTest, - ncores = ncores) - return(res) -} - -.RandomWalkTest <- function(skill_A, skill_B){ - - score <- cumsum(skill_A > skill_B) - cumsum(skill_A < skill_B) - - ## TRUE if significant (if last value is above or below 2*sqrt(N)) - signif<- ifelse(test = (score[length(skill_A)] < (-2)*sqrt(length(skill_A))) | (score[length(skill_A)] > 2*sqrt(length(skill_A))), - yes = TRUE, no = FALSE) - - return(list("score"=score[length(skill_A)],"signif"=signif)) -} -- GitLab From 3986dc88ce2a3340fb5ba3b5ca70e8206b224047 Mon Sep 17 00:00:00 2001 From: aho Date: Thu, 23 Mar 2023 17:38:50 +0100 Subject: [PATCH 094/388] Improve if condition so R/4.2.3 doesn't return warning --- tools/check_recipe.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/check_recipe.R b/tools/check_recipe.R index 964c4446..1853a8be 100644 --- a/tools/check_recipe.R +++ b/tools/check_recipe.R @@ -120,7 +120,7 @@ check_recipe <- function(recipe) { } ## TODO: Is this needed? if (is.null(recipe$Analysis$Time$fcst_year) || - tolower(recipe$Analysis$Time$fcst_year) == 'none') { + identical(tolower(recipe$Analysis$Time$fcst_year), 'none')) { stream <- "hindcast" # recipe$Analysis$Time$fcst_year <- 'YYYY' } else { -- GitLab From 52edf7dd347a8d5a53b632aba16a9411c471f33f Mon Sep 17 00:00:00 2001 From: Carlos Delgado Date: Fri, 24 Mar 2023 12:46:15 +0100 Subject: [PATCH 095/388] added decadal splitting --- tools/divide_recipe.R | 62 ++++++++++++++++++++++++++++++------------- 1 file changed, 44 insertions(+), 18 deletions(-) diff --git a/tools/divide_recipe.R b/tools/divide_recipe.R index 403304c4..8bbe48fa 100644 --- a/tools/divide_recipe.R +++ b/tools/divide_recipe.R @@ -35,35 +35,52 @@ divide_recipe <- function(recipe) { # duplicate recipe by Datasets: # check Systems - if (recipe$Analysis$Datasets$Multimodel) { + if (recipe$Analysis$Datasets$Multimodel %in% c(TRUE,'both')) { for (reci in 1:length(all_recipes)) { all_recipes[[reci]]$Analysis$Datasets <- - list(System = recipe$Analysis$Datasets$System, - Multimodel = recipe$Analysis$Datasets$Multimodel, - Reference = NULL) + list(System = recipe$Analysis$Datasets$System, + Multimodel = recipe$Analysis$Datasets$Multimodel, + Reference = NULL) } } else { - for (sys in 1:length(recipe$Analysis$Datasets$System)) { - for (reci in 1:length(all_recipes)) { - all_recipes[[reci]]$Analysis$Datasets <- - list(System = recipe$Analysis$Datasets$System[[sys]], - Multimodel = recipe$Analysis$Datasets$Multimodel, - Reference = NULL) + if (tolower(recipe$Analysis$Horizon) == 'seasonal') { + for (sys in 1:length(recipe$Analysis$Datasets$System)) { + for (reci in 1:length(all_recipes)) { + all_recipes[[reci]]$Analysis$Datasets <- + list(System = recipe$Analysis$Datasets$System[[sys]], + Multimodel = recipe$Analysis$Datasets$Multimodel, + Reference = NULL) + } + if (sys == 1) { + recipes <- all_recipes + } else { + recipes <- append(recipes, all_recipes) + } } - if (sys == 1) { - recipes <- all_recipes - } else { - recipes <- append(recipes, all_recipes) + } else if (tolower(recipe$Analysis$Horizon) == 'decadal') { + for (sys in 1:length(recipe$Analysis$Datasets$System$name)) { + for (reci in 1:length(all_recipes)) { + all_recipes[[reci]]$Analysis$Datasets <- + list(System = list(name = recipe$Analysis$Datasets$System$name[[sys]], + member = recipe$Analysis$Datasets$System$member[[sys]]), + Multimodel = recipe$Analysis$Datasets$Multimodel, + Reference = NULL) + } + if (sys == 1) { + recipes <- all_recipes + } else { + recipes <- append(recipes, all_recipes) + } } - } + } # Rest of horizons all_recipes <- recipes rm(list = 'recipes') } # check References - for (ref in 1:length(recipe$Analysis$Datasets$Reference)) { + for (ref in 1:length(recipe$Analysis$Datasets$Reference$name)) { for (reci in 1:length(all_recipes)) { - all_recipes[[reci]]$Analysis$Datasets$Reference <- - recipe$Analysis$Datasets$Reference[[ref]] + all_recipes[[reci]]$Analysis$Datasets$Reference$name <- + recipe$Analysis$Datasets$Reference$name[[ref]] } if (ref == 1) { recipes <- all_recipes @@ -102,6 +119,15 @@ divide_recipe <- function(recipe) { } all_recipes <- recipes rm(list = 'recipes') + } else if (tolower(recipe$Analysis$Horizon) == 'decadal') { + for (reci in 1:length(all_recipes)) { + all_recipes[[reci]]$Analysis$Time <- + list(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) + } } # Rest of horizons # Save all recipes in separate YAML files for (reci in 1:length(all_recipes)) { -- GitLab From eb7a8b93c56e55218c847d64aaec1b7c46f967c0 Mon Sep 17 00:00:00 2001 From: Carlos Delgado Date: Fri, 24 Mar 2023 12:48:28 +0100 Subject: [PATCH 096/388] recipe used for splitting --- recipes/recipe_decadal_split.yml | 60 ++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 recipes/recipe_decadal_split.yml diff --git a/recipes/recipe_decadal_split.yml b/recipes/recipe_decadal_split.yml new file mode 100644 index 00000000..9c77ad8c --- /dev/null +++ b/recipes/recipe_decadal_split.yml @@ -0,0 +1,60 @@ +Description: + Author: Carlos Delgado Torres + Info: Test for spliting a decadal recipe (two variables) +Analysis: + Horizon: Decadal + Variables: + - {name: tas, freq: monthly_mean} + - {name: pr, freq: monthly_mean} + Datasets: + System: + name: EC-Earth3-i4 + member: r1i4p1f1,r2i4p1f1 + Multimodel: no + Reference: + name: JRA-55 + Time: + fcst_year: + hcst_start: 2015 # 2015-2016 in dcppA, 2017-2018 in dcppB + hcst_end: 2018 +# season: 'Annual' + ftime_min: 6 # Apr + ftime_max: 8 + Region: + - {latmin: -5, latmax: 5, lonmin: -5, lonmax: 5} + Regrid: + method: bilinear + type: to_system + Workflow: + Anomalies: + compute: no + cross_validation: + Calibration: + method: 'bias' + Skill: + metric: EnsCorr RPSS + Probabilities: + percentiles: [[1/3, 2/3]] + Indicators: + index: FALSE + ncores: 8 # Optional, int: number of cores, defaults to 1 + remove_NAs: FALSE # Optional, bool: Whether NAs are removed, defaults to FALSE + Output_format: S2S4E +Run: + Loglevel: INFO + Terminal: yes + filesystem: esarchive + output_dir: /esarchive/scratch/cdelgado/auto-s2s_logs/ + code_dir: /esarchive/scratch/cdelgado/gitlab/auto-s2s/ + autosubmit: yes + # fill only if using autosubmit + auto_conf: + expid: a5to ## if left empty, create new exp? + hpc_user: bsc32924 # your hpc username + wallclock: 01:00 # hh:mm + processors_per_job: 8 # use ncores parameter? + platform: nord3v2 # make this constant? + email_notifications: yes # enable/disable email notifications + email_address: carlos.delgado@bsc.es # email address for notifications + notify_completed: yes # notify me by email when a job finishes + notify_failed: yes # notify me by email when a job fails -- GitLab From 7c3282e8264c10a7ca4881ee21eb8592a0236cc9 Mon Sep 17 00:00:00 2001 From: eduzenli Date: Fri, 24 Mar 2023 14:33:28 +0100 Subject: [PATCH 097/388] checks are included --- modules/Downscaling/Downscaling.R | 178 ++++++++++++++++++++---------- 1 file changed, 122 insertions(+), 56 deletions(-) diff --git a/modules/Downscaling/Downscaling.R b/modules/Downscaling/Downscaling.R index 58b9c22f..3e574e73 100644 --- a/modules/Downscaling/Downscaling.R +++ b/modules/Downscaling/Downscaling.R @@ -1,23 +1,10 @@ -# ▄████▄ ██████ ▓█████▄ ▒█████ █ █░███▄ █ ██████ ▄████▄ ▄▄▄ ██▓ ▓█████ -#▒██▀ ▀█ ▒██ ▒ ▒██▀ ██▌▒██▒ ██▒▓█░ █ ░█░██ ▀█ █ ▒██ ▒ ▒██▀ ▀█ ▒████▄ ▓██▒ ▓█ ▀ -#▒▓█ ▄ ░ ▓██▄ ░██ █▌▒██░ ██▒▒█░ █ ░█▓██ ▀█ ██▒░ ▓██▄ ▒▓█ ▄ ▒██ ▀█▄ ▒██░ ▒███ -#▒▓▓▄ ▄██▒ ▒ ██▒░▓█▄ ▌▒██ ██░░█░ █ ░█▓██▒ ▐▌██▒ ▒ ██▒▒▓▓▄ ▄██▒░██▄▄▄▄██ ▒██░ ▒▓█ ▄ -#▒ ▓███▀ ░▒██████▒▒░▒████▓ ░ ████▓▒░░░██▒██▓▒██░ ▓██░▒██████▒▒▒ ▓███▀ ░ ▓█ ▓██▒░██████▒░▒████▒ -#░ ░▒ ▒ ░▒ ▒▓▒ ▒ ░ ▒▒▓ ▒ ░ ▒░▒░▒░ ░ ▓░▒ ▒ ░ ▒░ ▒ ▒ ▒ ▒▓▒ ▒ ░░ ░▒ ▒ ░ ▒▒ ▓▒█░░ ▒░▓ ░░░ ▒░ ░ -# ░ ▒ ░ ░▒ ░ ░ ░ ▒ ▒ ░ ▒ ▒░ ▒ ░ ░ ░ ░░ ░ ▒░░ ░▒ ░ ░ ░ ▒ ▒ ▒▒ ░░ ░ ▒ ░ ░ ░ ░ -#░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ▒ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ▒ ░ ░ ░ -#░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ -#░ ░ ░ -## TODO: Remove once CSDownscale is on CRAN -## TODO: Move recipe checks to check_recipe() +### Downscaling Module source('modules/Downscaling/tmp/Interpolation.R') source('modules/Downscaling/tmp/Intbc.R') source('modules/Downscaling/tmp/Intlr.R') source('modules/Downscaling/tmp/Analogs.R') source('modules/Downscaling/tmp/LogisticReg.R') source('modules/Downscaling/tmp/Utils.R') -#source("https://earth.bsc.es/gitlab/external/cstools/-/raw/master/R/CST_BiasCorrection.R") - ## Entry params data and recipe? downscale_datasets <- function(recipe, data) { @@ -30,45 +17,57 @@ downscale_datasets <- function(recipe, data) { type <- tolower(recipe$Analysis$Workflow$Downscaling$type) if (!is.null(data$fcst)) { - warn(recipe$Run$logger, - "The downscaling will be only performed to the hindcast data") + warning("The downscaling will be only performed to the hindcast data") data$fcst <- NULL } if (type == "none") { + hcst_downscal <- data$hcst DOWNSCAL_MSG <- "##### NO DOWNSCALING PERFORMED #####" + } else { # Downscaling function params int_method <- tolower(recipe$Analysis$Workflow$Downscaling$int_method) bc_method <- tolower(recipe$Analysis$Workflow$Downscaling$bc_method) - cal_method <- tolower(recipe$Analysis$Workflow$Downscaling$cal_method) + cal_method <- tolower(recipe$Analysis$Workflow$Downscaling$cal_method) lr_method <- tolower(recipe$Analysis$Workflow$Downscaling$lr_method) - logreg_method <- tolower(recipe$Analysis$Workflow$Downscaling$logreg_method) + log_reg_method <- tolower(recipe$Analysis$Workflow$Downscaling$log_reg_method) target_grid <- tolower(recipe$Analysis$Workflow$Downscaling$target_grid) nanalogs <- as.numeric(recipe$Analysis$Workflow$Downscaling$nanalogs) - - ## TODO: Compute number of cores + if (is.null(recipe$Analysis$ncores)) { ncores <- 1 } else { ncores <- recipe$Analysis$ncores } - ## TODO: add the parametre loocv where it corresponds + + #TO DO: add the parametre loocv where it corresponds if (is.null(recipe$Analysis$loocv)) { loocv <- TRUE } else { loocv <- recipe$Analysis$loocv } - # Define downscaling options + DOWNSCAL_TYPES <- c("none", "int", "intbc", "intlr", "analogs", "logreg") - BC_METHODS <- c("simple_bias", "calibration", "quantile_mapping") + BC_METHODS <- c("simple_bias", "calibration", "quantile_mapping", "sbc", "cal", "qm") LR_METHODS <- c("basic", "large_scale", "4nn") - LOGREG_METHODS <- c("ens_mean", "ens_mean_sd", "sorted_members") + LOG_REG_METHODS <- c("ens_mean", "ens_mean_sd", "sorted_members") + + if (!(type %in% DOWNSCAL_TYPES)) { + stop("Downscaling type in the recipe is not available. Accepted types ", + "are 'none', 'int', 'intbc', 'intlr', 'analogs', 'logreg'.") + } - # Interpolation if (type == "int") { - ## TODO: Move this check elsewhere + if (is.null(int_method)) { + stop("Please provide one interpolation method in the recipe.") + } + + if (is.null(target_grid)) { + stop("Please provide the target grid in the recipe.") + } + # Ensure that observations are in the same grid as experiments # Only needed for this method because the others already return the # observations @@ -76,7 +75,6 @@ downscale_datasets <- function(recipe, data) { lonmin <- data$hcst$lon[1] latmax <- data$hcst$lat[length(data$hcst$lat)] lonmax <- data$hcst$lon[length(data$hcst$lon)] - # Interpolate hcst hcst_downscal <- CST_Interpolation(data$hcst, points = NULL, method_remap = int_method, @@ -85,7 +83,7 @@ downscale_datasets <- function(recipe, data) { lon_dim = "longitude", region = c(lonmin, lonmax, latmin, latmax), method_point_interp = NULL) - # Interpolate obs + obs_downscal <- CST_Interpolation(data$obs, points = NULL, method_remap = int_method, @@ -94,15 +92,41 @@ downscale_datasets <- function(recipe, data) { lon_dim = "longitude", region = c(lonmin, lonmax, latmin, latmax), method_point_interp = NULL) + hcst_downscal$obs <- obs_downscal$exp - } else if (type == "intbc" & (bc_method=="cal" | bc_method=="calibration")) { - # Interpolate hcst and obs with bias correction (via calibration) + DOWNSCAL_MSG <- "##### DOWNSCALING COMPLETE #####" + } else if (type == "intbc") { + if (length(int_method) == 0) { + stop("Please provide one (and only one) interpolation method in the recipe.") + } + + if (is.null(bc_method)) { + stop("Please provide one bias-correction method in the recipe. Accepted ", + "methods are 'simple_bias', 'calibration', 'quantile_mapping', 'sbc', 'cal', ", + "'qm'.") + } + + if (is.null(target_grid)) { + stop("Please provide the target grid in the recipe.") + } + + if (!(bc_method %in% BC_METHODS)) { + stop(paste0(bc_method, " method in the recipe is not available. Accepted methods ", + "are 'simple_bias', 'calibration', 'quantile_mapping', 'sbc', 'cal', 'qm'.")) + } + + if (bc_method=="cal" | bc_method=="calibration") + { + if (length(cal_method)==0) { + stop("Please provide one (and only one) calibration method in the recipe.") + } + hcst_downscal <- CST_Intbc(data$hcst, data$obs, target_grid = target_grid, bc_method = bc_method, int_method = int_method, - cal.method=cal_method, + cal.method=cal_method, points = NULL, method_point_interp = NULL, lat_dim = "latitude", @@ -112,9 +136,10 @@ downscale_datasets <- function(recipe, data) { region = NULL, ncores = ncores) - } else if (type == "intbc" & !(bc_method=="cal" | bc_method=="calibration")) { - # Interpolate hcst and obs with bias correction (any other method than calibration) - hcst_downscal <- CST_Intbc(data$hcst, data$obs, + DOWNSCAL_MSG <- "##### DOWNSCALING COMPLETE #####" + } else + { + hcst_downscal <- CST_Intbc(data$hcst, data$obs, target_grid = target_grid, bc_method = bc_method, int_method = int_method, @@ -126,9 +151,28 @@ downscale_datasets <- function(recipe, data) { member_dim = "ensemble", region = NULL, ncores = ncores) + DOWNSCAL_MSG <- "##### DOWNSCALING COMPLETE #####" + } + } else if (type == "intlr") { + if (length(int_method) == 0) { + stop("Please provide one (and only one) interpolation method in the recipe.") + } - } else if (type == "intlr") { - ## TODO: add the possibility to have the element 'pred' in 'data' + if (is.null(lr_method)) { + stop("Please provide one linear regression method in the recipe. Accepted ", + "methods are 'basic', 'large_scale', '4nn'.") + } + + if (is.null(target_grid)) { + stop("Please provide the target grid in the recipe.") + } + + if (!(lr_method %in% LR_METHODS)) { + stop(paste0(lr_method, " method in the recipe is not available. Accepted methods ", + "are 'basic', 'large_scale', '4nn'.")) + } + + # TO DO: add the possibility to have the element 'pred' in 'data' if (lr_method == "large_scale") { if (is.null(data$pred$data)) { stop("Please provide the large scale predictors in the element 'data$pred$data'.") @@ -136,7 +180,7 @@ downscale_datasets <- function(recipe, data) { } else { data$pred$data <- NULL } - # Interpolate hcst and obs with linear regression + hcst_downscal <- CST_Intlr(data$hcst, data$obs, lr_method = lr_method, target_grid = target_grid, @@ -144,23 +188,25 @@ downscale_datasets <- function(recipe, data) { int_method = int_method, method_point_interp = NULL, predictors = data$pred$data, - lat_dim = "latitude", + lat_dim = "latitude", lon_dim = "longitude", - sdate_dim = "syear", - time_dim = "time", + sdate_dim = "syear", + time_dim = "time", member_dim = "ensemble", large_scale_predictor_dimname = 'vars', loocv = loocv, - region = NULL, + region = NULL, ncores = ncores) + + DOWNSCAL_MSG <- "##### DOWNSCALING COMPLETE #####" } else if (type == "analogs") { - if (length(nanalogs) == 0) { - info(recipe$Run$logger, - paste("The number of analogs for searching has not been provided", - "in the recipe. Setting it to 3.")) + + if (is.null(nanalogs)) { + warning("The number of analogs for searching has not been provided in the ", + "recipe. Setting it to 3.") nanalogs <- 3 } - # Apply analogs method to hcst and obs + hcst_downscal <- CST_Analogs(data$hcst, data$obs, grid_exp = data$hcst$source_files[1], nanalogs = nanalogs, @@ -174,17 +220,36 @@ downscale_datasets <- function(recipe, data) { return_indices = FALSE, loocv_window = loocv, ncores = ncores) + + DOWNSCAL_MSG <- "##### DOWNSCALING COMPLETE #####" } else if (type == "logreg") { + + if (length(int_method) == 0) { + stop("Please provide one (and only one) interpolation method in the recipe.") + } + + if (is.null(log_reg_method)) { + stop("Please provide one logistic regression method in the recipe. Accepted ", + "methods are 'ens_mean', 'ens_mean_sd', 'sorted_members'.") + } + + if (is.null(target_grid)) { + stop("Please provide the target grid in the recipe.") + } + # Since we are forcing to create three categories, and applying cross-validation, # we need at least six years of data for the logistic regression function to not # crash - if (dim(data$hcst$data)[["syear"]] < 6) { - error(recipe$Run$logger, - paste("The number of years of data is insufficient for the", - "logistic regression method. Please provide six or more.")) - stop() + if (dim(data$hcst$data)[names(dim(data$hcst$data)) == "syear"] <= 5) { + stop("The number of start dates is insufficient for the logisitic regression method. ", + "Please provide six or more.") + } + + if (!(log_reg_method %in% LOG_REG_METHODS)) { + stop(paste0(log_reg_method, " method in the recipe is not available. Accepted methods ", + "are 'ens_mean', 'ens_mean_sd', 'sorted_members'.")) } - # Apply logistic regression to hcst and obs + hcst_downscal <- CST_LogisticReg(data$hcst, data$obs, target_grid = target_grid, int_method = int_method, @@ -201,10 +266,11 @@ downscale_datasets <- function(recipe, data) { loocv = loocv, ncores = ncores) + DOWNSCAL_MSG <- "##### DOWNSCALING COMPLETE #####" } - DOWNSCAL_MSG <- "##### DOWNSCALING COMPLETE #####" - } - info(recipe$Run$logger, DOWNSCAL_MSG) - return(list(hcst = hcst_downscal$exp, obs = hcst_downscal$obs, fcst = NULL)) + } + print(DOWNSCAL_MSG) + return(list(hcst = hcst_downscal$exp, obs = hcst_downscal$obs, fcst = NULL)) } + -- GitLab From 3a831727092c69e3d9971b386c55c1bb05b66e30 Mon Sep 17 00:00:00 2001 From: Carlos Delgado Date: Fri, 24 Mar 2023 18:46:33 +0100 Subject: [PATCH 098/388] added script to auto_conf --- recipes/recipe_decadal_split.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/recipes/recipe_decadal_split.yml b/recipes/recipe_decadal_split.yml index 9c77ad8c..708037f7 100644 --- a/recipes/recipe_decadal_split.yml +++ b/recipes/recipe_decadal_split.yml @@ -49,7 +49,8 @@ Run: autosubmit: yes # fill only if using autosubmit auto_conf: - expid: a5to ## if left empty, create new exp? + script: /esarchive/scratch/cdelgado/gitlab/cdelgado_copernicus/ESS_evaluation_tool/main_decadal.R + expid: a5tx ## if left empty, create new exp? hpc_user: bsc32924 # your hpc username wallclock: 01:00 # hh:mm processors_per_job: 8 # use ncores parameter? -- GitLab From d4625b9163169386c5558e197296113bee172229 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Mon, 27 Mar 2023 12:02:31 +0200 Subject: [PATCH 099/388] Adjustments to run in the condaCerise env --- ...tion-v4.sh => auto-verification-CERISE.sh} | 0 autosubmit/conf_mars/autosubmit.yml | 2 +- modules/Loading/GRIB/GrbLoad.R | 3 ++- modules/Loading/Loading_GRIB.R | 5 ++-- modules/test_parallel_GRIB.R | 27 +++++++++++++++++++ recipes/tests/recipe_autosubmit_marstest.yml | 23 +++++++--------- 6 files changed, 43 insertions(+), 17 deletions(-) rename autosubmit/{auto-verification-v4.sh => auto-verification-CERISE.sh} (100%) create mode 100644 modules/test_parallel_GRIB.R diff --git a/autosubmit/auto-verification-v4.sh b/autosubmit/auto-verification-CERISE.sh similarity index 100% rename from autosubmit/auto-verification-v4.sh rename to autosubmit/auto-verification-CERISE.sh diff --git a/autosubmit/conf_mars/autosubmit.yml b/autosubmit/conf_mars/autosubmit.yml index 0fd5d5c6..03008116 100644 --- a/autosubmit/conf_mars/autosubmit.yml +++ b/autosubmit/conf_mars/autosubmit.yml @@ -1,6 +1,6 @@ config: EXPID: - AUTOSUBMIT_VERSION: 4.0.0b0 + AUTOSUBMIT_VERSION: 4.0.73 MAXWAITINGJOBS: 16 # Default maximum number of jobs to be running at the same time at any platform # Default: 6 diff --git a/modules/Loading/GRIB/GrbLoad.R b/modules/Loading/GRIB/GrbLoad.R index 5f15f627..29bcc8a3 100644 --- a/modules/Loading/GRIB/GrbLoad.R +++ b/modules/Loading/GRIB/GrbLoad.R @@ -167,7 +167,8 @@ GrbLoad <- function (dat, time_step = 1, has.memb = NULL, syear_time_dim = NULL) if (is.null(has.memb)) { # obs doesn't have memb; reshape syear/time dim result <- s2dv::Reorder(result, c("syear", "time", "latitude", "longitude")) result <- array(result, dim = c(dat = 1, var = 1, - syear_time_dim, dim(result)[3:4])) + syear_time_dim, dim(result)[3:4], + ensemble = 1)) } else { result <- array(result, dim = c(dim(result)[1:2], ensemble = has.memb, time = length(time_step), dim(result)[4])) diff --git a/modules/Loading/Loading_GRIB.R b/modules/Loading/Loading_GRIB.R index 8e19dd82..6db2e6cd 100644 --- a/modules/Loading/Loading_GRIB.R +++ b/modules/Loading/Loading_GRIB.R @@ -27,7 +27,7 @@ load_datasets <- function(recipe) { store.freq <- recipe$Analysis$Variables$freq # get MARS datasets dict: - archive <- read_yaml("conf/archive_GRIB.yml")[[recipe$Run$filesystem]] + archive <- read_yaml("conf/archive.yml")[[recipe$Run$filesystem]] exp_descrip <- archive$System[[exp.name]] freq.hcst <- unlist(exp_descrip[[store.freq]][variable]) reference_descrip <- archive$Reference[[ref.name]] @@ -254,7 +254,8 @@ load_datasets <- function(recipe) { syear = hcst.year, time = hcst.ftime, latitude = attr(obs, 'latitude'), - longitude = attr(obs, 'longitude')), + longitude = attr(obs, 'longitude'), + ensemble = 1), varName = attr(obs, 'shortName'), metadata = metadata_list, Dates = attributes(obs)$time, diff --git a/modules/test_parallel_GRIB.R b/modules/test_parallel_GRIB.R new file mode 100644 index 00000000..a13f9e59 --- /dev/null +++ b/modules/test_parallel_GRIB.R @@ -0,0 +1,27 @@ +source("modules/Loading/GRIB/GrbLoad.R") +source("modules/Loading/Loading_GRIB.R") +source('modules/Loading/GRIB/s2dv_cube.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") + +args = commandArgs(trailingOnly = TRUE) +recipe_file <- args[1] +recipe <- read_atomic_recipe(recipe_file) +# Load datasets +data <- load_datasets(recipe) +# Calibrate datasets +data <- calibrate_datasets(recipe, data) +# Compute anomalies +data <- compute_anomalies(recipe, data) +# Compute skill metrics +skill_metrics <- compute_skill_metrics(recipe, data) +# Compute percentiles and probability bins +probabilities <- compute_probabilities(recipe, data) +# Export all data to netCDF +save_data(recipe, data, skill_metrics, probabilities) +# Plot data +plot_data(recipe, data, skill_metrics, probabilities, + significance = T) diff --git a/recipes/tests/recipe_autosubmit_marstest.yml b/recipes/tests/recipe_autosubmit_marstest.yml index dfd2159f..14e86231 100644 --- a/recipes/tests/recipe_autosubmit_marstest.yml +++ b/recipes/tests/recipe_autosubmit_marstest.yml @@ -4,7 +4,7 @@ Description: Author: V. Agudetse - Info: Test Independent verification of two variables, two sdates, two systems + Info: Test Autosubmit WF for CERISE ################################################################################ ## ANALYSIS CONFIGURATION @@ -14,28 +14,25 @@ Analysis: Horizon: Seasonal Variables: # ECVs and Indicators? - {name: tas, freq: monthly_mean} - - {name: prlr, freq: monthly_mean} Datasets: System: # multiple systems for single model, split if Multimodel = F - {name: ECMWF-SEAS5} - - {name: Meteo-France-System7} Multimodel: False # single option Reference: - {name: ERA5} # multiple references for single model? Time: sdate: # list, split - '0101' - - '0201' - fcst_year: # list, don't split, handled internally + fcst_year: '2020' # list, don't split, handled internally hcst_start: '2000' # single option - hcst_end: '2016' # single option + hcst_end: '2003' # single option ftime_min: 1 # single option - ftime_max: 6 # single option + ftime_max: 3 # single option Region: # multiple lists, Add region name if there is more than 1 region - - {latmin: -10, latmax: 10, lonmin: -10, lonmax: 10} + - {latmin: -90, latmax: 90, lonmin: 0, lonmax: 360} Regrid: - method: conservative - type: to_system + method: bilinear + type: r360x180 Workflow: Anomalies: compute: yes @@ -48,7 +45,7 @@ Analysis: percentiles: [[1/3, 2/3], [1/10, 9/10], [1/4, 2/4, 3/4]] # list, don't split Indicators: index: no # ? - ncores: 8 + ncores: 14 remove_NAs: yes # bool, don't split Output_format: S2S4E # string, don't split @@ -64,11 +61,11 @@ Run: autosubmit: yes # fill only if using autosubmit auto_conf: - script: /esarchive/scratch/vagudets/repos/auto-s2s/modules/test_parallel_workflow.R # path to the script to run + script: /esarchive/scratch/vagudets/repos/auto-s2s/modules/test_parallel_GRIB.R # path to the script to run expid: a5ta ## if left empty, create new exp? hpc_user: bsc32762 # your hpc username wallclock: 04:00 # hh:mm - processors_per_job: 8 # use ncores parameter? + processors_per_job: 14 # use ncores parameter? platform: nord3v2 # make this constant? email_notifications: yes # enable/disable email notifications email_address: victoria.agudetse@bsc.es # email address for notifications -- GitLab From d3ec5f10f4a992332019999947377f51b5775ea5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pierre-Antoine=20Bretonni=C3=A8re?= Date: Mon, 27 Mar 2023 12:41:46 +0200 Subject: [PATCH 100/388] Add conda installation scripts --- conda_installation/environment-cerise.yml | 364 ++++++++++++++++++++++ conda_installation/load_cerise.bash | 11 + 2 files changed, 375 insertions(+) create mode 100644 conda_installation/environment-cerise.yml create mode 100755 conda_installation/load_cerise.bash diff --git a/conda_installation/environment-cerise.yml b/conda_installation/environment-cerise.yml new file mode 100644 index 00000000..d3eedd56 --- /dev/null +++ b/conda_installation/environment-cerise.yml @@ -0,0 +1,364 @@ +name: condaCerise +channels: + - r + - conda-forge + - defaults +dependencies: + - _libgcc_mutex=0.1=conda_forge + - _openmp_mutex=4.5=2_gnu + - _r-mutex=1.0.1=anacondar_1 + - alsa-lib=1.2.8=h166bdaf_0 + - atk-1.0=2.38.0=hd4edc92_1 + - attr=2.5.1=h166bdaf_1 + - binutils_impl_linux-64=2.40=hf600244_0 + - brotli=1.0.9=h166bdaf_8 + - brotli-bin=1.0.9=h166bdaf_8 + - brotlipy=0.7.0=py37h540881e_1004 + - bwidget=1.9.14=ha770c72_1 + - bzip2=1.0.8=h7f98852_4 + - c-ares=1.18.1=h7f98852_0 + - ca-certificates=2022.12.7=ha878542_0 + - cairo=1.16.0=ha61ee94_1014 + - cdo=2.1.1=h4f55462_2 + - certifi=2022.12.7=pyhd8ed1ab_0 + - cffi=1.15.1=py37h43b0acd_1 + - colorama=0.4.6=pyhd8ed1ab_0 + - conda=4.14.0=py37h89c1867_0 + - conda-package-handling=1.9.0=py37h540881e_0 + - cov-core=1.15.0=py_1 + - curl=7.88.1=hdc1c0ab_1 + - cycler=0.11.0=pyhd8ed1ab_0 + - dbus=1.13.6=h5008d03_3 + - eccodes=2.29.0=h7986f14_1 + - expat=2.5.0=h27087fc_0 + - fftw=3.3.10=nompi_hf0379b8_106 + - findlibs=0.0.2=pyhd8ed1ab_0 + - font-ttf-dejavu-sans-mono=2.37=hab24e00_0 + - font-ttf-inconsolata=3.000=h77eed37_0 + - font-ttf-source-code-pro=2.038=h77eed37_0 + - font-ttf-ubuntu=0.83=hab24e00_0 + - fontconfig=2.14.2=h14ed4e7_0 + - fonts-conda-ecosystem=1=0 + - fonts-conda-forge=1=0 + - fonttools=4.38.0=py37h540881e_0 + - freeglut=3.2.2=h9c3ff4c_1 + - freetype=2.12.1=hca18f0e_1 + - fribidi=1.0.10=h36c2ea0_0 + - gcc_impl_linux-64=12.2.0=hcc96c02_19 + - gdk-pixbuf=2.42.10=h05c8ddd_0 + - gettext=0.21.1=h27087fc_0 + - gfortran_impl_linux-64=12.2.0=h55be85b_19 + - giflib=5.2.1=h0b41bf4_3 + - glib=2.74.1=h6239696_1 + - glib-tools=2.74.1=h6239696_1 + - graphite2=1.3.13=h58526e2_1001 + - graphviz=7.1.0=h2e5815a_0 + - gsl=2.7=he838d99_0 + - gst-plugins-base=1.22.0=h4243ec0_2 + - gstreamer=1.22.0=h25f0c4b_2 + - gstreamer-orc=0.4.33=h166bdaf_0 + - gtk2=2.24.33=h90689f9_2 + - gts=0.7.6=h64030ff_2 + - gxx_impl_linux-64=12.2.0=hcc96c02_19 + - harfbuzz=6.0.0=h8e241bc_0 + - hdf4=4.2.15=h9772cbc_5 + - hdf5=1.12.2=nompi_h4df4325_101 + - icu=70.1=h27087fc_0 + - idna=3.4=pyhd8ed1ab_0 + - jack=1.9.22=h11f4161_0 + - jasper=4.0.0=h0ff4b12_0 + - jpeg=9e=h0b41bf4_3 + - kernel-headers_linux-64=2.6.32=he073ed8_15 + - keyutils=1.6.1=h166bdaf_0 + - kiwisolver=1.4.4=py37h7cecad7_0 + - krb5=1.20.1=h81ceb04_0 + - lame=3.100=h166bdaf_1003 + - lcms2=2.15=hfd0df8a_0 + - ld_impl_linux-64=2.40=h41732ed_0 + - lerc=4.0.0=h27087fc_0 + - libaec=1.0.6=hcb278e6_1 + - libblas=3.9.0=16_linux64_openblas + - libbrotlicommon=1.0.9=h166bdaf_8 + - libbrotlidec=1.0.9=h166bdaf_8 + - libbrotlienc=1.0.9=h166bdaf_8 + - libcap=2.66=ha37c62d_0 + - libcblas=3.9.0=16_linux64_openblas + - libclang=15.0.7=default_had23c3d_1 + - libclang13=15.0.7=default_h3e3d535_1 + - libcups=2.3.3=h36d4200_3 + - libcurl=7.88.1=hdc1c0ab_1 + - libdb=6.2.32=h9c3ff4c_0 + - libdeflate=1.17=h0b41bf4_0 + - libedit=3.1.20191231=he28a2e2_2 + - libev=4.33=h516909a_1 + - libevent=2.1.10=h28343ad_4 + - libffi=3.4.2=h7f98852_5 + - libflac=1.4.2=h27087fc_0 + - libgcc-devel_linux-64=12.2.0=h3b97bd3_19 + - libgcc-ng=12.2.0=h65d4601_19 + - libgcrypt=1.10.1=h166bdaf_0 + - libgd=2.3.3=h5aea950_4 + - libgfortran-ng=12.2.0=h69a702a_19 + - libgfortran5=12.2.0=h337968e_19 + - libglib=2.74.1=h606061b_1 + - libglu=9.0.0=he1b5a44_1001 + - libgomp=12.2.0=h65d4601_19 + - libgpg-error=1.46=h620e276_0 + - libiconv=1.17=h166bdaf_0 + - liblapack=3.9.0=16_linux64_openblas + - libllvm15=15.0.7=hadd5161_1 + - libnetcdf=4.9.1=nompi_h34a3ff0_101 + - libnghttp2=1.52.0=h61bc06f_0 + - libnsl=2.0.0=h7f98852_0 + - libogg=1.3.4=h7f98852_1 + - libopenblas=0.3.21=pthreads_h78a6416_3 + - libopus=1.3.1=h7f98852_1 + - libpng=1.6.39=h753d276_0 + - libpq=15.2=hb675445_0 + - librsvg=2.54.4=h7abd40a_0 + - libsanitizer=12.2.0=h46fd767_19 + - libsndfile=1.2.0=hb75c966_0 + - libsodium=1.0.18=h36c2ea0_1 + - libsqlite=3.40.0=h753d276_0 + - libssh2=1.10.0=hf14f497_3 + - libstdcxx-devel_linux-64=12.2.0=h3b97bd3_19 + - libstdcxx-ng=12.2.0=h46fd767_19 + - libsystemd0=252=h2a991cd_0 + - libtiff=4.5.0=h6adf6a1_2 + - libtool=2.4.7=h27087fc_0 + - libudev1=253=h0b41bf4_0 + - libuuid=2.32.1=h7f98852_1000 + - libvorbis=1.3.7=h9c3ff4c_0 + - libwebp=1.2.4=h1daa5a0_1 + - libwebp-base=1.2.4=h166bdaf_0 + - libxcb=1.13=h7f98852_1004 + - libxkbcommon=1.5.0=h79f4944_1 + - libxml2=2.10.3=hca2bb57_4 + - libzip=1.9.2=hc929e4a_1 + - libzlib=1.2.13=h166bdaf_4 + - lz4-c=1.9.4=hcb278e6_0 + - magics=4.13.0=h37abd2f_1 + - magics-python=1.5.8=pyhd8ed1ab_1 + - make=4.3=hd18ef5c_1 + - matplotlib=3.5.3=py37h89c1867_2 + - matplotlib-base=3.5.3=py37hf395dca_2 + - mock=5.0.1=pyhd8ed1ab_0 + - mpg123=1.31.3=hcb278e6_0 + - munkres=1.1.4=pyh9f0ad1d_0 + - mysql-common=8.0.32=ha901b37_0 + - mysql-libs=8.0.32=hd7da12d_0 + - ncurses=6.3=h27087fc_1 + - nose=1.3.7=py_1006 + - nose-cov=1.6=py_1 + - nspr=4.35=h27087fc_0 + - nss=3.89=he45b914_0 + - numpy=1.21.6=py37h976b520_0 + - openssl=3.1.0=h0b41bf4_0 + - packaging=23.0=pyhd8ed1ab_0 + - pandas=1.3.5=py37he8f5f7f_0 + - pango=1.50.14=hd33c08f_0 + - paramiko=3.1.0=pyhd8ed1ab_0 + - pcre2=10.40=hc3806b6_0 + - phantomjs=2.1.1=1 + - pillow=9.4.0=py37h6a678d5_0 + - pip=23.0.1=pyhd8ed1ab_0 + - pixman=0.40.0=h36c2ea0_0 + - ply=3.11=py_1 + - proj=9.1.1=h8ffa02c_2 + - pthread-stubs=0.4=h36c2ea0_1001 + - pulseaudio=16.1=ha8d29e2_1 + - pycosat=0.6.4=py37h540881e_0 + - pycparser=2.21=pyhd8ed1ab_0 + - pynacl=1.5.0=py37h540881e_1 + - pyopenssl=23.0.0=pyhd8ed1ab_0 + - pyparsing=3.0.9=pyhd8ed1ab_0 + - pyqt=5.15.7=py37hf30b843_1 + - pyqt5-sip=12.11.0=py37hd23a5d3_1 + - pysocks=1.7.1=py37h89c1867_5 + - python=3.7.12=hf930737_100_cpython + - python-dateutil=2.8.2=pyhd8ed1ab_0 + - python_abi=3.7=3_cp37m + - pytz=2022.7.1=pyhd8ed1ab_0 + - qt-main=5.15.8=h5d23da1_6 + - r-abind=1.4_5=r42hc72bb7e_1004 + - r-assertthat=0.2.1=r42hc72bb7e_3 + - r-base=4.2.3=ha7d60f8_0 + - r-bigmemory=4.6.1=r42h7525677_1 + - r-bigmemory.sri=0.1.6=r42hc72bb7e_0 + - r-brio=1.1.3=r42h76d94ec_0 + - r-callr=3.7.0=r42h6115d3f_0 + - r-cli=3.6.0=r42h38f115c_0 + - r-climdex.pcic=1.1_11=r42h7525677_1 + - r-climprojdiags=0.3.0=r42hc72bb7e_0 + - r-clock=0.6.1=r42h7525677_1 + - r-codetools=0.2_19=r42hc72bb7e_0 + - r-colorspace=2.1_0=r42h133d619_0 + - r-configr=0.3.5=r42hc72bb7e_0 + - r-cpp11=0.4.3=r42hc72bb7e_0 + - r-crayon=1.5.2=r42hc72bb7e_1 + - r-desc=1.4.1=r42h6115d3f_0 + - r-diffobj=0.3.5=r42h76d94ec_0 + - r-digest=0.6.31=r42h38f115c_0 + - r-doparallel=1.0.17=r42hc72bb7e_1 + - r-dotcall64=1.0_2=r42hac0b197_1 + - r-easyncdf=0.1.1=r42hc72bb7e_1 + - r-easyverification=0.4.4=r42h7525677_2 + - r-ellipsis=0.3.2=r42h06615bd_1 + - r-evaluate=0.15=r42h6115d3f_0 + - r-fansi=1.0.4=r42h133d619_0 + - r-farver=2.1.1=r42h7525677_1 + - r-fields=14.1=r42hac0b197_1 + - r-foreach=1.5.2=r42hc72bb7e_1 + - r-future=1.32.0=r42hc72bb7e_0 + - r-generics=0.1.2=r42h142f84f_0 + - r-geomap=2.5_0=r42h06615bd_1 + - r-geomapdata=2.0_0=r42hc72bb7e_1 + - r-ggplot2=3.4.1=r42hc72bb7e_0 + - r-globals=0.16.2=r42hc72bb7e_0 + - r-glue=1.6.2=r42h06615bd_1 + - r-gribr=1.2.4=r42h9ecb321_2 + - r-gridextra=2.3=r42hc72bb7e_1004 + - r-gtable=0.3.3=r42hc72bb7e_0 + - r-ini=0.3.1=r42hc72bb7e_1004 + - r-isoband=0.2.7=r42h38f115c_1 + - r-iterators=1.0.14=r42hc72bb7e_1 + - r-jsonlite=1.8.0=r42h76d94ec_0 + - r-labeling=0.4.2=r42hc72bb7e_2 + - r-lattice=0.20_45=r42h06615bd_1 + - r-lifecycle=1.0.3=r42hc72bb7e_1 + - r-listenv=0.9.0=r42hc72bb7e_0 + - r-lobstr=1.1.2=r42h38f115c_2 + - r-log4r=0.4.3=r42h06615bd_0 + - r-lubridate=1.8.0=r42h884c59f_0 + - r-magrittr=2.0.3=r42h06615bd_1 + - r-mapproj=1.2.11=r42h133d619_0 + - r-maps=3.4.1=r42h06615bd_1 + - r-mass=7.3_58.3=r42h133d619_0 + - r-matrix=1.5_3=r42h5f7b363_0 + - r-mba=0.1_0=r42h7525677_0 + - r-mgcv=1.8_42=r42he1ae0d6_0 + - r-multiapply=2.1.3=r42hc72bb7e_1 + - r-munsell=0.5.0=r42hc72bb7e_1005 + - r-nbclust=3.0.1=r42hc72bb7e_1 + - r-ncdf4=1.21=r42h93dc0a4_1 + - r-nlme=3.1_162=r42hac0b197_0 + - r-parallelly=1.34.0=r42hc72bb7e_0 + - r-pbapply=1.7_0=r42hc72bb7e_0 + - r-pcict=0.5_4.4=r42h133d619_0 + - r-pillar=1.8.1=r42hc72bb7e_1 + - r-pkgconfig=2.0.3=r42hc72bb7e_2 + - r-pkgload=1.2.4=r42h142f84f_0 + - r-plyr=1.8.8=r42h7525677_0 + - r-praise=1.0.0=r42h6115d3f_4 + - r-prettyunits=1.1.1=r42hc72bb7e_2 + - r-processx=3.5.3=r42h76d94ec_0 + - r-proj4=1.0_12=r42h66e2efa_1 + - r-pryr=0.1.6=r42h38f115c_0 + - r-ps=1.7.0=r42h76d94ec_0 + - r-r6=2.5.1=r42hc72bb7e_1 + - r-rcolorbrewer=1.1_3=r42h785f33e_1 + - r-rcpp=1.0.10=r42h38f115c_0 + - r-rcpparmadillo=0.11.4.4.0=r42h358215d_0 + - r-rcpptoml=0.1.7=r42h7525677_2 + - r-rematch2=2.1.2=r42h142f84f_0 + - r-rlang=1.1.0=r42h38f115c_0 + - r-rpmg=2.2_3=r42hc72bb7e_2 + - r-rprojroot=2.0.3=r42h6115d3f_0 + - r-rstudioapi=0.13=r42h6115d3f_0 + - r-s2dv=1.4.0=r42hc72bb7e_0 + - r-s2dverification=2.10.3=r42hc72bb7e_1 + - r-scales=1.2.1=r42hc72bb7e_1 + - r-sp=1.6_0=r42h133d619_0 + - r-spam=2.9_1=r42hb20cf53_1 + - r-specsverification=0.5_3=r42h7525677_2 + - r-splancs=2.01_43=r42h8da6f51_1 + - r-startr=2.2.1=r42hc72bb7e_0 + - r-stringi=1.7.12=r42h1ae9187_0 + - r-stringr=1.5.0=r42h785f33e_0 + - r-testthat=3.1.4=r42h884c59f_0 + - r-tibble=3.2.1=r42h133d619_1 + - r-tzdb=0.3.0=r42h7525677_1 + - r-utf8=1.2.3=r42h133d619_0 + - r-uuid=1.1_0=r42h06615bd_1 + - r-vctrs=0.6.0=r42h38f115c_0 + - r-viridis=0.6.2=r42hc72bb7e_1 + - r-viridislite=0.4.1=r42hc72bb7e_1 + - r-waldo=0.4.0=r42h6115d3f_0 + - r-withr=2.5.0=r42hc72bb7e_1 + - r-yaml=2.3.7=r42h133d619_0 + - readline=8.1.2=h0f457ee_0 + - requests=2.28.2=pyhd8ed1ab_0 + - ruamel_yaml=0.15.80=py37h540881e_1007 + - scipy=1.7.3=py37hf2a6cf1_0 + - sed=4.8=he412f7d_0 + - simplejson=3.17.6=py37h540881e_1 + - sip=6.7.2=py37hd23a5d3_0 + - six=1.16.0=pyh6c4a22f_0 + - sqlite=3.40.0=h4ff8645_0 + - sysroot_linux-64=2.12=he073ed8_15 + - tk=8.6.12=h27826a3_0 + - tktable=2.10=hb7b940f_3 + - toml=0.10.2=pyhd8ed1ab_0 + - tomli=2.0.1=pyhd8ed1ab_0 + - toolz=0.12.0=pyhd8ed1ab_0 + - tornado=6.2=py37h540881e_0 + - tqdm=4.65.0=pyhd8ed1ab_1 + - typing-extensions=4.5.0=hd8ed1ab_0 + - typing_extensions=4.5.0=pyha770c72_0 + - udunits2=2.2.28=hc3e0081_0 + - unicodedata2=14.0.0=py37h540881e_1 + - urllib3=1.26.15=pyhd8ed1ab_0 + - wheel=0.40.0=pyhd8ed1ab_0 + - xcb-util=0.4.0=h166bdaf_0 + - xcb-util-image=0.4.0=h166bdaf_0 + - xcb-util-keysyms=0.4.0=h166bdaf_0 + - xcb-util-renderutil=0.3.9=h166bdaf_0 + - xcb-util-wm=0.4.1=h166bdaf_0 + - xkeyboard-config=2.38=h0b41bf4_0 + - xorg-fixesproto=5.0=h7f98852_1002 + - xorg-inputproto=2.3.2=h7f98852_1002 + - xorg-kbproto=1.0.7=h7f98852_1002 + - xorg-libice=1.0.10=h7f98852_0 + - xorg-libsm=1.2.3=hd9c2040_1000 + - xorg-libx11=1.8.4=h0b41bf4_0 + - xorg-libxau=1.0.9=h7f98852_0 + - xorg-libxdmcp=1.1.3=h7f98852_0 + - xorg-libxext=1.3.4=h0b41bf4_2 + - xorg-libxfixes=5.0.3=h7f98852_1004 + - xorg-libxi=1.7.10=h7f98852_0 + - xorg-libxrender=0.9.10=h7f98852_1003 + - xorg-libxt=1.2.1=h7f98852_2 + - xorg-renderproto=0.11.1=h7f98852_1002 + - xorg-xextproto=7.3.0=h0b41bf4_1003 + - xorg-xproto=7.0.31=h7f98852_1007 + - xz=5.2.6=h166bdaf_0 + - yaml=0.2.5=h7f98852_2 + - zlib=1.2.13=h166bdaf_4 + - zstd=1.5.2=h3eb15da_6 + - pip: + - argparse==1.4.0 + - attrs==22.2.0 + - autosubmit==4.0.73 + - autosubmitconfigparser==1.0.21 + - bcrypt==4.0.1 + - bscearth-utils==0.5.2 + - charset-normalizer==3.1.0 + - configobj==5.0.8 + - coverage==7.2.2 + - cryptography==39.0.2 + - exceptiongroup==1.1.1 + - importlib-metadata==6.1.0 + - iniconfig==2.0.0 + - networkx==2.6.3 + - pluggy==1.0.0 + - portalocker==2.7.0 + - py3dotplus==1.1.0 + - pygments==2.14.0 + - pytest==7.2.2 + - pythondialog==3.5.3 + - ruamel-yaml==0.17.21 + - ruamel-yaml-clib==0.2.7 + - setuptools==67.6.0 + - xlib==0.21 + - zipp==3.15.0 +prefix: /esarchive/scratch/pbretonn/conda-cerise/conda/envs/condaCerise diff --git a/conda_installation/load_cerise.bash b/conda_installation/load_cerise.bash new file mode 100755 index 00000000..2247baf4 --- /dev/null +++ b/conda_installation/load_cerise.bash @@ -0,0 +1,11 @@ +#!/bin/bash + +prefix=$1 + +if [[ -z $prefix ]]; then + conda env create --file environment-cerise.yml +else + conda env create --file environment-cerise.yml --prefix $prefix +fi +conda activate condaCerise +R -e "options(timeout = 600) ; install.packages('CSTools', repos='https://ftp.cixug.es/CRAN/')" -- GitLab From 866f71e8c6c09fe7a161250e5ef8729cfa98be0e Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Tue, 28 Mar 2023 11:42:13 +0200 Subject: [PATCH 101/388] Modify verification CERISE script to load conda env --- autosubmit/auto-verification-CERISE.sh | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/autosubmit/auto-verification-CERISE.sh b/autosubmit/auto-verification-CERISE.sh index e21bef2d..caf2dd0e 100644 --- a/autosubmit/auto-verification-CERISE.sh +++ b/autosubmit/auto-verification-CERISE.sh @@ -7,13 +7,16 @@ script=%common.SCRIPT% CHUNK=%CHUNK% ############################### -## TODO: How to define the script cd $proj_dir -# script=modules/test_parallel_workflow.R atomic_recipe_number=$(printf "%02d" $CHUNK) atomic_recipe=${outdir}/logs/recipes/atomic_recipe_${atomic_recipe_number}.yml -source MODULES +## Workaround to avoid bug in conda activate/source activate when running +## inside bash script +set +eu +source /gpfs/projects/bsc32/software/suselinux/11/software/Miniconda3/4.7.10/etc/profile.d/conda.sh +conda activate /esarchive/scratch/vagudets/conda-cerise/conda/envs +set -eu Rscript ${script} ${atomic_recipe} -- GitLab From d397a625cd841bdc991802fcd2ec699e8a710a15 Mon Sep 17 00:00:00 2001 From: eduzenli Date: Wed, 29 Mar 2023 10:47:38 +0200 Subject: [PATCH 102/388] hurs variable can be downloaded from ECMWF-SEAS5 and CERRA archives --- conf/archive.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/conf/archive.yml b/conf/archive.yml index 6da69a65..87e9cd65 100644 --- a/conf/archive.yml +++ b/conf/archive.yml @@ -16,7 +16,7 @@ archive: "tasmin":"_f24h/", "tasmax":"_f24h/", "ta300":"_f12h/", "ta500":"_f12h/", "ta850":"_f12h/", "g300":"_f12h/", "g500":"_f12h/", "g850":"_f12h/", - "tdps":"_f6h/"} + "tdps":"_f6h/","hurs":"_f6h/"} nmember: fcst: 51 hcst: 25 @@ -183,10 +183,10 @@ archive: name: "ECMWF CERRA" institution: "European Centre for Medium-Range Weather Forecasts" src: "recon/ecmwf/cerra/" - daily_mean: {"hur":"_f3h-r2631x1113/", "ps":"_f3h-r2631x1113/", "sfcWind":"_f3h-r2631x1113/", + daily_mean: {"hurs":"_f3h-r2631x1113/", "ps":"_f3h-r2631x1113/", "sfcWind":"_f3h-r2631x1113/", "tas":"_f3h-r2631x1113/", "winddir":"_f3h-r2631x1113/"} - monthly_mean: {"hur":"_f3h-r2631x1113/", "ps":"_f3h-r2631x1113/", "sfcWind":"_f3h-r2631x1113/", - "tas":"_f3h-r2631x1113/", "winddir":"_f3h-r2631x1113/","tasmin":"_f24h-r2631x1113/","tasmax":"_f24h-r2631x1113/","hurs":"_f3h-r2631x1113/"} + monthly_mean: {"hurs":"_f3h-r2631x1113/", "ps":"_f3h-r2631x1113/", "sfcWind":"_f3h-r2631x1113/", + "tas":"_f3h-r2631x1113/", "winddir":"_f3h-r2631x1113/","tasmin":"_f24h-r2631x1113/","tasmax":"_f24h-r2631x1113/"} calendar: "proleptic_gregorian" reference_grid: "/esarchive/recon/ecmwf/cerra/monthly_mean/tas_f3h-r2631x1113/tas_200506.nc" CERRA-Land: -- GitLab From d9e375951752144fd4b802b5dc6d9e7745b4941e Mon Sep 17 00:00:00 2001 From: aho Date: Wed, 29 Mar 2023 15:26:50 +0200 Subject: [PATCH 103/388] Change saving module test to neglect the file order --- tests/testthat/test-decadal_monthly_1.R | 10 ++++++---- tests/testthat/test-decadal_monthly_2.R | 9 ++++++--- tests/testthat/test-seasonal_monthly.R | 10 ++++++---- 3 files changed, 18 insertions(+), 11 deletions(-) diff --git a/tests/testthat/test-decadal_monthly_1.R b/tests/testthat/test-decadal_monthly_1.R index b76a216c..1c0c418f 100644 --- a/tests/testthat/test-decadal_monthly_1.R +++ b/tests/testthat/test-decadal_monthly_1.R @@ -258,11 +258,12 @@ tolerance = 0.0001 test_that("4. Saving", { expect_equal( -list.files(outdir), +all(list.files(outdir) %in% c("plots", "tas_19911101.nc", "tas_19921101.nc", "tas_19931101.nc", "tas_19941101.nc", "tas_20211101.nc", "tas-obs_19911101.nc", "tas-obs_19921101.nc", "tas-obs_19931101.nc", "tas-obs_19941101.nc", "tas-percentiles_month11.nc", "tas-probs_19911101.nc", "tas-probs_19921101.nc", - "tas-probs_19931101.nc", "tas-probs_19941101.nc", "tas-probs_20211101.nc", "tas-skill_month11.nc") + "tas-probs_19931101.nc", "tas-probs_19941101.nc", "tas-probs_20211101.nc", "tas-skill_month11.nc")), +TRUE ) # open the files and check values/attributes? #expect_equal( @@ -274,9 +275,10 @@ c("plots", "tas_19911101.nc", "tas_19921101.nc", "tas_19931101.nc", "tas_1994110 test_that("5. Visualization", { expect_equal( -list.files(paste0(outdir, "/plots/")), +all(list.files(paste0(outdir, "/plots/")) %in% c("forecast_ensemble_mean.png", "forecast_most_likely_tercile.png", - "rpss.png") + "rpss.png")), +TRUE ) }) diff --git a/tests/testthat/test-decadal_monthly_2.R b/tests/testthat/test-decadal_monthly_2.R index cdab57f3..f4a60b1e 100644 --- a/tests/testthat/test-decadal_monthly_2.R +++ b/tests/testthat/test-decadal_monthly_2.R @@ -252,11 +252,12 @@ tolerance = 0.0001 test_that("4. Saving", { expect_equal( -list.files(outdir), +all(list.files(outdir) %in% c("plots", "tas_19901101.nc", "tas_19911101.nc", "tas_19921101.nc", "tas_20201101.nc", "tas_20211101.nc", "tas-obs_19901101.nc", "tas-obs_19911101.nc", "tas-obs_19921101.nc", "tas-percentiles_month11.nc", "tas-probs_19901101.nc", "tas-probs_19911101.nc", - "tas-probs_19921101.nc", "tas-probs_20201101.nc", "tas-probs_20211101.nc", "tas-skill_month11.nc") + "tas-probs_19921101.nc", "tas-probs_20201101.nc", "tas-probs_20211101.nc", "tas-skill_month11.nc")), +TRUE ) }) @@ -264,8 +265,10 @@ c("plots", "tas_19901101.nc", "tas_19911101.nc", "tas_19921101.nc", "tas_2020110 test_that("5. Visualization", { expect_equal( -list.files(paste0(outdir, "/plots/")), +all(list.files(paste0(outdir, "/plots/")) %in% c("bss10_specs.png", "enscorr_specs.png", "forecast_ensemble_mean_2020.png", "forecast_ensemble_mean_2021.png", "forecast_most_likely_tercile_2020.png", "forecast_most_likely_tercile_2021.png", "frps_specs.png", "frps.png", "rpss_specs.png") +), +TRUE ) }) diff --git a/tests/testthat/test-seasonal_monthly.R b/tests/testthat/test-seasonal_monthly.R index de03bf73..569ea4dd 100644 --- a/tests/testthat/test-seasonal_monthly.R +++ b/tests/testthat/test-seasonal_monthly.R @@ -214,22 +214,24 @@ rep(FALSE, 3) test_that("4. Saving", { expect_equal( -list.files(outdir), +all(list.files(outdir) %in% c("plots", "tas_19931101.nc", "tas_19941101.nc", "tas_19951101.nc", "tas_19961101.nc", "tas_20201101.nc", "tas-corr_month11.nc", "tas-obs_19931101.nc", "tas-obs_19941101.nc", "tas-obs_19951101.nc", "tas-obs_19961101.nc", "tas-percentiles_month11.nc", "tas-probs_19931101.nc", "tas-probs_19941101.nc", "tas-probs_19951101.nc", "tas-probs_19961101.nc", - "tas-probs_20201101.nc", "tas-skill_month11.nc") + "tas-probs_20201101.nc", "tas-skill_month11.nc")), +TRUE ) }) test_that("5. Visualization", { expect_equal( -list.files(paste0(outdir, "/plots/")), +all(list.files(paste0(outdir, "/plots/")) %in% c("crpss.png", "enscorr_specs.png", "enscorr.png", "forecast_ensemble_mean.png", - "forecast_most_likely_tercile.png", "rpss.png") + "forecast_most_likely_tercile.png", "rpss.png")), +TRUE ) }) -- GitLab From c869a3b3f7e597344263aef62eb9202a47aedeef Mon Sep 17 00:00:00 2001 From: aho Date: Wed, 29 Mar 2023 15:36:26 +0200 Subject: [PATCH 104/388] add extra check for file amount --- tests/testthat/test-decadal_monthly_1.R | 8 ++++++++ tests/testthat/test-decadal_monthly_2.R | 9 +++++++++ tests/testthat/test-seasonal_monthly.R | 8 ++++++++ 3 files changed, 25 insertions(+) diff --git a/tests/testthat/test-decadal_monthly_1.R b/tests/testthat/test-decadal_monthly_1.R index 1c0c418f..10684298 100644 --- a/tests/testthat/test-decadal_monthly_1.R +++ b/tests/testthat/test-decadal_monthly_1.R @@ -269,6 +269,10 @@ TRUE #expect_equal( #) +expect_equal( +length(list.files(outdir)), +17 +) }) @@ -280,6 +284,10 @@ c("forecast_ensemble_mean.png", "forecast_most_likely_tercile.png", "rpss.png")), TRUE ) +expect_equal( +length(list.files(paste0(outdir, "/plots/"))), +3 +) }) diff --git a/tests/testthat/test-decadal_monthly_2.R b/tests/testthat/test-decadal_monthly_2.R index f4a60b1e..d981a6de 100644 --- a/tests/testthat/test-decadal_monthly_2.R +++ b/tests/testthat/test-decadal_monthly_2.R @@ -259,6 +259,11 @@ c("plots", "tas_19901101.nc", "tas_19911101.nc", "tas_19921101.nc", "tas_2020110 "tas-probs_19921101.nc", "tas-probs_20201101.nc", "tas-probs_20211101.nc", "tas-skill_month11.nc")), TRUE ) +expect_equal( +length(list.files(outdir)), +16 +) + }) #====================================== @@ -270,6 +275,10 @@ c("bss10_specs.png", "enscorr_specs.png", "forecast_ensemble_mean_2020.png", "fo ), TRUE ) +expect_equal( +length(list.files(paste0(outdir, "/plots/"))), +9 +) }) diff --git a/tests/testthat/test-seasonal_monthly.R b/tests/testthat/test-seasonal_monthly.R index 569ea4dd..06ec3730 100644 --- a/tests/testthat/test-seasonal_monthly.R +++ b/tests/testthat/test-seasonal_monthly.R @@ -223,6 +223,10 @@ c("plots", "tas_19931101.nc", "tas_19941101.nc", "tas_19951101.nc", "tas-probs_20201101.nc", "tas-skill_month11.nc")), TRUE ) +expect_equal( +length(list.files(outdir)), +18 +) }) @@ -233,6 +237,10 @@ c("crpss.png", "enscorr_specs.png", "enscorr.png", "forecast_ensemble_mean.png", "forecast_most_likely_tercile.png", "rpss.png")), TRUE ) +expect_equal( +length(list.files(paste0(outdir, "/plots/"))), +6 +) }) -- GitLab From c7ef402670562ba1717f49315a317f6bc99b0a85 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Thu, 30 Mar 2023 08:44:52 +0200 Subject: [PATCH 105/388] Save Anomalies --- modules/Anomalies/Anomalies.R | 16 +++++++++++++--- modules/Saving/paths2save.R | 2 ++ modules/test_seasonal.R | 2 +- recipes/atomic_recipes/recipe_system7c3s-tas.yml | 4 ++++ 4 files changed, 20 insertions(+), 4 deletions(-) diff --git a/modules/Anomalies/Anomalies.R b/modules/Anomalies/Anomalies.R index 859e97bb..b54188d1 100644 --- a/modules/Anomalies/Anomalies.R +++ b/modules/Anomalies/Anomalies.R @@ -82,7 +82,19 @@ compute_anomalies <- function(recipe, data) { "$hcst.full_val and $obs.full_val.")) info(recipe$Run$logger, "##### ANOMALIES COMPUTED SUCCESSFULLY #####") - + recipe$Run$output_dir <- paste0(recipe$Run$output_dir, + "/outputs/Anomalies/") + if (recipe$Analysis$Workflow$Anomalies$save_outputs %in% + c('all', 'exp_only', 'fcst_only')) { + save_forecast(recipe = recipe, data_cube = data$fcst, type = 'fcst') + } + if (recipe$Analysis$Workflow$Anomalies$save_outputs %in% + c('all', 'exp_only')) { + save_forecast(recipe = recipe, data_cube = data$hcst, type = 'hcst') + } + if (recipe$Analysis$Workflow$Anomalies$save_outputs == 'all') { + save_observations(recipe = recipe, data_cube = data$obs) + } } else { warn(recipe$Run$logger, paste("The Anomalies module has been called, but", "recipe parameter Analysis:Variables:anomaly is set to FALSE.", @@ -92,8 +104,6 @@ compute_anomalies <- function(recipe, data) { info(recipe$Run$logger, "##### ANOMALIES NOT COMPUTED #####") } - ## TODO: Return fcst full value? - return(list(hcst = data$hcst, obs = data$obs, fcst = data$fcst, hcst.full_val = hcst_fullvalue, obs.full_val = obs_fullvalue)) diff --git a/modules/Saving/paths2save.R b/modules/Saving/paths2save.R index 93196b86..46152207 100644 --- a/modules/Saving/paths2save.R +++ b/modules/Saving/paths2save.R @@ -104,5 +104,7 @@ get_dir <- function(recipe, agg = "global") { "-", store.freq, "/", variable, "/", fcst.sdate, "/")}) } + ## TODO: Multivar case + dir.create(dir, showWarnings = FALSE, recursive = TRUE) return(dir) } diff --git a/modules/test_seasonal.R b/modules/test_seasonal.R index cddc1b37..4dd34b61 100644 --- a/modules/test_seasonal.R +++ b/modules/test_seasonal.R @@ -5,7 +5,7 @@ source("modules/Skill/Skill.R") source("modules/Saving/Saving.R") source("modules/Visualization/Visualization.R") -recipe_file <- "recipes/tests/recipe_seasonal_two-variables.yml" +recipe_file <- "recipes/atomic_recipes/recipe_system7c3s-tas.yml" recipe <- prepare_outputs(recipe_file) # Load datasets diff --git a/recipes/atomic_recipes/recipe_system7c3s-tas.yml b/recipes/atomic_recipes/recipe_system7c3s-tas.yml index 47cfc31b..e4e0a087 100644 --- a/recipes/atomic_recipes/recipe_system7c3s-tas.yml +++ b/recipes/atomic_recipes/recipe_system7c3s-tas.yml @@ -31,12 +31,16 @@ Analysis: Anomalies: compute: yes # yes/no, default yes cross_validation: yes # yes/no, default yes + save_outputs: 'all' # 'all'/'none'/'exp_only'/'fcst_only' Calibration: method: mse_min + save_outputs: 'none' # 'all'/'none'/'exp_only'/'fcst_only' Skill: metric: RPS RPSS CRPS CRPSS FRPSS BSS10 BSS90 EnsCorr Corr mean_bias mean_bias_SS + save_outputs: 'all' # 'all'/'none'/list of metrics Probabilities: percentiles: [[1/3, 2/3], [1/10, 9/10], [1/4, 2/4, 3/4]] + save_outputs: 'percentiles_only' # 'all'/'none'/'bins_only'/'percentiles_only' Indicators: index: no ncores: 10 -- GitLab From 69cbb5868305fd77a4b17044494593d0e2bd93fd Mon Sep 17 00:00:00 2001 From: aho Date: Thu, 30 Mar 2023 09:11:27 +0200 Subject: [PATCH 106/388] Adapt to new as.s2dv_cube() --- modules/Anomalies/Anomalies.R | 22 +++---- modules/Loading/Loading.R | 10 ++-- modules/Loading/Loading_decadal.R | 9 +-- modules/Saving/Saving.R | 80 ++++++++++++------------- modules/Visualization/Visualization.R | 51 ++++++++-------- tests/testthat/test-decadal_daily_1.R | 14 ++--- tests/testthat/test-decadal_monthly_1.R | 12 ++-- tests/testthat/test-decadal_monthly_2.R | 12 ++-- tests/testthat/test-decadal_monthly_3.R | 12 ++-- tests/testthat/test-seasonal_daily.R | 12 ++-- tests/testthat/test-seasonal_monthly.R | 12 ++-- tools/data_summary.R | 9 ++- 12 files changed, 126 insertions(+), 129 deletions(-) diff --git a/modules/Anomalies/Anomalies.R b/modules/Anomalies/Anomalies.R index 859e97bb..06f955a8 100644 --- a/modules/Anomalies/Anomalies.R +++ b/modules/Anomalies/Anomalies.R @@ -45,13 +45,14 @@ compute_anomalies <- function(recipe, data) { data$obs <- anom$obs remove(anom) # Change variable metadata - # data$hcst$Variable$varName <- paste0(data$hcst$Variable$varName, "anomaly") - attr(data$hcst$Variable, "variable")$long_name <- - paste(attr(data$hcst$Variable, "variable")$long_name, "anomaly") - # data$obs$Variable$varName <- paste0(data$obs$Variable$varName, "anomaly") - attr(data$obs$Variable, "variable")$long_name <- - paste(attr(data$obs$Variable, "variable")$long_name, "anomaly") - + for (var in data$hcst$attrs$Variable$varName) { + # Change hcst longname + data$hcst$attrs$Variable$variables[[var]]$long_name <- + paste(data$hcst$attrs$Variable$variables[[var]]$long_name, "anomaly") + # Change obs longname + data$obs$attrs$Variable$variables[[var]]$long_name <- + paste(data$obs$attrs$Variable$variables[[var]]$long_name, "anomaly") + } # Compute forecast anomaly field if (!is.null(data$fcst)) { # Compute hindcast climatology ensemble mean @@ -71,9 +72,10 @@ compute_anomalies <- function(recipe, data) { # Get fcst anomalies data$fcst$data <- data$fcst$data - clim_hcst # Change metadata - # data$fcst$Variable$varName <- paste0(data$fcst$Variable$varName, "anomaly") - attr(data$fcst$Variable, "variable")$long_name <- - paste(attr(data$fcst$Variable, "variable")$long_name, "anomaly") + for (var in data$fcst$attrs$Variable$varName) { + data$fcst$attrs$Variable$variables[[var]]$long_name <- + paste(data$fcst$attrs$Variable$variables[[var]]$long_name, "anomaly") + } } info(recipe$Run$logger, diff --git a/modules/Loading/Loading.R b/modules/Loading/Loading.R index e5dafd0d..d78b2749 100644 --- a/modules/Loading/Loading.R +++ b/modules/Loading/Loading.R @@ -139,12 +139,12 @@ load_datasets <- function(recipe) { } # Convert hcst to s2dv_cube object - ## TODO: Give correct dimensions to $Dates$start + ## TODO: Give correct dimensions to $Dates ## (sday, sweek, syear instead of file_date) hcst <- as.s2dv_cube(hcst) # Adjust dates for models where the time stamp goes into the next month if (recipe$Analysis$Variables$freq == "monthly_mean") { - hcst$Dates$start[] <- hcst$Dates$start - seconds(exp_descrip$time_stamp_lag) + hcst$attrs$Dates[] <- hcst$attrs$Dates - seconds(exp_descrip$time_stamp_lag) } # Load forecast @@ -198,8 +198,8 @@ load_datasets <- function(recipe) { fcst <- as.s2dv_cube(fcst) # Adjust dates for models where the time stamp goes into the next month if (recipe$Analysis$Variables$freq == "monthly_mean") { - fcst$Dates$start[] <- - fcst$Dates$start - seconds(exp_descrip$time_stamp_lag) + fcst$attrs$Dates[] <- + fcst$attrs$Dates - seconds(exp_descrip$time_stamp_lag) } } else { @@ -211,7 +211,7 @@ load_datasets <- function(recipe) { # Obtain dates and date dimensions from the loaded hcst data to make sure # the corresponding observations are loaded correctly. - dates <- hcst$Dates$start + dates <- hcst$attrs$Dates dim(dates) <- dim(Subset(hcst$data, along=c('dat', 'var', 'latitude', 'longitude', 'ensemble'), diff --git a/modules/Loading/Loading_decadal.R b/modules/Loading/Loading_decadal.R index e3677e1d..4258fd18 100644 --- a/modules/Loading/Loading_decadal.R +++ b/modules/Loading/Loading_decadal.R @@ -11,8 +11,6 @@ source("modules/Loading/helper_loading_decadal.R") source("modules/Loading/dates2load.R") source("modules/Loading/check_latlon.R") source("tools/libs.R") -## TODO: Remove once the fun is included in CSTools -source("tools/tmp/as.s2dv_cube.R") #==================================================================== @@ -275,7 +273,7 @@ load_datasets <- function(recipe) { # Get from startR_cube # dates <- attr(hcst, 'Variables')$common$time # Get from s2dv_cube - dates <- hcst$Dates$start + dates <- hcst$attrs$Dates dates_file <- sapply(dates, format, '%Y%m') dim(dates_file) <- dim(dates) @@ -358,7 +356,6 @@ load_datasets <- function(recipe) { obs <- as.s2dv_cube(obs) ) - #------------------------------------------- # Step 4. Verify the consistance between data #------------------------------------------- @@ -378,8 +375,8 @@ load_datasets <- function(recipe) { } # time attribute - if (!identical(format(hcst$Dates$start, '%Y%m'), - format(obs$Dates$start, '%Y%m'))) { + if (!identical(format(hcst$attrs$Dates, '%Y%m'), + format(obs$attrs$Dates, '%Y%m'))) { error(recipe$Run$logger, "hcst and obs don't share the same time.") stop() diff --git a/modules/Saving/Saving.R b/modules/Saving/Saving.R index f481be70..9d190ed8 100644 --- a/modules/Saving/Saving.R +++ b/modules/Saving/Saving.R @@ -172,8 +172,8 @@ save_forecast <- function(data_cube, lalo <- c('longitude', 'latitude') - variable <- data_cube$Variable$varName - var.longname <- attr(data_cube$Variable, 'variable')$long_name + variable <- data_cube$attrs$Variable$varName + var.longname <- data_cube$attrs$Variable$metadata[[variable]]$long_name global_attributes <- get_global_attributes(recipe, archive) fcst.horizon <- tolower(recipe$Analysis$Horizon) store.freq <- recipe$Analysis$Variables$freq @@ -186,7 +186,7 @@ save_forecast <- function(data_cube, # } # Generate vector containing leadtimes - dates <- as.PCICt(ClimProjDiags::Subset(data_cube$Dates$start, 'syear', 1), + dates <- as.PCICt(ClimProjDiags::Subset(data_cube$attrs$Dates, 'syear', 1), cal = calendar) if (fcst.horizon == 'decadal') { ## Method 1: Use the first date as init_date. But it may be better to use @@ -220,7 +220,7 @@ save_forecast <- function(data_cube, syears <- seq(1:dim(data_cube$data)['syear'][[1]]) # expect dim = [sday = 1, sweek = 1, syear, time] - syears_val <- lubridate::year(data_cube$Dates$start[1, 1, , 1]) + syears_val <- lubridate::year(data_cube$attrs$Dates[1, 1, , 1]) for (i in syears) { # Select year from array and rearrange dimensions fcst <- ClimProjDiags::Subset(data_cube$data, 'syear', i, drop = T) @@ -245,7 +245,7 @@ save_forecast <- function(data_cube, dims <- c(lalo, 'ensemble', 'time') var.expname <- variable var.sdname <- var.sdname - var.units <- attr(data_cube$Variable, 'variable')$units + var.units <- data_cube$attrs$Variable$metadata[[variable]]$units } metadata <- list(fcst = list(name = var.expname, @@ -269,7 +269,7 @@ save_forecast <- function(data_cube, fcst.sdate <- format(fcst.sdate, '%Y%m%d') } else { - fcst.sdate <- data_cube$load_parameters$dat1$file_date[[1]][i] + fcst.sdate <- data_cube$attrs$load_parameters$dat1$file_date[[1]][i] } # Get time dimension values and metadata @@ -277,7 +277,7 @@ save_forecast <- function(data_cube, time <- times$time # Generate name of output file - outfile <- get_filename(outdir, recipe, data_cube$Variable$varName, + outfile <- get_filename(outdir, recipe, data_cube$attrs$Variable$varName, fcst.sdate, agg, "exp") # Get grid data and metadata and export to netCDF @@ -285,8 +285,8 @@ save_forecast <- function(data_cube, country <- get_countries(grid) ArrayToNc(append(country, time, fcst), outfile) } else { - latitude <- data_cube$lat[1:length(data_cube$lat)] - longitude <- data_cube$lon[1:length(data_cube$lon)] + latitude <- data_cube$coords$lat[1:length(data_cube$coords$lat)] + longitude <- data_cube$coords$lon[1:length(data_cube$coords$lon)] latlon <- get_latlon(latitude, longitude) # Compile variables into a list and export to netCDF vars <- list(latlon$lat, latlon$lon, time) @@ -314,8 +314,8 @@ save_observations <- function(data_cube, lalo <- c('longitude', 'latitude') - variable <- data_cube$Variable$varName - var.longname <- attr(data_cube$Variable, 'variable')$long_name + variable <- data_cube$attrs$Variable$varName + var.longname <- data_cube$attrs$Variable$metadata[[variable]]$long_name global_attributes <- get_global_attributes(recipe, archive) fcst.horizon <- tolower(recipe$Analysis$Horizon) store.freq <- recipe$Analysis$Variables$freq @@ -323,7 +323,7 @@ save_observations <- function(data_cube, # Generate vector containing leadtimes ## TODO: Move to a separate function? - dates <- as.PCICt(ClimProjDiags::Subset(data_cube$Dates$start, 'syear', 1), + dates <- as.PCICt(ClimProjDiags::Subset(data_cube$attrs$Dates, 'syear', 1), cal = calendar) if (fcst.horizon == 'decadal') { ## Method 1: Use the first date as init_date. But it may be better to use @@ -345,7 +345,7 @@ save_observations <- function(data_cube, syears <- seq(1:dim(data_cube$data)['syear'][[1]]) ## expect dim = [sday = 1, sweek = 1, syear, time] - syears_val <- lubridate::year(data_cube$Dates$start[1, 1, , 1]) + syears_val <- lubridate::year(data_cube$attrs$Dates[1, 1, , 1]) for (i in syears) { # Select year from array and rearrange dimensions fcst <- ClimProjDiags::Subset(data_cube$data, 'syear', i, drop = T) @@ -365,11 +365,11 @@ save_observations <- function(data_cube, dims <- c('Country', 'time') var.expname <- paste0(variable, '_country') var.longname <- paste0("Country-Aggregated ", var.longname) - var.units <- attr(data_cube$Variable, 'variable')$units + var.units <- data_cube$attrs$Variable$metadata[[variable]]$units } else { dims <- c(lalo, 'time') var.expname <- variable - var.units <- attr(data_cube$Variable, 'variable')$units + var.units <- data_cube$attrs$Variable$metadata[[variable]]$units } metadata <- list(fcst = list(name = var.expname, @@ -393,10 +393,10 @@ save_observations <- function(data_cube, } else { if (store.freq == "monthly_mean") { - fcst.sdate <- data_cube$load_parameters$dat1$file_date[[1]][i] + fcst.sdate <- data_cube$attrs$load_parameters$dat1$file_date[[1]][i] fcst.sdate <- as.Date(paste0(fcst.sdate, "01"), '%Y%m%d') } else { - fcst.sdate <- as.Date(data_cube$Dates$start[i]) + fcst.sdate <- as.Date(data_cube$attrs$Dates[i]) } } @@ -414,7 +414,7 @@ save_observations <- function(data_cube, time <- times$time # Generate name of output file - outfile <- get_filename(outdir, recipe, data_cube$Variable$varName, + outfile <- get_filename(outdir, recipe, data_cube$attrs$Variable$varName, fcst.sdate, agg, "obs") # Get grid data and metadata and export to netCDF @@ -422,8 +422,8 @@ save_observations <- function(data_cube, country <- get_countries(grid) ArrayToNc(append(country, time, fcst), outfile) } else { - latitude <- data_cube$lat[1:length(data_cube$lat)] - longitude <- data_cube$lon[1:length(data_cube$lon)] + latitude <- data_cube$coords$lat[1:length(data_cube$coords$lat)] + longitude <- data_cube$coords$lon[1:length(data_cube$coords$lon)] latlon <- get_latlon(latitude, longitude) # Compile variables into a list and export to netCDF vars <- list(latlon$lat, latlon$lon, time) @@ -500,7 +500,7 @@ save_metrics <- function(skill, calendar <- archive$System[[global_attributes$system]]$calendar # Generate vector containing leadtimes - dates <- as.PCICt(ClimProjDiags::Subset(data_cube$Dates$start, 'syear', 1), + dates <- as.PCICt(ClimProjDiags::Subset(data_cube$attrs$Dates, 'syear', 1), cal = calendar) if (fcst.horizon == 'decadal') { @@ -540,7 +540,7 @@ save_metrics <- function(skill, time <- times$time # Generate name of output file - outfile <- get_filename(outdir, recipe, data_cube$Variable$varName, + outfile <- get_filename(outdir, recipe, data_cube$attrs$Variable$varName, fcst.sdate, agg, "skill") # Get grid data and metadata and export to netCDF @@ -548,8 +548,8 @@ save_metrics <- function(skill, country <- get_countries(grid) ArrayToNc(append(country, time, skill), outfile) } else { - latitude <- data_cube$lat[1:length(data_cube$lat)] - longitude <- data_cube$lon[1:length(data_cube$lon)] + latitude <- data_cube$coords$lat[1:length(data_cube$coords$lat)] + longitude <- data_cube$coords$lon[1:length(data_cube$coords$lon)] latlon <- get_latlon(latitude, longitude) # Compile variables into a list and export to netCDF vars <- list(latlon$lat, latlon$lon, time) @@ -616,7 +616,7 @@ save_corr <- function(skill, calendar <- archive$System[[global_attributes$system]]$calendar # Generate vector containing leadtimes - dates <- as.PCICt(ClimProjDiags::Subset(data_cube$Dates$start, 'syear', 1), + dates <- as.PCICt(ClimProjDiags::Subset(data_cube$attrs$Dates, 'syear', 1), cal = calendar) if (fcst.horizon == 'decadal') { init_month <- archive$System[[recipe$Analysis$Datasets$System$name]]$initial_month @@ -655,7 +655,7 @@ save_corr <- function(skill, time <- times$time # Generate name of output file - outfile <- get_filename(outdir, recipe, data_cube$Variable$varName, + outfile <- get_filename(outdir, recipe, data_cube$attrs$Variable$varName, fcst.sdate, agg, "corr") # Get grid data and metadata and export to netCDF @@ -663,8 +663,8 @@ save_corr <- function(skill, country <- get_countries(grid) ArrayToNc(append(country, time, skill), outfile) } else { - latitude <- data_cube$lat[1:length(data_cube$lat)] - longitude <- data_cube$lon[1:length(data_cube$lon)] + latitude <- data_cube$coords$lat[1:length(data_cube$coords$lat)] + longitude <- data_cube$coords$lon[1:length(data_cube$coords$lon)] latlon <- get_latlon(latitude, longitude) # Compile variables into a list and export to netCDF vars <- list(latlon$lat, latlon$lon, time) @@ -724,7 +724,7 @@ save_percentiles <- function(percentiles, store.freq <- recipe$Analysis$Variables$freq calendar <- archive$System[[global_attributes$system]]$calendar # Generate vector containing leadtimes - dates <- as.PCICt(ClimProjDiags::Subset(data_cube$Dates$start, 'syear', 1), + dates <- as.PCICt(ClimProjDiags::Subset(data_cube$attrs$Dates, 'syear', 1), cal = calendar) if (fcst.horizon == 'decadal') { init_month <- archive$System[[recipe$Analysis$Datasets$System$name]]$initial_month @@ -763,7 +763,7 @@ save_percentiles <- function(percentiles, time <- times$time # Generate name of output file - outfile <- get_filename(outdir, recipe, data_cube$Variable$varName, + outfile <- get_filename(outdir, recipe, data_cube$attrs$Variable$varName, fcst.sdate, agg, "percentiles") # Get grid data and metadata and export to netCDF @@ -771,8 +771,8 @@ save_percentiles <- function(percentiles, country <- get_countries(grid) ArrayToNc(append(country, time, percentiles), outfile) } else { - latitude <- data_cube$lat[1:length(data_cube$lat)] - longitude <- data_cube$lon[1:length(data_cube$lon)] + latitude <- data_cube$coords$lat[1:length(data_cube$coords$lat)] + longitude <- data_cube$coords$lon[1:length(data_cube$coords$lon)] latlon <- get_latlon(latitude, longitude) # Compile variables into a list and export to netCDF vars <- list(latlon$lat, latlon$lon, time) @@ -801,8 +801,8 @@ save_probabilities <- function(probs, lalo <- c('longitude', 'latitude') - variable <- data_cube$Variable$varName - var.longname <- attr(data_cube$Variable, 'variable')$long_name + variable <- data_cube$attrs$Variable$varName + var.longname <- data_cube$attrs$Variable$metadata[[variable]]$long_name global_attributes <- get_global_attributes(recipe, archive) # Add anomaly computation to global attributes ## TODO: Sort out the logic once default behavior is decided @@ -820,7 +820,7 @@ save_probabilities <- function(probs, # Generate vector containing leadtimes ## TODO: Move to a separate function? - dates <- as.PCICt(ClimProjDiags::Subset(data_cube$Dates$start, 'syear', 1), + dates <- as.PCICt(ClimProjDiags::Subset(data_cube$attrs$Dates, 'syear', 1), cal = calendar) if (fcst.horizon == 'decadal') { init_month <- archive$System[[recipe$Analysis$Datasets$System$name]]$initial_month @@ -838,7 +838,7 @@ save_probabilities <- function(probs, syears <- seq(1:dim(data_cube$data)['syear'][[1]]) ## expect dim = [sday = 1, sweek = 1, syear, time] - syears_val <- lubridate::year(data_cube$Dates$start[1, 1, , 1]) + syears_val <- lubridate::year(data_cube$attrs$Dates[1, 1, , 1]) for (i in syears) { # Select year from array and rearrange dimensions probs_syear <- lapply(probs, ClimProjDiags::Subset, 'syear', i, drop = 'selected') @@ -874,7 +874,7 @@ save_probabilities <- function(probs, fcst.sdate <- init_date + lubridate::years(syears_val[i] - lubridate::year(init_date)) fcst.sdate <- format(fcst.sdate, '%Y%m%d') } else { - fcst.sdate <- data_cube$load_parameters$dat1$file_date[[1]][i] + fcst.sdate <- data_cube$attrs$load_parameters$dat1$file_date[[1]][i] } # Get time dimension values and metadata @@ -882,7 +882,7 @@ save_probabilities <- function(probs, time <- times$time # Generate name of output file - outfile <- get_filename(outdir, recipe, data_cube$Variable$varName, + outfile <- get_filename(outdir, recipe, data_cube$attrs$Variable$varName, fcst.sdate, agg, "probs") # Get grid data and metadata and export to netCDF @@ -890,8 +890,8 @@ save_probabilities <- function(probs, country <- get_countries(grid) ArrayToNc(append(country, time, probs_syear), outfile) } else { - latitude <- data_cube$lat[1:length(data_cube$lat)] - longitude <- data_cube$lon[1:length(data_cube$lon)] + latitude <- data_cube$coords$lat[1:length(data_cube$coords$lat)] + longitude <- data_cube$coords$lon[1:length(data_cube$coords$lon)] latlon <- get_latlon(latitude, longitude) # Compile variables into a list and export to netCDF vars <- list(latlon$lat, latlon$lon, time) diff --git a/modules/Visualization/Visualization.R b/modules/Visualization/Visualization.R index a8664569..6aa6b313 100644 --- a/modules/Visualization/Visualization.R +++ b/modules/Visualization/Visualization.R @@ -81,8 +81,8 @@ plot_skill_metrics <- function(recipe, archive, data_cube, skill_metrics, stop("The element 'skill_metrics' must be a list of named arrays.") } - latitude <- data_cube$lat - longitude <- data_cube$lon + latitude <- data_cube$coords$lat + longitude <- data_cube$coords$lon system_name <- archive$System[[recipe$Analysis$Datasets$System$name]]$name hcst_period <- paste0(recipe$Analysis$Time$hcst_start, "-", recipe$Analysis$Time$hcst_end) @@ -165,28 +165,27 @@ plot_skill_metrics <- function(recipe, archive, data_cube, skill_metrics, # Reorder dimensions skill <- Reorder(skill, c("time", "longitude", "latitude")) # If the significance has been requested and the variable has it, - # retrieve it and reorder its dimensions. + # retrieve it and reorder its dimensions. significance_name <- paste0(name, "_significance") if ((significance) && (significance_name %in% names(skill_metrics))) { - significance_name <- paste0(name, "_significance") skill_significance <- skill_metrics[[significance_name]] - skill_significance <- Reorder(skill_significance, c("time", - "longitude", - "latitude")) + skill_significance <- Reorder(skill_significance, c("time", + "longitude", + "latitude")) # Split skill significance into list of lists, along the time dimension - # to avoid overlapping of significance dots. + # This allows for plotting the significance dots correctly. skill_significance <- ClimProjDiags::ArrayToList(skill_significance, - dim = 'time', - level = "sublist", - names = "dots") + dim = 'time', + level = "sublist", + names = "dots") } else { skill_significance <- NULL } # Define output file name and titles outfile <- paste0(outdir, name, ".png") - toptitle <- paste(display_name, "-", data_cube$Variable$varName, + toptitle <- paste(display_name, "-", data_cube$attrs$Variable$varName, "-", system_name, "-", init_month, hcst_period) - months <- unique(lubridate::month(data_cube$Dates$start, + months <- unique(lubridate::month(data_cube$attrs$Dates, label = T, abb = F)) titles <- as.vector(months) # Plot @@ -195,11 +194,11 @@ plot_skill_metrics <- function(recipe, archive, data_cube, skill_metrics, asplit(skill, MARGIN=1), # Splitting array into a list longitude, latitude, special_args = skill_significance, - dot_symbol = 20, - toptitle = toptitle, - title_scale = 0.6, - titles = titles, - filled.continents=F, + dot_symbol = 20, + toptitle = toptitle, + title_scale = 0.6, + titles = titles, + filled.continents=F, brks = brks, cols = cols, col_inf = col_inf, @@ -210,7 +209,7 @@ plot_skill_metrics <- function(recipe, archive, data_cube, skill_metrics, bar_label_scale = 1.5, axes_label_scale = 1.3) ) - } + } } info(recipe$Run$logger, "##### SKILL METRIC PLOTS SAVED TO OUTPUT DIRECTORY #####") @@ -224,8 +223,8 @@ plot_ensemble_mean <- function(recipe, archive, fcst, outdir) { stop("Visualization functions not yet implemented for daily data.") } - latitude <- fcst$lat - longitude <- fcst$lon + latitude <- fcst$coords$lat + longitude <- fcst$coords$lon system_name <- archive$System[[recipe$Analysis$Datasets$System$name]]$name variable <- recipe$Analysis$Variables$name units <- attr(fcst$Variable, "variable")$units @@ -260,7 +259,7 @@ plot_ensemble_mean <- function(recipe, archive, fcst, outdir) { # Define brks, centered on in the case of anomalies ## if (grepl("anomaly", - attr(fcst$Variable, "variable")$long_name)) { + fcst$attrs$Variable$metadata[[variable]]$long_name)) { variable <- paste(variable, "anomaly") max_value <- max(abs(ensemble_mean)) ugly_intervals <- seq(-max_value, max_value, max_value/20) @@ -282,7 +281,7 @@ plot_ensemble_mean <- function(recipe, archive, fcst, outdir) { } toptitle <- paste("Forecast Ensemble Mean -", variable, "-", system_name, "- Initialization:", i_syear) - months <- lubridate::month(fcst$Dates$start[1, 1, which(start_date == i_syear), ], + months <- lubridate::month(fcst$attrs$Dates[1, 1, which(start_date == i_syear), ], label = T, abb = F) titles <- as.vector(months) # Plots @@ -316,8 +315,8 @@ plot_most_likely_terciles <- function(recipe, archive, stop("Visualization functions not yet implemented for daily data.") } - latitude <- fcst$lat - longitude <- fcst$lon + latitude <- fcst$coords$lat + longitude <- fcst$coords$lon system_name <- archive$System[[recipe$Analysis$Datasets$System$name]]$name variable <- recipe$Analysis$Variables$name start_date <- paste0(recipe$Analysis$Time$fcst_year, @@ -362,7 +361,7 @@ plot_most_likely_terciles <- function(recipe, archive, } toptitle <- paste("Most Likely Tercile -", variable, "-", system_name, "-", "Initialization:", i_syear) - months <- lubridate::month(fcst$Dates$start[1, 1, which(start_date == i_syear), ], + months <- lubridate::month(fcst$attrs$Dates[1, 1, which(start_date == i_syear), ], label = T, abb = F) ## TODO: Ensure this works for daily and sub-daily cases titles <- as.vector(months) diff --git a/tests/testthat/test-decadal_daily_1.R b/tests/testthat/test-decadal_daily_1.R index c9833d2b..400b864d 100644 --- a/tests/testthat/test-decadal_daily_1.R +++ b/tests/testthat/test-decadal_daily_1.R @@ -53,7 +53,7 @@ class(data$obs), ) expect_equal( names(data$hcst), -c("data", "lon", "lat", "Variable", "Datasets", "Dates", "when", "source_files", "load_parameters") +c("data", "dims", "coords", "attrs") ) expect_equal( names(data$hcst), @@ -72,7 +72,7 @@ dim(data$fcst$data), c(dat = 1, var = 1, sday = 1, sweek = 1, syear = 2, time = 90, latitude = 7, longitude = 11, ensemble = 3) ) expect_equal( -dim(data$hcst$Dates$start), +dim(data$hcst$attrs$Dates), c(sday = 1, sweek = 1, syear = 3, time = 90) ) # hcst data @@ -111,23 +111,23 @@ tolerance = 0.0001 # time value expect_equal( -(data$hcst$Dates$start)[1], +(data$hcst$attrs$Dates)[1], as.POSIXct("1991-01-01 12:00:00", tz = 'UTC') ) expect_equal( -(data$hcst$Dates$start)[2], +(data$hcst$attrs$Dates)[2], as.POSIXct("1992-01-01 12:00:00", tz = 'UTC') ) expect_equal( -(data$hcst$Dates$start)[5], +(data$hcst$attrs$Dates)[5], as.POSIXct("1992-01-02 12:00:00", tz = 'UTC') ) expect_equal( -(data$hcst$Dates$start)[1, 1, 3, 90], +(data$hcst$attrs$Dates)[1, 1, 3, 90], as.POSIXct("1993-03-31 12:00:00", tz = 'UTC') ) expect_equal( -(data$hcst$Dates$start)[1, 1, 2, 90], +(data$hcst$attrs$Dates)[1, 1, 2, 90], as.POSIXct("1992-03-30 12:00:00", tz = 'UTC') ) diff --git a/tests/testthat/test-decadal_monthly_1.R b/tests/testthat/test-decadal_monthly_1.R index 10684298..c25d953b 100644 --- a/tests/testthat/test-decadal_monthly_1.R +++ b/tests/testthat/test-decadal_monthly_1.R @@ -71,7 +71,7 @@ class(data$obs), ) expect_equal( names(data$hcst), -c("data", "lon", "lat", "Variable", "Datasets", "Dates", "when", "source_files", "load_parameters") +c("data", "dims", "coords", "attrs") ) expect_equal( names(data$hcst), @@ -90,7 +90,7 @@ dim(data$fcst$data), c(dat = 1, var = 1, sday = 1, sweek = 1, syear = 1, time = 3, latitude = 5, longitude = 4, ensemble = 2) ) expect_equal( -dim(data$hcst$Dates$start), +dim(data$hcst$attr$Dates), c(sday = 1, sweek = 1, syear = 4, time = 3) ) expect_equal( @@ -109,19 +109,19 @@ c(281.7395, 294.2467), tolerance = 0.0001 ) expect_equal( -(data$hcst$Dates$start)[1], +(data$hcst$attrs$Dates)[1], as.POSIXct("1991-11-16", tz = 'UTC') ) expect_equal( -(data$hcst$Dates$start)[2], +(data$hcst$attrs$Dates)[2], as.POSIXct("1992-11-16", tz = 'UTC') ) expect_equal( -(data$hcst$Dates$start)[5], +(data$hcst$attrs$Dates)[5], as.POSIXct("1991-12-16 12:00:00", tz = 'UTC') ) expect_equal( -(data$hcst$Dates$start)[10], +(data$hcst$attrs$Dates)[10], as.POSIXct("1993-01-16 12:00:00", tz = 'UTC') ) diff --git a/tests/testthat/test-decadal_monthly_2.R b/tests/testthat/test-decadal_monthly_2.R index d981a6de..a242defd 100644 --- a/tests/testthat/test-decadal_monthly_2.R +++ b/tests/testthat/test-decadal_monthly_2.R @@ -71,7 +71,7 @@ class(data$obs), ) expect_equal( names(data$hcst), -c("data", "lon", "lat", "Variable", "Datasets", "Dates", "when", "source_files", "load_parameters") +c("data", "dims", "coords", "attrs") ) expect_equal( names(data$hcst), @@ -90,7 +90,7 @@ dim(data$fcst$data), c(dat = 1, var = 1, sday = 1, sweek = 1, syear = 2, time = 14, latitude = 8, longitude = 5, ensemble = 3) ) expect_equal( -dim(data$hcst$Dates$start), +dim(data$hcst$attrs$Dates), c(sday = 1, sweek = 1, syear = 3, time = 14) ) #expect_equal( @@ -126,19 +126,19 @@ tolerance = 0.0001 ) expect_equal( -(data$hcst$Dates$start)[1], +(data$hcst$attrs$Dates)[1], as.POSIXct("1990-11-16", tz = 'UTC') ) expect_equal( -(data$hcst$Dates$start)[2], +(data$hcst$attrs$Dates)[2], as.POSIXct("1991-11-16", tz = 'UTC') ) expect_equal( -(data$hcst$Dates$start)[5], +(data$hcst$attrs$Dates)[5], as.POSIXct("1991-12-16 12:00:00", tz = 'UTC') ) expect_equal( -(data$hcst$Dates$start)[10], +(data$hcst$attrs$Dates)[10], as.POSIXct("1991-02-15", tz = 'UTC') ) diff --git a/tests/testthat/test-decadal_monthly_3.R b/tests/testthat/test-decadal_monthly_3.R index 22fd4353..85c15c88 100644 --- a/tests/testthat/test-decadal_monthly_3.R +++ b/tests/testthat/test-decadal_monthly_3.R @@ -55,7 +55,7 @@ class(data$obs), ) expect_equal( names(data$hcst), -c("data", "lon", "lat", "Variable", "Datasets", "Dates", "when", "source_files", "load_parameters") +c("data", "dims", "coords", "attrs") ) expect_equal( names(data$hcst), @@ -66,7 +66,7 @@ dim(data$hcst$data), c(dat = 1, var = 1, sday = 1, sweek = 1, syear = 4, time = 3, latitude = 25, longitude = 16, ensemble = 3) ) expect_equal( -dim(data$hcst$Dates$start), +dim(data$hcst$attrs$Dates), c(sday = 1, sweek = 1, syear = 4, time = 3) ) # hcst data @@ -87,19 +87,19 @@ tolerance = 0.0001 ) expect_equal( -(data$hcst$Dates$start)[1], +(data$hcst$attrs$Dates)[1], as.POSIXct("2016-04-16", tz = 'UTC') ) expect_equal( -(data$hcst$Dates$start)[2], +(data$hcst$attrs$Dates)[2], as.POSIXct("2017-04-16", tz = 'UTC') ) expect_equal( -(data$hcst$Dates$start)[5], +(data$hcst$attrs$Dates)[5], as.POSIXct("2016-05-16 12:00:00", tz = 'UTC') ) expect_equal( -(data$hcst$Dates$start)[12], +(data$hcst$attrs$Dates)[12], as.POSIXct("2019-06-16", tz = 'UTC') ) diff --git a/tests/testthat/test-seasonal_daily.R b/tests/testthat/test-seasonal_daily.R index ddcca22f..ae80d522 100644 --- a/tests/testthat/test-seasonal_daily.R +++ b/tests/testthat/test-seasonal_daily.R @@ -46,7 +46,7 @@ class(data$obs), ) expect_equal( names(data$hcst), -c("data", "lon", "lat", "Variable", "Datasets", "Dates", "when", "source_files", "load_parameters") +c("data", "dims", "coords", "attrs") ) expect_equal( names(data$hcst), @@ -61,7 +61,7 @@ dim(data$obs$data), c(dat = 1, var = 1, sday = 1, sweek = 1, syear = 4, time = 31, latitude = 4, longitude = 4, ensemble = 1) ) expect_equal( -dim(data$obs$Dates$start), +dim(data$obs$attrs$Dates), c(sday = 1, sweek = 1, syear = 4, time = 31) ) expect_equal( @@ -80,19 +80,19 @@ c(280.1490, 298.2324), tolerance = 0.0001 ) expect_equal( -(data$hcst$Dates$start)[1], +(data$hcst$attrs$Dates)[1], as.POSIXct("1993-12-01 18:00:00 UTC", tz = 'UTC') ) expect_equal( -(data$hcst$Dates$start)[2], +(data$hcst$attrs$Dates)[2], as.POSIXct("1994-12-01 18:00:00 UTC", tz = 'UTC') ) expect_equal( -(data$hcst$Dates$start)[5], +(data$hcst$attrs$Dates)[5], as.POSIXct("1993-12-02 18:00:00 UTC", tz = 'UTC') ) expect_equal( -(data$obs$Dates$start)[10], +(data$obs$attrs$Dates)[10], as.POSIXct("1994-12-03 11:30:00 UTC", tz = 'UTC') ) diff --git a/tests/testthat/test-seasonal_monthly.R b/tests/testthat/test-seasonal_monthly.R index 06ec3730..f05efc94 100644 --- a/tests/testthat/test-seasonal_monthly.R +++ b/tests/testthat/test-seasonal_monthly.R @@ -69,7 +69,7 @@ class(data$obs), ) expect_equal( names(data$hcst), -c("data", "lon", "lat", "Variable", "Datasets", "Dates", "when", "source_files", "load_parameters") +c("data", "dims", "coords", "attrs") ) expect_equal( names(data$hcst), @@ -88,7 +88,7 @@ dim(data$fcst$data), c(dat = 1, var = 1, sday = 1, sweek = 1, syear = 1, time = 3, latitude = 3, longitude = 3, ensemble = 51) ) expect_equal( -dim(data$hcst$Dates$start), +dim(data$hcst$attrs$Dates), c(sday = 1, sweek = 1, syear = 4, time = 3) ) expect_equal( @@ -107,19 +107,19 @@ c(284.7413, 299.6219), tolerance = 0.0001 ) expect_equal( -(data$hcst$Dates$start)[1], +(data$hcst$attrs$Dates)[1], as.POSIXct("1993-11-30 23:59:59", tz = 'UTC') ) expect_equal( -(data$hcst$Dates$start)[2], +(data$hcst$attrs$Dates)[2], as.POSIXct("1994-11-30 23:59:59", tz = 'UTC') ) expect_equal( -(data$hcst$Dates$start)[5], +(data$hcst$attrs$Dates)[5], as.POSIXct("1993-12-31 23:59:59", tz = 'UTC') ) expect_equal( -(data$obs$Dates$start)[10], +(data$obs$attrs$Dates)[10], as.POSIXct("1995-01-15 12:00:00", tz = 'UTC') ) diff --git a/tools/data_summary.R b/tools/data_summary.R index d8f2b1b6..5f532dcf 100644 --- a/tools/data_summary.R +++ b/tools/data_summary.R @@ -11,11 +11,10 @@ data_summary <- function(data_cube, recipe) { } else if (recipe$Analysis$Variables$freq == "daily_mean") { date_format <- "%b %d %Y" } - months <- unique(format(as.Date(data_cube$Dates[[1]]), format = "%B")) - months <- paste(as.character(months), collapse = ", ") - sdate_min <- format(min(as.Date(data_cube$Dates[[1]])), format = date_format) - sdate_max <- format(max(as.Date(data_cube$Dates[[1]])), format = date_format) - + months <- unique(format(as.Date(data_cube$attrs$Dates), format = '%B')) + months <- paste(as.character(months), collapse=", ") + sdate_min <- format(min(as.Date(data_cube$attrs$Dates)), format = date_format) + sdate_max <- format(max(as.Date(data_cube$attrs$Dates)), format = date_format) # Create log instance and sink output to logfile and terminal info(recipe$Run$logger, "DATA SUMMARY:") info(recipe$Run$logger, paste(object_name, "months:", months)) -- GitLab From 564c0af5f35db0e3d5634a1e6ce4d5d3ae32aba7 Mon Sep 17 00:00:00 2001 From: eduzenli Date: Thu, 30 Mar 2023 14:34:41 +0200 Subject: [PATCH 107/388] edited based on new release of CSTools --- modules/Downscaling/tmp/Intbc.R | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/modules/Downscaling/tmp/Intbc.R b/modules/Downscaling/tmp/Intbc.R index 5a5275bf..3cfea06e 100644 --- a/modules/Downscaling/tmp/Intbc.R +++ b/modules/Downscaling/tmp/Intbc.R @@ -78,20 +78,20 @@ CST_Intbc <- function(exp, obs, target_grid, bc_method, int_method = NULL, point stop("Parameter 'obs' must be of the class 's2dv_cube'") } - res <- Intbc(exp = exp$data, obs = obs$data, exp_lats = exp$lat, exp_lons = exp$lon, - obs_lats = obs$lat, obs_lons = obs$lon, target_grid = target_grid, - int_method = int_method, bc_method = bc_method, points = points, source_file = exp$source_files[1], + res <- Intbc(exp = exp$data, obs = obs$data, exp_lats = exp$coords$lat, exp_lons = exp$coords$lon, + obs_lats = obs$coords$lat, obs_lons = obs$coords$lon, target_grid = target_grid, + int_method = int_method, bc_method = bc_method, points = points, source_file = exp$attrs$source_files[1], method_point_interp = method_point_interp, lat_dim = lat_dim, lon_dim = lon_dim, sdate_dim = sdate_dim, member_dim = member_dim, region = region, ncores = ncores,...) # Modify data, lat and lon in the origina s2dv_cube, adding the downscaled data exp$data <- res$data - exp$lon <- res$lon - exp$lat <- res$lat + exp$coords$lon <- res$lon + exp$coords$lat <- res$lat obs$data <- res$obs - obs$lat <- res$lat - obs$lon <- res$lon + obs$coords$lat <- res$lat + obs$coords$lon <- res$lon res_s2dv <- list(exp = exp, obs = obs) return(res_s2dv) -- GitLab From 87f6d3173b963f09aae400438a2872a66e8b0ec2 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Fri, 31 Mar 2023 16:58:09 +0200 Subject: [PATCH 108/388] Revert "Merge branch 'master' into 'master'" This reverts commit 20f02f60b6ee5bef4dd357792538e70d7d1f96cb, reversing changes made to a8c4160be355432ca8c739b6dbefb32467c7862b. --- modules/Downscaling/Downscaling.R | 260 ------------------ .../testing_recipes/recipe_system5c3s-tas.yml | 3 +- .../recipe_system5c3s-tas_downscaling.yml | 62 ----- modules/Saving/paths2save.R | 1 + modules/Visualization/Visualization.R | 7 +- modules/test_seasonal.R | 1 - modules/test_seasonal_downscaling.R | 111 -------- 7 files changed, 3 insertions(+), 442 deletions(-) delete mode 100644 modules/Downscaling/Downscaling.R delete mode 100644 modules/Loading/testing_recipes/recipe_system5c3s-tas_downscaling.yml delete mode 100644 modules/test_seasonal_downscaling.R diff --git a/modules/Downscaling/Downscaling.R b/modules/Downscaling/Downscaling.R deleted file mode 100644 index 32098b3f..00000000 --- a/modules/Downscaling/Downscaling.R +++ /dev/null @@ -1,260 +0,0 @@ -# ▄████▄ ██████ ▓█████▄ ▒█████ █ █░███▄ █ ██████ ▄████▄ ▄▄▄ ██▓ ▓█████ -#▒██▀ ▀█ ▒██ ▒ ▒██▀ ██▌▒██▒ ██▒▓█░ █ ░█░██ ▀█ █ ▒██ ▒ ▒██▀ ▀█ ▒████▄ ▓██▒ ▓█ ▀ -#▒▓█ ▄ ░ ▓██▄ ░██ █▌▒██░ ██▒▒█░ █ ░█▓██ ▀█ ██▒░ ▓██▄ ▒▓█ ▄ ▒██ ▀█▄ ▒██░ ▒███ -#▒▓▓▄ ▄██▒ ▒ ██▒░▓█▄ ▌▒██ ██░░█░ █ ░█▓██▒ ▐▌██▒ ▒ ██▒▒▓▓▄ ▄██▒░██▄▄▄▄██ ▒██░ ▒▓█ ▄ -#▒ ▓███▀ ░▒██████▒▒░▒████▓ ░ ████▓▒░░░██▒██▓▒██░ ▓██░▒██████▒▒▒ ▓███▀ ░ ▓█ ▓██▒░██████▒░▒████▒ -#░ ░▒ ▒ ░▒ ▒▓▒ ▒ ░ ▒▒▓ ▒ ░ ▒░▒░▒░ ░ ▓░▒ ▒ ░ ▒░ ▒ ▒ ▒ ▒▓▒ ▒ ░░ ░▒ ▒ ░ ▒▒ ▓▒█░░ ▒░▓ ░░░ ▒░ ░ -# ░ ▒ ░ ░▒ ░ ░ ░ ▒ ▒ ░ ▒ ▒░ ▒ ░ ░ ░ ░░ ░ ▒░░ ░▒ ░ ░ ░ ▒ ▒ ▒▒ ░░ ░ ▒ ░ ░ ░ ░ -#░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ▒ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ▒ ░ ░ ░ -#░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ -#░ ░ ░ -## TODO: Remove once CSDownscale is on CRAN -source('/esarchive/scratch/jramon/GitLab_jramon/downscaling/csdownscale/R/Interpolation.R') -source('/esarchive/scratch/jramon/GitLab_jramon/downscaling/csdownscale/R/Intbc.R') -source('/esarchive/scratch/jramon/GitLab_jramon/downscaling/csdownscale/R/Intlr.R') -source('/esarchive/scratch/jramon/GitLab_jramon/downscaling/csdownscale/R/Analogs.R') -source('/esarchive/scratch/jramon/GitLab_jramon/downscaling/csdownscale/R/LogisticReg.R') -source('/esarchive/scratch/jramon/GitLab_jramon/downscaling/csdownscale/R/Utils.R') - -## Entry params data and recipe? -downscale_datasets <- function(recipe, data) { - # Function that downscale the hindcast using the method stated in the - # recipe. For the moment, forecast must be null. - # - # data: list of s2dv_cube objects containing the hcst, obs and fcst. - # recipe: object obtained when passing the .yml recipe file to read_yaml() - - type <- tolower(recipe$Analysis$Workflow$Downscaling$type) - - if (!is.null(data$fcst)) { - warning("The downscaling will be only performed to the hindcast data") - data$fcst <- NULL - } - - if (type == "none") { - - hcst_downscal <- data$hcst - DOWNSCAL_MSG <- "##### NO DOWNSCALING PERFORMED #####" - - } else { - # Downscaling function params - int_method <- tolower(recipe$Analysis$Workflow$Downscaling$int_method) - bc_method <- tolower(recipe$Analysis$Workflow$Downscaling$bc_method) - lr_method <- tolower(recipe$Analysis$Workflow$Downscaling$lr_method) - log_reg_method <- tolower(recipe$Analysis$Workflow$Downscaling$log_reg_method) - target_grid <- tolower(recipe$Analysis$Workflow$Downscaling$target_grid) - nanalogs <- as.numeric(recipe$Analysis$Workflow$Downscaling$nanalogs) - - if (is.null(recipe$Analysis$ncores)) { - ncores <- 1 - } else { - ncores <- recipe$Analysis$ncores - } - - #TO DO: add the parametre loocv where it corresponds - if (is.null(recipe$Analysis$loocv)) { - loocv <- TRUE - } else { - loocv <- recipe$Analysis$loocv - } - - DOWNSCAL_TYPES <- c("none", "int", "intbc", "intlr", "analogs", "logreg") - BC_METHODS <- c("simple_bias", "calibration", "quantile_mapping") - LR_METHODS <- c("basic", "large_scale", "4nn") - LOG_REG_METHODS <- c("ens_mean", "ens_mean_sd", "sorted_members") - - if (!(type %in% DOWNSCAL_TYPES)) { - stop("Downscaling type in the recipe is not available. Accepted types ", - "are 'none', 'int', 'intbc', 'intlr', 'analogs', 'logreg'.") - } - - if (type == "int") { - if (is.null(int_method)) { - stop("Please provide one interpolation method in the recipe.") - } - - if (is.null(target_grid)) { - stop("Please provide the target grid in the recipe.") - } - - # Ensure that observations are in the same grid as experiments - # Only needed for this method because the others already return the - # observations - latmin <- data$hcst$lat[1] - lonmin <- data$hcst$lon[1] - latmax <- data$hcst$lat[length(data$hcst$lat)] - lonmax <- data$hcst$lon[length(data$hcst$lon)] - hcst_downscal <- CST_Interpolation(data$hcst, - points = NULL, - method_remap = int_method, - target_grid = target_grid, - lat_dim = "latitude", - lon_dim = "longitude", - region = c(lonmin, lonmax, latmin, latmax), - method_point_interp = NULL) - - obs_downscal <- CST_Interpolation(data$obs, - points = NULL, - method_remap = int_method, - target_grid = target_grid, - lat_dim = "latitude", - lon_dim = "longitude", - region = c(lonmin, lonmax, latmin, latmax), - method_point_interp = NULL) - - hcst_downscal$obs <- obs_downscal$exp - - DOWNSCAL_MSG <- "##### DOWNSCALING COMPLETE #####" - } else if (type == "intbc") { - if (length(int_method) == 0) { - stop("Please provide one (and only one) interpolation method in the recipe.") - } - - if (is.null(bc_method)) { - stop("Please provide one bias-correction method in the recipe. Accepted ", - "methods are 'simple_bias', 'calibration', 'quantile_mapping'.") - } - - if (is.null(target_grid)) { - stop("Please provide the target grid in the recipe.") - } - - if (!(bc_method %in% BC_METHODS)) { - stop(paste0(bc_method, " method in the recipe is not available. Accepted methods ", - "are 'simple_bias', 'calibration', 'quantile_mapping'.")) - } - - hcst_downscal <- CST_Intbc(data$hcst, data$obs, - target_grid = target_grid, - bc_method = bc_method, - int_method = int_method, - points = NULL, - method_point_interp = NULL, - lat_dim = "latitude", - lon_dim = "longitude", - sdate_dim = "syear", - member_dim = "ensemble", - region = NULL, - ncores = ncores) - - DOWNSCAL_MSG <- "##### DOWNSCALING COMPLETE #####" - } else if (type == "intlr") { - if (length(int_method) == 0) { - stop("Please provide one (and only one) interpolation method in the recipe.") - } - - if (is.null(lr_method)) { - stop("Please provide one linear regression method in the recipe. Accepted ", - "methods are 'basic', 'large_scale', '4nn'.") - } - - if (is.null(target_grid)) { - stop("Please provide the target grid in the recipe.") - } - - if (!(lr_method %in% LR_METHODS)) { - stop(paste0(lr_method, " method in the recipe is not available. Accepted methods ", - "are 'basic', 'large_scale', '4nn'.")) - } - - # TO DO: add the possibility to have the element 'pred' in 'data' - if (lr_method == "large_scale") { - if (is.null(data$pred$data)) { - stop("Please provide the large scale predictors in the element 'data$pred$data'.") - } - } else { - data$pred$data <- NULL - } - - hcst_downscal <- CST_Intlr(data$hcst, data$obs, - lr_method = lr_method, - target_grid = target_grid, - points = NULL, - int_method = int_method, - method_point_interp = NULL, - predictors = data$pred$data, - lat_dim = "latitude", - lon_dim = "longitude", - sdate_dim = "syear", - time_dim = "time", - member_dim = "ensemble", - large_scale_predictor_dimname = 'vars', - loocv = loocv, - region = NULL, - ncores = ncores) - - DOWNSCAL_MSG <- "##### DOWNSCALING COMPLETE #####" - } else if (type == "analogs") { - - if (is.null(nanalogs)) { - warning("The number of analogs for searching has not been provided in the ", - "recipe. Setting it to 3.") - nanalogs <- 3 - } - - hcst_downscal <- CST_Analogs(data$hcst, data$obs, - grid_exp = data$hcst$source_files[1], - nanalogs = nanalogs, - fun_analog = "min", - lat_dim = "latitude", - lon_dim = "longitude", - sdate_dim = "syear", - time_dim = "time", - member_dim = "ensemble", - region = NULL, - return_indices = FALSE, - loocv_window = loocv, - ncores = ncores) - - DOWNSCAL_MSG <- "##### DOWNSCALING COMPLETE #####" - } else if (type == "logreg") { - - if (length(int_method) == 0) { - stop("Please provide one (and only one) interpolation method in the recipe.") - } - - if (is.null(log_reg_method)) { - stop("Please provide one logistic regression method in the recipe. Accepted ", - "methods are 'ens_mean', 'ens_mean_sd', 'sorted_members'.") - } - - if (is.null(target_grid)) { - stop("Please provide the target grid in the recipe.") - } - - # Since we are forcing to create three categories, and applying cross-validation, - # we need at least six years of data for the logistic regression function to not - # crash - if (dim(data$hcst$data)[names(dim(data$hcst$data)) == "syear"] <= 5) { - stop("The number of start dates is insufficient for the logisitic regression method. ", - "Please provide six or more.") - } - - if (!(log_reg_method %in% LOG_REG_METHODS)) { - stop(paste0(log_reg_method, " method in the recipe is not available. Accepted methods ", - "are 'ens_mean', 'ens_mean_sd', 'sorted_members'.")) - } - - hcst_downscal <- CST_LogisticReg(data$hcst, data$obs, - target_grid = target_grid, - int_method = int_method, - log_reg_method = log_reg_method, - probs_cat = c(1/3,2/3), - return_most_likely_cat = FALSE, - points = NULL, - method_point_interp = NULL, - lat_dim = "latitude", - lon_dim = "longitude", - sdate_dim = "syear", - member_dim = "ensemble", - region = NULL, - loocv = loocv, - ncores = ncores) - - DOWNSCAL_MSG <- "##### DOWNSCALING COMPLETE #####" - } - } - print(DOWNSCAL_MSG) - return(list(hcst = hcst_downscal$exp, obs = hcst_downscal$obs, fcst = NULL)) -} - diff --git a/modules/Loading/testing_recipes/recipe_system5c3s-tas.yml b/modules/Loading/testing_recipes/recipe_system5c3s-tas.yml index fbb1ffe4..31ae079d 100644 --- a/modules/Loading/testing_recipes/recipe_system5c3s-tas.yml +++ b/modules/Loading/testing_recipes/recipe_system5c3s-tas.yml @@ -43,6 +43,5 @@ Analysis: Run: Loglevel: INFO Terminal: yes - output_dir: /esarchive/scratch/jramon/GitLab_jramon/auto-s2s/out-logs/ + output_dir: /esarchive/scratch/vagudets/repos/auto-s2s/out-logs/ code_dir: /esarchive/scratch/vagudets/repos/auto-s2s/ - diff --git a/modules/Loading/testing_recipes/recipe_system5c3s-tas_downscaling.yml b/modules/Loading/testing_recipes/recipe_system5c3s-tas_downscaling.yml deleted file mode 100644 index 0cad69ec..00000000 --- a/modules/Loading/testing_recipes/recipe_system5c3s-tas_downscaling.yml +++ /dev/null @@ -1,62 +0,0 @@ -# ▄████▄ ██████ ▓█████▄ ▒█████ █ █░███▄ █ ██████ ▄████▄ ▄▄▄ ██▓ ▓█████ -#▒██▀ ▀█ ▒██ ▒ ▒██▀ ██▌▒██▒ ██▒▓█░ █ ░█░██ ▀█ █ ▒██ ▒ ▒██▀ ▀█ ▒████▄ ▓██▒ ▓█ ▀ -#▒▓█ ▄ ░ ▓██▄ ░██ █▌▒██░ ██▒▒█░ █ ░█▓██ ▀█ ██▒░ ▓██▄ ▒▓█ ▄ ▒██ ▀█▄ ▒██░ ▒███ -#▒▓▓▄ ▄██▒ ▒ ██▒░▓█▄ ▌▒██ ██░░█░ █ ░█▓██▒ ▐▌██▒ ▒ ██▒▒▓▓▄ ▄██▒░██▄▄▄▄██ ▒██░ ▒▓█ ▄ -#▒ ▓███▀ ░▒██████▒▒░▒████▓ ░ ████▓▒░░░██▒██▓▒██░ ▓██░▒██████▒▒▒ ▓███▀ ░ ▓█ ▓██▒░██████▒░▒████▒ -#░ ░▒ ▒ ░▒ ▒▓▒ ▒ ░ ▒▒▓ ▒ ░ ▒░▒░▒░ ░ ▓░▒ ▒ ░ ▒░ ▒ ▒ ▒ ▒▓▒ ▒ ░░ ░▒ ▒ ░ ▒▒ ▓▒█░░ ▒░▓ ░░░ ▒░ ░ -# ░ ▒ ░ ░▒ ░ ░ ░ ▒ ▒ ░ ▒ ▒░ ▒ ░ ░ ░ ░░ ░ ▒░░ ░▒ ░ ░ ░ ▒ ▒ ▒▒ ░░ ░ ▒ ░ ░ ░ ░ -#░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ▒ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ▒ ░ ░ ░ -#░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ -#░ ░ ░ -Description: - Author: J. Ramon -Info: downscaling of seasonal predictions from coarse to fine grids - -Analysis: - Horizon: Seasonal - Variables: - name: tas - freq: monthly_mean - Datasets: - System: - name: system5c3s - Multimodel: no - Reference: - name: era5 - Time: - sdate: '0501' - hcst_start: '2000' - hcst_end: '2005' - ftime_min: 1 - ftime_max: 1 -#sometimes we want the region for the obs to be bigger than for hcst - Region: - latmin: 34.1 - latmax: 45.1 - lonmin: -12.5 - lonmax: 6.35 - Regrid: - method: bilinear - type: none - Workflow: - Calibration: - method: raw - Skill: - metric: BSS10 BSS90 Mean_Bias_SS RPSS ROCSS - Downscaling: - # Assumption 1: leave-one-out cross-validation is always applied - # Assumption 2: for analogs, we select the best analog (minimum distance) - # TO DO: add downscaling to point locations - type: # mandatory, 'none', 'int', 'intbc', 'intlr', 'analogs', 'logreg' - int_method: # optional, regridding method accepted by CDO - bc_method: # optional, 'simple_bias', 'calibration', 'quantile_mapping' - lr_method: # optional, 'basic', 'large_scale', '4nn' - log_reg_method: # optional, 'ens_mean', 'ens_mean_sd', 'sorted_members' - target_grid: /esarchive/recon/ecmwf/era5/monthly_mean/tas_f1h/tas_200002.nc # optional, nc file or grid accepted by CDO - nanalogs: 4 # optional, number of analogs to be searched - Output_format: S2S4E -Run: - Loglevel: INFO - Terminal: yes - output_dir: /esarchive/scratch/jramon/GitLab_jramon/auto-s2s/out-logs/ - code_dir: /esarchive/scratch/jramon/GitLab_jramon/auto-s2s/ diff --git a/modules/Saving/paths2save.R b/modules/Saving/paths2save.R index 127c2aec..93196b86 100644 --- a/modules/Saving/paths2save.R +++ b/modules/Saving/paths2save.R @@ -92,6 +92,7 @@ get_dir <- function(recipe, agg = "global") { fcst.sdate <- paste0("hcst-", recipe$Analysis$Time$sdate) } } + calib.method <- tolower(recipe$Analysis$Workflow$Calibration$method) store.freq <- recipe$Analysis$Variables$freq ## TODO: Change "_country" diff --git a/modules/Visualization/Visualization.R b/modules/Visualization/Visualization.R index f223bca8..6aa6b313 100644 --- a/modules/Visualization/Visualization.R +++ b/modules/Visualization/Visualization.R @@ -22,7 +22,7 @@ plot_data <- function(recipe, # skill_metrics: list of arrays containing the computed skill metrics # significance: Bool. Whether to include significance dots where applicable - outdir <- paste0(get_dir(recipe), "plots/") + outdir <- paste0(get_dir(recipe), "/plots/") dir.create(outdir, showWarnings = FALSE, recursive = TRUE) if ((is.null(skill_metrics)) && (is.null(data$fcst))) { @@ -47,11 +47,6 @@ plot_data <- function(recipe, plot_skill_metrics(recipe, archive, data$hcst, skill_metrics, outdir, significance) } - - # Plot downscaled data - if (!is.null(downscaled_data)) { - plot_ensemble_mean(recipe, archive, downscaled_data$hcst$exp, outdir) - } # Plot forecast ensemble mean if (!is.null(data$fcst)) { diff --git a/modules/test_seasonal.R b/modules/test_seasonal.R index 44394cbd..b8541488 100644 --- a/modules/test_seasonal.R +++ b/modules/test_seasonal.R @@ -1,4 +1,3 @@ -setwd("/esarchive/scratch/jramon/GitLab_jramon/auto-s2s/") source("modules/Loading/Loading.R") source("modules/Calibration/Calibration.R") source("modules/Anomalies/Anomalies.R") diff --git a/modules/test_seasonal_downscaling.R b/modules/test_seasonal_downscaling.R deleted file mode 100644 index 5f375abe..00000000 --- a/modules/test_seasonal_downscaling.R +++ /dev/null @@ -1,111 +0,0 @@ - -# DO source /esarchive/scratch/jramon/GitLab_jramon/auto-s2s/MODULES before opening the R session - -setwd("/esarchive/scratch/jramon/GitLab_jramon/auto-s2s/") -source("modules/Loading/Loading.R") -source("modules/Downscaling/Downscaling.R") -source("modules/Calibration/Calibration.R") -source("modules/Skill/Skill.R") -source("modules/Saving/Saving.R") -source("modules/Visualization/Visualization.R") - -# use this development to run the analogs function. Also change the Interpolation.R script to -# not load CDORemap from s2dv. -library(easyNCDF) -library(ncdf4) -library(ClimProjDiags) -source('https://earth.bsc.es/gitlab/es/s2dv/-/raw/master/R/Utils.R') -source('https://earth.bsc.es/gitlab/es/s2dv/-/raw/master/R/CDORemap.R') - -# Loop all downscaling methods and types -#types <- c('int', 'intbc', 'intlr', 'analogs', 'logreg') -#int_methods <- c('con', 'bil', 'bic', 'nn', 'con2') -#bc_methods <- c('simple_bias', 'calibration', 'quantile_mapping') -#lr_methods <- c('basic', 'large_scale', '4nn') -#logreg_methods <- c('ens_mean', 'ens_mean_sd', 'sorted_members') - -# Read recipe -recipe_file <- "modules/Loading/testing_recipes/recipe_system5c3s-tas_downscaling.yml" -recipe <- prepare_outputs(recipe_file) - -# Load datasets -data <- load_datasets(recipe) - -# Modify the recipe manually -recipe$Analysis$Workflow$Downscaling$type <- 'analogs' -recipe$Analysis$Workflow$Downscaling$int_method <- NULL # con, bil, bic, nn, con2 -recipe$Analysis$Workflow$Downscaling$bc_method <- NULL -recipe$Analysis$Workflow$Downscaling$lr_method <- NULL -recipe$Analysis$Workflow$Downscaling$log_reg_method <- NULL - -# Downscale datasets -downscaled_data <- downscale_datasets(recipe, data) - -# Compute skill -# NOTE: LogReg method does not have member dimension because it provides directly the -# predicted categories -# The following line should work only for Interpolation, Intbc, Intlr, Analogs -#stopifnot(recipe$Analysis$Workflow$Downscaling$type %in% c('int', 'intbc', 'intlr', 'analogs')) -#skill_metrics <- compute_skill_metrics(recipe, downscaled_data$hcst$exp, downscaled_data$hcst$obs) - -# Save downscaled data to later intercompare them -saveRDS(downscaled_data, file = paste0('/esarchive/scratch/jramon/downscaling/data/FOCUS/', - recipe$Analysis$Workflow$Downscaling$type, '-', - recipe$Analysis$Workflow$Downscaling$int_method, '-', - recipe$Analysis$Workflow$Downscaling$bc_method, '-', - recipe$Analysis$Workflow$Downscaling$lr_method, '-', - recipe$Analysis$Workflow$Downscaling$log_reg_method, '.RDS')) - -# Plot downscaled data -plot_data(recipe, data = NULL, downscaled_data = downscaled_data) - -# Plot skill metrics -my_data <- list() -my_data$hcst <- downscaled_data$hcst$exp -plot_data(recipe, data = my_data, skill_metrics = skill_metrics) - -# Plot Taylor diagram intercomparison -source('/esarchive/scratch/jramon/GitLab_jramon/nc2ts/taylor_diagram.R') -rds_files <- list.files(path = '/esarchive/scratch/jramon/downscaling/data/FOCUS', full.names = T) -down_data <- list() -methods <- c(list.files(path = '/esarchive/scratch/jramon/downscaling/data/FOCUS')) -for (nfile in seq(rds_files)) { - - # to plot all points in the same Taylor diagram - flag <- ifelse(nfile == 1, F, T) - - down_data[[nfile]] <- readRDS(rds_files[[nfile]]) - - #compute model ensemble mean - ens_mean <- Apply(down_data[[nfile]]$hcst$exp$data, 'ensemble', mean)$output1 - - # remove ensemble dimension in obs - obs <- Subset(down_data[[nfile]]$hcst$obs$data, along = 'ensemble', indices = 1, drop = 'selected') - - ens_mean <- .reorder_dims(arr_ref = obs, arr_to_reorder = ens_mean) - - plot <- taylor.diagram(ref = as.vector(obs), model = as.vector(ens_mean), normalize = TRUE, - add = flag, pch = nfile, sd.arcs = TRUE, maxsd = 1.5) - -} - -legend(1.3, 1.5, cex = 0.8, pt.cex = 1, legend = methods, pch = 1:length(rds_files), ncol = 1) - -################################## -# EXAMPLE FOR SEASONAL CALIBRATION -################################## -#data <- load_datasets(recipe) -# Calibrate datasets -#calibrated_data <- calibrate_datasets(recipe, data) -# Compute skill metrics -#skill_metrics <- compute_skill_metrics(recipe, calibrated_data$hcst, data$obs) -# Compute percentiles and probability bins -#probabilities <- compute_probabilities(recipe, calibrated_data$hcst) -# Export all data to netCDF -#save_data(recipe, data, calibrated_data, skill_metrics, probabilities) -# Plot data -#plot_data(recipe, data, calibrated_data, skill_metrics, probabilities, -# significance = T) - - - -- GitLab From ff4478f50c65b1678e92856bf72a9e62bb96bf89 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Fri, 31 Mar 2023 17:04:57 +0200 Subject: [PATCH 109/388] Adapt unit conversion condition to new s2dv_cube --- modules/Loading/Loading.R | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/Loading/Loading.R b/modules/Loading/Loading.R index d78b2749..63dbb285 100644 --- a/modules/Loading/Loading.R +++ b/modules/Loading/Loading.R @@ -335,10 +335,10 @@ load_datasets <- function(recipe) { ## TODO: Make a unit conversion function? if (variable == "prlr") { # Verify that the units are m/s and the same in obs and hcst - if (((attr(obs$Variable, "variable")$units == "m s-1") || - (attr(obs$Variable, "variable")$units == "m s**-1")) && - ((attr(hcst$Variable, "variable")$units == "m s-1") || - (attr(hcst$Variable, "variable")$units == "m s**-1"))) { + if (((obs$attrs$Variable$metadata[[variable]]$units == "m s-1") || + (obs$attrs$Variable$metadata[[variable]]$units == "m s**-1")) && + ((hcst$attrs$Variable$metadata[[variable]]$units == "m s-1") || + (hcst$attrs$Variable$metadata[[variable]]$units == "m s**-1"))) { info(recipe$Run$logger, "Converting precipitation from m/s to mm/day.") obs$data <- obs$data*86400*1000 -- GitLab From 79b85eb570a541dbe5b1ae458ff463f686f08fa1 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Fri, 31 Mar 2023 17:34:05 +0200 Subject: [PATCH 110/388] try to resolve conflicts --- modules/Visualization/Visualization.R | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/modules/Visualization/Visualization.R b/modules/Visualization/Visualization.R index 61d6ec93..22bbf325 100644 --- a/modules/Visualization/Visualization.R +++ b/modules/Visualization/Visualization.R @@ -1,4 +1,4 @@ -#G# TODO: Remove once released in s2dv/CSTools +## TODO: Remove once released in s2dv/CSTools source("modules/Visualization/tmp/PlotMostLikelyQuantileMap.R") source("modules/Visualization/tmp/PlotCombinedMap.R") source("modules/Visualization/tmp/clim.palette.R") @@ -47,7 +47,6 @@ plot_data <- function(recipe, plot_skill_metrics(recipe, archive, data$hcst, skill_metrics, outdir, significance) } - # Plot forecast ensemble mean if (!is.null(data$fcst)) { plot_ensemble_mean(recipe, archive, data$fcst, outdir) -- GitLab From 276aefb5c947c1c89c135c2256309b90157d69d9 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Mon, 3 Apr 2023 10:33:45 +0200 Subject: [PATCH 111/388] Update CSDownscale functions and Downscaling module to work with new s2dv_cube --- modules/Downscaling/Downscaling.R | 12 ++++++------ modules/Downscaling/tmp/Analogs.R | 17 ++++++++++------- modules/Downscaling/tmp/Intbc.R | 23 +++++++++++++---------- modules/Downscaling/tmp/Interpolation.R | 9 +++++---- modules/Downscaling/tmp/Intlr.R | 19 +++++++++++-------- modules/Downscaling/tmp/LogisticReg.R | 17 ++++++++++------- 6 files changed, 55 insertions(+), 42 deletions(-) diff --git a/modules/Downscaling/Downscaling.R b/modules/Downscaling/Downscaling.R index 3e574e73..f642f673 100644 --- a/modules/Downscaling/Downscaling.R +++ b/modules/Downscaling/Downscaling.R @@ -71,10 +71,10 @@ downscale_datasets <- function(recipe, data) { # Ensure that observations are in the same grid as experiments # Only needed for this method because the others already return the # observations - latmin <- data$hcst$lat[1] - lonmin <- data$hcst$lon[1] - latmax <- data$hcst$lat[length(data$hcst$lat)] - lonmax <- data$hcst$lon[length(data$hcst$lon)] + latmin <- data$hcst$coords$latitude[1] + lonmin <- data$hcst$coords$longitude[1] + latmax <- data$hcst$coords$latitude[length(data$hcst$lat)] + lonmax <- data$hcst$coords$longitude[length(data$hcst$lon)] hcst_downscal <- CST_Interpolation(data$hcst, points = NULL, method_remap = int_method, @@ -126,7 +126,7 @@ downscale_datasets <- function(recipe, data) { target_grid = target_grid, bc_method = bc_method, int_method = int_method, - cal.method=cal_method, + cal.method = cal_method, points = NULL, method_point_interp = NULL, lat_dim = "latitude", @@ -208,7 +208,7 @@ downscale_datasets <- function(recipe, data) { } hcst_downscal <- CST_Analogs(data$hcst, data$obs, - grid_exp = data$hcst$source_files[1], + grid_exp = data$hcst$attrs$source_files[1], nanalogs = nanalogs, fun_analog = "min", lat_dim = "latitude", diff --git a/modules/Downscaling/tmp/Analogs.R b/modules/Downscaling/tmp/Analogs.R index fd6e2f97..a69a66df 100644 --- a/modules/Downscaling/tmp/Analogs.R +++ b/modules/Downscaling/tmp/Analogs.R @@ -99,21 +99,24 @@ CST_Analogs <- function(exp, obs, grid_exp, obs2 = NULL, nanalogs = 3, fun_analo stop("Parameter 'obs' must be of the class 's2dv_cube'") } - res <- Analogs(exp = exp$data, obs = obs$data, exp_lats = exp$lat, exp_lons = exp$lon, - obs_lats = obs$lat, obs_lons = obs$lon, grid_exp = grid_exp, - nanalogs = nanalogs, fun_analog = fun_analog, lat_dim = lat_dim, lon_dim = lon_dim, + res <- Analogs(exp = exp$data, obs = obs$data, exp_lats = exp$coords[[lat_dim]], + exp_lons = exp$coords[[lon_dim]], obs_lats = obs$coords[[lat_dim]], + obs_lons = obs$coords[[lon_dim]], grid_exp = grid_exp, nanalogs = nanalogs, + fun_analog = fun_analog, lat_dim = lat_dim, lon_dim = lon_dim, sdate_dim = sdate_dim, time_dim = time_dim, member_dim = member_dim, region = region, return_indices = return_indices, loocv_window = loocv_window, ncores = ncores) # Modify data, lat and lon in the origina s2dv_cube, adding the downscaled data exp$data <- res$data - exp$lon <- res$lon - exp$lat <- res$lat + exp$dims <- dim(exp$data) + exp$coords[[lon_dim]] <- res$lon + exp$coords[[lat_dim]] <- res$lat obs$data <- res$obs - obs$lat <- res$lat - obs$lon <- res$lon + obs$dims <- dim(obs$data) + obs$coords[[lon_dim]] <- res$lon + obs$coords[[lat_dim]] <- res$lat res_s2dv <- list(exp = exp, obs = obs) return(res_s2dv) diff --git a/modules/Downscaling/tmp/Intbc.R b/modules/Downscaling/tmp/Intbc.R index 3cfea06e..27de3735 100644 --- a/modules/Downscaling/tmp/Intbc.R +++ b/modules/Downscaling/tmp/Intbc.R @@ -78,20 +78,23 @@ CST_Intbc <- function(exp, obs, target_grid, bc_method, int_method = NULL, point stop("Parameter 'obs' must be of the class 's2dv_cube'") } - res <- Intbc(exp = exp$data, obs = obs$data, exp_lats = exp$coords$lat, exp_lons = exp$coords$lon, - obs_lats = obs$coords$lat, obs_lons = obs$coords$lon, target_grid = target_grid, - int_method = int_method, bc_method = bc_method, points = points, source_file = exp$attrs$source_files[1], - method_point_interp = method_point_interp, lat_dim = lat_dim, lon_dim = lon_dim, - sdate_dim = sdate_dim, member_dim = member_dim, region = region, ncores = ncores,...) + res <- Intbc(exp = exp$data, obs = obs$data, exp_lats = exp$coords[[lat_dim]], exp_lons = exp$coords[[lon_dim]], + obs_lats = obs$coords[[lat_dim]], obs_lons = obs$coords[[lon_dim]], target_grid = target_grid, + int_method = int_method, bc_method = bc_method, points = points, + source_file = exp$attrs$source_files[1], method_point_interp = method_point_interp, + lat_dim = lat_dim, lon_dim = lon_dim, sdate_dim = sdate_dim, member_dim = member_dim, + region = region, ncores = ncores,...) # Modify data, lat and lon in the origina s2dv_cube, adding the downscaled data exp$data <- res$data - exp$coords$lon <- res$lon - exp$coords$lat <- res$lat - + exp$dims <- dim(exp$data) + exp$coords[[lon_dim]] <- res$lon + exp$coords[[lat_dim]] <- res$lat + obs$data <- res$obs - obs$coords$lat <- res$lat - obs$coords$lon <- res$lon + obs$dims <- dim(obs$data) + obs$coords[[lon_dim]] <- res$lon + obs$coords[[lat_dim]] <- res$lat res_s2dv <- list(exp = exp, obs = obs) return(res_s2dv) diff --git a/modules/Downscaling/tmp/Interpolation.R b/modules/Downscaling/tmp/Interpolation.R index e594691f..1599bf3b 100644 --- a/modules/Downscaling/tmp/Interpolation.R +++ b/modules/Downscaling/tmp/Interpolation.R @@ -67,15 +67,16 @@ CST_Interpolation <- function(exp, points = NULL, method_remap = NULL, target_gr stop("The name of the latitude/longitude dimensions in 'exp$data' must match the parametres 'lat_dim' and 'lon_dim'") } - res <- Interpolation(exp = exp$data, lats = exp$lat, lons = exp$lon, - source_file = exp$source_files[1], points = points, + res <- Interpolation(exp = exp$data, lats = exp$coords[[lat_dim]], lons = exp$coords[[lon_dim]], + source_file = exp$attrs$source_files[1], points = points, method_remap = method_remap, target_grid = target_grid, lat_dim = lat_dim, lon_dim = lon_dim, region = region, method_point_interp = method_point_interp) # Modify data, lat and lon in the origina s2dv_cube, adding the downscaled data exp$data <- res$data - exp$lon <- res$lon - exp$lat <- res$lat + exp$dims <- dim(exp$data) + exp$coords[[lon_dim]] <- res$lon + exp$coords[[lat_dim]] <- res$lat res_s2dv <- list(exp = exp, obs = NULL) return(res_s2dv) diff --git a/modules/Downscaling/tmp/Intlr.R b/modules/Downscaling/tmp/Intlr.R index 565e3046..24c909f3 100644 --- a/modules/Downscaling/tmp/Intlr.R +++ b/modules/Downscaling/tmp/Intlr.R @@ -99,22 +99,25 @@ CST_Intlr <- function(exp, obs, lr_method, target_grid = NULL, points = NULL, in stop("Parameter 'obs' must be of the class 's2dv_cube'") } - res <- Intlr(exp = exp$data, obs = obs$data, exp_lats = exp$lat, exp_lons = exp$lon, - obs_lats = obs$lat, obs_lons = obs$lon, points = points, source_file_exp = exp$source_files[1], - source_file_obs = obs$source_files[1], target_grid = target_grid, lr_method = lr_method, - int_method = int_method, method_point_interp = method_point_interp, predictors = predictors, + res <- Intlr(exp = exp$data, obs = obs$data, exp_lats = exp$coords[[lat_dim]], exp_lons = exp$coords[[lon_dim]], + obs_lats = obs$coords[[lat_dim]], obs_lons = obs$coords[[lon_dim]], points = points, + source_file_exp = exp$attrs$source_files[1], source_file_obs = obs$attrs$source_files[1], + target_grid = target_grid, lr_method = lr_method, int_method = int_method, + method_point_interp = method_point_interp, predictors = predictors, lat_dim = lat_dim, lon_dim = lon_dim, sdate_dim = sdate_dim, time_dim = time_dim, member_dim = member_dim, large_scale_predictor_dimname = large_scale_predictor_dimname, loocv = loocv, region = region, ncores = ncores) # Modify data, lat and lon in the origina s2dv_cube, adding the downscaled data exp$data <- res$data - exp$lon <- res$lon - exp$lat <- res$lat + exp$dims <- dim(exp$data) + exp$coords[[lon_dim]] <- res$lon + exp$coords[[lat_dim]] <- res$lat obs$data <- res$obs - obs$lat <- res$lat - obs$lon <- res$lon + obs$dims <- dim(obs$data) + obs$coords[[lon_dim]] <- res$lon + obs$coords[[lat_dim]] <- res$lat res_s2dv <- list(exp = exp, obs = obs) return(res_s2dv) diff --git a/modules/Downscaling/tmp/LogisticReg.R b/modules/Downscaling/tmp/LogisticReg.R index 24be6936..c514d254 100644 --- a/modules/Downscaling/tmp/LogisticReg.R +++ b/modules/Downscaling/tmp/LogisticReg.R @@ -101,23 +101,26 @@ CST_LogisticReg <- function(exp, obs, target_grid, int_method = NULL, log_reg_me stop("Parameter 'obs' must be of the class 's2dv_cube'") } - res <- LogisticReg(exp = exp$data, obs = obs$data, exp_lats = exp$lat, exp_lons = exp$lon, - obs_lats = obs$lat, obs_lons = obs$lon, target_grid = target_grid, + res <- LogisticReg(exp = exp$data, obs = obs$data, exp_lats = exp$coords[[lat_dim]], + exp_lons = exp$coords[[lon_dim]], obs_lats = obs$coords[[lat_dim]], + obs_lons = obs$coords[[lon_dim]], target_grid = target_grid, probs_cat = probs_cat, return_most_likely_cat = return_most_likely_cat, int_method = int_method, log_reg_method = log_reg_method, points = points, method_point_interp = method_point_interp, lat_dim = lat_dim, lon_dim = lon_dim, sdate_dim = sdate_dim, member_dim = member_dim, - source_file = exp$source_files[1], region = region, loocv = loocv, + source_file = exp$attrs$source_files[1], region = region, loocv = loocv, ncores = ncores) # Modify data, lat and lon in the origina s2dv_cube, adding the downscaled data exp$data <- res$data - exp$lon <- res$lon - exp$lat <- res$lat + exp$dims <- dim(exp$data) + exp$coords[[lon_dim]] <- res$lon + exp$coords[[lat_dim]] <- res$lat obs$data <- res$obs - obs$lat <- res$lat - obs$lon <- res$lon + obs$dims <- dim(obs$data) + obs$coords[[lon_dim]] <- res$lon + obs$coords[[lat_dim]] <- res$lat res_s2dv <- list(exp = exp, obs = obs) return(res_s2dv) -- GitLab From d27247ea001a35856608ed455ceffbcf3c850df4 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Mon, 3 Apr 2023 10:59:20 +0200 Subject: [PATCH 112/388] Fix s2dv_cube unit attributes --- modules/Loading/Loading.R | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/Loading/Loading.R b/modules/Loading/Loading.R index 63dbb285..a63f031c 100644 --- a/modules/Loading/Loading.R +++ b/modules/Loading/Loading.R @@ -342,12 +342,12 @@ load_datasets <- function(recipe) { info(recipe$Run$logger, "Converting precipitation from m/s to mm/day.") obs$data <- obs$data*86400*1000 - attr(obs$Variable, "variable")$units <- "mm/day" + obs$attrs$Variable$metadata[[variable]]$units <- "mm/day" hcst$data <- hcst$data*86400*1000 - attr(hcst$Variable, "variable")$units <- "mm/day" + hcst$attrs$Variable$metadata[[variable]]$units <- "mm/day" if (!is.null(fcst)) { fcst$data <- fcst$data*86400*1000 - attr(fcst$Variable, "variable")$units <- "mm/day" + fcst$attrs$Variable$metadata[[variable]]$units <- "mm/day" } } } -- GitLab From f682561676aa85d43aa3804ca26a9cef58876864 Mon Sep 17 00:00:00 2001 From: eduzenli Date: Tue, 4 Apr 2023 10:18:25 +0200 Subject: [PATCH 113/388] updated based on Release of CSTools 5.0.0 --- modules/Downscaling/Downscaling.R | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/modules/Downscaling/Downscaling.R b/modules/Downscaling/Downscaling.R index 3e574e73..993702b3 100644 --- a/modules/Downscaling/Downscaling.R +++ b/modules/Downscaling/Downscaling.R @@ -30,7 +30,7 @@ downscale_datasets <- function(recipe, data) { # Downscaling function params int_method <- tolower(recipe$Analysis$Workflow$Downscaling$int_method) bc_method <- tolower(recipe$Analysis$Workflow$Downscaling$bc_method) - cal_method <- tolower(recipe$Analysis$Workflow$Downscaling$cal_method) + cal_method <- tolower(recipe$Analysis$Workflow$Downscaling$cal_method) lr_method <- tolower(recipe$Analysis$Workflow$Downscaling$lr_method) log_reg_method <- tolower(recipe$Analysis$Workflow$Downscaling$log_reg_method) target_grid <- tolower(recipe$Analysis$Workflow$Downscaling$target_grid) @@ -71,10 +71,10 @@ downscale_datasets <- function(recipe, data) { # Ensure that observations are in the same grid as experiments # Only needed for this method because the others already return the # observations - latmin <- data$hcst$lat[1] - lonmin <- data$hcst$lon[1] - latmax <- data$hcst$lat[length(data$hcst$lat)] - lonmax <- data$hcst$lon[length(data$hcst$lon)] + latmin <- data$hcst$coords$latitude[1] + lonmin <- data$hcst$coords$longitude[1] + latmax <- data$hcst$coords$latitude[length(data$hcst$coords$latitude)] + lonmax <- data$hcst$coords$longitude[length(data$hcst$coords$longitude)] hcst_downscal <- CST_Interpolation(data$hcst, points = NULL, method_remap = int_method, @@ -126,7 +126,7 @@ downscale_datasets <- function(recipe, data) { target_grid = target_grid, bc_method = bc_method, int_method = int_method, - cal.method=cal_method, + cal.method=cal_method, points = NULL, method_point_interp = NULL, lat_dim = "latitude", -- GitLab From a691460265a70b8eb17d5aad271d6cc84bd4c74c Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Tue, 4 Apr 2023 11:20:21 +0200 Subject: [PATCH 114/388] Repository clean-up and rearrangement --- autosubmit/auto-verification.sh | 2 - conf/vars-dict.yml-OLD | 114 ------------------------- launch.sh | 30 ------- modules/Loading/Loading.R | 5 +- modules/Loading/Loading_decadal.R | 5 +- modules/Loading/{ => R}/check_latlon.R | 0 modules/Loading/{ => R}/dates2load.R | 53 ------------ modules/Loading/R/get_timeidx.R | 57 +++++++++++++ modules/Skill/{ => R}/compute_probs.R | 0 modules/Skill/{ => R}/compute_quants.R | 0 modules/Skill/{ => R}/s2s.metrics.R | 0 modules/Skill/Skill.R | 6 +- run_parallel_workflow.sh | 14 --- split.R | 3 +- 14 files changed, 68 insertions(+), 221 deletions(-) delete mode 100644 conf/vars-dict.yml-OLD delete mode 100644 launch.sh rename modules/Loading/{ => R}/check_latlon.R (100%) rename modules/Loading/{ => R}/dates2load.R (51%) create mode 100644 modules/Loading/R/get_timeidx.R rename modules/Skill/{ => R}/compute_probs.R (100%) rename modules/Skill/{ => R}/compute_quants.R (100%) rename modules/Skill/{ => R}/s2s.metrics.R (100%) delete mode 100644 run_parallel_workflow.sh diff --git a/autosubmit/auto-verification.sh b/autosubmit/auto-verification.sh index 8408912b..bbd06556 100644 --- a/autosubmit/auto-verification.sh +++ b/autosubmit/auto-verification.sh @@ -7,10 +7,8 @@ script=%SCRIPT% CHUNK=%CHUNK% ############################### -## TODO: How to define the script cd $proj_dir -# script=modules/test_parallel_workflow.R atomic_recipe_number=$(printf "%02d" $CHUNK) atomic_recipe=${outdir}/logs/recipes/atomic_recipe_${atomic_recipe_number}.yml diff --git a/conf/vars-dict.yml-OLD b/conf/vars-dict.yml-OLD deleted file mode 100644 index 04549d36..00000000 --- a/conf/vars-dict.yml-OLD +++ /dev/null @@ -1,114 +0,0 @@ - -vars: -# ECVs - tas: - units: "°C" - longname: "Daily mean temperature at surface" - outname: ~ - tasmin: - units: "°C" - longname: "Minimum daily temperature at surface" - outname: ~ - tasmax: - units: "°C" - longname: "Maximum daily temperature at surface" - outname: ~ - sfcwind: - units: "m/s" - longname: "Surface wind speed module" - outname: ~ - rsds: - units: "W/m2" - longname: "Surface solar radiation downwards" - outname: ~ - psl: - units: "hPa" - longname: "Mean sea level pressure" - outname: ~ - prlr: - units: "mm" - longname: "Total precipitation" - outname: ~ -# CFs - cfwnd1: - units: "%" - longname: "Wind Capacity factor IEC1" - outname: ~ - cfwnd2: - units: "%" - longname: "Wind Capacity factor IEC2" - outname: ~ - cfwnd3: - units: "%" - longname: "Wind Capacity factor IEC3" - outname: ~ - cfslr: - units: "%" - longname: "Solar Capacity factor" - outname: ~ -# Energy - edmnd: - units: "GW" - longname: "Electricity Demmand" - outname: ~ - wndpwo: - units: "GW" - longname: "Wind Power" - outname: ~ - dmndnetwnd: - units: "GW" - longname: "Demmand-net-Wind" - outname: ~ -# Indices - Spr32: - units: "days" - longname: > - Total count of days when daily maximum temp exceeded 32°C - from April 21st to June 21st - outname: ~ - SU35: - units: "days" - longname: > - Total count of days when daily maximum temp exceeded 35°C - from June 21st to September 21st - outname: ~ - SU36: - units: "days" - longname: > - Total count of days when daily maximum temp exceeded 36°C - from June 21st to September 21st - outname: ~ - SU40: - units: "days" - longname: > - Total count of days when daily maximum temp exceeded 40°C - from June 21st to September 21st - outname: ~ - GDD: - units: "days" - longname: > - The sum of the daily differences between daily mean - temperature and 10°C from April 1st to October 31st - outname: ~ - GST: - units: "°C" - longname: "The average temperature from April 1st to October 31st" - outname: ~ - SprTX: - units: "°C" - longname: "The average daily maximum temperature from April 1st to October 31st" - outname: ~ - WSDI: - units: "" - longname: > - The total count of days with at least 6 consecutives days - when the daily temperature maximum exceeds its 90th percentile - outname: ~ - SprR: - units: "mm" - longname: 'Total precipitation from April 21st to June 21st' - outname: ~ - HarR: - units: "mm" - longname: 'Total precipitation from August 21st to September 21st' - outname: ~ diff --git a/launch.sh b/launch.sh deleted file mode 100644 index 89bc75ce..00000000 --- a/launch.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/bash - -source MODULES - -# set -vx - -# Define recipe and script -recipe=recipes/tests/recipe_seasonal_example.yml -script=modules/test_parallel_workflow.R - -# Define tmp file to store necessary information -tmpfile=$(mktemp /tmp/test_split.XXXXXX) - -# Create outdir and split recipes -Rscript modules/split.R ${recipe} | tee $tmpfile -outdir=$( tail -n 1 $tmpfile | sed 's/"//g' ) -outdir=($outdir) - -rm $tmpfile - -# Create directory for slurm output -mkdir -p /esarchive/scratch/$(whoami)/tmp/auto-s2s-logs - -## These will have to be separate scripts to work with autosubmit -## Create a tmpfile inside the projdir with a consistent name?? -## '??' would be a chunk -# Launch one job per atomic recipe -for atomic_recipe in ${outdir[1]}/logs/recipes/atomic_recipe_??.yml; do - sbatch run_parallel_workflow.sh ${script} ${atomic_recipe} -done diff --git a/modules/Loading/Loading.R b/modules/Loading/Loading.R index a8c4c613..c4191f24 100644 --- a/modules/Loading/Loading.R +++ b/modules/Loading/Loading.R @@ -1,8 +1,9 @@ ## TODO: remove paths to personal scratchs source("/esarchive/scratch/vagudets/repos/csoperational/R/get_regrid_params.R") # Load required libraries/funs -source("modules/Loading/dates2load.R") -source("modules/Loading/check_latlon.R") +source("modules/Loading/R/dates2load.R") +source("modules/Loading/R/get_timeidx.R") +source("modules/Loading/R/check_latlon.R") ## TODO: Move to prepare_outputs.R source("tools/libs.R") diff --git a/modules/Loading/Loading_decadal.R b/modules/Loading/Loading_decadal.R index 537baf50..b9a145e3 100644 --- a/modules/Loading/Loading_decadal.R +++ b/modules/Loading/Loading_decadal.R @@ -8,8 +8,9 @@ source("/esarchive/scratch/vagudets/repos/csoperational/R/get_regrid_params.R") # Load required libraries/funs source("modules/Loading/helper_loading_decadal.R") -source("modules/Loading/dates2load.R") -source("modules/Loading/check_latlon.R") +source("modules/Loading/R/dates2load.R") +source("modules/Loading/R/check_latlon.R") +source("modules/Loading/R/get_timeidx.R") source("tools/libs.R") #==================================================================== diff --git a/modules/Loading/check_latlon.R b/modules/Loading/R/check_latlon.R similarity index 100% rename from modules/Loading/check_latlon.R rename to modules/Loading/R/check_latlon.R diff --git a/modules/Loading/dates2load.R b/modules/Loading/R/dates2load.R similarity index 51% rename from modules/Loading/dates2load.R rename to modules/Loading/R/dates2load.R index 0e3613f3..f084ce62 100644 --- a/modules/Loading/dates2load.R +++ b/modules/Loading/R/dates2load.R @@ -49,56 +49,3 @@ dates2load <- function(recipe, logger) { dim(data) <- default_dims return(data) } - -# Gets the corresponding dates or indices according -# to the sdate/leadtimes requested in the recipe -# -# The leadtimes are defined by months -# Ex. 20201101 with leadtimes 1-4 corresponds to -# the forecasting times covering December to March - -get_timeidx <- function(sdates, ltmin, ltmax, - time_freq="monthly_mean") { - - if (time_freq == "daily_mean") { - - sdates <- ymd(sdates) - idx_min <- sdates + months(ltmin - 1) - idx_max <- sdates + months(ltmax) - days(1) - - day_seq <- seq(idx_min[1], idx_max[1], by = 'days') - if (any("0229" %in% (format(day_seq, "%m%d")))) { - time_length <- as.integer(idx_max[1]-idx_min[1]) - } else { - time_length <- as.integer(idx_max[1]-idx_min[1]+1) - } - indxs <- array(numeric(), c(file_date = length(sdates), - time = time_length)) - #syear = length(sdates), - #sday = 1, sweek = 1, - - for (sdate in 1:length(sdates)) { - day_seq <- seq(idx_min[sdate], idx_max[sdate], by='days') - indxs[sdate,] <- day_seq[!(format(day_seq, "%m%d") == "0229")] - } - indxs <- as.POSIXct(indxs*86400, - tz = 'UTC', origin = '1970-01-01') - lubridate::hour(indxs) <- 12 - lubridate::minute(indxs) <- 00 - dim(indxs) <- c(file_date = length(sdates), - time = time_length) - - } else if (time_freq == "monthly_mean") { - - idx_min <- ltmin - idx_max <- ltmax - indxs <- indices(idx_min:idx_max) - - } - - # TODO: 6 hourly case - #idx1 <- (sdates + months(ltmin-1) - sdates)*4 - #idx2 <- idx1 + ndays*4 - 1 - - return(indxs) -} diff --git a/modules/Loading/R/get_timeidx.R b/modules/Loading/R/get_timeidx.R new file mode 100644 index 00000000..e4f61a1d --- /dev/null +++ b/modules/Loading/R/get_timeidx.R @@ -0,0 +1,57 @@ +#'Gets the corresponding dates or indices according +#'to the start dates, min. and max. leadtimes and +#'time frequency. +# +#'The leadtimes are defined by months +#'Ex. 20201101 with leadtimes 1-4 corresponds to +#'the forecasting times covering November to february +#' +#'@param sdates vector containind the start dates +#'@param ltmin first leadtime +#'@param ltmax last leadtime +#'@param time_freq time frequency ("monthly_mean" or "daily_mean") + +get_timeidx <- function(sdates, ltmin, ltmax, + time_freq="monthly_mean") { + + if (time_freq == "daily_mean") { + + sdates <- ymd(sdates) + idx_min <- sdates + months(ltmin - 1) + idx_max <- sdates + months(ltmax) - days(1) + + day_seq <- seq(idx_min[1], idx_max[1], by = 'days') + if (any("0229" %in% (format(day_seq, "%m%d")))) { + time_length <- as.integer(idx_max[1]-idx_min[1]) + } else { + time_length <- as.integer(idx_max[1]-idx_min[1]+1) + } + indxs <- array(numeric(), c(file_date = length(sdates), + time = time_length)) + #syear = length(sdates), + #sday = 1, sweek = 1, + + for (sdate in 1:length(sdates)) { + day_seq <- seq(idx_min[sdate], idx_max[sdate], by='days') + indxs[sdate,] <- day_seq[!(format(day_seq, "%m%d") == "0229")] + } + indxs <- as.POSIXct(indxs*86400, + tz = 'UTC', origin = '1970-01-01') + lubridate::hour(indxs) <- 12 + lubridate::minute(indxs) <- 00 + dim(indxs) <- c(file_date = length(sdates), + time = time_length) + + } else if (time_freq == "monthly_mean") { + + idx_min <- ltmin + idx_max <- ltmax + indxs <- indices(idx_min:idx_max) + } + + # TODO: 6 hourly case + #idx1 <- (sdates + months(ltmin-1) - sdates)*4 + #idx2 <- idx1 + ndays*4 - 1 + + return(indxs) +} diff --git a/modules/Skill/compute_probs.R b/modules/Skill/R/compute_probs.R similarity index 100% rename from modules/Skill/compute_probs.R rename to modules/Skill/R/compute_probs.R diff --git a/modules/Skill/compute_quants.R b/modules/Skill/R/compute_quants.R similarity index 100% rename from modules/Skill/compute_quants.R rename to modules/Skill/R/compute_quants.R diff --git a/modules/Skill/s2s.metrics.R b/modules/Skill/R/s2s.metrics.R similarity index 100% rename from modules/Skill/s2s.metrics.R rename to modules/Skill/R/s2s.metrics.R diff --git a/modules/Skill/Skill.R b/modules/Skill/Skill.R index afe697ac..d83d92c1 100644 --- a/modules/Skill/Skill.R +++ b/modules/Skill/Skill.R @@ -7,9 +7,9 @@ # - reliability diagram # - ask Carlos which decadal metrics he is currently using -source("modules/Skill/compute_quants.R") -source("modules/Skill/compute_probs.R") -source("modules/Skill/s2s.metrics.R") +source("modules/Skill/R/compute_quants.R") +source("modules/Skill/R/compute_probs.R") +source("modules/Skill/R/s2s.metrics.R") ## TODO: Implement this in the future ## Which parameter are required? diff --git a/run_parallel_workflow.sh b/run_parallel_workflow.sh deleted file mode 100644 index dd325b8d..00000000 --- a/run_parallel_workflow.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/bash - -#SBATCH -n 1 -#SBATCH -t 23:59:59 -#SBATCH -J med -#SBATCH -e /esarchive/scratch/%u/tmp/auto-s2s-logs/run-%j.err -#SBATCH -o /esarchive/scratch/%u/tmp/auto-s2s-logs/run-%j.out - -script=$1 -atomic_recipe=$2 - -source MODULES - -Rscript ${script} ${atomic_recipe} diff --git a/split.R b/split.R index 9a3cbf72..869b47e3 100644 --- a/split.R +++ b/split.R @@ -3,10 +3,11 @@ suppressMessages(source("tools/libs.R")) # Retrieve recipe file path args = commandArgs(trailingOnly = TRUE) recipe_file <- args[1] -# recipe_file <- "recipes/tests/recipe_seasonal_example.yml" + # Check recipe and prepare output directories recipe <- prepare_outputs(recipe_file) # Split recipe into atomic recipes + ## TODO: Add autosubmit yes/no to the parameters? run_parameters <- divide_recipe(recipe) if (recipe$Run$autosubmit) { -- GitLab From 7cb1f70778abd9f807ec6ad1010c6ea6e9854680 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Tue, 4 Apr 2023 11:30:34 +0200 Subject: [PATCH 115/388] Remove updated s2dv plotting functions --- modules/Visualization/Visualization.R | 5 - modules/Visualization/tmp/PlotCombinedMap.R | 608 ------------------ .../tmp/PlotMostLikelyQuantileMap.R | 196 ------ modules/Visualization/tmp/clim.palette.R | 69 -- .../atomic_recipes/recipe_system7c3s-tas.yml | 2 +- 5 files changed, 1 insertion(+), 879 deletions(-) delete mode 100644 modules/Visualization/tmp/PlotCombinedMap.R delete mode 100644 modules/Visualization/tmp/PlotMostLikelyQuantileMap.R delete mode 100644 modules/Visualization/tmp/clim.palette.R diff --git a/modules/Visualization/Visualization.R b/modules/Visualization/Visualization.R index 84e0a139..3d065e6c 100644 --- a/modules/Visualization/Visualization.R +++ b/modules/Visualization/Visualization.R @@ -1,8 +1,3 @@ -#G# TODO: Remove once released in s2dv/CSTools -source("modules/Visualization/tmp/PlotMostLikelyQuantileMap.R") -source("modules/Visualization/tmp/PlotCombinedMap.R") -source("modules/Visualization/tmp/clim.palette.R") - ## TODO: Add the possibility to read the data directly from netCDF ## TODO: Adapt to multi-model case ## TODO: Add param 'raw'? diff --git a/modules/Visualization/tmp/PlotCombinedMap.R b/modules/Visualization/tmp/PlotCombinedMap.R deleted file mode 100644 index a7b5fc97..00000000 --- a/modules/Visualization/tmp/PlotCombinedMap.R +++ /dev/null @@ -1,608 +0,0 @@ -#'Plot Multiple Lon-Lat Variables In a Single Map According to a Decision Function -#'@description Plot a number a two dimensional matrices with (longitude, latitude) dimensions on a single map with the cylindrical equidistant latitude and longitude projection. -#'@author Nicolau Manubens, \email{nicolau.manubens@bsc.es} -#'@author Veronica Torralba, \email{veronica.torralba@bsc.es} -#' -#'@param maps List of matrices to plot, each with (longitude, latitude) dimensions, or 3-dimensional array with the dimensions (longitude, latitude, map). Dimension names are required. -#'@param lon Vector of longitudes. Must match the length of the corresponding dimension in 'maps'. -#'@param lat Vector of latitudes. Must match the length of the corresponding dimension in 'maps'. -#'@param map_select_fun Function that selects, for each grid point, which value to take among all the provided maps. This function receives as input a vector of values for a same grid point for all the provided maps, and must return a single selected value (not its index!) or NA. For example, the \code{min} and \code{max} functions are accepted. -#'@param display_range Range of values to be displayed for all the maps. This must be a numeric vector c(range min, range max). The values in the parameter 'maps' can go beyond the limits specified in this range. If the selected value for a given grid point (according to 'map_select_fun') falls outside the range, it will be coloured with 'col_unknown_map'. -#'@param map_dim Optional name for the dimension of 'maps' along which the multiple maps are arranged. Only applies when 'maps' is provided as a 3-dimensional array. Takes the value 'map' by default. -#'@param brks Colour levels to be sent to PlotEquiMap. This parameter is optional and adjusted automatically by the function. -#'@param cols List of vectors of colours to be sent to PlotEquiMap for the colour bar of each map. This parameter is optional and adjusted automatically by the function (up to 5 maps). The colours provided for each colour bar will be automatically interpolated to match the number of breaks. Each item in this list can be named, and the name will be used as title for the corresponding colour bar (equivalent to the parameter 'bar_titles'). -#'@param col_unknown_map Colour to use to paint the grid cells for which a map is not possible to be chosen according to 'map_select_fun' or for those values that go beyond 'display_range'. Takes the value 'white' by default. -#'@param mask Optional numeric array with dimensions (latitude, longitude), with values in the range [0, 1], indicating the opacity of the mask over each grid point. Cells with a 0 will result in no mask, whereas cells with a 1 will result in a totally opaque superimposed pixel coloured in 'col_mask'. -#'@param col_mask Colour to be used for the superimposed mask (if specified in 'mask'). Takes the value 'grey' by default. -#'@param dots Array of same dimensions as 'var' or with dimensions -#' c(n, dim(var)), where n is the number of dot/symbol layers to add to the -#' plot. A value of TRUE at a grid cell will draw a dot/symbol on the -#' corresponding square of the plot. By default all layers provided in 'dots' -#' are plotted with dots, but a symbol can be specified for each of the -#' layers via the parameter 'dot_symbol'. -#'@param bar_titles Optional vector of character strings providing the titles to be shown on top of each of the colour bars. -#'@param legend_scale Scale factor for the size of the colour bar labels. Takes 1 by default. -#'@param cex_bar_titles Scale factor for the sizes of the bar titles. Takes 1.5 by default. -#'@param fileout File where to save the plot. If not specified (default) a graphics device will pop up. Extensions allowed: eps/ps, jpeg, png, pdf, bmp and tiff -#'@param width File width, in the units specified in the parameter size_units (inches by default). Takes 8 by default. -#'@param height File height, in the units specified in the parameter size_units (inches by default). Takes 5 by default. -#'@param size_units Units of the size of the device (file or window) to plot in. Inches ('in') by default. See ?Devices and the creator function of the corresponding device. -#'@param res Resolution of the device (file or window) to plot in. See ?Devices and the creator function of the corresponding device. -#'@param drawleg Where to draw the common colour bar. Can take values TRUE, -#' FALSE or:\cr -#' 'up', 'u', 'U', 'top', 't', 'T', 'north', 'n', 'N'\cr -#' 'down', 'd', 'D', 'bottom', 'b', 'B', 'south', 's', 'S' (default)\cr -#' 'right', 'r', 'R', 'east', 'e', 'E'\cr -#' 'left', 'l', 'L', 'west', 'w', 'W' -#'@param ... Additional parameters to be passed on to \code{PlotEquiMap}. - -#'@seealso \code{PlotCombinedMap} and \code{PlotEquiMap} -#' -#'@importFrom s2dv PlotEquiMap ColorBar -#'@importFrom maps map -#'@importFrom graphics box image layout mtext par plot.new -#'@importFrom grDevices adjustcolor bmp colorRampPalette dev.cur dev.new dev.off hcl jpeg pdf png postscript svg tiff -#'@examples -#'# Simple example -#'x <- array(1:(20 * 10), dim = c(lat = 10, lon = 20)) / 200 -#'a <- x * 0.6 -#'b <- (1 - x) * 0.6 -#'c <- 1 - (a + b) -#'lons <- seq(0, 359.5, length = 20) -#'lats <- seq(-89.5, 89.5, length = 10) -#'PlotCombinedMap(list(a, b, c), lons, lats, -#' toptitle = 'Maximum map', -#' map_select_fun = max, -#' display_range = c(0, 1), -#' bar_titles = paste('% of belonging to', c('a', 'b', 'c')), -#' brks = 20, width = 10, height = 8) -#' -#'Lon <- c(0:40, 350:359) -#'Lat <- 51:26 -#'data <- rnorm(51 * 26 * 3) -#'dim(data) <- c(map = 3, lon = 51, lat = 26) -#'mask <- sample(c(0,1), replace = TRUE, size = 51 * 26) -#'dim(mask) <- c(lat = 26, lon = 51) -#'PlotCombinedMap(data, lon = Lon, lat = Lat, map_select_fun = max, -#' display_range = range(data), mask = mask, -#' width = 12, height = 8) -#' -#'@export -PlotCombinedMap <- function(maps, lon, lat, - map_select_fun, display_range, - map_dim = 'map', - brks = NULL, cols = NULL, - col_unknown_map = 'white', - mask = NULL, col_mask = 'grey', - dots = NULL, - bar_titles = NULL, legend_scale = 1, - cex_bar_titles = 1.5, - plot_margin = NULL, bar_margin = rep(0, 4), - fileout = NULL, width = 8, height = 5, - size_units = 'in', res = 100, drawleg = T, - ...) { - args <- list(...) - - # If there is any filenames to store the graphics, process them - # to select the right device - if (!is.null(fileout)) { - deviceInfo <- .SelectDevice(fileout = fileout, width = width, height = height, - units = size_units, res = res) - saveToFile <- deviceInfo$fun - fileout <- deviceInfo$files - } - - # Check probs - error <- FALSE - if (is.list(maps)) { - if (length(maps) < 1) { - stop("Parameter 'maps' must be of length >= 1 if provided as a list.") - } - check_fun <- function(x) { - is.numeric(x) && (length(dim(x)) == 2) - } - if (!all(sapply(maps, check_fun))) { - error <- TRUE - } - ref_dims <- dim(maps[[1]]) - equal_dims <- all(sapply(maps, function(x) identical(dim(x), ref_dims))) - if (!equal_dims) { - stop("All arrays in parameter 'maps' must have the same dimension ", - "sizes and names when 'maps' is provided as a list of arrays.") - } - num_maps <- length(maps) - maps <- unlist(maps) - dim(maps) <- c(ref_dims, map = num_maps) - map_dim <- 'map' - } - if (!is.numeric(maps)) { - error <- TRUE - } - if (is.null(dim(maps))) { - error <- TRUE - } - if (length(dim(maps)) != 3) { - error <- TRUE - } - if (error) { - stop("Parameter 'maps' must be either a numeric array with 3 dimensions ", - " or a list of numeric arrays of the same size with the 'lon' and ", - "'lat' dimensions.") - } - dimnames <- names(dim(maps)) - - # Check map_dim - if (is.character(map_dim)) { - if (is.null(dimnames)) { - stop("Specified a dimension name in 'map_dim' but no dimension names provided ", - "in 'maps'.") - } - map_dim <- which(dimnames == map_dim) - if (length(map_dim) < 1) { - stop("Dimension 'map_dim' not found in 'maps'.") - } else { - map_dim <- map_dim[1] - } - } else if (!is.numeric(map_dim)) { - stop("Parameter 'map_dim' must be either a numeric value or a ", - "dimension name.") - } - if (length(map_dim) != 1) { - stop("Parameter 'map_dim' must be of length 1.") - } - map_dim <- round(map_dim) - - # Work out lon_dim and lat_dim - lon_dim <- NULL - if (!is.null(dimnames)) { - lon_dim <- which(dimnames %in% c('lon', 'longitude'))[1] - } - if (length(lon_dim) < 1) { - lon_dim <- (1:3)[-map_dim][1] - } - lon_dim <- round(lon_dim) - - lat_dim <- NULL - if (!is.null(dimnames)) { - lat_dim <- which(dimnames %in% c('lat', 'latitude'))[1] - } - if (length(lat_dim) < 1) { - lat_dim <- (1:3)[-map_dim][2] - } - lat_dim <- round(lat_dim) - - # Check lon - if (!is.numeric(lon)) { - stop("Parameter 'lon' must be a numeric vector.") - } - if (length(lon) != dim(maps)[lon_dim]) { - stop("Parameter 'lon' does not match the longitude dimension in 'maps'.") - } - - # Check lat - if (!is.numeric(lat)) { - stop("Parameter 'lat' must be a numeric vector.") - } - if (length(lat) != dim(maps)[lat_dim]) { - stop("Parameter 'lat' does not match the longitude dimension in 'maps'.") - } - - # Check map_select_fun - if (is.numeric(map_select_fun)) { - if (length(dim(map_select_fun)) != 2) { - stop("Parameter 'map_select_fun' must be an array with dimensions ", - "'lon' and 'lat' if provided as an array.") - } - if (!identical(dim(map_select_fun), dim(maps)[-map_dim])) { - stop("The dimensions 'lon' and 'lat' in the 'map_select_fun' array must ", - "have the same size, name and order as in the 'maps' parameter.") - } - } - if (!is.function(map_select_fun)) { - stop("The parameter 'map_select_fun' must be a function or a numeric array.") - } - - # Check display_range - if (!is.numeric(display_range) || length(display_range) != 2) { - stop("Parameter 'display_range' must be a numeric vector of length 2.") - } - - # Check brks - if (is.null(brks) || (is.numeric(brks) && length(brks) == 1)) { - num_brks <- 5 - if (is.numeric(brks)) { - num_brks <- brks - } - brks <- seq(from = display_range[1], to = display_range[2], length.out = num_brks) - } - if (!is.numeric(brks)) { - stop("Parameter 'brks' must be a numeric vector.") - } - - # Check cols - col_sets <- list(c("#A1D99B", "#74C476", "#41AB5D", "#238B45"), - c("#6BAED6FF", "#4292C6FF", "#2171B5FF", "#08519CFF"), - c("#FFEDA0FF", "#FED976FF", "#FEB24CFF", "#FD8D3CFF"), - c("#FC4E2AFF", "#E31A1CFF", "#BD0026FF", "#800026FF"), - c("#FCC5C0", "#FA9FB5", "#F768A1", "#DD3497")) - if (is.null(cols)) { - if (length(col_sets) >= dim(maps)[map_dim]) { - chosen_sets <- 1:(dim(maps)[map_dim]) - chosen_sets <- chosen_sets + floor((length(col_sets) - length(chosen_sets)) / 2) - } else { - chosen_sets <- array(1:length(col_sets), dim(maps)[map_dim]) - } - cols <- col_sets[chosen_sets] - } else { - if (!is.list(cols)) { - stop("Parameter 'cols' must be a list of character vectors.") - } - if (!all(sapply(cols, is.character))) { - stop("Parameter 'cols' must be a list of character vectors.") - } - if (length(cols) != dim(maps)[map_dim]) { - stop("Parameter 'cols' must be a list of the same length as the number of ", - "maps in 'maps'.") - } - } - for (i in 1:length(cols)) { - if (length(cols[[i]]) != (length(brks) - 1)) { - cols[[i]] <- colorRampPalette(cols[[i]])(length(brks) - 1) - } - } - - # Check bar_titles - if (is.null(bar_titles)) { - if (!is.null(names(cols))) { - bar_titles <- names(cols) - } else { - bar_titles <- paste0("Map ", 1:length(cols)) - } - } else { - if (!is.character(bar_titles)) { - stop("Parameter 'bar_titles' must be a character vector.") - } - if (length(bar_titles) != length(cols)) { - stop("Parameter 'bar_titles' must be of the same length as the number of ", - "maps in 'maps'.") - } - } - - # Check legend_scale - if (!is.numeric(legend_scale)) { - stop("Parameter 'legend_scale' must be numeric.") - } - - # Check col_unknown_map - if (!is.character(col_unknown_map)) { - stop("Parameter 'col_unknown_map' must be a character string.") - } - - # Check col_mask - if (!is.character(col_mask)) { - stop("Parameter 'col_mask' must be a character string.") - } - - # Check mask - if (!is.null(mask)) { - if (!is.numeric(mask)) { - stop("Parameter 'mask' must be numeric.") - } - if (length(dim(mask)) != 2) { - stop("Parameter 'mask' must have two dimensions.") - } - if ((dim(mask)[1] != dim(maps)[lat_dim]) || - (dim(mask)[2] != dim(maps)[lon_dim])) { - stop("Parameter 'mask' must have dimensions c(lat, lon).") - } - } - # Check dots - if (!is.null(dots)) { - if (length(dim(dots)) != 2) { - stop("Parameter 'mask' must have two dimensions.") - } - if ((dim(dots)[1] != dim(maps)[lat_dim]) || - (dim(dots)[2] != dim(maps)[lon_dim])) { - stop("Parameter 'mask' must have dimensions c(lat, lon).") - } - } - - #---------------------- - # Identify the most likely map - #---------------------- - brks_norm <- seq(0, 1, length.out = length(brks)) - if (is.function(map_select_fun)) { - range_width <- display_range[2] - display_range[1] - ml_map <- apply(maps, c(lat_dim, lon_dim), function(x) { - if (any(is.na(x))) { - res <- NA - } else { - res <- which(x == map_select_fun(x)) - if (length(res) > 0) { - res <- res[1] - if (map_select_fun(x) < display_range[1] || - map_select_fun(x) > display_range[2]) { - res <- -0.5 - } else { - res <- res + (map_select_fun(x) - display_range[1]) / range_width - if (map_select_fun(x) == display_range[1]) { - res <- res + brks_norm[2] / (num_brks * 2) - } - } - } else { - res <- -0.5 - } - } - res - }) - } else { - stop("Providing 'map_select_fun' as array not implemented yet.") - ml_map <- map_select_fun - } - nmap <- dim(maps)[map_dim] - nlat <- length(lat) - nlon <- length(lon) - - #---------------------- - # Set latitudes from minimum to maximum - #---------------------- - if (lat[1] > lat[nlat]){ - lat <- lat[nlat:1] - indices <- list(nlat:1, TRUE) - ml_map <- do.call("[", c(list(x = ml_map), indices)) - if (!is.null(mask)){ - mask <- mask[nlat:1, ] - } - if (!is.null(dots)){ - dots <- dots[nlat:1,] - } - } - - #---------------------- - # Set layout and parameters - #---------------------- - # Open connection to graphical device - if (!is.null(fileout)) { - saveToFile(fileout) - } else if (names(dev.cur()) == 'null device') { - dev.new(units = size_units, res = res, width = width, height = height) - } - #NOTE: I think plot.new() is not necessary in any case. -# plot.new() - par(font.main = 1) - # If colorbars need to be plotted, re-define layout. - if (drawleg) { - layout(matrix(c(rep(1, nmap),2:(nmap + 1)), 2, nmap, byrow = TRUE), heights = c(6, 1.5)) - } - - #---------------------- - # Set colors and breaks and then PlotEquiMap - #---------------------- - tcols <- c(col_unknown_map, cols[[1]]) - for (k in 2:nmap) { - tcols <- append(tcols, c(col_unknown_map, cols[[k]])) - } - - tbrks <- c(-1, brks_norm + rep(1:nmap, each = length(brks))) - - if (is.null(plot_margin)) { - plot_margin <- c(5, 4, 4, 2) + 0.1 # default of par()$mar - } - - PlotEquiMap(var = ml_map, lon = lon, lat = lat, - brks = tbrks, cols = tcols, drawleg = FALSE, - filled.continents = FALSE, dots = dots, mar = plot_margin, ...) - - #---------------------- - # Add overplot on top - #---------------------- - if (!is.null(mask)) { - dims_mask <- dim(mask) - latb <- sort(lat, index.return = TRUE) - dlon <- lon[2:dims_mask[2]] - lon[1:(dims_mask[2] - 1)] - wher <- which(dlon > (mean(dlon) + 1)) - if (length(wher) > 0) { - lon[(wher + 1):dims_mask[2]] <- lon[(wher + 1):dims_mask[2]] - 360 - } - lonb <- sort(lon, index.return = TRUE) - - cols_mask <- sapply(seq(from = 0, to = 1, length.out = 10), - function(x) adjustcolor(col_mask, alpha.f = x)) - image(lonb$x, latb$x, t(mask)[lonb$ix, latb$ix], - axes = FALSE, col = cols_mask, - breaks = seq(from = 0, to = 1, by = 0.1), - xlab='', ylab='', add = TRUE, xpd = TRUE) - if (!exists('coast_color')) { - coast_color <- 'black' - } - if (min(lon) < 0) { - map('world', interior = FALSE, add = TRUE, lwd = 1, col = coast_color) # Low resolution world map (lon -180 to 180). - } else { - map('world2', interior = FALSE, add = TRUE, lwd = 1, col = coast_color) # Low resolution world map (lon 0 to 360). - } - box() - } - - #---------------------- - # Add colorbars - #---------------------- - if ('toptitle' %in% names(args)) { - size_title <- 1 - if ('title_scale' %in% names(args)) { - size_title <- args[['title_scale']] - } - old_mar <- par('mar') - old_mar[3] <- old_mar[3] - (2 * size_title + 1) - par(mar = old_mar) - } - - if (drawleg) { - for (k in 1:nmap) { - ColorBar(brks = brks, cols = cols[[k]], vertical = FALSE, - draw_separators = TRUE, extra_margin = c(2, 0, 2, 0), - label_scale = legend_scale * 1.5) - if (!is.null(bar_titles)) { - mtext(bar_titles[[k]], 3, line = -3, cex = cex_bar_titles) - } - #TODO: Change to below code. Plot title together. extra_margin needs to be adjusted. -# ColorBar(brks = brks, cols = cols[[k]], vertical = FALSE, -# draw_separators = TRUE, extra_margin = c(1, 0, 1, 0), -# label_scale = legend_scale * 1.5, title = bar_titles[[k]], title_scale = cex_bar_titles) - } - } - - # If the graphic was saved to file, close the connection with the device - if (!is.null(fileout)) dev.off() -} - -# Color bar for PlotMostLikelyQuantileMap -multi_ColorBar <- function(nmap, brks = NULL, cols = NULL, vertical = TRUE, subsampleg = NULL, - bar_limits = NULL, var_limits = NULL, - triangle_ends = NULL, plot = TRUE, - draw_separators = FALSE, - bar_titles = NULL, title_scale = 1, label_scale = 1, extra_margin = rep(0, 4), - ...) { - - minimum_value <- ceiling(1 / nmap * 10 * 1.1) * 10 - display_range = c(minimum_value, 100) - - # Check brks - if (is.null(brks) || (is.numeric(brks) && length(brks) == 1)) { - num_brks <- 5 - if (is.numeric(brks)) { - num_brks <- brks - } - brks <- seq(from = display_range[1], to = display_range[2], length.out = num_brks) - } - if (!is.numeric(brks)) { - stop("Parameter 'brks' must be a numeric vector.") - } - # Check cols - col_sets <- list(c("#A1D99B", "#74C476", "#41AB5D", "#238B45"), - c("#6BAED6FF", "#4292C6FF", "#2171B5FF", "#08519CFF"), - c("#FFEDA0FF", "#FED976FF", "#FEB24CFF", "#FD8D3CFF"), - c("#FC4E2AFF", "#E31A1CFF", "#BD0026FF", "#800026FF"), - c("#FCC5C0", "#FA9FB5", "#F768A1", "#DD3497")) - if (is.null(cols)) { - if (length(col_sets) >= nmap) { - chosen_sets <- 1:nmap - chosen_sets <- chosen_sets + floor((length(col_sets) - length(chosen_sets)) / 2) - } else { - chosen_sets <- array(1:length(col_sets), nmap) - } - cols <- col_sets[chosen_sets] - } else { - if (!is.list(cols)) { - stop("Parameter 'cols' must be a list of character vectors.") - } - if (!all(sapply(cols, is.character))) { - stop("Parameter 'cols' must be a list of character vectors.") - } - if (length(cols) != dim(maps)[map_dim]) { - stop("Parameter 'cols' must be a list of the same length as the number of ", - "maps in 'maps'.") - } - } - for (i in 1:length(cols)) { - if (length(cols[[i]]) != (length(brks) - 1)) { - cols[[i]] <- grDevices::colorRampPalette(cols[[i]])(length(brks) - 1) - } - } - - # Check bar_titles - if (is.null(bar_titles)) { - if (nmap == 3) { - bar_titles <- c("Below normal (%)", "Normal (%)", "Above normal (%)") - } else if (nmap == 5) { - bar_titles <- c("Low (%)", "Below normal (%)", - "Normal (%)", "Above normal (%)", "High (%)") - } else { - bar_titles <- paste0("Cat. ", 1:nmap, " (%)") - } - } - - if (plot) { - for (k in 1:nmap) { - s2dv::ColorBar(brks = brks, cols = cols[[k]], vertical = FALSE, subsampleg = subsampleg, - bar_limits = bar_limits, var_limits = var_limits, - triangle_ends = triangle_ends, plot = TRUE, - draw_separators = draw_separators, - title = bar_titles[[k]], title_scale = title_scale, - label_scale = label_scale, extra_margin = extra_margin) - } - } else { - #TODO: col_inf and col_sup - return(list(brks = brks, cols = cols)) - } - -} - -#TODO: use s2dv:::.SelectDevice and remove this function here? -.SelectDevice <- function(fileout, width, height, units, res) { - # This function is used in the plot functions to check the extension of the - # files where the graphics will be stored and select the right R device to - # save them. - # If the vector of filenames ('fileout') has files with different - # extensions, then it will only accept the first one, changing all the rest - # of the filenames to use that extension. - - # We extract the extension of the filenames: '.png', '.pdf', ... - ext <- regmatches(fileout, regexpr("\\.[a-zA-Z0-9]*$", fileout)) - - if (length(ext) != 0) { - # If there is an extension specified, select the correct device - ## units of width and height set to accept inches - if (ext[1] == ".png") { - saveToFile <- function(fileout) { - png(filename = fileout, width = width, height = height, res = res, units = units) - } - } else if (ext[1] == ".jpeg") { - saveToFile <- function(fileout) { - jpeg(filename = fileout, width = width, height = height, res = res, units = units) - } - } else if (ext[1] %in% c(".eps", ".ps")) { - saveToFile <- function(fileout) { - postscript(file = fileout, width = width, height = height) - } - } else if (ext[1] == ".pdf") { - saveToFile <- function(fileout) { - pdf(file = fileout, width = width, height = height) - } - } else if (ext[1] == ".svg") { - saveToFile <- function(fileout) { - svg(filename = fileout, width = width, height = height) - } - } else if (ext[1] == ".bmp") { - saveToFile <- function(fileout) { - bmp(filename = fileout, width = width, height = height, res = res, units = units) - } - } else if (ext[1] == ".tiff") { - saveToFile <- function(fileout) { - tiff(filename = fileout, width = width, height = height, res = res, units = units) - } - } else { - warning("file extension not supported, it will be used '.eps' by default.") - ## In case there is only one filename - fileout[1] <- sub("\\.[a-zA-Z0-9]*$", ".eps", fileout[1]) - ext[1] <- ".eps" - saveToFile <- function(fileout) { - postscript(file = fileout, width = width, height = height) - } - } - # Change filenames when necessary - if (any(ext != ext[1])) { - warning(paste0("some extensions of the filenames provided in 'fileout' are not ", ext[1],". The extensions are being converted to ", ext[1], ".")) - fileout <- sub("\\.[a-zA-Z0-9]*$", ext[1], fileout) - } - } else { - # Default filenames when there is no specification - warning("there are no extensions specified in the filenames, default to '.eps'") - fileout <- paste0(fileout, ".eps") - saveToFile <- postscript - } - - # return the correct function with the graphical device, and the correct - # filenames - list(fun = saveToFile, files = fileout) -} - diff --git a/modules/Visualization/tmp/PlotMostLikelyQuantileMap.R b/modules/Visualization/tmp/PlotMostLikelyQuantileMap.R deleted file mode 100644 index 9f9f1914..00000000 --- a/modules/Visualization/tmp/PlotMostLikelyQuantileMap.R +++ /dev/null @@ -1,196 +0,0 @@ -#'Plot Maps of Most Likely Quantiles -#' -#'@author Veronica Torralba, \email{veronica.torralba@bsc.es}, Nicolau Manubens, \email{nicolau.manubens@bsc.es} -#'@description This function receives as main input (via the parameter \code{probs}) a collection of longitude-latitude maps, each containing the probabilities (from 0 to 1) of the different grid cells of belonging to a category. As many categories as maps provided as inputs are understood to exist. The maps of probabilities must be provided on a common rectangular regular grid, and a vector with the longitudes and a vector with the latitudes of the grid must be provided. The input maps can be provided in two forms, either as a list of multiple two-dimensional arrays (one for each category) or as a three-dimensional array, where one of the dimensions corresponds to the different categories. -#' -#'@param probs a list of bi-dimensional arrays with the named dimensions 'latitude' (or 'lat') and 'longitude' (or 'lon'), with equal size and in the same order, or a single tri-dimensional array with an additional dimension (e.g. 'bin') for the different categories. The arrays must contain probability values between 0 and 1, and the probabilities for all categories of a grid cell should not exceed 1 when added. -#'@param lon a numeric vector with the longitudes of the map grid, in the same order as the values along the corresponding dimension in \code{probs}. -#'@param lat a numeric vector with the latitudes of the map grid, in the same order as the values along the corresponding dimension in \code{probs}. -#'@param cat_dim the name of the dimension along which the different categories are stored in \code{probs}. This only applies if \code{probs} is provided in the form of 3-dimensional array. The default expected name is 'bin'. -#'@param bar_titles vector of character strings with the names to be drawn on top of the color bar for each of the categories. As many titles as categories provided in \code{probs} must be provided. -#'@param col_unknown_cat character string with a colour representation of the colour to be used to paint the cells for which no category can be clearly assigned. Takes the value 'white' by default. -#'@param drawleg Where to draw the common colour bar. Can take values TRUE, -#' FALSE or:\cr -#' 'up', 'u', 'U', 'top', 't', 'T', 'north', 'n', 'N'\cr -#' 'down', 'd', 'D', 'bottom', 'b', 'B', 'south', 's', 'S' (default)\cr -#' 'right', 'r', 'R', 'east', 'e', 'E'\cr -#' 'left', 'l', 'L', 'west', 'w', 'W' -#'@param ... additional parameters to be sent to \code{PlotCombinedMap} and \code{PlotEquiMap}. -#'@seealso \code{PlotCombinedMap} and \code{PlotEquiMap} -#' -#'@importFrom maps map -#'@importFrom graphics box image layout mtext par plot.new -#'@importFrom grDevices adjustcolor bmp colorRampPalette dev.cur dev.new dev.off hcl jpeg pdf png postscript svg tiff -#'@examples -#'# Simple example -#'x <- array(1:(20 * 10), dim = c(lat = 10, lon = 20)) / 200 -#'a <- x * 0.6 -#'b <- (1 - x) * 0.6 -#'c <- 1 - (a + b) -#'lons <- seq(0, 359.5, length = 20) -#'lats <- seq(-89.5, 89.5, length = 10) -#'PlotMostLikelyQuantileMap(list(a, b, c), lons, lats, -#' toptitle = 'Most likely tercile map', -#' bar_titles = paste('% of belonging to', c('a', 'b', 'c')), -#' brks = 20, width = 10, height = 8) -#' -#'# More complex example -#'n_lons <- 40 -#'n_lats <- 20 -#'n_timesteps <- 100 -#'n_bins <- 4 -#' -#'# 1. Generation of sample data -#'lons <- seq(0, 359.5, length = n_lons) -#'lats <- seq(-89.5, 89.5, length = n_lats) -#' -#'# This function builds a 3-D gaussian at a specified point in the map. -#'make_gaussian <- function(lon, sd_lon, lat, sd_lat) { -#' w <- outer(lons, lats, function(x, y) dnorm(x, lon, sd_lon) * dnorm(y, lat, sd_lat)) -#' min_w <- min(w) -#' w <- w - min_w -#' w <- w / max(w) -#' w <- t(w) -#' names(dim(w)) <- c('lat', 'lon') -#' w -#'} -#' -#'# This function generates random time series (with values ranging 1 to 5) -#'# according to 2 input weights. -#'gen_data <- function(w1, w2, n) { -#' r <- sample(1:5, n, -#' prob = c(.05, .9 * w1, .05, .05, .9 * w2), -#' replace = TRUE) -#' r <- r + runif(n, -0.5, 0.5) -#' dim(r) <- c(time = n) -#' r -#'} -#' -#'# We build two 3-D gaussians. -#'w1 <- make_gaussian(120, 80, 20, 30) -#'w2 <- make_gaussian(260, 60, -10, 40) -#' -#'# We generate sample data (with dimensions time, lat, lon) according -#'# to the generated gaussians -#'sample_data <- multiApply::Apply(list(w1, w2), NULL, -#' gen_data, n = n_timesteps)$output1 -#' -#'# 2. Binning sample data -#'prob_thresholds <- 1:n_bins / n_bins -#'prob_thresholds <- prob_thresholds[1:(n_bins - 1)] -#'thresholds <- quantile(sample_data, prob_thresholds) -#' -#'binning <- function(x, thresholds) { -#' n_samples <- length(x) -#' n_bins <- length(thresholds) + 1 -#' -#' thresholds <- c(thresholds, max(x)) -#' result <- 1:n_bins -#' lower_threshold <- min(x) - 1 -#' for (i in 1:n_bins) { -#' result[i] <- sum(x > lower_threshold & x <= thresholds[i]) / n_samples -#' lower_threshold <- thresholds[i] -#' } -#' -#' dim(result) <- c(bin = n_bins) -#' result -#'} -#' -#'bins <- multiApply::Apply(sample_data, 'time', binning, thresholds)$output1 -#' -#'# 3. Plotting most likely quantile/bin -#'PlotMostLikelyQuantileMap(bins, lons, lats, -#' toptitle = 'Most likely quantile map', -#' bar_titles = paste('% of belonging to', letters[1:n_bins]), -#' mask = 1 - (w1 + w2 / max(c(w1, w2))), -#' brks = 20, width = 10, height = 8) -#' -#'@export -PlotMostLikelyQuantileMap <- function(probs, lon, lat, cat_dim = 'bin', - bar_titles = NULL, - col_unknown_cat = 'white', drawleg = T, - ...) { - # Check probs - error <- FALSE - if (is.list(probs)) { - if (length(probs) < 1) { - stop("Parameter 'probs' must be of length >= 1 if provided as a list.") - } - check_fun <- function(x) { - is.numeric(x) && (length(dim(x)) == 2) - } - if (!all(sapply(probs, check_fun))) { - error <- TRUE - } - ref_dims <- dim(probs[[1]]) - equal_dims <- all(sapply(probs, function(x) identical(dim(x), ref_dims))) - if (!equal_dims) { - stop("All arrays in parameter 'probs' must have the same dimension ", - "sizes and names when 'probs' is provided as a list of arrays.") - } - num_probs <- length(probs) - probs <- unlist(probs) - dim(probs) <- c(ref_dims, map = num_probs) - cat_dim <- 'map' - } - if (!is.numeric(probs)) { - error <- TRUE - } - if (is.null(dim(probs))) { - error <- TRUE - } - if (length(dim(probs)) != 3) { - error <- TRUE - } - if (error) { - stop("Parameter 'probs' must be either a numeric array with 3 dimensions ", - " or a list of numeric arrays of the same size with the 'lon' and ", - "'lat' dimensions.") - } - dimnames <- names(dim(probs)) - - # Check cat_dim - if (is.character(cat_dim)) { - if (is.null(dimnames)) { - stop("Specified a dimension name in 'cat_dim' but no dimension names provided ", - "in 'probs'.") - } - cat_dim <- which(dimnames == cat_dim) - if (length(cat_dim) < 1) { - stop("Dimension 'cat_dim' not found in 'probs'.") - } - cat_dim <- cat_dim[1] - } else if (!is.numeric(cat_dim)) { - stop("Parameter 'cat_dim' must be either a numeric value or a ", - "dimension name.") - } - if (length(cat_dim) != 1) { - stop("Parameter 'cat_dim' must be of length 1.") - } - cat_dim <- round(cat_dim) - nprobs <- dim(probs)[cat_dim] - - # Check bar_titles - if (is.null(bar_titles)) { - if (nprobs == 3) { - bar_titles <- c("Below normal (%)", "Normal (%)", "Above normal (%)") - } else if (nprobs == 5) { - bar_titles <- c("Low (%)", "Below normal (%)", - "Normal (%)", "Above normal (%)", "High (%)") - } else { - bar_titles <- paste0("Cat. ", 1:nprobs, " (%)") - } - } - - minimum_value <- ceiling(1 / nprobs * 10 * 1.1) * 10 - - # By now, the PlotCombinedMap function is included below in this file. - # In the future, PlotCombinedMap will be part of s2dverification and will - # be properly imported. - PlotCombinedMap(probs * 100, lon, lat, map_select_fun = max, - display_range = c(minimum_value, 100), - map_dim = cat_dim, - bar_titles = bar_titles, - col_unknown_map = col_unknown_cat, - drawleg = drawleg, ...) -} diff --git a/modules/Visualization/tmp/clim.palette.R b/modules/Visualization/tmp/clim.palette.R deleted file mode 100644 index b23ff842..00000000 --- a/modules/Visualization/tmp/clim.palette.R +++ /dev/null @@ -1,69 +0,0 @@ -#'Generate Climate Color Palettes -#' -#'Generates a colorblind friendly color palette with color ranges useful in -#'climate temperature variable plotting. -#' -#'@param palette Which type of palette to generate: from blue through white -#' to red ('bluered'), from red through white to blue ('redblue'), from -#' yellow through orange to red ('yellowred'), from red through orange to -#' red ('redyellow'), from purple through white to orange ('purpleorange'), -#' and from orange through white to purple ('orangepurple'). -#'@param n Number of colors to generate. -#' -#'@examples -#'lims <- seq(-1, 1, length.out = 21) -#' -#'ColorBar(lims, color_fun = clim.palette('redyellow')) -#' -#'cols <- clim.colors(20) -#'ColorBar(lims, cols) -#' -#'@rdname clim.palette -#'@importFrom grDevices colorRampPalette -#'@export -clim.palette <- function(palette = "bluered") { - if (palette == "bluered") { - colorbar <- colorRampPalette(rev(c("#67001f", "#b2182b", "#d6604d", - "#f4a582", "#fddbc7", "#f7f7f7", - "#d1e5f0", "#92c5de", "#4393c3", - "#2166ac", "#053061"))) - attr(colorbar, 'na_color') <- 'pink' - } else if (palette == "redblue") { - colorbar <- colorRampPalette(c("#67001f", "#b2182b", "#d6604d", - "#f4a582", "#fddbc7", "#f7f7f7", - "#d1e5f0", "#92c5de", "#4393c3", - "#2166ac", "#053061")) - attr(colorbar, 'na_color') <- 'pink' - } else if (palette == "yellowred") { - colorbar <- colorRampPalette(c("#ffffcc", "#ffeda0", "#fed976", - "#feb24c", "#fd8d3c", "#fc4e2a", - "#e31a1c", "#bd0026", "#800026")) - attr(colorbar, 'na_color') <- 'pink' - } else if (palette == "redyellow") { - colorbar <- colorRampPalette(rev(c("#ffffcc", "#ffeda0", "#fed976", - "#feb24c", "#fd8d3c", "#fc4e2a", - "#e31a1c", "#bd0026", "#800026"))) - attr(colorbar, 'na_color') <- 'pink' - } else if (palette == "purpleorange") { - colorbar <- colorRampPalette(c("#2d004b", "#542789", "#8073ac", - "#b2abd2", "#d8daeb", "#f7f7f7", - "#fee0b6", "#fdb863", "#e08214", - "#b35806", "#7f3b08")) - attr(colorbar, 'na_color') <- 'pink' - } else if (palette == "orangepurple") { - colorbar <- colorRampPalette(rev(c("#2d004b", "#542789", "#8073ac", - "#b2abd2", "#d8daeb", "#f7f7f7", - "#fee0b6", "#fdb863", "#e08214", - "#b35806", "#7f3b08"))) - attr(colorbar, 'na_color') <- 'pink' - } else { - stop("Parameter 'palette' must be one of 'bluered', 'redblue', 'yellowred'", - "'redyellow', 'purpleorange' or 'orangepurple'.") - } - colorbar -} -#'@rdname clim.palette -#'@export -clim.colors <- function(n, palette = "bluered") { - clim.palette(palette)(n) -} diff --git a/recipes/atomic_recipes/recipe_system7c3s-tas.yml b/recipes/atomic_recipes/recipe_system7c3s-tas.yml index 47cfc31b..a2a87c23 100644 --- a/recipes/atomic_recipes/recipe_system7c3s-tas.yml +++ b/recipes/atomic_recipes/recipe_system7c3s-tas.yml @@ -45,5 +45,5 @@ Analysis: Run: Loglevel: INFO Terminal: yes - output_dir: /esarchive/scratch/vagudets/repos/auto-s2s/out-logs/ + output_dir: /esarchive/scratch/vagudets/auto-s2s-outputs/ code_dir: /esarchive/scratch/vagudets/repos/auto-s2s/ -- GitLab From 547e251d61ca52fa7bceafc0f4c74f7b2118f2da Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Tue, 4 Apr 2023 11:39:53 +0200 Subject: [PATCH 116/388] Change recipe --- modules/test_seasonal.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/test_seasonal.R b/modules/test_seasonal.R index cddc1b37..4dd34b61 100644 --- a/modules/test_seasonal.R +++ b/modules/test_seasonal.R @@ -5,7 +5,7 @@ source("modules/Skill/Skill.R") source("modules/Saving/Saving.R") source("modules/Visualization/Visualization.R") -recipe_file <- "recipes/tests/recipe_seasonal_two-variables.yml" +recipe_file <- "recipes/atomic_recipes/recipe_system7c3s-tas.yml" recipe <- prepare_outputs(recipe_file) # Load datasets -- GitLab From 130ffbcc91538a0b84e82860121dcfc60ab8a3e2 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Tue, 4 Apr 2023 13:06:49 +0200 Subject: [PATCH 117/388] Add region to path if multiple regions are chosen --- modules/Saving/paths2save.R | 5 +- recipes/tests/recipe_multiregion.yml | 76 +++++++++++++++++++++++ recipes/tests/recipe_seasonal_example.yml | 40 ++++++------ 3 files changed, 100 insertions(+), 21 deletions(-) create mode 100644 recipes/tests/recipe_multiregion.yml diff --git a/modules/Saving/paths2save.R b/modules/Saving/paths2save.R index 93196b86..d22d9856 100644 --- a/modules/Saving/paths2save.R +++ b/modules/Saving/paths2save.R @@ -48,7 +48,7 @@ get_filename <- function(dir, recipe, var, date, agg, file.type) { "exp" = {file <- paste0(var, gg, "_", date)}, "obs" = {file <- paste0(var, gg, "-obs_", date)}, "percentiles" = {file <- paste0(var, gg, "-percentiles_", dd, - shortdate)}, + shortdate)}, "probs" = {file <- paste0(var, gg, "-probs_", date)}, "bias" = {file <- paste0(var, gg, "-bias_", date)}) } @@ -96,6 +96,9 @@ get_dir <- function(recipe, agg = "global") { calib.method <- tolower(recipe$Analysis$Workflow$Calibration$method) store.freq <- recipe$Analysis$Variables$freq ## TODO: Change "_country" + if (!is.null(recipe$Analysis$Region$name)) { + outdir <- paste0(outdir, "/", recipe$Analysis$Region$name) + } switch(tolower(agg), "country" = {dir <- paste0(outdir, "/", system, "/", calib.method, "-", store.freq, "/", variable, diff --git a/recipes/tests/recipe_multiregion.yml b/recipes/tests/recipe_multiregion.yml new file mode 100644 index 00000000..bcb4d126 --- /dev/null +++ b/recipes/tests/recipe_multiregion.yml @@ -0,0 +1,76 @@ +################################################################################ +## RECIPE DESCRIPTION +################################################################################ + +Description: + Author: V. Agudetse + Info: Test Independent verification of two variables, two sdates, two systems + +################################################################################ +## ANALYSIS CONFIGURATION +################################################################################ + +Analysis: + Horizon: Seasonal + Variables: + - {name: tas, freq: monthly_mean} + Datasets: + System: + - {name: ECMWF-SEAS5} + - {name: Meteo-France-System7} + Multimodel: no + Reference: + - {name: ERA5} + Time: + sdate: + - '0101' + - '0601' + fcst_year: + hcst_start: '2000' + hcst_end: '2016' + ftime_min: 1 + ftime_max: 6 + Region: + - {name: "tropics", latmin: -5, latmax: 5, lonmin: -10, lonmax: 10} + - {name: "nino34", latmin: -5, latmax: 5, lonmin: -10, lonmax: 60} + Regrid: + method: conservative + type: to_system + Workflow: + Anomalies: + compute: yes + cross_validation: yes + Calibration: + method: raw + Skill: + metric: RPS, RPSS, CRPS, CRPSS, FRPSS, BSS10, BSS90, mean_bias, mean_bias_SS + Probabilities: + percentiles: [[1/3, 2/3], [1/10, 9/10], [1/4, 2/4, 3/4]] + Indicators: + index: no + ncores: 8 + remove_NAs: yes + Output_format: S2S4E + +################################################################################ +## Run CONFIGURATION +################################################################################ +Run: + Loglevel: INFO + Terminal: yes + filesystem: esarchive + output_dir: /esarchive/scratch/vagudets/repos/auto-s2s/out-logs/ + code_dir: /esarchive/scratch/vagudets/repos/auto-s2s/ + autosubmit: yes + # fill only if using autosubmit + auto_conf: + script: /esarchive/scratch/vagudets/repos/auto-s2s/modules/test_parallel_workflow.R + expid: a5no # autosubmit experiment ID + hpc_user: bsc32762 # your hpc username + wallclock: 04:00 # hh:mm + processors_per_job: 8 # use ncores parameter? + platform: nord3v2 # make this constant? + email_notifications: yes # enable/disable email notifications + email_address: victoria.agudetse@bsc.es # email address for notifications + notify_completed: no # notify me by email when a job finishes + notify_failed: yes # notify me by email when a job fails diff --git a/recipes/tests/recipe_seasonal_example.yml b/recipes/tests/recipe_seasonal_example.yml index 0a22d3ab..cb941f84 100644 --- a/recipes/tests/recipe_seasonal_example.yml +++ b/recipes/tests/recipe_seasonal_example.yml @@ -12,26 +12,26 @@ Description: Analysis: Horizon: Seasonal - Variables: # ECVs and Indicators? + Variables: - {name: tas, freq: monthly_mean} - {name: prlr, freq: monthly_mean} Datasets: - System: # multiple systems for single model, split if Multimodel = F + System: - {name: ECMWF-SEAS5} - {name: Meteo-France-System7} - Multimodel: False # single option + Multimodel: no Reference: - - {name: ERA5} # multiple references for single model? + - {name: ERA5} Time: - sdate: # list, split + sdate: - '0101' - - '0201' - fcst_year: # list, don't split, handled internally - hcst_start: '2000' # single option - hcst_end: '2016' # single option - ftime_min: 1 # single option - ftime_max: 6 # single option - Region: # multiple lists, Add region name if there is more than 1 region + - '0601' + fcst_year: + hcst_start: '2000' + hcst_end: '2016' + ftime_min: 1 + ftime_max: 6 + Region: - {latmin: -10, latmax: 10, lonmin: -10, lonmax: 10} Regrid: method: conservative @@ -41,16 +41,16 @@ Analysis: compute: yes cross_validation: yes Calibration: - method: raw ## TODO: list, split? + method: raw Skill: - metric: RPS, RPSS, CRPS, CRPSS, FRPSS, BSS10, BSS90, mean_bias, mean_bias_SS # list, don't split + metric: RPS, RPSS, CRPS, CRPSS, FRPSS, BSS10, BSS90, mean_bias, mean_bias_SS Probabilities: - percentiles: [[1/3, 2/3], [1/10, 9/10], [1/4, 2/4, 3/4]] # list, don't split + percentiles: [[1/3, 2/3], [1/10, 9/10], [1/4, 2/4, 3/4]] Indicators: - index: no # ? + index: no ncores: 8 - remove_NAs: yes # bool, don't split - Output_format: S2S4E # string, don't split + remove_NAs: yes + Output_format: S2S4E ################################################################################ ## Run CONFIGURATION @@ -64,8 +64,8 @@ Run: autosubmit: yes # fill only if using autosubmit auto_conf: - script: /esarchive/scratch/vagudets/repos/auto-s2s/modules/test_parallel_workflow.R # path to the script to run - expid: a5no ## if left empty, create new exp? + script: /esarchive/scratch/vagudets/repos/auto-s2s/modules/test_parallel_workflow.R + expid: a5no # autosubmit experiment ID hpc_user: bsc32762 # your hpc username wallclock: 04:00 # hh:mm processors_per_job: 8 # use ncores parameter? -- GitLab From d2bf2ae9b5281513d37a82a66bef8649c75cea11 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Thu, 6 Apr 2023 11:52:01 +0200 Subject: [PATCH 118/388] Add checks for script in auto_conf --- tools/check_recipe.R | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/tools/check_recipe.R b/tools/check_recipe.R index fe8260dc..eaec8f9a 100644 --- a/tools/check_recipe.R +++ b/tools/check_recipe.R @@ -346,9 +346,9 @@ check_recipe <- function(recipe) { # AUTOSUBMIT CHECKS # --------------------------------------------------------------------- - AUTO_PARAMS <- c("expid", "hpc_user", "wallclock", "processors_per_job", - "platform", "email_notifications", "email_address", - "notify_completed", "notify_failed") + AUTO_PARAMS <- c("script", "expid", "hpc_user", "wallclock", + "processors_per_job", "platform", "email_notifications", + "email_address", "notify_completed", "notify_failed") # Autosubmit false by default if (is.null(recipe$Run$autosubmit)) { recipe$Run$autosubmit <- F @@ -368,6 +368,16 @@ check_recipe <- function(recipe) { "following: ", paste(AUTO_PARAMS, collapse = ", "), ".")) error_status <- T } + # Check that the script is not NULL and exists + if (is.null(recipe$Run$auto_conf$script)) { + error(recipe$Run$logger, + "A script must be provided to run the recipe with autosubmit.") + error_status <- T + } else if (!file.exists(recipe$Run$auto_conf$script)) { + error(recipe$Run$logger, + "Could not find the file for the script in 'auto_conf'.") + error_status <- T + } # Check that the experiment ID exists if (is.null(recipe$Run$auto_conf$expid)) { error(recipe$Run$logger, -- GitLab From aa11e231b19443bfb1d011192e18efe69aa1374d Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Thu, 6 Apr 2023 15:41:11 +0200 Subject: [PATCH 119/388] fix MARS recipe --- recipes/tests/recipe_autosubmit_marstest.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/recipes/tests/recipe_autosubmit_marstest.yml b/recipes/tests/recipe_autosubmit_marstest.yml index 14e86231..f90f2da2 100644 --- a/recipes/tests/recipe_autosubmit_marstest.yml +++ b/recipes/tests/recipe_autosubmit_marstest.yml @@ -56,7 +56,7 @@ Run: Loglevel: INFO Terminal: yes filesystem: mars - output_dir: /esarchive/scratch/vagudets/repos/auto-s2s/out-logs/ + output_dir: /esarchive/scratch/vagudets/auto-s2s-outputs/ code_dir: /esarchive/scratch/vagudets/repos/auto-s2s/ autosubmit: yes # fill only if using autosubmit -- GitLab From d4127278d35fa792b8c050c35a909a9fbc2985e3 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Thu, 6 Apr 2023 15:41:49 +0200 Subject: [PATCH 120/388] Fix bug in divide_recipe that resulted in unnecessary duplication --- tools/divide_recipe.R | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/tools/divide_recipe.R b/tools/divide_recipe.R index 8bbe48fa..f9d2bf9d 100644 --- a/tools/divide_recipe.R +++ b/tools/divide_recipe.R @@ -35,7 +35,7 @@ divide_recipe <- function(recipe) { # duplicate recipe by Datasets: # check Systems - if (recipe$Analysis$Datasets$Multimodel %in% c(TRUE,'both')) { + if (recipe$Analysis$Datasets$Multimodel %in% c(TRUE, 'both')) { for (reci in 1:length(all_recipes)) { all_recipes[[reci]]$Analysis$Datasets <- list(System = recipe$Analysis$Datasets$System, @@ -77,10 +77,10 @@ divide_recipe <- function(recipe) { rm(list = 'recipes') } # check References - for (ref in 1:length(recipe$Analysis$Datasets$Reference$name)) { + for (ref in 1:length(recipe$Analysis$Datasets$Reference)) { for (reci in 1:length(all_recipes)) { all_recipes[[reci]]$Analysis$Datasets$Reference$name <- - recipe$Analysis$Datasets$Reference$name[[ref]] + recipe$Analysis$Datasets$Reference$name[[ref]] } if (ref == 1) { recipes <- all_recipes @@ -95,7 +95,11 @@ divide_recipe <- function(recipe) { for (reci in 1:length(all_recipes)) { all_recipes[[reci]]$Analysis$Region <- recipe$Analysis$Region[[reg]] } - recipes <- append(recipes, all_recipes) + if (reg == 1) { + recipes <- all_recipes + } else { + recipes <- append(recipes, all_recipes) + } } all_recipes <- recipes rm(list = 'recipes') -- GitLab From f559b883444a97c750bd725b18a478a29019fb3e Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Thu, 6 Apr 2023 16:33:52 +0200 Subject: [PATCH 121/388] divide_recipe bugfix --- tools/divide_recipe.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/divide_recipe.R b/tools/divide_recipe.R index f9d2bf9d..e9309be8 100644 --- a/tools/divide_recipe.R +++ b/tools/divide_recipe.R @@ -79,8 +79,8 @@ divide_recipe <- function(recipe) { # check References for (ref in 1:length(recipe$Analysis$Datasets$Reference)) { for (reci in 1:length(all_recipes)) { - all_recipes[[reci]]$Analysis$Datasets$Reference$name <- - recipe$Analysis$Datasets$Reference$name[[ref]] + all_recipes[[reci]]$Analysis$Datasets$Reference <- + recipe$Analysis$Datasets$Reference[[ref]] } if (ref == 1) { recipes <- all_recipes -- GitLab From 6c8ce05d6f76c2530a546f97249fa9c75af3c120 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Thu, 6 Apr 2023 16:44:32 +0200 Subject: [PATCH 122/388] Correct MARS test recipe --- recipes/tests/recipe_autosubmit_marstest.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/recipes/tests/recipe_autosubmit_marstest.yml b/recipes/tests/recipe_autosubmit_marstest.yml index f90f2da2..aaec7ed1 100644 --- a/recipes/tests/recipe_autosubmit_marstest.yml +++ b/recipes/tests/recipe_autosubmit_marstest.yml @@ -22,7 +22,7 @@ Analysis: - {name: ERA5} # multiple references for single model? Time: sdate: # list, split - - '0101' + - '1101' fcst_year: '2020' # list, don't split, handled internally hcst_start: '2000' # single option hcst_end: '2003' # single option -- GitLab From d33738a6a66802db03974086741b6097edf9873d Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Tue, 11 Apr 2023 15:40:16 +0200 Subject: [PATCH 123/388] Add Visualization plot options to recipe --- modules/Visualization/Visualization.R | 76 ++++++++++++------- .../atomic_recipes/recipe_system7c3s-tas.yml | 4 +- 2 files changed, 51 insertions(+), 29 deletions(-) diff --git a/modules/Visualization/Visualization.R b/modules/Visualization/Visualization.R index 84e0a139..c3c14e06 100644 --- a/modules/Visualization/Visualization.R +++ b/modules/Visualization/Visualization.R @@ -22,7 +22,9 @@ plot_data <- function(recipe, # skill_metrics: list of arrays containing the computed skill metrics # significance: Bool. Whether to include significance dots where applicable - outdir <- paste0(get_dir(recipe), "/plots/") + plots <- strsplit(recipe$Analysis$Workflow$Visualization$plots, ", | |,")[[1]] + recipe$Run$output_dir <- paste0(recipe$Run$output_dir, "/plots/") + outdir <- paste0(get_dir(recipe)) dir.create(outdir, showWarnings = FALSE, recursive = TRUE) if ((is.null(skill_metrics)) && (is.null(data$fcst))) { @@ -43,20 +45,38 @@ plot_data <- function(recipe, } # Plot skill metrics - if (!is.null(skill_metrics)) { - plot_skill_metrics(recipe, archive, data$hcst, skill_metrics, outdir, - significance) + if ("skill_metrics" %in% plots) { + if (!is.null(skill_metrics)) { + plot_skill_metrics(recipe, archive, data$hcst, skill_metrics, outdir, + significance) + } else { + error(recipe$Run$logger, + paste0("The skill metric plots have been requested, but the ", + "parameter 'skill_metrics' is NULL")) + } } # Plot forecast ensemble mean - if (!is.null(data$fcst)) { - plot_ensemble_mean(recipe, archive, data$fcst, outdir) + if ("forecast_ensemble_mean" %in% plots) { + if (!is.null(data$fcst)) { + plot_ensemble_mean(recipe, archive, data$fcst, outdir) + } else { + error(recipe$Run$logger, + paste0("The forecast ensemble mean plot has been requested, but ", + "there is no fcst element in 'data'")) + } } # Plot Most Likely Terciles - if ((!is.null(probabilities)) && (!is.null(data$fcst))) { - plot_most_likely_terciles(recipe, archive, data$fcst, - probabilities, outdir) + if ("most_likely_terciles" %in% plots) { + if ((!is.null(probabilities)) && (!is.null(data$fcst))) { + plot_most_likely_terciles(recipe, archive, data$fcst, + probabilities, outdir) + } else { + error(recipe$Run$logger, + paste0("For the most likely terciles plot, both the fsct and the ", + "probabilities must be provided.")) + } } } @@ -87,7 +107,7 @@ plot_skill_metrics <- function(recipe, archive, data_cube, skill_metrics, hcst_period <- paste0(recipe$Analysis$Time$hcst_start, "-", recipe$Analysis$Time$hcst_end) init_month <- lubridate::month(as.numeric(substr(recipe$Analysis$Time$sdate, - start = 1, stop = 2)), + start = 1, stop = 2)), label = T, abb = T) # Define color palette and number of breaks according to output format ## TODO: Make separate function @@ -170,23 +190,23 @@ plot_skill_metrics <- function(recipe, archive, data_cube, skill_metrics, if ((significance) && (significance_name %in% names(skill_metrics))) { skill_significance <- skill_metrics[[significance_name]] skill_significance <- Reorder(skill_significance, c("time", - "longitude", - "latitude")) + "longitude", + "latitude")) # Split skill significance into list of lists, along the time dimension # This allows for plotting the significance dots correctly. skill_significance <- ClimProjDiags::ArrayToList(skill_significance, - dim = 'time', - level = "sublist", - names = "dots") + dim = 'time', + level = "sublist", + names = "dots") } else { skill_significance <- NULL } # Define output file name and titles outfile <- paste0(outdir, name, ".png") toptitle <- paste(display_name, "-", data_cube$attrs$Variable$varName, - "-", system_name, "-", init_month, hcst_period) + "-", system_name, "-", init_month, hcst_period) months <- unique(lubridate::month(data_cube$attrs$Dates, - label = T, abb = F)) + label = T, abb = F)) titles <- as.vector(months) # Plot suppressWarnings( @@ -194,11 +214,11 @@ plot_skill_metrics <- function(recipe, archive, data_cube, skill_metrics, asplit(skill, MARGIN=1), # Splitting array into a list longitude, latitude, special_args = skill_significance, - dot_symbol = 20, - toptitle = toptitle, - title_scale = 0.6, - titles = titles, - filled.continents=F, + dot_symbol = 20, + toptitle = toptitle, + title_scale = 0.6, + titles = titles, + filled.continents=F, brks = brks, cols = cols, col_inf = col_inf, @@ -280,13 +300,13 @@ plot_ensemble_mean <- function(recipe, archive, fcst, outdir) { outfile <- paste0(outdir, "forecast_ensemble_mean_", i_syear, ".png") } toptitle <- paste("Forecast Ensemble Mean -", variable, "-", system_name, - "- Initialization:", i_syear) + "- Initialization:", i_syear) months <- lubridate::month(fcst$attrs$Dates[1, 1, which(start_date == i_syear), ], label = T, abb = F) titles <- as.vector(months) # Plots PlotLayout(PlotEquiMap, c('longitude', 'latitude'), - i_ensemble_mean, longitude, latitude, + i_ensemble_mean, longitude, latitude, filled.continents = F, toptitle = toptitle, title_scale = 0.6, @@ -360,9 +380,9 @@ plot_most_likely_terciles <- function(recipe, archive, outfile <- paste0(outdir, "forecast_most_likely_tercile_", i_syear, ".png") } toptitle <- paste("Most Likely Tercile -", variable, "-", system_name, "-", - "Initialization:", i_syear) + "Initialization:", i_syear) months <- lubridate::month(fcst$attrs$Dates[1, 1, which(start_date == i_syear), ], - label = T, abb = F) + label = T, abb = F) ## TODO: Ensure this works for daily and sub-daily cases titles <- as.vector(months) @@ -371,8 +391,8 @@ plot_most_likely_terciles <- function(recipe, archive, ## on. suppressWarnings( PlotLayout(PlotMostLikelyQuantileMap, c('bin', 'longitude', 'latitude'), - cat_dim = 'bin', - i_probs_fcst, longitude, latitude, + cat_dim = 'bin', + i_probs_fcst, longitude, latitude, coast_width = 1.5, title_scale = 0.6, legend_scale = 0.8, #cex_bar_titles = 0.6, diff --git a/recipes/atomic_recipes/recipe_system7c3s-tas.yml b/recipes/atomic_recipes/recipe_system7c3s-tas.yml index e4e0a087..b01fdd20 100644 --- a/recipes/atomic_recipes/recipe_system7c3s-tas.yml +++ b/recipes/atomic_recipes/recipe_system7c3s-tas.yml @@ -37,10 +37,12 @@ Analysis: save_outputs: 'none' # 'all'/'none'/'exp_only'/'fcst_only' Skill: metric: RPS RPSS CRPS CRPSS FRPSS BSS10 BSS90 EnsCorr Corr mean_bias mean_bias_SS - save_outputs: 'all' # 'all'/'none'/list of metrics + save_outputs: 'all' # 'all'/'none' Probabilities: percentiles: [[1/3, 2/3], [1/10, 9/10], [1/4, 2/4, 3/4]] save_outputs: 'percentiles_only' # 'all'/'none'/'bins_only'/'percentiles_only' + Visualization: + plots: skill_metrics, forecast_ensemble_mean, most_likely_terciles Indicators: index: no ncores: 10 -- GitLab From ed30a4744f74b20513e0aab5bcb0703f50581e84 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Tue, 11 Apr 2023 16:42:36 +0200 Subject: [PATCH 124/388] Add and source temporarily improved s2dv functions RPS and RPSS --- modules/Skill/R/tmp/GetProbs.R | 258 ++++++++++++++++ modules/Skill/R/tmp/RPS.R | 270 +++++++++++++++++ modules/Skill/R/tmp/RPSS.R | 428 +++++++++++++++++++++++++++ modules/Skill/R/tmp/RandomWalkTest.R | 184 ++++++++++++ modules/Skill/Skill.R | 8 +- 5 files changed, 1146 insertions(+), 2 deletions(-) create mode 100644 modules/Skill/R/tmp/GetProbs.R create mode 100644 modules/Skill/R/tmp/RPS.R create mode 100644 modules/Skill/R/tmp/RPSS.R create mode 100644 modules/Skill/R/tmp/RandomWalkTest.R diff --git a/modules/Skill/R/tmp/GetProbs.R b/modules/Skill/R/tmp/GetProbs.R new file mode 100644 index 00000000..59304b4e --- /dev/null +++ b/modules/Skill/R/tmp/GetProbs.R @@ -0,0 +1,258 @@ +#'Compute probabilistic forecasts or the corresponding observations +#' +#'Compute probabilistic forecasts from an ensemble based on the relative +#'thresholds, or the probabilistic observations (i.e., which probabilistic +#'category was observed). A reference period can be specified to calculate the +#'absolute thresholds between each probabilistic category. The absolute +#'thresholds can be computed in cross-validation mode. If data is an ensemble, +#'the probabilities are calculated as the percentage of members that fall into +#'each category. For observations (or forecast without member dimension), 1 +#'means that the event happened, while 0 indicates that the event did not +#'happen. Weighted probabilities can be computed if the weights are provided for +#'each ensemble member and time step. +#' +#'@param data A named numerical array of the forecasts or observations with, at +#' least, time dimension. +#'@param time_dim A character string indicating the name of the time dimension. +#' The default value is 'sdate'. +#'@param memb_dim A character string indicating the name of the member dimension +#' to compute the probabilities of the forecast, or NULL if there is no member +#' dimension (e.g., for observations, or for forecast with only one ensemble +#' member). The default value is 'member'. +#'@param prob_thresholds A numeric vector of the relative thresholds (from 0 to +#' 1) between the categories. The default value is c(1/3, 2/3), which +#' corresponds to tercile equiprobable categories. +#'@param indices_for_quantiles A vector of the indices to be taken along +#' 'time_dim' for computing the absolute thresholds between the probabilistic +#' categories. If NULL, the whole period is used. The default value is NULL. +#'@param weights A named numerical array of the weights for 'data' with +#' dimensions 'time_dim' and 'memb_dim' (if 'data' has them). The default value +#' is NULL. The ensemble should have at least 70 members or span at least 10 +#' time steps and have more than 45 members if consistency between the weighted +#' and unweighted methodologies is desired. +#'@param cross.val A logical indicating whether to compute the thresholds +#' between probabilistic categories in cross-validation mode. The default value +#' is FALSE. +#'@param ncores An integer indicating the number of cores to use for parallel +#' computation. The default value is NULL. +#' +#'@return +#'A numerical array of probabilities with dimensions c(bin, the rest dimensions +#'of 'data' except 'memb_dim'). 'bin' dimension has the length of probabilistic +#'categories, i.e., \code{length(prob_thresholds) + 1}. +#' +#'@examples +#'data <- array(rnorm(2000), dim = c(ensemble = 25, sdate = 20, time = 4)) +#'res <- GetProbs(data = data, time_dim = 'sdate', memb_dim = 'ensemble', +#' indices_for_quantiles = 4:17) +#' +#'@import multiApply +#'@importFrom easyVerification convert2prob +#'@export +GetProbs <- function(data, time_dim = 'sdate', memb_dim = 'member', indices_for_quantiles = NULL, + prob_thresholds = c(1/3, 2/3), weights = NULL, cross.val = FALSE, ncores = NULL) { + + # Check inputs + ## data + if (is.null(data)) { + stop("Parameter 'data' cannot be NULL.") + } + if (!is.numeric(data)) { + stop("Parameter 'data' must be a numeric array.") + } + if (any(is.null(names(dim(data)))) | any(nchar(names(dim(data))) == 0)) { + stop("Parameter 'data' must have dimension names.") + } + ## time_dim + if (!is.character(time_dim) | length(time_dim) != 1) + stop('Parameter "time_dim" must be a character string.') + if (!time_dim %in% names(dim(data))) { + stop("Parameter 'time_dim' is not found in 'data' dimensions.") + } + ## memb_dim + if (!is.null(memb_dim)) { + if (!is.character(memb_dim) | length(memb_dim) > 1) { + stop("Parameter 'memb_dim' must be a character string.") + } + if (!memb_dim %in% names(dim(data))) { + stop("Parameter 'memb_dim' is not found in 'data' dimensions. If no member ", + "dimension exists, set it as NULL.") + } + } + ## prob_thresholds + if (!is.numeric(prob_thresholds) | !is.vector(prob_thresholds) | + any(prob_thresholds <= 0) | any(prob_thresholds >= 1)) { + stop("Parameter 'prob_thresholds' must be a numeric vector between 0 and 1.") + } + ## indices_for_quantiles + if (is.null(indices_for_quantiles)) { + indices_for_quantiles <- 1:dim(data)[time_dim] + } else { + if (!is.numeric(indices_for_quantiles) | !is.vector(indices_for_quantiles)) { + stop("Parameter 'indices_for_quantiles' must be NULL or a numeric vector.") + } else if (length(indices_for_quantiles) > dim(data)[time_dim] | + max(indices_for_quantiles) > dim(data)[time_dim] | + any(indices_for_quantiles < 1)) { + stop("Parameter 'indices_for_quantiles' should be the indices of 'time_dim'.") + } + } + ## weights + if (!is.null(weights)) { + if (!is.array(weights) | !is.numeric(weights)) + stop("Parameter 'weights' must be a named numeric array.") + +# if (is.null(dat_dim)) { + if (!is.null(memb_dim)) { + lendim_weights <- 2 + namesdim_weights <- c(time_dim, memb_dim) + } else { + lendim_weights <- 1 + namesdim_weights <- c(time_dim) + } + if (length(dim(weights)) != lendim_weights | + any(!names(dim(weights)) %in% namesdim_weights)) { + stop(paste0("Parameter 'weights' must have dimension ", + paste0(namesdim_weights, collapse = ' and '), ".")) + } + if (any(dim(weights)[namesdim_weights] != dim(data)[namesdim_weights])) { + stop(paste0("Parameter 'weights' must have the same dimension length as ", + paste0(namesdim_weights, collapse = ' and '), " dimension in 'data'.")) + } + weights <- Reorder(weights, namesdim_weights) + +# } else { +# if (length(dim(weights)) != 3 | any(!names(dim(weights)) %in% c(memb_dim, time_dim, dat_dim))) +# stop("Parameter 'weights' must have three dimensions with the names of 'memb_dim', 'time_dim' and 'dat_dim'.") +# if (dim(weights)[memb_dim] != dim(exp)[memb_dim] | +# dim(weights)[time_dim] != dim(exp)[time_dim] | +# dim(weights)[dat_dim] != dim(exp)[dat_dim]) { +# stop(paste0("Parameter 'weights' must have the same dimension lengths ", +# "as 'memb_dim', 'time_dim' and 'dat_dim' in 'exp'.")) +# } +# weights <- Reorder(weights, c(time_dim, memb_dim, dat_dim)) +# } + } + ## cross.val + if (!is.logical(cross.val) | length(cross.val) > 1) { + stop("Parameter 'cross.val' must be either TRUE or FALSE.") + } + ## ncores + if (!is.null(ncores)) { + if (!is.numeric(ncores) | ncores %% 1 != 0 | ncores <= 0 | + length(ncores) > 1) { + stop("Parameter 'ncores' must be either NULL or a positive integer.") + } + } + + ############################### + + res <- Apply(data = list(data = data), + target_dims = c(time_dim, memb_dim), #, dat_dim), + output_dims = c("bin", time_dim), + fun = .GetProbs, +# dat_dim = dat_dim, + time_dim = time_dim, + memb_dim = memb_dim, + prob_thresholds = prob_thresholds, + indices_for_quantiles = indices_for_quantiles, + weights = weights, cross.val = cross.val, ncores = ncores)$output1 + + return(res) +} + +.GetProbs <- function(data, time_dim = 'sdate', memb_dim = 'member', indices_for_quantiles = NULL, + prob_thresholds = c(1/3, 2/3), weights = NULL, cross.val = FALSE) { + # .GetProbs() is used in RPS, RPSS, ROCSS + # data + ## if data is exp: [sdate, memb] + ## if data is obs: [sdate, (memb)] + # weights: [sdate, (memb)], same as data + + # Add dim [memb = 1] to data if it doesn't have memb_dim + if (length(dim(data)) == 1) { + dim(data) <- c(dim(data), 1) + if (!is.null(weights)) dim(weights) <- c(dim(weights), 1) + } + # Absolute thresholds + if (cross.val) { + quantiles <- array(NA, dim = c(bin = length(prob_thresholds), sdate = dim(data)[1])) + for (i_time in 1:dim(data)[1]) { + if (is.null(weights)) { + quantiles[, i_time] <- quantile(x = as.vector(data[indices_for_quantiles[which(indices_for_quantiles != i_time)], ]), + probs = prob_thresholds, type = 8, na.rm = TRUE) + } else { + # weights: [sdate, memb] + sorted_arrays <- .sorted_distributions(data[indices_for_quantiles[which(indices_for_quantiles != i_time)], ], + weights[indices_for_quantiles[which(indices_for_quantiles != i_time)], ]) + sorted_data <- sorted_arrays$data + cumulative_weights <- sorted_arrays$cumulative_weights + quantiles[, i_time] <- approx(cumulative_weights, sorted_data, prob_thresholds, "linear")$y + } + } + + } else { + if (is.null(weights)) { + quantiles <- quantile(x = as.vector(data[indices_for_quantiles, ]), + probs = prob_thresholds, type = 8, na.rm = TRUE) + } else { + # weights: [sdate, memb] + sorted_arrays <- .sorted_distributions(data[indices_for_quantiles, ], + weights[indices_for_quantiles, ]) + sorted_data <- sorted_arrays$data + cumulative_weights <- sorted_arrays$cumulative_weights + quantiles <- approx(cumulative_weights, sorted_data, prob_thresholds, "linear")$y + } + quantiles <- array(rep(quantiles, dim(data)[1]), dim = c(bin = length(quantiles), dim(data)[1])) + } + # quantiles: [bin-1, sdate] + + # Probabilities + probs <- array(dim = c(dim(quantiles)[1] + 1, dim(data)[1])) # [bin, sdate] + for (i_time in 1:dim(data)[1]) { + if (anyNA(data[i_time, ])) { + probs[, i_time] <- rep(NA, dim = dim(quantiles)[1] + 1) + } else { + if (is.null(weights)) { + probs[, i_time] <- colMeans(easyVerification::convert2prob(data[i_time, ], + threshold = quantiles[, i_time])) + } else { + sorted_arrays <- .sorted_distributions(data[i_time, ], weights[i_time, ]) + sorted_data <- sorted_arrays$data + cumulative_weights <- sorted_arrays$cumulative_weights + # find any quantiles that are outside the data range + integrated_probs <- array(dim = dim(quantiles)) + for (i_quant in 1:dim(quantiles)[1]) { + # for thresholds falling under the distribution + if (quantiles[i_quant, i_time] < min(sorted_data)) { + integrated_probs[i_quant, i_time] <- 0 + # for thresholds falling over the distribution + } else if (max(sorted_data) < quantiles[i_quant, i_time]) { + integrated_probs[i_quant, i_time] <- 1 + } else { + integrated_probs[i_quant, i_time] <- approx(sorted_data, cumulative_weights, + quantiles[i_quant, i_time], "linear")$y + } + } + probs[, i_time] <- append(integrated_probs[, i_time], 1) - append(0, integrated_probs[, i_time]) + if (min(probs[, i_time]) < 0 | max(probs[, i_time]) > 1) { + stop(paste0("Probability in i_time = ", i_time, " is out of [0, 1].")) + } + } + } + } + + return(probs) +} + +.sorted_distributions <- function(data_vector, weights_vector) { + weights_vector <- as.vector(weights_vector) + data_vector <- as.vector(data_vector) + weights_vector <- weights_vector / sum(weights_vector) # normalize to 1 + sorter <- order(data_vector) + sorted_weights <- weights_vector[sorter] + cumulative_weights <- cumsum(sorted_weights) - 0.5 * sorted_weights + cumulative_weights <- cumulative_weights - cumulative_weights[1] # fix the 0 + cumulative_weights <- cumulative_weights / cumulative_weights[length(cumulative_weights)] # fix the 1 + return(list("data" = data_vector[sorter], "cumulative_weights" = cumulative_weights)) +} + diff --git a/modules/Skill/R/tmp/RPS.R b/modules/Skill/R/tmp/RPS.R new file mode 100644 index 00000000..75619b63 --- /dev/null +++ b/modules/Skill/R/tmp/RPS.R @@ -0,0 +1,270 @@ +#'Compute the Ranked Probability Score +#' +#'The Ranked Probability Score (RPS; Wilks, 2011) is defined as the sum of the +#'squared differences between the cumulative forecast probabilities (computed +#'from the ensemble members) and the observations (defined as 0% if the category +#'did not happen and 100% if it happened). It can be used to evaluate the skill +#'of multi-categorical probabilistic forecasts. The RPS ranges between 0 +#'(perfect forecast) and n-1 (worst possible forecast), where n is the number of +#'categories. In the case of a forecast divided into two categories (the lowest +#'number of categories that a probabilistic forecast can have), the RPS +#'corresponds to the Brier Score (BS; Wilks, 2011), therefore, ranges between 0 +#'and 1. If there is more than one dataset, RPS will be computed for each pair +#'of exp and obs data. +#' +#'@param exp A named numerical array of the forecast with at least time and +#' member dimension. +#'@param obs A named numerical array of the observation with at least time +#' dimension. The dimensions must be the same as 'exp' except 'memb_dim' and +#' 'dat_dim'. +#'@param time_dim A character string indicating the name of the time dimension. +#' The default value is 'sdate'. +#'@param dat_dim A character string indicating the name of dataset dimension. +#' The length of this dimension can be different between 'exp' and 'obs'. +#' The default value is NULL. +#'@param memb_dim A character string indicating the name of the member dimension +#' to compute the probabilities of the forecast. The default value is 'member'. +#'@param prob_thresholds A numeric vector of the relative thresholds (from 0 to +#' 1) between the categories. The default value is c(1/3, 2/3), which +#' corresponds to tercile equiprobable categories. +#'@param indices_for_clim A vector of the indices to be taken along 'time_dim' +#' for computing the thresholds between the probabilistic categories. If NULL, +#' the whole period is used. The default value is NULL. +#'@param Fair A logical indicating whether to compute the FairRPS (the +#' potential RPS that the forecast would have with an infinite ensemble size). +#' The default value is FALSE. +#'@param weights A named numerical array of the weights for 'exp'. If 'dat_dim' +#' is NULL, the dimension should include 'memb_dim' and 'time_dim'. Else, the +#' dimension should also include 'dat_dim'. The default value is NULL. The +#' ensemble should have at least 70 members or span at least 10 time steps and +#' have more than 45 members if consistency between the weighted and unweighted +#' methodologies is desired. +#'@param cross.val A logical indicating whether to compute the thresholds between +#' probabilistic categories in cross-validation. +#' The default value is FALSE. +#'@param ncores An integer indicating the number of cores to use for parallel +#' computation. The default value is NULL. +#' +#'@return +#'A numerical array of RPS with dimensions c(nexp, nobs, the rest dimensions of +#''exp' except 'time_dim' and 'memb_dim' dimensions). nexp is the number of +#'experiment (i.e., dat_dim in exp), and nobs is the number of observation +#'(i.e., dat_dim in obs). If dat_dim is NULL, nexp and nobs are omitted. +#' +#'@references +#'Wilks, 2011; https://doi.org/10.1016/B978-0-12-385022-5.00008-7 +#' +#'@examples +#'exp <- array(rnorm(1000), dim = c(lat = 3, lon = 2, member = 10, sdate = 50)) +#'obs <- array(rnorm(1000), dim = c(lat = 3, lon = 2, sdate = 50)) +#'res <- RPS(exp = exp, obs = obs) +#' +#'@import multiApply +#'@importFrom easyVerification convert2prob +#'@export +RPS <- function(exp, obs, time_dim = 'sdate', memb_dim = 'member', dat_dim = NULL, + prob_thresholds = c(1/3, 2/3), indices_for_clim = NULL, Fair = FALSE, + weights = NULL, cross.val = FALSE, ncores = NULL) { + + # Check inputs + ## exp and obs (1) + if (!is.array(exp) | !is.numeric(exp)) + stop('Parameter "exp" must be a numeric array.') + if (!is.array(obs) | !is.numeric(obs)) + stop('Parameter "obs" must be a numeric array.') + if(any(is.null(names(dim(exp))))| any(nchar(names(dim(exp))) == 0) | + any(is.null(names(dim(obs))))| any(nchar(names(dim(obs))) == 0)) { + stop("Parameter 'exp' and 'obs' must have dimension names.") + } + ## time_dim + if (!is.character(time_dim) | length(time_dim) != 1) + stop('Parameter "time_dim" must be a character string.') + if (!time_dim %in% names(dim(exp)) | !time_dim %in% names(dim(obs))) { + stop("Parameter 'time_dim' is not found in 'exp' or 'obs' dimension.") + } + ## memb_dim + if (!is.character(memb_dim) | length(memb_dim) > 1) { + stop("Parameter 'memb_dim' must be a character string.") + } + if (!memb_dim %in% names(dim(exp))) { + stop("Parameter 'memb_dim' is not found in 'exp' dimension.") + } + ## dat_dim + if (!is.null(dat_dim)) { + if (!is.character(dat_dim) | length(dat_dim) > 1) { + stop("Parameter 'dat_dim' must be a character string.") + } + if (!dat_dim %in% names(dim(exp)) | !dat_dim %in% names(dim(obs))) { + stop("Parameter 'dat_dim' is not found in 'exp' or 'obs' dimension.", + " Set it as NULL if there is no dataset dimension.") + } + } + ## exp and obs (2) + name_exp <- sort(names(dim(exp))) + name_obs <- sort(names(dim(obs))) + name_exp <- name_exp[-which(name_exp == memb_dim)] + if (memb_dim %in% name_obs) { + name_obs <- name_obs[-which(name_obs == memb_dim)] + } + if (!is.null(dat_dim)) { + name_exp <- name_exp[-which(name_exp == dat_dim)] + name_obs <- name_obs[-which(name_obs == dat_dim)] + } + if (!identical(length(name_exp), length(name_obs)) | + !identical(dim(exp)[name_exp], dim(obs)[name_obs])) { + stop(paste0("Parameter 'exp' and 'obs' must have same length of ", + "all dimensions except 'memb_dim' and 'dat_dim'.")) + } + ## prob_thresholds + if (!is.numeric(prob_thresholds) | !is.vector(prob_thresholds) | + any(prob_thresholds <= 0) | any(prob_thresholds >= 1)) { + stop("Parameter 'prob_thresholds' must be a numeric vector between 0 and 1.") + } + ## indices_for_clim + if (is.null(indices_for_clim)) { + indices_for_clim <- 1:dim(obs)[time_dim] + } else { + if (!is.numeric(indices_for_clim) | !is.vector(indices_for_clim)) { + stop("Parameter 'indices_for_clim' must be NULL or a numeric vector.") + } else if (length(indices_for_clim) > dim(obs)[time_dim] | + max(indices_for_clim) > dim(obs)[time_dim] | + any(indices_for_clim) < 1) { + stop("Parameter 'indices_for_clim' should be the indices of 'time_dim'.") + } + } + ## Fair + if (!is.logical(Fair) | length(Fair) > 1) { + stop("Parameter 'Fair' must be either TRUE or FALSE.") + } + ## cross.val + if (!is.logical(cross.val) | length(cross.val) > 1) { + stop("Parameter 'cross.val' must be either TRUE or FALSE.") + } + ## weights + if (!is.null(weights)) { + if (!is.array(weights) | !is.numeric(weights)) + stop("Parameter 'weights' must be a named numeric array.") + if (is.null(dat_dim)) { + if (length(dim(weights)) != 2 | any(!names(dim(weights)) %in% c(memb_dim, time_dim))) + stop("Parameter 'weights' must have two dimensions with the names of 'memb_dim' and 'time_dim'.") + if (dim(weights)[memb_dim] != dim(exp)[memb_dim] | + dim(weights)[time_dim] != dim(exp)[time_dim]) { + stop(paste0("Parameter 'weights' must have the same dimension lengths ", + "as 'memb_dim' and 'time_dim' in 'exp'.")) + } + weights <- Reorder(weights, c(time_dim, memb_dim)) + + } else { + if (length(dim(weights)) != 3 | any(!names(dim(weights)) %in% c(memb_dim, time_dim, dat_dim))) + stop("Parameter 'weights' must have three dimensions with the names of 'memb_dim', 'time_dim' and 'dat_dim'.") + if (dim(weights)[memb_dim] != dim(exp)[memb_dim] | + dim(weights)[time_dim] != dim(exp)[time_dim] | + dim(weights)[dat_dim] != dim(exp)[dat_dim]) { + stop(paste0("Parameter 'weights' must have the same dimension lengths ", + "as 'memb_dim', 'time_dim' and 'dat_dim' in 'exp'.")) + } + weights <- Reorder(weights, c(time_dim, memb_dim, dat_dim)) + + } + } + ## ncores + if (!is.null(ncores)) { + if (!is.numeric(ncores) | ncores %% 1 != 0 | ncores <= 0 | + length(ncores) > 1) { + stop("Parameter 'ncores' must be either NULL or a positive integer.") + } + } + + ############################### + + # Compute RPS + if (!memb_dim %in% names(dim(obs))) { + target_dims_obs <- c(time_dim, dat_dim) + } else { + target_dims_obs <- c(time_dim, memb_dim, dat_dim) + } + rps <- Apply(data = list(exp = exp, obs = obs), + target_dims = list(exp = c(time_dim, memb_dim, dat_dim), + obs = target_dims_obs), + fun = .RPS, + dat_dim = dat_dim, time_dim = time_dim, + memb_dim = memb_dim, + prob_thresholds = prob_thresholds, + indices_for_clim = indices_for_clim, Fair = Fair, + weights = weights, cross.val = cross.val, ncores = ncores)$output1 + + # Return only the mean RPS + rps <- MeanDims(rps, time_dim, na.rm = FALSE) + + return(rps) +} + + +.RPS <- function(exp, obs, time_dim = 'sdate', memb_dim = 'member', dat_dim = NULL, + prob_thresholds = c(1/3, 2/3), indices_for_clim = NULL, Fair = FALSE, weights = NULL, + cross.val = FALSE) { + + # exp: [sdate, memb, (dat)] + # obs: [sdate, (memb), (dat)] + # weights: NULL or same as exp + + # Adjust dimensions to be [sdate, memb, dat] for both exp and obs + if (!memb_dim %in% names(dim(obs))) obs <- InsertDim(obs, posdim = 2, lendim = 1, name = memb_dim) + + if (is.null(dat_dim)) { + nexp <- 1 + nobs <- 1 + dim(exp) <- c(dim(exp), nexp = nexp) + dim(obs) <- c(dim(obs), nobs = nobs) + if (!is.null(weights)) dim(weights) <- c(dim(weights), nexp = nexp) + } else { + nexp <- as.numeric(dim(exp)[dat_dim]) + nobs <- as.numeric(dim(obs)[dat_dim]) + } + + rps <- array(dim = c(dim(exp)[time_dim], nexp = nexp, nobs = nobs)) + + for (i in 1:nexp) { + for (j in 1:nobs) { + exp_data <- exp[ , , i] + obs_data <- obs[ , , j] + + if (is.null(dim(exp_data))) dim(exp_data) <- c(dim(exp)[1:2]) + if (is.null(dim(obs_data))) dim(obs_data) <- c(dim(obs)[1:2]) + + if (!is.null(weights)) { + weights_data <- weights[ , , i] + if (is.null(dim(weights_data))) dim(weights_data) <- c(dim(weights)[1:2]) + } else { + weights_data <- weights + } + + exp_probs <- .GetProbs(data = exp_data, indices_for_quantiles = indices_for_clim, + prob_thresholds = prob_thresholds, weights = weights_data, cross.val = cross.val) + # exp_probs: [bin, sdate] + obs_probs <- .GetProbs(data = obs_data, indices_for_quantiles = indices_for_clim, + prob_thresholds = prob_thresholds, weights = NULL, cross.val = cross.val) + # obs_probs: [bin, sdate] + probs_exp_cumsum <- apply(exp_probs, 2, cumsum) + probs_obs_cumsum <- apply(obs_probs, 2, cumsum) + + # rps: [sdate, nexp, nobs] + rps[ , i, j] <- colSums((probs_exp_cumsum - probs_obs_cumsum)^2) + if (Fair) { # FairRPS + ## adjustment <- rowSums(-1 * (1/R - 1/R.new) * ens.cum * (R - ens.cum)/R/(R - 1)) [formula taken from SpecsVerification::EnsRps] + R <- dim(exp)[2] #memb + R_new <- Inf + adjustment <- (-1) / (R - 1) * probs_exp_cumsum * (1 - probs_exp_cumsum) + adjustment <- colSums(adjustment) + rps[ , i, j] <- rps[ , i, j] + adjustment + } + } + } + + if (is.null(dat_dim)) { + dim(rps) <- dim(exp)[time_dim] + } + + return(rps) +} + diff --git a/modules/Skill/R/tmp/RPSS.R b/modules/Skill/R/tmp/RPSS.R new file mode 100644 index 00000000..ab433e91 --- /dev/null +++ b/modules/Skill/R/tmp/RPSS.R @@ -0,0 +1,428 @@ +#'Compute the Ranked Probability Skill Score +#' +#'The Ranked Probability Skill Score (RPSS; Wilks, 2011) is the skill score +#'based on the Ranked Probability Score (RPS; Wilks, 2011). It can be used to +#'assess whether a forecast presents an improvement or worsening with respect to +#'a reference forecast. The RPSS ranges between minus infinite and 1. If the +#'RPSS is positive, it indicates that the forecast has higher skill than the +#'reference forecast, while a negative value means that it has a lower skill. +#'Examples of reference forecasts are the climatological forecast (same +#'probabilities for all categories for all time steps), persistence, a previous +#'model version, and another model. It is computed as +#'\code{RPSS = 1 - RPS_exp / RPS_ref}. The statistical significance is obtained +#'based on a Random Walk test at the 95% confidence level (DelSole and Tippett, +#'2016). If there is more than one dataset, RPS will be computed for each pair +#'of exp and obs data. +#' +#'@param exp A named numerical array of the forecast with at least time and +#' member dimension. +#'@param obs A named numerical array of the observation with at least time +#' dimension. The dimensions must be the same as 'exp' except 'memb_dim' and +#' 'dat_dim'. +#'@param ref A named numerical array of the reference forecast data with at +#' least time and member dimension. The dimensions must be the same as 'exp' +#' except 'memb_dim' and 'dat_dim'. If there is only one reference dataset, +#' it should not have dataset dimension. If there is corresponding reference +#' for each experiement, the dataset dimension must have the same length as in +#' 'exp'. If 'ref' is NULL, the climatological forecast is used as reference +#' forecast. The default value is NULL. +#'@param time_dim A character string indicating the name of the time dimension. +#' The default value is 'sdate'. +#'@param memb_dim A character string indicating the name of the member dimension +#' to compute the probabilities of the forecast and the reference forecast. The +#' default value is 'member'. +#'@param dat_dim A character string indicating the name of dataset dimension. +#' The length of this dimension can be different between 'exp' and 'obs'. +#' The default value is NULL. +#'@param prob_thresholds A numeric vector of the relative thresholds (from 0 to +#' 1) between the categories. The default value is c(1/3, 2/3), which +#' corresponds to tercile equiprobable categories. +#'@param indices_for_clim A vector of the indices to be taken along 'time_dim' +#' for computing the thresholds between the probabilistic categories. If NULL, +#' the whole period is used. The default value is NULL. +#'@param Fair A logical indicating whether to compute the FairRPSS (the +#' potential RPSS that the forecast would have with an infinite ensemble size). +#' The default value is FALSE. +#'@param weights Deprecated and will be removed in the next release. Please use +#' 'weights_exp' and 'weights_ref' instead. +#'@param weights_exp A named numerical array of the forecast ensemble weights. +#' The dimension should include 'memb_dim', 'time_dim' and 'dat_dim' if there +#' are multiple datasets. All dimension lengths must be equal to 'exp' +#' dimension lengths. The default value is NULL, which means no weighting is +#' applied. The ensemble should have at least 70 members or span at least 10 +#' time steps and have more than 45 members if consistency between the weighted +#' and unweighted methodologies is desired. +#'@param weights_ref Same as 'weights_exp' but for the reference forecast. +#'@param cross.val A logical indicating whether to compute the thresholds between +#' probabilistics categories in cross-validation. +#' The default value is FALSE. +#'@param ncores An integer indicating the number of cores to use for parallel +#' computation. The default value is NULL. +#' +#'@return +#'\item{$rpss}{ +#' A numerical array of RPSS with dimensions c(nexp, nobs, the rest dimensions +#' of 'exp' except 'time_dim' and 'memb_dim' dimensions). nexp is the number of +#' experiment (i.e., dat_dim in exp), and nobs is the number of observation +#' i.e., dat_dim in obs). If dat_dim is NULL, nexp and nobs are omitted. +#'} +#'\item{$sign}{ +#' A logical array of the statistical significance of the RPSS with the same +#' dimensions as $rpss. +#'} +#' +#'@references +#'Wilks, 2011; https://doi.org/10.1016/B978-0-12-385022-5.00008-7 +#'DelSole and Tippett, 2016; https://doi.org/10.1175/MWR-D-15-0218.1 +#' +#'@examples +#'set.seed(1) +#'exp <- array(rnorm(3000), dim = c(lat = 3, lon = 2, member = 10, sdate = 50)) +#'set.seed(2) +#'obs <- array(rnorm(300), dim = c(lat = 3, lon = 2, sdate = 50)) +#'set.seed(3) +#'ref <- array(rnorm(3000), dim = c(lat = 3, lon = 2, member = 10, sdate = 50)) +#'weights <- sapply(1:dim(exp)['sdate'], function(i) { +#' n <- abs(rnorm(10)) +#' n/sum(n) +#' }) +#'dim(weights) <- c(member = 10, sdate = 50) +#'res <- RPSS(exp = exp, obs = obs) ## climatology as reference forecast +#'res <- RPSS(exp = exp, obs = obs, ref = ref) ## ref as reference forecast +#'res <- RPSS(exp = exp, obs = obs, ref = ref, weights_exp = weights, weights_ref = weights) +#'@import multiApply +#'@export +RPSS <- function(exp, obs, ref = NULL, time_dim = 'sdate', memb_dim = 'member', + dat_dim = NULL, prob_thresholds = c(1/3, 2/3), indices_for_clim = NULL, + Fair = FALSE, weights = NULL, weights_exp = NULL, weights_ref = NULL, + cross.val = FALSE, ncores = NULL) { + + # Check inputs + ## exp, obs, and ref (1) + if (!is.array(exp) | !is.numeric(exp)) { + stop("Parameter 'exp' must be a numeric array.") + } + if (!is.array(obs) | !is.numeric(obs)) { + stop("Parameter 'obs' must be a numeric array.") + } + if (any(is.null(names(dim(exp))))| any(nchar(names(dim(exp))) == 0) | + any(is.null(names(dim(obs))))| any(nchar(names(dim(obs))) == 0)) { + stop("Parameter 'exp' and 'obs' must have dimension names.") + } + if (!is.null(ref)) { + if (!is.array(ref) | !is.numeric(ref)) + stop("Parameter 'ref' must be a numeric array.") + if (any(is.null(names(dim(ref))))| any(nchar(names(dim(ref))) == 0)) { + stop("Parameter 'ref' must have dimension names.") + } + } + ## time_dim + if (!is.character(time_dim) | length(time_dim) != 1) { + stop("Parameter 'time_dim' must be a character string.") + } + if (!time_dim %in% names(dim(exp)) | !time_dim %in% names(dim(obs))) { + stop("Parameter 'time_dim' is not found in 'exp' or 'obs' dimension.") + } + if (!is.null(ref) & !time_dim %in% names(dim(ref))) { + stop("Parameter 'time_dim' is not found in 'ref' dimension.") + } + ## memb_dim + if (!is.character(memb_dim) | length(memb_dim) > 1) { + stop("Parameter 'memb_dim' must be a character string.") + } + if (!memb_dim %in% names(dim(exp))) { + stop("Parameter 'memb_dim' is not found in 'exp' dimension.") + } + if (!is.null(ref) & !memb_dim %in% names(dim(ref))) { + stop("Parameter 'memb_dim' is not found in 'ref' dimension.") + } + ## dat_dim + if (!is.null(dat_dim)) { + if (!is.character(dat_dim) | length(dat_dim) > 1) { + stop("Parameter 'dat_dim' must be a character string.") + } + if (!dat_dim %in% names(dim(exp)) | !dat_dim %in% names(dim(obs))) { + stop("Parameter 'dat_dim' is not found in 'exp' or 'obs' dimension.", + " Set it as NULL if there is no dataset dimension.") + } + } + ## exp, obs, and ref (2) + name_exp <- sort(names(dim(exp))) + name_obs <- sort(names(dim(obs))) + name_exp <- name_exp[-which(name_exp == memb_dim)] + if (memb_dim %in% name_obs) { + name_obs <- name_obs[-which(name_obs == memb_dim)] + } + if (!is.null(dat_dim)) { + name_exp <- name_exp[-which(name_exp == dat_dim)] + name_obs <- name_obs[-which(name_obs == dat_dim)] + } + if (!identical(length(name_exp), length(name_obs)) | + !identical(dim(exp)[name_exp], dim(obs)[name_obs])) { + stop(paste0("Parameter 'exp' and 'obs' must have same length of ", + "all dimensions except 'memb_dim' and 'dat_dim'.")) + } + if (!is.null(ref)) { + name_ref <- sort(names(dim(ref))) + name_ref <- name_ref[-which(name_ref == memb_dim)] + if (!is.null(dat_dim)) { + if (dat_dim %in% name_ref) { + if (!identical(dim(exp)[dat_dim], dim(ref)[dat_dim])) { + stop(paste0("If parameter 'ref' has dataset dimension, it must be", + " equal to dataset dimension of 'exp'.")) + } + name_ref <- name_ref[-which(name_ref == dat_dim)] + } + } + if (!identical(length(name_exp), length(name_ref)) | + !identical(dim(exp)[name_exp], dim(ref)[name_ref])) { + stop(paste0("Parameter 'exp' and 'ref' must have the same length of ", + "all dimensions except 'memb_dim' and 'dat_dim' if there is ", + "only one reference dataset.")) + } + } + ## prob_thresholds + if (!is.numeric(prob_thresholds) | !is.vector(prob_thresholds) | + any(prob_thresholds <= 0) | any(prob_thresholds >= 1)) { + stop("Parameter 'prob_thresholds' must be a numeric vector between 0 and 1.") + } + ## indices_for_clim + if (is.null(indices_for_clim)) { + indices_for_clim <- 1:dim(obs)[time_dim] + } else { + if (!is.numeric(indices_for_clim) | !is.vector(indices_for_clim)) { + stop("Parameter 'indices_for_clim' must be NULL or a numeric vector.") + } else if (length(indices_for_clim) > dim(obs)[time_dim] | + max(indices_for_clim) > dim(obs)[time_dim] | + any(indices_for_clim) < 1) { + stop("Parameter 'indices_for_clim' should be the indices of 'time_dim'.") + } + } + ## Fair + if (!is.logical(Fair) | length(Fair) > 1) { + stop("Parameter 'Fair' must be either TRUE or FALSE.") + } + ## cross.val + if (!is.logical(cross.val) | length(cross.val) > 1) { + stop("Parameter 'cross.val' must be either TRUE or FALSE.") + } + ## weights + if (!is.null(weights)) { + .warning(paste0("Parameter 'weights' is deprecated and will be removed in the next release. ", + "Use 'weights_exp' and 'weights_ref' instead. The value will be assigned ", + "to these two parameters now if they are NULL."), tag = '! Deprecation: ') + if (is.null(weights_exp)) weights_exp <- weights + if (is.null(weights_ref)) weights_ref <- weights + } + ## weights_exp + if (!is.null(weights_exp)) { + if (!is.array(weights_exp) | !is.numeric(weights_exp)) + stop("Parameter 'weights_exp' must be a named numeric array.") + + if (is.null(dat_dim)) { + if (length(dim(weights_exp)) != 2 | any(!names(dim(weights_exp)) %in% c(memb_dim, time_dim))) + stop("Parameter 'weights_exp' must have two dimensions with the names of 'memb_dim' and 'time_dim'.") + if (dim(weights_exp)[memb_dim] != dim(exp)[memb_dim] | + dim(weights_exp)[time_dim] != dim(exp)[time_dim]) { + stop("Parameter 'weights_exp' must have the same dimension lengths as 'memb_dim' and 'time_dim' in 'exp'.") + } + weights_exp <- Reorder(weights_exp, c(time_dim, memb_dim)) + + } else { + if (length(dim(weights_exp)) != 3 | any(!names(dim(weights_exp)) %in% c(memb_dim, time_dim, dat_dim))) + stop("Parameter 'weights_exp' must have three dimensions with the names of 'memb_dim', 'time_dim' and 'dat_dim'.") + if (dim(weights_exp)[memb_dim] != dim(exp)[memb_dim] | + dim(weights_exp)[time_dim] != dim(exp)[time_dim] | + dim(weights_exp)[dat_dim] != dim(exp)[dat_dim]) { + stop(paste0("Parameter 'weights_exp' must have the same dimension lengths ", + "as 'memb_dim', 'time_dim' and 'dat_dim' in 'exp'.")) + } + weights_exp <- Reorder(weights_exp, c(time_dim, memb_dim, dat_dim)) + } + + } + ## weights_ref + if (!is.null(weights_ref)) { + if (!is.array(weights_ref) | !is.numeric(weights_ref)) + stop('Parameter "weights_ref" must be a named numeric array.') + + if (is.null(dat_dim) | ((!is.null(dat_dim)) && (!dat_dim %in% names(dim(ref))))) { + if (length(dim(weights_ref)) != 2 | any(!names(dim(weights_ref)) %in% c(memb_dim, time_dim))) + stop("Parameter 'weights_ref' must have two dimensions with the names of 'memb_dim' and 'time_dim'.") + if (dim(weights_ref)[memb_dim] != dim(exp)[memb_dim] | + dim(weights_ref)[time_dim] != dim(exp)[time_dim]) { + stop("Parameter 'weights_ref' must have the same dimension lengths as 'memb_dim' and 'time_dim' in 'ref'.") + } + weights_ref <- Reorder(weights_ref, c(time_dim, memb_dim)) + + } else { + if (length(dim(weights_ref)) != 3 | any(!names(dim(weights_ref)) %in% c(memb_dim, time_dim, dat_dim))) + stop("Parameter 'weights_ref' must have three dimensions with the names of 'memb_dim', 'time_dim' and 'dat_dim'.") + if (dim(weights_ref)[memb_dim] != dim(ref)[memb_dim] | + dim(weights_ref)[time_dim] != dim(ref)[time_dim] | + dim(weights_ref)[dat_dim] != dim(ref)[dat_dim]) { + stop(paste0("Parameter 'weights_ref' must have the same dimension lengths ", + "as 'memb_dim', 'time_dim' and 'dat_dim' in 'ref'.")) + } + weights_ref <- Reorder(weights_ref, c(time_dim, memb_dim, dat_dim)) + } + + } + ## ncores + if (!is.null(ncores)) { + if (!is.numeric(ncores) | ncores %% 1 != 0 | ncores <= 0 | + length(ncores) > 1) { + stop("Parameter 'ncores' must be either NULL or a positive integer.") + } + } + + ############################### + + # Compute RPSS + if (!memb_dim %in% names(dim(obs))) { + target_dims_obs <- c(time_dim, dat_dim) + } else { + target_dims_obs <- c(time_dim, memb_dim, dat_dim) + } + + if (!is.null(ref)) { # use "ref" as reference forecast + if (!is.null(dat_dim) && (dat_dim %in% names(dim(ref)))) { + target_dims_ref <- c(time_dim, memb_dim, dat_dim) + } else { + target_dims_ref <- c(time_dim, memb_dim) + } + data <- list(exp = exp, obs = obs, ref = ref) + target_dims = list(exp = c(time_dim, memb_dim, dat_dim), + obs = target_dims_obs, + ref = target_dims_ref) + } else { + data <- list(exp = exp, obs = obs) + target_dims = list(exp = c(time_dim, memb_dim, dat_dim), + obs = target_dims_obs) + } + output <- Apply(data, + target_dims = target_dims, + fun = .RPSS, + time_dim = time_dim, memb_dim = memb_dim, + dat_dim = dat_dim, + prob_thresholds = prob_thresholds, + indices_for_clim = indices_for_clim, Fair = Fair, + weights_exp = weights_exp, + weights_ref = weights_ref, + cross.val = cross.val, + ncores = ncores) + + return(output) + +} + +.RPSS <- function(exp, obs, ref = NULL, time_dim = 'sdate', memb_dim = 'member', dat_dim = NULL, + prob_thresholds = c(1/3, 2/3), indices_for_clim = NULL, Fair = FALSE, + weights_exp = NULL, weights_ref = NULL, cross.val = FALSE) { + + # exp: [sdate, memb, (dat)] + # obs: [sdate, (memb), (dat)] + # ref: [sdate, memb, (dat)] or NULL + + if (is.null(dat_dim)) { + nexp <- 1 + nobs <- 1 + } else { + nexp <- as.numeric(dim(exp)[dat_dim]) + nobs <- as.numeric(dim(obs)[dat_dim]) + } + + # RPS of the forecast + rps_exp <- .RPS(exp = exp, obs = obs, time_dim = time_dim, memb_dim = memb_dim, dat_dim = dat_dim, + prob_thresholds = prob_thresholds, indices_for_clim = indices_for_clim, + Fair = Fair, weights = weights_exp, cross.val = cross.val) + + # RPS of the reference forecast + if (is.null(ref)) { ## using climatology as reference forecast + if (!memb_dim %in% names(dim(obs))) { + obs <- InsertDim(obs, posdim = 2, lendim = 1, name = memb_dim) + } + if (is.null(dat_dim)) { + dim(obs) <- c(dim(obs), nobs = nobs) + } + rps_ref <- array(dim = c(dim(obs)[time_dim], nobs = nobs)) + + for (j in 1:nobs) { + obs_data <- obs[ , , j] + if (is.null(dim(obs_data))) dim(obs_data) <- c(dim(obs)[1:2]) + # obs_probs: [bin, sdate] + obs_probs <- .GetProbs(data = obs_data, indices_for_quantiles = indices_for_clim, + prob_thresholds = prob_thresholds, weights = NULL, cross.val = cross.val) + # clim_probs: [bin, sdate] + clim_probs <- c(prob_thresholds[1], diff(prob_thresholds), 1 - prob_thresholds[length(prob_thresholds)]) + clim_probs <- array(clim_probs, dim = dim(obs_probs)) + + # Calculate RPS for each time step + probs_clim_cumsum <- apply(clim_probs, 2, cumsum) + probs_obs_cumsum <- apply(obs_probs, 2, cumsum) + rps_ref[ , j] <- colSums((probs_clim_cumsum - probs_obs_cumsum)^2) + # if (Fair) { # FairRPS + # ## adjustment <- rowSums(-1 * (1/R - 1/R.new) * ens.cum * (R - ens.cum)/R/(R - 1)) [formula taken from SpecsVerification::EnsRps] + # R <- dim(exp)[2] #memb + # R_new <- Inf + # adjustment <- (-1) / (R - 1) * probs_clim_cumsum * (1 - probs_clim_cumsum) + # adjustment <- apply(adjustment, 2, sum) + # rps_ref <- rps_ref + adjustment + # } + + } + if (is.null(dat_dim)) { + dim(rps_ref) <- dim(exp)[time_dim] + } + + } else { # use "ref" as reference forecast + if (!is.null(dat_dim) && (!dat_dim %in% names(dim(ref)))) { + remove_dat_dim <- TRUE + ref <- InsertDim(ref, posdim = 3, lendim = 1, name = dat_dim) + if (!is.null(weights_ref)) { + weights_ref <- InsertDim(weights_ref, posdim = 3, lendim = 1, name = dat_dim) + } + } else { + remove_dat_dim <- FALSE + } + + rps_ref <- .RPS(exp = ref, obs = obs, time_dim = time_dim, memb_dim = memb_dim, dat_dim = dat_dim, + prob_thresholds = prob_thresholds, indices_for_clim = indices_for_clim, + Fair = Fair, weights = weights_ref, cross.val = cross.val) + if (!is.null(dat_dim)) { + if (isTRUE(remove_dat_dim)) { + dim(rps_ref) <- dim(rps_ref)[-2] + } + } + } + + if (!is.null(dat_dim)) { + + rps_exp_mean <- MeanDims(rps_exp, time_dim, na.rm = FALSE) + rps_ref_mean <- MeanDims(rps_ref, time_dim, na.rm = FALSE) + rpss <- array(dim = c(nexp = nexp, nobs = nobs)) + sign <- array(dim = c(nexp = nexp, nobs = nobs)) + + if (length(dim(rps_ref_mean)) == 1) { + for (i in 1:nexp) { + for (j in 1:nobs) { + rpss[i, j] <- 1 - rps_exp_mean[i, j] / rps_ref_mean[j] + sign[i, j] <- .RandomWalkTest(skill_A = rps_exp[, i, j], skill_B = rps_ref[, j])$sign + } + } + } else { + for (i in 1:nexp) { + for (j in 1:nobs) { + rpss[i, j] <- 1 - rps_exp_mean[i, j] / rps_ref_mean[i, j] + sign[i, j] <- .RandomWalkTest(skill_A = rps_exp[, i, j], skill_B = rps_ref[, i, j])$sign + } + } + } + } else { + rpss <- 1 - mean(rps_exp) / mean(rps_ref) + # Significance + sign <- .RandomWalkTest(skill_A = rps_exp, skill_B = rps_ref, sign = T, pval = F)$sign + } + + return(list(rpss = rpss, sign = sign)) +} diff --git a/modules/Skill/R/tmp/RandomWalkTest.R b/modules/Skill/R/tmp/RandomWalkTest.R new file mode 100644 index 00000000..8d5f67f3 --- /dev/null +++ b/modules/Skill/R/tmp/RandomWalkTest.R @@ -0,0 +1,184 @@ +#'Random Walk test for skill differences +#' +#'Forecast comparison of the skill obtained with 2 forecasts (with respect to a +#'common observational reference) based on Random Walks (DelSole and Tippett, +#'2016). +#' +#'@param skill_A A numerical array of the time series of the scores obtained +#' with the forecaster A. +#'@param skill_B A numerical array of the time series of the scores obtained +#' with the forecaster B. The dimensions should be identical as parameter +#' 'skill_A'. +#'@param time_dim A character string indicating the name of the dimension along +#' which the tests are computed. The default value is 'sdate'. +#'@param test.type A character string indicating the type of significance test. +#' It can be "two.sided.approx" (to assess whether forecaster A and forecaster +#' B are significantly different in terms of skill with a two-sided test using +#' the approximation of DelSole and Tippett, 2016), "two.sided" (to assess +#' whether forecaster A and forecaster B are significantly different in terms +#' of skill with an exact two-sided test), "greater" (to assess whether +#' forecaster A shows significantly better skill than forecaster B with a +#' one-sided test for negatively oriented scores), or "less" (to assess whether +#' forecaster A shows significantly better skill than forecaster B with a +#' one-sided test for positively oriented scores). The default value is +#' "two.sided.approx". +#'@param alpha A numeric of the significance level to be used in the statistical +#' significance test (output "sign"). The default value is 0.05. +#'@param pval A logical value indicating whether to return the p-value of the +#' significance test. The default value is TRUE. +#'@param sign A logical value indicating whether to return the statistical +#' significance of the test based on 'alpha'. The default value is FALSE. +#'@param ncores An integer indicating the number of cores to use for parallel +#' computation. The default value is NULL. +#' +#'@return A list with: +#'\item{$score}{ +#' A numerical array with the same dimensions as the input arrays except +#' 'time_dim'. The number of times that forecaster A has been better than +#' forecaster B minus the number of times that forecaster B has been better +#' than forecaster A (for skill negatively oriented, i.e., the lower the +#' better). If $score is positive, forecaster A has been better more times +#' than forecaster B. If $score is negative, forecaster B has been better more +#' times than forecaster A. +#'} +#'\item{$sign}{ +#' A logical array of the statistical significance with the same dimensions +#' as the input arrays except "time_dim". Returned only if "sign" is TRUE. +#'} +#'\item{$p.val}{ +#' A numeric array of the p-values with the same dimensions as the input arrays +#' except "time_dim". Returned only if "pval" is TRUE. +#'} +#' +#'@details +#' Null and alternative hypothesis for "two-sided" test (regardless of the +#' orientation of the scores):\cr +#' H0: forecaster A and forecaster B are not different in terms of skill\cr +#' H1: forecaster A and forecaster B are different in terms of skill +#' +#' Null and alternative hypothesis for one-sided "greater" (for negatively +#' oriented scores, i.e., the lower the better) and "less" (for positively +#' oriented scores, i.e., the higher the better) tests:\cr +#' H0: forecaster A is not better than forecaster B\cr +#' H1: forecaster A is better than forecaster B +#' +#' Examples of negatively oriented scores are the RPS, RMSE and the Error, while +#' the ROC score is a positively oriented score. +#' +#' DelSole and Tippett (2016) approximation for two-sided test at 95% confidence +#' level: significant if the difference between the number of times that +#' forecaster A has been better than forecaster B and forecaster B has been +#' better than forecaster A is above 2sqrt(N) or below -2sqrt(N). +#' +#'@references +#'DelSole and Tippett (2016): https://doi.org/10.1175/MWR-D-15-0218.1 +#' +#'@examples +#' fcst_A <- array(data = 11:50, dim = c(sdate = 10, lat = 2, lon = 2)) +#' fcst_B <- array(data = 21:60, dim = c(sdate = 10, lat = 2, lon = 2)) +#' reference <- array(data = 1:40, dim = c(sdate = 10, lat = 2, lon = 2)) +#' scores_A <- abs(fcst_A - reference) +#' scores_B <- abs(fcst_B - reference) +#' res1 <- RandomWalkTest(skill_A = scores_A, skill_B = scores_B, pval = FALSE, sign = TRUE) +#' res2 <- RandomWalkTest(skill_A = scores_A, skill_B = scores_B, test.type = 'greater') +#' +#'@import multiApply +#'@importFrom ClimProjDiags Subset +#'@export +RandomWalkTest <- function(skill_A, skill_B, time_dim = 'sdate', + test.type = 'two.sided.approx', alpha = 0.05, pval = TRUE, + sign = FALSE, ncores = NULL) { + + # Check inputs + ## skill_A and skill_B + if (is.null(skill_A) | is.null(skill_B)) { + stop("Parameters 'skill_A' and 'skill_B' cannot be NULL.") + } + if(!is.numeric(skill_A) | !is.numeric(skill_B)) { + stop("Parameters 'skill_A' and 'skill_B' must be a numerical array.") + } + if (!identical(dim(skill_A), dim(skill_B))) { + stop("Parameters 'skill_A' and 'skill_B' must have the same dimensions.") + } + ## time_dim + if (!is.character(time_dim) | length(time_dim) != 1) { + stop("Parameter 'time_dim' must be a character string.") + } + if (!time_dim %in% names(dim(skill_A)) | !time_dim %in% names(dim(skill_B))) { + stop("Parameter 'time_dim' is not found in 'skill_A' or 'skill_B' dimensions.") + } + ## alpha + if (any(!is.numeric(alpha) | alpha <= 0 | alpha >= 1 | length(alpha) > 1)) { + stop("Parameter 'alpha' must be a number between 0 and 1.") + } + ## test.type + if (!test.type %in% c('two.sided.approx','two.sided','greater','less')) { + stop("Parameter 'test.type' must be 'two.sided.approx', 'two.sided', 'greater', or 'less'.") + } + if (test.type == 'two.sided.approx') { + if (alpha != 0.05) { + .warning("DelSole and Tippett (2016) aproximation is valid for alpha ", + "= 0.05 only. Returning the significance at the 0.05 significance level.") + } + if (pval) { + .warning("p-value cannot be returned with the DelSole and Tippett (2016) ", + "aproximation. Returning the significance at the 0.05 significance level.") + } + sign <- TRUE + } + ## ncores + if (!is.null(ncores)) { + if (!is.numeric(ncores) | ncores %% 1 != 0 | ncores <= 0 | length(ncores) > 1) { + stop("Parameter 'ncores' must be a positive integer.") + } + } + + ## Compute the Random Walk Test + res <- Apply(data = list(skill_A = skill_A, + skill_B = skill_B), + target_dims = list(skill_A = time_dim, + skill_B = time_dim), + fun = .RandomWalkTest, + test.type = test.type, + alpha = alpha, pval = pval, sign = sign, + ncores = ncores) + + return(res) +} + +.RandomWalkTest <- function(skill_A, skill_B, test.type = 'two.sided.approx', + alpha = 0.05, pval = TRUE, sign = FALSE) { + #skill_A and skill_B: [sdate] + + N.eff <- length(skill_A) + + A_better <- sum(skill_B > skill_A) + B_better <- sum(skill_B < skill_A) + + output <- NULL + output$score <- A_better - B_better + + if (test.type == 'two.sided.approx') { + output$sign <- ifelse(test = abs(output$score) > (2 * sqrt(N.eff)), yes = TRUE, no = FALSE) + + } else { + + if (!is.na(output$score)) { + p.val <- binom.test(x = A_better, n = floor(N.eff), p = 0.5, conf.level = 1 - alpha, + alternative = test.type)$p.value + + } else { + p.val <- NA + } + + if (pval) { + output$p.val <- p.val + } + if (sign) { + output$sign <- ifelse(!is.na(p.val) & p.val <= alpha, TRUE, FALSE) + } + + } + + return(output) +} diff --git a/modules/Skill/Skill.R b/modules/Skill/Skill.R index d83d92c1..3eab1287 100644 --- a/modules/Skill/Skill.R +++ b/modules/Skill/Skill.R @@ -10,7 +10,11 @@ source("modules/Skill/R/compute_quants.R") source("modules/Skill/R/compute_probs.R") source("modules/Skill/R/s2s.metrics.R") - +## TODO: Remove with the next release of s2dv +source("modules/Skill/R/tmp/RPS.R") +source("modules/Skill/R/tmp/RPSS.R") +source("modules/Skill/R/tmp/GetProbs.R") +source("modules/Skill/R/tmp/RandomWalkTest.R") ## TODO: Implement this in the future ## Which parameter are required? # if (!("obs" %in% ls()) || is.null(obs)) { @@ -221,7 +225,7 @@ compute_skill_metrics <- function(recipe, data) { skill_metrics[[ metric ]] <- skill$corr skill_metrics[[ paste0(metric, "_significance") ]] <- skill$sign } else if (metric == 'rmsss') { - # Compute RMSS + # Compute RMSSS skill <- RMSSS(data$hcst$data, data$obs$data, dat_dim = 'dat', time_dim = time_dim, -- GitLab From 00af1acb73194a138992f687cf43826073d227d3 Mon Sep 17 00:00:00 2001 From: vagudets Date: Wed, 12 Apr 2023 10:03:12 +0200 Subject: [PATCH 125/388] Add initialization month/forecast date to seasonal plot names to avoid overlapping --- modules/Visualization/Visualization.R | 39 +++++++++++++++---------- tests/testthat/test-decadal_monthly_1.R | 2 +- tests/testthat/test-decadal_monthly_2.R | 2 +- tests/testthat/test-seasonal_monthly.R | 5 ++-- 4 files changed, 29 insertions(+), 19 deletions(-) diff --git a/modules/Visualization/Visualization.R b/modules/Visualization/Visualization.R index 3d065e6c..f7960bcc 100644 --- a/modules/Visualization/Visualization.R +++ b/modules/Visualization/Visualization.R @@ -1,6 +1,7 @@ ## TODO: Add the possibility to read the data directly from netCDF ## TODO: Adapt to multi-model case ## TODO: Add param 'raw'? +## TODO: Decadal plot names plot_data <- function(recipe, data, @@ -81,9 +82,11 @@ plot_skill_metrics <- function(recipe, archive, data_cube, skill_metrics, system_name <- archive$System[[recipe$Analysis$Datasets$System$name]]$name hcst_period <- paste0(recipe$Analysis$Time$hcst_start, "-", recipe$Analysis$Time$hcst_end) - init_month <- lubridate::month(as.numeric(substr(recipe$Analysis$Time$sdate, - start = 1, stop = 2)), - label = T, abb = T) + init_month <- as.numeric(substr(recipe$Analysis$Time$sdate, + start = 1, stop = 2)) + month_label <- tolower(month.name[init_month]) + month_abbreviation <- month.abb[init_month] + # Define color palette and number of breaks according to output format ## TODO: Make separate function if (tolower(recipe$Analysis$Output_format) %in% c("scorecards", "cerise")) { @@ -177,11 +180,16 @@ plot_skill_metrics <- function(recipe, archive, data_cube, skill_metrics, skill_significance <- NULL } # Define output file name and titles - outfile <- paste0(outdir, name, ".png") + if (tolower(recipe$Analysis$Horizon) == "seasonal") { + outfile <- paste0(outdir, name, "-", month_label, ".png") + } else { + outfile <- paste0(outdir, name, ".png") + } toptitle <- paste(display_name, "-", data_cube$attrs$Variable$varName, - "-", system_name, "-", init_month, hcst_period) + "-", system_name, "-", month_abbreviation, + hcst_period) months <- unique(lubridate::month(data_cube$attrs$Dates, - label = T, abb = F)) + label = T, abb = F)) titles <- as.vector(months) # Plot suppressWarnings( @@ -189,11 +197,11 @@ plot_skill_metrics <- function(recipe, archive, data_cube, skill_metrics, asplit(skill, MARGIN=1), # Splitting array into a list longitude, latitude, special_args = skill_significance, - dot_symbol = 20, - toptitle = toptitle, - title_scale = 0.6, - titles = titles, - filled.continents=F, + dot_symbol = 20, + toptitle = toptitle, + title_scale = 0.6, + titles = titles, + filled.continents=F, brks = brks, cols = cols, col_inf = col_inf, @@ -269,10 +277,10 @@ plot_ensemble_mean <- function(recipe, archive, fcst, outdir) { # Define name of output file and titles if (length(start_date) == 1) { i_ensemble_mean <- ensemble_mean - outfile <- paste0(outdir, "forecast_ensemble_mean.png") + outfile <- paste0(outdir, "forecast_ensemble_mean-", start_date, ".png") } else { i_ensemble_mean <- ensemble_mean[which(start_date == i_syear), , , ] - outfile <- paste0(outdir, "forecast_ensemble_mean_", i_syear, ".png") + outfile <- paste0(outdir, "forecast_ensemble_mean-", i_syear, ".png") } toptitle <- paste("Forecast Ensemble Mean -", variable, "-", system_name, "- Initialization:", i_syear) @@ -349,10 +357,11 @@ plot_most_likely_terciles <- function(recipe, archive, # Define name of output file and titles if (length(start_date) == 1) { i_probs_fcst <- probs_fcst - outfile <- paste0(outdir, "forecast_most_likely_tercile.png") + outfile <- paste0(outdir, "forecast_most_likely_tercile-", start_date, + ".png") } else { i_probs_fcst <- probs_fcst[which(start_date == i_syear), , , , ] - outfile <- paste0(outdir, "forecast_most_likely_tercile_", i_syear, ".png") + outfile <- paste0(outdir, "forecast_most_likely_tercile-", i_syear, ".png") } toptitle <- paste("Most Likely Tercile -", variable, "-", system_name, "-", "Initialization:", i_syear) diff --git a/tests/testthat/test-decadal_monthly_1.R b/tests/testthat/test-decadal_monthly_1.R index dc01d549..4fc92b3d 100644 --- a/tests/testthat/test-decadal_monthly_1.R +++ b/tests/testthat/test-decadal_monthly_1.R @@ -280,7 +280,7 @@ length(list.files(outdir)), test_that("5. Visualization", { expect_equal( all(list.files(paste0(outdir, "/plots/")) %in% -c("forecast_ensemble_mean.png", "forecast_most_likely_tercile.png", +c("forecast_ensemble_mean-2021.png", "forecast_most_likely_tercile-2021.png", "rpss.png")), TRUE ) diff --git a/tests/testthat/test-decadal_monthly_2.R b/tests/testthat/test-decadal_monthly_2.R index a242defd..40a56abf 100644 --- a/tests/testthat/test-decadal_monthly_2.R +++ b/tests/testthat/test-decadal_monthly_2.R @@ -271,7 +271,7 @@ length(list.files(outdir)), test_that("5. Visualization", { expect_equal( all(list.files(paste0(outdir, "/plots/")) %in% -c("bss10_specs.png", "enscorr_specs.png", "forecast_ensemble_mean_2020.png", "forecast_ensemble_mean_2021.png", "forecast_most_likely_tercile_2020.png", "forecast_most_likely_tercile_2021.png", "frps_specs.png", "frps.png", "rpss_specs.png") +c("bss10_specs.png", "enscorr_specs.png", "forecast_ensemble_mean-2020.png", "forecast_ensemble_mean-2021.png", "forecast_most_likely_tercile-2020.png", "forecast_most_likely_tercile-2021.png", "frps_specs.png", "frps.png", "rpss_specs.png") ), TRUE ) diff --git a/tests/testthat/test-seasonal_monthly.R b/tests/testthat/test-seasonal_monthly.R index fa0af958..6a166503 100644 --- a/tests/testthat/test-seasonal_monthly.R +++ b/tests/testthat/test-seasonal_monthly.R @@ -233,8 +233,9 @@ length(list.files(outdir)), test_that("5. Visualization", { expect_equal( all(list.files(paste0(outdir, "/plots/")) %in% -c("crpss.png", "enscorr_specs.png", "enscorr.png", "forecast_ensemble_mean.png", - "forecast_most_likely_tercile.png", "rpss.png")), +c("crpss-november.png", "enscorr_specs-november.png", "enscorr-november.png", + "forecast_ensemble_mean-20201101.png", "forecast_most_likely_tercile-20201101.png", + "rpss-november.png")), TRUE ) expect_equal( -- GitLab From 32a51f4bc2b6239d1551e89647f4849634e1e066 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Wed, 12 Apr 2023 10:58:53 +0200 Subject: [PATCH 126/388] Separate check_recipe() and check_number_of_dependent_verification() --- .../check_number_of_dependent_verifications.R | 134 +++++++++++++++++ tools/check_recipe.R | 135 ------------------ 2 files changed, 134 insertions(+), 135 deletions(-) create mode 100644 tools/check_number_of_dependent_verifications.R diff --git a/tools/check_number_of_dependent_verifications.R b/tools/check_number_of_dependent_verifications.R new file mode 100644 index 00000000..0c85d09f --- /dev/null +++ b/tools/check_number_of_dependent_verifications.R @@ -0,0 +1,134 @@ +check_number_of_dependent_verifications <- function(recipe) { + # Number of verifications depends on the variables and indicators requested + # and the order of the workflow: + # workflow: correction + indicator --> only 1 variable is calibrated + # workflow: indicator + correction --> the indicator and the ecv are calibrated + independent_verifications <- NULL + dependent_verifications <- NULL + dep <- 1 + # check workflow order: + if (all(c('Calibration', 'Indicators') %in% names(recipe$Analysis$Workflow))) { + cal_pos <- which(names(recipe$Analysis$Workflow) == 'Calibration') + ind_pos <- which(names(recipe$Analysis$Workflow) == 'Indicators') + if (cal_pos < ind_pos) { + workflow_independent <- FALSE + } else { + workflow_independent <- TRUE + } + } + if (workflow_independent) { + independent_verifications <- append(recipe$Analysis$Variables$ECVs, + recipe$Analysis$Variables$Indicators) + } else { + if (is.null(recipe$Analysis$Variables$Indicators) || + (length(recipe$Analysis$Variables$Indicators) == 1 && + is.null(recipe$Analysis$Variables$ECVs))) { + independent_verifications <- append(recipe$Analysis$Variables$ECVs, + recipe$Analysis$Variables$Indicators) + } else { + ecvs <- recipe$Analysi$Variables$ECVs + inds <- recipe$Analysi$Variables$Indicators + ind_table <- read_yaml(paste0(recipe$Run$code_dir, + "conf/indicators_table.yml")) + # first, loop on ecvs if any and compare to indicators + done <- NULL # to gather the indicators reviewed + if (!is.null(ecvs)) { + for (i in 1:length(ecvs)) { + dependent <- list(ecvs[[i]]) + for (j in 1:length(inds)) { + if (ind_table[inds[[j]]$name][[1]]$ECVs == ecvs[[i]]$name) { + if (ind_table[inds[[j]]$name][[1]]$freq == ecvs[[i]]$freq) { + # they are dependent + dependent <- append(dependent, inds[[j]]) + done <- append(done, inds[[j]]) + } + } + } + if (length(dependent) == 1) { + dependent <- NULL + independent_verifications <- append(independent_verifications, + list(ecvs[[i]])) + } else { + dependent_verifications <- append(dependent_verifications, + list(dependent)) + } + } + # There are indicators not reviewed yet? + if (length(done) < length(inds)) { + if (length(inds) == 1) { + independent_verifications <- append(independent_verifications, + inds) + } else { + done <- NULL + for (i in 1:(length(inds) - 1)) { + dependent <- list(inds[[i]]$name) + if (is.na(match(unlist(dependent), unlist(done)))) { + for (j in (i+1):length(inds)) { + if (ind_table[inds[[i]]$name][[1]]$ECVs == + ind_table[inds[[j]]$name][[1]]$ECVs) { + if (ind_table[inds[[i]]$name][[1]]$freq == + ind_table[inds[[j]]$name][[1]]$freq) { + dependent <- append(dependent, inds[[j]]$name) + done <- dependent + } + } + } + } + if (length(dependent) == 1) { + independent_verifications <- dependent + dependent <- NULL + } else { + dependent_verifications <- dependent + } + } + } + } + } else { # there are only Indicators: + done <- NULL + for (i in 1:(length(inds) - 1)) { + dependent <- list(inds[[i]]$name) + if (is.na(match(unlist(dependent), unlist(done)))) { + for (j in (i+1):length(inds)) { + if (ind_table[inds[[i]]$name][[1]]$ECVs == + ind_table[inds[[j]]$name][[1]]$ECVs) { + if (ind_table[inds[[i]]$name][[1]]$freq == + ind_table[inds[[j]]$name][[1]]$freq) { + dependent <- append(dependent, inds[[j]]$name) + done <- dependent + } + } + } + } + if (length(dependent) == 1) { + independent_verifications <- dependent + dependent <- NULL + } else { + dependent_verifications <- dependent + } + } + } + } + } + if (!is.null(independent_verifications)) { + info(logger, paste("The variables for independent verification are ", + paste(independent_verifications, collapse = " "))) + } + if (!is.null(dependent_verifications)) { + info(logger, paste("The variables for dependent verification are: ", + paste(dependent_verifications, collapse = " "))) + } + # remove unnecessary names in objects to be removed + return(list(independent = independent_verifications, + dependent = dependent_verifications)) +} +#workflow <- list(Calibration = list(method = 'SBC'), +# Skill = list(metric = 'RPSS')) +#ApplyWorkflow <- function(workflow) { + +#res <- do.call('CST_BiasCorrection', +# args = list(exp = lonlat_data$exp, +# obs = lonlat_data$obs)) + + + + diff --git a/tools/check_recipe.R b/tools/check_recipe.R index eaec8f9a..d8acc8cd 100644 --- a/tools/check_recipe.R +++ b/tools/check_recipe.R @@ -430,138 +430,3 @@ check_recipe <- function(recipe) { # return(append(nverifications, fcst.sdate)) } } - -check_number_of_dependent_verifications <- function(recipe) { - # Number of verifications depends on the variables and indicators requested - # and the order of the workflow: - # workflow: correction + indicator --> only 1 variable is calibrated - # workflow: indicator + correction --> the indicator and the ecv are calibrated - independent_verifications <- NULL - dependent_verifications <- NULL - dep <- 1 - # check workflow order: - if (all(c('Calibration', 'Indicators') %in% names(recipe$Analysis$Workflow))) { - cal_pos <- which(names(recipe$Analysis$Workflow) == 'Calibration') - ind_pos <- which(names(recipe$Analysis$Workflow) == 'Indicators') - if (cal_pos < ind_pos) { - workflow_independent <- FALSE - } else { - workflow_independent <- TRUE - } - } - if (workflow_independent) { - independent_verifications <- append(recipe$Analysis$Variables$ECVs, - recipe$Analysis$Variables$Indicators) - } else { - if (is.null(recipe$Analysis$Variables$Indicators) || - (length(recipe$Analysis$Variables$Indicators) == 1 && - is.null(recipe$Analysis$Variables$ECVs))) { - independent_verifications <- append(recipe$Analysis$Variables$ECVs, - recipe$Analysis$Variables$Indicators) - } else { - ecvs <- recipe$Analysi$Variables$ECVs - inds <- recipe$Analysi$Variables$Indicators - ind_table <- read_yaml(paste0(recipe$Run$code_dir, - "conf/indicators_table.yml")) - # first, loop on ecvs if any and compare to indicators - done <- NULL # to gather the indicators reviewed - if (!is.null(ecvs)) { - for (i in 1:length(ecvs)) { - dependent <- list(ecvs[[i]]) - for (j in 1:length(inds)) { - if (ind_table[inds[[j]]$name][[1]]$ECVs == ecvs[[i]]$name) { - if (ind_table[inds[[j]]$name][[1]]$freq == ecvs[[i]]$freq) { - # they are dependent - dependent <- append(dependent, inds[[j]]) - done <- append(done, inds[[j]]) - } - } - } - if (length(dependent) == 1) { - dependent <- NULL - independent_verifications <- append(independent_verifications, - list(ecvs[[i]])) - } else { - dependent_verifications <- append(dependent_verifications, - list(dependent)) - } - } - # There are indicators not reviewed yet? - if (length(done) < length(inds)) { - if (length(inds) == 1) { - independent_verifications <- append(independent_verifications, - inds) - } else { - done <- NULL - for (i in 1:(length(inds) - 1)) { - dependent <- list(inds[[i]]$name) - if (is.na(match(unlist(dependent), unlist(done)))) { - for (j in (i+1):length(inds)) { - if (ind_table[inds[[i]]$name][[1]]$ECVs == - ind_table[inds[[j]]$name][[1]]$ECVs) { - if (ind_table[inds[[i]]$name][[1]]$freq == - ind_table[inds[[j]]$name][[1]]$freq) { - dependent <- append(dependent, inds[[j]]$name) - done <- dependent - } - } - } - } - if (length(dependent) == 1) { - independent_verifications <- dependent - dependent <- NULL - } else { - dependent_verifications <- dependent - } - } - } - } - } else { # there are only Indicators: - done <- NULL - for (i in 1:(length(inds) - 1)) { - dependent <- list(inds[[i]]$name) - if (is.na(match(unlist(dependent), unlist(done)))) { - for (j in (i+1):length(inds)) { - if (ind_table[inds[[i]]$name][[1]]$ECVs == - ind_table[inds[[j]]$name][[1]]$ECVs) { - if (ind_table[inds[[i]]$name][[1]]$freq == - ind_table[inds[[j]]$name][[1]]$freq) { - dependent <- append(dependent, inds[[j]]$name) - done <- dependent - } - } - } - } - if (length(dependent) == 1) { - independent_verifications <- dependent - dependent <- NULL - } else { - dependent_verifications <- dependent - } - } - } - } - } - if (!is.null(independent_verifications)) { - info(logger, paste("The variables for independent verification are ", - paste(independent_verifications, collapse = " "))) - } - if (!is.null(dependent_verifications)) { - info(logger, paste("The variables for dependent verification are: ", - paste(dependent_verifications, collapse = " "))) - } - # remove unnecessary names in objects to be removed - return(list(independent = independent_verifications, - dependent = dependent_verifications)) -} -#workflow <- list(Calibration = list(method = 'SBC'), -# Skill = list(metric = 'RPSS')) -#ApplyWorkflow <- function(workflow) { - -#res <- do.call('CST_BiasCorrection', -# args = list(exp = lonlat_data$exp, -# obs = lonlat_data$obs)) - - - - -- GitLab From 6e7f94b6e9a81e8330ad7ece3b09aba0f597e145 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Wed, 12 Apr 2023 12:07:35 +0200 Subject: [PATCH 127/388] Remove CST_Anomaly --- modules/Anomalies/Anomalies.R | 2 - modules/Anomalies/tmp/CST_Anomaly.R | 246 ---------------------------- 2 files changed, 248 deletions(-) delete mode 100644 modules/Anomalies/tmp/CST_Anomaly.R diff --git a/modules/Anomalies/Anomalies.R b/modules/Anomalies/Anomalies.R index b32e8849..5eb737b3 100644 --- a/modules/Anomalies/Anomalies.R +++ b/modules/Anomalies/Anomalies.R @@ -1,5 +1,3 @@ -source("modules/Anomalies/tmp/CST_Anomaly.R") - # Compute the hcst, obs and fcst anomalies with or without cross-validation # and return them, along with the hcst and obs climatologies. diff --git a/modules/Anomalies/tmp/CST_Anomaly.R b/modules/Anomalies/tmp/CST_Anomaly.R deleted file mode 100644 index f38e39b0..00000000 --- a/modules/Anomalies/tmp/CST_Anomaly.R +++ /dev/null @@ -1,246 +0,0 @@ -#'Anomalies relative to a climatology along selected dimension with or without cross-validation -#' -#'@author Perez-Zanon Nuria, \email{nuria.perez@bsc.es} -#'@author Pena Jesus, \email{jesus.pena@bsc.es} -#'@description This function computes the anomalies relative to a climatology -#'computed along the selected dimension (usually starting dates or forecast -#'time) allowing the application or not of crossvalidated climatologies. The -#'computation is carried out independently for experimental and observational -#'data products. -#' -#'@param exp An object of class \code{s2dv_cube} as returned by \code{CST_Load} -#' function, containing the seasonal forecast experiment data in the element -#' named \code{$data}. -#'@param obs An object of class \code{s2dv_cube} as returned by \code{CST_Load} -#' function, containing the observed data in the element named \code{$data}. -#'@param dim_anom A character string indicating the name of the dimension -#' along which the climatology will be computed. The default value is 'sdate'. -#'@param cross A logical value indicating whether cross-validation should be -#' applied or not. Default = FALSE. -#'@param memb_dim A character string indicating the name of the member -#' dimension. It must be one dimension in 'exp' and 'obs'. If there is no -#' member dimension, set NULL. The default value is 'member'. -#'@param memb A logical value indicating whether to subtract the climatology -#' based on the individual members (TRUE) or the ensemble mean over all -#' members (FALSE) when calculating the anomalies. The default value is TRUE. -#'@param dat_dim A character vector indicating the name of the dataset and -#' member dimensions. If there is no dataset dimension, it can be NULL. -#' The default value is "c('dataset', 'member')". -#'@param filter_span A numeric value indicating the degree of smoothing. This -#' option is only available if parameter \code{cross} is set to FALSE. -#'@param ftime_dim A character string indicating the name of the temporal -#' dimension where the smoothing with 'filter_span' will be applied. It cannot -#' be NULL if 'filter_span' is provided. The default value is 'ftime'. -#'@param ncores An integer indicating the number of cores to use for parallel -#' computation. The default value is NULL. It will be used only when -#' 'filter_span' is not NULL. -#' -#'@return A list with two S3 objects, 'exp' and 'obs', of the class -#''s2dv_cube', containing experimental and date-corresponding observational -#'anomalies, respectively. These 's2dv_cube's can be ingested by other functions -#'in CSTools. -#' -#'@examples -#'# Example 1: -#'mod <- 1 : (2 * 3 * 4 * 5 * 6 * 7) -#'dim(mod) <- c(dataset = 2, member = 3, sdate = 4, ftime = 5, lat = 6, lon = 7) -#'obs <- 1 : (1 * 1 * 4 * 5 * 6 * 7) -#'dim(obs) <- c(dataset = 1, member = 1, sdate = 4, ftime = 5, lat = 6, lon = 7) -#'lon <- seq(0, 30, 5) -#'lat <- seq(0, 25, 5) -#'exp <- list(data = mod, lat = lat, lon = lon) -#'obs <- list(data = obs, lat = lat, lon = lon) -#'attr(exp, 'class') <- 's2dv_cube' -#'attr(obs, 'class') <- 's2dv_cube' -#' -#'anom <- CST_Anomaly(exp = exp, obs = obs, cross = FALSE, memb = TRUE) -#' -#'@seealso \code{\link[s2dv]{Ano_CrossValid}}, \code{\link[s2dv]{Clim}} and \code{\link{CST_Load}} -#' -#'@import multiApply -#'@importFrom s2dv InsertDim Clim Ano_CrossValid Reorder -#'@export -CST_Anomaly <- function(exp = NULL, obs = NULL, dim_anom = 'sdate', cross = FALSE, - memb_dim = 'member', memb = TRUE, dat_dim = c('dataset', 'member'), - filter_span = NULL, ftime_dim = 'ftime', ncores = NULL) { - # s2dv_cube - if (!inherits(exp, 's2dv_cube') & !is.null(exp) || - !inherits(obs, 's2dv_cube') & !is.null(obs)) { - stop("Parameter 'exp' and 'obs' must be of the class 's2dv_cube', ", - "as output by CSTools::CST_Load.") - } - # exp and obs - if (is.null(exp$data) & is.null(obs$data)) { - stop("One of the parameter 'exp' or 'obs' cannot be NULL.") - } - case_exp = case_obs = 0 - if (is.null(exp)) { - exp <- obs - case_obs = 1 - warning("Parameter 'exp' is not provided and 'obs' will be used instead.") - } - if (is.null(obs)) { - obs <- exp - case_exp = 1 - warning("Parameter 'obs' is not provided and 'exp' will be used instead.") - } - if(any(is.null(names(dim(exp$data))))| any(nchar(names(dim(exp$data))) == 0) | - any(is.null(names(dim(obs$data))))| any(nchar(names(dim(obs$data))) == 0)) { - stop("Parameter 'exp' and 'obs' must have dimension names in element 'data'.") - } - if(!all(names(dim(exp$data)) %in% names(dim(obs$data))) | - !all(names(dim(obs$data)) %in% names(dim(exp$data)))) { - stop("Parameter 'exp' and 'obs' must have same dimension names in element 'data'.") - } - dim_exp <- dim(exp$data) - dim_obs <- dim(obs$data) - dimnames_data <- names(dim_exp) - # dim_anom - if (is.numeric(dim_anom) & length(dim_anom) == 1) { - warning("Parameter 'dim_anom' must be a character string and a numeric value will not be ", - "accepted in the next release. The corresponding dimension name is assigned.") - dim_anom <- dimnames_data[dim_anom] - } - if (!is.character(dim_anom)) { - stop("Parameter 'dim_anom' must be a character string.") - } - if (!dim_anom %in% names(dim_exp) | !dim_anom %in% names(dim_obs)) { - stop("Parameter 'dim_anom' is not found in 'exp' or in 'obs' dimension in element 'data'.") - } - if (dim_exp[dim_anom] <= 1 | dim_obs[dim_anom] <= 1) { - stop("The length of dimension 'dim_anom' in label 'data' of the parameter ", - "'exp' and 'obs' must be greater than 1.") - } - # cross - if (!is.logical(cross) | !is.logical(memb) ) { - stop("Parameters 'cross' and 'memb' must be logical.") - } - if (length(cross) > 1 | length(memb) > 1 ) { - cross <- cross[1] - warning("Parameter 'cross' has length greater than 1 and only the first element", - "will be used.") - } - # memb - if (length(memb) > 1) { - memb <- memb[1] - warning("Parameter 'memb' has length greater than 1 and only the first element", - "will be used.") - } - # memb_dim - if (!is.null(memb_dim)) { - if (!is.character(memb_dim) | length(memb_dim) > 1) { - stop("Parameter 'memb_dim' must be a character string.") - } - if (!memb_dim %in% names(dim_exp) | !memb_dim %in% names(dim_obs)) { - stop("Parameter 'memb_dim' is not found in 'exp' or in 'obs' dimension.") - } - } - # dat_dim - if (!is.null(dat_dim)) { - if (!is.character(dat_dim)) { - stop("Parameter 'dat_dim' must be a character vector.") - } - if (!all(dat_dim %in% names(dim_exp)) | !all(dat_dim %in% names(dim_obs))) { - stop("Parameter 'dat_dim' is not found in 'exp' or 'obs' dimension in element 'data'.", - " Set it as NULL if there is no dataset dimension.") - } - } - # filter_span - if (!is.null(filter_span)) { - if (!is.numeric(filter_span)) { - warning("Paramater 'filter_span' is not numeric and any filter", - " is being applied.") - filter_span <- NULL - } - # ncores - if (!is.null(ncores)) { - if (!is.numeric(ncores) | ncores %% 1 != 0 | ncores <= 0 | - length(ncores) > 1) { - stop("Parameter 'ncores' must be a positive integer.") - } - } - # ftime_dim - if (!is.character(ftime_dim)) { - stop("Parameter 'ftime_dim' must be a character string.") - } - if (!ftime_dim %in% names(dim_exp) | !memb_dim %in% names(dim_obs)) { - stop("Parameter 'ftime_dim' is not found in 'exp' or in 'obs' dimension in element 'data'.") - } - } - - # Computating anomalies - #---------------------- - - # With cross-validation - if (cross) { - ano <- Ano_CrossValid(exp = exp$data, obs = obs$data, - time_dim = dim_anom, - memb_dim = memb_dim, - memb = memb, - dat_dim = dat_dim, - ncores = ncores) - - # Without cross-validation - } else { - tmp <- Clim(exp = exp$data, obs = obs$data, - time_dim = dim_anom, - memb_dim = memb_dim, - memb = memb, - dat_dim = dat_dim, - ncores = ncores) - if (!is.null(filter_span)) { - tmp$clim_exp <- Apply(tmp$clim_exp, - target_dims = c(ftime_dim), - output_dims = c(ftime_dim), - fun = .Loess, - loess_span = filter_span, - ncores = ncores)$output1 - tmp$clim_obs <- Apply(tmp$clim_obs, - target_dims = c(ftime_dim), - output_dims = c(ftime_dim), - fun = .Loess, - loess_span = filter_span, - ncores = ncores)$output1 - } - if (memb) { - clim_exp <- tmp$clim_exp - clim_obs <- tmp$clim_obs - } else { - clim_exp <- InsertDim(tmp$clim_exp, 1, dim_exp[memb_dim]) - clim_obs <- InsertDim(tmp$clim_obs, 1, dim_obs[memb_dim]) - } - clim_exp <- InsertDim(clim_exp, 1, dim_exp[dim_anom]) - clim_obs <- InsertDim(clim_obs, 1, dim_obs[dim_anom]) - ano <- NULL - - # Permuting back dimensions to original order - clim_exp <- Reorder(clim_exp, dimnames_data) - clim_obs <- Reorder(clim_obs, dimnames_data) - - ano$exp <- exp$data - clim_exp - ano$obs <- obs$data - clim_obs - } - - exp$data <- ano$exp - obs$data <- ano$obs - - # Outputs - # ~~~~~~~~~ - if (case_obs == 1) { - return(obs) - } - else if (case_exp == 1) { - return(exp) - } - else { - return(list(exp = exp, obs = obs)) - } -} - -.Loess <- function(clim, loess_span) { - data <- data.frame(ensmean = clim, day = 1 : length(clim)) - loess_filt <- loess(ensmean ~ day, data, span = loess_span) - output <- predict(loess_filt) - return(output) -} - -- GitLab From 6ae017f259cee5182e9ea347347f46c19c60197e Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Wed, 12 Apr 2023 12:12:21 +0200 Subject: [PATCH 128/388] Source get_dir and get_filename --- modules/Saving/Saving.R | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/modules/Saving/Saving.R b/modules/Saving/Saving.R index 85c3a3a0..cf74e90d 100644 --- a/modules/Saving/Saving.R +++ b/modules/Saving/Saving.R @@ -1,6 +1,7 @@ ## TODO: Save obs percentiles -source("modules/Saving/paths2save.R") +source("modules/Saving/R/get_dir.R") +source("modules/Saving/R/get_filename.R") save_data <- function(recipe, data, skill_metrics = NULL, -- GitLab From e14a92df6bd55331cfce3e4953974da16f8960ba Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Wed, 12 Apr 2023 12:17:28 +0200 Subject: [PATCH 129/388] Remove save_data() from test --- modules/test_seasonal.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/test_seasonal.R b/modules/test_seasonal.R index 4dd34b61..4535d41b 100644 --- a/modules/test_seasonal.R +++ b/modules/test_seasonal.R @@ -19,7 +19,7 @@ skill_metrics <- compute_skill_metrics(recipe, data) # Compute percentiles and probability bins probabilities <- compute_probabilities(recipe, data) # Export all data to netCDF -save_data(recipe, data, skill_metrics, probabilities) +# save_data(recipe, data, skill_metrics, probabilities) # Plot data plot_data(recipe, data, skill_metrics, probabilities, significance = T) -- GitLab From e2167a2b07d500e4ef5493b59c5b8ad7e345e48a Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Wed, 12 Apr 2023 15:48:43 +0200 Subject: [PATCH 130/388] =?UTF-8?q?Add=20'docopt'=20library=20and=20?= =?UTF-8?q?=EF=BF=BC=20Add=20option=20not=20to=20create=20unique=20directo?= =?UTF-8?q?ry=20in=20split.R?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- split.R | 27 ++++++++++++++++++++++++--- tools/libs.R | 1 + 2 files changed, 25 insertions(+), 3 deletions(-) mode change 100644 => 100755 split.R diff --git a/split.R b/split.R old mode 100644 new mode 100755 index 869b47e3..6976b8a8 --- a/split.R +++ b/split.R @@ -1,11 +1,32 @@ +#! /usr/bin/env Rscript + +doc <- "Read an Auto-S2S recipe and prepare the output directory, check the +recipe for potential errors, and split it into atomic recipes to be run +individually. + +If the usage of Autosubmit is requested in the recipe, the Autosubmit +configuration is also written in the folder of the specified experiment. +Instructions on how to run the experiment will appear in the terminal. + +Usage: + split.R [--disable_unique_ID] + +Options: + -h --help Show usage. + --disable_unique_ID Do not add a unique ID to the output folder name. + +Arguments: + recipe path to the recipe." + +library(docopt) suppressMessages(source("tools/libs.R")) +arguments <- docopt(doc = doc) # Retrieve recipe file path -args = commandArgs(trailingOnly = TRUE) -recipe_file <- args[1] # Check recipe and prepare output directories -recipe <- prepare_outputs(recipe_file) +recipe <- prepare_outputs(recipe_file = arguments$recipe, + uniqueID = !arguments$disable_unique_ID) # Split recipe into atomic recipes ## TODO: Add autosubmit yes/no to the parameters? diff --git a/tools/libs.R b/tools/libs.R index a13082df..7a6b550f 100644 --- a/tools/libs.R +++ b/tools/libs.R @@ -1,4 +1,5 @@ library(log4r) +library(docopt) library(startR) library(ClimProjDiags) library(multiApply) -- GitLab From dc8bc8049e0df8c98154658b5fbbda3cd309986c Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Wed, 12 Apr 2023 17:02:04 +0200 Subject: [PATCH 131/388] replace all tabs with spaces --- modules/Saving/Saving.R | 180 +++++++++---------- modules/Visualization/Visualization.R | 248 +++++++++++++------------- 2 files changed, 214 insertions(+), 214 deletions(-) diff --git a/modules/Saving/Saving.R b/modules/Saving/Saving.R index cf74e90d..fb7910a2 100644 --- a/modules/Saving/Saving.R +++ b/modules/Saving/Saving.R @@ -4,8 +4,8 @@ source("modules/Saving/R/get_dir.R") source("modules/Saving/R/get_filename.R") save_data <- function(recipe, data, - skill_metrics = NULL, - probabilities = NULL) { + skill_metrics = NULL, + probabilities = NULL) { # Wrapper for the saving functions. # recipe: The auto-s2s recipe # archive: The auto-s2s archive @@ -23,8 +23,8 @@ save_data <- function(recipe, data, if (is.null(data)) { error(recipe$Run$logger, - paste("The 'data' parameter is mandatory. It should be a list", - "of at least two s2dv_cubes containing the hcst and obs.")) + paste("The 'data' parameter is mandatory. It should be a list", + "of at least two s2dv_cubes containing the hcst and obs.")) stop() } # Create output directory @@ -33,15 +33,15 @@ save_data <- function(recipe, data, # Export hindcast, forecast and observations onto outfile save_forecast(recipe = recipe, data_cube = data$hcst, - type = 'hcst', - outdir = outdir) + type = 'hcst', + outdir = outdir) if (!is.null(data$fcst)) { save_forecast(recipe = recipe, data_cube = data$fcst, - type = 'fcst', - outdir = outdir) + type = 'fcst', + outdir = outdir) } save_observations(recipe = recipe, data_cube = data$obs, - outdir = outdir) + outdir = outdir) # Separate ensemble correlation from the rest of the metrics, as it has one # extra dimension "ensemble" and must be saved to a different file @@ -59,29 +59,29 @@ save_data <- function(recipe, data, # Export skill metrics onto outfile if (!is.null(skill_metrics)) { save_metrics(recipe = recipe, skill = skill_metrics, - data_cube = data$hcst, - outdir = outdir) + data_cube = data$hcst, + outdir = outdir) } if (!is.null(corr_metrics)) { save_corr(recipe = recipe, skill = corr_metrics, - data_cube = data$hcst, - outdir = outdir) + data_cube = data$hcst, + outdir = outdir) } # Export probabilities onto outfile if (!is.null(probabilities)) { save_percentiles(recipe = recipe, percentiles = probabilities$percentiles, - data_cube = data$hcst, - outdir = outdir) + data_cube = data$hcst, + outdir = outdir) save_probabilities(recipe = recipe, probs = probabilities$probs, - data_cube = data$hcst, - type = "hcst", - outdir = outdir) + data_cube = data$hcst, + type = "hcst", + outdir = outdir) if (!is.null(probabilities$probs_fcst)) { save_probabilities(recipe = recipe, probs = probabilities$probs_fcst, - data_cube = data$fcst, - type = "fcst", - outdir = outdir) + data_cube = data$fcst, + type = "fcst", + outdir = outdir) } } } @@ -91,18 +91,18 @@ get_global_attributes <- function(recipe, archive) { # netCDF files. parameters <- recipe$Analysis hcst_period <- paste0(parameters$Time$hcst_start, " to ", - parameters$Time$hcst_end) + parameters$Time$hcst_end) current_time <- paste0(as.character(Sys.time()), " ", Sys.timezone()) system_name <- parameters$Datasets$System$name reference_name <- parameters$Datasets$Reference$name attrs <- list(reference_period = hcst_period, - institution_system = archive$System[[system_name]]$institution, - institution_reference = archive$Reference[[reference_name]]$institution, - system = system_name, - reference = reference_name, - calibration_method = parameters$Workflow$Calibration$method, - computed_on = current_time) + institution_system = archive$System[[system_name]]$institution, + institution_reference = archive$Reference[[reference_name]]$institution, + system = system_name, + reference = reference_name, + calibration_method = parameters$Workflow$Calibration$method, + computed_on = current_time) return(attrs) } @@ -122,14 +122,14 @@ get_times <- function(store.freq, fcst.horizon, leadtimes, sdate, calendar) { dim(time) <- length(time) sdate <- as.Date(sdate, format = '%Y%m%d') # reformatting metadata <- list(time = list(units = paste0(ref, sdate, 'T00:00:00'), - calendar = calendar)) + calendar = calendar)) attr(time, 'variables') <- metadata names(dim(time)) <- 'time' sdate <- 1:length(sdate) dim(sdate) <- length(sdate) metadata <- list(sdate = list(standard_name = paste(strtoi(sdate), - collapse=", "), + collapse=", "), units = paste0('Init date'))) attr(sdate, 'variables') <- metadata names(dim(sdate)) <- 'sdate' @@ -157,9 +157,9 @@ get_latlon <- function(latitude, longitude) { } save_forecast <- function(recipe, - data_cube, - type = "hcst", - agg = "global", + data_cube, + type = "hcst", + agg = "global", outdir = NULL) { # Loops over the years in the s2dv_cube containing a hindcast or forecast # and exports each year to a netCDF file. @@ -184,7 +184,7 @@ save_forecast <- function(recipe, # Generate vector containing leadtimes dates <- as.PCICt(ClimProjDiags::Subset(data_cube$attrs$Dates, 'syear', 1), - cal = calendar) + cal = calendar) if (fcst.horizon == 'decadal') { ## Method 1: Use the first date as init_date. But it may be better to use ## the real initialized date (ask users) @@ -194,21 +194,21 @@ save_forecast <- function(recipe, if (type == 'hcst') { init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, '-', sprintf('%02d', init_month), '-01'), - cal = calendar) + cal = calendar) } else if (type == 'fcst') { init_date <- as.PCICt(paste0(recipe$Analysis$Time$fcst_year[1], '-', sprintf('%02d', init_month), '-01'), - cal = calendar) + cal = calendar) } } else { if (type == 'hcst') { init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, recipe$Analysis$Time$sdate), - format = '%Y%m%d', cal = calendar) + format = '%Y%m%d', cal = calendar) } else if (type == 'fcst') { init_date <- as.PCICt(paste0(recipe$Analysis$Time$fcst_year, recipe$Analysis$Time$sdate), - format = '%Y%m%d', cal = calendar) + format = '%Y%m%d', cal = calendar) } } # Get time difference in hours @@ -245,8 +245,8 @@ save_forecast <- function(recipe, } metadata <- list(fcst = list(name = var.expname, - standard_name = var.sdname, - long_name = var.longname, + standard_name = var.sdname, + long_name = var.longname, units = var.units)) attr(fcst[[1]], 'variables') <- metadata names(dim(fcst[[1]])) <- dims @@ -274,7 +274,7 @@ save_forecast <- function(recipe, # Generate name of output file outfile <- get_filename(outdir, recipe, data_cube$attrs$Variable$varName, - fcst.sdate, agg, "exp") + fcst.sdate, agg, "exp") # Get grid data and metadata and export to netCDF if (tolower(agg) == "country") { @@ -291,14 +291,14 @@ save_forecast <- function(recipe, } } info(recipe$Run$logger, paste("#####", toupper(type), - "SAVED TO NETCDF FILE #####")) + "SAVED TO NETCDF FILE #####")) } save_observations <- function(recipe, - data_cube, + data_cube, agg = "global", - outdir = NULL) { + outdir = NULL) { # Loops over the years in the s2dv_cube containing the observations and # exports each year to a netCDF file. # data_cube: s2dv_cube containing the data and metadata @@ -323,7 +323,7 @@ save_observations <- function(recipe, # Generate vector containing leadtimes ## TODO: Move to a separate function? dates <- as.PCICt(ClimProjDiags::Subset(data_cube$attrs$Dates, 'syear', 1), - cal = calendar) + cal = calendar) if (fcst.horizon == 'decadal') { ## Method 1: Use the first date as init_date. But it may be better to use ## the real initialized date (ask users) @@ -332,12 +332,12 @@ save_observations <- function(recipe, init_month <- archive$System[[recipe$Analysis$Datasets$System$name]]$initial_month init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, '-', sprintf('%02d', init_month), '-01'), - cal = calendar) + cal = calendar) } else { init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, recipe$Analysis$Time$sdate), - format = '%Y%m%d', cal = calendar) + format = '%Y%m%d', cal = calendar) } # Get time difference in hours leadtimes <- as.numeric(dates - init_date)/3600 @@ -372,8 +372,8 @@ save_observations <- function(recipe, } metadata <- list(fcst = list(name = var.expname, - standard_name = var.sdname, - long_name = var.longname, + standard_name = var.sdname, + long_name = var.longname, units = var.units)) attr(fcst[[1]], 'variables') <- metadata names(dim(fcst[[1]])) <- dims @@ -414,7 +414,7 @@ save_observations <- function(recipe, # Generate name of output file outfile <- get_filename(outdir, recipe, data_cube$attrs$Variable$varName, - fcst.sdate, agg, "obs") + fcst.sdate, agg, "obs") # Get grid data and metadata and export to netCDF if (tolower(agg) == "country") { @@ -443,10 +443,10 @@ save_observations <- function(recipe, # } save_metrics <- function(recipe, - skill, + skill, data_cube, agg = "global", - outdir = NULL) { + outdir = NULL) { # This function adds metadata to the skill metrics in 'skill' # and exports them to a netCDF file inside 'outdir'. @@ -467,10 +467,10 @@ save_metrics <- function(recipe, if ((!is.null(recipe$Analysis$Workflow$Anomalies$compute)) && (recipe$Analysis$Workflow$Anomalies$compute)) { global_attributes <- c(list(from_anomalies = "Yes"), - global_attributes) + global_attributes) } else { global_attributes <- c(list(from_anomalies = "No"), - global_attributes) + global_attributes) } attr(skill[[1]], 'global_attrs') <- global_attributes @@ -487,9 +487,9 @@ save_metrics <- function(recipe, dims <- c(lalo, 'time') } metadata <- list(metric = list(name = metric, - standard_name = sdname, - long_name = long_name, - missing_value = missing_val)) + standard_name = sdname, + long_name = long_name, + missing_value = missing_val)) attr(skill[[i]], 'variables') <- metadata names(dim(skill[[i]])) <- dims } @@ -501,13 +501,13 @@ save_metrics <- function(recipe, # Generate vector containing leadtimes dates <- as.PCICt(ClimProjDiags::Subset(data_cube$attrs$Dates, 'syear', 1), - cal = calendar) + cal = calendar) if (fcst.horizon == 'decadal') { init_month <- archive$System[[recipe$Analysis$Datasets$System$name]]$initial_month init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, '-', sprintf('%02d', init_month), '-01'), - cal = calendar) + cal = calendar) } else { init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, recipe$Analysis$Time$sdate), @@ -530,7 +530,7 @@ save_metrics <- function(recipe, } else { if (!is.null(recipe$Analysis$Time$fcst_year)) { fcst.sdate <- paste0(recipe$Analysis$Time$fcst_year, - recipe$Analysis$Time$sdate) + recipe$Analysis$Time$sdate) } else { fcst.sdate <- paste0("1970", recipe$Analysis$Time$sdate) } @@ -544,7 +544,7 @@ save_metrics <- function(recipe, outdir <- get_dir(recipe) } outfile <- get_filename(outdir, recipe, data_cube$attrs$Variable$varName, - fcst.sdate, agg, "skill") + fcst.sdate, agg, "skill") # Get grid data and metadata and export to netCDF if (tolower(agg) == "country") { @@ -563,10 +563,10 @@ save_metrics <- function(recipe, } save_corr <- function(recipe, - skill, + skill, data_cube, agg = "global", - outdir = NULL) { + outdir = NULL) { # This function adds metadata to the ensemble correlation in 'skill' # and exports it to a netCDF file inside 'outdir'. @@ -585,10 +585,10 @@ save_corr <- function(recipe, if ((!is.null(recipe$Analysis$Workflow$Anomalies$compute)) && (recipe$Analysis$Workflow$Anomalies$compute)) { global_attributes <- c(global_attributes, - list(from_anomalies = "Yes")) + list(from_anomalies = "Yes")) } else { global_attributes <- c(global_attributes, - list(from_anomalies = "No")) + list(from_anomalies = "No")) } attr(skill[[1]], 'global_attrs') <- global_attributes @@ -605,9 +605,9 @@ save_corr <- function(recipe, dims <- c(lalo, 'ensemble', 'time') } metadata <- list(metric = list(name = metric, - standard_name = sdname, - long_name = long_name, - missing_value = missing_val)) + standard_name = sdname, + long_name = long_name, + missing_value = missing_val)) attr(skill[[i]], 'variables') <- metadata names(dim(skill[[i]])) <- dims } @@ -619,12 +619,12 @@ save_corr <- function(recipe, # Generate vector containing leadtimes dates <- as.PCICt(ClimProjDiags::Subset(data_cube$attrs$Dates, 'syear', 1), - cal = calendar) + cal = calendar) if (fcst.horizon == 'decadal') { init_month <- archive$System[[recipe$Analysis$Datasets$System$name]]$initial_month init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, '-', sprintf('%02d', init_month), '-01'), - cal = calendar) + cal = calendar) } else { init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, recipe$Analysis$Time$sdate), @@ -661,7 +661,7 @@ save_corr <- function(recipe, outdir <- get_dir(recipe) } outfile <- get_filename(outdir, recipe, data_cube$attrs$Variable$varName, - fcst.sdate, agg, "corr") + fcst.sdate, agg, "corr") # Get grid data and metadata and export to netCDF if (tolower(agg) == "country") { @@ -681,10 +681,10 @@ save_corr <- function(recipe, } save_percentiles <- function(recipe, - percentiles, + percentiles, data_cube, agg = "global", - outdir = NULL) { + outdir = NULL) { # This function adds metadata to the percentiles # and exports them to a netCDF file inside 'outdir'. archive <- get_archive(recipe) @@ -703,10 +703,10 @@ save_percentiles <- function(recipe, if ((!is.null(recipe$Analysis$Workflow$Anomalies$compute)) && (recipe$Analysis$Workflow$Anomalies$compute)) { global_attributes <- c(list(from_anomalies = "Yes"), - global_attributes) + global_attributes) } else { global_attributes <- c(list(from_anomalies = "No"), - global_attributes) + global_attributes) } attr(percentiles[[1]], 'global_attrs') <- global_attributes @@ -730,12 +730,12 @@ save_percentiles <- function(recipe, calendar <- archive$System[[global_attributes$system]]$calendar # Generate vector containing leadtimes dates <- as.PCICt(ClimProjDiags::Subset(data_cube$attrs$Dates, 'syear', 1), - cal = calendar) + cal = calendar) if (fcst.horizon == 'decadal') { init_month <- archive$System[[recipe$Analysis$Datasets$System$name]]$initial_month init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, '-', sprintf('%02d', init_month), '-01'), - cal = calendar) + cal = calendar) } else { init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, recipe$Analysis$Time$sdate), @@ -771,7 +771,7 @@ save_percentiles <- function(recipe, outdir <- get_dir(recipe) } outfile <- get_filename(outdir, recipe, data_cube$attrs$Variable$varName, - fcst.sdate, agg, "percentiles") + fcst.sdate, agg, "percentiles") # Get grid data and metadata and export to netCDF if (tolower(agg) == "country") { country <- get_countries(grid) @@ -789,11 +789,11 @@ save_percentiles <- function(recipe, } save_probabilities <- function(recipe, - probs, - data_cube, + probs, + data_cube, agg = "global", - type = "hcst", - outdir = NULL) { + type = "hcst", + outdir = NULL) { # Loops over the years in the s2dv_cube containing a hindcast or forecast # and exports the corresponding category probabilities to a netCDF file. # probs: array containing the probability data @@ -817,10 +817,10 @@ save_probabilities <- function(recipe, if ((!is.null(recipe$Analysis$Workflow$Anomalies$compute)) && (recipe$Analysis$Workflow$Anomalies$compute)) { global_attributes <- c(list(from_anomalies = "Yes"), - global_attributes) + global_attributes) } else { global_attributes <- c(list(from_anomalies = "No"), - global_attributes) + global_attributes) } fcst.horizon <- tolower(recipe$Analysis$Horizon) store.freq <- recipe$Analysis$Variables$freq @@ -829,12 +829,12 @@ save_probabilities <- function(recipe, # Generate vector containing leadtimes ## TODO: Move to a separate function? dates <- as.PCICt(ClimProjDiags::Subset(data_cube$attrs$Dates, 'syear', 1), - cal = calendar) + cal = calendar) if (fcst.horizon == 'decadal') { init_month <- archive$System[[recipe$Analysis$Datasets$System$name]]$initial_month init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, '-', sprintf('%02d', init_month), '-01'), - cal = calendar) + cal = calendar) } else { init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, recipe$Analysis$Time$sdate), @@ -852,10 +852,10 @@ save_probabilities <- function(recipe, probs_syear <- lapply(probs, ClimProjDiags::Subset, 'syear', i, drop = 'selected') if (tolower(agg) == "global") { probs_syear <- lapply(probs_syear, function(x) { - Reorder(x, c(lalo, 'time'))}) + Reorder(x, c(lalo, 'time'))}) } else { probs_syear <- lapply(probs_syear, function(x) { - Reorder(x, c('country', 'time'))}) + Reorder(x, c('country', 'time'))}) } ## TODO: Replace for loop with something more efficient? @@ -891,7 +891,7 @@ save_probabilities <- function(recipe, # Generate name of output file outfile <- get_filename(outdir, recipe, data_cube$attrs$Variable$varName, - fcst.sdate, agg, "probs") + fcst.sdate, agg, "probs") # Get grid data and metadata and export to netCDF if (tolower(agg) == "country") { @@ -910,5 +910,5 @@ save_probabilities <- function(recipe, info(recipe$Run$logger, paste("#####", toupper(type), - "PROBABILITIES SAVED TO NETCDF FILE #####")) + "PROBABILITIES SAVED TO NETCDF FILE #####")) } diff --git a/modules/Visualization/Visualization.R b/modules/Visualization/Visualization.R index ce5d37e8..bd389fc8 100644 --- a/modules/Visualization/Visualization.R +++ b/modules/Visualization/Visualization.R @@ -4,11 +4,11 @@ ## TODO: Decadal plot names plot_data <- function(recipe, - data, - skill_metrics = NULL, - probabilities = NULL, - archive = NULL, - significance = F) { + data, + skill_metrics = NULL, + probabilities = NULL, + archive = NULL, + significance = F) { # Try to produce and save several basic plots. # recipe: the auto-s2s recipe as read by read_yaml() # archive: the auto-s2s archive as read by read_yaml() @@ -25,18 +25,18 @@ plot_data <- function(recipe, if ((is.null(skill_metrics)) && (is.null(data$fcst))) { error(recipe$Run$logger, "The Visualization module has been called, - but there is no fcst in 'data', and 'skill_metrics' is NULL - so there is no data that can be plotted.") + but there is no fcst in 'data', and 'skill_metrics' is NULL + so there is no data that can be plotted.") stop() } if (is.null(archive)) { if (tolower(recipe$Analysis$Horizon) == "seasonal") { archive <- - read_yaml(paste0("conf/archive.yml"))[[recipe$Run$filesystem]] + read_yaml(paste0("conf/archive.yml"))[[recipe$Run$filesystem]] } else if (tolower(recipe$Analysis$Horizon) == "decadal") { archive <- - read_yaml(paste0("conf/archive_decadal.yml"))[[recipe$Run$filesystem]] + read_yaml(paste0("conf/archive_decadal.yml"))[[recipe$Run$filesystem]] } } @@ -44,11 +44,11 @@ plot_data <- function(recipe, if ("skill_metrics" %in% plots) { if (!is.null(skill_metrics)) { plot_skill_metrics(recipe, archive, data$hcst, skill_metrics, outdir, - significance) + significance) } else { error(recipe$Run$logger, paste0("The skill metric plots have been requested, but the ", - "parameter 'skill_metrics' is NULL")) + "parameter 'skill_metrics' is NULL")) } } @@ -59,7 +59,7 @@ plot_data <- function(recipe, } else { error(recipe$Run$logger, paste0("The forecast ensemble mean plot has been requested, but ", - "there is no fcst element in 'data'")) + "there is no fcst element in 'data'")) } } @@ -67,17 +67,17 @@ plot_data <- function(recipe, if ("most_likely_terciles" %in% plots) { if ((!is.null(probabilities)) && (!is.null(data$fcst))) { plot_most_likely_terciles(recipe, archive, data$fcst, - probabilities, outdir) + probabilities, outdir) } else { error(recipe$Run$logger, - paste0("For the most likely terciles plot, both the fsct and the ", - "probabilities must be provided.")) + paste0("For the most likely terciles plot, both the fsct and the ", + "probabilities must be provided.")) } } } plot_skill_metrics <- function(recipe, archive, data_cube, skill_metrics, - outdir, significance = F) { + outdir, significance = F) { # recipe: Auto-S2S recipe # archive: Auto-S2S archive # data_cube: s2dv_cube object with the corresponding hindcast data @@ -89,7 +89,7 @@ plot_skill_metrics <- function(recipe, archive, data_cube, skill_metrics, # Abort if frequency is daily if (recipe$Analysis$Variables$freq == "daily_mean") { error(recipe$Run$logger, "Visualization functions not yet implemented - for daily data.") + for daily data.") stop() } # Abort if skill_metrics is not list @@ -101,9 +101,9 @@ plot_skill_metrics <- function(recipe, archive, data_cube, skill_metrics, longitude <- data_cube$coords$lon system_name <- archive$System[[recipe$Analysis$Datasets$System$name]]$name hcst_period <- paste0(recipe$Analysis$Time$hcst_start, "-", - recipe$Analysis$Time$hcst_end) + recipe$Analysis$Time$hcst_end) init_month <- as.numeric(substr(recipe$Analysis$Time$sdate, - start = 1, stop = 2)) + start = 1, stop = 2)) month_label <- tolower(month.name[init_month]) month_abbreviation <- month.abb[init_month] @@ -119,8 +119,8 @@ plot_skill_metrics <- function(recipe, archive, data_cube, skill_metrics, # Group different metrics by type skill_scores <- c("rpss", "bss90", "bss10", "frpss", "crpss", "mean_bias_ss", - "enscorr", "rpss_specs", "bss90_specs", "bss10_specs", - "enscorr_specs", "rmsss") + "enscorr", "rpss_specs", "bss90_specs", "bss10_specs", + "enscorr_specs", "rmsss") scores <- c("rps", "frps", "crps", "frps_specs") # Assign colorbar to each metric type ## TODO: Triangle ends @@ -128,56 +128,56 @@ plot_skill_metrics <- function(recipe, archive, data_cube, skill_metrics, if (name %in% names(skill_metrics)) { # Define plot characteristics and metric name to display in plot if (name %in% c("rpss", "bss90", "bss10", "frpss", "crpss", - "rpss_specs", "bss90_specs", "bss10_specs", - "rmsss")) { - display_name <- toupper(strsplit(name, "_")[[1]][1]) + "rpss_specs", "bss90_specs", "bss10_specs", + "rmsss")) { + display_name <- toupper(strsplit(name, "_")[[1]][1]) skill <- skill_metrics[[name]] - brks <- seq(-1, 1, by = 0.2) - colorbar <- clim.colors(length(brks) + 1, diverging_palette) - cols <- colorbar[2:(length(colorbar) - 1)] - col_inf <- colorbar[1] - col_sup <- NULL + brks <- seq(-1, 1, by = 0.2) + colorbar <- clim.colors(length(brks) + 1, diverging_palette) + cols <- colorbar[2:(length(colorbar) - 1)] + col_inf <- colorbar[1] + col_sup <- NULL } else if (name == "mean_bias_ss") { - display_name <- "Mean Bias Skill Score" - skill <- skill_metrics[[name]] - brks <- seq(-1, 1, by = 0.2) - colorbar <- clim.colors(length(brks) + 1, diverging_palette) - cols <- colorbar[2:(length(colorbar) - 1)] - col_inf <- colorbar[1] - col_sup <- NULL + display_name <- "Mean Bias Skill Score" + skill <- skill_metrics[[name]] + brks <- seq(-1, 1, by = 0.2) + colorbar <- clim.colors(length(brks) + 1, diverging_palette) + cols <- colorbar[2:(length(colorbar) - 1)] + col_inf <- colorbar[1] + col_sup <- NULL } else if (name %in% c("enscorr", "enscorr_specs")) { - display_name <- "Ensemble Mean Correlation" - skill <- skill_metrics[[name]] - brks <- seq(-1, 1, by = 0.2) - cols <- clim.colors(length(brks) - 1, diverging_palette) - col_inf <- NULL - col_sup <- NULL + display_name <- "Ensemble Mean Correlation" + skill <- skill_metrics[[name]] + brks <- seq(-1, 1, by = 0.2) + cols <- clim.colors(length(brks) - 1, diverging_palette) + col_inf <- NULL + col_sup <- NULL } else if (name %in% scores) { - skill <- skill_metrics[[name]] - display_name <- toupper(strsplit(name, "_")[[1]][1]) + skill <- skill_metrics[[name]] + display_name <- toupper(strsplit(name, "_")[[1]][1]) brks <- seq(0, 1, by = 0.1) colorbar <- grDevices::hcl.colors(length(brks), sequential_palette) - cols <- colorbar[1:(length(colorbar) - 1)] - col_inf <- NULL - col_sup <- colorbar[length(colorbar)] + cols <- colorbar[1:(length(colorbar) - 1)] + col_inf <- NULL + col_sup <- colorbar[length(colorbar)] } else if (name == "enssprerr") { - skill <- skill_metrics[[name]] - display_name <- "Spread-to-Error Ratio" - brks <- c(0, 0.6, 0.7, 0.8, 0.9, 1, 1.2, 1.4, 1.6, 1.8, 2) - colorbar <- clim.colors(length(brks), diverging_palette) - cols <- colorbar[1:length(colorbar) - 1] - col_inf <- NULL - col_sup <- colorbar[length(colorbar)] + skill <- skill_metrics[[name]] + display_name <- "Spread-to-Error Ratio" + brks <- c(0, 0.6, 0.7, 0.8, 0.9, 1, 1.2, 1.4, 1.6, 1.8, 2) + colorbar <- clim.colors(length(brks), diverging_palette) + cols <- colorbar[1:length(colorbar) - 1] + col_inf <- NULL + col_sup <- colorbar[length(colorbar)] } else if (name == "mean_bias") { - skill <- skill_metrics[[name]] - display_name <- "Mean Bias" - max_value <- max(abs(quantile(skill, 0.02, na.rm = T)), - abs(quantile(skill, 0.98, na.rm = T))) - brks <- max_value * seq(-1, 1, by = 0.2) - colorbar <- clim.colors(length(brks) + 1, diverging_palette) - cols <- colorbar[2:(length(colorbar) - 1)] - col_inf <- colorbar[1] - col_sup <- colorbar[length(colorbar)] + skill <- skill_metrics[[name]] + display_name <- "Mean Bias" + max_value <- max(abs(quantile(skill, 0.02, na.rm = T)), + abs(quantile(skill, 0.98, na.rm = T))) + brks <- max_value * seq(-1, 1, by = 0.2) + colorbar <- clim.colors(length(brks) + 1, diverging_palette) + cols <- colorbar[2:(length(colorbar) - 1)] + col_inf <- colorbar[1] + col_sup <- colorbar[length(colorbar)] } options(bitmapType = "cairo") # Reorder dimensions @@ -188,28 +188,28 @@ plot_skill_metrics <- function(recipe, archive, data_cube, skill_metrics, if ((significance) && (significance_name %in% names(skill_metrics))) { skill_significance <- skill_metrics[[significance_name]] skill_significance <- Reorder(skill_significance, c("time", - "longitude", - "latitude")) + "longitude", + "latitude")) # Split skill significance into list of lists, along the time dimension # This allows for plotting the significance dots correctly. skill_significance <- ClimProjDiags::ArrayToList(skill_significance, - dim = 'time', - level = "sublist", - names = "dots") + dim = 'time', + level = "sublist", + names = "dots") } else { skill_significance <- NULL } # Define output file name and titles if (tolower(recipe$Analysis$Horizon) == "seasonal") { - outfile <- paste0(outdir, name, "-", month_label, ".png") + outfile <- paste0(outdir, name, "-", month_label, ".png") } else { - outfile <- paste0(outdir, name, ".png") + outfile <- paste0(outdir, name, ".png") } toptitle <- paste(display_name, "-", data_cube$attrs$Variable$varName, - "-", system_name, "-", month_abbreviation, - hcst_period) + "-", system_name, "-", month_abbreviation, + hcst_period) months <- unique(lubridate::month(data_cube$attrs$Dates, - label = T, abb = F)) + label = T, abb = F)) titles <- as.vector(months) # Plot suppressWarnings( @@ -217,11 +217,11 @@ plot_skill_metrics <- function(recipe, archive, data_cube, skill_metrics, asplit(skill, MARGIN=1), # Splitting array into a list longitude, latitude, special_args = skill_significance, - dot_symbol = 20, - toptitle = toptitle, - title_scale = 0.6, - titles = titles, - filled.continents=F, + dot_symbol = 20, + toptitle = toptitle, + title_scale = 0.6, + titles = titles, + filled.continents=F, brks = brks, cols = cols, col_inf = col_inf, @@ -252,7 +252,7 @@ plot_ensemble_mean <- function(recipe, archive, fcst, outdir) { variable <- recipe$Analysis$Variables$name units <- attr(fcst$Variable, "variable")$units start_date <- paste0(recipe$Analysis$Time$fcst_year, - recipe$Analysis$Time$sdate) + recipe$Analysis$Time$sdate) # Compute ensemble mean ensemble_mean <- s2dv::MeanDims(fcst$data, 'ensemble') # Drop extra dims, add time dim if missing: @@ -263,13 +263,13 @@ plot_ensemble_mean <- function(recipe, archive, fcst, outdir) { } if (!'syear' %in% names(dim(ensemble_mean))) { ensemble_mean <- Reorder(ensemble_mean, c("time", - "longitude", - "latitude")) + "longitude", + "latitude")) } else { ensemble_mean <- Reorder(ensemble_mean, c("syear", - "time", - "longitude", - "latitude")) + "time", + "longitude", + "latitude")) } ## TODO: Redefine column colors, possibly depending on variable if (variable == 'prlr') { @@ -282,7 +282,7 @@ plot_ensemble_mean <- function(recipe, archive, fcst, outdir) { # Define brks, centered on in the case of anomalies ## if (grepl("anomaly", - fcst$attrs$Variable$metadata[[variable]]$long_name)) { + fcst$attrs$Variable$metadata[[variable]]$long_name)) { variable <- paste(variable, "anomaly") max_value <- max(abs(ensemble_mean)) ugly_intervals <- seq(-max_value, max_value, max_value/20) @@ -303,34 +303,34 @@ plot_ensemble_mean <- function(recipe, archive, fcst, outdir) { outfile <- paste0(outdir, "forecast_ensemble_mean-", i_syear, ".png") } toptitle <- paste("Forecast Ensemble Mean -", variable, "-", system_name, - "- Initialization:", i_syear) + "- Initialization:", i_syear) months <- lubridate::month(fcst$attrs$Dates[1, 1, which(start_date == i_syear), ], label = T, abb = F) titles <- as.vector(months) # Plots PlotLayout(PlotEquiMap, c('longitude', 'latitude'), - i_ensemble_mean, longitude, latitude, + i_ensemble_mean, longitude, latitude, filled.continents = F, - toptitle = toptitle, - title_scale = 0.6, - titles = titles, - units = units, - cols = cols, - brks = brks, - fileout = outfile, - bar_label_digits = 4, - bar_extra_margin = rep(0.7, 4), - bar_label_scale = 1.5, - axes_label_scale = 1.3) + toptitle = toptitle, + title_scale = 0.6, + titles = titles, + units = units, + cols = cols, + brks = brks, + fileout = outfile, + bar_label_digits = 4, + bar_extra_margin = rep(0.7, 4), + bar_label_scale = 1.5, + axes_label_scale = 1.3) } info(recipe$Run$logger, "##### FCST ENSEMBLE MEAN PLOT SAVED TO OUTPUT DIRECTORY #####") } plot_most_likely_terciles <- function(recipe, archive, - fcst, - probabilities, - outdir) { + fcst, + probabilities, + outdir) { ## TODO: Add 'anomaly' to plot title # Abort if frequency is daily @@ -343,22 +343,22 @@ plot_most_likely_terciles <- function(recipe, archive, system_name <- archive$System[[recipe$Analysis$Datasets$System$name]]$name variable <- recipe$Analysis$Variables$name start_date <- paste0(recipe$Analysis$Time$fcst_year, - recipe$Analysis$Time$sdate) + recipe$Analysis$Time$sdate) # Retrieve and rearrange probability bins for the forecast if (is.null(probabilities$probs_fcst$prob_b33) || is.null(probabilities$probs_fcst$prob_33_to_66) || is.null(probabilities$probs_fcst$prob_a66)) { stop("The forecast tercile probability bins are not present inside ", - "'probabilities', the most likely tercile map cannot be plotted.") + "'probabilities', the most likely tercile map cannot be plotted.") } probs_fcst <- abind(probabilities$probs_fcst$prob_b33, - probabilities$probs_fcst$prob_33_to_66, - probabilities$probs_fcst$prob_a66, - along = 0) + probabilities$probs_fcst$prob_33_to_66, + probabilities$probs_fcst$prob_a66, + along = 0) names(dim(probs_fcst)) <- c("bin", - names(dim(probabilities$probs_fcst$prob_b33))) + names(dim(probabilities$probs_fcst$prob_b33))) ## TODO: Improve this section # Drop extra dims, add time dim if missing: @@ -370,7 +370,7 @@ plot_most_likely_terciles <- function(recipe, archive, probs_fcst <- Reorder(probs_fcst, c("time", "bin", "longitude", "latitude")) } else { probs_fcst <- Reorder(probs_fcst, - c("syear", "time", "bin", "longitude", "latitude")) + c("syear", "time", "bin", "longitude", "latitude")) } for (i_syear in start_date) { @@ -378,15 +378,15 @@ plot_most_likely_terciles <- function(recipe, archive, if (length(start_date) == 1) { i_probs_fcst <- probs_fcst outfile <- paste0(outdir, "forecast_most_likely_tercile-", start_date, - ".png") + ".png") } else { i_probs_fcst <- probs_fcst[which(start_date == i_syear), , , , ] outfile <- paste0(outdir, "forecast_most_likely_tercile-", i_syear, ".png") } toptitle <- paste("Most Likely Tercile -", variable, "-", system_name, "-", - "Initialization:", i_syear) + "Initialization:", i_syear) months <- lubridate::month(fcst$attrs$Dates[1, 1, which(start_date == i_syear), ], - label = T, abb = F) + label = T, abb = F) ## TODO: Ensure this works for daily and sub-daily cases titles <- as.vector(months) @@ -395,19 +395,19 @@ plot_most_likely_terciles <- function(recipe, archive, ## on. suppressWarnings( PlotLayout(PlotMostLikelyQuantileMap, c('bin', 'longitude', 'latitude'), - cat_dim = 'bin', - i_probs_fcst, longitude, latitude, - coast_width = 1.5, - title_scale = 0.6, - legend_scale = 0.8, #cex_bar_titles = 0.6, - toptitle = toptitle, - titles = titles, - fileout = outfile, - bar_label_digits = 2, - bar_scale = rep(0.7, 4), - bar_label_scale = 1.2, - axes_label_scale = 1.3, - triangle_ends = c(F, F), width = 11, height = 8) + cat_dim = 'bin', + i_probs_fcst, longitude, latitude, + coast_width = 1.5, + title_scale = 0.6, + legend_scale = 0.8, #cex_bar_titles = 0.6, + toptitle = toptitle, + titles = titles, + fileout = outfile, + bar_label_digits = 2, + bar_scale = rep(0.7, 4), + bar_label_scale = 1.2, + axes_label_scale = 1.3, + triangle_ends = c(F, F), width = 11, height = 8) ) } -- GitLab From e17e7b5368f29d248bb5ece4e5ef1c1eecc25b0e Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Thu, 13 Apr 2023 09:37:58 +0200 Subject: [PATCH 132/388] Replace tabs with spaces --- modules/Anomalies/Anomalies.R | 54 +++--- modules/Calibration/Calibration.R | 118 +++++++------- modules/Loading/Loading.R | 156 +++++++++--------- modules/Saving/Saving.R | 110 ++++++------- modules/Skill/Skill.R | 262 +++++++++++++++--------------- tools/check_recipe.R | 120 +++++++------- tools/data_summary.R | 4 +- tools/prepare_outputs.R | 12 +- tools/read_atomic_recipe.R | 2 +- tools/write_autosubmit_conf.R | 42 ++--- 10 files changed, 440 insertions(+), 440 deletions(-) diff --git a/modules/Anomalies/Anomalies.R b/modules/Anomalies/Anomalies.R index 5eb737b3..2e98b265 100644 --- a/modules/Anomalies/Anomalies.R +++ b/modules/Anomalies/Anomalies.R @@ -5,8 +5,8 @@ compute_anomalies <- function(recipe, data) { if (is.null(recipe$Analysis$Workflow$Anomalies$compute)) { error(recipe$Run$logger, - paste("The anomaly module has been called, but the element", - "'Workflow:Anomalies:compute' is missing from the recipe.")) + paste("The anomaly module has been called, but the element", + "'Workflow:Anomalies:compute' is missing from the recipe.")) stop() } @@ -22,13 +22,13 @@ compute_anomalies <- function(recipe, data) { # Compute anomalies anom <- CST_Anomaly(data$hcst, data$obs, - cross = cross, - memb = TRUE, - memb_dim = 'ensemble', - dim_anom = 'syear', - dat_dim = c('dat', 'ensemble'), - ftime_dim = 'time', - ncores = recipe$Analysis$ncores) + cross = cross, + memb = TRUE, + memb_dim = 'ensemble', + dim_anom = 'syear', + dat_dim = c('dat', 'ensemble'), + ftime_dim = 'time', + ncores = recipe$Analysis$ncores) # Reorder dims anom$exp$data <- Reorder(anom$exp$data, names(original_dims)) anom$obs$data <- Reorder(anom$obs$data, names(original_dims)) @@ -49,18 +49,18 @@ compute_anomalies <- function(recipe, data) { paste(data$hcst$attrs$Variable$variables[[var]]$long_name, "anomaly") # Change obs longname data$obs$attrs$Variable$variables[[var]]$long_name <- - paste(data$obs$attrs$Variable$variables[[var]]$long_name, "anomaly") + paste(data$obs$attrs$Variable$variables[[var]]$long_name, "anomaly") } # Compute forecast anomaly field if (!is.null(data$fcst)) { # Compute hindcast climatology ensemble mean clim <- s2dv::Clim(hcst_fullvalue$data, obs_fullvalue$data, - time_dim = "syear", - dat_dim = c("dat", "ensemble"), - memb = FALSE, - memb_dim = "ensemble", - ftime_dim = "time", - ncores = recipe$Analysis$ncores) + time_dim = "syear", + dat_dim = c("dat", "ensemble"), + memb = FALSE, + memb_dim = "ensemble", + ftime_dim = "time", + ncores = recipe$Analysis$ncores) clim_hcst <- InsertDim(clim$clim_exp, posdim = 1, lendim = 1, name = "syear") dims <- dim(clim_hcst) @@ -71,28 +71,28 @@ compute_anomalies <- function(recipe, data) { data$fcst$data <- data$fcst$data - clim_hcst # Change metadata for (var in data$fcst$attrs$Variable$varName) { - data$fcst$attrs$Variable$variables[[var]]$long_name <- - paste(data$fcst$attrs$Variable$variables[[var]]$long_name, "anomaly") + data$fcst$attrs$Variable$variables[[var]]$long_name <- + paste(data$fcst$attrs$Variable$variables[[var]]$long_name, "anomaly") } } info(recipe$Run$logger, - paste("The anomalies have been computed,", cross_msg, - "cross-validation. The original full fields are returned as", - "$hcst.full_val and $obs.full_val.")) + paste("The anomalies have been computed,", cross_msg, + "cross-validation. The original full fields are returned as", + "$hcst.full_val and $obs.full_val.")) info(recipe$Run$logger, "##### ANOMALIES COMPUTED SUCCESSFULLY #####") # Save outputs recipe$Run$output_dir <- paste0(recipe$Run$output_dir, - "/outputs/Anomalies/") + "/outputs/Anomalies/") # Save forecast if (recipe$Analysis$Workflow$Anomalies$save_outputs %in% - c('all', 'exp_only', 'fcst_only')) { + c('all', 'exp_only', 'fcst_only')) { save_forecast(recipe = recipe, data_cube = data$fcst, type = 'fcst') } # Save hindcast if (recipe$Analysis$Workflow$Anomalies$save_outputs %in% - c('all', 'exp_only')) { + c('all', 'exp_only')) { save_forecast(recipe = recipe, data_cube = data$hcst, type = 'hcst') } # Save observation @@ -101,14 +101,14 @@ compute_anomalies <- function(recipe, data) { } } else { warn(recipe$Run$logger, paste("The Anomalies module has been called, but", - "recipe parameter Analysis:Variables:anomaly is set to FALSE.", - "The full fields will be returned.")) + "recipe parameter Analysis:Variables:anomaly is set to FALSE.", + "The full fields will be returned.")) hcst_fullvalue <- NULL obs_fullvalue <- NULL info(recipe$Run$logger, "##### ANOMALIES NOT COMPUTED #####") } return(list(hcst = data$hcst, obs = data$obs, fcst = data$fcst, - hcst.full_val = hcst_fullvalue, obs.full_val = obs_fullvalue)) + hcst.full_val = hcst_fullvalue, obs.full_val = obs_fullvalue)) } diff --git a/modules/Calibration/Calibration.R b/modules/Calibration/Calibration.R index 7efdfa73..9d1db55f 100644 --- a/modules/Calibration/Calibration.R +++ b/modules/Calibration/Calibration.R @@ -11,9 +11,9 @@ calibrate_datasets <- function(recipe, data) { if (method == "raw") { warn(recipe$Run$logger, - paste("The Calibration module has been called, but the calibration", - "method in the recipe is 'raw'. The hcst and fcst will not be", - "calibrated.")) + paste("The Calibration module has been called, but the calibration", + "method in the recipe is 'raw'. The hcst and fcst will not be", + "calibrated.")) fcst_calibrated <- data$fcst hcst_calibrated <- data$hcst if (!is.null(data$hcst.full_val)) { @@ -45,7 +45,7 @@ calibrate_datasets <- function(recipe, data) { obs.mm <- obs$data for(dat in 1:(dim(data$hcst$data)['dat'][[1]]-1)) { obs.mm <- abind(obs.mm, data$obs$data, - along=which(names(dim(data$obs$data)) == 'dat')) + along=which(names(dim(data$obs$data)) == 'dat')) } names(dim(obs.mm)) <- names(dim(obs$data)) data$obs$data <- obs.mm @@ -57,9 +57,9 @@ calibrate_datasets <- function(recipe, data) { CST_CALIB_METHODS <- c("bias", "evmos", "mse_min", "crps_min", "rpc-based") ## TODO: implement other calibration methods if (!(method %in% CST_CALIB_METHODS)) { - error(recipe$Run$logger, - paste("Calibration method in the recipe is not available for", - "monthly data.")) + error(recipe$Run$logger, + paste("Calibration method in the recipe is not available for", + "monthly data.")) stop() } else { # Calibrate the hindcast @@ -74,24 +74,24 @@ calibrate_datasets <- function(recipe, data) { memb_dim = "ensemble", sdate_dim = "syear", ncores = ncores) - # In the case where anomalies have been computed, calibrate full values - if (!is.null(data$hcst.full_val)) { - hcst_full_calibrated <- CST_Calibration(data$hcst.full_val, - data$obs.full_val, - cal.method = method, - eval.method = "leave-one-out", - multi.model = mm, - na.fill = TRUE, - na.rm = na.rm, - apply_to = NULL, - memb_dim = "ensemble", - sdate_dim = "syear", - ncores = ncores) - } else { - hcst_full_calibrated <- NULL - } + # In the case where anomalies have been computed, calibrate full values + if (!is.null(data$hcst.full_val)) { + hcst_full_calibrated <- CST_Calibration(data$hcst.full_val, + data$obs.full_val, + cal.method = method, + eval.method = "leave-one-out", + multi.model = mm, + na.fill = TRUE, + na.rm = na.rm, + apply_to = NULL, + memb_dim = "ensemble", + sdate_dim = "syear", + ncores = ncores) + } else { + hcst_full_calibrated <- NULL + } - # Calibrate the forecast + # Calibrate the forecast if (!is.null(data$fcst)) { fcst_calibrated <- CST_Calibration(data$hcst, data$obs, data$fcst, cal.method = method, @@ -111,52 +111,52 @@ calibrate_datasets <- function(recipe, data) { } else if (recipe$Analysis$Variables$freq == "daily_mean") { # Daily data calibration using Quantile Mapping if (!(method %in% c("qmap"))) { - error(recipe$Run$logger, - paste("Calibration method in the recipe is not available for", - "daily data. Only quantile mapping 'qmap is implemented.")) + error(recipe$Run$logger, + paste("Calibration method in the recipe is not available for", + "daily data. Only quantile mapping 'qmap is implemented.")) stop() } # Calibrate the hindcast dim_order <- names(dim(data$hcst$data)) hcst_calibrated <- CST_QuantileMapping(data$hcst, data$obs, - exp_cor = NULL, - sdate_dim = "syear", - memb_dim = "ensemble", - # window_dim = "time", - method = "QUANT", - ncores = ncores, - na.rm = na.rm, - wet.day = F) + exp_cor = NULL, + sdate_dim = "syear", + memb_dim = "ensemble", + # window_dim = "time", + method = "QUANT", + ncores = ncores, + na.rm = na.rm, + wet.day = F) # Restore dimension order hcst_calibrated$data <- Reorder(hcst_calibrated$data, dim_order) # In the case where anomalies have been computed, calibrate full values if (!is.null(data$hcst.full_val)) { - hcst_full_calibrated <- CST_QuantileMapping(data$hcst.full_val, - data$obs.full_val, - exp_cor = NULL, - sdate_dim = "syear", - memb_dim = "ensemble", - method = "QUANT", - ncores = ncores, - na.rm = na.rm, - wet.day = F) + hcst_full_calibrated <- CST_QuantileMapping(data$hcst.full_val, + data$obs.full_val, + exp_cor = NULL, + sdate_dim = "syear", + memb_dim = "ensemble", + method = "QUANT", + ncores = ncores, + na.rm = na.rm, + wet.day = F) } else { - hcst_full_calibrated <- NULL + hcst_full_calibrated <- NULL } if (!is.null(data$fcst)) { # Calibrate the forecast fcst_calibrated <- CST_QuantileMapping(data$hcst, data$obs, - exp_cor = data$fcst, - sdate_dim = "syear", - memb_dim = "ensemble", - # window_dim = "time", - method = "QUANT", - ncores = ncores, - na.rm = na.rm, - wet.day = F) + exp_cor = data$fcst, + sdate_dim = "syear", + memb_dim = "ensemble", + # window_dim = "time", + method = "QUANT", + ncores = ncores, + na.rm = na.rm, + wet.day = F) # Restore dimension order - fcst_calibrated$data <- Reorder(fcst_calibrated$data, dim_order) + fcst_calibrated$data <- Reorder(fcst_calibrated$data, dim_order) } else { fcst_calibrated <- NULL } @@ -165,7 +165,7 @@ calibrate_datasets <- function(recipe, data) { info(recipe$Run$logger, CALIB_MSG) ## TODO: What do we do with the full values? recipe$Run$output_dir <- paste0(recipe$Run$output_dir, - "/outputs/Calibration/") + "/outputs/Calibration/") if (recipe$Analysis$Workflow$Calibration$save_outputs %in% c('all', 'exp_only', 'fcst_only')) { save_forecast(recipe = recipe, data_cube = fcst_calibrated, type = 'fcst') @@ -180,12 +180,12 @@ calibrate_datasets <- function(recipe, data) { ## TODO: Sort out returns return_list <- list(hcst = hcst_calibrated, - obs = data$obs, - fcst = fcst_calibrated) + obs = data$obs, + fcst = fcst_calibrated) if (!is.null(hcst_full_calibrated)) { return_list <- append(return_list, - list(hcst.full_val = hcst_full_calibrated, - obs.full_val = data$obs.full_val)) + list(hcst.full_val = hcst_full_calibrated, + obs.full_val = data$obs.full_val)) } return(return_list) } diff --git a/modules/Loading/Loading.R b/modules/Loading/Loading.R index 55b13451..c5eb41e6 100644 --- a/modules/Loading/Loading.R +++ b/modules/Loading/Loading.R @@ -72,17 +72,17 @@ load_datasets <- function(recipe) { obs.path <- paste0(archive$src, obs.dir, store.freq, "/$var$", reference_descrip[[store.freq]][[variable]], - "$var$_$file_date$.nc") + "$var$_$file_date$.nc") hcst.path <- paste0(archive$src, hcst.dir, store.freq, "/$var$", exp_descrip[[store.freq]][[variable]], - "$var$_$file_date$.nc") + "$var$_$file_date$.nc") fcst.path <- paste0(archive$src, hcst.dir, store.freq, "/$var$", - exp_descrip[[store.freq]][[variable]], - "$var$_$file_date$.nc") + exp_descrip[[store.freq]][[variable]], + "$var$_$file_date$.nc") # Define regrid parameters: #------------------------------------------------------------------- @@ -114,7 +114,7 @@ load_datasets <- function(recipe) { transform_vars = c('latitude', 'longitude'), synonims = list(latitude = c('lat', 'latitude'), longitude = c('lon', 'longitude'), - ensemble = c('member', 'ensemble')), + ensemble = c('member', 'ensemble')), ensemble = indices(1:hcst.nmember), return_vars = list(latitude = 'dat', longitude = 'dat', @@ -134,7 +134,7 @@ load_datasets <- function(recipe) { # Change time attribute dimensions default_time_dims <- c(sday = 1, sweek = 1, syear = 1, time = 1) names(dim(attr(hcst, "Variables")$common$time))[which(names( - dim(attr(hcst, "Variables")$common$time)) == 'file_date')] <- "syear" + dim(attr(hcst, "Variables")$common$time)) == 'file_date')] <- "syear" default_time_dims[names(dim(attr(hcst, "Variables")$common$time))] <- dim(attr(hcst, "Variables")$common$time) dim(attr(hcst, "Variables")$common$time) <- default_time_dims @@ -157,26 +157,26 @@ load_datasets <- function(recipe) { # multiple dims split fcst <- Start(dat = fcst.path, - var = variable, - file_date = sdates$fcst, + var = variable, + file_date = sdates$fcst, time = idxs$fcst, - latitude = values(list(lats.min, lats.max)), - latitude_reorder = Sort(), - longitude = values(list(lons.min, lons.max)), - longitude_reorder = circularsort, - transform = regrid_params$fcst.transform, - transform_params = list(grid = regrid_params$fcst.gridtype, - method = regrid_params$fcst.gridmethod), - transform_vars = c('latitude', 'longitude'), - synonims = list(latitude = c('lat', 'latitude'), - longitude = c('lon', 'longitude'), - ensemble = c('member', 'ensemble')), - ensemble = indices(1:fcst.nmember), - return_vars = list(latitude = 'dat', - longitude = 'dat', - time = 'file_date'), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = circularsort, + transform = regrid_params$fcst.transform, + transform_params = list(grid = regrid_params$fcst.gridtype, + method = regrid_params$fcst.gridmethod), + transform_vars = c('latitude', 'longitude'), + synonims = list(latitude = c('lat', 'latitude'), + longitude = c('lon', 'longitude'), + ensemble = c('member', 'ensemble')), + ensemble = indices(1:fcst.nmember), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = 'file_date'), split_multiselected_dims = split_multiselected_dims, - retrieve = TRUE) + retrieve = TRUE) if (recipe$Analysis$Variables$freq == "daily_mean") { # Adjusts dims for daily case, could be removed if startR allows @@ -201,7 +201,7 @@ load_datasets <- function(recipe) { # Adjust dates for models where the time stamp goes into the next month if (recipe$Analysis$Variables$freq == "monthly_mean") { fcst$attrs$Dates[] <- - fcst$attrs$Dates - seconds(exp_descrip$time_stamp_lag) + fcst$attrs$Dates - seconds(exp_descrip$time_stamp_lag) } } else { @@ -215,9 +215,9 @@ load_datasets <- function(recipe) { # the corresponding observations are loaded correctly. dates <- hcst$attrs$Dates dim(dates) <- dim(Subset(hcst$data, - along=c('dat', 'var', - 'latitude', 'longitude', 'ensemble'), - list(1,1,1,1,1), drop="selected")) + along=c('dat', 'var', + 'latitude', 'longitude', 'ensemble'), + list(1,1,1,1,1), drop="selected")) # Separate Start() call for monthly vs daily data if (store.freq == "monthly_mean") { @@ -227,22 +227,22 @@ load_datasets <- function(recipe) { obs <- Start(dat = obs.path, var = variable, - file_date = dates_file, - latitude = values(list(lats.min, lats.max)), - latitude_reorder = Sort(), - longitude = values(list(lons.min, lons.max)), - longitude_reorder = circularsort, - transform = regrid_params$obs.transform, - transform_params = list(grid = regrid_params$obs.gridtype, - method = regrid_params$obs.gridmethod), - transform_vars = c('latitude', 'longitude'), - synonims = list(latitude = c('lat', 'y', 'latitude'), - longitude = c('lon', 'x', 'longitude')), - return_vars = list(latitude = 'dat', - longitude = 'dat', - time = 'file_date'), - split_multiselected_dims = TRUE, - retrieve = TRUE) + file_date = dates_file, + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = circularsort, + transform = regrid_params$obs.transform, + transform_params = list(grid = regrid_params$obs.gridtype, + method = regrid_params$obs.gridmethod), + transform_vars = c('latitude', 'longitude'), + synonims = list(latitude = c('lat', 'y', 'latitude'), + longitude = c('lon', 'x', 'longitude')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = 'file_date'), + split_multiselected_dims = TRUE, + retrieve = TRUE) } else if (store.freq == "daily_mean") { @@ -256,28 +256,28 @@ load_datasets <- function(recipe) { dim(dates) <- dim(dates_file) obs <- Start(dat = obs.path, - var = variable, - file_date = sort(unique(dates_file)), - time = dates, - time_var = 'time', - time_across = 'file_date', - merge_across_dims = TRUE, - merge_across_dims_narm = TRUE, - latitude = values(list(lats.min, lats.max)), - latitude_reorder = Sort(), - longitude = values(list(lons.min, lons.max)), - longitude_reorder = circularsort, - transform = regrid_params$obs.transform, - transform_params = list(grid = regrid_params$obs.gridtype, - method = regrid_params$obs.gridmethod), - transform_vars = c('latitude', 'longitude'), - synonims = list(latitude = c('lat','latitude'), - longitude = c('lon','longitude')), - return_vars = list(latitude = 'dat', - longitude = 'dat', - time = 'file_date'), - split_multiselected_dims = TRUE, - retrieve = TRUE) + var = variable, + file_date = sort(unique(dates_file)), + time = dates, + time_var = 'time', + time_across = 'file_date', + merge_across_dims = TRUE, + merge_across_dims_narm = TRUE, + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = circularsort, + transform = regrid_params$obs.transform, + transform_params = list(grid = regrid_params$obs.gridtype, + method = regrid_params$obs.gridmethod), + transform_vars = c('latitude', 'longitude'), + synonims = list(latitude = c('lat','latitude'), + longitude = c('lon','longitude')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = 'file_date'), + split_multiselected_dims = TRUE, + retrieve = TRUE) } # Adds ensemble dim to obs (for consistency with hcst/fcst) @@ -294,27 +294,27 @@ load_datasets <- function(recipe) { if (!(recipe$Analysis$Regrid$type == 'none')) { if (!isTRUE(all.equal(as.vector(hcst$lat), as.vector(obs$lat)))) { lat_error_msg <- paste("Latitude mismatch between hcst and obs.", - "Please check the original grids and the", - "regrid parameters in your recipe.") + "Please check the original grids and the", + "regrid parameters in your recipe.") error(recipe$Run$logger, lat_error_msg) hcst_lat_msg <- paste0("First hcst lat: ", hcst$lat[1], - "; Last hcst lat: ", hcst$lat[length(hcst$lat)]) + "; Last hcst lat: ", hcst$lat[length(hcst$lat)]) info(recipe$Run$logger, hcst_lat_msg) obs_lat_msg <- paste0("First obs lat: ", obs$lat[1], - "; Last obs lat: ", obs$lat[length(obs$lat)]) + "; Last obs lat: ", obs$lat[length(obs$lat)]) info(recipe$Run$logger, obs_lat_msg) stop("hcst and obs don't share the same latitudes.") } if (!isTRUE(all.equal(as.vector(hcst$lon), as.vector(obs$lon)))) { lon_error_msg <- paste("Longitude mismatch between hcst and obs.", - "Please check the original grids and the", - "regrid parameters in your recipe.") + "Please check the original grids and the", + "regrid parameters in your recipe.") error(recipe$Run$logger, lon_error_msg) hcst_lon_msg <- paste0("First hcst lon: ", hcst$lon[1], - "; Last hcst lon: ", hcst$lon[length(hcst$lon)]) + "; Last hcst lon: ", hcst$lon[length(hcst$lon)]) info(recipe$Run$logger, hcst_lon_msg) obs_lon_msg <- paste0("First obs lon: ", obs$lon[1], - "; Last obs lon: ", obs$lon[length(obs$lon)]) + "; Last obs lon: ", obs$lon[length(obs$lon)]) info(recipe$Run$logger, obs_lon_msg) stop("hcst and obs don't share the same longitudes.") @@ -325,7 +325,7 @@ load_datasets <- function(recipe) { dictionary <- read_yaml("conf/variable-dictionary.yml") if (dictionary$vars[[variable]]$accum) { info(recipe$Run$logger, - "Accumulated variable: setting negative values to zero.") + "Accumulated variable: setting negative values to zero.") obs$data[obs$data < 0] <- 0 hcst$data[hcst$data < 0] <- 0 if (!is.null(fcst)) { @@ -339,9 +339,9 @@ load_datasets <- function(recipe) { if (variable == "prlr") { # Verify that the units are m/s and the same in obs and hcst if (((obs$attrs$Variable$metadata[[variable]]$units == "m s-1") || - (obs$attrs$Variable$metadata[[variable]]$units == "m s**-1")) && - ((hcst$attrs$Variable$metadata[[variable]]$units == "m s-1") || - (hcst$attrs$Variable$metadata[[variable]]$units == "m s**-1"))) { + (obs$attrs$Variable$metadata[[variable]]$units == "m s**-1")) && + ((hcst$attrs$Variable$metadata[[variable]]$units == "m s-1") || + (hcst$attrs$Variable$metadata[[variable]]$units == "m s**-1"))) { info(recipe$Run$logger, "Converting precipitation from m/s to mm/day.") obs$data <- obs$data*86400*1000 diff --git a/modules/Saving/Saving.R b/modules/Saving/Saving.R index fb7910a2..c900fffe 100644 --- a/modules/Saving/Saving.R +++ b/modules/Saving/Saving.R @@ -33,12 +33,12 @@ save_data <- function(recipe, data, # Export hindcast, forecast and observations onto outfile save_forecast(recipe = recipe, data_cube = data$hcst, - type = 'hcst', - outdir = outdir) + type = 'hcst', + outdir = outdir) if (!is.null(data$fcst)) { save_forecast(recipe = recipe, data_cube = data$fcst, - type = 'fcst', - outdir = outdir) + type = 'fcst', + outdir = outdir) } save_observations(recipe = recipe, data_cube = data$obs, outdir = outdir) @@ -79,9 +79,9 @@ save_data <- function(recipe, data, outdir = outdir) if (!is.null(probabilities$probs_fcst)) { save_probabilities(recipe = recipe, probs = probabilities$probs_fcst, - data_cube = data$fcst, - type = "fcst", - outdir = outdir) + data_cube = data$fcst, + type = "fcst", + outdir = outdir) } } } @@ -91,7 +91,7 @@ get_global_attributes <- function(recipe, archive) { # netCDF files. parameters <- recipe$Analysis hcst_period <- paste0(parameters$Time$hcst_start, " to ", - parameters$Time$hcst_end) + parameters$Time$hcst_end) current_time <- paste0(as.character(Sys.time()), " ", Sys.timezone()) system_name <- parameters$Datasets$System$name reference_name <- parameters$Datasets$Reference$name @@ -122,7 +122,7 @@ get_times <- function(store.freq, fcst.horizon, leadtimes, sdate, calendar) { dim(time) <- length(time) sdate <- as.Date(sdate, format = '%Y%m%d') # reformatting metadata <- list(time = list(units = paste0(ref, sdate, 'T00:00:00'), - calendar = calendar)) + calendar = calendar)) attr(time, 'variables') <- metadata names(dim(time)) <- 'time' @@ -157,9 +157,9 @@ get_latlon <- function(latitude, longitude) { } save_forecast <- function(recipe, - data_cube, - type = "hcst", - agg = "global", + data_cube, + type = "hcst", + agg = "global", outdir = NULL) { # Loops over the years in the s2dv_cube containing a hindcast or forecast # and exports each year to a netCDF file. @@ -194,11 +194,11 @@ save_forecast <- function(recipe, if (type == 'hcst') { init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, '-', sprintf('%02d', init_month), '-01'), - cal = calendar) + cal = calendar) } else if (type == 'fcst') { init_date <- as.PCICt(paste0(recipe$Analysis$Time$fcst_year[1], '-', sprintf('%02d', init_month), '-01'), - cal = calendar) + cal = calendar) } } else { if (type == 'hcst') { @@ -208,7 +208,7 @@ save_forecast <- function(recipe, } else if (type == 'fcst') { init_date <- as.PCICt(paste0(recipe$Analysis$Time$fcst_year, recipe$Analysis$Time$sdate), - format = '%Y%m%d', cal = calendar) + format = '%Y%m%d', cal = calendar) } } # Get time difference in hours @@ -245,8 +245,8 @@ save_forecast <- function(recipe, } metadata <- list(fcst = list(name = var.expname, - standard_name = var.sdname, - long_name = var.longname, + standard_name = var.sdname, + long_name = var.longname, units = var.units)) attr(fcst[[1]], 'variables') <- metadata names(dim(fcst[[1]])) <- dims @@ -274,7 +274,7 @@ save_forecast <- function(recipe, # Generate name of output file outfile <- get_filename(outdir, recipe, data_cube$attrs$Variable$varName, - fcst.sdate, agg, "exp") + fcst.sdate, agg, "exp") # Get grid data and metadata and export to netCDF if (tolower(agg) == "country") { @@ -291,14 +291,14 @@ save_forecast <- function(recipe, } } info(recipe$Run$logger, paste("#####", toupper(type), - "SAVED TO NETCDF FILE #####")) + "SAVED TO NETCDF FILE #####")) } save_observations <- function(recipe, - data_cube, + data_cube, agg = "global", - outdir = NULL) { + outdir = NULL) { # Loops over the years in the s2dv_cube containing the observations and # exports each year to a netCDF file. # data_cube: s2dv_cube containing the data and metadata @@ -332,7 +332,7 @@ save_observations <- function(recipe, init_month <- archive$System[[recipe$Analysis$Datasets$System$name]]$initial_month init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, '-', sprintf('%02d', init_month), '-01'), - cal = calendar) + cal = calendar) } else { init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, @@ -372,8 +372,8 @@ save_observations <- function(recipe, } metadata <- list(fcst = list(name = var.expname, - standard_name = var.sdname, - long_name = var.longname, + standard_name = var.sdname, + long_name = var.longname, units = var.units)) attr(fcst[[1]], 'variables') <- metadata names(dim(fcst[[1]])) <- dims @@ -414,7 +414,7 @@ save_observations <- function(recipe, # Generate name of output file outfile <- get_filename(outdir, recipe, data_cube$attrs$Variable$varName, - fcst.sdate, agg, "obs") + fcst.sdate, agg, "obs") # Get grid data and metadata and export to netCDF if (tolower(agg) == "country") { @@ -443,10 +443,10 @@ save_observations <- function(recipe, # } save_metrics <- function(recipe, - skill, + skill, data_cube, agg = "global", - outdir = NULL) { + outdir = NULL) { # This function adds metadata to the skill metrics in 'skill' # and exports them to a netCDF file inside 'outdir'. @@ -467,10 +467,10 @@ save_metrics <- function(recipe, if ((!is.null(recipe$Analysis$Workflow$Anomalies$compute)) && (recipe$Analysis$Workflow$Anomalies$compute)) { global_attributes <- c(list(from_anomalies = "Yes"), - global_attributes) + global_attributes) } else { global_attributes <- c(list(from_anomalies = "No"), - global_attributes) + global_attributes) } attr(skill[[1]], 'global_attrs') <- global_attributes @@ -487,9 +487,9 @@ save_metrics <- function(recipe, dims <- c(lalo, 'time') } metadata <- list(metric = list(name = metric, - standard_name = sdname, - long_name = long_name, - missing_value = missing_val)) + standard_name = sdname, + long_name = long_name, + missing_value = missing_val)) attr(skill[[i]], 'variables') <- metadata names(dim(skill[[i]])) <- dims } @@ -507,7 +507,7 @@ save_metrics <- function(recipe, init_month <- archive$System[[recipe$Analysis$Datasets$System$name]]$initial_month init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, '-', sprintf('%02d', init_month), '-01'), - cal = calendar) + cal = calendar) } else { init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, recipe$Analysis$Time$sdate), @@ -544,7 +544,7 @@ save_metrics <- function(recipe, outdir <- get_dir(recipe) } outfile <- get_filename(outdir, recipe, data_cube$attrs$Variable$varName, - fcst.sdate, agg, "skill") + fcst.sdate, agg, "skill") # Get grid data and metadata and export to netCDF if (tolower(agg) == "country") { @@ -585,10 +585,10 @@ save_corr <- function(recipe, if ((!is.null(recipe$Analysis$Workflow$Anomalies$compute)) && (recipe$Analysis$Workflow$Anomalies$compute)) { global_attributes <- c(global_attributes, - list(from_anomalies = "Yes")) + list(from_anomalies = "Yes")) } else { global_attributes <- c(global_attributes, - list(from_anomalies = "No")) + list(from_anomalies = "No")) } attr(skill[[1]], 'global_attrs') <- global_attributes @@ -605,9 +605,9 @@ save_corr <- function(recipe, dims <- c(lalo, 'ensemble', 'time') } metadata <- list(metric = list(name = metric, - standard_name = sdname, - long_name = long_name, - missing_value = missing_val)) + standard_name = sdname, + long_name = long_name, + missing_value = missing_val)) attr(skill[[i]], 'variables') <- metadata names(dim(skill[[i]])) <- dims } @@ -624,7 +624,7 @@ save_corr <- function(recipe, init_month <- archive$System[[recipe$Analysis$Datasets$System$name]]$initial_month init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, '-', sprintf('%02d', init_month), '-01'), - cal = calendar) + cal = calendar) } else { init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, recipe$Analysis$Time$sdate), @@ -661,7 +661,7 @@ save_corr <- function(recipe, outdir <- get_dir(recipe) } outfile <- get_filename(outdir, recipe, data_cube$attrs$Variable$varName, - fcst.sdate, agg, "corr") + fcst.sdate, agg, "corr") # Get grid data and metadata and export to netCDF if (tolower(agg) == "country") { @@ -681,10 +681,10 @@ save_corr <- function(recipe, } save_percentiles <- function(recipe, - percentiles, + percentiles, data_cube, agg = "global", - outdir = NULL) { + outdir = NULL) { # This function adds metadata to the percentiles # and exports them to a netCDF file inside 'outdir'. archive <- get_archive(recipe) @@ -703,10 +703,10 @@ save_percentiles <- function(recipe, if ((!is.null(recipe$Analysis$Workflow$Anomalies$compute)) && (recipe$Analysis$Workflow$Anomalies$compute)) { global_attributes <- c(list(from_anomalies = "Yes"), - global_attributes) + global_attributes) } else { global_attributes <- c(list(from_anomalies = "No"), - global_attributes) + global_attributes) } attr(percentiles[[1]], 'global_attrs') <- global_attributes @@ -735,7 +735,7 @@ save_percentiles <- function(recipe, init_month <- archive$System[[recipe$Analysis$Datasets$System$name]]$initial_month init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, '-', sprintf('%02d', init_month), '-01'), - cal = calendar) + cal = calendar) } else { init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, recipe$Analysis$Time$sdate), @@ -771,7 +771,7 @@ save_percentiles <- function(recipe, outdir <- get_dir(recipe) } outfile <- get_filename(outdir, recipe, data_cube$attrs$Variable$varName, - fcst.sdate, agg, "percentiles") + fcst.sdate, agg, "percentiles") # Get grid data and metadata and export to netCDF if (tolower(agg) == "country") { country <- get_countries(grid) @@ -789,11 +789,11 @@ save_percentiles <- function(recipe, } save_probabilities <- function(recipe, - probs, - data_cube, + probs, + data_cube, agg = "global", - type = "hcst", - outdir = NULL) { + type = "hcst", + outdir = NULL) { # Loops over the years in the s2dv_cube containing a hindcast or forecast # and exports the corresponding category probabilities to a netCDF file. # probs: array containing the probability data @@ -817,10 +817,10 @@ save_probabilities <- function(recipe, if ((!is.null(recipe$Analysis$Workflow$Anomalies$compute)) && (recipe$Analysis$Workflow$Anomalies$compute)) { global_attributes <- c(list(from_anomalies = "Yes"), - global_attributes) + global_attributes) } else { global_attributes <- c(list(from_anomalies = "No"), - global_attributes) + global_attributes) } fcst.horizon <- tolower(recipe$Analysis$Horizon) store.freq <- recipe$Analysis$Variables$freq @@ -834,7 +834,7 @@ save_probabilities <- function(recipe, init_month <- archive$System[[recipe$Analysis$Datasets$System$name]]$initial_month init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, '-', sprintf('%02d', init_month), '-01'), - cal = calendar) + cal = calendar) } else { init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, recipe$Analysis$Time$sdate), @@ -891,7 +891,7 @@ save_probabilities <- function(recipe, # Generate name of output file outfile <- get_filename(outdir, recipe, data_cube$attrs$Variable$varName, - fcst.sdate, agg, "probs") + fcst.sdate, agg, "probs") # Get grid data and metadata and export to netCDF if (tolower(agg) == "country") { diff --git a/modules/Skill/Skill.R b/modules/Skill/Skill.R index e0962405..2600e5eb 100644 --- a/modules/Skill/Skill.R +++ b/modules/Skill/Skill.R @@ -52,8 +52,8 @@ source("modules/Skill/R/tmp/RandomWalkTest.R") # " it can call ", metric_fun )) # compute_skill_metrics <- function(recipe, data$hcst, obs, -# clim_data$hcst = NULL, -# clim_obs = NULL) { +# clim_data$hcst = NULL, +# clim_obs = NULL) { compute_skill_metrics <- function(recipe, data) { # data$hcst: s2dv_cube containing the hindcast @@ -68,14 +68,14 @@ compute_skill_metrics <- function(recipe, data) { # if (recipe$Analysis$Workflow$Anomalies$compute) { # if (is.null(clim_data$hcst) || is.null(clim_obs)) { # warn(recipe$Run$logger, "Anomalies have been requested in the recipe, -# but the climatologies have not been provided in the -# compute_skill_metrics call. Be aware that some metrics like the -# Mean Bias may not be correct.") +# but the climatologies have not been provided in the +# compute_skill_metrics call. Be aware that some metrics like the +# Mean Bias may not be correct.") # } # } else { # warn(recipe$Run$logger, "Anomaly computation was not requested in the -# recipe. Be aware that some metrics, such as the CRPSS may not be -# correct.") +# recipe. Be aware that some metrics, such as the CRPSS may not be +# correct.") # } time_dim <- 'syear' memb_dim <- 'ensemble' @@ -94,7 +94,7 @@ compute_skill_metrics <- function(recipe, data) { for (metric in strsplit(metrics, ", | |,")[[1]]) { # Whether the fair version of the metric is to be computed if (metric %in% c('frps', 'frpss', 'bss10', 'bss90', - 'fcrps', 'fcrpss')) { + 'fcrps', 'fcrpss')) { Fair <- T } else { Fair <- F @@ -108,65 +108,65 @@ compute_skill_metrics <- function(recipe, data) { # Ranked Probability Score and Fair version if (metric %in% c('rps', 'frps')) { skill <- RPS(data$hcst$data, data$obs$data, - time_dim = time_dim, - memb_dim = memb_dim, - Fair = Fair, - ncores = ncores) + time_dim = time_dim, + memb_dim = memb_dim, + Fair = Fair, + ncores = ncores) skill <- .drop_dims(skill) skill_metrics[[ metric ]] <- skill # Ranked Probability Skill Score and Fair version } else if (metric %in% c('rpss', 'frpss')) { skill <- RPSS(data$hcst$data, data$obs$data, - time_dim = time_dim, - memb_dim = memb_dim, - Fair = Fair, - ncores = ncores) + time_dim = time_dim, + memb_dim = memb_dim, + Fair = Fair, + ncores = ncores) skill <- lapply(skill, function(x) { - .drop_dims(x)}) + .drop_dims(x)}) skill_metrics[[ metric ]] <- skill$rpss skill_metrics[[ paste0(metric, "_significance") ]] <- skill$sign # Brier Skill Score - 10th percentile } else if (metric == 'bss10') { skill <- RPSS(data$hcst$data, data$obs$data, - time_dim = time_dim, - memb_dim = memb_dim, - prob_thresholds = 0.1, - Fair = Fair, - ncores = ncores) + time_dim = time_dim, + memb_dim = memb_dim, + prob_thresholds = 0.1, + Fair = Fair, + ncores = ncores) skill <- lapply(skill, function(x) { - .drop_dims(x)}) + .drop_dims(x)}) skill_metrics[[ metric ]] <- skill$rpss skill_metrics[[ paste0(metric, "_significance") ]] <- skill$sign # Brier Skill Score - 90th percentile } else if (metric == 'bss90') { skill <- RPSS(data$hcst$data, data$obs$data, - time_dim = time_dim, - memb_dim = memb_dim, - prob_thresholds = 0.9, - Fair = Fair, - ncores = ncores) + time_dim = time_dim, + memb_dim = memb_dim, + prob_thresholds = 0.9, + Fair = Fair, + ncores = ncores) skill <- lapply(skill, function(x) { - .drop_dims(x)}) + .drop_dims(x)}) skill_metrics[[ metric ]] <- skill$rpss skill_metrics[[ paste0(metric, "_significance") ]] <- skill$sign # CRPS and FCRPS } else if (metric %in% c('crps', 'fcrps')) { skill <- CRPS(data$hcst$data, data$obs$data, - time_dim = time_dim, - memb_dim = memb_dim, - Fair = Fair, - ncores = ncores) + time_dim = time_dim, + memb_dim = memb_dim, + Fair = Fair, + ncores = ncores) skill <- .drop_dims(skill) skill_metrics[[ metric ]] <- skill # CRPSS and FCRPSS } else if (metric %in% c('crpss', 'fcrpss')) { skill <- CRPSS(data$hcst$data, data$obs$data, - time_dim = time_dim, - memb_dim = memb_dim, - Fair = Fair, - ncores = ncores) + time_dim = time_dim, + memb_dim = memb_dim, + Fair = Fair, + ncores = ncores) skill <- lapply(skill, function(x) { - .drop_dims(x)}) + .drop_dims(x)}) skill_metrics[[ metric ]] <- skill$crpss skill_metrics[[ paste0(metric, "_significance") ]] <- skill$sign # Mean bias (climatology) @@ -174,35 +174,35 @@ compute_skill_metrics <- function(recipe, data) { ## TODO: Eliminate option to compute from anomalies # Compute from full field if ((!is.null(data$hcst.full_val)) && (!is.null(data$obs.full_val)) && - (recipe$Analysis$Workflow$Anomalies$compute)) { - skill <- Bias(data$hcst.full_val$data, data$obs.full_val$data, - time_dim = time_dim, - memb_dim = memb_dim, - ncores = ncores) + (recipe$Analysis$Workflow$Anomalies$compute)) { + skill <- Bias(data$hcst.full_val$data, data$obs.full_val$data, + time_dim = time_dim, + memb_dim = memb_dim, + ncores = ncores) } else { skill <- Bias(data$hcst$data, data$obs$data, time_dim = time_dim, - memb_dim = memb_dim, - ncores = ncores) + memb_dim = memb_dim, + ncores = ncores) } skill <- .drop_dims(skill) skill_metrics[[ metric ]] <- skill # Mean bias skill score } else if (metric == 'mean_bias_ss') { if ((!is.null(data$hcst.full_val)) && (!is.null(data$obs.full_val)) && - (recipe$Analysis$Workflow$Anomalies$compute)) { - skill <- AbsBiasSS(data$hcst.full_val$data, data$obs.full_val$data, - time_dim = time_dim, - memb_dim = memb_dim, - ncores = ncores) + (recipe$Analysis$Workflow$Anomalies$compute)) { + skill <- AbsBiasSS(data$hcst.full_val$data, data$obs.full_val$data, + time_dim = time_dim, + memb_dim = memb_dim, + ncores = ncores) } else { skill <- AbsBiasSS(data$hcst$data, data$obs$data, - time_dim = time_dim, - memb_dim = memb_dim, - ncores = ncores) + time_dim = time_dim, + memb_dim = memb_dim, + ncores = ncores) } skill <- lapply(skill, function(x) { - .drop_dims(x)}) + .drop_dims(x)}) skill_metrics[[ metric ]] <- skill$biasSS skill_metrics[[ paste0(metric, "_significance") ]] <- skill$sign # Ensemble mean correlation @@ -214,43 +214,43 @@ compute_skill_metrics <- function(recipe, data) { time_dim = time_dim, method = 'pearson', memb_dim = memb_dim, - memb = memb, - conf = F, - pval = F, - sign = T, - alpha = 0.05, + memb = memb, + conf = F, + pval = F, + sign = T, + alpha = 0.05, ncores = ncores) skill <- lapply(skill, function(x) { - .drop_dims(x)}) + .drop_dims(x)}) skill_metrics[[ metric ]] <- skill$corr skill_metrics[[ paste0(metric, "_significance") ]] <- skill$sign } else if (metric == 'rmsss') { # Compute RMSSS skill <- RMSSS(data$hcst$data, data$obs$data, - dat_dim = 'dat', - time_dim = time_dim, - memb_dim = memb_dim, - pval = FALSE, - sign = TRUE, - sig_method = 'Random Walk', - ncores = ncores) + dat_dim = 'dat', + time_dim = time_dim, + memb_dim = memb_dim, + pval = FALSE, + sign = TRUE, + sig_method = 'Random Walk', + ncores = ncores) # Compute ensemble mean and modify dimensions skill <- lapply(skill, function(x) { - .drop_dims(x)}) + .drop_dims(x)}) skill_metrics[[ metric ]] <- skill$rmsss skill_metrics[[ paste0(metric, "_significance") ]] <- skill$sign } else if (metric == 'enssprerr') { # Remove ensemble dim from obs to avoid veriApply warning obs_noensdim <- ClimProjDiags::Subset(data$obs$data, "ensemble", 1, - drop = "selected") + drop = "selected") capture.output( skill <- easyVerification::veriApply(verifun = 'EnsSprErr', - fcst = data$hcst$data, - obs = obs_noensdim, - tdim = which(names(dim(data$hcst$data))==time_dim), - ensdim = which(names(dim(data$hcst$data))==memb_dim), - na.rm = na.rm, - ncpus = ncores) + fcst = data$hcst$data, + obs = obs_noensdim, + tdim = which(names(dim(data$hcst$data))==time_dim), + ensdim = which(names(dim(data$hcst$data))==memb_dim), + na.rm = na.rm, + ncpus = ncores) ) remove(obs_noensdim) skill <- .drop_dims(skill) @@ -261,21 +261,21 @@ compute_skill_metrics <- function(recipe, data) { ## Retain _specs in metric name for clarity metric_name <- (strsplit(metric, "_"))[[1]][1] # Get metric name if (!(metric_name %in% c('frpss', 'frps', 'bss10', 'bss90', 'enscorr', - 'rpss'))) { - warn(recipe$Run$logger, - "Some of the requested SpecsVerification metrics are not available.") + 'rpss'))) { + warn(recipe$Run$logger, + "Some of the requested SpecsVerification metrics are not available.") } capture.output( skill <- Compute_verif_metrics(data$hcst$data, data$obs$data, - skill_metrics = metric_name, - verif.dims=c("syear", "sday", "sweek"), - na.rm = na.rm, - ncores = ncores) + skill_metrics = metric_name, + verif.dims=c("syear", "sday", "sweek"), + na.rm = na.rm, + ncores = ncores) ) skill <- .drop_dims(skill) if (metric_name == "frps") { - # Compute yearly mean for FRPS - skill <- colMeans(skill, dims = 1) + # Compute yearly mean for FRPS + skill <- colMeans(skill, dims = 1) } skill_metrics[[ metric ]] <- skill } @@ -283,19 +283,19 @@ compute_skill_metrics <- function(recipe, data) { info(recipe$Run$logger, "##### SKILL METRIC COMPUTATION COMPLETE #####") # Save outputs recipe$Run$output_dir <- paste0(recipe$Run$output_dir, - "/outputs/Skill/") + "/outputs/Skill/") # Separate 'corr' from the rest of the metrics because of extra 'ensemble' dim if (recipe$Analysis$Workflow$Skill$save_outputs == 'all') { corr_metric_names <- grep("^corr", names(skill_metrics)) # Save corr if (length(skill_metrics[corr_metric_names]) > 0) { save_corr(recipe = recipe, skill = skill_metrics[corr_metric_names], - data_cube = data$hcst) + data_cube = data$hcst) } # Save other skill metrics if (length(skill_metrics[-corr_metric_names]) > 0) { save_metrics(recipe = recipe, skill = skill_metrics[-corr_metric_names], - data_cube = data$hcst) + data_cube = data$hcst) } } # Return results @@ -323,46 +323,46 @@ compute_probabilities <- function(recipe, data) { if (is.null(recipe$Analysis$Workflow$Probabilities$percentiles)) { error(recipe$Run$logger, "Quantiles and probability bins have been - requested, but no thresholds are provided in the recipe.") + requested, but no thresholds are provided in the recipe.") stop() } else { for (element in recipe$Analysis$Workflow$Probabilities$percentiles) { # Parse thresholds in recipe thresholds <- sapply(element, function (x) eval(parse(text = x))) quants <- compute_quants(data$hcst$data, thresholds, - ncores = ncores, - na.rm = na.rm) + ncores = ncores, + na.rm = na.rm) probs <- compute_probs(data$hcst$data, quants, - ncores = ncores, - na.rm = na.rm) + ncores = ncores, + na.rm = na.rm) for (i in seq(1:dim(quants)['bin'][[1]])) { - named_quantiles <- append(named_quantiles, - list(ClimProjDiags::Subset(quants, - 'bin', i))) - names(named_quantiles)[length(named_quantiles)] <- paste0("percentile_", - as.integer(thresholds[i]*100)) + named_quantiles <- append(named_quantiles, + list(ClimProjDiags::Subset(quants, + 'bin', i))) + names(named_quantiles)[length(named_quantiles)] <- paste0("percentile_", + as.integer(thresholds[i]*100)) } for (i in seq(1:dim(probs)['bin'][[1]])) { - if (i == 1) { - name_i <- paste0("prob_b", as.integer(thresholds[1]*100)) - } else if (i == dim(probs)['bin'][[1]]) { - name_i <- paste0("prob_a", as.integer(thresholds[i-1]*100)) - } else { - name_i <- paste0("prob_", as.integer(thresholds[i-1]*100), "_to_", - as.integer(thresholds[i]*100)) - } - named_probs <- append(named_probs, - list(ClimProjDiags::Subset(probs, - 'bin', i))) - names(named_probs)[length(named_probs)] <- name_i + if (i == 1) { + name_i <- paste0("prob_b", as.integer(thresholds[1]*100)) + } else if (i == dim(probs)['bin'][[1]]) { + name_i <- paste0("prob_a", as.integer(thresholds[i-1]*100)) + } else { + name_i <- paste0("prob_", as.integer(thresholds[i-1]*100), "_to_", + as.integer(thresholds[i]*100)) + } + named_probs <- append(named_probs, + list(ClimProjDiags::Subset(probs, + 'bin', i))) + names(named_probs)[length(named_probs)] <- name_i } # Compute fcst probability bins if (!is.null(data$fcst)) { - probs_fcst <- compute_probs(data$fcst$data, quants, - ncores = ncores, - na.rm = na.rm) + probs_fcst <- compute_probs(data$fcst$data, quants, + ncores = ncores, + na.rm = na.rm) for (i in seq(1:dim(probs_fcst)['bin'][[1]])) { if (i == 1) { @@ -371,11 +371,11 @@ compute_probabilities <- function(recipe, data) { name_i <- paste0("prob_a", as.integer(thresholds[i-1]*100)) } else { name_i <- paste0("prob_", as.integer(thresholds[i-1]*100), "_to_", - as.integer(thresholds[i]*100)) + as.integer(thresholds[i]*100)) } named_probs_fcst <- append(named_probs_fcst, - list(ClimProjDiags::Subset(probs_fcst, - 'bin', i))) + list(ClimProjDiags::Subset(probs_fcst, + 'bin', i))) names(named_probs_fcst)[length(named_probs_fcst)] <- name_i } } @@ -387,37 +387,37 @@ compute_probabilities <- function(recipe, data) { if (!is.null(data$fcst)) { fcst_years <- dim(data$fcst$data)[['syear']] named_probs_fcst <- lapply(named_probs_fcst, - function(x) {Subset(x, - along = 'syear', - indices = 1:fcst_years, - drop = 'non-selected')}) + function(x) {Subset(x, + along = 'syear', + indices = 1:fcst_years, + drop = 'non-selected')}) results <- list(probs = named_probs, - probs_fcst = named_probs_fcst, - percentiles = named_quantiles) + probs_fcst = named_probs_fcst, + percentiles = named_quantiles) } else { results <- list(probs = named_probs, - percentiles = named_quantiles) + percentiles = named_quantiles) } info(recipe$Run$logger, - "##### PERCENTILES AND PROBABILITY CATEGORIES COMPUTED #####") + "##### PERCENTILES AND PROBABILITY CATEGORIES COMPUTED #####") # Save outputs recipe$Run$output_dir <- paste0(recipe$Run$output_dir, - "/outputs/Skill/") + "/outputs/Skill/") # Save percentiles if (recipe$Analysis$Workflow$Probabilities$save_outputs %in% - c('all', 'percentiles_only')) { + c('all', 'percentiles_only')) { save_percentiles(recipe = recipe, percentiles = results$percentiles, - data_cube = data$hcst) + data_cube = data$hcst) } # Save probability bins if (recipe$Analysis$Workflow$Probabilities$save_outputs %in% - c('all', 'bins_only')) { + c('all', 'bins_only')) { save_probabilities(recipe = recipe, probs = results$probs, - data_cube = data$hcst, type = "hcst") + data_cube = data$hcst, type = "hcst") if (!is.null(results$probs_fcst)) { - save_probabilities(recipe = recipe, probs = results$probs_fcst, - data_cbue = data$fcst, type = "fcst") + save_probabilities(recipe = recipe, probs = results$probs_fcst, + data_cbue = data$fcst, type = "fcst") } } # Return results @@ -436,7 +436,7 @@ compute_probabilities <- function(recipe, data) { # If array has memb dim (Corr case), change name to 'ensemble' if ("exp_memb" %in% names(dim(metric_array))) { names(dim(metric_array))[which(names(dim(metric_array)) == - "exp_memb")] <- "ensemble" + "exp_memb")] <- "ensemble" # } else { # dim(metric_array) <- c(dim(metric_array), "ensemble" = 1) } diff --git a/tools/check_recipe.R b/tools/check_recipe.R index d8acc8cd..64d1ef42 100644 --- a/tools/check_recipe.R +++ b/tools/check_recipe.R @@ -10,10 +10,10 @@ check_recipe <- function(recipe) { # --------------------------------------------------------------------- TIME_SETTINGS_SEASONAL <- c("sdate", "ftime_min", "ftime_max", "hcst_start", - "hcst_end") + "hcst_end") TIME_SETTINGS_DECADAL <- c("ftime_min", "ftime_max", "hcst_start", "hcst_end") PARAMS <- c("Horizon", "Time", "Variables", "Region", "Regrid", "Workflow", - "Datasets") + "Datasets") HORIZONS <- c("subseasonal", "seasonal", "decadal") ARCHIVE_SEASONAL <- "conf/archive.yml" ARCHIVE_DECADAL <- "conf/archive_decadal.yml" @@ -24,21 +24,21 @@ check_recipe <- function(recipe) { # Check basic elements in recipe:Analysis: if (!("Analysis" %in% names(recipe))) { error(recipe$Run$logger, - "The recipe must contain an element called 'Analysis'.") + "The recipe must contain an element called 'Analysis'.") error_status <- T } if (!all(PARAMS %in% names(recipe$Analysis))) { error(recipe$Run$logger, paste0("The element 'Analysis' in the recipe must contain all of ", - "the following: ", paste(PARAMS, collapse = ", "), ".")) + "the following: ", paste(PARAMS, collapse = ", "), ".")) error_status <- T } if (!any(HORIZONS %in% tolower(recipe$Analysis$Horizon))) { error(recipe$Run$logger, paste0("The element 'Horizon' in the recipe must be one of the ", - "following: ", paste(HORIZONS, collapse = ", "), ".")) + "following: ", paste(HORIZONS, collapse = ", "), ".")) error_status <- T } # Check time settings @@ -47,18 +47,18 @@ check_recipe <- function(recipe) { archive <- read_yaml(ARCHIVE_SEASONAL)[[recipe$Run$filesystem]] if (!all(TIME_SETTINGS_SEASONAL %in% names(recipe$Analysis$Time))) { error(recipe$Run$logger, - paste0("The element 'Time' in the recipe must contain all of the ", - "following: ", paste(TIME_SETTINGS_SEASONAL, - collapse = ", "), ".")) + paste0("The element 'Time' in the recipe must contain all of the ", + "following: ", paste(TIME_SETTINGS_SEASONAL, + collapse = ", "), ".")) error_status <- T } } else if (tolower(recipe$Analysis$Horizon) == "decadal") { archive <- read_yaml(ARCHIVE_DECADAL)[[recipe$Run$filesystem]] if (!all(TIME_SETTINGS_DECADAL %in% names(recipe$Analysis$Time))) { error(recipe$Run$logger, - paste0("The element 'Time' in the recipe must contain all of the ", - "following: ", paste(TIME_SETTINGS_DECADAL, - collapse = ", "), ".")) + paste0("The element 'Time' in the recipe must contain all of the ", + "following: ", paste(TIME_SETTINGS_DECADAL, + collapse = ", "), ".")) error_status <- T } } else { @@ -68,14 +68,14 @@ check_recipe <- function(recipe) { if (!is.null(archive)) { if (!all(recipe$Analysis$Datasets$System$name %in% names(archive$System))) { error(recipe$Run$logger, - "The specified System name was not found in the archive.") + "The specified System name was not found in the archive.") error_status <- T } # Check reference names if (!all(recipe$Analysis$Datasets$Reference$name %in% names(archive$Reference))) { error(recipe$Run$logger, - "The specified Reference name was not found in the archive.") + "The specified Reference name was not found in the archive.") error_status <- T } } @@ -83,36 +83,36 @@ check_recipe <- function(recipe) { if ((!(recipe$Analysis$Time$ftime_min > 0)) || (!is.integer(recipe$Analysis$Time$ftime_min))) { error(recipe$Run$logger, - "The element 'ftime_min' must be an integer larger than 0.") + "The element 'ftime_min' must be an integer larger than 0.") error_status <- T } if ((!(recipe$Analysis$Time$ftime_max > 0)) || (!is.integer(recipe$Analysis$Time$ftime_max))) { error(recipe$Run$logger, - "The element 'ftime_max' must be an integer larger than 0.") + "The element 'ftime_max' must be an integer larger than 0.") error_status <- T } if (recipe$Analysis$Time$ftime_max < recipe$Analysis$Time$ftime_min) { error(recipe$Run$logger, - "'ftime_max' cannot be smaller than 'ftime_min'.") + "'ftime_max' cannot be smaller than 'ftime_min'.") error_status <- T } # Check consistency of hindcast years if (!(as.numeric(recipe$Analysis$Time$hcst_start) %% 1 == 0) || (!(recipe$Analysis$Time$hcst_start > 0))) { error(recipe$Run$logger, - "The element 'hcst_start' must be a valid year.") + "The element 'hcst_start' must be a valid year.") error_status <- T } if (!(as.numeric(recipe$Analysis$Time$hcst_end) %% 1 == 0) || (!(recipe$Analysis$Time$hcst_end > 0))) { error(recipe$Run$logger, - "The element 'hcst_end' must be a valid year.") + "The element 'hcst_end' must be a valid year.") error_status <- T } if (recipe$Analysis$Time$hcst_end < recipe$Analysis$Time$hcst_start) { error(recipe$Run$logger, - "'hcst_end' cannot be smaller than 'hcst_start'.") + "'hcst_end' cannot be smaller than 'hcst_start'.") error_status <- T } ## TODO: Is this needed? @@ -141,7 +141,7 @@ check_recipe <- function(recipe) { if (is.null(recipe$Analysis$Time$fcst_year)) { warn(recipe$Run$logger, paste("The element 'fcst_year' is not defined in the recipe.", - "No forecast year will be used.")) + "No forecast year will be used.")) } ## TODO: Adapt and move this inside 'if'? # fcst.sdate <- NULL @@ -165,7 +165,7 @@ check_recipe <- function(recipe) { # calculate number of workflows to create for each variable and if (length(recipe$Analysis$Horizon) > 1) { error(recipe$Run$logger, - "Only one single Horizon can be specified in the recipe") + "Only one single Horizon can be specified in the recipe") error_status <- T } @@ -197,7 +197,7 @@ check_recipe <- function(recipe) { if (!all(LIMITS %in% names(region))) { error(recipe$Run$logger, paste0("There must be 4 elements in 'Region': ", - paste(LIMITS, collapse = ", "), ".")) + paste(LIMITS, collapse = ", "), ".")) error_status <- T } } @@ -206,15 +206,15 @@ check_recipe <- function(recipe) { if (!("name" %in% names(region)) || (is.null(region$name))) { error(recipe$Run$logger, paste("If more than one region has been defined, every region", - "must have a unique name.")) + "must have a unique name.")) } } } # Atomic recipe } else if (!all(LIMITS %in% names(recipe$Analysis$Region))) { error(recipe$Run$logger, - paste0("There must be 4 elements in 'Region': ", - paste(LIMITS, collapse = ", "), ".")) + paste0("There must be 4 elements in 'Region': ", + paste(LIMITS, collapse = ", "), ".")) error_status <- T } ## TODO: Implement multiple regions @@ -258,19 +258,19 @@ check_recipe <- function(recipe) { if ("Anomalies" %in% names(recipe$Analysis$Workflow)) { if (is.null(recipe$Analysis$Workflow$Anomalies$compute)) { error(recipe$Run$logger, - "Parameter 'compute' must be defined under 'Anomalies'.") + "Parameter 'compute' must be defined under 'Anomalies'.") error_status <- T } else if (!(is.logical(recipe$Analysis$Workflow$Anomalies$compute))) { error(recipe$Run$logger, - paste("Parameter 'Anomalies:compute' must be a logical value", - "(True/False or yes/no).")) + paste("Parameter 'Anomalies:compute' must be a logical value", + "(True/False or yes/no).")) error_status <- T } else if ((recipe$Analysis$Workflow$Anomalies$compute) && - (!is.logical(recipe$Analysis$Workflow$Anomalies$cross_validation))) { + (!is.logical(recipe$Analysis$Workflow$Anomalies$cross_validation))) { error(recipe$Run$logger, - paste("If anomaly computation is requested, parameter", - "'cross_validation' must be defined under 'Anomalies', - and it must be a logical value (True/False or yes/no).")) + paste("If anomaly computation is requested, parameter", + "'cross_validation' must be defined under 'Anomalies', + and it must be a logical value (True/False or yes/no).")) error_status <- T } } @@ -278,19 +278,19 @@ check_recipe <- function(recipe) { if (("Skill" %in% names(recipe$Analysis$Workflow)) && (is.null(recipe$Analysis$Workflow$Skill$metric))) { error(recipe$Run$logger, - "Parameter 'metric' must be defined under 'Skill'.") + "Parameter 'metric' must be defined under 'Skill'.") error_status <- T } # Probabilities if ("Probabilities" %in% names(recipe$Analysis$Workflow)) { if (is.null(recipe$Analysis$Workflow$Probabilities$percentiles)) { error(recipe$Run$logger, - "Parameter 'percentiles' must be defined under 'Probabilities'.") + "Parameter 'percentiles' must be defined under 'Probabilities'.") error_status <- T } else if (!is.list(recipe$Analysis$Workflow$Probabilities$percentiles)) { error(recipe$Run$logger, - paste("Parameter 'Probabilities:percentiles' expects a list.", - "See documentation in the wiki for examples.")) + paste("Parameter 'Probabilities:percentiles' expects a list.", + "See documentation in the wiki for examples.")) error_status <- T } } @@ -307,7 +307,7 @@ check_recipe <- function(recipe) { } if (!all(RUN_FIELDS %in% names(recipe$Run))) { error(recipe$Run$logger, paste("Recipe element 'Run' must contain", - "all of the following fields:", + "all of the following fields:", paste(RUN_FIELDS, collapse=", "), ".")) error_status <- T } @@ -347,8 +347,8 @@ check_recipe <- function(recipe) { # --------------------------------------------------------------------- AUTO_PARAMS <- c("script", "expid", "hpc_user", "wallclock", - "processors_per_job", "platform", "email_notifications", - "email_address", "notify_completed", "notify_failed") + "processors_per_job", "platform", "email_notifications", + "email_address", "notify_completed", "notify_failed") # Autosubmit false by default if (is.null(recipe$Run$autosubmit)) { recipe$Run$autosubmit <- F @@ -360,53 +360,53 @@ check_recipe <- function(recipe) { # Check that the autosubmit configuration parameters are present if (!("auto_conf" %in% names(recipe$Run))) { error(recipe$Run$logger, - "The 'auto_conf' is missing from the 'Run' section of the recipe.") + "The 'auto_conf' is missing from the 'Run' section of the recipe.") error_status <- T } else if (!all(AUTO_PARAMS %in% names(recipe$Run$auto_conf))) { error(recipe$Run$logger, - paste0("The element 'Run:auto_conf' must contain all of the ", - "following: ", paste(AUTO_PARAMS, collapse = ", "), ".")) + paste0("The element 'Run:auto_conf' must contain all of the ", + "following: ", paste(AUTO_PARAMS, collapse = ", "), ".")) error_status <- T } # Check that the script is not NULL and exists if (is.null(recipe$Run$auto_conf$script)) { error(recipe$Run$logger, - "A script must be provided to run the recipe with autosubmit.") + "A script must be provided to run the recipe with autosubmit.") error_status <- T } else if (!file.exists(recipe$Run$auto_conf$script)) { error(recipe$Run$logger, - "Could not find the file for the script in 'auto_conf'.") + "Could not find the file for the script in 'auto_conf'.") error_status <- T } # Check that the experiment ID exists if (is.null(recipe$Run$auto_conf$expid)) { error(recipe$Run$logger, - paste("The Autosubmit EXPID is missing. You can create one by", - "running the following commands on the autosubmit machine:")) + paste("The Autosubmit EXPID is missing. You can create one by", + "running the following commands on the autosubmit machine:")) error(recipe$Run$logger, - paste("module load", auto_specs$module_version)) + paste("module load", auto_specs$module_version)) error(recipe$Run$logger, - paste("autosubmit expid -H", auto_specs$platform, - "-d ")) + paste("autosubmit expid -H", auto_specs$platform, + "-d ")) } else if (!dir.exists(paste0(auto_specs$experiment_dir, - recipe$Run$auto_conf$expid))) { + recipe$Run$auto_conf$expid))) { error(recipe$Run$logger, - paste0("No folder in ", auto_specs$experiment_dir, - " for the EXPID", recipe$Run$auto_conf$expid, - ". Please make sure it is correct.")) + paste0("No folder in ", auto_specs$experiment_dir, + " for the EXPID", recipe$Run$auto_conf$expid, + ". Please make sure it is correct.")) } if ((recipe$Run$auto_conf$email_notifications) && - (is.null(recipe$Run$auto_conf$email_address))) { + (is.null(recipe$Run$auto_conf$email_address))) { error(recipe$Run$logger, - "Autosubmit notifications are enabled but email address is empty!") + "Autosubmit notifications are enabled but email address is empty!") } if (is.null(recipe$Run$auto_conf$hpc_user)) { error(recipe$Run$logger, - "The 'Run:auto_conf:hpc_user' field can not be empty.") + "The 'Run:auto_conf:hpc_user' field can not be empty.") } else if ((recipe$Run$filesystem == "esarchive") && - (!substr(recipe$Run$auto_conf$hpc_user, 1, 5) == "bsc32")) { + (!substr(recipe$Run$auto_conf$hpc_user, 1, 5) == "bsc32")) { error(recipe$Run$logger, - "Please check your hpc_user ID. It should look like: 'bsc32xxx'") + "Please check your hpc_user ID. It should look like: 'bsc32xxx'") } } @@ -418,13 +418,13 @@ check_recipe <- function(recipe) { ## TODO: Implement number of dependent verifications #nverifications <- check_number_of_dependent_verifications(recipe) # info(recipe$Run$logger, paste("Start Dates:", - # paste(fcst.sdate, collapse = " "))) + # paste(fcst.sdate, collapse = " "))) # Return error if any check has failed if (error_status) { error(recipe$Run$logger, "RECIPE CHECK FAILED.") stop("The recipe contains some errors. Find the full list in the", - "startup.log file.") + "startup.log file.") } else { info(recipe$Run$logger, "##### RECIPE CHECK SUCCESSFULL #####") # return(append(nverifications, fcst.sdate)) diff --git a/tools/data_summary.R b/tools/data_summary.R index 5f532dcf..92dcb353 100644 --- a/tools/data_summary.R +++ b/tools/data_summary.R @@ -19,7 +19,7 @@ data_summary <- function(data_cube, recipe) { info(recipe$Run$logger, "DATA SUMMARY:") info(recipe$Run$logger, paste(object_name, "months:", months)) info(recipe$Run$logger, paste(object_name, "range:", sdate_min, "to", - sdate_max)) + sdate_max)) info(recipe$Run$logger, paste(object_name, "dimensions:")) # Use capture.output() and for loop to display results neatly output_string <- capture.output(dim(data_cube$data)) @@ -27,7 +27,7 @@ data_summary <- function(data_cube, recipe) { info(recipe$Run$logger, i) } info(recipe$Run$logger, paste0("Statistical summary of the data in ", - object_name, ":")) + object_name, ":")) output_string <- capture.output(summary(data_cube$data)) for (i in output_string) { info(recipe$Run$logger, i) diff --git a/tools/prepare_outputs.R b/tools/prepare_outputs.R index 61825738..d0857730 100644 --- a/tools/prepare_outputs.R +++ b/tools/prepare_outputs.R @@ -22,8 +22,8 @@ #'@export prepare_outputs <- function(recipe_file, - disable_checks = FALSE, - uniqueID = TRUE) { + disable_checks = FALSE, + uniqueID = TRUE) { # recipe_file: path to recipe YAML file # disable_checks: If TRUE, does not perform checks on recipe # disable_uniqueID: If TRUE, does not add a unique ID to output dir @@ -39,7 +39,7 @@ prepare_outputs <- function(recipe_file, } else { folder_name <- paste0(gsub(".yml", "", gsub("/", "_", recipe$name)), "_", gsub(" ", "", gsub(":", "", gsub("-", "", - Sys.time())))) + Sys.time())))) } print("Saving all outputs to:") print(paste0(output_dir, folder_name)) @@ -49,7 +49,7 @@ prepare_outputs <- function(recipe_file, ## TODO: Move this part to main recipe # Copy recipe to output folder file.copy(recipe$recipe_path, file.path(output_dir, folder_name, 'logs', - 'recipes')) + 'recipes')) # Create log output file logfile <- file.path(output_dir, folder_name, 'logs', 'main.log') file.create(logfile) @@ -84,12 +84,12 @@ prepare_outputs <- function(recipe_file, if (is.null(recipe$Run$filesystem)) { recipe$Run$filesystem <- "esarchive" warn(recipe$Run$logger, - "Filesystem not specified in the recipe. Setting it to 'esarchive'.") + "Filesystem not specified in the recipe. Setting it to 'esarchive'.") } # Run recipe checker if (disable_checks) { warn(recipe$Run$logger, - "Recipe checks disabled. The recipe will not be checked for errors.") + "Recipe checks disabled. The recipe will not be checked for errors.") } else { check_recipe(recipe) } diff --git a/tools/read_atomic_recipe.R b/tools/read_atomic_recipe.R index 1eadb707..de2ad5b5 100644 --- a/tools/read_atomic_recipe.R +++ b/tools/read_atomic_recipe.R @@ -28,7 +28,7 @@ read_atomic_recipe <- function(recipe_file) { recipe$name <- tools::file_path_sans_ext(basename(recipe_file)) # Create log file for atomic recipe logfile <- file.path(recipe$Run$output_dir, 'logs', - paste0(recipe$name, '.log')) + paste0(recipe$name, '.log')) file.create(logfile) # Set default behaviour of logger if (is.null(recipe$Run)) { diff --git a/tools/write_autosubmit_conf.R b/tools/write_autosubmit_conf.R index a0208a9e..a425566d 100644 --- a/tools/write_autosubmit_conf.R +++ b/tools/write_autosubmit_conf.R @@ -20,9 +20,9 @@ write_autosubmit_conf <- function(recipe, nchunks) { ## expid, email notifications and address conf$config$EXPID <- expid if (recipe$Run$auto_conf$email_notifications) { - conf$mail$NOTIFICATIONS <- "True" + conf$mail$NOTIFICATIONS <- "True" } else { - conf$mail$NOTIFICATIONS <- "False" + conf$mail$NOTIFICATIONS <- "False" } conf$mail$TO <- recipe$Run$auto_conf$email_address } else if (conf_type == "expdef") { @@ -37,34 +37,34 @@ write_autosubmit_conf <- function(recipe, nchunks) { ## wallclock, notify_on, platform?, processors # Different file structure depending on autosubmit version if (auto_specs$auto_version == "4.0.0") { - jobs <- conf$JOBS + jobs <- conf$JOBS } else { - jobs <- conf + jobs <- conf } jobs$verification$WALLCLOCK <- recipe$Run$auto_conf$wallclock if (recipe$Run$auto_conf$notify_completed) { jobs$verification$NOTIFY_ON <- paste(jobs$verification$NOTIFY_ON, - "COMPLETED") + "COMPLETED") } if (recipe$Run$auto_conf$notify_failed) { - jobs$verification$NOTIFY_ON <- paste(jobs$verification$NOTIFY_ON, - "FAILED") + jobs$verification$NOTIFY_ON <- paste(jobs$verification$NOTIFY_ON, + "FAILED") } jobs$verification$PROCESSORS <- recipe$Run$auto_conf$processors_per_job # ncores? # Return to original list if (auto_specs$auto_version == "4.0.0") { - conf$JOBS <- jobs + conf$JOBS <- jobs } else { - conf <- jobs + conf <- jobs } } else if (conf_type == "platforms") { # Section 4: platform configuration ## nord3v2 configuration... platform name? user, processors_per_node if (auto_specs$auto_version == "4.0.0") { - conf$Platforms[[auto_specs$platform]]$USER <- - recipe$Run$auto_conf$hpc_user + conf$Platforms[[auto_specs$platform]]$USER <- + recipe$Run$auto_conf$hpc_user } else { - conf[[auto_specs$platform]]$USER <- recipe$Run$auto_conf$hpc_user + conf[[auto_specs$platform]]$USER <- recipe$Run$auto_conf$hpc_user } } else if (conf_type == "proj") { # Section 5: proj @@ -75,31 +75,31 @@ write_autosubmit_conf <- function(recipe, nchunks) { # Write config file inside autosubmit dir ## TODO: Change write.type depending on autosubmit version write.config(conf, paste0(dest_dir, dest_file), - write.type = auto_specs$conf_format) + write.type = auto_specs$conf_format) Sys.chmod(paste0(dest_dir, dest_file), mode = "755", use_umask = F) } info(recipe$Run$logger, paste("##### AUTOSUBMIT CONFIGURATION WRITTEN FOR", expid, "#####")) info(recipe$Run$logger, paste0("You can check your experiment configuration at: ", - "/esarchive/autosubmit/", expid, "/conf/")) + "/esarchive/autosubmit/", expid, "/conf/")) # Print instructions/commands for user if (recipe$Run$Terminal) { ## TODO: Change SSH message for other environments (outside BSC) info(recipe$Run$logger, - paste("Please SSH into bscesautosubmit01 or bscesautosubmit02 and run", - "the following commands:")) + paste("Please SSH into bscesautosubmit01 or bscesautosubmit02 and run", + "the following commands:")) info(recipe$Run$logger, - paste("module load", auto_specs$module_version)) + paste("module load", auto_specs$module_version)) info(recipe$Run$logger, - paste("autosubmit create", expid)) + paste("autosubmit create", expid)) info(recipe$Run$logger, - paste("autosubmit refresh", expid)) + paste("autosubmit refresh", expid)) info(recipe$Run$logger, - paste("nohup autosubmit run", expid, "& disown")) + paste("nohup autosubmit run", expid, "& disown")) } else { print(paste("Please SSH into bscesautosubmit01 or bscesautosubmit02 and run", - "the following commands:")) + "the following commands:")) print(paste("module load", auto_specs$module_version)) print(paste("autosubmit create", expid)) print(paste("autosubmit refresh", expid)) -- GitLab From b2cb9fd78eddc6cf4694b820f9cc81db6dabaa64 Mon Sep 17 00:00:00 2001 From: eduzenli Date: Thu, 13 Apr 2023 17:15:47 +0200 Subject: [PATCH 133/388] parallelization updates --- modules/Downscaling/tmp/Intlr.R | 37 ++++++++++++++++++++------------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/modules/Downscaling/tmp/Intlr.R b/modules/Downscaling/tmp/Intlr.R index 24c909f3..b8bbf0fd 100644 --- a/modules/Downscaling/tmp/Intlr.R +++ b/modules/Downscaling/tmp/Intlr.R @@ -446,7 +446,6 @@ Intlr <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, lr_method, t .intlr <- function(x, y, loocv) { tmp_df <- data.frame(x = x, y = y) - # if the data is all NA, force return return NA if (all(is.na(tmp_df)) | (sum(apply(tmp_df, 2, function(x) !all(is.na(x)))) == 1)) { @@ -456,13 +455,12 @@ Intlr <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, lr_method, t } else { # training lm1 <- train_lm(df = tmp_df, loocv = loocv) - + # prediction res <- pred_lm(lm1 = lm1, df = tmp_df, loocv = loocv) } return(res) - } #----------------------------------- @@ -471,16 +469,20 @@ Intlr <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, lr_method, t #----------------------------------- train_lm <- function(df, loocv) { - # Remove columns containing only NA's - df <- df[ , apply(df, 2, function(x) !all(is.na(x)))] + # Remove predictor columns containing only NA's + df <- df[ , apply(df[,colnames(df) != 'y'], 2, function(x) !all(is.na(x)))] if (loocv) { - lm1 <- lapply(1:nrow(df), function(j) lm(df[-j,], formula = y ~ .)) - + lm1 <- lapply(1:nrow(df), function(j) { + if (all(is.na(df[-j,]$y))) { + return(NA) + } else { + return(lm(df[-j,], formula = y ~ .)) + }}) } else { - lm1 <- list(lm(data = df, formula = y ~ .)) + lm1 <- ifelse(all(is.na(df$y)), NA, list(lm(data = df, formula = y ~ .))) } return(lm1) @@ -492,15 +494,20 @@ train_lm <- function(df, loocv) { pred_lm <- function(df, lm1, loocv) { if (loocv) { - - pred_vals <- sapply(1:nrow(df), function(j) predict(lm1[[j]], df[j,])) - + pred_vals <- sapply(1:nrow(df), function(j) { + if (all(is.na(lm1[[j]]))) { + return(NA) + } else { + return(predict(lm1[[j]], df[j,])) + }}) } else { - - pred_vals_ls <- lapply(lm1, predict, data = df) - pred_vals <- unlist(pred_vals_ls) + if (!is.na(lm1)) { + pred_vals_ls <- lapply(lm1, predict, data = df) + pred_vals <- unlist(pred_vals_ls) + } else { + pred_vals <- rep(NA, nrow(df)) + } } - return(pred_vals) } -- GitLab From b4e54c0bdf1357ab1d12a17bb17dd19139d59184 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Mon, 17 Apr 2023 09:25:46 +0200 Subject: [PATCH 134/388] Change 'save_outputs' to 'save' --- modules/Anomalies/Anomalies.R | 6 +- modules/Calibration/Calibration.R | 6 +- modules/Saving/Saving.R | 64 +++++++++---------- modules/Skill/Skill.R | 6 +- modules/Visualization/Visualization.R | 2 +- .../atomic_recipes/recipe_system7c3s-tas.yml | 8 +-- 6 files changed, 46 insertions(+), 46 deletions(-) diff --git a/modules/Anomalies/Anomalies.R b/modules/Anomalies/Anomalies.R index 2e98b265..8e26c680 100644 --- a/modules/Anomalies/Anomalies.R +++ b/modules/Anomalies/Anomalies.R @@ -86,17 +86,17 @@ compute_anomalies <- function(recipe, data) { recipe$Run$output_dir <- paste0(recipe$Run$output_dir, "/outputs/Anomalies/") # Save forecast - if (recipe$Analysis$Workflow$Anomalies$save_outputs %in% + if (recipe$Analysis$Workflow$Anomalies$save %in% c('all', 'exp_only', 'fcst_only')) { save_forecast(recipe = recipe, data_cube = data$fcst, type = 'fcst') } # Save hindcast - if (recipe$Analysis$Workflow$Anomalies$save_outputs %in% + if (recipe$Analysis$Workflow$Anomalies$save %in% c('all', 'exp_only')) { save_forecast(recipe = recipe, data_cube = data$hcst, type = 'hcst') } # Save observation - if (recipe$Analysis$Workflow$Anomalies$save_outputs == 'all') { + if (recipe$Analysis$Workflow$Anomalies$save == 'all') { save_observations(recipe = recipe, data_cube = data$obs) } } else { diff --git a/modules/Calibration/Calibration.R b/modules/Calibration/Calibration.R index 9d1db55f..006fecd2 100644 --- a/modules/Calibration/Calibration.R +++ b/modules/Calibration/Calibration.R @@ -166,15 +166,15 @@ calibrate_datasets <- function(recipe, data) { ## TODO: What do we do with the full values? recipe$Run$output_dir <- paste0(recipe$Run$output_dir, "/outputs/Calibration/") - if (recipe$Analysis$Workflow$Calibration$save_outputs %in% + if (recipe$Analysis$Workflow$Calibration$save %in% c('all', 'exp_only', 'fcst_only')) { save_forecast(recipe = recipe, data_cube = fcst_calibrated, type = 'fcst') } - if (recipe$Analysis$Workflow$Calibration$save_outputs %in% + if (recipe$Analysis$Workflow$Calibration$save %in% c('all', 'exp_only')) { save_forecast(recipe = recipe, data_cube = hcst_calibrated, type = 'hcst') } - if (recipe$Analysis$Workflow$Calibration$save_outputs == 'all') { + if (recipe$Analysis$Workflow$Calibration$save == 'all') { save_observations(recipe = recipe, data_cube = data$obs) } diff --git a/modules/Saving/Saving.R b/modules/Saving/Saving.R index c900fffe..e872e832 100644 --- a/modules/Saving/Saving.R +++ b/modules/Saving/Saving.R @@ -4,8 +4,8 @@ source("modules/Saving/R/get_dir.R") source("modules/Saving/R/get_filename.R") save_data <- function(recipe, data, - skill_metrics = NULL, - probabilities = NULL) { + skill_metrics = NULL, + probabilities = NULL) { # Wrapper for the saving functions. # recipe: The auto-s2s recipe # archive: The auto-s2s archive @@ -184,7 +184,7 @@ save_forecast <- function(recipe, # Generate vector containing leadtimes dates <- as.PCICt(ClimProjDiags::Subset(data_cube$attrs$Dates, 'syear', 1), - cal = calendar) + cal = calendar) if (fcst.horizon == 'decadal') { ## Method 1: Use the first date as init_date. But it may be better to use ## the real initialized date (ask users) @@ -194,11 +194,11 @@ save_forecast <- function(recipe, if (type == 'hcst') { init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, '-', sprintf('%02d', init_month), '-01'), - cal = calendar) + cal = calendar) } else if (type == 'fcst') { init_date <- as.PCICt(paste0(recipe$Analysis$Time$fcst_year[1], '-', sprintf('%02d', init_month), '-01'), - cal = calendar) + cal = calendar) } } else { if (type == 'hcst') { @@ -208,7 +208,7 @@ save_forecast <- function(recipe, } else if (type == 'fcst') { init_date <- as.PCICt(paste0(recipe$Analysis$Time$fcst_year, recipe$Analysis$Time$sdate), - format = '%Y%m%d', cal = calendar) + format = '%Y%m%d', cal = calendar) } } # Get time difference in hours @@ -291,7 +291,7 @@ save_forecast <- function(recipe, } } info(recipe$Run$logger, paste("#####", toupper(type), - "SAVED TO NETCDF FILE #####")) + "SAVED TO NETCDF FILE #####")) } @@ -467,10 +467,10 @@ save_metrics <- function(recipe, if ((!is.null(recipe$Analysis$Workflow$Anomalies$compute)) && (recipe$Analysis$Workflow$Anomalies$compute)) { global_attributes <- c(list(from_anomalies = "Yes"), - global_attributes) + global_attributes) } else { global_attributes <- c(list(from_anomalies = "No"), - global_attributes) + global_attributes) } attr(skill[[1]], 'global_attrs') <- global_attributes @@ -487,9 +487,9 @@ save_metrics <- function(recipe, dims <- c(lalo, 'time') } metadata <- list(metric = list(name = metric, - standard_name = sdname, - long_name = long_name, - missing_value = missing_val)) + standard_name = sdname, + long_name = long_name, + missing_value = missing_val)) attr(skill[[i]], 'variables') <- metadata names(dim(skill[[i]])) <- dims } @@ -530,7 +530,7 @@ save_metrics <- function(recipe, } else { if (!is.null(recipe$Analysis$Time$fcst_year)) { fcst.sdate <- paste0(recipe$Analysis$Time$fcst_year, - recipe$Analysis$Time$sdate) + recipe$Analysis$Time$sdate) } else { fcst.sdate <- paste0("1970", recipe$Analysis$Time$sdate) } @@ -544,7 +544,7 @@ save_metrics <- function(recipe, outdir <- get_dir(recipe) } outfile <- get_filename(outdir, recipe, data_cube$attrs$Variable$varName, - fcst.sdate, agg, "skill") + fcst.sdate, agg, "skill") # Get grid data and metadata and export to netCDF if (tolower(agg) == "country") { @@ -585,10 +585,10 @@ save_corr <- function(recipe, if ((!is.null(recipe$Analysis$Workflow$Anomalies$compute)) && (recipe$Analysis$Workflow$Anomalies$compute)) { global_attributes <- c(global_attributes, - list(from_anomalies = "Yes")) + list(from_anomalies = "Yes")) } else { global_attributes <- c(global_attributes, - list(from_anomalies = "No")) + list(from_anomalies = "No")) } attr(skill[[1]], 'global_attrs') <- global_attributes @@ -605,9 +605,9 @@ save_corr <- function(recipe, dims <- c(lalo, 'ensemble', 'time') } metadata <- list(metric = list(name = metric, - standard_name = sdname, - long_name = long_name, - missing_value = missing_val)) + standard_name = sdname, + long_name = long_name, + missing_value = missing_val)) attr(skill[[i]], 'variables') <- metadata names(dim(skill[[i]])) <- dims } @@ -624,7 +624,7 @@ save_corr <- function(recipe, init_month <- archive$System[[recipe$Analysis$Datasets$System$name]]$initial_month init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, '-', sprintf('%02d', init_month), '-01'), - cal = calendar) + cal = calendar) } else { init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, recipe$Analysis$Time$sdate), @@ -661,7 +661,7 @@ save_corr <- function(recipe, outdir <- get_dir(recipe) } outfile <- get_filename(outdir, recipe, data_cube$attrs$Variable$varName, - fcst.sdate, agg, "corr") + fcst.sdate, agg, "corr") # Get grid data and metadata and export to netCDF if (tolower(agg) == "country") { @@ -694,7 +694,7 @@ save_percentiles <- function(recipe, # Remove singleton dimensions and rearrange lon, lat and time dims if (tolower(agg) == "global") { percentiles <- lapply(percentiles, function(x) { - Reorder(x, c(lalo, 'time'))}) + Reorder(x, c(lalo, 'time'))}) } # Add global and variable attributes @@ -703,10 +703,10 @@ save_percentiles <- function(recipe, if ((!is.null(recipe$Analysis$Workflow$Anomalies$compute)) && (recipe$Analysis$Workflow$Anomalies$compute)) { global_attributes <- c(list(from_anomalies = "Yes"), - global_attributes) + global_attributes) } else { global_attributes <- c(list(from_anomalies = "No"), - global_attributes) + global_attributes) } attr(percentiles[[1]], 'global_attrs') <- global_attributes @@ -730,12 +730,12 @@ save_percentiles <- function(recipe, calendar <- archive$System[[global_attributes$system]]$calendar # Generate vector containing leadtimes dates <- as.PCICt(ClimProjDiags::Subset(data_cube$attrs$Dates, 'syear', 1), - cal = calendar) + cal = calendar) if (fcst.horizon == 'decadal') { init_month <- archive$System[[recipe$Analysis$Datasets$System$name]]$initial_month init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, '-', sprintf('%02d', init_month), '-01'), - cal = calendar) + cal = calendar) } else { init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, recipe$Analysis$Time$sdate), @@ -771,7 +771,7 @@ save_percentiles <- function(recipe, outdir <- get_dir(recipe) } outfile <- get_filename(outdir, recipe, data_cube$attrs$Variable$varName, - fcst.sdate, agg, "percentiles") + fcst.sdate, agg, "percentiles") # Get grid data and metadata and export to netCDF if (tolower(agg) == "country") { country <- get_countries(grid) @@ -817,10 +817,10 @@ save_probabilities <- function(recipe, if ((!is.null(recipe$Analysis$Workflow$Anomalies$compute)) && (recipe$Analysis$Workflow$Anomalies$compute)) { global_attributes <- c(list(from_anomalies = "Yes"), - global_attributes) + global_attributes) } else { global_attributes <- c(list(from_anomalies = "No"), - global_attributes) + global_attributes) } fcst.horizon <- tolower(recipe$Analysis$Horizon) store.freq <- recipe$Analysis$Variables$freq @@ -834,7 +834,7 @@ save_probabilities <- function(recipe, init_month <- archive$System[[recipe$Analysis$Datasets$System$name]]$initial_month init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, '-', sprintf('%02d', init_month), '-01'), - cal = calendar) + cal = calendar) } else { init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, recipe$Analysis$Time$sdate), @@ -852,10 +852,10 @@ save_probabilities <- function(recipe, probs_syear <- lapply(probs, ClimProjDiags::Subset, 'syear', i, drop = 'selected') if (tolower(agg) == "global") { probs_syear <- lapply(probs_syear, function(x) { - Reorder(x, c(lalo, 'time'))}) + Reorder(x, c(lalo, 'time'))}) } else { probs_syear <- lapply(probs_syear, function(x) { - Reorder(x, c('country', 'time'))}) + Reorder(x, c('country', 'time'))}) } ## TODO: Replace for loop with something more efficient? diff --git a/modules/Skill/Skill.R b/modules/Skill/Skill.R index 2600e5eb..7028af57 100644 --- a/modules/Skill/Skill.R +++ b/modules/Skill/Skill.R @@ -285,7 +285,7 @@ compute_skill_metrics <- function(recipe, data) { recipe$Run$output_dir <- paste0(recipe$Run$output_dir, "/outputs/Skill/") # Separate 'corr' from the rest of the metrics because of extra 'ensemble' dim - if (recipe$Analysis$Workflow$Skill$save_outputs == 'all') { + if (recipe$Analysis$Workflow$Skill$save == 'all') { corr_metric_names <- grep("^corr", names(skill_metrics)) # Save corr if (length(skill_metrics[corr_metric_names]) > 0) { @@ -405,13 +405,13 @@ compute_probabilities <- function(recipe, data) { recipe$Run$output_dir <- paste0(recipe$Run$output_dir, "/outputs/Skill/") # Save percentiles - if (recipe$Analysis$Workflow$Probabilities$save_outputs %in% + if (recipe$Analysis$Workflow$Probabilities$save %in% c('all', 'percentiles_only')) { save_percentiles(recipe = recipe, percentiles = results$percentiles, data_cube = data$hcst) } # Save probability bins - if (recipe$Analysis$Workflow$Probabilities$save_outputs %in% + if (recipe$Analysis$Workflow$Probabilities$save %in% c('all', 'bins_only')) { save_probabilities(recipe = recipe, probs = results$probs, data_cube = data$hcst, type = "hcst") diff --git a/modules/Visualization/Visualization.R b/modules/Visualization/Visualization.R index bd389fc8..5a018b02 100644 --- a/modules/Visualization/Visualization.R +++ b/modules/Visualization/Visualization.R @@ -70,7 +70,7 @@ plot_data <- function(recipe, probabilities, outdir) } else { error(recipe$Run$logger, - paste0("For the most likely terciles plot, both the fsct and the ", + paste0("For the most likely terciles plot, both the fcst and the ", "probabilities must be provided.")) } } diff --git a/recipes/atomic_recipes/recipe_system7c3s-tas.yml b/recipes/atomic_recipes/recipe_system7c3s-tas.yml index 5b05e3c1..e5cd2aba 100644 --- a/recipes/atomic_recipes/recipe_system7c3s-tas.yml +++ b/recipes/atomic_recipes/recipe_system7c3s-tas.yml @@ -31,16 +31,16 @@ Analysis: Anomalies: compute: yes # yes/no, default yes cross_validation: yes # yes/no, default yes - save_outputs: 'all' # 'all'/'none'/'exp_only'/'fcst_only' + save: 'all' # 'all'/'none'/'exp_only'/'fcst_only' Calibration: method: mse_min - save_outputs: 'none' # 'all'/'none'/'exp_only'/'fcst_only' + save: 'none' # 'all'/'none'/'exp_only'/'fcst_only' Skill: metric: RPS RPSS CRPS CRPSS FRPSS BSS10 BSS90 EnsCorr Corr mean_bias mean_bias_SS - save_outputs: 'all' # 'all'/'none' + save: 'all' # 'all'/'none' Probabilities: percentiles: [[1/3, 2/3], [1/10, 9/10], [1/4, 2/4, 3/4]] - save_outputs: 'percentiles_only' # 'all'/'none'/'bins_only'/'percentiles_only' + save: 'percentiles_only' # 'all'/'none'/'bins_only'/'percentiles_only' Visualization: plots: skill_metrics, forecast_ensemble_mean, most_likely_terciles Indicators: -- GitLab From 5ac5fff68525e49d867062ce9e18b972f9180ced Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Mon, 17 Apr 2023 16:35:48 +0200 Subject: [PATCH 135/388] Fix bugs and update unit tests --- modules/Skill/Skill.R | 23 ++++++++++------- tests/recipes/recipe-decadal_daily_1.yml | 6 ++++- tests/recipes/recipe-decadal_monthly_1.yml | 10 ++++++-- tests/recipes/recipe-decadal_monthly_1b.yml | 8 ++++-- tests/recipes/recipe-decadal_monthly_2.yml | 6 +++++ tests/recipes/recipe-decadal_monthly_3.yml | 6 ++++- tests/recipes/recipe-seasonal_daily_1.yml | 3 +++ tests/recipes/recipe-seasonal_monthly_1.yml | 6 +++++ tests/testthat/test-decadal_daily_1.R | 2 +- tests/testthat/test-decadal_monthly_1.R | 28 ++++++++------------- tests/testthat/test-decadal_monthly_2.R | 22 +++++++--------- tests/testthat/test-decadal_monthly_3.R | 2 +- tests/testthat/test-seasonal_daily.R | 2 +- tests/testthat/test-seasonal_monthly.R | 17 +++++++------ 14 files changed, 84 insertions(+), 57 deletions(-) diff --git a/modules/Skill/Skill.R b/modules/Skill/Skill.R index 7028af57..d3f74b13 100644 --- a/modules/Skill/Skill.R +++ b/modules/Skill/Skill.R @@ -287,15 +287,20 @@ compute_skill_metrics <- function(recipe, data) { # Separate 'corr' from the rest of the metrics because of extra 'ensemble' dim if (recipe$Analysis$Workflow$Skill$save == 'all') { corr_metric_names <- grep("^corr", names(skill_metrics)) - # Save corr - if (length(skill_metrics[corr_metric_names]) > 0) { - save_corr(recipe = recipe, skill = skill_metrics[corr_metric_names], - data_cube = data$hcst) - } - # Save other skill metrics - if (length(skill_metrics[-corr_metric_names]) > 0) { - save_metrics(recipe = recipe, skill = skill_metrics[-corr_metric_names], + if (length(corr_metric_names) == 0) { + save_metrics(recipe = recipe, skill = skill_metrics, + data_cube = data$hcst) + } else { + # Save corr + if (length(skill_metrics[corr_metric_names]) > 0) { + save_corr(recipe = recipe, skill = skill_metrics[corr_metric_names], data_cube = data$hcst) + } + # Save other skill metrics + if (length(skill_metrics[-corr_metric_names]) > 0) { + save_metrics(recipe = recipe, skill = skill_metrics[-corr_metric_names], + data_cube = data$hcst) + } } } # Return results @@ -417,7 +422,7 @@ compute_probabilities <- function(recipe, data) { data_cube = data$hcst, type = "hcst") if (!is.null(results$probs_fcst)) { save_probabilities(recipe = recipe, probs = results$probs_fcst, - data_cbue = data$fcst, type = "fcst") + data_cube = data$fcst, type = "fcst") } } # Return results diff --git a/tests/recipes/recipe-decadal_daily_1.yml b/tests/recipes/recipe-decadal_daily_1.yml index 7a2a575b..88b87622 100644 --- a/tests/recipes/recipe-decadal_daily_1.yml +++ b/tests/recipes/recipe-decadal_daily_1.yml @@ -31,13 +31,17 @@ Analysis: Workflow: Anomalies: compute: no - cross_validation: + cross_validation: + save: 'none' Calibration: method: qmap + save: 'none' Skill: metric: RPSS + save: 'none' Probabilities: percentiles: [[1/10, 9/10]] + save: 'none' Indicators: index: FALSE ncores: # Optional, int: number of cores, defaults to 1 diff --git a/tests/recipes/recipe-decadal_monthly_1.yml b/tests/recipes/recipe-decadal_monthly_1.yml index 35b55b1a..a2849c27 100644 --- a/tests/recipes/recipe-decadal_monthly_1.yml +++ b/tests/recipes/recipe-decadal_monthly_1.yml @@ -31,15 +31,21 @@ Analysis: Workflow: Anomalies: compute: no - cross-validation: + cross-validation: + save: Calibration: method: bias + save: 'all' Skill: metric: RPSS + save: 'all' Probabilities: - percentiles: [[1/3, 2/3], [1/10, 9/10]] + percentiles: [[1/3, 2/3], [1/10, 9/10]] + save: 'all' Indicators: index: FALSE + Visualization: + plots: skill_metrics most_likely_terciles forecast_ensemble_mean ncores: # Optional, int: number of cores, defaults to 1 remove_NAs: # Optional, bool: Whether NAs are removed, defaults to FALSE Output_format: S2S4E diff --git a/tests/recipes/recipe-decadal_monthly_1b.yml b/tests/recipes/recipe-decadal_monthly_1b.yml index 5551d9c7..5a1ce4fd 100644 --- a/tests/recipes/recipe-decadal_monthly_1b.yml +++ b/tests/recipes/recipe-decadal_monthly_1b.yml @@ -31,13 +31,17 @@ Analysis: Workflow: Anomalies: compute: no - cross_validation: + cross_validation: + save: 'none' Calibration: method: bias + save: 'none' Skill: metric: RPSS + save: 'none' Probabilities: - percentiles: [[1/3, 2/3], [1/10, 9/10]] + percentiles: [[1/3, 2/3], [1/10, 9/10]] + save: 'none' Indicators: index: FALSE ncores: # Optional, int: number of cores, defaults to 1 diff --git a/tests/recipes/recipe-decadal_monthly_2.yml b/tests/recipes/recipe-decadal_monthly_2.yml index 45eb01dd..b0892a0c 100644 --- a/tests/recipes/recipe-decadal_monthly_2.yml +++ b/tests/recipes/recipe-decadal_monthly_2.yml @@ -32,14 +32,20 @@ Analysis: Anomalies: compute: no cross_validation: + save: 'all' Calibration: method: raw + save: 'all' Skill: metric: RPSS_specs EnsCorr_specs FRPS_specs FRPSS_specs BSS10_specs FRPS + save: 'all' Probabilities: percentiles: [[1/3, 2/3]] + save: 'all' Indicators: index: FALSE + Visualization: + plots: most_likely_terciles skill_metrics forecast_ensemble_mean ncores: # Optional, int: number of cores, defaults to 1 remove_NAs: # Optional, bool: Whether NAs are removed, defaults to FALSE Output_format: S2S4E diff --git a/tests/recipes/recipe-decadal_monthly_3.yml b/tests/recipes/recipe-decadal_monthly_3.yml index 94bdfebc..fc42cd2d 100644 --- a/tests/recipes/recipe-decadal_monthly_3.yml +++ b/tests/recipes/recipe-decadal_monthly_3.yml @@ -31,13 +31,17 @@ Analysis: Workflow: Anomalies: compute: no - cross_validation: + cross_validation: + save: 'none' Calibration: method: 'evmos' + save: 'none' Skill: metric: BSS10 Corr + save: 'none' Probabilities: percentiles: [[1/3, 2/3]] + save: 'none' Indicators: index: FALSE ncores: # Optional, int: number of cores, defaults to 1 diff --git a/tests/recipes/recipe-seasonal_daily_1.yml b/tests/recipes/recipe-seasonal_daily_1.yml index afa0f496..f70f0c03 100644 --- a/tests/recipes/recipe-seasonal_daily_1.yml +++ b/tests/recipes/recipe-seasonal_daily_1.yml @@ -31,10 +31,13 @@ Analysis: Anomalies: compute: no cross_validation: + save: 'none' Calibration: method: qmap + save: 'none' Skill: metric: EnsCorr_specs + save: 'none' Indicators: index: no Output_format: S2S4E diff --git a/tests/recipes/recipe-seasonal_monthly_1.yml b/tests/recipes/recipe-seasonal_monthly_1.yml index 68c58f83..5a2f5c48 100644 --- a/tests/recipes/recipe-seasonal_monthly_1.yml +++ b/tests/recipes/recipe-seasonal_monthly_1.yml @@ -31,14 +31,20 @@ Analysis: Anomalies: compute: no cross_validation: + save: Calibration: method: mse_min + save: 'all' Skill: metric: RPSS CRPSS EnsCorr Corr Enscorr_specs + save: 'all' Probabilities: percentiles: [[1/3, 2/3], [1/10, 9/10]] + save: 'all' Indicators: index: no + Visualization: + plots: skill_metrics most_likely_terciles forecast_ensemble_mean Output_format: S2S4E Run: Loglevel: INFO diff --git a/tests/testthat/test-decadal_daily_1.R b/tests/testthat/test-decadal_daily_1.R index 400b864d..c26b8978 100644 --- a/tests/testthat/test-decadal_daily_1.R +++ b/tests/testthat/test-decadal_daily_1.R @@ -219,4 +219,4 @@ as.POSIXct("1992-03-30 12:00:00", tz = 'UTC') # #}) - +unlink(recipe$Run$output_dir, recursive = TRUE) diff --git a/tests/testthat/test-decadal_monthly_1.R b/tests/testthat/test-decadal_monthly_1.R index 4fc92b3d..ee1520ad 100644 --- a/tests/testthat/test-decadal_monthly_1.R +++ b/tests/testthat/test-decadal_monthly_1.R @@ -30,21 +30,12 @@ suppressWarnings({invisible(capture.output( probs <- compute_probabilities(recipe, calibrated_data) ))}) -# Saving -suppressWarnings({invisible(capture.output( -save_data(recipe = recipe, data = calibrated_data, - skill_metrics = skill_metrics, probabilities = probs) -))}) - # Plotting suppressWarnings({invisible(capture.output( plot_data(recipe = recipe, archive = archive, data = calibrated_data, skill_metrics = skill_metrics, probabilities = probs, significance = T) ))}) - -outdir <- get_dir(recipe) - #====================================== test_that("1. Loading", { @@ -256,10 +247,10 @@ tolerance = 0.0001 #====================================== test_that("4. Saving", { - +outputs <- paste0(recipe$Run$output_dir, "/outputs/") expect_equal( -all(list.files(outdir) %in% -c("plots", "tas_19911101.nc", "tas_19921101.nc", "tas_19931101.nc", "tas_19941101.nc", "tas_20211101.nc", +all(basename(list.files(outputs, recursive = T)) %in% +c("tas_19911101.nc", "tas_19921101.nc", "tas_19931101.nc", "tas_19941101.nc", "tas_20211101.nc", "tas-obs_19911101.nc", "tas-obs_19921101.nc", "tas-obs_19931101.nc", "tas-obs_19941101.nc", "tas-percentiles_month11.nc", "tas-probs_19911101.nc", "tas-probs_19921101.nc", "tas-probs_19931101.nc", "tas-probs_19941101.nc", "tas-probs_20211101.nc", "tas-skill_month11.nc")), @@ -270,30 +261,30 @@ TRUE #) expect_equal( -length(list.files(outdir)), -17 +length(list.files(outputs, recursive = T)), +16 ) }) test_that("5. Visualization", { +plots <- paste0(recipe$Run$output_dir, "/plots/") expect_equal( -all(list.files(paste0(outdir, "/plots/")) %in% +all(basename(list.files(plots, recursive = T)) %in% c("forecast_ensemble_mean-2021.png", "forecast_most_likely_tercile-2021.png", "rpss.png")), TRUE ) expect_equal( -length(list.files(paste0(outdir, "/plots/"))), +length(list.files(plots, recursive = T)), 3 ) }) # Delete files -unlink(paste0(outdir, list.files(outdir, recursive = TRUE))) - +unlink(recipe$Run$output_dir, recursive = TRUE) #============================================================== @@ -345,4 +336,5 @@ lapply(probs_b$probs_fcst, ClimProjDiags::Subset, 'syear', 2), probs$probs_fcst ) +unlink(recipe$Run$output_dir, recursive = TRUE) }) diff --git a/tests/testthat/test-decadal_monthly_2.R b/tests/testthat/test-decadal_monthly_2.R index 40a56abf..a6ca9254 100644 --- a/tests/testthat/test-decadal_monthly_2.R +++ b/tests/testthat/test-decadal_monthly_2.R @@ -29,11 +29,6 @@ suppressWarnings({invisible(capture.output( probs <- compute_probabilities(recipe, calibrated_data) ))}) -# Saving -suppressWarnings({invisible(capture.output( -save_data(recipe, calibrated_data, skill_metrics, probs) -))}) - # Plotting suppressWarnings({invisible(capture.output( plot_data(recipe = recipe, data = calibrated_data, @@ -250,18 +245,18 @@ tolerance = 0.0001 #====================================== test_that("4. Saving", { - +outputs <- paste0(recipe$Run$output_dir, "/outputs/") expect_equal( -all(list.files(outdir) %in% -c("plots", "tas_19901101.nc", "tas_19911101.nc", "tas_19921101.nc", "tas_20201101.nc", "tas_20211101.nc", +all(basename(list.files(outputs, recursive = T)) %in% +c("tas_19901101.nc", "tas_19911101.nc", "tas_19921101.nc", "tas_20201101.nc", "tas_20211101.nc", "tas-obs_19901101.nc", "tas-obs_19911101.nc", "tas-obs_19921101.nc", "tas-percentiles_month11.nc", "tas-probs_19901101.nc", "tas-probs_19911101.nc", "tas-probs_19921101.nc", "tas-probs_20201101.nc", "tas-probs_20211101.nc", "tas-skill_month11.nc")), TRUE ) expect_equal( -length(list.files(outdir)), -16 +length(list.files(outputs, recursive = T)), +15 ) }) @@ -269,19 +264,20 @@ length(list.files(outdir)), #====================================== test_that("5. Visualization", { +plots <- paste0(recipe$Run$output_dir, "/plots/") expect_equal( -all(list.files(paste0(outdir, "/plots/")) %in% +all(basename(list.files(plots, recursive = T)) %in% c("bss10_specs.png", "enscorr_specs.png", "forecast_ensemble_mean-2020.png", "forecast_ensemble_mean-2021.png", "forecast_most_likely_tercile-2020.png", "forecast_most_likely_tercile-2021.png", "frps_specs.png", "frps.png", "rpss_specs.png") ), TRUE ) expect_equal( -length(list.files(paste0(outdir, "/plots/"))), +length(list.files(plots, recursive = T)), 9 ) }) # Delete files -unlink(paste0(outdir, list.files(outdir, recursive = TRUE))) +unlink(recipe$Run$output_dir, recursive = TRUE) diff --git a/tests/testthat/test-decadal_monthly_3.R b/tests/testthat/test-decadal_monthly_3.R index 85c15c88..988172c6 100644 --- a/tests/testthat/test-decadal_monthly_3.R +++ b/tests/testthat/test-decadal_monthly_3.R @@ -196,4 +196,4 @@ tolerance = 0.0001 }) - +unlink(recipe$Run$output_dir, recursive = TRUE) diff --git a/tests/testthat/test-seasonal_daily.R b/tests/testthat/test-seasonal_daily.R index 10cba33e..da0e789b 100644 --- a/tests/testthat/test-seasonal_daily.R +++ b/tests/testthat/test-seasonal_daily.R @@ -164,4 +164,4 @@ tolerance=0.0001 ) }) -unlink(recipe$Run$output_dir) +unlink(recipe$Run$output_dir, recursive = TRUE) diff --git a/tests/testthat/test-seasonal_monthly.R b/tests/testthat/test-seasonal_monthly.R index 6a166503..83b5ceab 100644 --- a/tests/testthat/test-seasonal_monthly.R +++ b/tests/testthat/test-seasonal_monthly.R @@ -212,10 +212,10 @@ rep(FALSE, 3) }) test_that("4. Saving", { - +outputs <- paste0(recipe$Run$output_dir, "/outputs/") expect_equal( -all(list.files(outdir) %in% -c("plots", "tas_19931101.nc", "tas_19941101.nc", "tas_19951101.nc", +all(basename(list.files(outputs, recursive = T)) %in% +c("tas_19931101.nc", "tas_19941101.nc", "tas_19951101.nc", "tas_19961101.nc", "tas_20201101.nc", "tas-corr_month11.nc", "tas-obs_19931101.nc", "tas-obs_19941101.nc", "tas-obs_19951101.nc", "tas-obs_19961101.nc", "tas-percentiles_month11.nc", "tas-probs_19931101.nc", @@ -224,26 +224,27 @@ c("plots", "tas_19931101.nc", "tas_19941101.nc", "tas_19951101.nc", TRUE ) expect_equal( -length(list.files(outdir)), -18 +length(list.files(outputs, recursive = T)), +17 ) }) test_that("5. Visualization", { +plots <- paste0(recipe$Run$output_dir, "/plots/") expect_equal( -all(list.files(paste0(outdir, "/plots/")) %in% +all(basename(list.files(plots, recursive = T)) %in% c("crpss-november.png", "enscorr_specs-november.png", "enscorr-november.png", "forecast_ensemble_mean-20201101.png", "forecast_most_likely_tercile-20201101.png", "rpss-november.png")), TRUE ) expect_equal( -length(list.files(paste0(outdir, "/plots/"))), +length(list.files(plots, recursive = T)), 6 ) }) # Delete files -unlink(paste0(outdir, list.files(outdir, recursive = TRUE))) +unlink(recipe$Run$output_dir, recursive = T) -- GitLab From ccd9b89b283b41a4e89d58afa5af9c65f406ad1e Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Tue, 18 Apr 2023 16:23:26 +0200 Subject: [PATCH 136/388] Adapt recipe checks to new saving options, make files for saving and plotting functions --- modules/Saving/R/Utils.R | 69 ++++++++ modules/Saving/R/save_corr.R | 117 +++++++++++++ modules/Saving/R/save_forecast.R | 137 +++++++++++++++ modules/Saving/R/save_metrics.R | 119 +++++++++++++ modules/Saving/R/save_observations.R | 137 +++++++++++++++ modules/Saving/R/save_percentiles.R | 107 ++++++++++++ modules/Saving/R/save_probabilities.R | 124 ++++++++++++++ modules/Saving/Saving.R | 7 + modules/Visualization/R/plot_ensemble_mean.R | 88 ++++++++++ .../R/plot_most_likely_terciles_map.R | 87 ++++++++++ modules/Visualization/R/plot_skill_metrics.R | 161 ++++++++++++++++++ modules/Visualization/Visualization.R | 4 + tests/recipes/recipe-seasonal_monthly_1.yml | 2 +- tools/check_recipe.R | 63 ++++++- 14 files changed, 1220 insertions(+), 2 deletions(-) create mode 100644 modules/Saving/R/Utils.R create mode 100644 modules/Saving/R/save_corr.R create mode 100644 modules/Saving/R/save_forecast.R create mode 100644 modules/Saving/R/save_metrics.R create mode 100644 modules/Saving/R/save_observations.R create mode 100644 modules/Saving/R/save_percentiles.R create mode 100644 modules/Saving/R/save_probabilities.R create mode 100644 modules/Visualization/R/plot_ensemble_mean.R create mode 100644 modules/Visualization/R/plot_most_likely_terciles_map.R create mode 100644 modules/Visualization/R/plot_skill_metrics.R diff --git a/modules/Saving/R/Utils.R b/modules/Saving/R/Utils.R new file mode 100644 index 00000000..9ff695a6 --- /dev/null +++ b/modules/Saving/R/Utils.R @@ -0,0 +1,69 @@ +.get_global_attributes <- function(recipe, archive) { + # Generates metadata of interest to add to the global attributes of the + # netCDF files. + parameters <- recipe$Analysis + hcst_period <- paste0(parameters$Time$hcst_start, " to ", + parameters$Time$hcst_end) + current_time <- paste0(as.character(Sys.time()), " ", Sys.timezone()) + system_name <- parameters$Datasets$System$name + reference_name <- parameters$Datasets$Reference$name + + attrs <- list(reference_period = hcst_period, + institution_system = archive$System[[system_name]]$institution, + institution_reference = archive$Reference[[reference_name]]$institution, + system = system_name, + reference = reference_name, + calibration_method = parameters$Workflow$Calibration$method, + computed_on = current_time) + + return(attrs) +} + +.get_times <- function(store.freq, fcst.horizon, leadtimes, sdate, calendar) { + # Generates time dimensions and the corresponding metadata. + ## TODO: Subseasonal + + switch(fcst.horizon, + "seasonal" = {time <- leadtimes; ref <- 'hours since '; + stdname <- paste(strtoi(leadtimes), collapse=", ")}, + "subseasonal" = {len <- 4; ref <- 'hours since '; + stdname <- ''}, + "decadal" = {time <- leadtimes; ref <- 'hours since '; + stdname <- paste(strtoi(leadtimes), collapse=", ")}) + + dim(time) <- length(time) + sdate <- as.Date(sdate, format = '%Y%m%d') # reformatting + metadata <- list(time = list(units = paste0(ref, sdate, 'T00:00:00'), + calendar = calendar)) + attr(time, 'variables') <- metadata + names(dim(time)) <- 'time' + + sdate <- 1:length(sdate) + dim(sdate) <- length(sdate) + metadata <- list(sdate = list(standard_name = paste(strtoi(sdate), + collapse=", "), + units = paste0('Init date'))) + attr(sdate, 'variables') <- metadata + names(dim(sdate)) <- 'sdate' + + return(list(time=time)) +} + +.get_latlon <- function(latitude, longitude) { + # Adds dimensions and metadata to lat and lon + # latitude: array containing the latitude values + # longitude: array containing the longitude values + + dim(longitude) <- length(longitude) + metadata <- list(longitude = list(units = 'degrees_east')) + attr(longitude, 'variables') <- metadata + names(dim(longitude)) <- 'longitude' + + dim(latitude) <- length(latitude) + metadata <- list(latitude = list(units = 'degrees_north')) + attr(latitude, 'variables') <- metadata + names(dim(latitude)) <- 'latitude' + + return(list(lat=latitude, lon=longitude)) + +} diff --git a/modules/Saving/R/save_corr.R b/modules/Saving/R/save_corr.R new file mode 100644 index 00000000..8b945318 --- /dev/null +++ b/modules/Saving/R/save_corr.R @@ -0,0 +1,117 @@ +save_corr <- function(recipe, + skill, + data_cube, + agg = "global", + outdir = NULL) { + # This function adds metadata to the ensemble correlation in 'skill' + # and exports it to a netCDF file inside 'outdir'. + + archive <- get_archive(recipe) + dictionary <- read_yaml("conf/variable-dictionary.yml") + # Define grid dimensions and names + lalo <- c('longitude', 'latitude') + # Remove singleton dimensions and rearrange lon, lat and time dims + if (tolower(agg) == "global") { + skill <- lapply(skill, function(x) { + Reorder(x, c(lalo, 'ensemble', 'time'))}) + } + # Add global and variable attributes + global_attributes <- .get_global_attributes(recipe, archive) + ## TODO: Sort out the logic once default behavior is decided + if ((!is.null(recipe$Analysis$Workflow$Anomalies$compute)) && + (recipe$Analysis$Workflow$Anomalies$compute)) { + global_attributes <- c(global_attributes, + list(from_anomalies = "Yes")) + } else { + global_attributes <- c(global_attributes, + list(from_anomalies = "No")) + } + attr(skill[[1]], 'global_attrs') <- global_attributes + + for (i in 1:length(skill)) { + metric <- names(skill[i]) + long_name <- dictionary$metrics[[metric]]$long_name + missing_val <- -9.e+33 + skill[[i]][is.na(skill[[i]])] <- missing_val + if (tolower(agg) == "country") { + sdname <- paste0(metric, " region-aggregated metric") + dims <- c('Country', 'ensemble', 'time') + } else { + sdname <- paste0(metric) #, " grid point metric") # formerly names(metric) + dims <- c(lalo, 'ensemble', 'time') + } + metadata <- list(metric = list(name = metric, + standard_name = sdname, + long_name = long_name, + missing_value = missing_val)) + attr(skill[[i]], 'variables') <- metadata + names(dim(skill[[i]])) <- dims + } + + # Time indices and metadata + fcst.horizon <- tolower(recipe$Analysis$Horizon) + store.freq <- recipe$Analysis$Variables$freq + calendar <- archive$System[[global_attributes$system]]$calendar + + # Generate vector containing leadtimes + dates <- as.PCICt(ClimProjDiags::Subset(data_cube$attrs$Dates, 'syear', 1), + cal = calendar) + if (fcst.horizon == 'decadal') { + init_month <- archive$System[[recipe$Analysis$Datasets$System$name]]$initial_month + init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, '-', + sprintf('%02d', init_month), '-01'), + cal = calendar) + } else { + init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, + recipe$Analysis$Time$sdate), + format = '%Y%m%d', cal = calendar) + } + + # Get time difference in hours + leadtimes <- as.numeric(dates - init_date)/3600 + + # Select start date + # If a fcst is provided, use that as the ref. year. Otherwise use 1970. + if (fcst.horizon == 'decadal') { + if (!is.null(recipe$Analysis$Time$fcst_year)) { + #PROBLEM: May be more than one fcst_year + fcst.sdate <- paste0(recipe$Analysis$Time$fcst_year[1], + sprintf('%02d', init_month), '01') + } else { + fcst.sdate <- paste0("1970", sprintf('%02d', init_month), '01') + } + } else { + if (!is.null(recipe$Analysis$Time$fcst_year)) { + fcst.sdate <- paste0(recipe$Analysis$Time$fcst_year, + recipe$Analysis$Time$sdate) + } else { + fcst.sdate <- paste0("1970", recipe$Analysis$Time$sdate) + } + } + + times <- .get_times(store.freq, fcst.horizon, leadtimes, fcst.sdate, calendar) + time <- times$time + + # Generate name of output file + if (is.null(outdir)) { + outdir <- get_dir(recipe) + } + outfile <- get_filename(outdir, recipe, data_cube$attrs$Variable$varName, + fcst.sdate, agg, "corr") + + # Get grid data and metadata and export to netCDF + if (tolower(agg) == "country") { + country <- .get_countries(grid) + ArrayToNc(append(country, time, skill), outfile) + } else { + latitude <- data_cube$coords$lat[1:length(data_cube$coords$lat)] + longitude <- data_cube$coords$lon[1:length(data_cube$coords$lon)] + latlon <- .get_latlon(latitude, longitude) + # Compile variables into a list and export to netCDF + vars <- list(latlon$lat, latlon$lon, time) + vars <- c(vars, skill) + ArrayToNc(vars, outfile) + } + info(recipe$Run$logger, + "##### ENSEMBLE CORRELATION SAVED TO NETCDF FILE #####") +} diff --git a/modules/Saving/R/save_forecast.R b/modules/Saving/R/save_forecast.R new file mode 100644 index 00000000..9ec8499c --- /dev/null +++ b/modules/Saving/R/save_forecast.R @@ -0,0 +1,137 @@ +save_forecast <- function(recipe, + data_cube, + type = "hcst", + agg = "global", + outdir = NULL) { + # Loops over the years in the s2dv_cube containing a hindcast or forecast + # and exports each year to a netCDF file. + # data_cube: s2dv_cube containing the data and metadata + # recipe: the auto-s2s recipe + # outdir: directory where the files should be saved + # agg: aggregation, "global" or "country" + + lalo <- c('longitude', 'latitude') + archive <- get_archive(recipe) + dictionary <- read_yaml("conf/variable-dictionary.yml") + variable <- data_cube$attrs$Variable$varName + var.longname <- data_cube$attrs$Variable$metadata[[variable]]$long_name + global_attributes <- .get_global_attributes(recipe, archive) + fcst.horizon <- tolower(recipe$Analysis$Horizon) + store.freq <- recipe$Analysis$Variables$freq + calendar <- archive$System[[global_attributes$system]]$calendar + + if (is.null(outdir)) { + outdir <- get_dir(recipe) + } + + # Generate vector containing leadtimes + dates <- as.PCICt(ClimProjDiags::Subset(data_cube$attrs$Dates, 'syear', 1), + cal = calendar) + if (fcst.horizon == 'decadal') { + ## Method 1: Use the first date as init_date. But it may be better to use + ## the real initialized date (ask users) + # init_date <- as.Date(data_cube$Dates$start[1], format = '%Y%m%d') + ## Method 2: use initial month + init_month <- archive$System[[recipe$Analysis$Datasets$System$name]]$initial_month + if (type == 'hcst') { + init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, '-', + sprintf('%02d', init_month), '-01'), + cal = calendar) + } else if (type == 'fcst') { + init_date <- as.PCICt(paste0(recipe$Analysis$Time$fcst_year[1], '-', + sprintf('%02d', init_month), '-01'), + cal = calendar) + } + } else { + if (type == 'hcst') { + init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, + recipe$Analysis$Time$sdate), + format = '%Y%m%d', cal = calendar) + } else if (type == 'fcst') { + init_date <- as.PCICt(paste0(recipe$Analysis$Time$fcst_year, + recipe$Analysis$Time$sdate), + format = '%Y%m%d', cal = calendar) + } + } + # Get time difference in hours + leadtimes <- as.numeric(dates - init_date)/3600 + + syears <- seq(1:dim(data_cube$data)['syear'][[1]]) + # expect dim = [sday = 1, sweek = 1, syear, time] + syears_val <- lubridate::year(data_cube$attrs$Dates[1, 1, , 1]) + for (i in syears) { + # Select year from array and rearrange dimensions + fcst <- ClimProjDiags::Subset(data_cube$data, 'syear', i, drop = T) + + if (!("time" %in% names(dim(fcst)))) { + dim(fcst) <- c("time" = 1, dim(fcst)) + } + if (tolower(agg) == "global") { + fcst <- list(Reorder(fcst, c(lalo, 'ensemble', 'time'))) + } else { + fcst <- list(Reorder(fcst, c('country', 'ensemble', 'time'))) + } + + # Add metadata + var.sdname <- dictionary$vars[[variable]]$standard_name + if (tolower(agg) == "country") { + dims <- c('Country', 'ensemble', 'time') + var.expname <- paste0(variable, '_country') + var.longname <- paste0("Country-Aggregated ", var.longname) + var.units <- attr(data_cube$Variable, 'variable')$units + } else { + dims <- c(lalo, 'ensemble', 'time') + var.expname <- variable + var.sdname <- var.sdname + var.units <- data_cube$attrs$Variable$metadata[[variable]]$units + } + + metadata <- list(fcst = list(name = var.expname, + standard_name = var.sdname, + long_name = var.longname, + units = var.units)) + attr(fcst[[1]], 'variables') <- metadata + names(dim(fcst[[1]])) <- dims + # Add global attributes + attr(fcst[[1]], 'global_attrs') <- global_attributes + + # Select start date + if (fcst.horizon == 'decadal') { + ## NOTE: Not good to use data_cube$load_parameters$dat1 because decadal + ## data has been reshaped + # fcst.sdate <- format(as.Date(data_cube$Dates$start[i]), '%Y%m%d') + + # init_date is like "1990-11-01" + init_date <- as.POSIXct(init_date) + fcst.sdate <- init_date + lubridate::years(syears_val[i] - lubridate::year(init_date)) + fcst.sdate <- format(fcst.sdate, '%Y%m%d') + + } else { + fcst.sdate <- data_cube$attrs$load_parameters$dat1$file_date[[1]][i] + } + + # Get time dimension values and metadata + times <- .get_times(store.freq, fcst.horizon, leadtimes, fcst.sdate, calendar) + time <- times$time + + # Generate name of output file + outfile <- get_filename(outdir, recipe, data_cube$attrs$Variable$varName, + fcst.sdate, agg, "exp") + + # Get grid data and metadata and export to netCDF + if (tolower(agg) == "country") { + country <- get_countries(grid) + ArrayToNc(append(country, time, fcst), outfile) + } else { + latitude <- data_cube$coords$lat[1:length(data_cube$coords$lat)] + longitude <- data_cube$coords$lon[1:length(data_cube$coords$lon)] + latlon <- .get_latlon(latitude, longitude) + # Compile variables into a list and export to netCDF + vars <- list(latlon$lat, latlon$lon, time) + vars <- c(vars, fcst) + ArrayToNc(vars, outfile) + } + } + info(recipe$Run$logger, paste("#####", toupper(type), + "SAVED TO NETCDF FILE #####")) +} diff --git a/modules/Saving/R/save_metrics.R b/modules/Saving/R/save_metrics.R new file mode 100644 index 00000000..d48d9d8d --- /dev/null +++ b/modules/Saving/R/save_metrics.R @@ -0,0 +1,119 @@ +save_metrics <- function(recipe, + skill, + data_cube, + agg = "global", + outdir = NULL) { + # This function adds metadata to the skill metrics in 'skill' + # and exports them to a netCDF file inside 'outdir'. + + # Define grid dimensions and names + lalo <- c('longitude', 'latitude') + archive <- get_archive(recipe) + dictionary <- read_yaml("conf/variable-dictionary.yml") + + + # Remove singleton dimensions and rearrange lon, lat and time dims + if (tolower(agg) == "global") { + skill <- lapply(skill, function(x) { + Reorder(x, c(lalo, 'time'))}) + } + # Add global and variable attributes + global_attributes <- .get_global_attributes(recipe, archive) + ## TODO: Sort out the logic once default behavior is decided + if ((!is.null(recipe$Analysis$Workflow$Anomalies$compute)) && + (recipe$Analysis$Workflow$Anomalies$compute)) { + global_attributes <- c(list(from_anomalies = "Yes"), + global_attributes) + } else { + global_attributes <- c(list(from_anomalies = "No"), + global_attributes) + } + attr(skill[[1]], 'global_attrs') <- global_attributes + + for (i in 1:length(skill)) { + metric <- names(skill[i]) + long_name <- dictionary$metrics[[metric]]$long_name + missing_val <- -9.e+33 + skill[[i]][is.na(skill[[i]])] <- missing_val + if (tolower(agg) == "country") { + sdname <- paste0(metric, " region-aggregated metric") + dims <- c('Country', 'time') + } else { + sdname <- paste0(metric) #, " grid point metric") + dims <- c(lalo, 'time') + } + metadata <- list(metric = list(name = metric, + standard_name = sdname, + long_name = long_name, + missing_value = missing_val)) + attr(skill[[i]], 'variables') <- metadata + names(dim(skill[[i]])) <- dims + } + + # Time indices and metadata + fcst.horizon <- tolower(recipe$Analysis$Horizon) + store.freq <- recipe$Analysis$Variables$freq + calendar <- archive$System[[global_attributes$system]]$calendar + + # Generate vector containing leadtimes + dates <- as.PCICt(ClimProjDiags::Subset(data_cube$attrs$Dates, 'syear', 1), + cal = calendar) + + if (fcst.horizon == 'decadal') { + init_month <- archive$System[[recipe$Analysis$Datasets$System$name]]$initial_month + init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, '-', + sprintf('%02d', init_month), '-01'), + cal = calendar) + } else { + init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, + recipe$Analysis$Time$sdate), + format = '%Y%m%d', cal = calendar) + } + + # Get time difference in hours + leadtimes <- as.numeric(dates - init_date)/3600 + + # Select start date + # If a fcst is provided, use that as the ref. year. Otherwise use 1970. + if (fcst.horizon == 'decadal') { + if (!is.null(recipe$Analysis$Time$fcst_year)) { + #PROBLEM: May be more than one fcst_year + fcst.sdate <- paste0(recipe$Analysis$Time$fcst_year[1], + sprintf('%02d', init_month), '01') + } else { + fcst.sdate <- paste0("1970", sprintf('%02d', init_month), '01') + } + } else { + if (!is.null(recipe$Analysis$Time$fcst_year)) { + fcst.sdate <- paste0(recipe$Analysis$Time$fcst_year, + recipe$Analysis$Time$sdate) + } else { + fcst.sdate <- paste0("1970", recipe$Analysis$Time$sdate) + } + } + + times <- .get_times(store.freq, fcst.horizon, leadtimes, fcst.sdate, calendar) + time <- times$time + + # Generate name of output file + if (is.null(outdir)) { + outdir <- get_dir(recipe) + } + outfile <- get_filename(outdir, recipe, data_cube$attrs$Variable$varName, + fcst.sdate, agg, "skill") + + # Get grid data and metadata and export to netCDF + if (tolower(agg) == "country") { + country <- get_countries(grid) + ArrayToNc(append(country, time, skill), outfile) + } else { + latitude <- data_cube$coords$lat[1:length(data_cube$coords$lat)] + longitude <- data_cube$coords$lon[1:length(data_cube$coords$lon)] + latlon <- .get_latlon(latitude, longitude) + # Compile variables into a list and export to netCDF + vars <- list(latlon$lat, latlon$lon, time) + vars <- c(vars, skill) + ArrayToNc(vars, outfile) + } + info(recipe$Run$logger, "##### SKILL METRICS SAVED TO NETCDF FILE #####") +} diff --git a/modules/Saving/R/save_observations.R b/modules/Saving/R/save_observations.R new file mode 100644 index 00000000..dcaf0765 --- /dev/null +++ b/modules/Saving/R/save_observations.R @@ -0,0 +1,137 @@ +save_observations <- function(recipe, + data_cube, + agg = "global", + outdir = NULL) { + # Loops over the years in the s2dv_cube containing the observations and + # exports each year to a netCDF file. + # data_cube: s2dv_cube containing the data and metadata + # recipe: the auto-s2s recipe + # outdir: directory where the files should be saved + # agg: aggregation, "global" or "country" + + lalo <- c('longitude', 'latitude') + archive <- get_archive(recipe) + dictionary <- read_yaml("conf/variable-dictionary.yml") + variable <- data_cube$attrs$Variable$varName + var.longname <- data_cube$attrs$Variable$metadata[[variable]]$long_name + global_attributes <- .get_global_attributes(recipe, archive) + fcst.horizon <- tolower(recipe$Analysis$Horizon) + store.freq <- recipe$Analysis$Variables$freq + calendar <- archive$Reference[[global_attributes$reference]]$calendar + + if (is.null(outdir)) { + outdir <- get_dir(recipe) + } + + # Generate vector containing leadtimes + ## TODO: Move to a separate function? + dates <- as.PCICt(ClimProjDiags::Subset(data_cube$attrs$Dates, 'syear', 1), + cal = calendar) + if (fcst.horizon == 'decadal') { + ## Method 1: Use the first date as init_date. But it may be better to use + ## the real initialized date (ask users) +# init_date <- as.Date(data_cube$Dates$start[1], format = '%Y%m%d') + ## Method 2: use initial month + init_month <- archive$System[[recipe$Analysis$Datasets$System$name]]$initial_month + init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, '-', + sprintf('%02d', init_month), '-01'), + cal = calendar) + + } else { + init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, + recipe$Analysis$Time$sdate), + format = '%Y%m%d', cal = calendar) + } + # Get time difference in hours + leadtimes <- as.numeric(dates - init_date)/3600 + + syears <- seq(1:dim(data_cube$data)['syear'][[1]]) + ## expect dim = [sday = 1, sweek = 1, syear, time] + syears_val <- lubridate::year(data_cube$attrs$Dates[1, 1, , 1]) + for (i in syears) { + # Select year from array and rearrange dimensions + fcst <- ClimProjDiags::Subset(data_cube$data, 'syear', i, drop = T) + + if (!("time" %in% names(dim(fcst)))) { + dim(fcst) <- c("time" = 1, dim(fcst)) + } + if (tolower(agg) == "global") { + fcst <- list(Reorder(fcst, c(lalo, 'time'))) + } else { + fcst <- list(Reorder(fcst, c('country', 'time'))) + } + + # Add metadata + var.sdname <- dictionary$vars[[variable]]$standard_name + if (tolower(agg) == "country") { + dims <- c('Country', 'time') + var.expname <- paste0(variable, '_country') + var.longname <- paste0("Country-Aggregated ", var.longname) + var.units <- data_cube$attrs$Variable$metadata[[variable]]$units + } else { + dims <- c(lalo, 'time') + var.expname <- variable + var.units <- data_cube$attrs$Variable$metadata[[variable]]$units + } + + metadata <- list(fcst = list(name = var.expname, + standard_name = var.sdname, + long_name = var.longname, + units = var.units)) + attr(fcst[[1]], 'variables') <- metadata + names(dim(fcst[[1]])) <- dims + # Add global attributes + attr(fcst[[1]], 'global_attrs') <- global_attributes + + # Select start date. The date is computed for each year, and adapted for + # consistency with the hcst/fcst dates, so that both sets of files have + # the same name pattern. + ## Because observations are loaded differently in the daily vs. monthly + ## cases, different approaches are necessary. + if (fcst.horizon == 'decadal') { + # init_date is like "1990-11-01" + init_date <- as.POSIXct(init_date) + fcst.sdate <- init_date + lubridate::years(syears_val[i] - lubridate::year(init_date)) + } else { + + if (store.freq == "monthly_mean") { + fcst.sdate <- data_cube$attrs$load_parameters$dat1$file_date[[1]][i] + fcst.sdate <- as.Date(paste0(fcst.sdate, "01"), '%Y%m%d') + } else { + fcst.sdate <- as.Date(data_cube$attrs$Dates[i]) + } + } + + # Ensure the year is correct if the first leadtime goes to the next year + init_date <- as.POSIXct(init_date) + if (lubridate::month(fcst.sdate) < lubridate::month(init_date)) { + lubridate::year(fcst.sdate) <- lubridate::year(fcst.sdate) + 1 + } + # Ensure that the initialization month is consistent with the hindcast + lubridate::month(fcst.sdate) <- lubridate::month(init_date) + fcst.sdate <- format(fcst.sdate, format = '%Y%m%d') + + # Get time dimension values and metadata + times <- .get_times(store.freq, fcst.horizon, leadtimes, fcst.sdate, calendar) + time <- times$time + + # Generate name of output file + outfile <- get_filename(outdir, recipe, data_cube$attrs$Variable$varName, + fcst.sdate, agg, "obs") + + # Get grid data and metadata and export to netCDF + if (tolower(agg) == "country") { + country <- get_countries(grid) + ArrayToNc(append(country, time, fcst), outfile) + } else { + latitude <- data_cube$coords$lat[1:length(data_cube$coords$lat)] + longitude <- data_cube$coords$lon[1:length(data_cube$coords$lon)] + latlon <- .get_latlon(latitude, longitude) + # Compile variables into a list and export to netCDF + vars <- list(latlon$lat, latlon$lon, time) + vars <- c(vars, fcst) + ArrayToNc(vars, outfile) + } + } + info(recipe$Run$logger, "##### OBS SAVED TO NETCDF FILE #####") +} diff --git a/modules/Saving/R/save_percentiles.R b/modules/Saving/R/save_percentiles.R new file mode 100644 index 00000000..b4aab605 --- /dev/null +++ b/modules/Saving/R/save_percentiles.R @@ -0,0 +1,107 @@ +save_percentiles <- function(recipe, + percentiles, + data_cube, + agg = "global", + outdir = NULL) { + # This function adds metadata to the percentiles + # and exports them to a netCDF file inside 'outdir'. + archive <- get_archive(recipe) + + # Define grid dimensions and names + lalo <- c('longitude', 'latitude') + # Remove singleton dimensions and rearrange lon, lat and time dims + if (tolower(agg) == "global") { + percentiles <- lapply(percentiles, function(x) { + Reorder(x, c(lalo, 'time'))}) + } + + # Add global and variable attributes + global_attributes <- .get_global_attributes(recipe, archive) + ## TODO: Sort out the logic once default behavior is decided + if ((!is.null(recipe$Analysis$Workflow$Anomalies$compute)) && + (recipe$Analysis$Workflow$Anomalies$compute)) { + global_attributes <- c(list(from_anomalies = "Yes"), + global_attributes) + } else { + global_attributes <- c(list(from_anomalies = "No"), + global_attributes) + } + attr(percentiles[[1]], 'global_attrs') <- global_attributes + + for (i in 1:length(percentiles)) { + ## TODO: replace with proper standard names + percentile <- names(percentiles[i]) + long_name <- paste0(gsub("^.*_", "", percentile), "th percentile") + if (tolower(agg) == "country") { + dims <- c('Country', 'time') + } else { + dims <- c(lalo, 'time') + } + metadata <- list(metric = list(name = percentile, long_name = long_name)) + attr(percentiles[[i]], 'variables') <- metadata + names(dim(percentiles[[i]])) <- dims + } + + # Time indices and metadata + fcst.horizon <- tolower(recipe$Analysis$Horizon) + store.freq <- recipe$Analysis$Variables$freq + calendar <- archive$System[[global_attributes$system]]$calendar + # Generate vector containing leadtimes + dates <- as.PCICt(ClimProjDiags::Subset(data_cube$attrs$Dates, 'syear', 1), + cal = calendar) + if (fcst.horizon == 'decadal') { + init_month <- archive$System[[recipe$Analysis$Datasets$System$name]]$initial_month + init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, '-', + sprintf('%02d', init_month), '-01'), + cal = calendar) + } else { + init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, + recipe$Analysis$Time$sdate), + format = '%Y%m%d', cal = calendar) + } + + # Get time difference in hours + leadtimes <- as.numeric(dates - init_date)/3600 + + # Select start date + # If a fcst is provided, use that as the ref. year. Otherwise use 1970. + if (fcst.horizon == 'decadal') { + if (!is.null(recipe$Analysis$Time$fcst_year)) { + #PROBLEM: May be more than one fcst_year + fcst.sdate <- paste0(recipe$Analysis$Time$fcst_year[1], + sprintf('%02d', init_month), '01') + } else { + fcst.sdate <- paste0("1970", sprintf('%02d', init_month), '01') + } + } else { + if (!is.null(recipe$Analysis$Time$fcst_year)) { + fcst.sdate <- paste0(recipe$Analysis$Time$fcst_year, + recipe$Analysis$Time$sdate) + } else { + fcst.sdate <- paste0("1970", recipe$Analysis$Time$sdate) + } + } + times <- .get_times(store.freq, fcst.horizon, leadtimes, fcst.sdate, calendar) + time <- times$time + + # Generate name of output file + if (is.null(outdir)) { + outdir <- get_dir(recipe) + } + outfile <- get_filename(outdir, recipe, data_cube$attrs$Variable$varName, + fcst.sdate, agg, "percentiles") + # Get grid data and metadata and export to netCDF + if (tolower(agg) == "country") { + country <- get_countries(grid) + ArrayToNc(append(country, time, percentiles), outfile) + } else { + latitude <- data_cube$coords$lat[1:length(data_cube$coords$lat)] + longitude <- data_cube$coords$lon[1:length(data_cube$coords$lon)] + latlon <- .get_latlon(latitude, longitude) + # Compile variables into a list and export to netCDF + vars <- list(latlon$lat, latlon$lon, time) + vars <- c(vars, percentiles) + ArrayToNc(vars, outfile) + } + info(recipe$Run$logger, "##### PERCENTILES SAVED TO NETCDF FILE #####") +} diff --git a/modules/Saving/R/save_probabilities.R b/modules/Saving/R/save_probabilities.R new file mode 100644 index 00000000..20af9be7 --- /dev/null +++ b/modules/Saving/R/save_probabilities.R @@ -0,0 +1,124 @@ +save_probabilities <- function(recipe, + probs, + data_cube, + agg = "global", + type = "hcst", + outdir = NULL) { + # Loops over the years in the s2dv_cube containing a hindcast or forecast + # and exports the corresponding category probabilities to a netCDF file. + # probs: array containing the probability data + # recipe: the auto-s2s recipe + # data_cube: s2dv_cube containing the data and metadata + # outdir: directory where the files should be saved + # type: 'exp' (hcst and fcst) or 'obs' + # agg: aggregation, "global" or "country" + # type: 'hcst' or 'fcst' + + lalo <- c('longitude', 'latitude') + archive <- get_archive(recipe) + variable <- data_cube$attrs$Variable$varName + var.longname <- data_cube$attrs$Variable$metadata[[variable]]$long_name + global_attributes <- .get_global_attributes(recipe, archive) + if (is.null(outdir)) { + outdir <- get_dir(recipe) + } + # Add anomaly computation to global attributes + ## TODO: Sort out the logic once default behavior is decided + if ((!is.null(recipe$Analysis$Workflow$Anomalies$compute)) && + (recipe$Analysis$Workflow$Anomalies$compute)) { + global_attributes <- c(list(from_anomalies = "Yes"), + global_attributes) + } else { + global_attributes <- c(list(from_anomalies = "No"), + global_attributes) + } + fcst.horizon <- tolower(recipe$Analysis$Horizon) + store.freq <- recipe$Analysis$Variables$freq + calendar <- archive$System[[global_attributes$system]]$calendar + + # Generate vector containing leadtimes + ## TODO: Move to a separate function? + dates <- as.PCICt(ClimProjDiags::Subset(data_cube$attrs$Dates, 'syear', 1), + cal = calendar) + if (fcst.horizon == 'decadal') { + init_month <- archive$System[[recipe$Analysis$Datasets$System$name]]$initial_month + init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, '-', + sprintf('%02d', init_month), '-01'), + cal = calendar) + } else { + init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, + recipe$Analysis$Time$sdate), + format = '%Y%m%d', cal = calendar) + } + + # Get time difference in hours + leadtimes <- as.numeric(dates - init_date)/3600 + + syears <- seq(1:dim(data_cube$data)['syear'][[1]]) + ## expect dim = [sday = 1, sweek = 1, syear, time] + syears_val <- lubridate::year(data_cube$attrs$Dates[1, 1, , 1]) + for (i in syears) { + # Select year from array and rearrange dimensions + probs_syear <- lapply(probs, ClimProjDiags::Subset, 'syear', i, drop = 'selected') + if (tolower(agg) == "global") { + probs_syear <- lapply(probs_syear, function(x) { + Reorder(x, c(lalo, 'time'))}) + } else { + probs_syear <- lapply(probs_syear, function(x) { + Reorder(x, c('country', 'time'))}) + } + + ## TODO: Replace for loop with something more efficient? + for (bin in 1:length(probs_syear)) { + prob_bin <- names(probs_syear[bin]) + long_name <- paste0(prob_bin, " probability category") + if (tolower(agg) == "country") { + dims <- c('Country', 'time') + } else { + dims <- c(lalo, 'time') + } + metadata <- list(metric = list(name = prob_bin, long_name = long_name)) + attr(probs_syear[[bin]], 'variables') <- metadata + names(dim(probs_syear[[bin]])) <- dims # is this necessary? + } + + # Add global attributes + attr(probs_syear[[1]], 'global_attrs') <- global_attributes + + # Select start date + if (fcst.horizon == 'decadal') { + # init_date is like "1990-11-01" + init_date <- as.POSIXct(init_date) + fcst.sdate <- init_date + lubridate::years(syears_val[i] - lubridate::year(init_date)) + fcst.sdate <- format(fcst.sdate, '%Y%m%d') + } else { + fcst.sdate <- data_cube$attrs$load_parameters$dat1$file_date[[1]][i] + } + + # Get time dimension values and metadata + times <- .get_times(store.freq, fcst.horizon, leadtimes, fcst.sdate, calendar) + time <- times$time + + # Generate name of output file + outfile <- get_filename(outdir, recipe, data_cube$attrs$Variable$varName, + fcst.sdate, agg, "probs") + + # Get grid data and metadata and export to netCDF + if (tolower(agg) == "country") { + country <- get_countries(grid) + ArrayToNc(append(country, time, probs_syear), outfile) + } else { + latitude <- data_cube$coords$lat[1:length(data_cube$coords$lat)] + longitude <- data_cube$coords$lon[1:length(data_cube$coords$lon)] + latlon <- .get_latlon(latitude, longitude) + # Compile variables into a list and export to netCDF + vars <- list(latlon$lat, latlon$lon, time) + vars <- c(vars, probs_syear) + ArrayToNc(vars, outfile) + } + } + + info(recipe$Run$logger, + paste("#####", toupper(type), + "PROBABILITIES SAVED TO NETCDF FILE #####")) +} diff --git a/modules/Saving/Saving.R b/modules/Saving/Saving.R index e872e832..3cb751a2 100644 --- a/modules/Saving/Saving.R +++ b/modules/Saving/Saving.R @@ -2,6 +2,13 @@ source("modules/Saving/R/get_dir.R") source("modules/Saving/R/get_filename.R") +source("modules/Saving/R/Utils.R") +source("modules/Saving/R/save_forecast.R") +source("modules/Saving/R/save_observations.R") +source("modules/Saving/R/save_metrics.R") +source("modules/Saving/R/save_corr.R") +source("modules/Saving/R/save_probabilities.R") +source("modules/Saving/R/save_percentiles.R") save_data <- function(recipe, data, skill_metrics = NULL, diff --git a/modules/Visualization/R/plot_ensemble_mean.R b/modules/Visualization/R/plot_ensemble_mean.R new file mode 100644 index 00000000..c104c892 --- /dev/null +++ b/modules/Visualization/R/plot_ensemble_mean.R @@ -0,0 +1,88 @@ +plot_ensemble_mean <- function(recipe, archive, fcst, outdir) { + + ## TODO: Add 'anomaly' to plot title + # Abort if frequency is daily + if (recipe$Analysis$Variables$freq == "daily_mean") { + stop("Visualization functions not yet implemented for daily data.") + } + + latitude <- fcst$coords$lat + longitude <- fcst$coords$lon + system_name <- archive$System[[recipe$Analysis$Datasets$System$name]]$name + variable <- recipe$Analysis$Variables$name + units <- attr(fcst$Variable, "variable")$units + start_date <- paste0(recipe$Analysis$Time$fcst_year, + recipe$Analysis$Time$sdate) + # Compute ensemble mean + ensemble_mean <- s2dv::MeanDims(fcst$data, 'ensemble') + # Drop extra dims, add time dim if missing: + ensemble_mean <- drop(ensemble_mean) + + if (!("time" %in% names(dim(ensemble_mean)))) { + dim(ensemble_mean) <- c("time" = 1, dim(ensemble_mean)) + } + if (!'syear' %in% names(dim(ensemble_mean))) { + ensemble_mean <- Reorder(ensemble_mean, c("time", + "longitude", + "latitude")) + } else { + ensemble_mean <- Reorder(ensemble_mean, c("syear", + "time", + "longitude", + "latitude")) + } + ## TODO: Redefine column colors, possibly depending on variable + if (variable == 'prlr') { + palette = "BrBG" + rev = F + } else { + palette = "RdBu" + rev = T + } + # Define brks, centered on in the case of anomalies + ## + if (grepl("anomaly", + fcst$attrs$Variable$metadata[[variable]]$long_name)) { + variable <- paste(variable, "anomaly") + max_value <- max(abs(ensemble_mean)) + ugly_intervals <- seq(-max_value, max_value, max_value/20) + brks <- pretty(ugly_intervals, n = 12, min.n = 8) + } else { + brks <- pretty(range(ensemble_mean, na.rm = T), n = 15, min.n = 8) + } + cols <- grDevices::hcl.colors(length(brks) - 1, palette, rev = rev) + options(bitmapType = "cairo") + + for (i_syear in start_date) { + # Define name of output file and titles + if (length(start_date) == 1) { + i_ensemble_mean <- ensemble_mean + outfile <- paste0(outdir, "forecast_ensemble_mean-", start_date, ".png") + } else { + i_ensemble_mean <- ensemble_mean[which(start_date == i_syear), , , ] + outfile <- paste0(outdir, "forecast_ensemble_mean-", i_syear, ".png") + } + toptitle <- paste("Forecast Ensemble Mean -", variable, "-", system_name, + "- Initialization:", i_syear) + months <- lubridate::month(fcst$attrs$Dates[1, 1, which(start_date == i_syear), ], + label = T, abb = F) + titles <- as.vector(months) + # Plots + PlotLayout(PlotEquiMap, c('longitude', 'latitude'), + i_ensemble_mean, longitude, latitude, + filled.continents = F, + toptitle = toptitle, + title_scale = 0.6, + titles = titles, + units = units, + cols = cols, + brks = brks, + fileout = outfile, + bar_label_digits = 4, + bar_extra_margin = rep(0.7, 4), + bar_label_scale = 1.5, + axes_label_scale = 1.3) + } + info(recipe$Run$logger, + "##### FCST ENSEMBLE MEAN PLOT SAVED TO OUTPUT DIRECTORY #####") +} diff --git a/modules/Visualization/R/plot_most_likely_terciles_map.R b/modules/Visualization/R/plot_most_likely_terciles_map.R new file mode 100644 index 00000000..fbdca980 --- /dev/null +++ b/modules/Visualization/R/plot_most_likely_terciles_map.R @@ -0,0 +1,87 @@ +plot_most_likely_terciles <- function(recipe, archive, + fcst, + probabilities, + outdir) { + + ## TODO: Add 'anomaly' to plot title + # Abort if frequency is daily + if (recipe$Analysis$Variables$freq == "daily_mean") { + stop("Visualization functions not yet implemented for daily data.") + } + + latitude <- fcst$coords$lat + longitude <- fcst$coords$lon + system_name <- archive$System[[recipe$Analysis$Datasets$System$name]]$name + variable <- recipe$Analysis$Variables$name + start_date <- paste0(recipe$Analysis$Time$fcst_year, + recipe$Analysis$Time$sdate) + + # Retrieve and rearrange probability bins for the forecast + if (is.null(probabilities$probs_fcst$prob_b33) || + is.null(probabilities$probs_fcst$prob_33_to_66) || + is.null(probabilities$probs_fcst$prob_a66)) { + stop("The forecast tercile probability bins are not present inside ", + "'probabilities', the most likely tercile map cannot be plotted.") + } + + probs_fcst <- abind(probabilities$probs_fcst$prob_b33, + probabilities$probs_fcst$prob_33_to_66, + probabilities$probs_fcst$prob_a66, + along = 0) + names(dim(probs_fcst)) <- c("bin", + names(dim(probabilities$probs_fcst$prob_b33))) + + ## TODO: Improve this section + # Drop extra dims, add time dim if missing: + probs_fcst <- drop(probs_fcst) + if (!("time" %in% names(dim(probs_fcst)))) { + dim(probs_fcst) <- c("time" = 1, dim(probs_fcst)) + } + if (!'syear' %in% names(dim(probs_fcst))) { + probs_fcst <- Reorder(probs_fcst, c("time", "bin", "longitude", "latitude")) + } else { + probs_fcst <- Reorder(probs_fcst, + c("syear", "time", "bin", "longitude", "latitude")) + } + + for (i_syear in start_date) { + # Define name of output file and titles + if (length(start_date) == 1) { + i_probs_fcst <- probs_fcst + outfile <- paste0(outdir, "forecast_most_likely_tercile-", start_date, + ".png") + } else { + i_probs_fcst <- probs_fcst[which(start_date == i_syear), , , , ] + outfile <- paste0(outdir, "forecast_most_likely_tercile-", i_syear, ".png") + } + toptitle <- paste("Most Likely Tercile -", variable, "-", system_name, "-", + "Initialization:", i_syear) + months <- lubridate::month(fcst$attrs$Dates[1, 1, which(start_date == i_syear), ], + label = T, abb = F) + ## TODO: Ensure this works for daily and sub-daily cases + titles <- as.vector(months) + + # Plots + ## NOTE: PlotLayout() and PlotMostLikelyQuantileMap() are still being worked + ## on. + suppressWarnings( + PlotLayout(PlotMostLikelyQuantileMap, c('bin', 'longitude', 'latitude'), + cat_dim = 'bin', + i_probs_fcst, longitude, latitude, + coast_width = 1.5, + title_scale = 0.6, + legend_scale = 0.8, #cex_bar_titles = 0.6, + toptitle = toptitle, + titles = titles, + fileout = outfile, + bar_label_digits = 2, + bar_scale = rep(0.7, 4), + bar_label_scale = 1.2, + axes_label_scale = 1.3, + triangle_ends = c(F, F), width = 11, height = 8) + ) + } + + info(recipe$Run$logger, + "##### MOST LIKELY TERCILE PLOT SAVED TO OUTPUT DIRECTORY #####") +} diff --git a/modules/Visualization/R/plot_skill_metrics.R b/modules/Visualization/R/plot_skill_metrics.R new file mode 100644 index 00000000..8bc8ebc4 --- /dev/null +++ b/modules/Visualization/R/plot_skill_metrics.R @@ -0,0 +1,161 @@ +plot_skill_metrics <- function(recipe, archive, data_cube, skill_metrics, + outdir, significance = F) { + # recipe: Auto-S2S recipe + # archive: Auto-S2S archive + # data_cube: s2dv_cube object with the corresponding hindcast data + # skill_metrics: list of named skill metrics arrays + # outdir: output directory + # significance: T/F, whether to display the significance dots in the plots + + ## TODO: OPTION for CERISE: Using PuOr + # Abort if frequency is daily + if (recipe$Analysis$Variables$freq == "daily_mean") { + error(recipe$Run$logger, "Visualization functions not yet implemented + for daily data.") + stop() + } + # Abort if skill_metrics is not list + if (!is.list(skill_metrics) || is.null(names(skill_metrics))) { + stop("The element 'skill_metrics' must be a list of named arrays.") + } + + latitude <- data_cube$coords$lat + longitude <- data_cube$coords$lon + system_name <- archive$System[[recipe$Analysis$Datasets$System$name]]$name + hcst_period <- paste0(recipe$Analysis$Time$hcst_start, "-", + recipe$Analysis$Time$hcst_end) + init_month <- as.numeric(substr(recipe$Analysis$Time$sdate, + start = 1, stop = 2)) + month_label <- tolower(month.name[init_month]) + month_abbreviation <- month.abb[init_month] + + # Define color palette and number of breaks according to output format + ## TODO: Make separate function + if (tolower(recipe$Analysis$Output_format) %in% c("scorecards", "cerise")) { + diverging_palette <- "purpleorange" + sequential_palette <- "Oranges" + } else { + diverging_palette <- "bluered" + sequential_palette <- "Reds" + } + + # Group different metrics by type + skill_scores <- c("rpss", "bss90", "bss10", "frpss", "crpss", "mean_bias_ss", + "enscorr", "rpss_specs", "bss90_specs", "bss10_specs", + "enscorr_specs", "rmsss") + scores <- c("rps", "frps", "crps", "frps_specs") + # Assign colorbar to each metric type + ## TODO: Triangle ends + for (name in c(skill_scores, scores, "mean_bias", "enssprerr")) { + if (name %in% names(skill_metrics)) { + # Define plot characteristics and metric name to display in plot + if (name %in% c("rpss", "bss90", "bss10", "frpss", "crpss", + "rpss_specs", "bss90_specs", "bss10_specs", + "rmsss")) { + display_name <- toupper(strsplit(name, "_")[[1]][1]) + skill <- skill_metrics[[name]] + brks <- seq(-1, 1, by = 0.2) + colorbar <- clim.colors(length(brks) + 1, diverging_palette) + cols <- colorbar[2:(length(colorbar) - 1)] + col_inf <- colorbar[1] + col_sup <- NULL + } else if (name == "mean_bias_ss") { + display_name <- "Mean Bias Skill Score" + skill <- skill_metrics[[name]] + brks <- seq(-1, 1, by = 0.2) + colorbar <- clim.colors(length(brks) + 1, diverging_palette) + cols <- colorbar[2:(length(colorbar) - 1)] + col_inf <- colorbar[1] + col_sup <- NULL + } else if (name %in% c("enscorr", "enscorr_specs")) { + display_name <- "Ensemble Mean Correlation" + skill <- skill_metrics[[name]] + brks <- seq(-1, 1, by = 0.2) + cols <- clim.colors(length(brks) - 1, diverging_palette) + col_inf <- NULL + col_sup <- NULL + } else if (name %in% scores) { + skill <- skill_metrics[[name]] + display_name <- toupper(strsplit(name, "_")[[1]][1]) + brks <- seq(0, 1, by = 0.1) + colorbar <- grDevices::hcl.colors(length(brks), sequential_palette) + cols <- colorbar[1:(length(colorbar) - 1)] + col_inf <- NULL + col_sup <- colorbar[length(colorbar)] + } else if (name == "enssprerr") { + skill <- skill_metrics[[name]] + display_name <- "Spread-to-Error Ratio" + brks <- c(0, 0.6, 0.7, 0.8, 0.9, 1, 1.2, 1.4, 1.6, 1.8, 2) + colorbar <- clim.colors(length(brks), diverging_palette) + cols <- colorbar[1:length(colorbar) - 1] + col_inf <- NULL + col_sup <- colorbar[length(colorbar)] + } else if (name == "mean_bias") { + skill <- skill_metrics[[name]] + display_name <- "Mean Bias" + max_value <- max(abs(quantile(skill, 0.02, na.rm = T)), + abs(quantile(skill, 0.98, na.rm = T))) + brks <- max_value * seq(-1, 1, by = 0.2) + colorbar <- clim.colors(length(brks) + 1, diverging_palette) + cols <- colorbar[2:(length(colorbar) - 1)] + col_inf <- colorbar[1] + col_sup <- colorbar[length(colorbar)] + } + options(bitmapType = "cairo") + # Reorder dimensions + skill <- Reorder(skill, c("time", "longitude", "latitude")) + # If the significance has been requested and the variable has it, + # retrieve it and reorder its dimensions. + significance_name <- paste0(name, "_significance") + if ((significance) && (significance_name %in% names(skill_metrics))) { + skill_significance <- skill_metrics[[significance_name]] + skill_significance <- Reorder(skill_significance, c("time", + "longitude", + "latitude")) + # Split skill significance into list of lists, along the time dimension + # This allows for plotting the significance dots correctly. + skill_significance <- ClimProjDiags::ArrayToList(skill_significance, + dim = 'time', + level = "sublist", + names = "dots") + } else { + skill_significance <- NULL + } + # Define output file name and titles + if (tolower(recipe$Analysis$Horizon) == "seasonal") { + outfile <- paste0(outdir, name, "-", month_label, ".png") + } else { + outfile <- paste0(outdir, name, ".png") + } + toptitle <- paste(display_name, "-", data_cube$attrs$Variable$varName, + "-", system_name, "-", month_abbreviation, + hcst_period) + months <- unique(lubridate::month(data_cube$attrs$Dates, + label = T, abb = F)) + titles <- as.vector(months) + # Plot + suppressWarnings( + PlotLayout(PlotEquiMap, c('longitude', 'latitude'), + asplit(skill, MARGIN=1), # Splitting array into a list + longitude, latitude, + special_args = skill_significance, + dot_symbol = 20, + toptitle = toptitle, + title_scale = 0.6, + titles = titles, + filled.continents=F, + brks = brks, + cols = cols, + col_inf = col_inf, + col_sup = col_sup, + fileout = outfile, + bar_label_digits = 3, + bar_extra_margin = rep(0.9, 4), + bar_label_scale = 1.5, + axes_label_scale = 1.3) + ) + } + } + info(recipe$Run$logger, + "##### SKILL METRIC PLOTS SAVED TO OUTPUT DIRECTORY #####") +} diff --git a/modules/Visualization/Visualization.R b/modules/Visualization/Visualization.R index 5a018b02..fa82a68d 100644 --- a/modules/Visualization/Visualization.R +++ b/modules/Visualization/Visualization.R @@ -3,6 +3,10 @@ ## TODO: Add param 'raw'? ## TODO: Decadal plot names +source("modules/Visualization/R/plot_ensemble_mean.R") +source("modules/Visualization/R/plot_most_likely_terciles_map.R") +source("modules/Visualization/R/plot_skill_metrics.R") + plot_data <- function(recipe, data, skill_metrics = NULL, diff --git a/tests/recipes/recipe-seasonal_monthly_1.yml b/tests/recipes/recipe-seasonal_monthly_1.yml index 5a2f5c48..59b4845a 100644 --- a/tests/recipes/recipe-seasonal_monthly_1.yml +++ b/tests/recipes/recipe-seasonal_monthly_1.yml @@ -31,7 +31,7 @@ Analysis: Anomalies: compute: no cross_validation: - save: + save: 'none' Calibration: method: mse_min save: 'all' diff --git a/tools/check_recipe.R b/tools/check_recipe.R index 64d1ef42..64bc9464 100644 --- a/tools/check_recipe.R +++ b/tools/check_recipe.R @@ -253,9 +253,19 @@ check_recipe <- function(recipe) { "The 'Calibration' element 'method' must be specified.") error_status <- T } + SAVING_OPTIONS_CALIB <- c("all", "none", "exp_only", "fcst_only") + if ((is.null(recipe$Analysis$Workflow$Calibration$save)) || + (!(recipe$Analysis$Workflow$Calibration$save %in% SAVING_OPTIONS_CALIB))) { + error(recipe$Run$logger, + paste0("Please specify which Calibration module outputs you want ", + "to save with the 'save' parameter. The options are: ", + paste(SAVING_OPTIONS_CALIB, collapse = ", "), ".")) + error_status <- T + } } # Anomalies if ("Anomalies" %in% names(recipe$Analysis$Workflow)) { + # Computation and cross-validation checks if (is.null(recipe$Analysis$Workflow$Anomalies$compute)) { error(recipe$Run$logger, "Parameter 'compute' must be defined under 'Anomalies'.") @@ -273,6 +283,16 @@ check_recipe <- function(recipe) { and it must be a logical value (True/False or yes/no).")) error_status <- T } + # Saving checks + SAVING_OPTIONS_ANOM <- c("all", "none", "exp_only", "fcst_only") + if ((is.null(recipe$Analysis$Workflow$Anomalies$save)) || + (!(recipe$Analysis$Workflow$Anomalies$save %in% SAVING_OPTIONS_ANOM))) { + error(recipe$Run$logger, + paste0("Please specify which Anomalies module outputs you want ", + "to save with the 'save' parameter. The options are: ", + paste(SAVING_OPTIONS_ANOM, collapse = ", "), ".")) + error_status <- T + } } # Skill if (("Skill" %in% names(recipe$Analysis$Workflow)) && @@ -280,6 +300,16 @@ check_recipe <- function(recipe) { error(recipe$Run$logger, "Parameter 'metric' must be defined under 'Skill'.") error_status <- T + # Saving checks + SAVING_OPTIONS_SKILL <- c("all", "none") + if ((is.null(recipe$Analysis$Workflow$Skill$save)) || + (!(recipe$Analysis$Workflow$Skill$save %in% SAVING_OPTIONS_SKILL))) { + error(recipe$Run$logger, + paste0("Please specify whether you want to save the Skill metrics ", + "with the 'save' parameter. The options are: ", + paste(SAVING_OPTIONS_SKILL, collapse = ", "), ".")) + error_status <- T + } } # Probabilities if ("Probabilities" %in% names(recipe$Analysis$Workflow)) { @@ -293,6 +323,37 @@ check_recipe <- function(recipe) { "See documentation in the wiki for examples.")) error_status <- T } + # Saving checks + SAVING_OPTIONS_PROBS <- c("all", "none", "bins_only", "percentiles_only") + if ((is.null(recipe$Analysis$Workflow$Probabilities$save)) || + (!(recipe$Analysis$Workflow$Probabilities$save %in% SAVING_OPTIONS_PROBS))) { + error(recipe$Run$logger, + paste0("Please specify whether you want to save the percentiles ", + "and probability bins with the 'save' parameter. The ", + "options are: ", + paste(SAVING_OPTIONS_PROBS, collapse = ", "), ".")) + error_status <- T + } + } + # Visualization + if ("Visualization" %in% names(recipe$Analysis$Workflow)) { + PLOT_OPTIONS <- c("skill_metrics", "forecast_ensemble_mean", + "most_likely_terciles") + ## Separate plots parameter and check if all elements are in PLOT_OPTIONS + if (is.null(recipe$Analysis$Workflow$Visualization$plots)) { + error(recipe$Run$logger, + "The 'plots' element must be defined under 'Visualization'.") + error_status <- T + } else { + plots <- strsplit(recipe$Analysis$Workflow$Visualization$plots, + ", | |,")[[1]] + if (!all(plots %in% PLOT_OPTIONS)) { + error(recipe$Run$logger, + paste0("The options available for the plots are: ", + paste(PLOT_OPTIONS, collapse = ", "), ".")) + error_status <- T + } + } } # --------------------------------------------------------------------- @@ -424,7 +485,7 @@ check_recipe <- function(recipe) { if (error_status) { error(recipe$Run$logger, "RECIPE CHECK FAILED.") stop("The recipe contains some errors. Find the full list in the", - "startup.log file.") + " startup.log file.") } else { info(recipe$Run$logger, "##### RECIPE CHECK SUCCESSFULL #####") # return(append(nverifications, fcst.sdate)) -- GitLab From a6870d72e87484a270021c41f93ee05effc67b27 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Wed, 19 Apr 2023 10:16:33 +0200 Subject: [PATCH 137/388] Remove 'archive' param from plotting functions, eliminate duplicated funs --- modules/Saving/Saving.R | 757 ------------------ modules/Visualization/R/plot_ensemble_mean.R | 3 +- .../R/plot_most_likely_terciles_map.R | 3 +- modules/Visualization/R/plot_skill_metrics.R | 3 +- modules/Visualization/Visualization.R | 356 +------- tests/recipes/recipe-seasonal_monthly_1.yml | 8 +- 6 files changed, 13 insertions(+), 1117 deletions(-) diff --git a/modules/Saving/Saving.R b/modules/Saving/Saving.R index 3cb751a2..75c7908c 100644 --- a/modules/Saving/Saving.R +++ b/modules/Saving/Saving.R @@ -162,760 +162,3 @@ get_latlon <- function(latitude, longitude) { return(list(lat=latitude, lon=longitude)) } - -save_forecast <- function(recipe, - data_cube, - type = "hcst", - agg = "global", - outdir = NULL) { - # Loops over the years in the s2dv_cube containing a hindcast or forecast - # and exports each year to a netCDF file. - # data_cube: s2dv_cube containing the data and metadata - # recipe: the auto-s2s recipe - # outdir: directory where the files should be saved - # agg: aggregation, "global" or "country" - - lalo <- c('longitude', 'latitude') - archive <- get_archive(recipe) - dictionary <- read_yaml("conf/variable-dictionary.yml") - variable <- data_cube$attrs$Variable$varName - var.longname <- data_cube$attrs$Variable$metadata[[variable]]$long_name - global_attributes <- get_global_attributes(recipe, archive) - fcst.horizon <- tolower(recipe$Analysis$Horizon) - store.freq <- recipe$Analysis$Variables$freq - calendar <- archive$System[[global_attributes$system]]$calendar - - if (is.null(outdir)) { - outdir <- get_dir(recipe) - } - - # Generate vector containing leadtimes - dates <- as.PCICt(ClimProjDiags::Subset(data_cube$attrs$Dates, 'syear', 1), - cal = calendar) - if (fcst.horizon == 'decadal') { - ## Method 1: Use the first date as init_date. But it may be better to use - ## the real initialized date (ask users) - # init_date <- as.Date(data_cube$Dates$start[1], format = '%Y%m%d') - ## Method 2: use initial month - init_month <- archive$System[[recipe$Analysis$Datasets$System$name]]$initial_month - if (type == 'hcst') { - init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, '-', - sprintf('%02d', init_month), '-01'), - cal = calendar) - } else if (type == 'fcst') { - init_date <- as.PCICt(paste0(recipe$Analysis$Time$fcst_year[1], '-', - sprintf('%02d', init_month), '-01'), - cal = calendar) - } - } else { - if (type == 'hcst') { - init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, - recipe$Analysis$Time$sdate), - format = '%Y%m%d', cal = calendar) - } else if (type == 'fcst') { - init_date <- as.PCICt(paste0(recipe$Analysis$Time$fcst_year, - recipe$Analysis$Time$sdate), - format = '%Y%m%d', cal = calendar) - } - } - # Get time difference in hours - leadtimes <- as.numeric(dates - init_date)/3600 - - syears <- seq(1:dim(data_cube$data)['syear'][[1]]) - # expect dim = [sday = 1, sweek = 1, syear, time] - syears_val <- lubridate::year(data_cube$attrs$Dates[1, 1, , 1]) - for (i in syears) { - # Select year from array and rearrange dimensions - fcst <- ClimProjDiags::Subset(data_cube$data, 'syear', i, drop = T) - - if (!("time" %in% names(dim(fcst)))) { - dim(fcst) <- c("time" = 1, dim(fcst)) - } - if (tolower(agg) == "global") { - fcst <- list(Reorder(fcst, c(lalo, 'ensemble', 'time'))) - } else { - fcst <- list(Reorder(fcst, c('country', 'ensemble', 'time'))) - } - - # Add metadata - var.sdname <- dictionary$vars[[variable]]$standard_name - if (tolower(agg) == "country") { - dims <- c('Country', 'ensemble', 'time') - var.expname <- paste0(variable, '_country') - var.longname <- paste0("Country-Aggregated ", var.longname) - var.units <- attr(data_cube$Variable, 'variable')$units - } else { - dims <- c(lalo, 'ensemble', 'time') - var.expname <- variable - var.sdname <- var.sdname - var.units <- data_cube$attrs$Variable$metadata[[variable]]$units - } - - metadata <- list(fcst = list(name = var.expname, - standard_name = var.sdname, - long_name = var.longname, - units = var.units)) - attr(fcst[[1]], 'variables') <- metadata - names(dim(fcst[[1]])) <- dims - # Add global attributes - attr(fcst[[1]], 'global_attrs') <- global_attributes - - # Select start date - if (fcst.horizon == 'decadal') { - ## NOTE: Not good to use data_cube$load_parameters$dat1 because decadal - ## data has been reshaped - # fcst.sdate <- format(as.Date(data_cube$Dates$start[i]), '%Y%m%d') - - # init_date is like "1990-11-01" - init_date <- as.POSIXct(init_date) - fcst.sdate <- init_date + lubridate::years(syears_val[i] - lubridate::year(init_date)) - fcst.sdate <- format(fcst.sdate, '%Y%m%d') - - } else { - fcst.sdate <- data_cube$attrs$load_parameters$dat1$file_date[[1]][i] - } - - # Get time dimension values and metadata - times <- get_times(store.freq, fcst.horizon, leadtimes, fcst.sdate, calendar) - time <- times$time - - # Generate name of output file - outfile <- get_filename(outdir, recipe, data_cube$attrs$Variable$varName, - fcst.sdate, agg, "exp") - - # Get grid data and metadata and export to netCDF - if (tolower(agg) == "country") { - country <- get_countries(grid) - ArrayToNc(append(country, time, fcst), outfile) - } else { - latitude <- data_cube$coords$lat[1:length(data_cube$coords$lat)] - longitude <- data_cube$coords$lon[1:length(data_cube$coords$lon)] - latlon <- get_latlon(latitude, longitude) - # Compile variables into a list and export to netCDF - vars <- list(latlon$lat, latlon$lon, time) - vars <- c(vars, fcst) - ArrayToNc(vars, outfile) - } - } - info(recipe$Run$logger, paste("#####", toupper(type), - "SAVED TO NETCDF FILE #####")) -} - - -save_observations <- function(recipe, - data_cube, - agg = "global", - outdir = NULL) { - # Loops over the years in the s2dv_cube containing the observations and - # exports each year to a netCDF file. - # data_cube: s2dv_cube containing the data and metadata - # recipe: the auto-s2s recipe - # outdir: directory where the files should be saved - # agg: aggregation, "global" or "country" - - lalo <- c('longitude', 'latitude') - archive <- get_archive(recipe) - dictionary <- read_yaml("conf/variable-dictionary.yml") - variable <- data_cube$attrs$Variable$varName - var.longname <- data_cube$attrs$Variable$metadata[[variable]]$long_name - global_attributes <- get_global_attributes(recipe, archive) - fcst.horizon <- tolower(recipe$Analysis$Horizon) - store.freq <- recipe$Analysis$Variables$freq - calendar <- archive$Reference[[global_attributes$reference]]$calendar - - if (is.null(outdir)) { - outdir <- get_dir(recipe) - } - - # Generate vector containing leadtimes - ## TODO: Move to a separate function? - dates <- as.PCICt(ClimProjDiags::Subset(data_cube$attrs$Dates, 'syear', 1), - cal = calendar) - if (fcst.horizon == 'decadal') { - ## Method 1: Use the first date as init_date. But it may be better to use - ## the real initialized date (ask users) -# init_date <- as.Date(data_cube$Dates$start[1], format = '%Y%m%d') - ## Method 2: use initial month - init_month <- archive$System[[recipe$Analysis$Datasets$System$name]]$initial_month - init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, '-', - sprintf('%02d', init_month), '-01'), - cal = calendar) - - } else { - init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, - recipe$Analysis$Time$sdate), - format = '%Y%m%d', cal = calendar) - } - # Get time difference in hours - leadtimes <- as.numeric(dates - init_date)/3600 - - syears <- seq(1:dim(data_cube$data)['syear'][[1]]) - ## expect dim = [sday = 1, sweek = 1, syear, time] - syears_val <- lubridate::year(data_cube$attrs$Dates[1, 1, , 1]) - for (i in syears) { - # Select year from array and rearrange dimensions - fcst <- ClimProjDiags::Subset(data_cube$data, 'syear', i, drop = T) - - if (!("time" %in% names(dim(fcst)))) { - dim(fcst) <- c("time" = 1, dim(fcst)) - } - if (tolower(agg) == "global") { - fcst <- list(Reorder(fcst, c(lalo, 'time'))) - } else { - fcst <- list(Reorder(fcst, c('country', 'time'))) - } - - # Add metadata - var.sdname <- dictionary$vars[[variable]]$standard_name - if (tolower(agg) == "country") { - dims <- c('Country', 'time') - var.expname <- paste0(variable, '_country') - var.longname <- paste0("Country-Aggregated ", var.longname) - var.units <- data_cube$attrs$Variable$metadata[[variable]]$units - } else { - dims <- c(lalo, 'time') - var.expname <- variable - var.units <- data_cube$attrs$Variable$metadata[[variable]]$units - } - - metadata <- list(fcst = list(name = var.expname, - standard_name = var.sdname, - long_name = var.longname, - units = var.units)) - attr(fcst[[1]], 'variables') <- metadata - names(dim(fcst[[1]])) <- dims - # Add global attributes - attr(fcst[[1]], 'global_attrs') <- global_attributes - - # Select start date. The date is computed for each year, and adapted for - # consistency with the hcst/fcst dates, so that both sets of files have - # the same name pattern. - ## Because observations are loaded differently in the daily vs. monthly - ## cases, different approaches are necessary. - if (fcst.horizon == 'decadal') { - # init_date is like "1990-11-01" - init_date <- as.POSIXct(init_date) - fcst.sdate <- init_date + lubridate::years(syears_val[i] - lubridate::year(init_date)) - } else { - - if (store.freq == "monthly_mean") { - fcst.sdate <- data_cube$attrs$load_parameters$dat1$file_date[[1]][i] - fcst.sdate <- as.Date(paste0(fcst.sdate, "01"), '%Y%m%d') - } else { - fcst.sdate <- as.Date(data_cube$attrs$Dates[i]) - } - } - - # Ensure the year is correct if the first leadtime goes to the next year - init_date <- as.POSIXct(init_date) - if (lubridate::month(fcst.sdate) < lubridate::month(init_date)) { - lubridate::year(fcst.sdate) <- lubridate::year(fcst.sdate) + 1 - } - # Ensure that the initialization month is consistent with the hindcast - lubridate::month(fcst.sdate) <- lubridate::month(init_date) - fcst.sdate <- format(fcst.sdate, format = '%Y%m%d') - - # Get time dimension values and metadata - times <- get_times(store.freq, fcst.horizon, leadtimes, fcst.sdate, calendar) - time <- times$time - - # Generate name of output file - outfile <- get_filename(outdir, recipe, data_cube$attrs$Variable$varName, - fcst.sdate, agg, "obs") - - # Get grid data and metadata and export to netCDF - if (tolower(agg) == "country") { - country <- get_countries(grid) - ArrayToNc(append(country, time, fcst), outfile) - } else { - latitude <- data_cube$coords$lat[1:length(data_cube$coords$lat)] - longitude <- data_cube$coords$lon[1:length(data_cube$coords$lon)] - latlon <- get_latlon(latitude, longitude) - # Compile variables into a list and export to netCDF - vars <- list(latlon$lat, latlon$lon, time) - vars <- c(vars, fcst) - ArrayToNc(vars, outfile) - } - } - info(recipe$Run$logger, "##### OBS SAVED TO NETCDF FILE #####") -} - -## TODO: Place inside a function somewhere -# if (tolower(agg) == "country") { -# load(mask.path) -# grid <- europe.countries.iso -# } else { -# grid <- list(lon=attr(var.obs, 'Variables')$dat1$longitude, -# lat=attr(var.obs, 'Variables')$dat1$latitude) -# } - -save_metrics <- function(recipe, - skill, - data_cube, - agg = "global", - outdir = NULL) { - # This function adds metadata to the skill metrics in 'skill' - # and exports them to a netCDF file inside 'outdir'. - - # Define grid dimensions and names - lalo <- c('longitude', 'latitude') - archive <- get_archive(recipe) - dictionary <- read_yaml("conf/variable-dictionary.yml") - - - # Remove singleton dimensions and rearrange lon, lat and time dims - if (tolower(agg) == "global") { - skill <- lapply(skill, function(x) { - Reorder(x, c(lalo, 'time'))}) - } - # Add global and variable attributes - global_attributes <- get_global_attributes(recipe, archive) - ## TODO: Sort out the logic once default behavior is decided - if ((!is.null(recipe$Analysis$Workflow$Anomalies$compute)) && - (recipe$Analysis$Workflow$Anomalies$compute)) { - global_attributes <- c(list(from_anomalies = "Yes"), - global_attributes) - } else { - global_attributes <- c(list(from_anomalies = "No"), - global_attributes) - } - attr(skill[[1]], 'global_attrs') <- global_attributes - - for (i in 1:length(skill)) { - metric <- names(skill[i]) - long_name <- dictionary$metrics[[metric]]$long_name - missing_val <- -9.e+33 - skill[[i]][is.na(skill[[i]])] <- missing_val - if (tolower(agg) == "country") { - sdname <- paste0(metric, " region-aggregated metric") - dims <- c('Country', 'time') - } else { - sdname <- paste0(metric) #, " grid point metric") - dims <- c(lalo, 'time') - } - metadata <- list(metric = list(name = metric, - standard_name = sdname, - long_name = long_name, - missing_value = missing_val)) - attr(skill[[i]], 'variables') <- metadata - names(dim(skill[[i]])) <- dims - } - - # Time indices and metadata - fcst.horizon <- tolower(recipe$Analysis$Horizon) - store.freq <- recipe$Analysis$Variables$freq - calendar <- archive$System[[global_attributes$system]]$calendar - - # Generate vector containing leadtimes - dates <- as.PCICt(ClimProjDiags::Subset(data_cube$attrs$Dates, 'syear', 1), - cal = calendar) - - if (fcst.horizon == 'decadal') { - init_month <- archive$System[[recipe$Analysis$Datasets$System$name]]$initial_month - init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, '-', - sprintf('%02d', init_month), '-01'), - cal = calendar) - } else { - init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, - recipe$Analysis$Time$sdate), - format = '%Y%m%d', cal = calendar) - } - - # Get time difference in hours - leadtimes <- as.numeric(dates - init_date)/3600 - - # Select start date - # If a fcst is provided, use that as the ref. year. Otherwise use 1970. - if (fcst.horizon == 'decadal') { - if (!is.null(recipe$Analysis$Time$fcst_year)) { - #PROBLEM: May be more than one fcst_year - fcst.sdate <- paste0(recipe$Analysis$Time$fcst_year[1], - sprintf('%02d', init_month), '01') - } else { - fcst.sdate <- paste0("1970", sprintf('%02d', init_month), '01') - } - } else { - if (!is.null(recipe$Analysis$Time$fcst_year)) { - fcst.sdate <- paste0(recipe$Analysis$Time$fcst_year, - recipe$Analysis$Time$sdate) - } else { - fcst.sdate <- paste0("1970", recipe$Analysis$Time$sdate) - } - } - - times <- get_times(store.freq, fcst.horizon, leadtimes, fcst.sdate, calendar) - time <- times$time - - # Generate name of output file - if (is.null(outdir)) { - outdir <- get_dir(recipe) - } - outfile <- get_filename(outdir, recipe, data_cube$attrs$Variable$varName, - fcst.sdate, agg, "skill") - - # Get grid data and metadata and export to netCDF - if (tolower(agg) == "country") { - country <- get_countries(grid) - ArrayToNc(append(country, time, skill), outfile) - } else { - latitude <- data_cube$coords$lat[1:length(data_cube$coords$lat)] - longitude <- data_cube$coords$lon[1:length(data_cube$coords$lon)] - latlon <- get_latlon(latitude, longitude) - # Compile variables into a list and export to netCDF - vars <- list(latlon$lat, latlon$lon, time) - vars <- c(vars, skill) - ArrayToNc(vars, outfile) - } - info(recipe$Run$logger, "##### SKILL METRICS SAVED TO NETCDF FILE #####") -} - -save_corr <- function(recipe, - skill, - data_cube, - agg = "global", - outdir = NULL) { - # This function adds metadata to the ensemble correlation in 'skill' - # and exports it to a netCDF file inside 'outdir'. - - archive <- get_archive(recipe) - dictionary <- read_yaml("conf/variable-dictionary.yml") - # Define grid dimensions and names - lalo <- c('longitude', 'latitude') - # Remove singleton dimensions and rearrange lon, lat and time dims - if (tolower(agg) == "global") { - skill <- lapply(skill, function(x) { - Reorder(x, c(lalo, 'ensemble', 'time'))}) - } - # Add global and variable attributes - global_attributes <- get_global_attributes(recipe, archive) - ## TODO: Sort out the logic once default behavior is decided - if ((!is.null(recipe$Analysis$Workflow$Anomalies$compute)) && - (recipe$Analysis$Workflow$Anomalies$compute)) { - global_attributes <- c(global_attributes, - list(from_anomalies = "Yes")) - } else { - global_attributes <- c(global_attributes, - list(from_anomalies = "No")) - } - attr(skill[[1]], 'global_attrs') <- global_attributes - - for (i in 1:length(skill)) { - metric <- names(skill[i]) - long_name <- dictionary$metrics[[metric]]$long_name - missing_val <- -9.e+33 - skill[[i]][is.na(skill[[i]])] <- missing_val - if (tolower(agg) == "country") { - sdname <- paste0(metric, " region-aggregated metric") - dims <- c('Country', 'ensemble', 'time') - } else { - sdname <- paste0(metric) #, " grid point metric") # formerly names(metric) - dims <- c(lalo, 'ensemble', 'time') - } - metadata <- list(metric = list(name = metric, - standard_name = sdname, - long_name = long_name, - missing_value = missing_val)) - attr(skill[[i]], 'variables') <- metadata - names(dim(skill[[i]])) <- dims - } - - # Time indices and metadata - fcst.horizon <- tolower(recipe$Analysis$Horizon) - store.freq <- recipe$Analysis$Variables$freq - calendar <- archive$System[[global_attributes$system]]$calendar - - # Generate vector containing leadtimes - dates <- as.PCICt(ClimProjDiags::Subset(data_cube$attrs$Dates, 'syear', 1), - cal = calendar) - if (fcst.horizon == 'decadal') { - init_month <- archive$System[[recipe$Analysis$Datasets$System$name]]$initial_month - init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, '-', - sprintf('%02d', init_month), '-01'), - cal = calendar) - } else { - init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, - recipe$Analysis$Time$sdate), - format = '%Y%m%d', cal = calendar) - } - - # Get time difference in hours - leadtimes <- as.numeric(dates - init_date)/3600 - - # Select start date - # If a fcst is provided, use that as the ref. year. Otherwise use 1970. - if (fcst.horizon == 'decadal') { - if (!is.null(recipe$Analysis$Time$fcst_year)) { - #PROBLEM: May be more than one fcst_year - fcst.sdate <- paste0(recipe$Analysis$Time$fcst_year[1], - sprintf('%02d', init_month), '01') - } else { - fcst.sdate <- paste0("1970", sprintf('%02d', init_month), '01') - } - } else { - if (!is.null(recipe$Analysis$Time$fcst_year)) { - fcst.sdate <- paste0(recipe$Analysis$Time$fcst_year, - recipe$Analysis$Time$sdate) - } else { - fcst.sdate <- paste0("1970", recipe$Analysis$Time$sdate) - } - } - - times <- get_times(store.freq, fcst.horizon, leadtimes, fcst.sdate, calendar) - time <- times$time - - # Generate name of output file - if (is.null(outdir)) { - outdir <- get_dir(recipe) - } - outfile <- get_filename(outdir, recipe, data_cube$attrs$Variable$varName, - fcst.sdate, agg, "corr") - - # Get grid data and metadata and export to netCDF - if (tolower(agg) == "country") { - country <- get_countries(grid) - ArrayToNc(append(country, time, skill), outfile) - } else { - latitude <- data_cube$coords$lat[1:length(data_cube$coords$lat)] - longitude <- data_cube$coords$lon[1:length(data_cube$coords$lon)] - latlon <- get_latlon(latitude, longitude) - # Compile variables into a list and export to netCDF - vars <- list(latlon$lat, latlon$lon, time) - vars <- c(vars, skill) - ArrayToNc(vars, outfile) - } - info(recipe$Run$logger, - "##### ENSEMBLE CORRELATION SAVED TO NETCDF FILE #####") -} - -save_percentiles <- function(recipe, - percentiles, - data_cube, - agg = "global", - outdir = NULL) { - # This function adds metadata to the percentiles - # and exports them to a netCDF file inside 'outdir'. - archive <- get_archive(recipe) - - # Define grid dimensions and names - lalo <- c('longitude', 'latitude') - # Remove singleton dimensions and rearrange lon, lat and time dims - if (tolower(agg) == "global") { - percentiles <- lapply(percentiles, function(x) { - Reorder(x, c(lalo, 'time'))}) - } - - # Add global and variable attributes - global_attributes <- get_global_attributes(recipe, archive) - ## TODO: Sort out the logic once default behavior is decided - if ((!is.null(recipe$Analysis$Workflow$Anomalies$compute)) && - (recipe$Analysis$Workflow$Anomalies$compute)) { - global_attributes <- c(list(from_anomalies = "Yes"), - global_attributes) - } else { - global_attributes <- c(list(from_anomalies = "No"), - global_attributes) - } - attr(percentiles[[1]], 'global_attrs') <- global_attributes - - for (i in 1:length(percentiles)) { - ## TODO: replace with proper standard names - percentile <- names(percentiles[i]) - long_name <- paste0(gsub("^.*_", "", percentile), "th percentile") - if (tolower(agg) == "country") { - dims <- c('Country', 'time') - } else { - dims <- c(lalo, 'time') - } - metadata <- list(metric = list(name = percentile, long_name = long_name)) - attr(percentiles[[i]], 'variables') <- metadata - names(dim(percentiles[[i]])) <- dims - } - - # Time indices and metadata - fcst.horizon <- tolower(recipe$Analysis$Horizon) - store.freq <- recipe$Analysis$Variables$freq - calendar <- archive$System[[global_attributes$system]]$calendar - # Generate vector containing leadtimes - dates <- as.PCICt(ClimProjDiags::Subset(data_cube$attrs$Dates, 'syear', 1), - cal = calendar) - if (fcst.horizon == 'decadal') { - init_month <- archive$System[[recipe$Analysis$Datasets$System$name]]$initial_month - init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, '-', - sprintf('%02d', init_month), '-01'), - cal = calendar) - } else { - init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, - recipe$Analysis$Time$sdate), - format = '%Y%m%d', cal = calendar) - } - - # Get time difference in hours - leadtimes <- as.numeric(dates - init_date)/3600 - - # Select start date - # If a fcst is provided, use that as the ref. year. Otherwise use 1970. - if (fcst.horizon == 'decadal') { - if (!is.null(recipe$Analysis$Time$fcst_year)) { - #PROBLEM: May be more than one fcst_year - fcst.sdate <- paste0(recipe$Analysis$Time$fcst_year[1], - sprintf('%02d', init_month), '01') - } else { - fcst.sdate <- paste0("1970", sprintf('%02d', init_month), '01') - } - } else { - if (!is.null(recipe$Analysis$Time$fcst_year)) { - fcst.sdate <- paste0(recipe$Analysis$Time$fcst_year, - recipe$Analysis$Time$sdate) - } else { - fcst.sdate <- paste0("1970", recipe$Analysis$Time$sdate) - } - } - times <- get_times(store.freq, fcst.horizon, leadtimes, fcst.sdate, calendar) - time <- times$time - - # Generate name of output file - if (is.null(outdir)) { - outdir <- get_dir(recipe) - } - outfile <- get_filename(outdir, recipe, data_cube$attrs$Variable$varName, - fcst.sdate, agg, "percentiles") - # Get grid data and metadata and export to netCDF - if (tolower(agg) == "country") { - country <- get_countries(grid) - ArrayToNc(append(country, time, percentiles), outfile) - } else { - latitude <- data_cube$coords$lat[1:length(data_cube$coords$lat)] - longitude <- data_cube$coords$lon[1:length(data_cube$coords$lon)] - latlon <- get_latlon(latitude, longitude) - # Compile variables into a list and export to netCDF - vars <- list(latlon$lat, latlon$lon, time) - vars <- c(vars, percentiles) - ArrayToNc(vars, outfile) - } - info(recipe$Run$logger, "##### PERCENTILES SAVED TO NETCDF FILE #####") -} - -save_probabilities <- function(recipe, - probs, - data_cube, - agg = "global", - type = "hcst", - outdir = NULL) { - # Loops over the years in the s2dv_cube containing a hindcast or forecast - # and exports the corresponding category probabilities to a netCDF file. - # probs: array containing the probability data - # recipe: the auto-s2s recipe - # data_cube: s2dv_cube containing the data and metadata - # outdir: directory where the files should be saved - # type: 'exp' (hcst and fcst) or 'obs' - # agg: aggregation, "global" or "country" - # type: 'hcst' or 'fcst' - - lalo <- c('longitude', 'latitude') - archive <- get_archive(recipe) - variable <- data_cube$attrs$Variable$varName - var.longname <- data_cube$attrs$Variable$metadata[[variable]]$long_name - global_attributes <- get_global_attributes(recipe, archive) - if (is.null(outdir)) { - outdir <- get_dir(recipe) - } - # Add anomaly computation to global attributes - ## TODO: Sort out the logic once default behavior is decided - if ((!is.null(recipe$Analysis$Workflow$Anomalies$compute)) && - (recipe$Analysis$Workflow$Anomalies$compute)) { - global_attributes <- c(list(from_anomalies = "Yes"), - global_attributes) - } else { - global_attributes <- c(list(from_anomalies = "No"), - global_attributes) - } - fcst.horizon <- tolower(recipe$Analysis$Horizon) - store.freq <- recipe$Analysis$Variables$freq - calendar <- archive$System[[global_attributes$system]]$calendar - - # Generate vector containing leadtimes - ## TODO: Move to a separate function? - dates <- as.PCICt(ClimProjDiags::Subset(data_cube$attrs$Dates, 'syear', 1), - cal = calendar) - if (fcst.horizon == 'decadal') { - init_month <- archive$System[[recipe$Analysis$Datasets$System$name]]$initial_month - init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, '-', - sprintf('%02d', init_month), '-01'), - cal = calendar) - } else { - init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, - recipe$Analysis$Time$sdate), - format = '%Y%m%d', cal = calendar) - } - - # Get time difference in hours - leadtimes <- as.numeric(dates - init_date)/3600 - - syears <- seq(1:dim(data_cube$data)['syear'][[1]]) - ## expect dim = [sday = 1, sweek = 1, syear, time] - syears_val <- lubridate::year(data_cube$attrs$Dates[1, 1, , 1]) - for (i in syears) { - # Select year from array and rearrange dimensions - probs_syear <- lapply(probs, ClimProjDiags::Subset, 'syear', i, drop = 'selected') - if (tolower(agg) == "global") { - probs_syear <- lapply(probs_syear, function(x) { - Reorder(x, c(lalo, 'time'))}) - } else { - probs_syear <- lapply(probs_syear, function(x) { - Reorder(x, c('country', 'time'))}) - } - - ## TODO: Replace for loop with something more efficient? - for (bin in 1:length(probs_syear)) { - prob_bin <- names(probs_syear[bin]) - long_name <- paste0(prob_bin, " probability category") - if (tolower(agg) == "country") { - dims <- c('Country', 'time') - } else { - dims <- c(lalo, 'time') - } - metadata <- list(metric = list(name = prob_bin, long_name = long_name)) - attr(probs_syear[[bin]], 'variables') <- metadata - names(dim(probs_syear[[bin]])) <- dims # is this necessary? - } - - # Add global attributes - attr(probs_syear[[1]], 'global_attrs') <- global_attributes - - # Select start date - if (fcst.horizon == 'decadal') { - # init_date is like "1990-11-01" - init_date <- as.POSIXct(init_date) - fcst.sdate <- init_date + lubridate::years(syears_val[i] - lubridate::year(init_date)) - fcst.sdate <- format(fcst.sdate, '%Y%m%d') - } else { - fcst.sdate <- data_cube$attrs$load_parameters$dat1$file_date[[1]][i] - } - - # Get time dimension values and metadata - times <- get_times(store.freq, fcst.horizon, leadtimes, fcst.sdate, calendar) - time <- times$time - - # Generate name of output file - outfile <- get_filename(outdir, recipe, data_cube$attrs$Variable$varName, - fcst.sdate, agg, "probs") - - # Get grid data and metadata and export to netCDF - if (tolower(agg) == "country") { - country <- get_countries(grid) - ArrayToNc(append(country, time, probs_syear), outfile) - } else { - latitude <- data_cube$coords$lat[1:length(data_cube$coords$lat)] - longitude <- data_cube$coords$lon[1:length(data_cube$coords$lon)] - latlon <- get_latlon(latitude, longitude) - # Compile variables into a list and export to netCDF - vars <- list(latlon$lat, latlon$lon, time) - vars <- c(vars, probs_syear) - ArrayToNc(vars, outfile) - } - } - - info(recipe$Run$logger, - paste("#####", toupper(type), - "PROBABILITIES SAVED TO NETCDF FILE #####")) -} diff --git a/modules/Visualization/R/plot_ensemble_mean.R b/modules/Visualization/R/plot_ensemble_mean.R index c104c892..e0fa8b84 100644 --- a/modules/Visualization/R/plot_ensemble_mean.R +++ b/modules/Visualization/R/plot_ensemble_mean.R @@ -1,4 +1,4 @@ -plot_ensemble_mean <- function(recipe, archive, fcst, outdir) { +plot_ensemble_mean <- function(recipe, fcst, outdir) { ## TODO: Add 'anomaly' to plot title # Abort if frequency is daily @@ -8,6 +8,7 @@ plot_ensemble_mean <- function(recipe, archive, fcst, outdir) { latitude <- fcst$coords$lat longitude <- fcst$coords$lon + archive <- get_archive(recipe) system_name <- archive$System[[recipe$Analysis$Datasets$System$name]]$name variable <- recipe$Analysis$Variables$name units <- attr(fcst$Variable, "variable")$units diff --git a/modules/Visualization/R/plot_most_likely_terciles_map.R b/modules/Visualization/R/plot_most_likely_terciles_map.R index fbdca980..9ab0199e 100644 --- a/modules/Visualization/R/plot_most_likely_terciles_map.R +++ b/modules/Visualization/R/plot_most_likely_terciles_map.R @@ -1,4 +1,4 @@ -plot_most_likely_terciles <- function(recipe, archive, +plot_most_likely_terciles <- function(recipe, fcst, probabilities, outdir) { @@ -11,6 +11,7 @@ plot_most_likely_terciles <- function(recipe, archive, latitude <- fcst$coords$lat longitude <- fcst$coords$lon + archive <- get_archive(recipe) system_name <- archive$System[[recipe$Analysis$Datasets$System$name]]$name variable <- recipe$Analysis$Variables$name start_date <- paste0(recipe$Analysis$Time$fcst_year, diff --git a/modules/Visualization/R/plot_skill_metrics.R b/modules/Visualization/R/plot_skill_metrics.R index 8bc8ebc4..f8be19d9 100644 --- a/modules/Visualization/R/plot_skill_metrics.R +++ b/modules/Visualization/R/plot_skill_metrics.R @@ -1,4 +1,4 @@ -plot_skill_metrics <- function(recipe, archive, data_cube, skill_metrics, +plot_skill_metrics <- function(recipe, data_cube, skill_metrics, outdir, significance = F) { # recipe: Auto-S2S recipe # archive: Auto-S2S archive @@ -21,6 +21,7 @@ plot_skill_metrics <- function(recipe, archive, data_cube, skill_metrics, latitude <- data_cube$coords$lat longitude <- data_cube$coords$lon + archive <- get_archive(recipe) system_name <- archive$System[[recipe$Analysis$Datasets$System$name]]$name hcst_period <- paste0(recipe$Analysis$Time$hcst_start, "-", recipe$Analysis$Time$hcst_end) diff --git a/modules/Visualization/Visualization.R b/modules/Visualization/Visualization.R index fa82a68d..1ae48109 100644 --- a/modules/Visualization/Visualization.R +++ b/modules/Visualization/Visualization.R @@ -11,11 +11,9 @@ plot_data <- function(recipe, data, skill_metrics = NULL, probabilities = NULL, - archive = NULL, significance = F) { # Try to produce and save several basic plots. # recipe: the auto-s2s recipe as read by read_yaml() - # archive: the auto-s2s archive as read by read_yaml() # data: list containing the hcst, obs and (optional) fcst s2dv_cube objects # calibrated_data: list containing the calibrated hcst and (optional) fcst # s2dv_cube objects @@ -34,20 +32,10 @@ plot_data <- function(recipe, stop() } - if (is.null(archive)) { - if (tolower(recipe$Analysis$Horizon) == "seasonal") { - archive <- - read_yaml(paste0("conf/archive.yml"))[[recipe$Run$filesystem]] - } else if (tolower(recipe$Analysis$Horizon) == "decadal") { - archive <- - read_yaml(paste0("conf/archive_decadal.yml"))[[recipe$Run$filesystem]] - } - } - # Plot skill metrics if ("skill_metrics" %in% plots) { if (!is.null(skill_metrics)) { - plot_skill_metrics(recipe, archive, data$hcst, skill_metrics, outdir, + plot_skill_metrics(recipe, data$hcst, skill_metrics, outdir, significance) } else { error(recipe$Run$logger, @@ -59,7 +47,7 @@ plot_data <- function(recipe, # Plot forecast ensemble mean if ("forecast_ensemble_mean" %in% plots) { if (!is.null(data$fcst)) { - plot_ensemble_mean(recipe, archive, data$fcst, outdir) + plot_ensemble_mean(recipe, data$fcst, outdir) } else { error(recipe$Run$logger, paste0("The forecast ensemble mean plot has been requested, but ", @@ -70,7 +58,7 @@ plot_data <- function(recipe, # Plot Most Likely Terciles if ("most_likely_terciles" %in% plots) { if ((!is.null(probabilities)) && (!is.null(data$fcst))) { - plot_most_likely_terciles(recipe, archive, data$fcst, + plot_most_likely_terciles(recipe, data$fcst, probabilities, outdir) } else { error(recipe$Run$logger, @@ -80,341 +68,3 @@ plot_data <- function(recipe, } } -plot_skill_metrics <- function(recipe, archive, data_cube, skill_metrics, - outdir, significance = F) { - # recipe: Auto-S2S recipe - # archive: Auto-S2S archive - # data_cube: s2dv_cube object with the corresponding hindcast data - # skill_metrics: list of named skill metrics arrays - # outdir: output directory - # significance: T/F, whether to display the significance dots in the plots - - ## TODO: OPTION for CERISE: Using PuOr - # Abort if frequency is daily - if (recipe$Analysis$Variables$freq == "daily_mean") { - error(recipe$Run$logger, "Visualization functions not yet implemented - for daily data.") - stop() - } - # Abort if skill_metrics is not list - if (!is.list(skill_metrics) || is.null(names(skill_metrics))) { - stop("The element 'skill_metrics' must be a list of named arrays.") - } - - latitude <- data_cube$coords$lat - longitude <- data_cube$coords$lon - system_name <- archive$System[[recipe$Analysis$Datasets$System$name]]$name - hcst_period <- paste0(recipe$Analysis$Time$hcst_start, "-", - recipe$Analysis$Time$hcst_end) - init_month <- as.numeric(substr(recipe$Analysis$Time$sdate, - start = 1, stop = 2)) - month_label <- tolower(month.name[init_month]) - month_abbreviation <- month.abb[init_month] - - # Define color palette and number of breaks according to output format - ## TODO: Make separate function - if (tolower(recipe$Analysis$Output_format) %in% c("scorecards", "cerise")) { - diverging_palette <- "purpleorange" - sequential_palette <- "Oranges" - } else { - diverging_palette <- "bluered" - sequential_palette <- "Reds" - } - - # Group different metrics by type - skill_scores <- c("rpss", "bss90", "bss10", "frpss", "crpss", "mean_bias_ss", - "enscorr", "rpss_specs", "bss90_specs", "bss10_specs", - "enscorr_specs", "rmsss") - scores <- c("rps", "frps", "crps", "frps_specs") - # Assign colorbar to each metric type - ## TODO: Triangle ends - for (name in c(skill_scores, scores, "mean_bias", "enssprerr")) { - if (name %in% names(skill_metrics)) { - # Define plot characteristics and metric name to display in plot - if (name %in% c("rpss", "bss90", "bss10", "frpss", "crpss", - "rpss_specs", "bss90_specs", "bss10_specs", - "rmsss")) { - display_name <- toupper(strsplit(name, "_")[[1]][1]) - skill <- skill_metrics[[name]] - brks <- seq(-1, 1, by = 0.2) - colorbar <- clim.colors(length(brks) + 1, diverging_palette) - cols <- colorbar[2:(length(colorbar) - 1)] - col_inf <- colorbar[1] - col_sup <- NULL - } else if (name == "mean_bias_ss") { - display_name <- "Mean Bias Skill Score" - skill <- skill_metrics[[name]] - brks <- seq(-1, 1, by = 0.2) - colorbar <- clim.colors(length(brks) + 1, diverging_palette) - cols <- colorbar[2:(length(colorbar) - 1)] - col_inf <- colorbar[1] - col_sup <- NULL - } else if (name %in% c("enscorr", "enscorr_specs")) { - display_name <- "Ensemble Mean Correlation" - skill <- skill_metrics[[name]] - brks <- seq(-1, 1, by = 0.2) - cols <- clim.colors(length(brks) - 1, diverging_palette) - col_inf <- NULL - col_sup <- NULL - } else if (name %in% scores) { - skill <- skill_metrics[[name]] - display_name <- toupper(strsplit(name, "_")[[1]][1]) - brks <- seq(0, 1, by = 0.1) - colorbar <- grDevices::hcl.colors(length(brks), sequential_palette) - cols <- colorbar[1:(length(colorbar) - 1)] - col_inf <- NULL - col_sup <- colorbar[length(colorbar)] - } else if (name == "enssprerr") { - skill <- skill_metrics[[name]] - display_name <- "Spread-to-Error Ratio" - brks <- c(0, 0.6, 0.7, 0.8, 0.9, 1, 1.2, 1.4, 1.6, 1.8, 2) - colorbar <- clim.colors(length(brks), diverging_palette) - cols <- colorbar[1:length(colorbar) - 1] - col_inf <- NULL - col_sup <- colorbar[length(colorbar)] - } else if (name == "mean_bias") { - skill <- skill_metrics[[name]] - display_name <- "Mean Bias" - max_value <- max(abs(quantile(skill, 0.02, na.rm = T)), - abs(quantile(skill, 0.98, na.rm = T))) - brks <- max_value * seq(-1, 1, by = 0.2) - colorbar <- clim.colors(length(brks) + 1, diverging_palette) - cols <- colorbar[2:(length(colorbar) - 1)] - col_inf <- colorbar[1] - col_sup <- colorbar[length(colorbar)] - } - options(bitmapType = "cairo") - # Reorder dimensions - skill <- Reorder(skill, c("time", "longitude", "latitude")) - # If the significance has been requested and the variable has it, - # retrieve it and reorder its dimensions. - significance_name <- paste0(name, "_significance") - if ((significance) && (significance_name %in% names(skill_metrics))) { - skill_significance <- skill_metrics[[significance_name]] - skill_significance <- Reorder(skill_significance, c("time", - "longitude", - "latitude")) - # Split skill significance into list of lists, along the time dimension - # This allows for plotting the significance dots correctly. - skill_significance <- ClimProjDiags::ArrayToList(skill_significance, - dim = 'time', - level = "sublist", - names = "dots") - } else { - skill_significance <- NULL - } - # Define output file name and titles - if (tolower(recipe$Analysis$Horizon) == "seasonal") { - outfile <- paste0(outdir, name, "-", month_label, ".png") - } else { - outfile <- paste0(outdir, name, ".png") - } - toptitle <- paste(display_name, "-", data_cube$attrs$Variable$varName, - "-", system_name, "-", month_abbreviation, - hcst_period) - months <- unique(lubridate::month(data_cube$attrs$Dates, - label = T, abb = F)) - titles <- as.vector(months) - # Plot - suppressWarnings( - PlotLayout(PlotEquiMap, c('longitude', 'latitude'), - asplit(skill, MARGIN=1), # Splitting array into a list - longitude, latitude, - special_args = skill_significance, - dot_symbol = 20, - toptitle = toptitle, - title_scale = 0.6, - titles = titles, - filled.continents=F, - brks = brks, - cols = cols, - col_inf = col_inf, - col_sup = col_sup, - fileout = outfile, - bar_label_digits = 3, - bar_extra_margin = rep(0.9, 4), - bar_label_scale = 1.5, - axes_label_scale = 1.3) - ) - } - } - info(recipe$Run$logger, - "##### SKILL METRIC PLOTS SAVED TO OUTPUT DIRECTORY #####") -} - -plot_ensemble_mean <- function(recipe, archive, fcst, outdir) { - - ## TODO: Add 'anomaly' to plot title - # Abort if frequency is daily - if (recipe$Analysis$Variables$freq == "daily_mean") { - stop("Visualization functions not yet implemented for daily data.") - } - - latitude <- fcst$coords$lat - longitude <- fcst$coords$lon - system_name <- archive$System[[recipe$Analysis$Datasets$System$name]]$name - variable <- recipe$Analysis$Variables$name - units <- attr(fcst$Variable, "variable")$units - start_date <- paste0(recipe$Analysis$Time$fcst_year, - recipe$Analysis$Time$sdate) - # Compute ensemble mean - ensemble_mean <- s2dv::MeanDims(fcst$data, 'ensemble') - # Drop extra dims, add time dim if missing: - ensemble_mean <- drop(ensemble_mean) - - if (!("time" %in% names(dim(ensemble_mean)))) { - dim(ensemble_mean) <- c("time" = 1, dim(ensemble_mean)) - } - if (!'syear' %in% names(dim(ensemble_mean))) { - ensemble_mean <- Reorder(ensemble_mean, c("time", - "longitude", - "latitude")) - } else { - ensemble_mean <- Reorder(ensemble_mean, c("syear", - "time", - "longitude", - "latitude")) - } - ## TODO: Redefine column colors, possibly depending on variable - if (variable == 'prlr') { - palette = "BrBG" - rev = F - } else { - palette = "RdBu" - rev = T - } - # Define brks, centered on in the case of anomalies - ## - if (grepl("anomaly", - fcst$attrs$Variable$metadata[[variable]]$long_name)) { - variable <- paste(variable, "anomaly") - max_value <- max(abs(ensemble_mean)) - ugly_intervals <- seq(-max_value, max_value, max_value/20) - brks <- pretty(ugly_intervals, n = 12, min.n = 8) - } else { - brks <- pretty(range(ensemble_mean, na.rm = T), n = 15, min.n = 8) - } - cols <- grDevices::hcl.colors(length(brks) - 1, palette, rev = rev) - options(bitmapType = "cairo") - - for (i_syear in start_date) { - # Define name of output file and titles - if (length(start_date) == 1) { - i_ensemble_mean <- ensemble_mean - outfile <- paste0(outdir, "forecast_ensemble_mean-", start_date, ".png") - } else { - i_ensemble_mean <- ensemble_mean[which(start_date == i_syear), , , ] - outfile <- paste0(outdir, "forecast_ensemble_mean-", i_syear, ".png") - } - toptitle <- paste("Forecast Ensemble Mean -", variable, "-", system_name, - "- Initialization:", i_syear) - months <- lubridate::month(fcst$attrs$Dates[1, 1, which(start_date == i_syear), ], - label = T, abb = F) - titles <- as.vector(months) - # Plots - PlotLayout(PlotEquiMap, c('longitude', 'latitude'), - i_ensemble_mean, longitude, latitude, - filled.continents = F, - toptitle = toptitle, - title_scale = 0.6, - titles = titles, - units = units, - cols = cols, - brks = brks, - fileout = outfile, - bar_label_digits = 4, - bar_extra_margin = rep(0.7, 4), - bar_label_scale = 1.5, - axes_label_scale = 1.3) - } - info(recipe$Run$logger, - "##### FCST ENSEMBLE MEAN PLOT SAVED TO OUTPUT DIRECTORY #####") -} - -plot_most_likely_terciles <- function(recipe, archive, - fcst, - probabilities, - outdir) { - - ## TODO: Add 'anomaly' to plot title - # Abort if frequency is daily - if (recipe$Analysis$Variables$freq == "daily_mean") { - stop("Visualization functions not yet implemented for daily data.") - } - - latitude <- fcst$coords$lat - longitude <- fcst$coords$lon - system_name <- archive$System[[recipe$Analysis$Datasets$System$name]]$name - variable <- recipe$Analysis$Variables$name - start_date <- paste0(recipe$Analysis$Time$fcst_year, - recipe$Analysis$Time$sdate) - - # Retrieve and rearrange probability bins for the forecast - if (is.null(probabilities$probs_fcst$prob_b33) || - is.null(probabilities$probs_fcst$prob_33_to_66) || - is.null(probabilities$probs_fcst$prob_a66)) { - stop("The forecast tercile probability bins are not present inside ", - "'probabilities', the most likely tercile map cannot be plotted.") - } - - probs_fcst <- abind(probabilities$probs_fcst$prob_b33, - probabilities$probs_fcst$prob_33_to_66, - probabilities$probs_fcst$prob_a66, - along = 0) - names(dim(probs_fcst)) <- c("bin", - names(dim(probabilities$probs_fcst$prob_b33))) - - ## TODO: Improve this section - # Drop extra dims, add time dim if missing: - probs_fcst <- drop(probs_fcst) - if (!("time" %in% names(dim(probs_fcst)))) { - dim(probs_fcst) <- c("time" = 1, dim(probs_fcst)) - } - if (!'syear' %in% names(dim(probs_fcst))) { - probs_fcst <- Reorder(probs_fcst, c("time", "bin", "longitude", "latitude")) - } else { - probs_fcst <- Reorder(probs_fcst, - c("syear", "time", "bin", "longitude", "latitude")) - } - - for (i_syear in start_date) { - # Define name of output file and titles - if (length(start_date) == 1) { - i_probs_fcst <- probs_fcst - outfile <- paste0(outdir, "forecast_most_likely_tercile-", start_date, - ".png") - } else { - i_probs_fcst <- probs_fcst[which(start_date == i_syear), , , , ] - outfile <- paste0(outdir, "forecast_most_likely_tercile-", i_syear, ".png") - } - toptitle <- paste("Most Likely Tercile -", variable, "-", system_name, "-", - "Initialization:", i_syear) - months <- lubridate::month(fcst$attrs$Dates[1, 1, which(start_date == i_syear), ], - label = T, abb = F) - ## TODO: Ensure this works for daily and sub-daily cases - titles <- as.vector(months) - - # Plots - ## NOTE: PlotLayout() and PlotMostLikelyQuantileMap() are still being worked - ## on. - suppressWarnings( - PlotLayout(PlotMostLikelyQuantileMap, c('bin', 'longitude', 'latitude'), - cat_dim = 'bin', - i_probs_fcst, longitude, latitude, - coast_width = 1.5, - title_scale = 0.6, - legend_scale = 0.8, #cex_bar_titles = 0.6, - toptitle = toptitle, - titles = titles, - fileout = outfile, - bar_label_digits = 2, - bar_scale = rep(0.7, 4), - bar_label_scale = 1.2, - axes_label_scale = 1.3, - triangle_ends = c(F, F), width = 11, height = 8) - ) - } - - info(recipe$Run$logger, - "##### MOST LIKELY TERCILE PLOT SAVED TO OUTPUT DIRECTORY #####") -} diff --git a/tests/recipes/recipe-seasonal_monthly_1.yml b/tests/recipes/recipe-seasonal_monthly_1.yml index 59b4845a..21321fab 100644 --- a/tests/recipes/recipe-seasonal_monthly_1.yml +++ b/tests/recipes/recipe-seasonal_monthly_1.yml @@ -28,10 +28,10 @@ Analysis: method: bilinear type: to_system Workflow: - Anomalies: - compute: no - cross_validation: - save: 'none' + # Anomalies: + # compute: no + # cross_validation: + # save: 'none' Calibration: method: mse_min save: 'all' -- GitLab From b687f5f564067e8ec8130cc427a016b0de959d72 Mon Sep 17 00:00:00 2001 From: eduzenli Date: Wed, 19 Apr 2023 13:28:38 +0200 Subject: [PATCH 138/388] large-scale name was corrected for Intlr.R --- modules/Downscaling/Downscaling.R | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/Downscaling/Downscaling.R b/modules/Downscaling/Downscaling.R index 8e919430..c6456da4 100644 --- a/modules/Downscaling/Downscaling.R +++ b/modules/Downscaling/Downscaling.R @@ -51,7 +51,7 @@ downscale_datasets <- function(recipe, data) { DOWNSCAL_TYPES <- c("none", "int", "intbc", "intlr", "analogs", "logreg") BC_METHODS <- c("simple_bias", "calibration", "quantile_mapping", "sbc", "cal", "qm") - LR_METHODS <- c("basic", "large_scale", "4nn") + LR_METHODS <- c("basic", "large-scale", "4nn") LOG_REG_METHODS <- c("ens_mean", "ens_mean_sd", "sorted_members") if (!(type %in% DOWNSCAL_TYPES)) { @@ -160,7 +160,7 @@ downscale_datasets <- function(recipe, data) { if (is.null(lr_method)) { stop("Please provide one linear regression method in the recipe. Accepted ", - "methods are 'basic', 'large_scale', '4nn'.") + "methods are 'basic', 'large-scale', '4nn'.") } if (is.null(target_grid)) { @@ -169,11 +169,11 @@ downscale_datasets <- function(recipe, data) { if (!(lr_method %in% LR_METHODS)) { stop(paste0(lr_method, " method in the recipe is not available. Accepted methods ", - "are 'basic', 'large_scale', '4nn'.")) + "are 'basic', 'large-scale', '4nn'.")) } # TO DO: add the possibility to have the element 'pred' in 'data' - if (lr_method == "large_scale") { + if (lr_method == "large-scale") { if (is.null(data$pred$data)) { stop("Please provide the large scale predictors in the element 'data$pred$data'.") } -- GitLab From bdfa59c1e8aa4d3ec2f670e5efac2983995d2fc7 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Wed, 19 Apr 2023 15:31:07 +0200 Subject: [PATCH 139/388] Adjust anomaly savcing check --- tools/check_recipe.R | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/tools/check_recipe.R b/tools/check_recipe.R index 64bc9464..a9170707 100644 --- a/tools/check_recipe.R +++ b/tools/check_recipe.R @@ -275,23 +275,25 @@ check_recipe <- function(recipe) { paste("Parameter 'Anomalies:compute' must be a logical value", "(True/False or yes/no).")) error_status <- T - } else if ((recipe$Analysis$Workflow$Anomalies$compute) && - (!is.logical(recipe$Analysis$Workflow$Anomalies$cross_validation))) { - error(recipe$Run$logger, - paste("If anomaly computation is requested, parameter", - "'cross_validation' must be defined under 'Anomalies', - and it must be a logical value (True/False or yes/no).")) - error_status <- T - } - # Saving checks - SAVING_OPTIONS_ANOM <- c("all", "none", "exp_only", "fcst_only") - if ((is.null(recipe$Analysis$Workflow$Anomalies$save)) || - (!(recipe$Analysis$Workflow$Anomalies$save %in% SAVING_OPTIONS_ANOM))) { - error(recipe$Run$logger, - paste0("Please specify which Anomalies module outputs you want ", - "to save with the 'save' parameter. The options are: ", - paste(SAVING_OPTIONS_ANOM, collapse = ", "), ".")) - error_status <- T + } else if ((recipe$Analysis$Workflow$Anomalies$compute)) { + # Cross-validation check + if (!is.logical(recipe$Analysis$Workflow$Anomalies$cross_validation)) { + error(recipe$Run$logger, + paste("If anomaly computation is requested, parameter", + "'cross_validation' must be defined under 'Anomalies', + and it must be a logical value (True/False or yes/no).")) + error_status <- T + } + # Saving checks + SAVING_OPTIONS_ANOM <- c("all", "none", "exp_only", "fcst_only") + if ((is.null(recipe$Analysis$Workflow$Anomalies$save)) || + (!(recipe$Analysis$Workflow$Anomalies$save %in% SAVING_OPTIONS_ANOM))) { + error(recipe$Run$logger, + paste0("Please specify which Anomalies module outputs you want ", + "to save with the 'save' parameter. The options are: ", + paste(SAVING_OPTIONS_ANOM, collapse = ", "), ".")) + error_status <- T + } } } # Skill -- GitLab From 875ccfc3e8d358c96ff8e3eee8423e3677c6cf92 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Thu, 20 Apr 2023 09:41:14 +0200 Subject: [PATCH 140/388] Update a few recipes, delete paths2save file --- modules/Saving/paths2save.R | 113 ------------------ .../atomic_recipes/recipe_system5c3s-tas.yml | 7 ++ .../atomic_recipes/recipe_system7c3s-prlr.yml | 8 +- recipes/recipe_decadal_split.yml | 8 +- recipes/recipe_splitting_example.yml | 7 ++ recipes/tests/recipe_autosubmit_marstest.yml | 6 + recipes/tests/recipe_multiregion.yml | 6 + recipes/tests/recipe_seasonal_example.yml | 6 + .../tests/recipe_seasonal_two-variables.yml | 6 + 9 files changed, 52 insertions(+), 115 deletions(-) delete mode 100644 modules/Saving/paths2save.R diff --git a/modules/Saving/paths2save.R b/modules/Saving/paths2save.R deleted file mode 100644 index 24e1fce7..00000000 --- a/modules/Saving/paths2save.R +++ /dev/null @@ -1,113 +0,0 @@ -## TODO: Separate by time aggregation -## TODO: Build a default path that accounts for: -## variable, system, reference, start date and region name - -get_filename <- function(dir, recipe, var, date, agg, file.type) { - # This function builds the path of the output file based on directory, - # variable, forecast date, startdate, aggregation, forecast horizon and - # type of metric/forecast/probability. - - if (recipe$Analysis$Horizon == "subseasonal") { - shortdate <- format(as.Date(as.character(date), "%Y%m%d"), "%V") - dd <- "week" - } else { - shortdate <- format(as.Date(as.character(date), "%Y%m%d"), "%m") - dd <- "month" - } - - switch(tolower(agg), - "country" = {gg <- "-country"}, - "global" = {gg <- ""}) - - system <- gsub('.','', recipe$Analysis$Datasets$System$name, fixed = T) - reference <- gsub('.','', recipe$Analysis$Datasets$Reference$name, fixed = T) - - if (tolower(recipe$Analysis$Output_format) == 'scorecards') { - # Define output dir name accordint to Scorecards format - dict <- read_yaml("conf/output_dictionaries/scorecards.yml") - # Get necessary names - hcst_start <- recipe$Analysis$Time$hcst_start - hcst_end <- recipe$Analysis$Time$hcst_end - - switch(file.type, - "skill" = {type_info <- "-skill_"}, - "corr" = {type_info <- "-corr_"}, - "exp" = {type_info <- paste0("_", date, "_")}, - "obs" = {type_info <- paste0("-obs_", date, "_")}, - "percentiles" = {type_info <- "-percentiles_"}, - "probs" = {type_info <- paste0("-probs_", date, "_")}, - "bias" = {type_info <- paste0("-bias_", date, "_")}) - - # Build file name - file <- paste0("scorecards_", system, "_", reference, "_", - var, type_info, hcst_start, "-", hcst_end, "_s", shortdate) - } else { - switch(file.type, - "skill" = {file <- paste0(var, gg, "-skill_", dd, shortdate)}, - "corr" = {file <- paste0(var, gg, "-corr_", dd, shortdate)}, - "exp" = {file <- paste0(var, gg, "_", date)}, - "obs" = {file <- paste0(var, gg, "-obs_", date)}, - "percentiles" = {file <- paste0(var, gg, "-percentiles_", dd, - shortdate)}, - "probs" = {file <- paste0(var, gg, "-probs_", date)}, - "bias" = {file <- paste0(var, gg, "-bias_", date)}) - } - return(paste0(dir, file, ".nc")) -} - -get_dir <- function(recipe, agg = "global") { - # This function builds the path for the output directory. The output - # directories will be subdirectories within outdir, organized by variable, - # startdate, and aggregation. - - ## TODO: Get aggregation from recipe - outdir <- recipe$Run$output_dir - ## TODO: multivar case - variable <- recipe$Analysis$Variables$name - system <- gsub('.','', recipe$Analysis$Datasets$System$name, fixed = T) - - if (tolower(recipe$Analysis$Output_format) == 'scorecards') { - # Define output dir name accordint to Scorecards format - dict <- read_yaml("conf/output_dictionaries/scorecards.yml") - # system <- dict$System[[recipe$Analysis$Datasets$System$name]]$short_name - dir <- paste0(outdir, "/", system, "/", variable, "/") - } else { - # Default generic output format based on FOCUS - # Get startdate or hindcast period - if (!is.null(recipe$Analysis$Time$fcst_year)) { - if (tolower(recipe$Analysis$Horizon) == 'decadal') { - # decadal doesn't have sdate - fcst.sdate <- paste0(recipe$Analysis$Time$fcst_year, collapse = '_') - } else { - fcst.sdate <- paste0(recipe$Analysis$Time$fcst_year, - recipe$Analysis$Time$sdate) - } - } else { - if (tolower(recipe$Analysis$Horizon) == 'decadal') { - # decadal doesn't have sdate - fcst.sdate <- paste0("hcst-", paste(recipe$Analysis$Time$hcst_start, - recipe$Analysis$Time$hcst_end, - sep = '_')) - } else { - fcst.sdate <- paste0("hcst-", recipe$Analysis$Time$sdate) - } - } - - calib.method <- tolower(recipe$Analysis$Workflow$Calibration$method) - store.freq <- recipe$Analysis$Variables$freq - ## TODO: Change "_country" - if (!is.null(recipe$Analysis$Region$name)) { - outdir <- paste0(outdir, "/", recipe$Analysis$Region$name) - } - switch(tolower(agg), - "country" = {dir <- paste0(outdir, "/", system, "/", calib.method, - "-", store.freq, "/", variable, - "_country/", fcst.sdate, "/")}, - "global" = {dir <- paste0(outdir, "/", system, "/", calib.method, - "-", store.freq, "/", variable, "/", - fcst.sdate, "/")}) - } - ## TODO: Multivar case - dir.create(dir, showWarnings = FALSE, recursive = TRUE) - return(dir) -} diff --git a/recipes/atomic_recipes/recipe_system5c3s-tas.yml b/recipes/atomic_recipes/recipe_system5c3s-tas.yml index 31ae079d..c4606d59 100644 --- a/recipes/atomic_recipes/recipe_system5c3s-tas.yml +++ b/recipes/atomic_recipes/recipe_system5c3s-tas.yml @@ -31,12 +31,19 @@ Analysis: Anomalies: compute: no cross_validation: + save: Calibration: method: raw + save: fcst_only Skill: metric: RPSS_specs BSS90_specs EnsCorr_specs FRPS_specs FRPSS_specs BSS10_specs FRPS + save: all Probabilities: percentiles: [[1/3, 2/3]] + save: all + Visualization: + plots: skill_metrics forecast_ensemble_mean + Indicators: index: no Output_format: S2S4E diff --git a/recipes/atomic_recipes/recipe_system7c3s-prlr.yml b/recipes/atomic_recipes/recipe_system7c3s-prlr.yml index 58030bf3..fa7bee7f 100644 --- a/recipes/atomic_recipes/recipe_system7c3s-prlr.yml +++ b/recipes/atomic_recipes/recipe_system7c3s-prlr.yml @@ -31,15 +31,21 @@ Analysis: Anomalies: compute: no cross_validation: + save: Calibration: method: mse_min + save: 'all' Skill: metric: RPS RPSS CRPS CRPSS FRPSS BSS10 BSS90 EnsCorr Corr + save: 'all' Probabilities: percentiles: [[1/3, 2/3], [1/10, 9/10], [1/4, 2/4, 3/4]] + save: 'all' + Visualization: + plots: skill_metrics forecast_ensemble_mean most_likely_terciles Indicators: index: no - ncores: 1 + ncores: 12 remove_NAs: no Output_format: S2S4E Run: diff --git a/recipes/recipe_decadal_split.yml b/recipes/recipe_decadal_split.yml index 708037f7..a94ffd03 100644 --- a/recipes/recipe_decadal_split.yml +++ b/recipes/recipe_decadal_split.yml @@ -28,13 +28,19 @@ Analysis: Workflow: Anomalies: compute: no - cross_validation: + cross_validation: + save: Calibration: method: 'bias' + save: 'all' Skill: metric: EnsCorr RPSS + save: 'all' Probabilities: percentiles: [[1/3, 2/3]] + save: 'all' + Visualization: + plots: skill_metrics Indicators: index: FALSE ncores: 8 # Optional, int: number of cores, defaults to 1 diff --git a/recipes/recipe_splitting_example.yml b/recipes/recipe_splitting_example.yml index 94a94468..93e5994e 100644 --- a/recipes/recipe_splitting_example.yml +++ b/recipes/recipe_splitting_example.yml @@ -38,12 +38,19 @@ Analysis: method: bilinear ## TODO: allow multiple methods? type: to_system Workflow: + Anomalies: + compute: no Calibration: method: mse_min ## TODO: list, split? + save: 'none' Skill: metric: RPS, RPSS, CRPS, CRPSS, FRPSS, BSS10, BSS90, mean_bias, mean_bias_SS # list, don't split + save: 'all' Probabilities: percentiles: [[1/3, 2/3], [1/10, 9/10], [1/4, 2/4, 3/4]] # list, don't split + save: 'all' + Visualization: + plots: skill_metrics, most_likely_terciles, forecast_ensemble_mean Indicators: index: no # ? ncores: 7 diff --git a/recipes/tests/recipe_autosubmit_marstest.yml b/recipes/tests/recipe_autosubmit_marstest.yml index dfd2159f..5bf62fb9 100644 --- a/recipes/tests/recipe_autosubmit_marstest.yml +++ b/recipes/tests/recipe_autosubmit_marstest.yml @@ -40,12 +40,18 @@ Analysis: Anomalies: compute: yes cross_validation: yes + save: 'all' Calibration: method: raw ## TODO: list, split? + save: 'none' Skill: metric: RPS, RPSS, CRPS, CRPSS, FRPSS, BSS10, BSS90, mean_bias, mean_bias_SS # list, don't split + save: 'all' Probabilities: percentiles: [[1/3, 2/3], [1/10, 9/10], [1/4, 2/4, 3/4]] # list, don't split + save: 'all' + Visualization: + plots: skill_metrics Indicators: index: no # ? ncores: 8 diff --git a/recipes/tests/recipe_multiregion.yml b/recipes/tests/recipe_multiregion.yml index bcb4d126..69d8621d 100644 --- a/recipes/tests/recipe_multiregion.yml +++ b/recipes/tests/recipe_multiregion.yml @@ -40,12 +40,18 @@ Analysis: Anomalies: compute: yes cross_validation: yes + save: none Calibration: method: raw + save: none Skill: metric: RPS, RPSS, CRPS, CRPSS, FRPSS, BSS10, BSS90, mean_bias, mean_bias_SS + save: all Probabilities: percentiles: [[1/3, 2/3], [1/10, 9/10], [1/4, 2/4, 3/4]] + save: all + Visualization: + plots: skill_metrics Indicators: index: no ncores: 8 diff --git a/recipes/tests/recipe_seasonal_example.yml b/recipes/tests/recipe_seasonal_example.yml index cb941f84..f4f3a8f5 100644 --- a/recipes/tests/recipe_seasonal_example.yml +++ b/recipes/tests/recipe_seasonal_example.yml @@ -40,12 +40,18 @@ Analysis: Anomalies: compute: yes cross_validation: yes + save: 'all' Calibration: method: raw + save: 'none' Skill: metric: RPS, RPSS, CRPS, CRPSS, FRPSS, BSS10, BSS90, mean_bias, mean_bias_SS + save: 'all' Probabilities: percentiles: [[1/3, 2/3], [1/10, 9/10], [1/4, 2/4, 3/4]] + save: 'all' + Visualization: + plots: skill_metrics Indicators: index: no ncores: 8 diff --git a/recipes/tests/recipe_seasonal_two-variables.yml b/recipes/tests/recipe_seasonal_two-variables.yml index 5dbd892f..1cb5c3b2 100644 --- a/recipes/tests/recipe_seasonal_two-variables.yml +++ b/recipes/tests/recipe_seasonal_two-variables.yml @@ -38,12 +38,18 @@ Analysis: Anomalies: compute: yes cross_validation: yes + save: 'all' Calibration: method: raw ## TODO: list, split? + save: 'none' Skill: metric: RPS, RPSS, CRPS, CRPSS, FRPSS, BSS10, BSS90, mean_bias, mean_bias_SS # list, don't split + save: 'all' Probabilities: percentiles: [[1/3, 2/3], [1/10, 9/10], [1/4, 2/4, 3/4]] # list, don't split + save: 'all' + Visualization: + plots: skill_metrics, forecast_ensemble_mean, most_likely_terciles Indicators: index: no # ? ncores: 7 -- GitLab From 5d1bdd953d1ce4d4d400643746cb002b46d14250 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Thu, 20 Apr 2023 12:09:37 +0200 Subject: [PATCH 141/388] Fix pipeline, update decadal recipe --- recipes/atomic_recipes/recipe_decadal.yml | 6 ++++++ tests/testthat/test-decadal_monthly_1.R | 5 +++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/recipes/atomic_recipes/recipe_decadal.yml b/recipes/atomic_recipes/recipe_decadal.yml index 986578f7..2dca96c0 100644 --- a/recipes/atomic_recipes/recipe_decadal.yml +++ b/recipes/atomic_recipes/recipe_decadal.yml @@ -32,14 +32,20 @@ Analysis: Anomalies: compute: no cross_validation: + save: Calibration: method: bias + save: 'all' Skill: metric: RPSS Corr + save: 'all' Probabilities: percentiles: [[1/3, 2/3]] + save: 'all' Indicators: index: FALSE + Visualization: + plots: skill_metrics, forecast_ensemble_mean, most_likely_terciles ncores: # Optional, int: number of cores, defaults to 1 remove_NAs: # Optional, bool: Whether NAs are removed, defaults to FALSE Output_format: S2S4E diff --git a/tests/testthat/test-decadal_monthly_1.R b/tests/testthat/test-decadal_monthly_1.R index ee1520ad..9b46cce8 100644 --- a/tests/testthat/test-decadal_monthly_1.R +++ b/tests/testthat/test-decadal_monthly_1.R @@ -32,8 +32,9 @@ probs <- compute_probabilities(recipe, calibrated_data) # Plotting suppressWarnings({invisible(capture.output( -plot_data(recipe = recipe, archive = archive, data = calibrated_data, - skill_metrics = skill_metrics, probabilities = probs, significance = T) +plot_data(recipe = recipe, data = calibrated_data, + skill_metrics = skill_metrics, probabilities = probs, + significance = T) ))}) #====================================== -- GitLab From debf8b42cb3f003b1f593d2bfd06c5dc89d91972 Mon Sep 17 00:00:00 2001 From: eduzenli Date: Fri, 21 Apr 2023 14:31:03 +0200 Subject: [PATCH 142/388] parallelisation is corrected --- modules/Downscaling/tmp/Analogs.R | 52 +++---- modules/Downscaling/tmp/Intbc.R | 42 +++--- modules/Downscaling/tmp/Interpolation.R | 72 ++++++---- modules/Downscaling/tmp/Intlr.R | 173 ++++++++++++------------ modules/Downscaling/tmp/LogisticReg.R | 127 +++++++++++------ modules/Downscaling/tmp/Utils.R | 14 +- 6 files changed, 278 insertions(+), 202 deletions(-) diff --git a/modules/Downscaling/tmp/Analogs.R b/modules/Downscaling/tmp/Analogs.R index a69a66df..f0ebd610 100644 --- a/modules/Downscaling/tmp/Analogs.R +++ b/modules/Downscaling/tmp/Analogs.R @@ -66,8 +66,8 @@ #'@param loocv_window a logical vector only to be used if 'obs' does not have the dimension #''window'. It indicates whether to apply leave-one-out cross-validation in the creation #'of the window. It is recommended to be set to TRUE. Default to TRUE. -#'@param ncores an integer indicating the number of cores to use in parallel computation. -#' +#'@param ncores an integer indicating the number of cores to use in parallel computation. +#'The default value is NULL. #'@return An 's2dv' object. The element 'data' contains the dowscaled field, 'lat' the #'downscaled latitudes, and 'lon' the downscaled longitudes. If fun_analog is set to NULL #'(default), the output array in 'data' also contains the dimension 'analog' with the best @@ -87,7 +87,7 @@ #'@export CST_Analogs <- function(exp, obs, grid_exp, obs2 = NULL, nanalogs = 3, fun_analog = NULL, lat_dim = "lat", lon_dim = "lon", sdate_dim = "sdate", time_dim = "time", member_dim = "member", - region = NULL, return_indices = FALSE, loocv_window = TRUE, ncores = 1) { + region = NULL, return_indices = FALSE, loocv_window = TRUE, ncores = NULL) { # input exp and obs must be s2dv_cube objects if (!inherits(exp,'s2dv_cube')) { @@ -204,7 +204,8 @@ CST_Analogs <- function(exp, obs, grid_exp, obs2 = NULL, nanalogs = 3, fun_analo #'@param loocv_window a logical vector only to be used if 'obs' does not have the dimension #''window'. It indicates whether to apply leave-one-out cross-validation in the creation #'of the window. It is recommended to be set to TRUE. Default to TRUE. -#'@param ncores an integer indicating the number of cores to use in parallel computation. +#'@param ncores an integer indicating the number of cores to use in parallel computation. +#'The default value is NULL. #'@import multiApply #'@import CSTools #'@importFrom s2dv InsertDim CDORemap @@ -232,7 +233,7 @@ Analogs <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, grid_exp, obs2_lats = NULL, obs2_lons = NULL, nanalogs = 3, fun_analog = NULL, lat_dim = "lat", lon_dim = "lon", sdate_dim = "sdate", time_dim = "time", member_dim = "member", region = NULL, return_indices = FALSE, - loocv_window = TRUE, ncores = 1) { + loocv_window = TRUE, ncores = NULL) { #----------------------------------- # Checkings #----------------------------------- @@ -336,7 +337,14 @@ Analogs <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, grid_exp, stop("Missing time dimension in 'obs2', or does not match the parameter 'time_dim'") } } - + ## ncores + if (!is.null(ncores)) { + if (!is.numeric(ncores) | any(ncores %% 1 != 0) | any(ncores < 0) | + length(ncores) > 1) { + stop("Parameter 'ncores' must be a positive integer.") + } + } + # Select a function to apply to the analogs selected for a given observation if (!is.null(fun_analog)) { stopifnot(fun_analog %in% c("mean", "wmean", "max", "min", "median")) @@ -370,22 +378,22 @@ Analogs <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, grid_exp, obs_interpolated <- Interpolation(exp = obs_train, lats = obs_train_lats, lons = obs_train_lons, target_grid = grid_exp, lat_dim = lat_dim, lon_dim = lon_dim, - method_remap = "conservative", region = region) + method_remap = "conservative", region = region, ncores = ncores) # If after interpolating 'obs' data the coordinates do not match, the exp data is interpolated to # the same grid to force the matching if (!.check_coords(lat1 = obs_interpolated$lat, lat2 = exp_lats, lon1 = obs_interpolated$lon, lon2 = exp_lons)) { exp_interpolated <- Interpolation(exp = exp, lats = exp_lats, lons = exp_lons, target_grid = grid_exp, lat_dim = lat_dim, lon_dim = lon_dim, method_remap = "conservative", - region = region)$data + region = region, ncores = ncores)$data } else { exp_interpolated <- exp } # Create window if user does not have it in the training observations if ( !("window" %in% names(dim(obs_interpolated$data))) ) { - obs_train_interpolated <- generate_window(obj = obs_interpolated$data, sdate_dim = sdate_dim, - time_dim = time_dim, loocv = loocv_window) - obs_hres <- generate_window(obj = obs, sdate_dim = sdate_dim, time_dim = time_dim, loocv = loocv_window) + obs_train_interpolated <- .generate_window(obj = obs_interpolated$data, sdate_dim = sdate_dim, + time_dim = time_dim, loocv = loocv_window, ncores = ncores) + obs_hres <- .generate_window(obj = obs, sdate_dim = sdate_dim, time_dim = time_dim, loocv = loocv_window, ncores = ncores) } #----------------------------------- @@ -411,7 +419,7 @@ Analogs <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, grid_exp, ntimes <- dim(res.ind)[names(dim(res.ind)) == time_dim] res.ind <- Apply(res.ind, target_dims = c("ind", sdate_dim), function(x) sapply(1:nsdates, function(s) seq(ntimes * nsdates)[ - (ntimes * (s - 1) + 1:ntimes)][x[, s]]), - output_dims = c("ind", sdate_dim))$output1 + output_dims = c("ind", sdate_dim), ncores = ncores)$output1 } # restore ensemble dimension in observations if it existed originally @@ -484,7 +492,7 @@ Analogs <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, grid_exp, # Add the dimension window to an array that contains, at least, the start date and time # dimensions # object has at least dimensions sdate and time -generate_window <- function(obj, sdate_dim, time_dim, loocv, size = NULL) { +.generate_window <- function(obj, sdate_dim, time_dim, loocv, size = NULL, ncores = NULL) { rsdates <- 1:dim(obj)[names(dim(obj)) == sdate_dim] ntimes <- dim(obj)[names(dim(obj)) == time_dim] @@ -497,11 +505,11 @@ generate_window <- function(obj, sdate_dim, time_dim, loocv, size = NULL) { if (loocv) { obj_window <- Apply(obj, target_dims = c(time_dim, sdate_dim), fun = function(x) sapply(rsdates, function(s) as.vector(x[ rtimes, -s])), - output_dims = c('window', sdate_dim))$output1 + output_dims = c('window', sdate_dim), ncores = ncores)$output1 # Generate window without cross-validation } else { obj_window <- Apply(obj, target_dims = c(time_dim, sdate_dim), - fun = as.vector, output_dims = 'window')$output1 + fun = as.vector, output_dims = 'window', ncores = ncores)$output1 } } # Generate window of the size specified by the user. Only applied with CV @@ -513,28 +521,20 @@ generate_window <- function(obj, sdate_dim, time_dim, loocv, size = NULL) { # Concatenate data from previous, target and posterior months obj_new <- Apply(obj, target_dims = list(c("time", "smonth")), - fun = as.vector, output_dims = "time")$output1 + fun = as.vector, output_dims = "time", ncores = ncores )$output1 if (loocv) { obj_window <- Apply(list(obj_new, rtimes, rsdates), target_dims = list(c(time_dim, sdate_dim), NULL, NULL), fun = function(x, t, s) as.vector(x[(ntimes + t - size):(ntimes + t + size), -s]), - output_dims = 'window')$output1 + output_dims = 'window', ncores = ncores)$output1 names(dim(obj_window))[(length(names(dim(obj_window))) - 1):length(names(dim(obj_window)))] <- c(time_dim, sdate_dim) } else { obj_window <- Apply(obj_new, target_dims = c(time_dim, sdate_dim), fun = function(x) sapply(rtimes, function(t) as.vector(x[(ntimes + t - size):(ntimes + t + size), ])), - output_dims = c('window', time_dim))$output1 + output_dims = c('window', time_dim), ncores = ncores)$output1 } } return(obj_window) } - - - - - - - - diff --git a/modules/Downscaling/tmp/Intbc.R b/modules/Downscaling/tmp/Intbc.R index 27de3735..1cb558d5 100644 --- a/modules/Downscaling/tmp/Intbc.R +++ b/modules/Downscaling/tmp/Intbc.R @@ -49,7 +49,8 @@ #'to the left border, while lonmax refers to the right border. latmin indicates the lower #'border, whereas latmax indicates the upper border. If set to NULL (default), the function #'takes the first and last elements of the latitudes and longitudes. -#'@param ncores an integer indicating the number of cores to use in parallel computation. +#'@param ncores an integer indicating the number of cores to use in parallel computation. +#'The default value is NULL. #'@return An 's2dv' object. The element 'data' contains the dowscaled field, 'lat' the #'downscaled latitudes, and 'lon' the downscaled longitudes. #'@examples @@ -68,7 +69,7 @@ CST_Intbc <- function(exp, obs, target_grid, bc_method, int_method = NULL, points = NULL, method_point_interp = NULL, lat_dim = "lat", lon_dim = "lon", - sdate_dim = "sdate", member_dim = "member", region = NULL, ncores = 1,...) + sdate_dim = "sdate", member_dim = "member", region = NULL, ncores = NULL, ...) { if (!inherits(exp,'s2dv_cube')) { stop("Parameter 'exp' must be of the class 's2dv_cube'") @@ -83,7 +84,7 @@ CST_Intbc <- function(exp, obs, target_grid, bc_method, int_method = NULL, point int_method = int_method, bc_method = bc_method, points = points, source_file = exp$attrs$source_files[1], method_point_interp = method_point_interp, lat_dim = lat_dim, lon_dim = lon_dim, sdate_dim = sdate_dim, member_dim = member_dim, - region = region, ncores = ncores,...) + region = region, ncores = ncores, ...) # Modify data, lat and lon in the origina s2dv_cube, adding the downscaled data exp$data <- res$data @@ -162,8 +163,8 @@ CST_Intbc <- function(exp, obs, target_grid, bc_method, int_method = NULL, point #'to the left border, while lonmax refers to the right border. latmin indicates the lower #'border, whereas latmax indicates the upper border. If set to NULL (default), the function #'takes the first and last elements of the latitudes and longitudes. -#'@param ncores an integer indicating the number of cores to use in parallel computation. -#' +#'@param ncores an integer indicating the number of cores to use in parallel computation. +#'The default value is NULL. #'@import CSTools #' #'@seealso \code{\link[CSTools]{BiasCorrection}} @@ -186,7 +187,7 @@ CST_Intbc <- function(exp, obs, target_grid, bc_method, int_method = NULL, point #'@export Intbc <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, target_grid, bc_method, int_method = NULL, points = NULL, method_point_interp = NULL, lat_dim = "lat", lon_dim = "lon", sdate_dim = "sdate", - time_dim = "time", member_dim = "member", source_file = NULL, region = NULL, ncores = 1, ...) { + time_dim = "time", member_dim = "member", source_file = NULL, region = NULL, ncores = NULL, ...) { if (!inherits(bc_method, 'character')) { stop("Parameter 'bc_method' must be of the class 'character'") @@ -250,11 +251,18 @@ Intbc <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, target_grid, "'obs_lats' and 'obs_lons'.") region <- c(obs_lons[1], obs_lons[length(obs_lons)], obs_lats[1], obs_lats[length(obs_lats)]) } - + ## ncores + if (!is.null(ncores)) { + if (!is.numeric(ncores) | any(ncores %% 1 != 0) | any(ncores < 0) | + length(ncores) > 1) { + stop("Parameter 'ncores' must be a positive integer.") + } + } + exp_interpolated <- Interpolation(exp = exp, lats = exp_lats, lons = exp_lons, target_grid = target_grid, method_remap = int_method, points = points, source_file = source_file, lat_dim = lat_dim, lon_dim = lon_dim, method_point_interp = method_point_interp, - region = region) + region = region, ncores = ncores) # If after interpolating 'exp' data the coordinates do not match, the obs data is interpolated to # the same grid to force the matching @@ -263,7 +271,7 @@ Intbc <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, target_grid, obs_interpolated <- Interpolation(exp = obs, lats = obs_lats, lons = obs_lons, target_grid = target_grid, method_remap = int_method, points = points, source_file = source_file, lat_dim = lat_dim, lon_dim = lon_dim, - method_point_interp = method_point_interp, region = region) + method_point_interp = method_point_interp, region = region, ncores = ncores) obs_ref <- obs_interpolated$data } else { obs_ref <- obs @@ -289,32 +297,32 @@ Intbc <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, target_grid, } res <- BiasCorrection(exp = exp_interpolated$data, obs = obs_ref, memb_dim = member_dim, - sdate_dim = sdate_dim, ...) + sdate_dim = sdate_dim, ncores = ncores, ...) } else if (bc_method == 'cal' | bc_method == 'calibration') { if (dim(exp_interpolated$data)[member_dim] == 1) { stop('Calibration must not be used with only one ensemble member.') } res <- Calibration(exp = exp_interpolated$data, obs = obs_ref, memb_dim = member_dim, - sdate_dim = sdate_dim, ...) + sdate_dim = sdate_dim, ncores = ncores, ...) } else if (bc_method == 'qm' | bc_method == 'quantile_mapping') { res <- QuantileMapping(exp = exp_interpolated$data, obs = obs_ref, na.rm = TRUE, - memb_dim = member_dim, sdate_dim = sdate_dim, ...) + memb_dim = member_dim, sdate_dim = sdate_dim, ncores = ncores, ...) } else if (bc_method == 'dbc' | bc_method == 'dynamical_bias') { # the temporal dimension must be only one dimension called "time" if (all(c(time_dim, sdate_dim) %in% names(dim(exp_interpolated$data)))) { exp_interpolated$data <- Apply(exp_interpolated$data, target_dims = c(time_dim, sdate_dim), - fun = as.vector, output_dims = "time")$output1 + fun = as.vector, output_dims = "time", ncores = ncores)$output1 } if (all(c(time_dim, sdate_dim) %in% names(dim(obs_ref)))) { obs_ref <- Apply(obs_ref, target_dims = c(time_dim, sdate_dim), fun = as.vector, - output_dims = "time")$output1 + output_dims = "time", ncores = ncores)$output1 } # REMEMBER to add na.rm = T in colMeans in .proxiesattractor - res <- DynBiasCorrection(exp = exp_interpolated$data, obs = obs_ref, ...) + res <- DynBiasCorrection(exp = exp_interpolated$data, obs = obs_ref, ncores = ncores, ...) } # Return a list of three elements @@ -322,7 +330,3 @@ Intbc <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, target_grid, return(res) } - - - - diff --git a/modules/Downscaling/tmp/Interpolation.R b/modules/Downscaling/tmp/Interpolation.R index 1599bf3b..e939e0c3 100644 --- a/modules/Downscaling/tmp/Interpolation.R +++ b/modules/Downscaling/tmp/Interpolation.R @@ -37,7 +37,8 @@ #'@param method_point_interp a character vector indicating the interpolation method to #'interpolate model gridded data into the point locations. Accepted methods are "nearest", #'"bilinear", "9point", "invdist4nn", "NE", "NW", "SE", "SW". -#' +#'@param ncores an integer indicating the number of cores to use in parallel computation. +#'The default value is NULL. #'@seealso \code{\link[s2dverification]{CDORemap}} #' #'@return An s2dv object containing the dowscaled field. @@ -52,7 +53,7 @@ #'@export CST_Interpolation <- function(exp, points = NULL, method_remap = NULL, target_grid = NULL, lat_dim = "lat", lon_dim = "lon", region = NULL, - method_point_interp = NULL) + method_point_interp = NULL, ncores = NULL) { if (!inherits(exp,'s2dv_cube')) { stop("Parameter 'exp' must be of the class 's2dv_cube'") @@ -70,7 +71,7 @@ CST_Interpolation <- function(exp, points = NULL, method_remap = NULL, target_gr res <- Interpolation(exp = exp$data, lats = exp$coords[[lat_dim]], lons = exp$coords[[lon_dim]], source_file = exp$attrs$source_files[1], points = points, method_remap = method_remap, target_grid = target_grid, lat_dim = lat_dim, - lon_dim = lon_dim, region = region, method_point_interp = method_point_interp) + lon_dim = lon_dim, region = region, method_point_interp = method_point_interp, ncores = ncores) # Modify data, lat and lon in the origina s2dv_cube, adding the downscaled data exp$data <- res$data @@ -129,6 +130,8 @@ CST_Interpolation <- function(exp, points = NULL, method_remap = NULL, target_gr #'interpolate model gridded data into the point locations. Accepted methods are "nearest", #'"bilinear", "9point", "invdist4nn", "NE", "NW", "SE", "SW". Only needed if the downscaling #'is to a point location. +#'@param ncores an integer indicating the number of cores to use in parallel computation. +#'The default value is NULL. #'@import multiApply #'@import plyr #'@importFrom s2dv CDORemap @@ -147,7 +150,7 @@ CST_Interpolation <- function(exp, points = NULL, method_remap = NULL, target_gr #'@export Interpolation <- function(exp, lats, lons, points = NULL, source_file = NULL, method_remap = NULL, target_grid = NULL, lat_dim = "lat", lon_dim = "lon", region = NULL, - method_point_interp = NULL) + method_point_interp = NULL, ncores = NULL) { if (!is.null(method_remap)) { if (!inherits(method_remap, 'character')) { @@ -232,7 +235,14 @@ Interpolation <- function(exp, lats, lons, points = NULL, source_file = NULL, me "be passed to CDO, and it must be a grid recognised by CDO or a NetCDF file.") } } - + ## ncores + if (!is.null(ncores)) { + if (!is.numeric(ncores) | any(ncores %% 1 != 0) | any(ncores < 0) | + length(ncores) > 1) { + stop("Parameter 'ncores' must be a positive integer.") + } + } + #---------------------------------- # Limits of the region defined by the model data #---------------------------------- @@ -256,12 +266,17 @@ Interpolation <- function(exp, lats, lons, points = NULL, source_file = NULL, me # Map regrid with CDO #---------------------------------- if (is.null(points)) { - res <- CDORemap(data_array = exp, - lats = lats, - lons = lons, - grid = target_grid, - method = method_remap, - crop = region) + + .KnownLonNames <- s2dv:::.KnownLonNames + .KnownLatNames <- s2dv:::.KnownLatNames + .warning <- s2dv:::.warning + + res <- CDORemap(data_array = exp, + lats = lats, + lons = lons, + grid = target_grid, + method = method_remap, + crop = region) # Return a list res <- list(data = res$data_array, obs = NULL, lon = res$lons, lat = res$lats) @@ -271,16 +286,16 @@ Interpolation <- function(exp, lats, lons, points = NULL, source_file = NULL, me #---------------------------------- } else { # First create interpolation weights, depending on the chosen method - weights <- create_interp_weights(ncfile = source_file, locids = 1:unique(lengths(points)), + weights <- .create_interp_weights(ncfile = source_file, locids = 1:unique(lengths(points)), lats = points[[lat_dim]], lons = points[[lon_dim]], method = method_point_interp, region = list(lat_min = region[3], lat_max = region[4], lon_min = region[1], lon_max = region[2])) # Select coarse-scale data to be interpolated - model_data_gridpoints <- get_model_data(weights.df = weights, mdata = exp) + model_data_gridpoints <- .get_model_data(weights.df = weights, mdata = exp, ncores = ncores) # Interpolate model data to point locations - res <- interpolate_data(model_data_gridpoints, weights) + res <- .interpolate_data(model_data_gridpoints, weights, ncores = ncores) # Return a list res <- list(data = res, obs = NULL, lon = points[[lon_dim]], lat = points[[lat_dim]]) @@ -293,7 +308,7 @@ Interpolation <- function(exp, lats, lons, points = NULL, source_file = NULL, me # Compute weights for interpolation at several (lat,lon) positions # We assume that grid boxes are centered in the grid point. #====================== -create_interp_weights <- function(ncfile, locids, lats, lons, region = NULL, +.create_interp_weights <- function(ncfile, locids, lats, lons, region = NULL, method = c("nearest", "bilinear", "9point", "invdist4nn", "NE", "NW", "SE", "SW")) { @@ -307,7 +322,7 @@ create_interp_weights <- function(ncfile, locids, lats, lons, region = NULL, #---------------- # Read grid description and compute (i,j) of requested locations (including decimals) #---------------- - griddes <- get_griddes(nc_cropped1) + griddes <- .get_griddes(nc_cropped1) if (is.null(griddes$yinc)) { system(paste0('rm ', nc_cropped1)) @@ -318,7 +333,7 @@ create_interp_weights <- function(ncfile, locids, lats, lons, region = NULL, # If latitudes are decreasingly ordered, revert them if (griddes$yinc < 0) { system(paste0('cdo invertlat ', nc_cropped1, ' ', nc_cropped2)) - griddes <- get_griddes(nc_cropped2) + griddes <- .get_griddes(nc_cropped2) } # remove temporary files system(paste0('rm ', nc_cropped1)) @@ -328,7 +343,7 @@ create_interp_weights <- function(ncfile, locids, lats, lons, region = NULL, stop("'griddes' not found in the NetCDF source files") } - gridpoints <- latlon2ij(griddes, lats, lons) + gridpoints <- .latlon2ij(griddes, lats, lons) #---------------- # Compute the weights according to the selected method @@ -573,7 +588,7 @@ create_interp_weights <- function(ncfile, locids, lats, lons, region = NULL, # Works only for 'lonlat' and 'gaussian' grids. # Grids are supposed to cover whole globe. #====================== -latlon2ij <- function(griddes, lats, lons) { +.latlon2ij <- function(griddes, lats, lons) { #------------ # Check input params #------------ @@ -623,7 +638,7 @@ latlon2ij <- function(griddes, lats, lons) { #====================== # Use cdo griddes to obtain grid information #====================== -get_griddes <- function(ncfile) { +.get_griddes <- function(ncfile) { tmp <- system(paste0("cdo griddes ", ncfile, " 2>/dev/null | egrep 'gridtype|xsize|ysize|xfirst|xinc|yfirst|yinc'"), intern = T) arr <- do.call(rbind, strsplit(tmp,"\\s+= ", perl = T)) @@ -631,7 +646,7 @@ get_griddes <- function(ncfile) { names(griddes) <- arr[,1] if(griddes$gridtype == "gaussian") { - griddes$yvals <- get_lats(ncfile) + griddes$yvals <- .get_lats(ncfile) } # Convert some fields to numeric. Ensures all fields are present. @@ -645,7 +660,7 @@ get_griddes <- function(ncfile) { #====================== # Use nco to obtain latitudes. Latitudes shall be named "lat" or "latitude". #====================== -get_lats <- function(ncfile) { +.get_lats <- function(ncfile) { tmp <- system(paste0('ncks -H -s "%f " -v latitude ',ncfile),intern=T) @@ -663,7 +678,7 @@ get_lats <- function(ncfile) { # Uses StartR. All ... parameters go to Start (i.e. specify dat, var, # sdate, time, ensemble, num_procs, etc) #====================== -get_model_data <- function(weights.df, mdata) { +.get_model_data <- function(weights.df, mdata, ncores = NULL) { #----------------- # Get data for all combinations of i and j. @@ -705,7 +720,9 @@ get_model_data <- function(weights.df, mdata) { #----------------- # Retrieve with multiApply #----------------- - sub_mdata <- Apply(mdata, target_dims = list(c(latdim, londim)), fun = function(x) {laply(1:length(is),function(k) { x[js[k],is[k]] }) })$output1 + sub_mdata <- Apply(mdata, target_dims = list(c(latdim, londim)), + fun = function(x) {laply(1:length(is),function(k) { x[js[k],is[k]] }) }, + ncores = ncores)$output1 names(dim(sub_mdata))[1] <- "gridpoint" #----------------- @@ -718,7 +735,7 @@ get_model_data <- function(weights.df, mdata) { # Multiply the grid-point series by the weights, # to obtain the desired interpolations #====================== -interpolate_data <- function(model_data, weights.df) { +.interpolate_data <- function(model_data, weights.df, ncores) { #----------------- # Multiply each gridpoint matrix by its corresponding weight #----------------- @@ -732,9 +749,8 @@ interpolate_data <- function(model_data, weights.df) { #interp_data <- apply(weighted_data, -gpdim, function(x) { rowsum(x, weights.df$locid) }) #names(dim(interp_data))[1] <- "location" interp_data <- Apply(weighted_data, target_dims = gpdim, fun = function(x) { - rowsum(x, weights.df$locid)}, output_dims = c("location", "aux"))$output1 + rowsum(x, weights.df$locid)}, output_dims = c("location", "aux"), + ncores = ncores)$output1 return(interp_data) } - - diff --git a/modules/Downscaling/tmp/Intlr.R b/modules/Downscaling/tmp/Intlr.R index b8bbf0fd..b4b8a75e 100644 --- a/modules/Downscaling/tmp/Intlr.R +++ b/modules/Downscaling/tmp/Intlr.R @@ -68,7 +68,7 @@ #'border, whereas latmax indicates the upper border. If set to NULL (default), the function #'takes the first and last elements of the latitudes and longitudes. #'@param ncores an integer indicating the number of cores to use in parallel computation. -#' +#'The default value is NULL. #'@import multiApply #' #'@return A list of three elements. 'data' contains the dowscaled field, 'lat' the @@ -89,16 +89,16 @@ CST_Intlr <- function(exp, obs, lr_method, target_grid = NULL, points = NULL, int_method = NULL, method_point_interp = NULL, predictors = NULL, lat_dim = "lat", lon_dim = "lon", sdate_dim = "sdate", time_dim = "time", member_dim = "member", - large_scale_predictor_dimname = 'vars', loocv = FALSE, region = NULL, ncores = 1) { - + large_scale_predictor_dimname = 'vars', loocv = FALSE, region = NULL, ncores = NULL) { + if (!inherits(exp,'s2dv_cube')) { stop("Parameter 'exp' must be of the class 's2dv_cube'") } - + if (!inherits(obs,'s2dv_cube')) { stop("Parameter 'obs' must be of the class 's2dv_cube'") } - + res <- Intlr(exp = exp$data, obs = obs$data, exp_lats = exp$coords[[lat_dim]], exp_lons = exp$coords[[lon_dim]], obs_lats = obs$coords[[lat_dim]], obs_lons = obs$coords[[lon_dim]], points = points, source_file_exp = exp$attrs$source_files[1], source_file_obs = obs$attrs$source_files[1], @@ -107,18 +107,18 @@ CST_Intlr <- function(exp, obs, lr_method, target_grid = NULL, points = NULL, in lat_dim = lat_dim, lon_dim = lon_dim, sdate_dim = sdate_dim, time_dim = time_dim, member_dim = member_dim, large_scale_predictor_dimname = large_scale_predictor_dimname, loocv = loocv, region = region, ncores = ncores) - + # Modify data, lat and lon in the origina s2dv_cube, adding the downscaled data exp$data <- res$data exp$dims <- dim(exp$data) exp$coords[[lon_dim]] <- res$lon exp$coords[[lat_dim]] <- res$lat - + obs$data <- res$obs obs$dims <- dim(obs$data) obs$coords[[lon_dim]] <- res$lon obs$coords[[lat_dim]] <- res$lat - + res_s2dv <- list(exp = exp, obs = obs) return(res_s2dv) } @@ -205,7 +205,7 @@ CST_Intlr <- function(exp, obs, lr_method, target_grid = NULL, points = NULL, in #'@param loocv a logical indicating whether to apply leave-one-out cross-validation when #'generating the linear regressions. Default to FALSE. #'@param ncores an integer indicating the number of cores to use in parallel computation. -#' +#'The default value is NULL. #'@import multiApply #' #'@return A list of three elements. 'data' contains the dowscaled field, 'lat' the @@ -226,68 +226,68 @@ Intlr <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, lr_method, t int_method = NULL, method_point_interp = NULL, source_file_exp = NULL, source_file_obs = NULL, predictors = NULL, lat_dim = "lat", lon_dim = "lon", sdate_dim = "sdate", time_dim = "time", member_dim = "member", region = NULL, large_scale_predictor_dimname = 'vars', loocv = FALSE, - ncores = 1) { - + ncores = NULL) { + #----------------------------------- # Checkings #----------------------------------- if (!inherits(lr_method, 'character')) { stop("Parameter 'lr_method' must be of the class 'character'") } - + if (!inherits(large_scale_predictor_dimname, 'character')) { stop("Parameter 'large_scale_predictor_dimname' must be of the class 'character'") } - + if (!inherits(loocv, 'logical')) { stop("Parameter 'loocv' must be set to TRUE or FALSE") } - + if (!inherits(lat_dim, 'character')) { stop("Parameter 'lat_dim' must be of the class 'character'") } - + if (!inherits(lon_dim, 'character')) { stop("Parameter 'lon_dim' must be of the class 'character'") } - + if (!inherits(sdate_dim, 'character')) { stop("Parameter 'sdate_dim' must be of the class 'character'") } - + if (!inherits(large_scale_predictor_dimname, 'character')) { stop("Parameter 'large_scale_predictor_dimname' must be of the class 'character'") } - + if (is.na(match(lon_dim, names(dim(exp)))) | is.na(match(lon_dim, names(dim(obs))))) { stop("Missing longitude dimension in 'exp' and/or 'obs', or does not match the parameter ", "'lon_dim'") } - + if (is.na(match(lat_dim, names(dim(exp)))) | is.na(match(lat_dim, names(dim(obs))))) { stop("Missing latitude dimension in 'exp' and/or 'obs', or does not match the parameter ", "'lat_dim'") } - + if (is.na(match(sdate_dim, names(dim(exp)))) | is.na(match(sdate_dim, names(dim(obs))))) { stop("Missing start date dimension in 'exp' and/or 'obs', or does not match the parameter ", "'sdate_dim'") } - + if (!is.null(points) & (is.null(source_file_exp) | is.null(source_file_obs))) { stop("No source files found. Source files for exp and obs must be provided in the parameters ", "'source_file_exp' and 'source_file_obs', respectively.") } - + if (!is.null(points) & is.null(method_point_interp)) { stop("Please provide the interpolation method to interpolate gridded data to point locations ", "through the parameter 'method_point_interp'.") } - + # sdate must be the time dimension in the input data stopifnot(sdate_dim %in% names(dim(exp))) stopifnot(sdate_dim %in% names(dim(obs))) - + # the code is not yet prepared to handle members in the observations restore_ens <- FALSE if (member_dim %in% names(dim(obs))) { @@ -299,7 +299,7 @@ Intlr <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, lr_method, t "but it should be of length = 1).") } } - + # checkings for the parametre 'predictors' if (!is.null(predictors)) { if (!is.array(predictors)) { @@ -311,29 +311,36 @@ Intlr <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, lr_method, t stopifnot(dim(predictors)[sdate_dim] == dim(exp)[sdate_dim]) } } - + ## ncores + if (!is.null(ncores)) { + if (!is.numeric(ncores) | any(ncores %% 1 != 0) | any(ncores < 0) | + length(ncores) > 1) { + stop("Parameter 'ncores' must be a positive integer.") + } + } + #----------------------------------- # Interpolation #----------------------------------- if (lr_method != '4nn') { - + if (is.null(int_method)) { stop("Parameter 'int_method' must be a character vector indicating the interpolation method. ", "Accepted methods are con, bil, bic, nn, con2") } - + if (is.null(region)) { warning("The borders of the downscaling region have not been provided. Assuming the ", "four borders of the downscaling region are defined by the first and last ", "elements of the parametres 'obs_lats' and 'obs_lons'.") region <- c(obs_lons[1], obs_lons[length(obs_lons)], obs_lats[1], obs_lats[length(obs_lats)]) } - + exp_interpolated <- Interpolation(exp = exp, lats = exp_lats, lons = exp_lons, target_grid = target_grid, points = points, method_point_interp = method_point_interp, source_file = source_file_exp, lat_dim = lat_dim, lon_dim = lon_dim, - method_remap = int_method, region = region) - + method_remap = int_method, region = region, ncores = ncores) + # If after interpolating 'exp' data the coordinates do not match, the obs data is interpolated to # the same grid to force the matching if ((!.check_coords(lat1 = exp_interpolated$lat, lat2 = obs_lats, @@ -341,8 +348,8 @@ Intlr <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, lr_method, t obs_interpolated <- Interpolation(exp = obs, lats = obs_lats, lons = obs_lons, target_grid = target_grid, points = points, method_point_interp = method_point_interp, source_file = source_file_obs, lat_dim = lat_dim, lon_dim = lon_dim, - method_remap = int_method, region = region) - + method_remap = int_method, region = region, ncores = ncores) + lats <- obs_interpolated$lat lons <- obs_interpolated$lon obs_interpolated <- obs_interpolated$data @@ -352,7 +359,7 @@ Intlr <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, lr_method, t lons <- obs_lons } } - + #----------------------------------- # Linear regressions #----------------------------------- @@ -366,7 +373,7 @@ Intlr <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, lr_method, t target_dims_predictor <- sdate_dim target_dims_predictand <- sdate_dim } - + # (Multi) linear regression with large-scale predictors # Predictor: passed through the parameter 'predictors' by the user. Can be model or observations # Predictand: model data @@ -374,27 +381,27 @@ Intlr <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, lr_method, t if (is.null(predictors)) { stop("The large-scale predictors must be passed through the parametre 'predictors'") } - + predictand <- obs_interpolated predictor <- predictors target_dims_predictor <- c(sdate_dim, large_scale_predictor_dimname) target_dims_predictand <- sdate_dim } - + # Multi-linear regression with the four nearest neighbours # Predictors: model data # Predictand: observations else if (lr_method == '4nn') { - predictor <- find_nn(coar = exp, lats_hres = obs_lats, lons_hres = obs_lons, lats_coar = exp_lats, - lons_coar = exp_lons, lat_dim = lat_dim, lon_dim = lon_dim, nn = 4) - + predictor <- .find_nn(coar = exp, lats_hres = obs_lats, lons_hres = obs_lons, lats_coar = exp_lats, + lons_coar = exp_lons, lat_dim = lat_dim, lon_dim = lon_dim, nn = 4, ncores = ncores) + if (is.null(points)) { if (!is.null(target_grid)) { warning("Interpolating to the 'obs' grid") } predictand <- obs - + lats <- obs_lats lons <- obs_lons } @@ -403,40 +410,40 @@ Intlr <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, lr_method, t else { predictor <- Interpolation(exp = predictor, lats = obs_lats, lons = obs_lons, target_grid = NULL, points = points, method_point_interp = method_point_interp, - source_file = source_file_obs, method_remap = NULL, region = region) - + source_file = source_file_obs, method_remap = NULL, region = region, ncores = ncores) + predictand <- Interpolation(exp = obs, lats = obs_lats, lons = obs_lons, target_grid = NULL, points = points, method_point_interp = method_point_interp, - source_file = source_file_obs, method_remap = NULL, region = region) - + source_file = source_file_obs, method_remap = NULL, region = region, ncores = ncores) + lats <- predictor$lat lons <- predictor$lon predictor <- predictor$data predictand <- predictand$data } - + target_dims_predictor <- c(sdate_dim,'nn') target_dims_predictand <- sdate_dim } - + else { stop(paste0(lr_method, " method is not implemented yet")) } - + # Apply the linear regressions res <- Apply(list(predictor, predictand), target_dims = list(target_dims_predictor, target_dims_predictand), fun = .intlr, loocv = loocv, ncores = ncores)$output1 - + names(dim(res))[1] <- sdate_dim - + # restore ensemble dimension in observations if it existed originally if (restore_ens) { predictand <- s2dv::InsertDim(predictand, posdim = 1, lendim = 1, name = member_dim) } - + # Return a list of three elements res <- list(data = res, obs = predictand, lon = lons, lat = lats) - + return(res) } @@ -444,20 +451,20 @@ Intlr <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, lr_method, t # Atomic function to generate and apply the linear regressions #----------------------------------- .intlr <- function(x, y, loocv) { - + tmp_df <- data.frame(x = x, y = y) # if the data is all NA, force return return NA if (all(is.na(tmp_df)) | (sum(apply(tmp_df, 2, function(x) !all(is.na(x)))) == 1)) { - + n <- nrow(tmp_df) res <- rep(NA, n) - + } else { # training - lm1 <- train_lm(df = tmp_df, loocv = loocv) + lm1 <- .train_lm(df = tmp_df, loocv = loocv) # prediction - res <- pred_lm(lm1 = lm1, df = tmp_df, loocv = loocv) + res <- .pred_lm(lm1 = lm1, df = tmp_df, loocv = loocv) } return(res) @@ -467,39 +474,39 @@ Intlr <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, lr_method, t # Function to generate the linear regressions. # Returns a list #----------------------------------- -train_lm <- function(df, loocv) { - +.train_lm <- function(df, loocv) { + # Remove predictor columns containing only NA's - df <- df[ , apply(df[,colnames(df) != 'y'], 2, function(x) !all(is.na(x)))] - + df <- df[ ,apply(as.matrix(df[,colnames(df) != 'y'],nrow(df),ncol(df)-1), 2, function(x) !all(is.na(x)))] + if (loocv) { - + lm1 <- lapply(1:nrow(df), function(j) { - if (all(is.na(df[-j,]$y))) { - return(NA) - } else { - return(lm(df[-j,], formula = y ~ .)) - }}) + if (all(is.na(df[-j,]$y))) { + return(NA) + } else { + return(lm(df[-j,], formula = y ~ .)) + }}) } else { - + lm1 <- ifelse(all(is.na(df$y)), NA, list(lm(data = df, formula = y ~ .))) } - + return(lm1) } #----------------------------------- # Function to apply the linear regressions. #----------------------------------- -pred_lm <- function(df, lm1, loocv) { - +.pred_lm <- function(df, lm1, loocv) { + if (loocv) { pred_vals <- sapply(1:nrow(df), function(j) { - if (all(is.na(lm1[[j]]))) { - return(NA) - } else { - return(predict(lm1[[j]], df[j,])) - }}) + if (all(is.na(lm1[[j]]))) { + return(NA) + } else { + return(predict(lm1[[j]], df[j,])) + }}) } else { if (!is.na(lm1)) { pred_vals_ls <- lapply(lm1, predict, data = df) @@ -515,21 +522,19 @@ pred_lm <- function(df, lm1, loocv) { # Function to find N nearest neighbours. # 'coar' is an array with named dimensions #----------------------------------- -find_nn <- function(coar, lats_hres, lons_hres, lats_coar, lons_coar, lat_dim, lon_dim, nn = 4) { - +.find_nn <- function(coar, lats_hres, lons_hres, lats_coar, lons_coar, lat_dim, lon_dim, nn = 4, ncores = NULL) { + # Sort the distances from closest to furthest idx_lat <- as.array(sapply(lats_hres, function(x) order(abs(lats_coar - x))[1:nn])) idx_lon <- as.array(sapply(lons_hres, function(x) order(abs(lons_coar - x))[1:nn])) - + names(dim(idx_lat)) <- c('nn', lat_dim) names(dim(idx_lon)) <- c('nn', lon_dim) - + # obtain the values of the nearest neighbours nearest <- Apply(list(coar, idx_lat, idx_lon), target_dims = list(c(lat_dim, lon_dim), lat_dim, lon_dim), - fun = function(x, y, z) x[y, z])$output1 - + fun = function(x, y, z) x[y, z], ncores = ncores)$output1 + return(nearest) } - - diff --git a/modules/Downscaling/tmp/LogisticReg.R b/modules/Downscaling/tmp/LogisticReg.R index c514d254..f569610f 100644 --- a/modules/Downscaling/tmp/LogisticReg.R +++ b/modules/Downscaling/tmp/LogisticReg.R @@ -62,8 +62,8 @@ #'takes the first and last elements of the latitudes and longitudes. #'@param loocv a logical vector indicating whether to perform leave-one-out cross-validation #'in the fitting of the logistic regression. Default to FALSE. -#'@param ncores an integer indicating the number of cores to use in parallel computation. -#' +#'@param ncores an integer indicating the number of cores to use in parallel computation. +#'The default value is NULL. #'@import multiApply #'@import nnet #'@importFrom laply plyr @@ -91,7 +91,7 @@ CST_LogisticReg <- function(exp, obs, target_grid, int_method = NULL, log_reg_method = "ens_mean", probs_cat = c(1/3,2/3), return_most_likely_cat = FALSE, points = NULL, method_point_interp = NULL, lat_dim = "lat", lon_dim = "lon", sdate_dim = "sdate", - member_dim = "member", region = NULL, loocv = FALSE, ncores = 1) { + member_dim = "member", region = NULL, loocv = FALSE, ncores = NULL) { if (!inherits(exp,'s2dv_cube')) { stop("Parameter 'exp' must be of the class 's2dv_cube'") @@ -198,8 +198,8 @@ CST_LogisticReg <- function(exp, obs, target_grid, int_method = NULL, log_reg_me #'takes the first and last elements of the latitudes and longitudes. #'@param loocv a logical vector indicating whether to perform leave-one-out cross-validation #'in the fitting of the logistic regression. Default to FALSE. -#'@param ncores an integer indicating the number of cores to use in parallel computation. -#' +#'@param ncores an integer indicating the number of cores to use in parallel computation. +#'The default value is NULL. #'@import multiApply #'@import nnet #'@importFrom laply plyr @@ -227,7 +227,7 @@ LogisticReg <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, target int_method = NULL, log_reg_method = "ens_mean", probs_cat = c(1/3,2/3), return_most_likely_cat = FALSE, points = NULL, method_point_interp = NULL, lat_dim = "lat", lon_dim = "lon", sdate_dim = "sdate", member_dim = "member", - source_file = NULL, region = NULL, loocv = FALSE, ncores = 1) { + source_file = NULL, region = NULL, loocv = FALSE, ncores = NULL) { #----------------------------------- # Checkings @@ -303,7 +303,14 @@ LogisticReg <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, target "'obs_lats' and 'obs_lons'.") region <- c(obs_lons[1], obs_lons[length(obs_lons)], obs_lats[1], obs_lats[length(obs_lats)]) } - + ## ncores + if (!is.null(ncores)) { + if (!is.numeric(ncores) | any(ncores %% 1 != 0) | any(ncores < 0) | + length(ncores) > 1) { + stop("Parameter 'ncores' must be a positive integer.") + } + } + # the code is not yet prepared to handle members in the observations restore_ens <- FALSE if (member_dim %in% names(dim(obs))) { @@ -319,18 +326,18 @@ LogisticReg <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, target exp_interpolated <- Interpolation(exp = exp, lats = exp_lats, lons = exp_lons, target_grid = target_grid, method_remap = int_method, points = points, source_file = source_file, lat_dim = lat_dim, lon_dim = lon_dim, method_point_interp = method_point_interp, - region = region) + region = region, ncores = ncores) # compute ensemble mean anomalies if (log_reg_method == "ens_mean") { - predictor <- get_ens_mean_anom(obj_ens = exp_interpolated$data, member_dim = member_dim, sdate_dim = sdate_dim) + predictor <- .get_ens_mean_anom(obj_ens = exp_interpolated$data, member_dim = member_dim, sdate_dim = sdate_dim, ncores = ncores) target_dims_predictor <- sdate_dim } else if (log_reg_method == "ens_mean_sd") { - ens_mean_anom <- get_ens_mean_anom(obj_ens = exp_interpolated$data, member_dim = member_dim, - sdate_dim = sdate_dim) - ens_sd <- get_ens_sd(obj_ens = exp_interpolated$data, member_dim = member_dim) + ens_mean_anom <- .get_ens_mean_anom(obj_ens = exp_interpolated$data, member_dim = member_dim, + sdate_dim = sdate_dim, ncores = ncores) + ens_sd <- .get_ens_sd(obj_ens = exp_interpolated$data, member_dim = member_dim, ncores = ncores) #merge two arrays into one array of predictors predictor <- abind(ens_mean_anom, ens_sd, along = 1/2) @@ -338,7 +345,7 @@ LogisticReg <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, target target_dims_predictor <- c(sdate_dim, "pred") } else if (log_reg_method == "sorted_members") { - predictor <- sort_members(obj_ens = exp_interpolated$data, member_dim = member_dim) + predictor <- .sort_members(obj_ens = exp_interpolated$data, member_dim = member_dim, ncores = ncores) target_dims_predictor <- c(sdate_dim, member_dim) } else { @@ -352,7 +359,7 @@ LogisticReg <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, target obs_interpolated <- Interpolation(exp = obs, lats = obs_lats, lons = obs_lons, target_grid = target_grid, method_remap = int_method, points = points, source_file = source_file, lat_dim = lat_dim, lon_dim = lon_dim, - method_point_interp = method_point_interp, region = region) + method_point_interp = method_point_interp, region = region, ncores = ncores) obs_ref <- obs_interpolated$data } else { obs_ref <- obs @@ -362,19 +369,19 @@ LogisticReg <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, target obs_cat <- Apply(obs_ref, target_dims = sdate_dim, function(x) { terc <- convert2prob(as.vector(x), prob = probs_cat) apply(terc, 1, function(r) which (r == 1))}, - output_dims = sdate_dim)$output1 + output_dims = sdate_dim, ncores = ncores)$output1 res <- Apply(list(predictor, obs_cat), target_dims = list(target_dims_predictor, sdate_dim), fun = function(x, y) - .log_reg(x = x, y = y, loocv = loocv), output_dims = c(sdate_dim, "category"))$output1 + .log_reg(x = x, y = y, loocv = loocv), output_dims = c(sdate_dim, "category"), ncores = ncores)$output1 if (return_most_likely_cat) { - res <- Apply(res, target_dims = c(sdate_dim, "category"), most_likely_category, - output_dims = sdate_dim)$output1 + res <- Apply(res, target_dims = c(sdate_dim, "category"), .most_likely_category, + output_dims = sdate_dim, ncores = ncores)$output1 } # restore ensemble dimension in observations if it existed originally if (restore_ens) { - obs_ref <- s2dv::InsertDim(obs_ref, posdim = 1, lendim = 1, name = member_dim) + obs_ref <- s2dv::InsertDim(obs_ref, posdim = 1, lendim = 1, name = member_dim, ncores = ncores) } res <- list(data = res, obs = obs_ref, lon = exp_interpolated$lon, lat = exp_interpolated$lat) @@ -382,7 +389,7 @@ LogisticReg <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, target return(res) } -most_likely_category <- function(data) { +.most_likely_category <- function(data) { # data, expected dims: start date, category (in this order) if (all(is.na(data))) { @@ -393,39 +400,39 @@ most_likely_category <- function(data) { return(mlc) } -sort_members <- function(obj_ens, member_dim) { +.sort_members <- function(obj_ens, member_dim, ncores = NULL) { - sorted <- Apply(obj_ens, target_dims = member_dim, sort, decreasing = TRUE, na.last = TRUE)$output1 + sorted <- Apply(obj_ens, target_dims = member_dim, sort, decreasing = TRUE, na.last = TRUE, ncores = ncores)$output1 return(sorted) } -get_ens_sd <- function(obj_ens, member_dim) { +.get_ens_sd <- function(obj_ens, member_dim, ncores = NULL) { # compute ensemble spread - ens_sd <- Apply(obj_ens, target_dims = member_dim, sd, na.rm = TRUE)$output1 + ens_sd <- Apply(obj_ens, target_dims = member_dim, sd, na.rm = TRUE, ncores = ncores)$output1 return(ens_sd) } -get_ens_mean_anom <- function(obj_ens, member_dim, sdate_dim) { +.get_ens_mean_anom <- function(obj_ens, member_dim, sdate_dim, ncores = NULL) { require(s2dv) # compute climatology - clim <- Apply(obj_ens, target_dims = c(member_dim, sdate_dim), mean)$output1 + clim <- Apply(obj_ens, target_dims = c(member_dim, sdate_dim), mean, ncores = ncores)$output1 # compute ensemble mean - ens_mean <- Apply(obj_ens, target_dims = member_dim, mean, na.rm = TRUE)$output1 + ens_mean <- Apply(obj_ens, target_dims = member_dim, mean, na.rm = TRUE, ncores = ncores)$output1 # compute ensemble mean anomalies - anom <- Ano(ens_mean, clim) + anom <- Ano(ens_mean, clim, ncores = ncores) return(anom) } # atomic functions for logistic regressions -.log_reg <- function(x, y, loocv) { +.log_reg <- function(x, y, loocv,probs_cat) { tmp_df <- data.frame(x = x, y = y) @@ -437,10 +444,10 @@ get_ens_mean_anom <- function(obj_ens, member_dim, sdate_dim) { } else { # training - lm1 <- train_lr(df = tmp_df, loocv = loocv) + lm1 <- .train_lr(df = tmp_df, loocv = loocv) # prediction - res <- pred_lr(lm1 = lm1, df = tmp_df, loocv = loocv) + res <- pred_lr(lm1 = lm1, df = tmp_df, loocv = loocv,probs_cat=probs_cat) } return(res) } @@ -448,7 +455,7 @@ get_ens_mean_anom <- function(obj_ens, member_dim, sdate_dim) { #----------------------------------- # Function to train the logistic regressions. #----------------------------------- -train_lr <- function(df, loocv) { +.train_lr <- function(df, loocv) { require(nnet) @@ -457,11 +464,11 @@ train_lr <- function(df, loocv) { if (loocv) { - lm1 <- lapply(1:nrow(df), function(j) multinom(y ~ ., data = df[ -j, ])) + lm1 <- lapply(1:nrow(df), function(j) ifelse(length(unique(df[-j,]$y))==1,NA,return(multinom(y ~ ., data = df[ -j, ])))) ## if all the observed categories are the same for the corresponding loocv step, assign NA to the relevant lm1 element. } else { - lm1 <- list(multinom(y ~ ., data = df)) + lm1 <- ifelse(length(unique(df$y))==1,list(NA),list(multinom(y ~ ., data = df))) } @@ -471,7 +478,7 @@ train_lr <- function(df, loocv) { #----------------------------------- # Function to apply the logistic regressions. #----------------------------------- -pred_lr <- function(df, lm1, loocv) { +pred_lr <- function(df, lm1, loocv,probs_cat) { require(plyr) @@ -479,22 +486,58 @@ pred_lr <- function(df, lm1, loocv) { # The error: "Error: Results must have the same dimensions." can # appear when the number of sdates is insufficient - pred_vals_ls <- list() - for (j in 1:nrow(df)) { - pred_vals_ls[[j]] <- predict(lm1[[j]], df[j,], type = "probs") + + pred_vals_ls <-list() + for (j in 1:nrow(df)) { + if(length(unique(df[-j,]$y))==1) + { + pred_vals_ls[[j]] <-NA ## if all the observed categories are the same for the corresponding loocv step, assign NA as predicted class (we need this step for the two-class cases. predict.multinom function provides the probability for the second category for two-class examples.we can obtain the prob of the first categort by 1-prob of second category) + } else{ + pred_vals_ls[[j]] <- predict(lm1[[j]], df[j,], type = "probs") + } } - + pred_vals <- laply(pred_vals_ls, .fun = as.array) + + if( length(probs_cat)+1==2) + { + + if (any(is.na(pred_vals))) ### if all the observed categories are the same for the corresponding loocv step, assign 100% probability to the observed categories for the relevant prediction. + { + ifelse(names(which.max(table(df$y)))==1,pred_vals[is.na(pred_vals)]<-0, + pred_vals[is.na(pred_vals)]<-1) + } + pred_vals_dum<-array(NA,dim=c(nrow(df),2)) + pred_vals_dum[,2]<-pred_vals + pred_vals_dum[,1]<-1-pred_vals + pred_vals<-pred_vals_dum + colnames(pred_vals)<-c(1,2) + } - } else { + } else { # type = class, probs #pred_vals_ls <- lapply(lm1, predict, data = df, type = "probs") #pred_vals <- unlist(pred_vals_ls) pred_vals <- predict(lm1[[1]], df, type = "probs") + + if( length(probs_cat)+1==2) + { + + if (any(is.na(pred_vals))) ### if all the observed categories are the same for the corresponding loocv step, assign 100% probability to the observed categories for the relevant prediction. + { + ifelse(names(which.max(table(df$y)))==1,pred_vals[is.na(pred_vals)]<-0, + pred_vals[is.na(pred_vals)]<-1) + } + + pred_vals_dum<-array(NA,dim=c(nrow(df),2)) + pred_vals_dum[,2]<-pred_vals + pred_vals_dum[,1]<-1-pred_vals + pred_vals<-pred_vals_dum + colnames(pred_vals)<-c(1,2) + } + } return(pred_vals) } - - diff --git a/modules/Downscaling/tmp/Utils.R b/modules/Downscaling/tmp/Utils.R index 4c727465..d332aa3c 100644 --- a/modules/Downscaling/tmp/Utils.R +++ b/modules/Downscaling/tmp/Utils.R @@ -1,8 +1,9 @@ .check_coords <- function(lat1, lon1, lat2, lon2) { - match <- TRUE - if (!((length(lat1) == length(lat2)) & (length(lon1) == length(lon2)))) { + if (all(lat1 == lat2) & all(lon1 == lon2)) { + match <- TRUE + } else { match <- FALSE - } + } return(match) } @@ -28,4 +29,11 @@ return(Reorder(data = arr_to_reorder, order = orddim)) } +#.check_coords <- function(lat1, lon1, lat2, lon2) { +# match <- TRUE +# if (!((length(lat1) == length(lat2)) & (length(lon1) == length(lon2)))) { +# match <- FALSE +# } +# return(match) +#} -- GitLab From 5da8e014fde180561974363d8476b7cba99b6bde Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Fri, 21 Apr 2023 15:45:59 +0200 Subject: [PATCH 143/388] Fix long name change in s2dv_cube after anomaly computation --- modules/Anomalies/Anomalies.R | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/Anomalies/Anomalies.R b/modules/Anomalies/Anomalies.R index 06f955a8..707790e9 100644 --- a/modules/Anomalies/Anomalies.R +++ b/modules/Anomalies/Anomalies.R @@ -48,10 +48,10 @@ compute_anomalies <- function(recipe, data) { for (var in data$hcst$attrs$Variable$varName) { # Change hcst longname data$hcst$attrs$Variable$variables[[var]]$long_name <- - paste(data$hcst$attrs$Variable$variables[[var]]$long_name, "anomaly") + paste(data$hcst$attrs$Variable$metadata[[var]]$long_name, "anomaly") # Change obs longname data$obs$attrs$Variable$variables[[var]]$long_name <- - paste(data$obs$attrs$Variable$variables[[var]]$long_name, "anomaly") + paste(data$obs$attrs$Variable$metadata[[var]]$long_name, "anomaly") } # Compute forecast anomaly field if (!is.null(data$fcst)) { @@ -73,8 +73,8 @@ compute_anomalies <- function(recipe, data) { data$fcst$data <- data$fcst$data - clim_hcst # Change metadata for (var in data$fcst$attrs$Variable$varName) { - data$fcst$attrs$Variable$variables[[var]]$long_name <- - paste(data$fcst$attrs$Variable$variables[[var]]$long_name, "anomaly") + data$fcst$attrs$Variable$metadata[[var]]$long_name <- + paste(data$fcst$attrs$Variable$metadata[[var]]$long_name, "anomaly") } } -- GitLab From 1f95599a3ab97f9412e19f1af7d07bae2178bbc6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pierre-Antoine=20Bretonni=C3=A8re?= Date: Mon, 24 Apr 2023 14:27:33 +0200 Subject: [PATCH 144/388] Add shiny server dependencies --- conda_installation/environment-cerise.yml | 21 ++++++++++++++++++++- conda_installation/load_cerise.bash | 4 +++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/conda_installation/environment-cerise.yml b/conda_installation/environment-cerise.yml index d3eedd56..44a0e719 100644 --- a/conda_installation/environment-cerise.yml +++ b/conda_installation/environment-cerise.yml @@ -153,7 +153,7 @@ dependencies: - nspr=4.35=h27087fc_0 - nss=3.89=he45b914_0 - numpy=1.21.6=py37h976b520_0 - - openssl=3.1.0=h0b41bf4_0 + - openssl=3.1.0=hd590300_1 - packaging=23.0=pyhd8ed1ab_0 - pandas=1.3.5=py37he8f5f7f_0 - pango=1.50.14=hd33c08f_0 @@ -183,9 +183,12 @@ dependencies: - r-abind=1.4_5=r42hc72bb7e_1004 - r-assertthat=0.2.1=r42hc72bb7e_3 - r-base=4.2.3=ha7d60f8_0 + - r-base64enc=0.1_3=r42h06615bd_1005 - r-bigmemory=4.6.1=r42h7525677_1 - r-bigmemory.sri=0.1.6=r42hc72bb7e_0 - r-brio=1.1.3=r42h76d94ec_0 + - r-bslib=0.4.2=r42hc72bb7e_0 + - r-cachem=1.0.7=r42h133d619_0 - r-callr=3.7.0=r42h6115d3f_0 - r-cli=3.6.0=r42h38f115c_0 - r-climdex.pcic=1.1_11=r42h7525677_1 @@ -193,6 +196,7 @@ dependencies: - r-clock=0.6.1=r42h7525677_1 - r-codetools=0.2_19=r42hc72bb7e_0 - r-colorspace=2.1_0=r42h133d619_0 + - r-commonmark=1.9.0=r42h133d619_0 - r-configr=0.3.5=r42hc72bb7e_0 - r-cpp11=0.4.3=r42hc72bb7e_0 - r-crayon=1.5.2=r42hc72bb7e_1 @@ -207,8 +211,11 @@ dependencies: - r-evaluate=0.15=r42h6115d3f_0 - r-fansi=1.0.4=r42h133d619_0 - r-farver=2.1.1=r42h7525677_1 + - r-fastmap=1.1.1=r42h38f115c_0 - r-fields=14.1=r42hac0b197_1 + - r-fontawesome=0.5.1=r42hc72bb7e_0 - r-foreach=1.5.2=r42hc72bb7e_1 + - r-fs=1.6.1=r42h38f115c_0 - r-future=1.32.0=r42hc72bb7e_0 - r-generics=0.1.2=r42h142f84f_0 - r-geomap=2.5_0=r42h06615bd_1 @@ -219,11 +226,15 @@ dependencies: - r-gribr=1.2.4=r42h9ecb321_2 - r-gridextra=2.3=r42hc72bb7e_1004 - r-gtable=0.3.3=r42hc72bb7e_0 + - r-htmltools=0.5.5=r42h38f115c_0 + - r-httpuv=1.6.9=r42h38f115c_0 - r-ini=0.3.1=r42hc72bb7e_1004 - r-isoband=0.2.7=r42h38f115c_1 - r-iterators=1.0.14=r42hc72bb7e_1 + - r-jquerylib=0.1.4=r42hc72bb7e_1 - r-jsonlite=1.8.0=r42h76d94ec_0 - r-labeling=0.4.2=r42hc72bb7e_2 + - r-later=1.3.0=r42h7525677_1 - r-lattice=0.20_45=r42h06615bd_1 - r-lifecycle=1.0.3=r42hc72bb7e_1 - r-listenv=0.9.0=r42hc72bb7e_0 @@ -236,7 +247,9 @@ dependencies: - r-mass=7.3_58.3=r42h133d619_0 - r-matrix=1.5_3=r42h5f7b363_0 - r-mba=0.1_0=r42h7525677_0 + - r-memoise=2.0.1=r42hc72bb7e_1 - r-mgcv=1.8_42=r42he1ae0d6_0 + - r-mime=0.12=r42h06615bd_1 - r-multiapply=2.1.3=r42hc72bb7e_1 - r-munsell=0.5.0=r42hc72bb7e_1005 - r-nbclust=3.0.1=r42hc72bb7e_1 @@ -253,9 +266,11 @@ dependencies: - r-prettyunits=1.1.1=r42hc72bb7e_2 - r-processx=3.5.3=r42h76d94ec_0 - r-proj4=1.0_12=r42h66e2efa_1 + - r-promises=1.2.0.1=r42h7525677_1 - r-pryr=0.1.6=r42h38f115c_0 - r-ps=1.7.0=r42h76d94ec_0 - r-r6=2.5.1=r42hc72bb7e_1 + - r-rappdirs=0.3.3=r42h06615bd_1 - r-rcolorbrewer=1.1_3=r42h785f33e_1 - r-rcpp=1.0.10=r42h38f115c_0 - r-rcpparmadillo=0.11.4.4.0=r42h358215d_0 @@ -267,7 +282,10 @@ dependencies: - r-rstudioapi=0.13=r42h6115d3f_0 - r-s2dv=1.4.0=r42hc72bb7e_0 - r-s2dverification=2.10.3=r42hc72bb7e_1 + - r-sass=0.4.5=r42h38f115c_0 - r-scales=1.2.1=r42hc72bb7e_1 + - r-shiny=1.7.4=r42h785f33e_0 + - r-sourcetools=0.1.7_1=r42h38f115c_0 - r-sp=1.6_0=r42h133d619_0 - r-spam=2.9_1=r42hb20cf53_1 - r-specsverification=0.5_3=r42h7525677_2 @@ -285,6 +303,7 @@ dependencies: - r-viridislite=0.4.1=r42hc72bb7e_1 - r-waldo=0.4.0=r42h6115d3f_0 - r-withr=2.5.0=r42hc72bb7e_1 + - r-xtable=1.8_4=r42hc72bb7e_4 - r-yaml=2.3.7=r42h133d619_0 - readline=8.1.2=h0f457ee_0 - requests=2.28.2=pyhd8ed1ab_0 diff --git a/conda_installation/load_cerise.bash b/conda_installation/load_cerise.bash index 2247baf4..5d5bb83c 100755 --- a/conda_installation/load_cerise.bash +++ b/conda_installation/load_cerise.bash @@ -8,4 +8,6 @@ else conda env create --file environment-cerise.yml --prefix $prefix fi conda activate condaCerise -R -e "options(timeout = 600) ; install.packages('CSTools', repos='https://ftp.cixug.es/CRAN/')" +R -e "options(timeout = 600) ; install.packages('CSTools', repos='https://ftp.cixug.es/CRAN/')" + +#conda env export > environment-cerise.yml -- GitLab From 2aedbb73fdf9c9b9cbad6ecf902ab30b25f8525d Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Wed, 26 Apr 2023 15:29:48 +0200 Subject: [PATCH 145/388] Fix bug in observation replication for multi-model case --- modules/Calibration/Calibration.R | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/Calibration/Calibration.R b/modules/Calibration/Calibration.R index 899b1291..2b6e18ab 100644 --- a/modules/Calibration/Calibration.R +++ b/modules/Calibration/Calibration.R @@ -42,12 +42,12 @@ calibrate_datasets <- function(recipe, data) { # Replicate observation array for the multi-model case ## TODO: Implement for obs.full_val if (mm) { - obs.mm <- obs$data + obs.mm <- data$obs$data for(dat in 1:(dim(data$hcst$data)['dat'][[1]]-1)) { obs.mm <- abind(obs.mm, data$obs$data, - along=which(names(dim(data$obs$data)) == 'dat')) + along=which(names(dim(data$obs$data)) == 'dat')) } - names(dim(obs.mm)) <- names(dim(obs$data)) + names(dim(obs.mm)) <- names(data$obs$dims) data$obs$data <- obs.mm remove(obs.mm) } -- GitLab From a9583282c5d8f56169cdb0ff6df54cb2b5f553c6 Mon Sep 17 00:00:00 2001 From: vagudets Date: Wed, 26 Apr 2023 16:22:55 +0200 Subject: [PATCH 146/388] Change the recipe and the structure of the Saving module to allow choice and save each module output separately --- modules/Anomalies/Anomalies.R | 64 +- modules/Anomalies/tmp/CST_Anomaly.R | 246 ------ modules/Calibration/Calibration.R | 129 +-- modules/Loading/Loading.R | 156 ++-- modules/Saving/R/Utils.R | 69 ++ modules/Saving/R/get_dir.R | 57 ++ .../Saving/{paths2save.R => R/get_filename.R} | 56 +- modules/Saving/R/save_corr.R | 117 +++ modules/Saving/R/save_forecast.R | 137 +++ modules/Saving/R/save_metrics.R | 119 +++ modules/Saving/R/save_observations.R | 137 +++ modules/Saving/R/save_percentiles.R | 107 +++ modules/Saving/R/save_probabilities.R | 124 +++ modules/Saving/Saving.R | 827 +----------------- modules/Skill/Skill.R | 285 +++--- modules/Visualization/R/plot_ensemble_mean.R | 89 ++ .../R/plot_most_likely_terciles_map.R | 88 ++ modules/Visualization/R/plot_skill_metrics.R | 162 ++++ modules/Visualization/Visualization.R | 400 +-------- modules/test_seasonal.R | 2 +- recipes/atomic_recipes/recipe_decadal.yml | 6 + .../atomic_recipes/recipe_system5c3s-tas.yml | 7 + .../atomic_recipes/recipe_system7c3s-prlr.yml | 8 +- .../atomic_recipes/recipe_system7c3s-tas.yml | 6 + recipes/recipe_decadal_split.yml | 8 +- recipes/recipe_splitting_example.yml | 7 + recipes/tests/recipe_autosubmit_marstest.yml | 6 + recipes/tests/recipe_multiregion.yml | 6 + recipes/tests/recipe_seasonal_example.yml | 6 + .../tests/recipe_seasonal_two-variables.yml | 6 + tests/recipes/recipe-decadal_daily_1.yml | 6 +- tests/recipes/recipe-decadal_monthly_1.yml | 10 +- tests/recipes/recipe-decadal_monthly_1b.yml | 8 +- tests/recipes/recipe-decadal_monthly_2.yml | 6 + tests/recipes/recipe-decadal_monthly_3.yml | 6 +- tests/recipes/recipe-seasonal_daily_1.yml | 3 + tests/recipes/recipe-seasonal_monthly_1.yml | 12 +- tests/testthat/test-decadal_daily_1.R | 2 +- tests/testthat/test-decadal_monthly_1.R | 33 +- tests/testthat/test-decadal_monthly_2.R | 22 +- tests/testthat/test-decadal_monthly_3.R | 2 +- tests/testthat/test-seasonal_daily.R | 2 +- tests/testthat/test-seasonal_monthly.R | 17 +- .../check_number_of_dependent_verifications.R | 134 +++ tools/check_recipe.R | 324 +++---- tools/data_summary.R | 4 +- tools/prepare_outputs.R | 12 +- tools/read_atomic_recipe.R | 2 +- tools/write_autosubmit_conf.R | 42 +- 49 files changed, 2066 insertions(+), 2018 deletions(-) delete mode 100644 modules/Anomalies/tmp/CST_Anomaly.R create mode 100644 modules/Saving/R/Utils.R create mode 100644 modules/Saving/R/get_dir.R rename modules/Saving/{paths2save.R => R/get_filename.R} (50%) create mode 100644 modules/Saving/R/save_corr.R create mode 100644 modules/Saving/R/save_forecast.R create mode 100644 modules/Saving/R/save_metrics.R create mode 100644 modules/Saving/R/save_observations.R create mode 100644 modules/Saving/R/save_percentiles.R create mode 100644 modules/Saving/R/save_probabilities.R create mode 100644 modules/Visualization/R/plot_ensemble_mean.R create mode 100644 modules/Visualization/R/plot_most_likely_terciles_map.R create mode 100644 modules/Visualization/R/plot_skill_metrics.R create mode 100644 tools/check_number_of_dependent_verifications.R diff --git a/modules/Anomalies/Anomalies.R b/modules/Anomalies/Anomalies.R index 707790e9..97ce1f51 100644 --- a/modules/Anomalies/Anomalies.R +++ b/modules/Anomalies/Anomalies.R @@ -1,5 +1,3 @@ -source("modules/Anomalies/tmp/CST_Anomaly.R") - # Compute the hcst, obs and fcst anomalies with or without cross-validation # and return them, along with the hcst and obs climatologies. @@ -7,8 +5,8 @@ compute_anomalies <- function(recipe, data) { if (is.null(recipe$Analysis$Workflow$Anomalies$compute)) { error(recipe$Run$logger, - paste("The anomaly module has been called, but the element", - "'Workflow:Anomalies:compute' is missing from the recipe.")) + paste("The anomaly module has been called, but the element", + "'Workflow:Anomalies:compute' is missing from the recipe.")) stop() } @@ -24,13 +22,13 @@ compute_anomalies <- function(recipe, data) { # Compute anomalies anom <- CST_Anomaly(data$hcst, data$obs, - cross = cross, - memb = TRUE, - memb_dim = 'ensemble', - dim_anom = 'syear', - dat_dim = c('dat', 'ensemble'), - ftime_dim = 'time', - ncores = recipe$Analysis$ncores) + cross = cross, + memb = TRUE, + memb_dim = 'ensemble', + dim_anom = 'syear', + dat_dim = c('dat', 'ensemble'), + ftime_dim = 'time', + ncores = recipe$Analysis$ncores) # Reorder dims anom$exp$data <- Reorder(anom$exp$data, names(original_dims)) anom$obs$data <- Reorder(anom$obs$data, names(original_dims)) @@ -57,12 +55,12 @@ compute_anomalies <- function(recipe, data) { if (!is.null(data$fcst)) { # Compute hindcast climatology ensemble mean clim <- s2dv::Clim(hcst_fullvalue$data, obs_fullvalue$data, - time_dim = "syear", - dat_dim = c("dat", "ensemble"), - memb = FALSE, - memb_dim = "ensemble", - ftime_dim = "time", - ncores = recipe$Analysis$ncores) + time_dim = "syear", + dat_dim = c("dat", "ensemble"), + memb = FALSE, + memb_dim = "ensemble", + ftime_dim = "time", + ncores = recipe$Analysis$ncores) clim_hcst <- InsertDim(clim$clim_exp, posdim = 1, lendim = 1, name = "syear") dims <- dim(clim_hcst) @@ -79,24 +77,38 @@ compute_anomalies <- function(recipe, data) { } info(recipe$Run$logger, - paste("The anomalies have been computed,", cross_msg, - "cross-validation. The original full fields are returned as", - "$hcst.full_val and $obs.full_val.")) + paste("The anomalies have been computed,", cross_msg, + "cross-validation. The original full fields are returned as", + "$hcst.full_val and $obs.full_val.")) info(recipe$Run$logger, "##### ANOMALIES COMPUTED SUCCESSFULLY #####") - + # Save outputs + recipe$Run$output_dir <- paste0(recipe$Run$output_dir, + "/outputs/Anomalies/") + # Save forecast + if (recipe$Analysis$Workflow$Anomalies$save %in% + c('all', 'exp_only', 'fcst_only')) { + save_forecast(recipe = recipe, data_cube = data$fcst, type = 'fcst') + } + # Save hindcast + if (recipe$Analysis$Workflow$Anomalies$save %in% + c('all', 'exp_only')) { + save_forecast(recipe = recipe, data_cube = data$hcst, type = 'hcst') + } + # Save observation + if (recipe$Analysis$Workflow$Anomalies$save == 'all') { + save_observations(recipe = recipe, data_cube = data$obs) + } } else { warn(recipe$Run$logger, paste("The Anomalies module has been called, but", - "recipe parameter Analysis:Variables:anomaly is set to FALSE.", - "The full fields will be returned.")) + "recipe parameter Analysis:Variables:anomaly is set to FALSE.", + "The full fields will be returned.")) hcst_fullvalue <- NULL obs_fullvalue <- NULL info(recipe$Run$logger, "##### ANOMALIES NOT COMPUTED #####") } - ## TODO: Return fcst full value? - return(list(hcst = data$hcst, obs = data$obs, fcst = data$fcst, - hcst.full_val = hcst_fullvalue, obs.full_val = obs_fullvalue)) + hcst.full_val = hcst_fullvalue, obs.full_val = obs_fullvalue)) } diff --git a/modules/Anomalies/tmp/CST_Anomaly.R b/modules/Anomalies/tmp/CST_Anomaly.R deleted file mode 100644 index f38e39b0..00000000 --- a/modules/Anomalies/tmp/CST_Anomaly.R +++ /dev/null @@ -1,246 +0,0 @@ -#'Anomalies relative to a climatology along selected dimension with or without cross-validation -#' -#'@author Perez-Zanon Nuria, \email{nuria.perez@bsc.es} -#'@author Pena Jesus, \email{jesus.pena@bsc.es} -#'@description This function computes the anomalies relative to a climatology -#'computed along the selected dimension (usually starting dates or forecast -#'time) allowing the application or not of crossvalidated climatologies. The -#'computation is carried out independently for experimental and observational -#'data products. -#' -#'@param exp An object of class \code{s2dv_cube} as returned by \code{CST_Load} -#' function, containing the seasonal forecast experiment data in the element -#' named \code{$data}. -#'@param obs An object of class \code{s2dv_cube} as returned by \code{CST_Load} -#' function, containing the observed data in the element named \code{$data}. -#'@param dim_anom A character string indicating the name of the dimension -#' along which the climatology will be computed. The default value is 'sdate'. -#'@param cross A logical value indicating whether cross-validation should be -#' applied or not. Default = FALSE. -#'@param memb_dim A character string indicating the name of the member -#' dimension. It must be one dimension in 'exp' and 'obs'. If there is no -#' member dimension, set NULL. The default value is 'member'. -#'@param memb A logical value indicating whether to subtract the climatology -#' based on the individual members (TRUE) or the ensemble mean over all -#' members (FALSE) when calculating the anomalies. The default value is TRUE. -#'@param dat_dim A character vector indicating the name of the dataset and -#' member dimensions. If there is no dataset dimension, it can be NULL. -#' The default value is "c('dataset', 'member')". -#'@param filter_span A numeric value indicating the degree of smoothing. This -#' option is only available if parameter \code{cross} is set to FALSE. -#'@param ftime_dim A character string indicating the name of the temporal -#' dimension where the smoothing with 'filter_span' will be applied. It cannot -#' be NULL if 'filter_span' is provided. The default value is 'ftime'. -#'@param ncores An integer indicating the number of cores to use for parallel -#' computation. The default value is NULL. It will be used only when -#' 'filter_span' is not NULL. -#' -#'@return A list with two S3 objects, 'exp' and 'obs', of the class -#''s2dv_cube', containing experimental and date-corresponding observational -#'anomalies, respectively. These 's2dv_cube's can be ingested by other functions -#'in CSTools. -#' -#'@examples -#'# Example 1: -#'mod <- 1 : (2 * 3 * 4 * 5 * 6 * 7) -#'dim(mod) <- c(dataset = 2, member = 3, sdate = 4, ftime = 5, lat = 6, lon = 7) -#'obs <- 1 : (1 * 1 * 4 * 5 * 6 * 7) -#'dim(obs) <- c(dataset = 1, member = 1, sdate = 4, ftime = 5, lat = 6, lon = 7) -#'lon <- seq(0, 30, 5) -#'lat <- seq(0, 25, 5) -#'exp <- list(data = mod, lat = lat, lon = lon) -#'obs <- list(data = obs, lat = lat, lon = lon) -#'attr(exp, 'class') <- 's2dv_cube' -#'attr(obs, 'class') <- 's2dv_cube' -#' -#'anom <- CST_Anomaly(exp = exp, obs = obs, cross = FALSE, memb = TRUE) -#' -#'@seealso \code{\link[s2dv]{Ano_CrossValid}}, \code{\link[s2dv]{Clim}} and \code{\link{CST_Load}} -#' -#'@import multiApply -#'@importFrom s2dv InsertDim Clim Ano_CrossValid Reorder -#'@export -CST_Anomaly <- function(exp = NULL, obs = NULL, dim_anom = 'sdate', cross = FALSE, - memb_dim = 'member', memb = TRUE, dat_dim = c('dataset', 'member'), - filter_span = NULL, ftime_dim = 'ftime', ncores = NULL) { - # s2dv_cube - if (!inherits(exp, 's2dv_cube') & !is.null(exp) || - !inherits(obs, 's2dv_cube') & !is.null(obs)) { - stop("Parameter 'exp' and 'obs' must be of the class 's2dv_cube', ", - "as output by CSTools::CST_Load.") - } - # exp and obs - if (is.null(exp$data) & is.null(obs$data)) { - stop("One of the parameter 'exp' or 'obs' cannot be NULL.") - } - case_exp = case_obs = 0 - if (is.null(exp)) { - exp <- obs - case_obs = 1 - warning("Parameter 'exp' is not provided and 'obs' will be used instead.") - } - if (is.null(obs)) { - obs <- exp - case_exp = 1 - warning("Parameter 'obs' is not provided and 'exp' will be used instead.") - } - if(any(is.null(names(dim(exp$data))))| any(nchar(names(dim(exp$data))) == 0) | - any(is.null(names(dim(obs$data))))| any(nchar(names(dim(obs$data))) == 0)) { - stop("Parameter 'exp' and 'obs' must have dimension names in element 'data'.") - } - if(!all(names(dim(exp$data)) %in% names(dim(obs$data))) | - !all(names(dim(obs$data)) %in% names(dim(exp$data)))) { - stop("Parameter 'exp' and 'obs' must have same dimension names in element 'data'.") - } - dim_exp <- dim(exp$data) - dim_obs <- dim(obs$data) - dimnames_data <- names(dim_exp) - # dim_anom - if (is.numeric(dim_anom) & length(dim_anom) == 1) { - warning("Parameter 'dim_anom' must be a character string and a numeric value will not be ", - "accepted in the next release. The corresponding dimension name is assigned.") - dim_anom <- dimnames_data[dim_anom] - } - if (!is.character(dim_anom)) { - stop("Parameter 'dim_anom' must be a character string.") - } - if (!dim_anom %in% names(dim_exp) | !dim_anom %in% names(dim_obs)) { - stop("Parameter 'dim_anom' is not found in 'exp' or in 'obs' dimension in element 'data'.") - } - if (dim_exp[dim_anom] <= 1 | dim_obs[dim_anom] <= 1) { - stop("The length of dimension 'dim_anom' in label 'data' of the parameter ", - "'exp' and 'obs' must be greater than 1.") - } - # cross - if (!is.logical(cross) | !is.logical(memb) ) { - stop("Parameters 'cross' and 'memb' must be logical.") - } - if (length(cross) > 1 | length(memb) > 1 ) { - cross <- cross[1] - warning("Parameter 'cross' has length greater than 1 and only the first element", - "will be used.") - } - # memb - if (length(memb) > 1) { - memb <- memb[1] - warning("Parameter 'memb' has length greater than 1 and only the first element", - "will be used.") - } - # memb_dim - if (!is.null(memb_dim)) { - if (!is.character(memb_dim) | length(memb_dim) > 1) { - stop("Parameter 'memb_dim' must be a character string.") - } - if (!memb_dim %in% names(dim_exp) | !memb_dim %in% names(dim_obs)) { - stop("Parameter 'memb_dim' is not found in 'exp' or in 'obs' dimension.") - } - } - # dat_dim - if (!is.null(dat_dim)) { - if (!is.character(dat_dim)) { - stop("Parameter 'dat_dim' must be a character vector.") - } - if (!all(dat_dim %in% names(dim_exp)) | !all(dat_dim %in% names(dim_obs))) { - stop("Parameter 'dat_dim' is not found in 'exp' or 'obs' dimension in element 'data'.", - " Set it as NULL if there is no dataset dimension.") - } - } - # filter_span - if (!is.null(filter_span)) { - if (!is.numeric(filter_span)) { - warning("Paramater 'filter_span' is not numeric and any filter", - " is being applied.") - filter_span <- NULL - } - # ncores - if (!is.null(ncores)) { - if (!is.numeric(ncores) | ncores %% 1 != 0 | ncores <= 0 | - length(ncores) > 1) { - stop("Parameter 'ncores' must be a positive integer.") - } - } - # ftime_dim - if (!is.character(ftime_dim)) { - stop("Parameter 'ftime_dim' must be a character string.") - } - if (!ftime_dim %in% names(dim_exp) | !memb_dim %in% names(dim_obs)) { - stop("Parameter 'ftime_dim' is not found in 'exp' or in 'obs' dimension in element 'data'.") - } - } - - # Computating anomalies - #---------------------- - - # With cross-validation - if (cross) { - ano <- Ano_CrossValid(exp = exp$data, obs = obs$data, - time_dim = dim_anom, - memb_dim = memb_dim, - memb = memb, - dat_dim = dat_dim, - ncores = ncores) - - # Without cross-validation - } else { - tmp <- Clim(exp = exp$data, obs = obs$data, - time_dim = dim_anom, - memb_dim = memb_dim, - memb = memb, - dat_dim = dat_dim, - ncores = ncores) - if (!is.null(filter_span)) { - tmp$clim_exp <- Apply(tmp$clim_exp, - target_dims = c(ftime_dim), - output_dims = c(ftime_dim), - fun = .Loess, - loess_span = filter_span, - ncores = ncores)$output1 - tmp$clim_obs <- Apply(tmp$clim_obs, - target_dims = c(ftime_dim), - output_dims = c(ftime_dim), - fun = .Loess, - loess_span = filter_span, - ncores = ncores)$output1 - } - if (memb) { - clim_exp <- tmp$clim_exp - clim_obs <- tmp$clim_obs - } else { - clim_exp <- InsertDim(tmp$clim_exp, 1, dim_exp[memb_dim]) - clim_obs <- InsertDim(tmp$clim_obs, 1, dim_obs[memb_dim]) - } - clim_exp <- InsertDim(clim_exp, 1, dim_exp[dim_anom]) - clim_obs <- InsertDim(clim_obs, 1, dim_obs[dim_anom]) - ano <- NULL - - # Permuting back dimensions to original order - clim_exp <- Reorder(clim_exp, dimnames_data) - clim_obs <- Reorder(clim_obs, dimnames_data) - - ano$exp <- exp$data - clim_exp - ano$obs <- obs$data - clim_obs - } - - exp$data <- ano$exp - obs$data <- ano$obs - - # Outputs - # ~~~~~~~~~ - if (case_obs == 1) { - return(obs) - } - else if (case_exp == 1) { - return(exp) - } - else { - return(list(exp = exp, obs = obs)) - } -} - -.Loess <- function(clim, loess_span) { - data <- data.frame(ensmean = clim, day = 1 : length(clim)) - loess_filt <- loess(ensmean ~ day, data, span = loess_span) - output <- predict(loess_filt) - return(output) -} - diff --git a/modules/Calibration/Calibration.R b/modules/Calibration/Calibration.R index 2b6e18ab..dedfbd85 100644 --- a/modules/Calibration/Calibration.R +++ b/modules/Calibration/Calibration.R @@ -11,9 +11,9 @@ calibrate_datasets <- function(recipe, data) { if (method == "raw") { warn(recipe$Run$logger, - paste("The Calibration module has been called, but the calibration", - "method in the recipe is 'raw'. The hcst and fcst will not be", - "calibrated.")) + paste("The Calibration module has been called, but the calibration", + "method in the recipe is 'raw'. The hcst and fcst will not be", + "calibrated.")) fcst_calibrated <- data$fcst hcst_calibrated <- data$hcst if (!is.null(data$hcst.full_val)) { @@ -57,9 +57,9 @@ calibrate_datasets <- function(recipe, data) { CST_CALIB_METHODS <- c("bias", "evmos", "mse_min", "crps_min", "rpc-based") ## TODO: implement other calibration methods if (!(method %in% CST_CALIB_METHODS)) { - error(recipe$Run$logger, - paste("Calibration method in the recipe is not available for", - "monthly data.")) + error(recipe$Run$logger, + paste("Calibration method in the recipe is not available for", + "monthly data.")) stop() } else { # Calibrate the hindcast @@ -74,24 +74,24 @@ calibrate_datasets <- function(recipe, data) { memb_dim = "ensemble", sdate_dim = "syear", ncores = ncores) - # In the case where anomalies have been computed, calibrate full values - if (!is.null(data$hcst.full_val)) { - hcst_full_calibrated <- CST_Calibration(data$hcst.full_val, - data$obs.full_val, - cal.method = method, - eval.method = "leave-one-out", - multi.model = mm, - na.fill = TRUE, - na.rm = na.rm, - apply_to = NULL, - memb_dim = "ensemble", - sdate_dim = "syear", - ncores = ncores) - } else { - hcst_full_calibrated <- NULL - } + # In the case where anomalies have been computed, calibrate full values + if (!is.null(data$hcst.full_val)) { + hcst_full_calibrated <- CST_Calibration(data$hcst.full_val, + data$obs.full_val, + cal.method = method, + eval.method = "leave-one-out", + multi.model = mm, + na.fill = TRUE, + na.rm = na.rm, + apply_to = NULL, + memb_dim = "ensemble", + sdate_dim = "syear", + ncores = ncores) + } else { + hcst_full_calibrated <- NULL + } - # Calibrate the forecast + # Calibrate the forecast if (!is.null(data$fcst)) { fcst_calibrated <- CST_Calibration(data$hcst, data$obs, data$fcst, cal.method = method, @@ -111,66 +111,81 @@ calibrate_datasets <- function(recipe, data) { } else if (recipe$Analysis$Variables$freq == "daily_mean") { # Daily data calibration using Quantile Mapping if (!(method %in% c("qmap"))) { - error(recipe$Run$logger, - paste("Calibration method in the recipe is not available for", - "daily data. Only quantile mapping 'qmap is implemented.")) + error(recipe$Run$logger, + paste("Calibration method in the recipe is not available for", + "daily data. Only quantile mapping 'qmap is implemented.")) stop() } # Calibrate the hindcast dim_order <- names(dim(data$hcst$data)) hcst_calibrated <- CST_QuantileMapping(data$hcst, data$obs, - exp_cor = NULL, - sdate_dim = "syear", - memb_dim = "ensemble", - # window_dim = "time", - method = "QUANT", - ncores = ncores, - na.rm = na.rm, - wet.day = F) + exp_cor = NULL, + sdate_dim = "syear", + memb_dim = "ensemble", + # window_dim = "time", + method = "QUANT", + ncores = ncores, + na.rm = na.rm, + wet.day = F) # Restore dimension order hcst_calibrated$data <- Reorder(hcst_calibrated$data, dim_order) # In the case where anomalies have been computed, calibrate full values if (!is.null(data$hcst.full_val)) { - hcst_full_calibrated <- CST_QuantileMapping(data$hcst.full_val, - data$obs.full_val, - exp_cor = NULL, - sdate_dim = "syear", - memb_dim = "ensemble", - method = "QUANT", - ncores = ncores, - na.rm = na.rm, - wet.day = F) + hcst_full_calibrated <- CST_QuantileMapping(data$hcst.full_val, + data$obs.full_val, + exp_cor = NULL, + sdate_dim = "syear", + memb_dim = "ensemble", + method = "QUANT", + ncores = ncores, + na.rm = na.rm, + wet.day = F) } else { - hcst_full_calibrated <- NULL + hcst_full_calibrated <- NULL } if (!is.null(data$fcst)) { # Calibrate the forecast fcst_calibrated <- CST_QuantileMapping(data$hcst, data$obs, - exp_cor = data$fcst, - sdate_dim = "syear", - memb_dim = "ensemble", - # window_dim = "time", - method = "QUANT", - ncores = ncores, - na.rm = na.rm, - wet.day = F) + exp_cor = data$fcst, + sdate_dim = "syear", + memb_dim = "ensemble", + # window_dim = "time", + method = "QUANT", + ncores = ncores, + na.rm = na.rm, + wet.day = F) # Restore dimension order - fcst_calibrated$data <- Reorder(fcst_calibrated$data, dim_order) + fcst_calibrated$data <- Reorder(fcst_calibrated$data, dim_order) } else { fcst_calibrated <- NULL } } } info(recipe$Run$logger, CALIB_MSG) + ## TODO: What do we do with the full values? + recipe$Run$output_dir <- paste0(recipe$Run$output_dir, + "/outputs/Calibration/") + if (recipe$Analysis$Workflow$Calibration$save %in% + c('all', 'exp_only', 'fcst_only')) { + save_forecast(recipe = recipe, data_cube = fcst_calibrated, type = 'fcst') + } + if (recipe$Analysis$Workflow$Calibration$save %in% + c('all', 'exp_only')) { + save_forecast(recipe = recipe, data_cube = hcst_calibrated, type = 'hcst') + } + if (recipe$Analysis$Workflow$Calibration$save == 'all') { + save_observations(recipe = recipe, data_cube = data$obs) + } + ## TODO: Sort out returns return_list <- list(hcst = hcst_calibrated, - obs = data$obs, - fcst = fcst_calibrated) + obs = data$obs, + fcst = fcst_calibrated) if (!is.null(hcst_full_calibrated)) { return_list <- append(return_list, - list(hcst.full_val = hcst_full_calibrated, - obs.full_val = data$obs.full_val)) + list(hcst.full_val = hcst_full_calibrated, + obs.full_val = data$obs.full_val)) } return(return_list) } diff --git a/modules/Loading/Loading.R b/modules/Loading/Loading.R index 55b13451..c5eb41e6 100644 --- a/modules/Loading/Loading.R +++ b/modules/Loading/Loading.R @@ -72,17 +72,17 @@ load_datasets <- function(recipe) { obs.path <- paste0(archive$src, obs.dir, store.freq, "/$var$", reference_descrip[[store.freq]][[variable]], - "$var$_$file_date$.nc") + "$var$_$file_date$.nc") hcst.path <- paste0(archive$src, hcst.dir, store.freq, "/$var$", exp_descrip[[store.freq]][[variable]], - "$var$_$file_date$.nc") + "$var$_$file_date$.nc") fcst.path <- paste0(archive$src, hcst.dir, store.freq, "/$var$", - exp_descrip[[store.freq]][[variable]], - "$var$_$file_date$.nc") + exp_descrip[[store.freq]][[variable]], + "$var$_$file_date$.nc") # Define regrid parameters: #------------------------------------------------------------------- @@ -114,7 +114,7 @@ load_datasets <- function(recipe) { transform_vars = c('latitude', 'longitude'), synonims = list(latitude = c('lat', 'latitude'), longitude = c('lon', 'longitude'), - ensemble = c('member', 'ensemble')), + ensemble = c('member', 'ensemble')), ensemble = indices(1:hcst.nmember), return_vars = list(latitude = 'dat', longitude = 'dat', @@ -134,7 +134,7 @@ load_datasets <- function(recipe) { # Change time attribute dimensions default_time_dims <- c(sday = 1, sweek = 1, syear = 1, time = 1) names(dim(attr(hcst, "Variables")$common$time))[which(names( - dim(attr(hcst, "Variables")$common$time)) == 'file_date')] <- "syear" + dim(attr(hcst, "Variables")$common$time)) == 'file_date')] <- "syear" default_time_dims[names(dim(attr(hcst, "Variables")$common$time))] <- dim(attr(hcst, "Variables")$common$time) dim(attr(hcst, "Variables")$common$time) <- default_time_dims @@ -157,26 +157,26 @@ load_datasets <- function(recipe) { # multiple dims split fcst <- Start(dat = fcst.path, - var = variable, - file_date = sdates$fcst, + var = variable, + file_date = sdates$fcst, time = idxs$fcst, - latitude = values(list(lats.min, lats.max)), - latitude_reorder = Sort(), - longitude = values(list(lons.min, lons.max)), - longitude_reorder = circularsort, - transform = regrid_params$fcst.transform, - transform_params = list(grid = regrid_params$fcst.gridtype, - method = regrid_params$fcst.gridmethod), - transform_vars = c('latitude', 'longitude'), - synonims = list(latitude = c('lat', 'latitude'), - longitude = c('lon', 'longitude'), - ensemble = c('member', 'ensemble')), - ensemble = indices(1:fcst.nmember), - return_vars = list(latitude = 'dat', - longitude = 'dat', - time = 'file_date'), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = circularsort, + transform = regrid_params$fcst.transform, + transform_params = list(grid = regrid_params$fcst.gridtype, + method = regrid_params$fcst.gridmethod), + transform_vars = c('latitude', 'longitude'), + synonims = list(latitude = c('lat', 'latitude'), + longitude = c('lon', 'longitude'), + ensemble = c('member', 'ensemble')), + ensemble = indices(1:fcst.nmember), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = 'file_date'), split_multiselected_dims = split_multiselected_dims, - retrieve = TRUE) + retrieve = TRUE) if (recipe$Analysis$Variables$freq == "daily_mean") { # Adjusts dims for daily case, could be removed if startR allows @@ -201,7 +201,7 @@ load_datasets <- function(recipe) { # Adjust dates for models where the time stamp goes into the next month if (recipe$Analysis$Variables$freq == "monthly_mean") { fcst$attrs$Dates[] <- - fcst$attrs$Dates - seconds(exp_descrip$time_stamp_lag) + fcst$attrs$Dates - seconds(exp_descrip$time_stamp_lag) } } else { @@ -215,9 +215,9 @@ load_datasets <- function(recipe) { # the corresponding observations are loaded correctly. dates <- hcst$attrs$Dates dim(dates) <- dim(Subset(hcst$data, - along=c('dat', 'var', - 'latitude', 'longitude', 'ensemble'), - list(1,1,1,1,1), drop="selected")) + along=c('dat', 'var', + 'latitude', 'longitude', 'ensemble'), + list(1,1,1,1,1), drop="selected")) # Separate Start() call for monthly vs daily data if (store.freq == "monthly_mean") { @@ -227,22 +227,22 @@ load_datasets <- function(recipe) { obs <- Start(dat = obs.path, var = variable, - file_date = dates_file, - latitude = values(list(lats.min, lats.max)), - latitude_reorder = Sort(), - longitude = values(list(lons.min, lons.max)), - longitude_reorder = circularsort, - transform = regrid_params$obs.transform, - transform_params = list(grid = regrid_params$obs.gridtype, - method = regrid_params$obs.gridmethod), - transform_vars = c('latitude', 'longitude'), - synonims = list(latitude = c('lat', 'y', 'latitude'), - longitude = c('lon', 'x', 'longitude')), - return_vars = list(latitude = 'dat', - longitude = 'dat', - time = 'file_date'), - split_multiselected_dims = TRUE, - retrieve = TRUE) + file_date = dates_file, + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = circularsort, + transform = regrid_params$obs.transform, + transform_params = list(grid = regrid_params$obs.gridtype, + method = regrid_params$obs.gridmethod), + transform_vars = c('latitude', 'longitude'), + synonims = list(latitude = c('lat', 'y', 'latitude'), + longitude = c('lon', 'x', 'longitude')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = 'file_date'), + split_multiselected_dims = TRUE, + retrieve = TRUE) } else if (store.freq == "daily_mean") { @@ -256,28 +256,28 @@ load_datasets <- function(recipe) { dim(dates) <- dim(dates_file) obs <- Start(dat = obs.path, - var = variable, - file_date = sort(unique(dates_file)), - time = dates, - time_var = 'time', - time_across = 'file_date', - merge_across_dims = TRUE, - merge_across_dims_narm = TRUE, - latitude = values(list(lats.min, lats.max)), - latitude_reorder = Sort(), - longitude = values(list(lons.min, lons.max)), - longitude_reorder = circularsort, - transform = regrid_params$obs.transform, - transform_params = list(grid = regrid_params$obs.gridtype, - method = regrid_params$obs.gridmethod), - transform_vars = c('latitude', 'longitude'), - synonims = list(latitude = c('lat','latitude'), - longitude = c('lon','longitude')), - return_vars = list(latitude = 'dat', - longitude = 'dat', - time = 'file_date'), - split_multiselected_dims = TRUE, - retrieve = TRUE) + var = variable, + file_date = sort(unique(dates_file)), + time = dates, + time_var = 'time', + time_across = 'file_date', + merge_across_dims = TRUE, + merge_across_dims_narm = TRUE, + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = circularsort, + transform = regrid_params$obs.transform, + transform_params = list(grid = regrid_params$obs.gridtype, + method = regrid_params$obs.gridmethod), + transform_vars = c('latitude', 'longitude'), + synonims = list(latitude = c('lat','latitude'), + longitude = c('lon','longitude')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = 'file_date'), + split_multiselected_dims = TRUE, + retrieve = TRUE) } # Adds ensemble dim to obs (for consistency with hcst/fcst) @@ -294,27 +294,27 @@ load_datasets <- function(recipe) { if (!(recipe$Analysis$Regrid$type == 'none')) { if (!isTRUE(all.equal(as.vector(hcst$lat), as.vector(obs$lat)))) { lat_error_msg <- paste("Latitude mismatch between hcst and obs.", - "Please check the original grids and the", - "regrid parameters in your recipe.") + "Please check the original grids and the", + "regrid parameters in your recipe.") error(recipe$Run$logger, lat_error_msg) hcst_lat_msg <- paste0("First hcst lat: ", hcst$lat[1], - "; Last hcst lat: ", hcst$lat[length(hcst$lat)]) + "; Last hcst lat: ", hcst$lat[length(hcst$lat)]) info(recipe$Run$logger, hcst_lat_msg) obs_lat_msg <- paste0("First obs lat: ", obs$lat[1], - "; Last obs lat: ", obs$lat[length(obs$lat)]) + "; Last obs lat: ", obs$lat[length(obs$lat)]) info(recipe$Run$logger, obs_lat_msg) stop("hcst and obs don't share the same latitudes.") } if (!isTRUE(all.equal(as.vector(hcst$lon), as.vector(obs$lon)))) { lon_error_msg <- paste("Longitude mismatch between hcst and obs.", - "Please check the original grids and the", - "regrid parameters in your recipe.") + "Please check the original grids and the", + "regrid parameters in your recipe.") error(recipe$Run$logger, lon_error_msg) hcst_lon_msg <- paste0("First hcst lon: ", hcst$lon[1], - "; Last hcst lon: ", hcst$lon[length(hcst$lon)]) + "; Last hcst lon: ", hcst$lon[length(hcst$lon)]) info(recipe$Run$logger, hcst_lon_msg) obs_lon_msg <- paste0("First obs lon: ", obs$lon[1], - "; Last obs lon: ", obs$lon[length(obs$lon)]) + "; Last obs lon: ", obs$lon[length(obs$lon)]) info(recipe$Run$logger, obs_lon_msg) stop("hcst and obs don't share the same longitudes.") @@ -325,7 +325,7 @@ load_datasets <- function(recipe) { dictionary <- read_yaml("conf/variable-dictionary.yml") if (dictionary$vars[[variable]]$accum) { info(recipe$Run$logger, - "Accumulated variable: setting negative values to zero.") + "Accumulated variable: setting negative values to zero.") obs$data[obs$data < 0] <- 0 hcst$data[hcst$data < 0] <- 0 if (!is.null(fcst)) { @@ -339,9 +339,9 @@ load_datasets <- function(recipe) { if (variable == "prlr") { # Verify that the units are m/s and the same in obs and hcst if (((obs$attrs$Variable$metadata[[variable]]$units == "m s-1") || - (obs$attrs$Variable$metadata[[variable]]$units == "m s**-1")) && - ((hcst$attrs$Variable$metadata[[variable]]$units == "m s-1") || - (hcst$attrs$Variable$metadata[[variable]]$units == "m s**-1"))) { + (obs$attrs$Variable$metadata[[variable]]$units == "m s**-1")) && + ((hcst$attrs$Variable$metadata[[variable]]$units == "m s-1") || + (hcst$attrs$Variable$metadata[[variable]]$units == "m s**-1"))) { info(recipe$Run$logger, "Converting precipitation from m/s to mm/day.") obs$data <- obs$data*86400*1000 diff --git a/modules/Saving/R/Utils.R b/modules/Saving/R/Utils.R new file mode 100644 index 00000000..9ff695a6 --- /dev/null +++ b/modules/Saving/R/Utils.R @@ -0,0 +1,69 @@ +.get_global_attributes <- function(recipe, archive) { + # Generates metadata of interest to add to the global attributes of the + # netCDF files. + parameters <- recipe$Analysis + hcst_period <- paste0(parameters$Time$hcst_start, " to ", + parameters$Time$hcst_end) + current_time <- paste0(as.character(Sys.time()), " ", Sys.timezone()) + system_name <- parameters$Datasets$System$name + reference_name <- parameters$Datasets$Reference$name + + attrs <- list(reference_period = hcst_period, + institution_system = archive$System[[system_name]]$institution, + institution_reference = archive$Reference[[reference_name]]$institution, + system = system_name, + reference = reference_name, + calibration_method = parameters$Workflow$Calibration$method, + computed_on = current_time) + + return(attrs) +} + +.get_times <- function(store.freq, fcst.horizon, leadtimes, sdate, calendar) { + # Generates time dimensions and the corresponding metadata. + ## TODO: Subseasonal + + switch(fcst.horizon, + "seasonal" = {time <- leadtimes; ref <- 'hours since '; + stdname <- paste(strtoi(leadtimes), collapse=", ")}, + "subseasonal" = {len <- 4; ref <- 'hours since '; + stdname <- ''}, + "decadal" = {time <- leadtimes; ref <- 'hours since '; + stdname <- paste(strtoi(leadtimes), collapse=", ")}) + + dim(time) <- length(time) + sdate <- as.Date(sdate, format = '%Y%m%d') # reformatting + metadata <- list(time = list(units = paste0(ref, sdate, 'T00:00:00'), + calendar = calendar)) + attr(time, 'variables') <- metadata + names(dim(time)) <- 'time' + + sdate <- 1:length(sdate) + dim(sdate) <- length(sdate) + metadata <- list(sdate = list(standard_name = paste(strtoi(sdate), + collapse=", "), + units = paste0('Init date'))) + attr(sdate, 'variables') <- metadata + names(dim(sdate)) <- 'sdate' + + return(list(time=time)) +} + +.get_latlon <- function(latitude, longitude) { + # Adds dimensions and metadata to lat and lon + # latitude: array containing the latitude values + # longitude: array containing the longitude values + + dim(longitude) <- length(longitude) + metadata <- list(longitude = list(units = 'degrees_east')) + attr(longitude, 'variables') <- metadata + names(dim(longitude)) <- 'longitude' + + dim(latitude) <- length(latitude) + metadata <- list(latitude = list(units = 'degrees_north')) + attr(latitude, 'variables') <- metadata + names(dim(latitude)) <- 'latitude' + + return(list(lat=latitude, lon=longitude)) + +} diff --git a/modules/Saving/R/get_dir.R b/modules/Saving/R/get_dir.R new file mode 100644 index 00000000..ac633968 --- /dev/null +++ b/modules/Saving/R/get_dir.R @@ -0,0 +1,57 @@ +## TODO: Separate by time aggregation +## TODO: Build a default path that accounts for: +## variable, system, reference, start date and region name + +get_dir <- function(recipe, agg = "global") { + # This function builds the path for the output directory. The output + # directories will be subdirectories within outdir, organized by variable, + # startdate, and aggregation. + + ## TODO: Get aggregation from recipe + outdir <- recipe$Run$output_dir + ## TODO: multivar case + variable <- recipe$Analysis$Variables$name + system <- gsub('.','', recipe$Analysis$Datasets$System$name, fixed = T) + + if (tolower(recipe$Analysis$Output_format) == 'scorecards') { + # Define output dir name accordint to Scorecards format + dict <- read_yaml("conf/output_dictionaries/scorecards.yml") + # system <- dict$System[[recipe$Analysis$Datasets$System$name]]$short_name + dir <- paste0(outdir, "/", system, "/", variable, "/") + } else { + # Default generic output format based on FOCUS + # Get startdate or hindcast period + if (!is.null(recipe$Analysis$Time$fcst_year)) { + if (tolower(recipe$Analysis$Horizon) == 'decadal') { + # decadal doesn't have sdate + fcst.sdate <- paste0(recipe$Analysis$Time$fcst_year, collapse = '_') + } else { + fcst.sdate <- paste0(recipe$Analysis$Time$fcst_year, + recipe$Analysis$Time$sdate) + } + } else { + if (tolower(recipe$Analysis$Horizon) == 'decadal') { + # decadal doesn't have sdate + fcst.sdate <- paste0("hcst-", paste(recipe$Analysis$Time$hcst_start, + recipe$Analysis$Time$hcst_end, + sep = '_')) + } else { + fcst.sdate <- paste0("hcst-", recipe$Analysis$Time$sdate) + } + } + + calib.method <- tolower(recipe$Analysis$Workflow$Calibration$method) + store.freq <- recipe$Analysis$Variables$freq + ## TODO: Change "_country" + switch(tolower(agg), + "country" = {dir <- paste0(outdir, "/", system, "/", calib.method, + "-", store.freq, "/", variable, + "_country/", fcst.sdate, "/")}, + "global" = {dir <- paste0(outdir, "/", system, "/", calib.method, + "-", store.freq, "/", variable, "/", + fcst.sdate, "/")}) + } + ## TODO: Multivar case + dir.create(dir, showWarnings = FALSE, recursive = TRUE) + return(dir) +} diff --git a/modules/Saving/paths2save.R b/modules/Saving/R/get_filename.R similarity index 50% rename from modules/Saving/paths2save.R rename to modules/Saving/R/get_filename.R index d22d9856..1c925651 100644 --- a/modules/Saving/paths2save.R +++ b/modules/Saving/R/get_filename.R @@ -48,64 +48,10 @@ get_filename <- function(dir, recipe, var, date, agg, file.type) { "exp" = {file <- paste0(var, gg, "_", date)}, "obs" = {file <- paste0(var, gg, "-obs_", date)}, "percentiles" = {file <- paste0(var, gg, "-percentiles_", dd, - shortdate)}, + shortdate)}, "probs" = {file <- paste0(var, gg, "-probs_", date)}, "bias" = {file <- paste0(var, gg, "-bias_", date)}) } return(paste0(dir, file, ".nc")) } -get_dir <- function(recipe, agg = "global") { - # This function builds the path for the output directory. The output - # directories will be subdirectories within outdir, organized by variable, - # startdate, and aggregation. - - ## TODO: Get aggregation from recipe - outdir <- paste0(recipe$Run$output_dir, "/outputs/") - ## TODO: multivar case - variable <- recipe$Analysis$Variables$name - system <- gsub('.','', recipe$Analysis$Datasets$System$name, fixed = T) - - if (tolower(recipe$Analysis$Output_format) == 'scorecards') { - # Define output dir name accordint to Scorecards format - dict <- read_yaml("conf/output_dictionaries/scorecards.yml") - # system <- dict$System[[recipe$Analysis$Datasets$System$name]]$short_name - dir <- paste0(outdir, "/", system, "/", variable, "/") - } else { - # Default generic output format based on FOCUS - # Get startdate or hindcast period - if (!is.null(recipe$Analysis$Time$fcst_year)) { - if (tolower(recipe$Analysis$Horizon) == 'decadal') { - # decadal doesn't have sdate - fcst.sdate <- paste0(recipe$Analysis$Time$fcst_year, collapse = '_') - } else { - fcst.sdate <- paste0(recipe$Analysis$Time$fcst_year, - recipe$Analysis$Time$sdate) - } - } else { - if (tolower(recipe$Analysis$Horizon) == 'decadal') { - # decadal doesn't have sdate - fcst.sdate <- paste0("hcst-", paste(recipe$Analysis$Time$hcst_start, - recipe$Analysis$Time$hcst_end, - sep = '_')) - } else { - fcst.sdate <- paste0("hcst-", recipe$Analysis$Time$sdate) - } - } - - calib.method <- tolower(recipe$Analysis$Workflow$Calibration$method) - store.freq <- recipe$Analysis$Variables$freq - ## TODO: Change "_country" - if (!is.null(recipe$Analysis$Region$name)) { - outdir <- paste0(outdir, "/", recipe$Analysis$Region$name) - } - switch(tolower(agg), - "country" = {dir <- paste0(outdir, "/", system, "/", calib.method, - "-", store.freq, "/", variable, - "_country/", fcst.sdate, "/")}, - "global" = {dir <- paste0(outdir, "/", system, "/", calib.method, - "-", store.freq, "/", variable, "/", - fcst.sdate, "/")}) - } - return(dir) -} diff --git a/modules/Saving/R/save_corr.R b/modules/Saving/R/save_corr.R new file mode 100644 index 00000000..8b945318 --- /dev/null +++ b/modules/Saving/R/save_corr.R @@ -0,0 +1,117 @@ +save_corr <- function(recipe, + skill, + data_cube, + agg = "global", + outdir = NULL) { + # This function adds metadata to the ensemble correlation in 'skill' + # and exports it to a netCDF file inside 'outdir'. + + archive <- get_archive(recipe) + dictionary <- read_yaml("conf/variable-dictionary.yml") + # Define grid dimensions and names + lalo <- c('longitude', 'latitude') + # Remove singleton dimensions and rearrange lon, lat and time dims + if (tolower(agg) == "global") { + skill <- lapply(skill, function(x) { + Reorder(x, c(lalo, 'ensemble', 'time'))}) + } + # Add global and variable attributes + global_attributes <- .get_global_attributes(recipe, archive) + ## TODO: Sort out the logic once default behavior is decided + if ((!is.null(recipe$Analysis$Workflow$Anomalies$compute)) && + (recipe$Analysis$Workflow$Anomalies$compute)) { + global_attributes <- c(global_attributes, + list(from_anomalies = "Yes")) + } else { + global_attributes <- c(global_attributes, + list(from_anomalies = "No")) + } + attr(skill[[1]], 'global_attrs') <- global_attributes + + for (i in 1:length(skill)) { + metric <- names(skill[i]) + long_name <- dictionary$metrics[[metric]]$long_name + missing_val <- -9.e+33 + skill[[i]][is.na(skill[[i]])] <- missing_val + if (tolower(agg) == "country") { + sdname <- paste0(metric, " region-aggregated metric") + dims <- c('Country', 'ensemble', 'time') + } else { + sdname <- paste0(metric) #, " grid point metric") # formerly names(metric) + dims <- c(lalo, 'ensemble', 'time') + } + metadata <- list(metric = list(name = metric, + standard_name = sdname, + long_name = long_name, + missing_value = missing_val)) + attr(skill[[i]], 'variables') <- metadata + names(dim(skill[[i]])) <- dims + } + + # Time indices and metadata + fcst.horizon <- tolower(recipe$Analysis$Horizon) + store.freq <- recipe$Analysis$Variables$freq + calendar <- archive$System[[global_attributes$system]]$calendar + + # Generate vector containing leadtimes + dates <- as.PCICt(ClimProjDiags::Subset(data_cube$attrs$Dates, 'syear', 1), + cal = calendar) + if (fcst.horizon == 'decadal') { + init_month <- archive$System[[recipe$Analysis$Datasets$System$name]]$initial_month + init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, '-', + sprintf('%02d', init_month), '-01'), + cal = calendar) + } else { + init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, + recipe$Analysis$Time$sdate), + format = '%Y%m%d', cal = calendar) + } + + # Get time difference in hours + leadtimes <- as.numeric(dates - init_date)/3600 + + # Select start date + # If a fcst is provided, use that as the ref. year. Otherwise use 1970. + if (fcst.horizon == 'decadal') { + if (!is.null(recipe$Analysis$Time$fcst_year)) { + #PROBLEM: May be more than one fcst_year + fcst.sdate <- paste0(recipe$Analysis$Time$fcst_year[1], + sprintf('%02d', init_month), '01') + } else { + fcst.sdate <- paste0("1970", sprintf('%02d', init_month), '01') + } + } else { + if (!is.null(recipe$Analysis$Time$fcst_year)) { + fcst.sdate <- paste0(recipe$Analysis$Time$fcst_year, + recipe$Analysis$Time$sdate) + } else { + fcst.sdate <- paste0("1970", recipe$Analysis$Time$sdate) + } + } + + times <- .get_times(store.freq, fcst.horizon, leadtimes, fcst.sdate, calendar) + time <- times$time + + # Generate name of output file + if (is.null(outdir)) { + outdir <- get_dir(recipe) + } + outfile <- get_filename(outdir, recipe, data_cube$attrs$Variable$varName, + fcst.sdate, agg, "corr") + + # Get grid data and metadata and export to netCDF + if (tolower(agg) == "country") { + country <- .get_countries(grid) + ArrayToNc(append(country, time, skill), outfile) + } else { + latitude <- data_cube$coords$lat[1:length(data_cube$coords$lat)] + longitude <- data_cube$coords$lon[1:length(data_cube$coords$lon)] + latlon <- .get_latlon(latitude, longitude) + # Compile variables into a list and export to netCDF + vars <- list(latlon$lat, latlon$lon, time) + vars <- c(vars, skill) + ArrayToNc(vars, outfile) + } + info(recipe$Run$logger, + "##### ENSEMBLE CORRELATION SAVED TO NETCDF FILE #####") +} diff --git a/modules/Saving/R/save_forecast.R b/modules/Saving/R/save_forecast.R new file mode 100644 index 00000000..9ec8499c --- /dev/null +++ b/modules/Saving/R/save_forecast.R @@ -0,0 +1,137 @@ +save_forecast <- function(recipe, + data_cube, + type = "hcst", + agg = "global", + outdir = NULL) { + # Loops over the years in the s2dv_cube containing a hindcast or forecast + # and exports each year to a netCDF file. + # data_cube: s2dv_cube containing the data and metadata + # recipe: the auto-s2s recipe + # outdir: directory where the files should be saved + # agg: aggregation, "global" or "country" + + lalo <- c('longitude', 'latitude') + archive <- get_archive(recipe) + dictionary <- read_yaml("conf/variable-dictionary.yml") + variable <- data_cube$attrs$Variable$varName + var.longname <- data_cube$attrs$Variable$metadata[[variable]]$long_name + global_attributes <- .get_global_attributes(recipe, archive) + fcst.horizon <- tolower(recipe$Analysis$Horizon) + store.freq <- recipe$Analysis$Variables$freq + calendar <- archive$System[[global_attributes$system]]$calendar + + if (is.null(outdir)) { + outdir <- get_dir(recipe) + } + + # Generate vector containing leadtimes + dates <- as.PCICt(ClimProjDiags::Subset(data_cube$attrs$Dates, 'syear', 1), + cal = calendar) + if (fcst.horizon == 'decadal') { + ## Method 1: Use the first date as init_date. But it may be better to use + ## the real initialized date (ask users) + # init_date <- as.Date(data_cube$Dates$start[1], format = '%Y%m%d') + ## Method 2: use initial month + init_month <- archive$System[[recipe$Analysis$Datasets$System$name]]$initial_month + if (type == 'hcst') { + init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, '-', + sprintf('%02d', init_month), '-01'), + cal = calendar) + } else if (type == 'fcst') { + init_date <- as.PCICt(paste0(recipe$Analysis$Time$fcst_year[1], '-', + sprintf('%02d', init_month), '-01'), + cal = calendar) + } + } else { + if (type == 'hcst') { + init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, + recipe$Analysis$Time$sdate), + format = '%Y%m%d', cal = calendar) + } else if (type == 'fcst') { + init_date <- as.PCICt(paste0(recipe$Analysis$Time$fcst_year, + recipe$Analysis$Time$sdate), + format = '%Y%m%d', cal = calendar) + } + } + # Get time difference in hours + leadtimes <- as.numeric(dates - init_date)/3600 + + syears <- seq(1:dim(data_cube$data)['syear'][[1]]) + # expect dim = [sday = 1, sweek = 1, syear, time] + syears_val <- lubridate::year(data_cube$attrs$Dates[1, 1, , 1]) + for (i in syears) { + # Select year from array and rearrange dimensions + fcst <- ClimProjDiags::Subset(data_cube$data, 'syear', i, drop = T) + + if (!("time" %in% names(dim(fcst)))) { + dim(fcst) <- c("time" = 1, dim(fcst)) + } + if (tolower(agg) == "global") { + fcst <- list(Reorder(fcst, c(lalo, 'ensemble', 'time'))) + } else { + fcst <- list(Reorder(fcst, c('country', 'ensemble', 'time'))) + } + + # Add metadata + var.sdname <- dictionary$vars[[variable]]$standard_name + if (tolower(agg) == "country") { + dims <- c('Country', 'ensemble', 'time') + var.expname <- paste0(variable, '_country') + var.longname <- paste0("Country-Aggregated ", var.longname) + var.units <- attr(data_cube$Variable, 'variable')$units + } else { + dims <- c(lalo, 'ensemble', 'time') + var.expname <- variable + var.sdname <- var.sdname + var.units <- data_cube$attrs$Variable$metadata[[variable]]$units + } + + metadata <- list(fcst = list(name = var.expname, + standard_name = var.sdname, + long_name = var.longname, + units = var.units)) + attr(fcst[[1]], 'variables') <- metadata + names(dim(fcst[[1]])) <- dims + # Add global attributes + attr(fcst[[1]], 'global_attrs') <- global_attributes + + # Select start date + if (fcst.horizon == 'decadal') { + ## NOTE: Not good to use data_cube$load_parameters$dat1 because decadal + ## data has been reshaped + # fcst.sdate <- format(as.Date(data_cube$Dates$start[i]), '%Y%m%d') + + # init_date is like "1990-11-01" + init_date <- as.POSIXct(init_date) + fcst.sdate <- init_date + lubridate::years(syears_val[i] - lubridate::year(init_date)) + fcst.sdate <- format(fcst.sdate, '%Y%m%d') + + } else { + fcst.sdate <- data_cube$attrs$load_parameters$dat1$file_date[[1]][i] + } + + # Get time dimension values and metadata + times <- .get_times(store.freq, fcst.horizon, leadtimes, fcst.sdate, calendar) + time <- times$time + + # Generate name of output file + outfile <- get_filename(outdir, recipe, data_cube$attrs$Variable$varName, + fcst.sdate, agg, "exp") + + # Get grid data and metadata and export to netCDF + if (tolower(agg) == "country") { + country <- get_countries(grid) + ArrayToNc(append(country, time, fcst), outfile) + } else { + latitude <- data_cube$coords$lat[1:length(data_cube$coords$lat)] + longitude <- data_cube$coords$lon[1:length(data_cube$coords$lon)] + latlon <- .get_latlon(latitude, longitude) + # Compile variables into a list and export to netCDF + vars <- list(latlon$lat, latlon$lon, time) + vars <- c(vars, fcst) + ArrayToNc(vars, outfile) + } + } + info(recipe$Run$logger, paste("#####", toupper(type), + "SAVED TO NETCDF FILE #####")) +} diff --git a/modules/Saving/R/save_metrics.R b/modules/Saving/R/save_metrics.R new file mode 100644 index 00000000..d48d9d8d --- /dev/null +++ b/modules/Saving/R/save_metrics.R @@ -0,0 +1,119 @@ +save_metrics <- function(recipe, + skill, + data_cube, + agg = "global", + outdir = NULL) { + # This function adds metadata to the skill metrics in 'skill' + # and exports them to a netCDF file inside 'outdir'. + + # Define grid dimensions and names + lalo <- c('longitude', 'latitude') + archive <- get_archive(recipe) + dictionary <- read_yaml("conf/variable-dictionary.yml") + + + # Remove singleton dimensions and rearrange lon, lat and time dims + if (tolower(agg) == "global") { + skill <- lapply(skill, function(x) { + Reorder(x, c(lalo, 'time'))}) + } + # Add global and variable attributes + global_attributes <- .get_global_attributes(recipe, archive) + ## TODO: Sort out the logic once default behavior is decided + if ((!is.null(recipe$Analysis$Workflow$Anomalies$compute)) && + (recipe$Analysis$Workflow$Anomalies$compute)) { + global_attributes <- c(list(from_anomalies = "Yes"), + global_attributes) + } else { + global_attributes <- c(list(from_anomalies = "No"), + global_attributes) + } + attr(skill[[1]], 'global_attrs') <- global_attributes + + for (i in 1:length(skill)) { + metric <- names(skill[i]) + long_name <- dictionary$metrics[[metric]]$long_name + missing_val <- -9.e+33 + skill[[i]][is.na(skill[[i]])] <- missing_val + if (tolower(agg) == "country") { + sdname <- paste0(metric, " region-aggregated metric") + dims <- c('Country', 'time') + } else { + sdname <- paste0(metric) #, " grid point metric") + dims <- c(lalo, 'time') + } + metadata <- list(metric = list(name = metric, + standard_name = sdname, + long_name = long_name, + missing_value = missing_val)) + attr(skill[[i]], 'variables') <- metadata + names(dim(skill[[i]])) <- dims + } + + # Time indices and metadata + fcst.horizon <- tolower(recipe$Analysis$Horizon) + store.freq <- recipe$Analysis$Variables$freq + calendar <- archive$System[[global_attributes$system]]$calendar + + # Generate vector containing leadtimes + dates <- as.PCICt(ClimProjDiags::Subset(data_cube$attrs$Dates, 'syear', 1), + cal = calendar) + + if (fcst.horizon == 'decadal') { + init_month <- archive$System[[recipe$Analysis$Datasets$System$name]]$initial_month + init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, '-', + sprintf('%02d', init_month), '-01'), + cal = calendar) + } else { + init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, + recipe$Analysis$Time$sdate), + format = '%Y%m%d', cal = calendar) + } + + # Get time difference in hours + leadtimes <- as.numeric(dates - init_date)/3600 + + # Select start date + # If a fcst is provided, use that as the ref. year. Otherwise use 1970. + if (fcst.horizon == 'decadal') { + if (!is.null(recipe$Analysis$Time$fcst_year)) { + #PROBLEM: May be more than one fcst_year + fcst.sdate <- paste0(recipe$Analysis$Time$fcst_year[1], + sprintf('%02d', init_month), '01') + } else { + fcst.sdate <- paste0("1970", sprintf('%02d', init_month), '01') + } + } else { + if (!is.null(recipe$Analysis$Time$fcst_year)) { + fcst.sdate <- paste0(recipe$Analysis$Time$fcst_year, + recipe$Analysis$Time$sdate) + } else { + fcst.sdate <- paste0("1970", recipe$Analysis$Time$sdate) + } + } + + times <- .get_times(store.freq, fcst.horizon, leadtimes, fcst.sdate, calendar) + time <- times$time + + # Generate name of output file + if (is.null(outdir)) { + outdir <- get_dir(recipe) + } + outfile <- get_filename(outdir, recipe, data_cube$attrs$Variable$varName, + fcst.sdate, agg, "skill") + + # Get grid data and metadata and export to netCDF + if (tolower(agg) == "country") { + country <- get_countries(grid) + ArrayToNc(append(country, time, skill), outfile) + } else { + latitude <- data_cube$coords$lat[1:length(data_cube$coords$lat)] + longitude <- data_cube$coords$lon[1:length(data_cube$coords$lon)] + latlon <- .get_latlon(latitude, longitude) + # Compile variables into a list and export to netCDF + vars <- list(latlon$lat, latlon$lon, time) + vars <- c(vars, skill) + ArrayToNc(vars, outfile) + } + info(recipe$Run$logger, "##### SKILL METRICS SAVED TO NETCDF FILE #####") +} diff --git a/modules/Saving/R/save_observations.R b/modules/Saving/R/save_observations.R new file mode 100644 index 00000000..dcaf0765 --- /dev/null +++ b/modules/Saving/R/save_observations.R @@ -0,0 +1,137 @@ +save_observations <- function(recipe, + data_cube, + agg = "global", + outdir = NULL) { + # Loops over the years in the s2dv_cube containing the observations and + # exports each year to a netCDF file. + # data_cube: s2dv_cube containing the data and metadata + # recipe: the auto-s2s recipe + # outdir: directory where the files should be saved + # agg: aggregation, "global" or "country" + + lalo <- c('longitude', 'latitude') + archive <- get_archive(recipe) + dictionary <- read_yaml("conf/variable-dictionary.yml") + variable <- data_cube$attrs$Variable$varName + var.longname <- data_cube$attrs$Variable$metadata[[variable]]$long_name + global_attributes <- .get_global_attributes(recipe, archive) + fcst.horizon <- tolower(recipe$Analysis$Horizon) + store.freq <- recipe$Analysis$Variables$freq + calendar <- archive$Reference[[global_attributes$reference]]$calendar + + if (is.null(outdir)) { + outdir <- get_dir(recipe) + } + + # Generate vector containing leadtimes + ## TODO: Move to a separate function? + dates <- as.PCICt(ClimProjDiags::Subset(data_cube$attrs$Dates, 'syear', 1), + cal = calendar) + if (fcst.horizon == 'decadal') { + ## Method 1: Use the first date as init_date. But it may be better to use + ## the real initialized date (ask users) +# init_date <- as.Date(data_cube$Dates$start[1], format = '%Y%m%d') + ## Method 2: use initial month + init_month <- archive$System[[recipe$Analysis$Datasets$System$name]]$initial_month + init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, '-', + sprintf('%02d', init_month), '-01'), + cal = calendar) + + } else { + init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, + recipe$Analysis$Time$sdate), + format = '%Y%m%d', cal = calendar) + } + # Get time difference in hours + leadtimes <- as.numeric(dates - init_date)/3600 + + syears <- seq(1:dim(data_cube$data)['syear'][[1]]) + ## expect dim = [sday = 1, sweek = 1, syear, time] + syears_val <- lubridate::year(data_cube$attrs$Dates[1, 1, , 1]) + for (i in syears) { + # Select year from array and rearrange dimensions + fcst <- ClimProjDiags::Subset(data_cube$data, 'syear', i, drop = T) + + if (!("time" %in% names(dim(fcst)))) { + dim(fcst) <- c("time" = 1, dim(fcst)) + } + if (tolower(agg) == "global") { + fcst <- list(Reorder(fcst, c(lalo, 'time'))) + } else { + fcst <- list(Reorder(fcst, c('country', 'time'))) + } + + # Add metadata + var.sdname <- dictionary$vars[[variable]]$standard_name + if (tolower(agg) == "country") { + dims <- c('Country', 'time') + var.expname <- paste0(variable, '_country') + var.longname <- paste0("Country-Aggregated ", var.longname) + var.units <- data_cube$attrs$Variable$metadata[[variable]]$units + } else { + dims <- c(lalo, 'time') + var.expname <- variable + var.units <- data_cube$attrs$Variable$metadata[[variable]]$units + } + + metadata <- list(fcst = list(name = var.expname, + standard_name = var.sdname, + long_name = var.longname, + units = var.units)) + attr(fcst[[1]], 'variables') <- metadata + names(dim(fcst[[1]])) <- dims + # Add global attributes + attr(fcst[[1]], 'global_attrs') <- global_attributes + + # Select start date. The date is computed for each year, and adapted for + # consistency with the hcst/fcst dates, so that both sets of files have + # the same name pattern. + ## Because observations are loaded differently in the daily vs. monthly + ## cases, different approaches are necessary. + if (fcst.horizon == 'decadal') { + # init_date is like "1990-11-01" + init_date <- as.POSIXct(init_date) + fcst.sdate <- init_date + lubridate::years(syears_val[i] - lubridate::year(init_date)) + } else { + + if (store.freq == "monthly_mean") { + fcst.sdate <- data_cube$attrs$load_parameters$dat1$file_date[[1]][i] + fcst.sdate <- as.Date(paste0(fcst.sdate, "01"), '%Y%m%d') + } else { + fcst.sdate <- as.Date(data_cube$attrs$Dates[i]) + } + } + + # Ensure the year is correct if the first leadtime goes to the next year + init_date <- as.POSIXct(init_date) + if (lubridate::month(fcst.sdate) < lubridate::month(init_date)) { + lubridate::year(fcst.sdate) <- lubridate::year(fcst.sdate) + 1 + } + # Ensure that the initialization month is consistent with the hindcast + lubridate::month(fcst.sdate) <- lubridate::month(init_date) + fcst.sdate <- format(fcst.sdate, format = '%Y%m%d') + + # Get time dimension values and metadata + times <- .get_times(store.freq, fcst.horizon, leadtimes, fcst.sdate, calendar) + time <- times$time + + # Generate name of output file + outfile <- get_filename(outdir, recipe, data_cube$attrs$Variable$varName, + fcst.sdate, agg, "obs") + + # Get grid data and metadata and export to netCDF + if (tolower(agg) == "country") { + country <- get_countries(grid) + ArrayToNc(append(country, time, fcst), outfile) + } else { + latitude <- data_cube$coords$lat[1:length(data_cube$coords$lat)] + longitude <- data_cube$coords$lon[1:length(data_cube$coords$lon)] + latlon <- .get_latlon(latitude, longitude) + # Compile variables into a list and export to netCDF + vars <- list(latlon$lat, latlon$lon, time) + vars <- c(vars, fcst) + ArrayToNc(vars, outfile) + } + } + info(recipe$Run$logger, "##### OBS SAVED TO NETCDF FILE #####") +} diff --git a/modules/Saving/R/save_percentiles.R b/modules/Saving/R/save_percentiles.R new file mode 100644 index 00000000..b4aab605 --- /dev/null +++ b/modules/Saving/R/save_percentiles.R @@ -0,0 +1,107 @@ +save_percentiles <- function(recipe, + percentiles, + data_cube, + agg = "global", + outdir = NULL) { + # This function adds metadata to the percentiles + # and exports them to a netCDF file inside 'outdir'. + archive <- get_archive(recipe) + + # Define grid dimensions and names + lalo <- c('longitude', 'latitude') + # Remove singleton dimensions and rearrange lon, lat and time dims + if (tolower(agg) == "global") { + percentiles <- lapply(percentiles, function(x) { + Reorder(x, c(lalo, 'time'))}) + } + + # Add global and variable attributes + global_attributes <- .get_global_attributes(recipe, archive) + ## TODO: Sort out the logic once default behavior is decided + if ((!is.null(recipe$Analysis$Workflow$Anomalies$compute)) && + (recipe$Analysis$Workflow$Anomalies$compute)) { + global_attributes <- c(list(from_anomalies = "Yes"), + global_attributes) + } else { + global_attributes <- c(list(from_anomalies = "No"), + global_attributes) + } + attr(percentiles[[1]], 'global_attrs') <- global_attributes + + for (i in 1:length(percentiles)) { + ## TODO: replace with proper standard names + percentile <- names(percentiles[i]) + long_name <- paste0(gsub("^.*_", "", percentile), "th percentile") + if (tolower(agg) == "country") { + dims <- c('Country', 'time') + } else { + dims <- c(lalo, 'time') + } + metadata <- list(metric = list(name = percentile, long_name = long_name)) + attr(percentiles[[i]], 'variables') <- metadata + names(dim(percentiles[[i]])) <- dims + } + + # Time indices and metadata + fcst.horizon <- tolower(recipe$Analysis$Horizon) + store.freq <- recipe$Analysis$Variables$freq + calendar <- archive$System[[global_attributes$system]]$calendar + # Generate vector containing leadtimes + dates <- as.PCICt(ClimProjDiags::Subset(data_cube$attrs$Dates, 'syear', 1), + cal = calendar) + if (fcst.horizon == 'decadal') { + init_month <- archive$System[[recipe$Analysis$Datasets$System$name]]$initial_month + init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, '-', + sprintf('%02d', init_month), '-01'), + cal = calendar) + } else { + init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, + recipe$Analysis$Time$sdate), + format = '%Y%m%d', cal = calendar) + } + + # Get time difference in hours + leadtimes <- as.numeric(dates - init_date)/3600 + + # Select start date + # If a fcst is provided, use that as the ref. year. Otherwise use 1970. + if (fcst.horizon == 'decadal') { + if (!is.null(recipe$Analysis$Time$fcst_year)) { + #PROBLEM: May be more than one fcst_year + fcst.sdate <- paste0(recipe$Analysis$Time$fcst_year[1], + sprintf('%02d', init_month), '01') + } else { + fcst.sdate <- paste0("1970", sprintf('%02d', init_month), '01') + } + } else { + if (!is.null(recipe$Analysis$Time$fcst_year)) { + fcst.sdate <- paste0(recipe$Analysis$Time$fcst_year, + recipe$Analysis$Time$sdate) + } else { + fcst.sdate <- paste0("1970", recipe$Analysis$Time$sdate) + } + } + times <- .get_times(store.freq, fcst.horizon, leadtimes, fcst.sdate, calendar) + time <- times$time + + # Generate name of output file + if (is.null(outdir)) { + outdir <- get_dir(recipe) + } + outfile <- get_filename(outdir, recipe, data_cube$attrs$Variable$varName, + fcst.sdate, agg, "percentiles") + # Get grid data and metadata and export to netCDF + if (tolower(agg) == "country") { + country <- get_countries(grid) + ArrayToNc(append(country, time, percentiles), outfile) + } else { + latitude <- data_cube$coords$lat[1:length(data_cube$coords$lat)] + longitude <- data_cube$coords$lon[1:length(data_cube$coords$lon)] + latlon <- .get_latlon(latitude, longitude) + # Compile variables into a list and export to netCDF + vars <- list(latlon$lat, latlon$lon, time) + vars <- c(vars, percentiles) + ArrayToNc(vars, outfile) + } + info(recipe$Run$logger, "##### PERCENTILES SAVED TO NETCDF FILE #####") +} diff --git a/modules/Saving/R/save_probabilities.R b/modules/Saving/R/save_probabilities.R new file mode 100644 index 00000000..20af9be7 --- /dev/null +++ b/modules/Saving/R/save_probabilities.R @@ -0,0 +1,124 @@ +save_probabilities <- function(recipe, + probs, + data_cube, + agg = "global", + type = "hcst", + outdir = NULL) { + # Loops over the years in the s2dv_cube containing a hindcast or forecast + # and exports the corresponding category probabilities to a netCDF file. + # probs: array containing the probability data + # recipe: the auto-s2s recipe + # data_cube: s2dv_cube containing the data and metadata + # outdir: directory where the files should be saved + # type: 'exp' (hcst and fcst) or 'obs' + # agg: aggregation, "global" or "country" + # type: 'hcst' or 'fcst' + + lalo <- c('longitude', 'latitude') + archive <- get_archive(recipe) + variable <- data_cube$attrs$Variable$varName + var.longname <- data_cube$attrs$Variable$metadata[[variable]]$long_name + global_attributes <- .get_global_attributes(recipe, archive) + if (is.null(outdir)) { + outdir <- get_dir(recipe) + } + # Add anomaly computation to global attributes + ## TODO: Sort out the logic once default behavior is decided + if ((!is.null(recipe$Analysis$Workflow$Anomalies$compute)) && + (recipe$Analysis$Workflow$Anomalies$compute)) { + global_attributes <- c(list(from_anomalies = "Yes"), + global_attributes) + } else { + global_attributes <- c(list(from_anomalies = "No"), + global_attributes) + } + fcst.horizon <- tolower(recipe$Analysis$Horizon) + store.freq <- recipe$Analysis$Variables$freq + calendar <- archive$System[[global_attributes$system]]$calendar + + # Generate vector containing leadtimes + ## TODO: Move to a separate function? + dates <- as.PCICt(ClimProjDiags::Subset(data_cube$attrs$Dates, 'syear', 1), + cal = calendar) + if (fcst.horizon == 'decadal') { + init_month <- archive$System[[recipe$Analysis$Datasets$System$name]]$initial_month + init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, '-', + sprintf('%02d', init_month), '-01'), + cal = calendar) + } else { + init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, + recipe$Analysis$Time$sdate), + format = '%Y%m%d', cal = calendar) + } + + # Get time difference in hours + leadtimes <- as.numeric(dates - init_date)/3600 + + syears <- seq(1:dim(data_cube$data)['syear'][[1]]) + ## expect dim = [sday = 1, sweek = 1, syear, time] + syears_val <- lubridate::year(data_cube$attrs$Dates[1, 1, , 1]) + for (i in syears) { + # Select year from array and rearrange dimensions + probs_syear <- lapply(probs, ClimProjDiags::Subset, 'syear', i, drop = 'selected') + if (tolower(agg) == "global") { + probs_syear <- lapply(probs_syear, function(x) { + Reorder(x, c(lalo, 'time'))}) + } else { + probs_syear <- lapply(probs_syear, function(x) { + Reorder(x, c('country', 'time'))}) + } + + ## TODO: Replace for loop with something more efficient? + for (bin in 1:length(probs_syear)) { + prob_bin <- names(probs_syear[bin]) + long_name <- paste0(prob_bin, " probability category") + if (tolower(agg) == "country") { + dims <- c('Country', 'time') + } else { + dims <- c(lalo, 'time') + } + metadata <- list(metric = list(name = prob_bin, long_name = long_name)) + attr(probs_syear[[bin]], 'variables') <- metadata + names(dim(probs_syear[[bin]])) <- dims # is this necessary? + } + + # Add global attributes + attr(probs_syear[[1]], 'global_attrs') <- global_attributes + + # Select start date + if (fcst.horizon == 'decadal') { + # init_date is like "1990-11-01" + init_date <- as.POSIXct(init_date) + fcst.sdate <- init_date + lubridate::years(syears_val[i] - lubridate::year(init_date)) + fcst.sdate <- format(fcst.sdate, '%Y%m%d') + } else { + fcst.sdate <- data_cube$attrs$load_parameters$dat1$file_date[[1]][i] + } + + # Get time dimension values and metadata + times <- .get_times(store.freq, fcst.horizon, leadtimes, fcst.sdate, calendar) + time <- times$time + + # Generate name of output file + outfile <- get_filename(outdir, recipe, data_cube$attrs$Variable$varName, + fcst.sdate, agg, "probs") + + # Get grid data and metadata and export to netCDF + if (tolower(agg) == "country") { + country <- get_countries(grid) + ArrayToNc(append(country, time, probs_syear), outfile) + } else { + latitude <- data_cube$coords$lat[1:length(data_cube$coords$lat)] + longitude <- data_cube$coords$lon[1:length(data_cube$coords$lon)] + latlon <- .get_latlon(latitude, longitude) + # Compile variables into a list and export to netCDF + vars <- list(latlon$lat, latlon$lon, time) + vars <- c(vars, probs_syear) + ArrayToNc(vars, outfile) + } + } + + info(recipe$Run$logger, + paste("#####", toupper(type), + "PROBABILITIES SAVED TO NETCDF FILE #####")) +} diff --git a/modules/Saving/Saving.R b/modules/Saving/Saving.R index 85c3a3a0..75c7908c 100644 --- a/modules/Saving/Saving.R +++ b/modules/Saving/Saving.R @@ -1,10 +1,18 @@ ## TODO: Save obs percentiles -source("modules/Saving/paths2save.R") +source("modules/Saving/R/get_dir.R") +source("modules/Saving/R/get_filename.R") +source("modules/Saving/R/Utils.R") +source("modules/Saving/R/save_forecast.R") +source("modules/Saving/R/save_observations.R") +source("modules/Saving/R/save_metrics.R") +source("modules/Saving/R/save_corr.R") +source("modules/Saving/R/save_probabilities.R") +source("modules/Saving/R/save_percentiles.R") save_data <- function(recipe, data, - skill_metrics = NULL, - probabilities = NULL) { + skill_metrics = NULL, + probabilities = NULL) { # Wrapper for the saving functions. # recipe: The auto-s2s recipe # archive: The auto-s2s archive @@ -22,8 +30,8 @@ save_data <- function(recipe, data, if (is.null(data)) { error(recipe$Run$logger, - paste("The 'data' parameter is mandatory. It should be a list", - "of at least two s2dv_cubes containing the hcst and obs.")) + paste("The 'data' parameter is mandatory. It should be a list", + "of at least two s2dv_cubes containing the hcst and obs.")) stop() } # Create output directory @@ -32,15 +40,15 @@ save_data <- function(recipe, data, # Export hindcast, forecast and observations onto outfile save_forecast(recipe = recipe, data_cube = data$hcst, - type = 'hcst', - outdir = outdir) + type = 'hcst', + outdir = outdir) if (!is.null(data$fcst)) { save_forecast(recipe = recipe, data_cube = data$fcst, - type = 'fcst', - outdir = outdir) + type = 'fcst', + outdir = outdir) } save_observations(recipe = recipe, data_cube = data$obs, - outdir = outdir) + outdir = outdir) # Separate ensemble correlation from the rest of the metrics, as it has one # extra dimension "ensemble" and must be saved to a different file @@ -58,29 +66,29 @@ save_data <- function(recipe, data, # Export skill metrics onto outfile if (!is.null(skill_metrics)) { save_metrics(recipe = recipe, skill = skill_metrics, - data_cube = data$hcst, - outdir = outdir) + data_cube = data$hcst, + outdir = outdir) } if (!is.null(corr_metrics)) { save_corr(recipe = recipe, skill = corr_metrics, - data_cube = data$hcst, - outdir = outdir) + data_cube = data$hcst, + outdir = outdir) } # Export probabilities onto outfile if (!is.null(probabilities)) { save_percentiles(recipe = recipe, percentiles = probabilities$percentiles, - data_cube = data$hcst, - outdir = outdir) + data_cube = data$hcst, + outdir = outdir) save_probabilities(recipe = recipe, probs = probabilities$probs, - data_cube = data$hcst, - type = "hcst", - outdir = outdir) + data_cube = data$hcst, + type = "hcst", + outdir = outdir) if (!is.null(probabilities$probs_fcst)) { save_probabilities(recipe = recipe, probs = probabilities$probs_fcst, - data_cube = data$fcst, - type = "fcst", - outdir = outdir) + data_cube = data$fcst, + type = "fcst", + outdir = outdir) } } } @@ -90,18 +98,18 @@ get_global_attributes <- function(recipe, archive) { # netCDF files. parameters <- recipe$Analysis hcst_period <- paste0(parameters$Time$hcst_start, " to ", - parameters$Time$hcst_end) + parameters$Time$hcst_end) current_time <- paste0(as.character(Sys.time()), " ", Sys.timezone()) system_name <- parameters$Datasets$System$name reference_name <- parameters$Datasets$Reference$name attrs <- list(reference_period = hcst_period, - institution_system = archive$System[[system_name]]$institution, - institution_reference = archive$Reference[[reference_name]]$institution, - system = system_name, - reference = reference_name, - calibration_method = parameters$Workflow$Calibration$method, - computed_on = current_time) + institution_system = archive$System[[system_name]]$institution, + institution_reference = archive$Reference[[reference_name]]$institution, + system = system_name, + reference = reference_name, + calibration_method = parameters$Workflow$Calibration$method, + computed_on = current_time) return(attrs) } @@ -121,14 +129,14 @@ get_times <- function(store.freq, fcst.horizon, leadtimes, sdate, calendar) { dim(time) <- length(time) sdate <- as.Date(sdate, format = '%Y%m%d') # reformatting metadata <- list(time = list(units = paste0(ref, sdate, 'T00:00:00'), - calendar = calendar)) + calendar = calendar)) attr(time, 'variables') <- metadata names(dim(time)) <- 'time' sdate <- 1:length(sdate) dim(sdate) <- length(sdate) metadata <- list(sdate = list(standard_name = paste(strtoi(sdate), - collapse=", "), + collapse=", "), units = paste0('Init date'))) attr(sdate, 'variables') <- metadata names(dim(sdate)) <- 'sdate' @@ -154,760 +162,3 @@ get_latlon <- function(latitude, longitude) { return(list(lat=latitude, lon=longitude)) } - -save_forecast <- function(recipe, - data_cube, - type = "hcst", - agg = "global", - outdir = NULL) { - # Loops over the years in the s2dv_cube containing a hindcast or forecast - # and exports each year to a netCDF file. - # data_cube: s2dv_cube containing the data and metadata - # recipe: the auto-s2s recipe - # outdir: directory where the files should be saved - # agg: aggregation, "global" or "country" - - lalo <- c('longitude', 'latitude') - archive <- get_archive(recipe) - dictionary <- read_yaml("conf/variable-dictionary.yml") - variable <- data_cube$attrs$Variable$varName - var.longname <- data_cube$attrs$Variable$metadata[[variable]]$long_name - global_attributes <- get_global_attributes(recipe, archive) - fcst.horizon <- tolower(recipe$Analysis$Horizon) - store.freq <- recipe$Analysis$Variables$freq - calendar <- archive$System[[global_attributes$system]]$calendar - - if (is.null(outdir)) { - outdir <- get_dir(recipe) - } - - # Generate vector containing leadtimes - dates <- as.PCICt(ClimProjDiags::Subset(data_cube$attrs$Dates, 'syear', 1), - cal = calendar) - if (fcst.horizon == 'decadal') { - ## Method 1: Use the first date as init_date. But it may be better to use - ## the real initialized date (ask users) - # init_date <- as.Date(data_cube$Dates$start[1], format = '%Y%m%d') - ## Method 2: use initial month - init_month <- archive$System[[recipe$Analysis$Datasets$System$name]]$initial_month - if (type == 'hcst') { - init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, '-', - sprintf('%02d', init_month), '-01'), - cal = calendar) - } else if (type == 'fcst') { - init_date <- as.PCICt(paste0(recipe$Analysis$Time$fcst_year[1], '-', - sprintf('%02d', init_month), '-01'), - cal = calendar) - } - } else { - if (type == 'hcst') { - init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, - recipe$Analysis$Time$sdate), - format = '%Y%m%d', cal = calendar) - } else if (type == 'fcst') { - init_date <- as.PCICt(paste0(recipe$Analysis$Time$fcst_year, - recipe$Analysis$Time$sdate), - format = '%Y%m%d', cal = calendar) - } - } - # Get time difference in hours - leadtimes <- as.numeric(dates - init_date)/3600 - - syears <- seq(1:dim(data_cube$data)['syear'][[1]]) - # expect dim = [sday = 1, sweek = 1, syear, time] - syears_val <- lubridate::year(data_cube$attrs$Dates[1, 1, , 1]) - for (i in syears) { - # Select year from array and rearrange dimensions - fcst <- ClimProjDiags::Subset(data_cube$data, 'syear', i, drop = T) - - if (!("time" %in% names(dim(fcst)))) { - dim(fcst) <- c("time" = 1, dim(fcst)) - } - if (tolower(agg) == "global") { - fcst <- list(Reorder(fcst, c(lalo, 'ensemble', 'time'))) - } else { - fcst <- list(Reorder(fcst, c('country', 'ensemble', 'time'))) - } - - # Add metadata - var.sdname <- dictionary$vars[[variable]]$standard_name - if (tolower(agg) == "country") { - dims <- c('Country', 'ensemble', 'time') - var.expname <- paste0(variable, '_country') - var.longname <- paste0("Country-Aggregated ", var.longname) - var.units <- attr(data_cube$Variable, 'variable')$units - } else { - dims <- c(lalo, 'ensemble', 'time') - var.expname <- variable - var.sdname <- var.sdname - var.units <- data_cube$attrs$Variable$metadata[[variable]]$units - } - - metadata <- list(fcst = list(name = var.expname, - standard_name = var.sdname, - long_name = var.longname, - units = var.units)) - attr(fcst[[1]], 'variables') <- metadata - names(dim(fcst[[1]])) <- dims - # Add global attributes - attr(fcst[[1]], 'global_attrs') <- global_attributes - - # Select start date - if (fcst.horizon == 'decadal') { - ## NOTE: Not good to use data_cube$load_parameters$dat1 because decadal - ## data has been reshaped - # fcst.sdate <- format(as.Date(data_cube$Dates$start[i]), '%Y%m%d') - - # init_date is like "1990-11-01" - init_date <- as.POSIXct(init_date) - fcst.sdate <- init_date + lubridate::years(syears_val[i] - lubridate::year(init_date)) - fcst.sdate <- format(fcst.sdate, '%Y%m%d') - - } else { - fcst.sdate <- data_cube$attrs$load_parameters$dat1$file_date[[1]][i] - } - - # Get time dimension values and metadata - times <- get_times(store.freq, fcst.horizon, leadtimes, fcst.sdate, calendar) - time <- times$time - - # Generate name of output file - outfile <- get_filename(outdir, recipe, data_cube$attrs$Variable$varName, - fcst.sdate, agg, "exp") - - # Get grid data and metadata and export to netCDF - if (tolower(agg) == "country") { - country <- get_countries(grid) - ArrayToNc(append(country, time, fcst), outfile) - } else { - latitude <- data_cube$coords$lat[1:length(data_cube$coords$lat)] - longitude <- data_cube$coords$lon[1:length(data_cube$coords$lon)] - latlon <- get_latlon(latitude, longitude) - # Compile variables into a list and export to netCDF - vars <- list(latlon$lat, latlon$lon, time) - vars <- c(vars, fcst) - ArrayToNc(vars, outfile) - } - } - info(recipe$Run$logger, paste("#####", toupper(type), - "SAVED TO NETCDF FILE #####")) -} - - -save_observations <- function(recipe, - data_cube, - agg = "global", - outdir = NULL) { - # Loops over the years in the s2dv_cube containing the observations and - # exports each year to a netCDF file. - # data_cube: s2dv_cube containing the data and metadata - # recipe: the auto-s2s recipe - # outdir: directory where the files should be saved - # agg: aggregation, "global" or "country" - - lalo <- c('longitude', 'latitude') - archive <- get_archive(recipe) - dictionary <- read_yaml("conf/variable-dictionary.yml") - variable <- data_cube$attrs$Variable$varName - var.longname <- data_cube$attrs$Variable$metadata[[variable]]$long_name - global_attributes <- get_global_attributes(recipe, archive) - fcst.horizon <- tolower(recipe$Analysis$Horizon) - store.freq <- recipe$Analysis$Variables$freq - calendar <- archive$Reference[[global_attributes$reference]]$calendar - - if (is.null(outdir)) { - outdir <- get_dir(recipe) - } - - # Generate vector containing leadtimes - ## TODO: Move to a separate function? - dates <- as.PCICt(ClimProjDiags::Subset(data_cube$attrs$Dates, 'syear', 1), - cal = calendar) - if (fcst.horizon == 'decadal') { - ## Method 1: Use the first date as init_date. But it may be better to use - ## the real initialized date (ask users) -# init_date <- as.Date(data_cube$Dates$start[1], format = '%Y%m%d') - ## Method 2: use initial month - init_month <- archive$System[[recipe$Analysis$Datasets$System$name]]$initial_month - init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, '-', - sprintf('%02d', init_month), '-01'), - cal = calendar) - - } else { - init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, - recipe$Analysis$Time$sdate), - format = '%Y%m%d', cal = calendar) - } - # Get time difference in hours - leadtimes <- as.numeric(dates - init_date)/3600 - - syears <- seq(1:dim(data_cube$data)['syear'][[1]]) - ## expect dim = [sday = 1, sweek = 1, syear, time] - syears_val <- lubridate::year(data_cube$attrs$Dates[1, 1, , 1]) - for (i in syears) { - # Select year from array and rearrange dimensions - fcst <- ClimProjDiags::Subset(data_cube$data, 'syear', i, drop = T) - - if (!("time" %in% names(dim(fcst)))) { - dim(fcst) <- c("time" = 1, dim(fcst)) - } - if (tolower(agg) == "global") { - fcst <- list(Reorder(fcst, c(lalo, 'time'))) - } else { - fcst <- list(Reorder(fcst, c('country', 'time'))) - } - - # Add metadata - var.sdname <- dictionary$vars[[variable]]$standard_name - if (tolower(agg) == "country") { - dims <- c('Country', 'time') - var.expname <- paste0(variable, '_country') - var.longname <- paste0("Country-Aggregated ", var.longname) - var.units <- data_cube$attrs$Variable$metadata[[variable]]$units - } else { - dims <- c(lalo, 'time') - var.expname <- variable - var.units <- data_cube$attrs$Variable$metadata[[variable]]$units - } - - metadata <- list(fcst = list(name = var.expname, - standard_name = var.sdname, - long_name = var.longname, - units = var.units)) - attr(fcst[[1]], 'variables') <- metadata - names(dim(fcst[[1]])) <- dims - # Add global attributes - attr(fcst[[1]], 'global_attrs') <- global_attributes - - # Select start date. The date is computed for each year, and adapted for - # consistency with the hcst/fcst dates, so that both sets of files have - # the same name pattern. - ## Because observations are loaded differently in the daily vs. monthly - ## cases, different approaches are necessary. - if (fcst.horizon == 'decadal') { - # init_date is like "1990-11-01" - init_date <- as.POSIXct(init_date) - fcst.sdate <- init_date + lubridate::years(syears_val[i] - lubridate::year(init_date)) - } else { - - if (store.freq == "monthly_mean") { - fcst.sdate <- data_cube$attrs$load_parameters$dat1$file_date[[1]][i] - fcst.sdate <- as.Date(paste0(fcst.sdate, "01"), '%Y%m%d') - } else { - fcst.sdate <- as.Date(data_cube$attrs$Dates[i]) - } - } - - # Ensure the year is correct if the first leadtime goes to the next year - init_date <- as.POSIXct(init_date) - if (lubridate::month(fcst.sdate) < lubridate::month(init_date)) { - lubridate::year(fcst.sdate) <- lubridate::year(fcst.sdate) + 1 - } - # Ensure that the initialization month is consistent with the hindcast - lubridate::month(fcst.sdate) <- lubridate::month(init_date) - fcst.sdate <- format(fcst.sdate, format = '%Y%m%d') - - # Get time dimension values and metadata - times <- get_times(store.freq, fcst.horizon, leadtimes, fcst.sdate, calendar) - time <- times$time - - # Generate name of output file - outfile <- get_filename(outdir, recipe, data_cube$attrs$Variable$varName, - fcst.sdate, agg, "obs") - - # Get grid data and metadata and export to netCDF - if (tolower(agg) == "country") { - country <- get_countries(grid) - ArrayToNc(append(country, time, fcst), outfile) - } else { - latitude <- data_cube$coords$lat[1:length(data_cube$coords$lat)] - longitude <- data_cube$coords$lon[1:length(data_cube$coords$lon)] - latlon <- get_latlon(latitude, longitude) - # Compile variables into a list and export to netCDF - vars <- list(latlon$lat, latlon$lon, time) - vars <- c(vars, fcst) - ArrayToNc(vars, outfile) - } - } - info(recipe$Run$logger, "##### OBS SAVED TO NETCDF FILE #####") -} - -## TODO: Place inside a function somewhere -# if (tolower(agg) == "country") { -# load(mask.path) -# grid <- europe.countries.iso -# } else { -# grid <- list(lon=attr(var.obs, 'Variables')$dat1$longitude, -# lat=attr(var.obs, 'Variables')$dat1$latitude) -# } - -save_metrics <- function(recipe, - skill, - data_cube, - agg = "global", - outdir = NULL) { - # This function adds metadata to the skill metrics in 'skill' - # and exports them to a netCDF file inside 'outdir'. - - # Define grid dimensions and names - lalo <- c('longitude', 'latitude') - archive <- get_archive(recipe) - dictionary <- read_yaml("conf/variable-dictionary.yml") - - - # Remove singleton dimensions and rearrange lon, lat and time dims - if (tolower(agg) == "global") { - skill <- lapply(skill, function(x) { - Reorder(x, c(lalo, 'time'))}) - } - # Add global and variable attributes - global_attributes <- get_global_attributes(recipe, archive) - ## TODO: Sort out the logic once default behavior is decided - if ((!is.null(recipe$Analysis$Workflow$Anomalies$compute)) && - (recipe$Analysis$Workflow$Anomalies$compute)) { - global_attributes <- c(list(from_anomalies = "Yes"), - global_attributes) - } else { - global_attributes <- c(list(from_anomalies = "No"), - global_attributes) - } - attr(skill[[1]], 'global_attrs') <- global_attributes - - for (i in 1:length(skill)) { - metric <- names(skill[i]) - long_name <- dictionary$metrics[[metric]]$long_name - missing_val <- -9.e+33 - skill[[i]][is.na(skill[[i]])] <- missing_val - if (tolower(agg) == "country") { - sdname <- paste0(metric, " region-aggregated metric") - dims <- c('Country', 'time') - } else { - sdname <- paste0(metric) #, " grid point metric") - dims <- c(lalo, 'time') - } - metadata <- list(metric = list(name = metric, - standard_name = sdname, - long_name = long_name, - missing_value = missing_val)) - attr(skill[[i]], 'variables') <- metadata - names(dim(skill[[i]])) <- dims - } - - # Time indices and metadata - fcst.horizon <- tolower(recipe$Analysis$Horizon) - store.freq <- recipe$Analysis$Variables$freq - calendar <- archive$System[[global_attributes$system]]$calendar - - # Generate vector containing leadtimes - dates <- as.PCICt(ClimProjDiags::Subset(data_cube$attrs$Dates, 'syear', 1), - cal = calendar) - - if (fcst.horizon == 'decadal') { - init_month <- archive$System[[recipe$Analysis$Datasets$System$name]]$initial_month - init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, '-', - sprintf('%02d', init_month), '-01'), - cal = calendar) - } else { - init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, - recipe$Analysis$Time$sdate), - format = '%Y%m%d', cal = calendar) - } - - # Get time difference in hours - leadtimes <- as.numeric(dates - init_date)/3600 - - # Select start date - # If a fcst is provided, use that as the ref. year. Otherwise use 1970. - if (fcst.horizon == 'decadal') { - if (!is.null(recipe$Analysis$Time$fcst_year)) { - #PROBLEM: May be more than one fcst_year - fcst.sdate <- paste0(recipe$Analysis$Time$fcst_year[1], - sprintf('%02d', init_month), '01') - } else { - fcst.sdate <- paste0("1970", sprintf('%02d', init_month), '01') - } - } else { - if (!is.null(recipe$Analysis$Time$fcst_year)) { - fcst.sdate <- paste0(recipe$Analysis$Time$fcst_year, - recipe$Analysis$Time$sdate) - } else { - fcst.sdate <- paste0("1970", recipe$Analysis$Time$sdate) - } - } - - times <- get_times(store.freq, fcst.horizon, leadtimes, fcst.sdate, calendar) - time <- times$time - - # Generate name of output file - if (is.null(outdir)) { - outdir <- get_dir(recipe) - } - outfile <- get_filename(outdir, recipe, data_cube$attrs$Variable$varName, - fcst.sdate, agg, "skill") - - # Get grid data and metadata and export to netCDF - if (tolower(agg) == "country") { - country <- get_countries(grid) - ArrayToNc(append(country, time, skill), outfile) - } else { - latitude <- data_cube$coords$lat[1:length(data_cube$coords$lat)] - longitude <- data_cube$coords$lon[1:length(data_cube$coords$lon)] - latlon <- get_latlon(latitude, longitude) - # Compile variables into a list and export to netCDF - vars <- list(latlon$lat, latlon$lon, time) - vars <- c(vars, skill) - ArrayToNc(vars, outfile) - } - info(recipe$Run$logger, "##### SKILL METRICS SAVED TO NETCDF FILE #####") -} - -save_corr <- function(recipe, - skill, - data_cube, - agg = "global", - outdir = NULL) { - # This function adds metadata to the ensemble correlation in 'skill' - # and exports it to a netCDF file inside 'outdir'. - - archive <- get_archive(recipe) - dictionary <- read_yaml("conf/variable-dictionary.yml") - # Define grid dimensions and names - lalo <- c('longitude', 'latitude') - # Remove singleton dimensions and rearrange lon, lat and time dims - if (tolower(agg) == "global") { - skill <- lapply(skill, function(x) { - Reorder(x, c(lalo, 'ensemble', 'time'))}) - } - # Add global and variable attributes - global_attributes <- get_global_attributes(recipe, archive) - ## TODO: Sort out the logic once default behavior is decided - if ((!is.null(recipe$Analysis$Workflow$Anomalies$compute)) && - (recipe$Analysis$Workflow$Anomalies$compute)) { - global_attributes <- c(global_attributes, - list(from_anomalies = "Yes")) - } else { - global_attributes <- c(global_attributes, - list(from_anomalies = "No")) - } - attr(skill[[1]], 'global_attrs') <- global_attributes - - for (i in 1:length(skill)) { - metric <- names(skill[i]) - long_name <- dictionary$metrics[[metric]]$long_name - missing_val <- -9.e+33 - skill[[i]][is.na(skill[[i]])] <- missing_val - if (tolower(agg) == "country") { - sdname <- paste0(metric, " region-aggregated metric") - dims <- c('Country', 'ensemble', 'time') - } else { - sdname <- paste0(metric) #, " grid point metric") # formerly names(metric) - dims <- c(lalo, 'ensemble', 'time') - } - metadata <- list(metric = list(name = metric, - standard_name = sdname, - long_name = long_name, - missing_value = missing_val)) - attr(skill[[i]], 'variables') <- metadata - names(dim(skill[[i]])) <- dims - } - - # Time indices and metadata - fcst.horizon <- tolower(recipe$Analysis$Horizon) - store.freq <- recipe$Analysis$Variables$freq - calendar <- archive$System[[global_attributes$system]]$calendar - - # Generate vector containing leadtimes - dates <- as.PCICt(ClimProjDiags::Subset(data_cube$attrs$Dates, 'syear', 1), - cal = calendar) - if (fcst.horizon == 'decadal') { - init_month <- archive$System[[recipe$Analysis$Datasets$System$name]]$initial_month - init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, '-', - sprintf('%02d', init_month), '-01'), - cal = calendar) - } else { - init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, - recipe$Analysis$Time$sdate), - format = '%Y%m%d', cal = calendar) - } - - # Get time difference in hours - leadtimes <- as.numeric(dates - init_date)/3600 - - # Select start date - # If a fcst is provided, use that as the ref. year. Otherwise use 1970. - if (fcst.horizon == 'decadal') { - if (!is.null(recipe$Analysis$Time$fcst_year)) { - #PROBLEM: May be more than one fcst_year - fcst.sdate <- paste0(recipe$Analysis$Time$fcst_year[1], - sprintf('%02d', init_month), '01') - } else { - fcst.sdate <- paste0("1970", sprintf('%02d', init_month), '01') - } - } else { - if (!is.null(recipe$Analysis$Time$fcst_year)) { - fcst.sdate <- paste0(recipe$Analysis$Time$fcst_year, - recipe$Analysis$Time$sdate) - } else { - fcst.sdate <- paste0("1970", recipe$Analysis$Time$sdate) - } - } - - times <- get_times(store.freq, fcst.horizon, leadtimes, fcst.sdate, calendar) - time <- times$time - - # Generate name of output file - if (is.null(outdir)) { - outdir <- get_dir(recipe) - } - outfile <- get_filename(outdir, recipe, data_cube$attrs$Variable$varName, - fcst.sdate, agg, "corr") - - # Get grid data and metadata and export to netCDF - if (tolower(agg) == "country") { - country <- get_countries(grid) - ArrayToNc(append(country, time, skill), outfile) - } else { - latitude <- data_cube$coords$lat[1:length(data_cube$coords$lat)] - longitude <- data_cube$coords$lon[1:length(data_cube$coords$lon)] - latlon <- get_latlon(latitude, longitude) - # Compile variables into a list and export to netCDF - vars <- list(latlon$lat, latlon$lon, time) - vars <- c(vars, skill) - ArrayToNc(vars, outfile) - } - info(recipe$Run$logger, - "##### ENSEMBLE CORRELATION SAVED TO NETCDF FILE #####") -} - -save_percentiles <- function(recipe, - percentiles, - data_cube, - agg = "global", - outdir = NULL) { - # This function adds metadata to the percentiles - # and exports them to a netCDF file inside 'outdir'. - archive <- get_archive(recipe) - - # Define grid dimensions and names - lalo <- c('longitude', 'latitude') - # Remove singleton dimensions and rearrange lon, lat and time dims - if (tolower(agg) == "global") { - percentiles <- lapply(percentiles, function(x) { - Reorder(x, c(lalo, 'time'))}) - } - - # Add global and variable attributes - global_attributes <- get_global_attributes(recipe, archive) - ## TODO: Sort out the logic once default behavior is decided - if ((!is.null(recipe$Analysis$Workflow$Anomalies$compute)) && - (recipe$Analysis$Workflow$Anomalies$compute)) { - global_attributes <- c(list(from_anomalies = "Yes"), - global_attributes) - } else { - global_attributes <- c(list(from_anomalies = "No"), - global_attributes) - } - attr(percentiles[[1]], 'global_attrs') <- global_attributes - - for (i in 1:length(percentiles)) { - ## TODO: replace with proper standard names - percentile <- names(percentiles[i]) - long_name <- paste0(gsub("^.*_", "", percentile), "th percentile") - if (tolower(agg) == "country") { - dims <- c('Country', 'time') - } else { - dims <- c(lalo, 'time') - } - metadata <- list(metric = list(name = percentile, long_name = long_name)) - attr(percentiles[[i]], 'variables') <- metadata - names(dim(percentiles[[i]])) <- dims - } - - # Time indices and metadata - fcst.horizon <- tolower(recipe$Analysis$Horizon) - store.freq <- recipe$Analysis$Variables$freq - calendar <- archive$System[[global_attributes$system]]$calendar - # Generate vector containing leadtimes - dates <- as.PCICt(ClimProjDiags::Subset(data_cube$attrs$Dates, 'syear', 1), - cal = calendar) - if (fcst.horizon == 'decadal') { - init_month <- archive$System[[recipe$Analysis$Datasets$System$name]]$initial_month - init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, '-', - sprintf('%02d', init_month), '-01'), - cal = calendar) - } else { - init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, - recipe$Analysis$Time$sdate), - format = '%Y%m%d', cal = calendar) - } - - # Get time difference in hours - leadtimes <- as.numeric(dates - init_date)/3600 - - # Select start date - # If a fcst is provided, use that as the ref. year. Otherwise use 1970. - if (fcst.horizon == 'decadal') { - if (!is.null(recipe$Analysis$Time$fcst_year)) { - #PROBLEM: May be more than one fcst_year - fcst.sdate <- paste0(recipe$Analysis$Time$fcst_year[1], - sprintf('%02d', init_month), '01') - } else { - fcst.sdate <- paste0("1970", sprintf('%02d', init_month), '01') - } - } else { - if (!is.null(recipe$Analysis$Time$fcst_year)) { - fcst.sdate <- paste0(recipe$Analysis$Time$fcst_year, - recipe$Analysis$Time$sdate) - } else { - fcst.sdate <- paste0("1970", recipe$Analysis$Time$sdate) - } - } - times <- get_times(store.freq, fcst.horizon, leadtimes, fcst.sdate, calendar) - time <- times$time - - # Generate name of output file - if (is.null(outdir)) { - outdir <- get_dir(recipe) - } - outfile <- get_filename(outdir, recipe, data_cube$attrs$Variable$varName, - fcst.sdate, agg, "percentiles") - # Get grid data and metadata and export to netCDF - if (tolower(agg) == "country") { - country <- get_countries(grid) - ArrayToNc(append(country, time, percentiles), outfile) - } else { - latitude <- data_cube$coords$lat[1:length(data_cube$coords$lat)] - longitude <- data_cube$coords$lon[1:length(data_cube$coords$lon)] - latlon <- get_latlon(latitude, longitude) - # Compile variables into a list and export to netCDF - vars <- list(latlon$lat, latlon$lon, time) - vars <- c(vars, percentiles) - ArrayToNc(vars, outfile) - } - info(recipe$Run$logger, "##### PERCENTILES SAVED TO NETCDF FILE #####") -} - -save_probabilities <- function(recipe, - probs, - data_cube, - agg = "global", - type = "hcst", - outdir = NULL) { - # Loops over the years in the s2dv_cube containing a hindcast or forecast - # and exports the corresponding category probabilities to a netCDF file. - # probs: array containing the probability data - # recipe: the auto-s2s recipe - # data_cube: s2dv_cube containing the data and metadata - # outdir: directory where the files should be saved - # type: 'exp' (hcst and fcst) or 'obs' - # agg: aggregation, "global" or "country" - # type: 'hcst' or 'fcst' - - lalo <- c('longitude', 'latitude') - archive <- get_archive(recipe) - variable <- data_cube$attrs$Variable$varName - var.longname <- data_cube$attrs$Variable$metadata[[variable]]$long_name - global_attributes <- get_global_attributes(recipe, archive) - if (is.null(outdir)) { - outdir <- get_dir(recipe) - } - # Add anomaly computation to global attributes - ## TODO: Sort out the logic once default behavior is decided - if ((!is.null(recipe$Analysis$Workflow$Anomalies$compute)) && - (recipe$Analysis$Workflow$Anomalies$compute)) { - global_attributes <- c(list(from_anomalies = "Yes"), - global_attributes) - } else { - global_attributes <- c(list(from_anomalies = "No"), - global_attributes) - } - fcst.horizon <- tolower(recipe$Analysis$Horizon) - store.freq <- recipe$Analysis$Variables$freq - calendar <- archive$System[[global_attributes$system]]$calendar - - # Generate vector containing leadtimes - ## TODO: Move to a separate function? - dates <- as.PCICt(ClimProjDiags::Subset(data_cube$attrs$Dates, 'syear', 1), - cal = calendar) - if (fcst.horizon == 'decadal') { - init_month <- archive$System[[recipe$Analysis$Datasets$System$name]]$initial_month - init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, '-', - sprintf('%02d', init_month), '-01'), - cal = calendar) - } else { - init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, - recipe$Analysis$Time$sdate), - format = '%Y%m%d', cal = calendar) - } - - # Get time difference in hours - leadtimes <- as.numeric(dates - init_date)/3600 - - syears <- seq(1:dim(data_cube$data)['syear'][[1]]) - ## expect dim = [sday = 1, sweek = 1, syear, time] - syears_val <- lubridate::year(data_cube$attrs$Dates[1, 1, , 1]) - for (i in syears) { - # Select year from array and rearrange dimensions - probs_syear <- lapply(probs, ClimProjDiags::Subset, 'syear', i, drop = 'selected') - if (tolower(agg) == "global") { - probs_syear <- lapply(probs_syear, function(x) { - Reorder(x, c(lalo, 'time'))}) - } else { - probs_syear <- lapply(probs_syear, function(x) { - Reorder(x, c('country', 'time'))}) - } - - ## TODO: Replace for loop with something more efficient? - for (bin in 1:length(probs_syear)) { - prob_bin <- names(probs_syear[bin]) - long_name <- paste0(prob_bin, " probability category") - if (tolower(agg) == "country") { - dims <- c('Country', 'time') - } else { - dims <- c(lalo, 'time') - } - metadata <- list(metric = list(name = prob_bin, long_name = long_name)) - attr(probs_syear[[bin]], 'variables') <- metadata - names(dim(probs_syear[[bin]])) <- dims # is this necessary? - } - - # Add global attributes - attr(probs_syear[[1]], 'global_attrs') <- global_attributes - - # Select start date - if (fcst.horizon == 'decadal') { - # init_date is like "1990-11-01" - init_date <- as.POSIXct(init_date) - fcst.sdate <- init_date + lubridate::years(syears_val[i] - lubridate::year(init_date)) - fcst.sdate <- format(fcst.sdate, '%Y%m%d') - } else { - fcst.sdate <- data_cube$attrs$load_parameters$dat1$file_date[[1]][i] - } - - # Get time dimension values and metadata - times <- get_times(store.freq, fcst.horizon, leadtimes, fcst.sdate, calendar) - time <- times$time - - # Generate name of output file - outfile <- get_filename(outdir, recipe, data_cube$attrs$Variable$varName, - fcst.sdate, agg, "probs") - - # Get grid data and metadata and export to netCDF - if (tolower(agg) == "country") { - country <- get_countries(grid) - ArrayToNc(append(country, time, probs_syear), outfile) - } else { - latitude <- data_cube$coords$lat[1:length(data_cube$coords$lat)] - longitude <- data_cube$coords$lon[1:length(data_cube$coords$lon)] - latlon <- get_latlon(latitude, longitude) - # Compile variables into a list and export to netCDF - vars <- list(latlon$lat, latlon$lon, time) - vars <- c(vars, probs_syear) - ArrayToNc(vars, outfile) - } - } - - info(recipe$Run$logger, - paste("#####", toupper(type), - "PROBABILITIES SAVED TO NETCDF FILE #####")) -} diff --git a/modules/Skill/Skill.R b/modules/Skill/Skill.R index 3eab1287..d3f74b13 100644 --- a/modules/Skill/Skill.R +++ b/modules/Skill/Skill.R @@ -52,8 +52,8 @@ source("modules/Skill/R/tmp/RandomWalkTest.R") # " it can call ", metric_fun )) # compute_skill_metrics <- function(recipe, data$hcst, obs, -# clim_data$hcst = NULL, -# clim_obs = NULL) { +# clim_data$hcst = NULL, +# clim_obs = NULL) { compute_skill_metrics <- function(recipe, data) { # data$hcst: s2dv_cube containing the hindcast @@ -68,14 +68,14 @@ compute_skill_metrics <- function(recipe, data) { # if (recipe$Analysis$Workflow$Anomalies$compute) { # if (is.null(clim_data$hcst) || is.null(clim_obs)) { # warn(recipe$Run$logger, "Anomalies have been requested in the recipe, -# but the climatologies have not been provided in the -# compute_skill_metrics call. Be aware that some metrics like the -# Mean Bias may not be correct.") +# but the climatologies have not been provided in the +# compute_skill_metrics call. Be aware that some metrics like the +# Mean Bias may not be correct.") # } # } else { # warn(recipe$Run$logger, "Anomaly computation was not requested in the -# recipe. Be aware that some metrics, such as the CRPSS may not be -# correct.") +# recipe. Be aware that some metrics, such as the CRPSS may not be +# correct.") # } time_dim <- 'syear' memb_dim <- 'ensemble' @@ -94,7 +94,7 @@ compute_skill_metrics <- function(recipe, data) { for (metric in strsplit(metrics, ", | |,")[[1]]) { # Whether the fair version of the metric is to be computed if (metric %in% c('frps', 'frpss', 'bss10', 'bss90', - 'fcrps', 'fcrpss')) { + 'fcrps', 'fcrpss')) { Fair <- T } else { Fair <- F @@ -108,65 +108,65 @@ compute_skill_metrics <- function(recipe, data) { # Ranked Probability Score and Fair version if (metric %in% c('rps', 'frps')) { skill <- RPS(data$hcst$data, data$obs$data, - time_dim = time_dim, - memb_dim = memb_dim, - Fair = Fair, - ncores = ncores) + time_dim = time_dim, + memb_dim = memb_dim, + Fair = Fair, + ncores = ncores) skill <- .drop_dims(skill) skill_metrics[[ metric ]] <- skill # Ranked Probability Skill Score and Fair version } else if (metric %in% c('rpss', 'frpss')) { skill <- RPSS(data$hcst$data, data$obs$data, - time_dim = time_dim, - memb_dim = memb_dim, - Fair = Fair, - ncores = ncores) + time_dim = time_dim, + memb_dim = memb_dim, + Fair = Fair, + ncores = ncores) skill <- lapply(skill, function(x) { - .drop_dims(x)}) + .drop_dims(x)}) skill_metrics[[ metric ]] <- skill$rpss skill_metrics[[ paste0(metric, "_significance") ]] <- skill$sign # Brier Skill Score - 10th percentile } else if (metric == 'bss10') { skill <- RPSS(data$hcst$data, data$obs$data, - time_dim = time_dim, - memb_dim = memb_dim, - prob_thresholds = 0.1, - Fair = Fair, - ncores = ncores) + time_dim = time_dim, + memb_dim = memb_dim, + prob_thresholds = 0.1, + Fair = Fair, + ncores = ncores) skill <- lapply(skill, function(x) { - .drop_dims(x)}) + .drop_dims(x)}) skill_metrics[[ metric ]] <- skill$rpss skill_metrics[[ paste0(metric, "_significance") ]] <- skill$sign # Brier Skill Score - 90th percentile } else if (metric == 'bss90') { skill <- RPSS(data$hcst$data, data$obs$data, - time_dim = time_dim, - memb_dim = memb_dim, - prob_thresholds = 0.9, - Fair = Fair, - ncores = ncores) + time_dim = time_dim, + memb_dim = memb_dim, + prob_thresholds = 0.9, + Fair = Fair, + ncores = ncores) skill <- lapply(skill, function(x) { - .drop_dims(x)}) + .drop_dims(x)}) skill_metrics[[ metric ]] <- skill$rpss skill_metrics[[ paste0(metric, "_significance") ]] <- skill$sign # CRPS and FCRPS } else if (metric %in% c('crps', 'fcrps')) { skill <- CRPS(data$hcst$data, data$obs$data, - time_dim = time_dim, - memb_dim = memb_dim, - Fair = Fair, - ncores = ncores) + time_dim = time_dim, + memb_dim = memb_dim, + Fair = Fair, + ncores = ncores) skill <- .drop_dims(skill) skill_metrics[[ metric ]] <- skill # CRPSS and FCRPSS } else if (metric %in% c('crpss', 'fcrpss')) { skill <- CRPSS(data$hcst$data, data$obs$data, - time_dim = time_dim, - memb_dim = memb_dim, - Fair = Fair, - ncores = ncores) + time_dim = time_dim, + memb_dim = memb_dim, + Fair = Fair, + ncores = ncores) skill <- lapply(skill, function(x) { - .drop_dims(x)}) + .drop_dims(x)}) skill_metrics[[ metric ]] <- skill$crpss skill_metrics[[ paste0(metric, "_significance") ]] <- skill$sign # Mean bias (climatology) @@ -174,35 +174,35 @@ compute_skill_metrics <- function(recipe, data) { ## TODO: Eliminate option to compute from anomalies # Compute from full field if ((!is.null(data$hcst.full_val)) && (!is.null(data$obs.full_val)) && - (recipe$Analysis$Workflow$Anomalies$compute)) { - skill <- Bias(data$hcst.full_val$data, data$obs.full_val$data, - time_dim = time_dim, - memb_dim = memb_dim, - ncores = ncores) + (recipe$Analysis$Workflow$Anomalies$compute)) { + skill <- Bias(data$hcst.full_val$data, data$obs.full_val$data, + time_dim = time_dim, + memb_dim = memb_dim, + ncores = ncores) } else { skill <- Bias(data$hcst$data, data$obs$data, time_dim = time_dim, - memb_dim = memb_dim, - ncores = ncores) + memb_dim = memb_dim, + ncores = ncores) } skill <- .drop_dims(skill) skill_metrics[[ metric ]] <- skill # Mean bias skill score } else if (metric == 'mean_bias_ss') { if ((!is.null(data$hcst.full_val)) && (!is.null(data$obs.full_val)) && - (recipe$Analysis$Workflow$Anomalies$compute)) { - skill <- AbsBiasSS(data$hcst.full_val$data, data$obs.full_val$data, - time_dim = time_dim, - memb_dim = memb_dim, - ncores = ncores) + (recipe$Analysis$Workflow$Anomalies$compute)) { + skill <- AbsBiasSS(data$hcst.full_val$data, data$obs.full_val$data, + time_dim = time_dim, + memb_dim = memb_dim, + ncores = ncores) } else { skill <- AbsBiasSS(data$hcst$data, data$obs$data, - time_dim = time_dim, - memb_dim = memb_dim, - ncores = ncores) + time_dim = time_dim, + memb_dim = memb_dim, + ncores = ncores) } skill <- lapply(skill, function(x) { - .drop_dims(x)}) + .drop_dims(x)}) skill_metrics[[ metric ]] <- skill$biasSS skill_metrics[[ paste0(metric, "_significance") ]] <- skill$sign # Ensemble mean correlation @@ -214,43 +214,43 @@ compute_skill_metrics <- function(recipe, data) { time_dim = time_dim, method = 'pearson', memb_dim = memb_dim, - memb = memb, - conf = F, - pval = F, - sign = T, - alpha = 0.05, + memb = memb, + conf = F, + pval = F, + sign = T, + alpha = 0.05, ncores = ncores) skill <- lapply(skill, function(x) { - .drop_dims(x)}) + .drop_dims(x)}) skill_metrics[[ metric ]] <- skill$corr skill_metrics[[ paste0(metric, "_significance") ]] <- skill$sign } else if (metric == 'rmsss') { # Compute RMSSS skill <- RMSSS(data$hcst$data, data$obs$data, - dat_dim = 'dat', - time_dim = time_dim, - memb_dim = memb_dim, - pval = FALSE, - sign = TRUE, - sig_method = 'Random Walk', - ncores = ncores) + dat_dim = 'dat', + time_dim = time_dim, + memb_dim = memb_dim, + pval = FALSE, + sign = TRUE, + sig_method = 'Random Walk', + ncores = ncores) # Compute ensemble mean and modify dimensions skill <- lapply(skill, function(x) { - .drop_dims(x)}) + .drop_dims(x)}) skill_metrics[[ metric ]] <- skill$rmsss skill_metrics[[ paste0(metric, "_significance") ]] <- skill$sign } else if (metric == 'enssprerr') { # Remove ensemble dim from obs to avoid veriApply warning obs_noensdim <- ClimProjDiags::Subset(data$obs$data, "ensemble", 1, - drop = "selected") + drop = "selected") capture.output( skill <- easyVerification::veriApply(verifun = 'EnsSprErr', - fcst = data$hcst$data, - obs = obs_noensdim, - tdim = which(names(dim(data$hcst$data))==time_dim), - ensdim = which(names(dim(data$hcst$data))==memb_dim), - na.rm = na.rm, - ncpus = ncores) + fcst = data$hcst$data, + obs = obs_noensdim, + tdim = which(names(dim(data$hcst$data))==time_dim), + ensdim = which(names(dim(data$hcst$data))==memb_dim), + na.rm = na.rm, + ncpus = ncores) ) remove(obs_noensdim) skill <- .drop_dims(skill) @@ -261,26 +261,49 @@ compute_skill_metrics <- function(recipe, data) { ## Retain _specs in metric name for clarity metric_name <- (strsplit(metric, "_"))[[1]][1] # Get metric name if (!(metric_name %in% c('frpss', 'frps', 'bss10', 'bss90', 'enscorr', - 'rpss'))) { - warn(recipe$Run$logger, - "Some of the requested SpecsVerification metrics are not available.") + 'rpss'))) { + warn(recipe$Run$logger, + "Some of the requested SpecsVerification metrics are not available.") } capture.output( skill <- Compute_verif_metrics(data$hcst$data, data$obs$data, - skill_metrics = metric_name, - verif.dims=c("syear", "sday", "sweek"), - na.rm = na.rm, - ncores = ncores) + skill_metrics = metric_name, + verif.dims=c("syear", "sday", "sweek"), + na.rm = na.rm, + ncores = ncores) ) skill <- .drop_dims(skill) if (metric_name == "frps") { - # Compute yearly mean for FRPS - skill <- colMeans(skill, dims = 1) + # Compute yearly mean for FRPS + skill <- colMeans(skill, dims = 1) } skill_metrics[[ metric ]] <- skill } } info(recipe$Run$logger, "##### SKILL METRIC COMPUTATION COMPLETE #####") + # Save outputs + recipe$Run$output_dir <- paste0(recipe$Run$output_dir, + "/outputs/Skill/") + # Separate 'corr' from the rest of the metrics because of extra 'ensemble' dim + if (recipe$Analysis$Workflow$Skill$save == 'all') { + corr_metric_names <- grep("^corr", names(skill_metrics)) + if (length(corr_metric_names) == 0) { + save_metrics(recipe = recipe, skill = skill_metrics, + data_cube = data$hcst) + } else { + # Save corr + if (length(skill_metrics[corr_metric_names]) > 0) { + save_corr(recipe = recipe, skill = skill_metrics[corr_metric_names], + data_cube = data$hcst) + } + # Save other skill metrics + if (length(skill_metrics[-corr_metric_names]) > 0) { + save_metrics(recipe = recipe, skill = skill_metrics[-corr_metric_names], + data_cube = data$hcst) + } + } + } + # Return results return(skill_metrics) } @@ -305,46 +328,46 @@ compute_probabilities <- function(recipe, data) { if (is.null(recipe$Analysis$Workflow$Probabilities$percentiles)) { error(recipe$Run$logger, "Quantiles and probability bins have been - requested, but no thresholds are provided in the recipe.") + requested, but no thresholds are provided in the recipe.") stop() } else { for (element in recipe$Analysis$Workflow$Probabilities$percentiles) { # Parse thresholds in recipe thresholds <- sapply(element, function (x) eval(parse(text = x))) quants <- compute_quants(data$hcst$data, thresholds, - ncores = ncores, - na.rm = na.rm) + ncores = ncores, + na.rm = na.rm) probs <- compute_probs(data$hcst$data, quants, - ncores = ncores, - na.rm = na.rm) + ncores = ncores, + na.rm = na.rm) for (i in seq(1:dim(quants)['bin'][[1]])) { - named_quantiles <- append(named_quantiles, - list(ClimProjDiags::Subset(quants, - 'bin', i))) - names(named_quantiles)[length(named_quantiles)] <- paste0("percentile_", - as.integer(thresholds[i]*100)) + named_quantiles <- append(named_quantiles, + list(ClimProjDiags::Subset(quants, + 'bin', i))) + names(named_quantiles)[length(named_quantiles)] <- paste0("percentile_", + as.integer(thresholds[i]*100)) } for (i in seq(1:dim(probs)['bin'][[1]])) { - if (i == 1) { - name_i <- paste0("prob_b", as.integer(thresholds[1]*100)) - } else if (i == dim(probs)['bin'][[1]]) { - name_i <- paste0("prob_a", as.integer(thresholds[i-1]*100)) - } else { - name_i <- paste0("prob_", as.integer(thresholds[i-1]*100), "_to_", - as.integer(thresholds[i]*100)) - } - named_probs <- append(named_probs, - list(ClimProjDiags::Subset(probs, - 'bin', i))) - names(named_probs)[length(named_probs)] <- name_i + if (i == 1) { + name_i <- paste0("prob_b", as.integer(thresholds[1]*100)) + } else if (i == dim(probs)['bin'][[1]]) { + name_i <- paste0("prob_a", as.integer(thresholds[i-1]*100)) + } else { + name_i <- paste0("prob_", as.integer(thresholds[i-1]*100), "_to_", + as.integer(thresholds[i]*100)) + } + named_probs <- append(named_probs, + list(ClimProjDiags::Subset(probs, + 'bin', i))) + names(named_probs)[length(named_probs)] <- name_i } # Compute fcst probability bins if (!is.null(data$fcst)) { - probs_fcst <- compute_probs(data$fcst$data, quants, - ncores = ncores, - na.rm = na.rm) + probs_fcst <- compute_probs(data$fcst$data, quants, + ncores = ncores, + na.rm = na.rm) for (i in seq(1:dim(probs_fcst)['bin'][[1]])) { if (i == 1) { @@ -353,11 +376,11 @@ compute_probabilities <- function(recipe, data) { name_i <- paste0("prob_a", as.integer(thresholds[i-1]*100)) } else { name_i <- paste0("prob_", as.integer(thresholds[i-1]*100), "_to_", - as.integer(thresholds[i]*100)) + as.integer(thresholds[i]*100)) } named_probs_fcst <- append(named_probs_fcst, - list(ClimProjDiags::Subset(probs_fcst, - 'bin', i))) + list(ClimProjDiags::Subset(probs_fcst, + 'bin', i))) names(named_probs_fcst)[length(named_probs_fcst)] <- name_i } } @@ -369,20 +392,40 @@ compute_probabilities <- function(recipe, data) { if (!is.null(data$fcst)) { fcst_years <- dim(data$fcst$data)[['syear']] named_probs_fcst <- lapply(named_probs_fcst, - function(x) {Subset(x, - along = 'syear', - indices = 1:fcst_years, - drop = 'non-selected')}) + function(x) {Subset(x, + along = 'syear', + indices = 1:fcst_years, + drop = 'non-selected')}) results <- list(probs = named_probs, - probs_fcst = named_probs_fcst, - percentiles = named_quantiles) + probs_fcst = named_probs_fcst, + percentiles = named_quantiles) } else { results <- list(probs = named_probs, - percentiles = named_quantiles) + percentiles = named_quantiles) } info(recipe$Run$logger, - "##### PERCENTILES AND PROBABILITY CATEGORIES COMPUTED #####") + "##### PERCENTILES AND PROBABILITY CATEGORIES COMPUTED #####") + # Save outputs + recipe$Run$output_dir <- paste0(recipe$Run$output_dir, + "/outputs/Skill/") + # Save percentiles + if (recipe$Analysis$Workflow$Probabilities$save %in% + c('all', 'percentiles_only')) { + save_percentiles(recipe = recipe, percentiles = results$percentiles, + data_cube = data$hcst) + } + # Save probability bins + if (recipe$Analysis$Workflow$Probabilities$save %in% + c('all', 'bins_only')) { + save_probabilities(recipe = recipe, probs = results$probs, + data_cube = data$hcst, type = "hcst") + if (!is.null(results$probs_fcst)) { + save_probabilities(recipe = recipe, probs = results$probs_fcst, + data_cube = data$fcst, type = "fcst") + } + } + # Return results return(results) } } @@ -398,7 +441,7 @@ compute_probabilities <- function(recipe, data) { # If array has memb dim (Corr case), change name to 'ensemble' if ("exp_memb" %in% names(dim(metric_array))) { names(dim(metric_array))[which(names(dim(metric_array)) == - "exp_memb")] <- "ensemble" + "exp_memb")] <- "ensemble" # } else { # dim(metric_array) <- c(dim(metric_array), "ensemble" = 1) } diff --git a/modules/Visualization/R/plot_ensemble_mean.R b/modules/Visualization/R/plot_ensemble_mean.R new file mode 100644 index 00000000..e0fa8b84 --- /dev/null +++ b/modules/Visualization/R/plot_ensemble_mean.R @@ -0,0 +1,89 @@ +plot_ensemble_mean <- function(recipe, fcst, outdir) { + + ## TODO: Add 'anomaly' to plot title + # Abort if frequency is daily + if (recipe$Analysis$Variables$freq == "daily_mean") { + stop("Visualization functions not yet implemented for daily data.") + } + + latitude <- fcst$coords$lat + longitude <- fcst$coords$lon + archive <- get_archive(recipe) + system_name <- archive$System[[recipe$Analysis$Datasets$System$name]]$name + variable <- recipe$Analysis$Variables$name + units <- attr(fcst$Variable, "variable")$units + start_date <- paste0(recipe$Analysis$Time$fcst_year, + recipe$Analysis$Time$sdate) + # Compute ensemble mean + ensemble_mean <- s2dv::MeanDims(fcst$data, 'ensemble') + # Drop extra dims, add time dim if missing: + ensemble_mean <- drop(ensemble_mean) + + if (!("time" %in% names(dim(ensemble_mean)))) { + dim(ensemble_mean) <- c("time" = 1, dim(ensemble_mean)) + } + if (!'syear' %in% names(dim(ensemble_mean))) { + ensemble_mean <- Reorder(ensemble_mean, c("time", + "longitude", + "latitude")) + } else { + ensemble_mean <- Reorder(ensemble_mean, c("syear", + "time", + "longitude", + "latitude")) + } + ## TODO: Redefine column colors, possibly depending on variable + if (variable == 'prlr') { + palette = "BrBG" + rev = F + } else { + palette = "RdBu" + rev = T + } + # Define brks, centered on in the case of anomalies + ## + if (grepl("anomaly", + fcst$attrs$Variable$metadata[[variable]]$long_name)) { + variable <- paste(variable, "anomaly") + max_value <- max(abs(ensemble_mean)) + ugly_intervals <- seq(-max_value, max_value, max_value/20) + brks <- pretty(ugly_intervals, n = 12, min.n = 8) + } else { + brks <- pretty(range(ensemble_mean, na.rm = T), n = 15, min.n = 8) + } + cols <- grDevices::hcl.colors(length(brks) - 1, palette, rev = rev) + options(bitmapType = "cairo") + + for (i_syear in start_date) { + # Define name of output file and titles + if (length(start_date) == 1) { + i_ensemble_mean <- ensemble_mean + outfile <- paste0(outdir, "forecast_ensemble_mean-", start_date, ".png") + } else { + i_ensemble_mean <- ensemble_mean[which(start_date == i_syear), , , ] + outfile <- paste0(outdir, "forecast_ensemble_mean-", i_syear, ".png") + } + toptitle <- paste("Forecast Ensemble Mean -", variable, "-", system_name, + "- Initialization:", i_syear) + months <- lubridate::month(fcst$attrs$Dates[1, 1, which(start_date == i_syear), ], + label = T, abb = F) + titles <- as.vector(months) + # Plots + PlotLayout(PlotEquiMap, c('longitude', 'latitude'), + i_ensemble_mean, longitude, latitude, + filled.continents = F, + toptitle = toptitle, + title_scale = 0.6, + titles = titles, + units = units, + cols = cols, + brks = brks, + fileout = outfile, + bar_label_digits = 4, + bar_extra_margin = rep(0.7, 4), + bar_label_scale = 1.5, + axes_label_scale = 1.3) + } + info(recipe$Run$logger, + "##### FCST ENSEMBLE MEAN PLOT SAVED TO OUTPUT DIRECTORY #####") +} diff --git a/modules/Visualization/R/plot_most_likely_terciles_map.R b/modules/Visualization/R/plot_most_likely_terciles_map.R new file mode 100644 index 00000000..9ab0199e --- /dev/null +++ b/modules/Visualization/R/plot_most_likely_terciles_map.R @@ -0,0 +1,88 @@ +plot_most_likely_terciles <- function(recipe, + fcst, + probabilities, + outdir) { + + ## TODO: Add 'anomaly' to plot title + # Abort if frequency is daily + if (recipe$Analysis$Variables$freq == "daily_mean") { + stop("Visualization functions not yet implemented for daily data.") + } + + latitude <- fcst$coords$lat + longitude <- fcst$coords$lon + archive <- get_archive(recipe) + system_name <- archive$System[[recipe$Analysis$Datasets$System$name]]$name + variable <- recipe$Analysis$Variables$name + start_date <- paste0(recipe$Analysis$Time$fcst_year, + recipe$Analysis$Time$sdate) + + # Retrieve and rearrange probability bins for the forecast + if (is.null(probabilities$probs_fcst$prob_b33) || + is.null(probabilities$probs_fcst$prob_33_to_66) || + is.null(probabilities$probs_fcst$prob_a66)) { + stop("The forecast tercile probability bins are not present inside ", + "'probabilities', the most likely tercile map cannot be plotted.") + } + + probs_fcst <- abind(probabilities$probs_fcst$prob_b33, + probabilities$probs_fcst$prob_33_to_66, + probabilities$probs_fcst$prob_a66, + along = 0) + names(dim(probs_fcst)) <- c("bin", + names(dim(probabilities$probs_fcst$prob_b33))) + + ## TODO: Improve this section + # Drop extra dims, add time dim if missing: + probs_fcst <- drop(probs_fcst) + if (!("time" %in% names(dim(probs_fcst)))) { + dim(probs_fcst) <- c("time" = 1, dim(probs_fcst)) + } + if (!'syear' %in% names(dim(probs_fcst))) { + probs_fcst <- Reorder(probs_fcst, c("time", "bin", "longitude", "latitude")) + } else { + probs_fcst <- Reorder(probs_fcst, + c("syear", "time", "bin", "longitude", "latitude")) + } + + for (i_syear in start_date) { + # Define name of output file and titles + if (length(start_date) == 1) { + i_probs_fcst <- probs_fcst + outfile <- paste0(outdir, "forecast_most_likely_tercile-", start_date, + ".png") + } else { + i_probs_fcst <- probs_fcst[which(start_date == i_syear), , , , ] + outfile <- paste0(outdir, "forecast_most_likely_tercile-", i_syear, ".png") + } + toptitle <- paste("Most Likely Tercile -", variable, "-", system_name, "-", + "Initialization:", i_syear) + months <- lubridate::month(fcst$attrs$Dates[1, 1, which(start_date == i_syear), ], + label = T, abb = F) + ## TODO: Ensure this works for daily and sub-daily cases + titles <- as.vector(months) + + # Plots + ## NOTE: PlotLayout() and PlotMostLikelyQuantileMap() are still being worked + ## on. + suppressWarnings( + PlotLayout(PlotMostLikelyQuantileMap, c('bin', 'longitude', 'latitude'), + cat_dim = 'bin', + i_probs_fcst, longitude, latitude, + coast_width = 1.5, + title_scale = 0.6, + legend_scale = 0.8, #cex_bar_titles = 0.6, + toptitle = toptitle, + titles = titles, + fileout = outfile, + bar_label_digits = 2, + bar_scale = rep(0.7, 4), + bar_label_scale = 1.2, + axes_label_scale = 1.3, + triangle_ends = c(F, F), width = 11, height = 8) + ) + } + + info(recipe$Run$logger, + "##### MOST LIKELY TERCILE PLOT SAVED TO OUTPUT DIRECTORY #####") +} diff --git a/modules/Visualization/R/plot_skill_metrics.R b/modules/Visualization/R/plot_skill_metrics.R new file mode 100644 index 00000000..f8be19d9 --- /dev/null +++ b/modules/Visualization/R/plot_skill_metrics.R @@ -0,0 +1,162 @@ +plot_skill_metrics <- function(recipe, data_cube, skill_metrics, + outdir, significance = F) { + # recipe: Auto-S2S recipe + # archive: Auto-S2S archive + # data_cube: s2dv_cube object with the corresponding hindcast data + # skill_metrics: list of named skill metrics arrays + # outdir: output directory + # significance: T/F, whether to display the significance dots in the plots + + ## TODO: OPTION for CERISE: Using PuOr + # Abort if frequency is daily + if (recipe$Analysis$Variables$freq == "daily_mean") { + error(recipe$Run$logger, "Visualization functions not yet implemented + for daily data.") + stop() + } + # Abort if skill_metrics is not list + if (!is.list(skill_metrics) || is.null(names(skill_metrics))) { + stop("The element 'skill_metrics' must be a list of named arrays.") + } + + latitude <- data_cube$coords$lat + longitude <- data_cube$coords$lon + archive <- get_archive(recipe) + system_name <- archive$System[[recipe$Analysis$Datasets$System$name]]$name + hcst_period <- paste0(recipe$Analysis$Time$hcst_start, "-", + recipe$Analysis$Time$hcst_end) + init_month <- as.numeric(substr(recipe$Analysis$Time$sdate, + start = 1, stop = 2)) + month_label <- tolower(month.name[init_month]) + month_abbreviation <- month.abb[init_month] + + # Define color palette and number of breaks according to output format + ## TODO: Make separate function + if (tolower(recipe$Analysis$Output_format) %in% c("scorecards", "cerise")) { + diverging_palette <- "purpleorange" + sequential_palette <- "Oranges" + } else { + diverging_palette <- "bluered" + sequential_palette <- "Reds" + } + + # Group different metrics by type + skill_scores <- c("rpss", "bss90", "bss10", "frpss", "crpss", "mean_bias_ss", + "enscorr", "rpss_specs", "bss90_specs", "bss10_specs", + "enscorr_specs", "rmsss") + scores <- c("rps", "frps", "crps", "frps_specs") + # Assign colorbar to each metric type + ## TODO: Triangle ends + for (name in c(skill_scores, scores, "mean_bias", "enssprerr")) { + if (name %in% names(skill_metrics)) { + # Define plot characteristics and metric name to display in plot + if (name %in% c("rpss", "bss90", "bss10", "frpss", "crpss", + "rpss_specs", "bss90_specs", "bss10_specs", + "rmsss")) { + display_name <- toupper(strsplit(name, "_")[[1]][1]) + skill <- skill_metrics[[name]] + brks <- seq(-1, 1, by = 0.2) + colorbar <- clim.colors(length(brks) + 1, diverging_palette) + cols <- colorbar[2:(length(colorbar) - 1)] + col_inf <- colorbar[1] + col_sup <- NULL + } else if (name == "mean_bias_ss") { + display_name <- "Mean Bias Skill Score" + skill <- skill_metrics[[name]] + brks <- seq(-1, 1, by = 0.2) + colorbar <- clim.colors(length(brks) + 1, diverging_palette) + cols <- colorbar[2:(length(colorbar) - 1)] + col_inf <- colorbar[1] + col_sup <- NULL + } else if (name %in% c("enscorr", "enscorr_specs")) { + display_name <- "Ensemble Mean Correlation" + skill <- skill_metrics[[name]] + brks <- seq(-1, 1, by = 0.2) + cols <- clim.colors(length(brks) - 1, diverging_palette) + col_inf <- NULL + col_sup <- NULL + } else if (name %in% scores) { + skill <- skill_metrics[[name]] + display_name <- toupper(strsplit(name, "_")[[1]][1]) + brks <- seq(0, 1, by = 0.1) + colorbar <- grDevices::hcl.colors(length(brks), sequential_palette) + cols <- colorbar[1:(length(colorbar) - 1)] + col_inf <- NULL + col_sup <- colorbar[length(colorbar)] + } else if (name == "enssprerr") { + skill <- skill_metrics[[name]] + display_name <- "Spread-to-Error Ratio" + brks <- c(0, 0.6, 0.7, 0.8, 0.9, 1, 1.2, 1.4, 1.6, 1.8, 2) + colorbar <- clim.colors(length(brks), diverging_palette) + cols <- colorbar[1:length(colorbar) - 1] + col_inf <- NULL + col_sup <- colorbar[length(colorbar)] + } else if (name == "mean_bias") { + skill <- skill_metrics[[name]] + display_name <- "Mean Bias" + max_value <- max(abs(quantile(skill, 0.02, na.rm = T)), + abs(quantile(skill, 0.98, na.rm = T))) + brks <- max_value * seq(-1, 1, by = 0.2) + colorbar <- clim.colors(length(brks) + 1, diverging_palette) + cols <- colorbar[2:(length(colorbar) - 1)] + col_inf <- colorbar[1] + col_sup <- colorbar[length(colorbar)] + } + options(bitmapType = "cairo") + # Reorder dimensions + skill <- Reorder(skill, c("time", "longitude", "latitude")) + # If the significance has been requested and the variable has it, + # retrieve it and reorder its dimensions. + significance_name <- paste0(name, "_significance") + if ((significance) && (significance_name %in% names(skill_metrics))) { + skill_significance <- skill_metrics[[significance_name]] + skill_significance <- Reorder(skill_significance, c("time", + "longitude", + "latitude")) + # Split skill significance into list of lists, along the time dimension + # This allows for plotting the significance dots correctly. + skill_significance <- ClimProjDiags::ArrayToList(skill_significance, + dim = 'time', + level = "sublist", + names = "dots") + } else { + skill_significance <- NULL + } + # Define output file name and titles + if (tolower(recipe$Analysis$Horizon) == "seasonal") { + outfile <- paste0(outdir, name, "-", month_label, ".png") + } else { + outfile <- paste0(outdir, name, ".png") + } + toptitle <- paste(display_name, "-", data_cube$attrs$Variable$varName, + "-", system_name, "-", month_abbreviation, + hcst_period) + months <- unique(lubridate::month(data_cube$attrs$Dates, + label = T, abb = F)) + titles <- as.vector(months) + # Plot + suppressWarnings( + PlotLayout(PlotEquiMap, c('longitude', 'latitude'), + asplit(skill, MARGIN=1), # Splitting array into a list + longitude, latitude, + special_args = skill_significance, + dot_symbol = 20, + toptitle = toptitle, + title_scale = 0.6, + titles = titles, + filled.continents=F, + brks = brks, + cols = cols, + col_inf = col_inf, + col_sup = col_sup, + fileout = outfile, + bar_label_digits = 3, + bar_extra_margin = rep(0.9, 4), + bar_label_scale = 1.5, + axes_label_scale = 1.3) + ) + } + } + info(recipe$Run$logger, + "##### SKILL METRIC PLOTS SAVED TO OUTPUT DIRECTORY #####") +} diff --git a/modules/Visualization/Visualization.R b/modules/Visualization/Visualization.R index f7960bcc..1ae48109 100644 --- a/modules/Visualization/Visualization.R +++ b/modules/Visualization/Visualization.R @@ -3,394 +3,68 @@ ## TODO: Add param 'raw'? ## TODO: Decadal plot names +source("modules/Visualization/R/plot_ensemble_mean.R") +source("modules/Visualization/R/plot_most_likely_terciles_map.R") +source("modules/Visualization/R/plot_skill_metrics.R") + plot_data <- function(recipe, - data, - skill_metrics = NULL, - probabilities = NULL, - archive = NULL, - significance = F) { + data, + skill_metrics = NULL, + probabilities = NULL, + significance = F) { # Try to produce and save several basic plots. # recipe: the auto-s2s recipe as read by read_yaml() - # archive: the auto-s2s archive as read by read_yaml() # data: list containing the hcst, obs and (optional) fcst s2dv_cube objects # calibrated_data: list containing the calibrated hcst and (optional) fcst # s2dv_cube objects # skill_metrics: list of arrays containing the computed skill metrics # significance: Bool. Whether to include significance dots where applicable - outdir <- paste0(get_dir(recipe), "/plots/") + plots <- strsplit(recipe$Analysis$Workflow$Visualization$plots, ", | |,")[[1]] + recipe$Run$output_dir <- paste0(recipe$Run$output_dir, "/plots/") + outdir <- paste0(get_dir(recipe)) dir.create(outdir, showWarnings = FALSE, recursive = TRUE) if ((is.null(skill_metrics)) && (is.null(data$fcst))) { error(recipe$Run$logger, "The Visualization module has been called, - but there is no fcst in 'data', and 'skill_metrics' is NULL - so there is no data that can be plotted.") + but there is no fcst in 'data', and 'skill_metrics' is NULL + so there is no data that can be plotted.") stop() } - if (is.null(archive)) { - if (tolower(recipe$Analysis$Horizon) == "seasonal") { - archive <- - read_yaml(paste0("conf/archive.yml"))[[recipe$Run$filesystem]] - } else if (tolower(recipe$Analysis$Horizon) == "decadal") { - archive <- - read_yaml(paste0("conf/archive_decadal.yml"))[[recipe$Run$filesystem]] - } - } - # Plot skill metrics - if (!is.null(skill_metrics)) { - plot_skill_metrics(recipe, archive, data$hcst, skill_metrics, outdir, - significance) - } - - # Plot forecast ensemble mean - if (!is.null(data$fcst)) { - plot_ensemble_mean(recipe, archive, data$fcst, outdir) - } - - # Plot Most Likely Terciles - if ((!is.null(probabilities)) && (!is.null(data$fcst))) { - plot_most_likely_terciles(recipe, archive, data$fcst, - probabilities, outdir) - } -} - -plot_skill_metrics <- function(recipe, archive, data_cube, skill_metrics, - outdir, significance = F) { - # recipe: Auto-S2S recipe - # archive: Auto-S2S archive - # data_cube: s2dv_cube object with the corresponding hindcast data - # skill_metrics: list of named skill metrics arrays - # outdir: output directory - # significance: T/F, whether to display the significance dots in the plots - - ## TODO: OPTION for CERISE: Using PuOr - # Abort if frequency is daily - if (recipe$Analysis$Variables$freq == "daily_mean") { - error(recipe$Run$logger, "Visualization functions not yet implemented - for daily data.") - stop() - } - # Abort if skill_metrics is not list - if (!is.list(skill_metrics) || is.null(names(skill_metrics))) { - stop("The element 'skill_metrics' must be a list of named arrays.") - } - - latitude <- data_cube$coords$lat - longitude <- data_cube$coords$lon - system_name <- archive$System[[recipe$Analysis$Datasets$System$name]]$name - hcst_period <- paste0(recipe$Analysis$Time$hcst_start, "-", - recipe$Analysis$Time$hcst_end) - init_month <- as.numeric(substr(recipe$Analysis$Time$sdate, - start = 1, stop = 2)) - month_label <- tolower(month.name[init_month]) - month_abbreviation <- month.abb[init_month] - - # Define color palette and number of breaks according to output format - ## TODO: Make separate function - if (tolower(recipe$Analysis$Output_format) %in% c("scorecards", "cerise")) { - diverging_palette <- "purpleorange" - sequential_palette <- "Oranges" - } else { - diverging_palette <- "bluered" - sequential_palette <- "Reds" - } - - # Group different metrics by type - skill_scores <- c("rpss", "bss90", "bss10", "frpss", "crpss", "mean_bias_ss", - "enscorr", "rpss_specs", "bss90_specs", "bss10_specs", - "enscorr_specs", "rmsss") - scores <- c("rps", "frps", "crps", "frps_specs") - # Assign colorbar to each metric type - ## TODO: Triangle ends - for (name in c(skill_scores, scores, "mean_bias", "enssprerr")) { - if (name %in% names(skill_metrics)) { - # Define plot characteristics and metric name to display in plot - if (name %in% c("rpss", "bss90", "bss10", "frpss", "crpss", - "rpss_specs", "bss90_specs", "bss10_specs", - "rmsss")) { - display_name <- toupper(strsplit(name, "_")[[1]][1]) - skill <- skill_metrics[[name]] - brks <- seq(-1, 1, by = 0.2) - colorbar <- clim.colors(length(brks) + 1, diverging_palette) - cols <- colorbar[2:(length(colorbar) - 1)] - col_inf <- colorbar[1] - col_sup <- NULL - } else if (name == "mean_bias_ss") { - display_name <- "Mean Bias Skill Score" - skill <- skill_metrics[[name]] - brks <- seq(-1, 1, by = 0.2) - colorbar <- clim.colors(length(brks) + 1, diverging_palette) - cols <- colorbar[2:(length(colorbar) - 1)] - col_inf <- colorbar[1] - col_sup <- NULL - } else if (name %in% c("enscorr", "enscorr_specs")) { - display_name <- "Ensemble Mean Correlation" - skill <- skill_metrics[[name]] - brks <- seq(-1, 1, by = 0.2) - cols <- clim.colors(length(brks) - 1, diverging_palette) - col_inf <- NULL - col_sup <- NULL - } else if (name %in% scores) { - skill <- skill_metrics[[name]] - display_name <- toupper(strsplit(name, "_")[[1]][1]) - brks <- seq(0, 1, by = 0.1) - colorbar <- grDevices::hcl.colors(length(brks), sequential_palette) - cols <- colorbar[1:(length(colorbar) - 1)] - col_inf <- NULL - col_sup <- colorbar[length(colorbar)] - } else if (name == "enssprerr") { - skill <- skill_metrics[[name]] - display_name <- "Spread-to-Error Ratio" - brks <- c(0, 0.6, 0.7, 0.8, 0.9, 1, 1.2, 1.4, 1.6, 1.8, 2) - colorbar <- clim.colors(length(brks), diverging_palette) - cols <- colorbar[1:length(colorbar) - 1] - col_inf <- NULL - col_sup <- colorbar[length(colorbar)] - } else if (name == "mean_bias") { - skill <- skill_metrics[[name]] - display_name <- "Mean Bias" - max_value <- max(abs(quantile(skill, 0.02, na.rm = T)), - abs(quantile(skill, 0.98, na.rm = T))) - brks <- max_value * seq(-1, 1, by = 0.2) - colorbar <- clim.colors(length(brks) + 1, diverging_palette) - cols <- colorbar[2:(length(colorbar) - 1)] - col_inf <- colorbar[1] - col_sup <- colorbar[length(colorbar)] - } - options(bitmapType = "cairo") - # Reorder dimensions - skill <- Reorder(skill, c("time", "longitude", "latitude")) - # If the significance has been requested and the variable has it, - # retrieve it and reorder its dimensions. - significance_name <- paste0(name, "_significance") - if ((significance) && (significance_name %in% names(skill_metrics))) { - skill_significance <- skill_metrics[[significance_name]] - skill_significance <- Reorder(skill_significance, c("time", - "longitude", - "latitude")) - # Split skill significance into list of lists, along the time dimension - # This allows for plotting the significance dots correctly. - skill_significance <- ClimProjDiags::ArrayToList(skill_significance, - dim = 'time', - level = "sublist", - names = "dots") - } else { - skill_significance <- NULL - } - # Define output file name and titles - if (tolower(recipe$Analysis$Horizon) == "seasonal") { - outfile <- paste0(outdir, name, "-", month_label, ".png") - } else { - outfile <- paste0(outdir, name, ".png") - } - toptitle <- paste(display_name, "-", data_cube$attrs$Variable$varName, - "-", system_name, "-", month_abbreviation, - hcst_period) - months <- unique(lubridate::month(data_cube$attrs$Dates, - label = T, abb = F)) - titles <- as.vector(months) - # Plot - suppressWarnings( - PlotLayout(PlotEquiMap, c('longitude', 'latitude'), - asplit(skill, MARGIN=1), # Splitting array into a list - longitude, latitude, - special_args = skill_significance, - dot_symbol = 20, - toptitle = toptitle, - title_scale = 0.6, - titles = titles, - filled.continents=F, - brks = brks, - cols = cols, - col_inf = col_inf, - col_sup = col_sup, - fileout = outfile, - bar_label_digits = 3, - bar_extra_margin = rep(0.9, 4), - bar_label_scale = 1.5, - axes_label_scale = 1.3) - ) + if ("skill_metrics" %in% plots) { + if (!is.null(skill_metrics)) { + plot_skill_metrics(recipe, data$hcst, skill_metrics, outdir, + significance) + } else { + error(recipe$Run$logger, + paste0("The skill metric plots have been requested, but the ", + "parameter 'skill_metrics' is NULL")) } } - info(recipe$Run$logger, - "##### SKILL METRIC PLOTS SAVED TO OUTPUT DIRECTORY #####") -} - -plot_ensemble_mean <- function(recipe, archive, fcst, outdir) { - - ## TODO: Add 'anomaly' to plot title - # Abort if frequency is daily - if (recipe$Analysis$Variables$freq == "daily_mean") { - stop("Visualization functions not yet implemented for daily data.") - } - latitude <- fcst$coords$lat - longitude <- fcst$coords$lon - system_name <- archive$System[[recipe$Analysis$Datasets$System$name]]$name - variable <- recipe$Analysis$Variables$name - units <- attr(fcst$Variable, "variable")$units - start_date <- paste0(recipe$Analysis$Time$fcst_year, - recipe$Analysis$Time$sdate) - # Compute ensemble mean - ensemble_mean <- s2dv::MeanDims(fcst$data, 'ensemble') - # Drop extra dims, add time dim if missing: - ensemble_mean <- drop(ensemble_mean) - - if (!("time" %in% names(dim(ensemble_mean)))) { - dim(ensemble_mean) <- c("time" = 1, dim(ensemble_mean)) - } - if (!'syear' %in% names(dim(ensemble_mean))) { - ensemble_mean <- Reorder(ensemble_mean, c("time", - "longitude", - "latitude")) - } else { - ensemble_mean <- Reorder(ensemble_mean, c("syear", - "time", - "longitude", - "latitude")) - } - ## TODO: Redefine column colors, possibly depending on variable - if (variable == 'prlr') { - palette = "BrBG" - rev = F - } else { - palette = "RdBu" - rev = T - } - # Define brks, centered on in the case of anomalies - ## - if (grepl("anomaly", - fcst$attrs$Variable$metadata[[variable]]$long_name)) { - variable <- paste(variable, "anomaly") - max_value <- max(abs(ensemble_mean)) - ugly_intervals <- seq(-max_value, max_value, max_value/20) - brks <- pretty(ugly_intervals, n = 12, min.n = 8) - } else { - brks <- pretty(range(ensemble_mean, na.rm = T), n = 15, min.n = 8) - } - cols <- grDevices::hcl.colors(length(brks) - 1, palette, rev = rev) - options(bitmapType = "cairo") - - for (i_syear in start_date) { - # Define name of output file and titles - if (length(start_date) == 1) { - i_ensemble_mean <- ensemble_mean - outfile <- paste0(outdir, "forecast_ensemble_mean-", start_date, ".png") + # Plot forecast ensemble mean + if ("forecast_ensemble_mean" %in% plots) { + if (!is.null(data$fcst)) { + plot_ensemble_mean(recipe, data$fcst, outdir) } else { - i_ensemble_mean <- ensemble_mean[which(start_date == i_syear), , , ] - outfile <- paste0(outdir, "forecast_ensemble_mean-", i_syear, ".png") + error(recipe$Run$logger, + paste0("The forecast ensemble mean plot has been requested, but ", + "there is no fcst element in 'data'")) } - toptitle <- paste("Forecast Ensemble Mean -", variable, "-", system_name, - "- Initialization:", i_syear) - months <- lubridate::month(fcst$attrs$Dates[1, 1, which(start_date == i_syear), ], - label = T, abb = F) - titles <- as.vector(months) - # Plots - PlotLayout(PlotEquiMap, c('longitude', 'latitude'), - i_ensemble_mean, longitude, latitude, - filled.continents = F, - toptitle = toptitle, - title_scale = 0.6, - titles = titles, - units = units, - cols = cols, - brks = brks, - fileout = outfile, - bar_label_digits = 4, - bar_extra_margin = rep(0.7, 4), - bar_label_scale = 1.5, - axes_label_scale = 1.3) - } - info(recipe$Run$logger, - "##### FCST ENSEMBLE MEAN PLOT SAVED TO OUTPUT DIRECTORY #####") -} - -plot_most_likely_terciles <- function(recipe, archive, - fcst, - probabilities, - outdir) { - - ## TODO: Add 'anomaly' to plot title - # Abort if frequency is daily - if (recipe$Analysis$Variables$freq == "daily_mean") { - stop("Visualization functions not yet implemented for daily data.") } - latitude <- fcst$coords$lat - longitude <- fcst$coords$lon - system_name <- archive$System[[recipe$Analysis$Datasets$System$name]]$name - variable <- recipe$Analysis$Variables$name - start_date <- paste0(recipe$Analysis$Time$fcst_year, - recipe$Analysis$Time$sdate) - - # Retrieve and rearrange probability bins for the forecast - if (is.null(probabilities$probs_fcst$prob_b33) || - is.null(probabilities$probs_fcst$prob_33_to_66) || - is.null(probabilities$probs_fcst$prob_a66)) { - stop("The forecast tercile probability bins are not present inside ", - "'probabilities', the most likely tercile map cannot be plotted.") - } - - probs_fcst <- abind(probabilities$probs_fcst$prob_b33, - probabilities$probs_fcst$prob_33_to_66, - probabilities$probs_fcst$prob_a66, - along = 0) - names(dim(probs_fcst)) <- c("bin", - names(dim(probabilities$probs_fcst$prob_b33))) - - ## TODO: Improve this section - # Drop extra dims, add time dim if missing: - probs_fcst <- drop(probs_fcst) - if (!("time" %in% names(dim(probs_fcst)))) { - dim(probs_fcst) <- c("time" = 1, dim(probs_fcst)) - } - if (!'syear' %in% names(dim(probs_fcst))) { - probs_fcst <- Reorder(probs_fcst, c("time", "bin", "longitude", "latitude")) - } else { - probs_fcst <- Reorder(probs_fcst, - c("syear", "time", "bin", "longitude", "latitude")) - } - - for (i_syear in start_date) { - # Define name of output file and titles - if (length(start_date) == 1) { - i_probs_fcst <- probs_fcst - outfile <- paste0(outdir, "forecast_most_likely_tercile-", start_date, - ".png") + # Plot Most Likely Terciles + if ("most_likely_terciles" %in% plots) { + if ((!is.null(probabilities)) && (!is.null(data$fcst))) { + plot_most_likely_terciles(recipe, data$fcst, + probabilities, outdir) } else { - i_probs_fcst <- probs_fcst[which(start_date == i_syear), , , , ] - outfile <- paste0(outdir, "forecast_most_likely_tercile-", i_syear, ".png") + error(recipe$Run$logger, + paste0("For the most likely terciles plot, both the fcst and the ", + "probabilities must be provided.")) } - toptitle <- paste("Most Likely Tercile -", variable, "-", system_name, "-", - "Initialization:", i_syear) - months <- lubridate::month(fcst$attrs$Dates[1, 1, which(start_date == i_syear), ], - label = T, abb = F) - ## TODO: Ensure this works for daily and sub-daily cases - titles <- as.vector(months) - - # Plots - ## NOTE: PlotLayout() and PlotMostLikelyQuantileMap() are still being worked - ## on. - suppressWarnings( - PlotLayout(PlotMostLikelyQuantileMap, c('bin', 'longitude', 'latitude'), - cat_dim = 'bin', - i_probs_fcst, longitude, latitude, - coast_width = 1.5, - title_scale = 0.6, - legend_scale = 0.8, #cex_bar_titles = 0.6, - toptitle = toptitle, - titles = titles, - fileout = outfile, - bar_label_digits = 2, - bar_scale = rep(0.7, 4), - bar_label_scale = 1.2, - axes_label_scale = 1.3, - triangle_ends = c(F, F), width = 11, height = 8) - ) } - - info(recipe$Run$logger, - "##### MOST LIKELY TERCILE PLOT SAVED TO OUTPUT DIRECTORY #####") } + diff --git a/modules/test_seasonal.R b/modules/test_seasonal.R index 4dd34b61..4535d41b 100644 --- a/modules/test_seasonal.R +++ b/modules/test_seasonal.R @@ -19,7 +19,7 @@ skill_metrics <- compute_skill_metrics(recipe, data) # Compute percentiles and probability bins probabilities <- compute_probabilities(recipe, data) # Export all data to netCDF -save_data(recipe, data, skill_metrics, probabilities) +# save_data(recipe, data, skill_metrics, probabilities) # Plot data plot_data(recipe, data, skill_metrics, probabilities, significance = T) diff --git a/recipes/atomic_recipes/recipe_decadal.yml b/recipes/atomic_recipes/recipe_decadal.yml index 986578f7..2dca96c0 100644 --- a/recipes/atomic_recipes/recipe_decadal.yml +++ b/recipes/atomic_recipes/recipe_decadal.yml @@ -32,14 +32,20 @@ Analysis: Anomalies: compute: no cross_validation: + save: Calibration: method: bias + save: 'all' Skill: metric: RPSS Corr + save: 'all' Probabilities: percentiles: [[1/3, 2/3]] + save: 'all' Indicators: index: FALSE + Visualization: + plots: skill_metrics, forecast_ensemble_mean, most_likely_terciles ncores: # Optional, int: number of cores, defaults to 1 remove_NAs: # Optional, bool: Whether NAs are removed, defaults to FALSE Output_format: S2S4E diff --git a/recipes/atomic_recipes/recipe_system5c3s-tas.yml b/recipes/atomic_recipes/recipe_system5c3s-tas.yml index 31ae079d..c4606d59 100644 --- a/recipes/atomic_recipes/recipe_system5c3s-tas.yml +++ b/recipes/atomic_recipes/recipe_system5c3s-tas.yml @@ -31,12 +31,19 @@ Analysis: Anomalies: compute: no cross_validation: + save: Calibration: method: raw + save: fcst_only Skill: metric: RPSS_specs BSS90_specs EnsCorr_specs FRPS_specs FRPSS_specs BSS10_specs FRPS + save: all Probabilities: percentiles: [[1/3, 2/3]] + save: all + Visualization: + plots: skill_metrics forecast_ensemble_mean + Indicators: index: no Output_format: S2S4E diff --git a/recipes/atomic_recipes/recipe_system7c3s-prlr.yml b/recipes/atomic_recipes/recipe_system7c3s-prlr.yml index 58030bf3..fa7bee7f 100644 --- a/recipes/atomic_recipes/recipe_system7c3s-prlr.yml +++ b/recipes/atomic_recipes/recipe_system7c3s-prlr.yml @@ -31,15 +31,21 @@ Analysis: Anomalies: compute: no cross_validation: + save: Calibration: method: mse_min + save: 'all' Skill: metric: RPS RPSS CRPS CRPSS FRPSS BSS10 BSS90 EnsCorr Corr + save: 'all' Probabilities: percentiles: [[1/3, 2/3], [1/10, 9/10], [1/4, 2/4, 3/4]] + save: 'all' + Visualization: + plots: skill_metrics forecast_ensemble_mean most_likely_terciles Indicators: index: no - ncores: 1 + ncores: 12 remove_NAs: no Output_format: S2S4E Run: diff --git a/recipes/atomic_recipes/recipe_system7c3s-tas.yml b/recipes/atomic_recipes/recipe_system7c3s-tas.yml index a2a87c23..e5cd2aba 100644 --- a/recipes/atomic_recipes/recipe_system7c3s-tas.yml +++ b/recipes/atomic_recipes/recipe_system7c3s-tas.yml @@ -31,12 +31,18 @@ Analysis: Anomalies: compute: yes # yes/no, default yes cross_validation: yes # yes/no, default yes + save: 'all' # 'all'/'none'/'exp_only'/'fcst_only' Calibration: method: mse_min + save: 'none' # 'all'/'none'/'exp_only'/'fcst_only' Skill: metric: RPS RPSS CRPS CRPSS FRPSS BSS10 BSS90 EnsCorr Corr mean_bias mean_bias_SS + save: 'all' # 'all'/'none' Probabilities: percentiles: [[1/3, 2/3], [1/10, 9/10], [1/4, 2/4, 3/4]] + save: 'percentiles_only' # 'all'/'none'/'bins_only'/'percentiles_only' + Visualization: + plots: skill_metrics, forecast_ensemble_mean, most_likely_terciles Indicators: index: no ncores: 10 diff --git a/recipes/recipe_decadal_split.yml b/recipes/recipe_decadal_split.yml index 708037f7..a94ffd03 100644 --- a/recipes/recipe_decadal_split.yml +++ b/recipes/recipe_decadal_split.yml @@ -28,13 +28,19 @@ Analysis: Workflow: Anomalies: compute: no - cross_validation: + cross_validation: + save: Calibration: method: 'bias' + save: 'all' Skill: metric: EnsCorr RPSS + save: 'all' Probabilities: percentiles: [[1/3, 2/3]] + save: 'all' + Visualization: + plots: skill_metrics Indicators: index: FALSE ncores: 8 # Optional, int: number of cores, defaults to 1 diff --git a/recipes/recipe_splitting_example.yml b/recipes/recipe_splitting_example.yml index 94a94468..93e5994e 100644 --- a/recipes/recipe_splitting_example.yml +++ b/recipes/recipe_splitting_example.yml @@ -38,12 +38,19 @@ Analysis: method: bilinear ## TODO: allow multiple methods? type: to_system Workflow: + Anomalies: + compute: no Calibration: method: mse_min ## TODO: list, split? + save: 'none' Skill: metric: RPS, RPSS, CRPS, CRPSS, FRPSS, BSS10, BSS90, mean_bias, mean_bias_SS # list, don't split + save: 'all' Probabilities: percentiles: [[1/3, 2/3], [1/10, 9/10], [1/4, 2/4, 3/4]] # list, don't split + save: 'all' + Visualization: + plots: skill_metrics, most_likely_terciles, forecast_ensemble_mean Indicators: index: no # ? ncores: 7 diff --git a/recipes/tests/recipe_autosubmit_marstest.yml b/recipes/tests/recipe_autosubmit_marstest.yml index dfd2159f..5bf62fb9 100644 --- a/recipes/tests/recipe_autosubmit_marstest.yml +++ b/recipes/tests/recipe_autosubmit_marstest.yml @@ -40,12 +40,18 @@ Analysis: Anomalies: compute: yes cross_validation: yes + save: 'all' Calibration: method: raw ## TODO: list, split? + save: 'none' Skill: metric: RPS, RPSS, CRPS, CRPSS, FRPSS, BSS10, BSS90, mean_bias, mean_bias_SS # list, don't split + save: 'all' Probabilities: percentiles: [[1/3, 2/3], [1/10, 9/10], [1/4, 2/4, 3/4]] # list, don't split + save: 'all' + Visualization: + plots: skill_metrics Indicators: index: no # ? ncores: 8 diff --git a/recipes/tests/recipe_multiregion.yml b/recipes/tests/recipe_multiregion.yml index bcb4d126..69d8621d 100644 --- a/recipes/tests/recipe_multiregion.yml +++ b/recipes/tests/recipe_multiregion.yml @@ -40,12 +40,18 @@ Analysis: Anomalies: compute: yes cross_validation: yes + save: none Calibration: method: raw + save: none Skill: metric: RPS, RPSS, CRPS, CRPSS, FRPSS, BSS10, BSS90, mean_bias, mean_bias_SS + save: all Probabilities: percentiles: [[1/3, 2/3], [1/10, 9/10], [1/4, 2/4, 3/4]] + save: all + Visualization: + plots: skill_metrics Indicators: index: no ncores: 8 diff --git a/recipes/tests/recipe_seasonal_example.yml b/recipes/tests/recipe_seasonal_example.yml index cb941f84..f4f3a8f5 100644 --- a/recipes/tests/recipe_seasonal_example.yml +++ b/recipes/tests/recipe_seasonal_example.yml @@ -40,12 +40,18 @@ Analysis: Anomalies: compute: yes cross_validation: yes + save: 'all' Calibration: method: raw + save: 'none' Skill: metric: RPS, RPSS, CRPS, CRPSS, FRPSS, BSS10, BSS90, mean_bias, mean_bias_SS + save: 'all' Probabilities: percentiles: [[1/3, 2/3], [1/10, 9/10], [1/4, 2/4, 3/4]] + save: 'all' + Visualization: + plots: skill_metrics Indicators: index: no ncores: 8 diff --git a/recipes/tests/recipe_seasonal_two-variables.yml b/recipes/tests/recipe_seasonal_two-variables.yml index 5dbd892f..1cb5c3b2 100644 --- a/recipes/tests/recipe_seasonal_two-variables.yml +++ b/recipes/tests/recipe_seasonal_two-variables.yml @@ -38,12 +38,18 @@ Analysis: Anomalies: compute: yes cross_validation: yes + save: 'all' Calibration: method: raw ## TODO: list, split? + save: 'none' Skill: metric: RPS, RPSS, CRPS, CRPSS, FRPSS, BSS10, BSS90, mean_bias, mean_bias_SS # list, don't split + save: 'all' Probabilities: percentiles: [[1/3, 2/3], [1/10, 9/10], [1/4, 2/4, 3/4]] # list, don't split + save: 'all' + Visualization: + plots: skill_metrics, forecast_ensemble_mean, most_likely_terciles Indicators: index: no # ? ncores: 7 diff --git a/tests/recipes/recipe-decadal_daily_1.yml b/tests/recipes/recipe-decadal_daily_1.yml index 7a2a575b..88b87622 100644 --- a/tests/recipes/recipe-decadal_daily_1.yml +++ b/tests/recipes/recipe-decadal_daily_1.yml @@ -31,13 +31,17 @@ Analysis: Workflow: Anomalies: compute: no - cross_validation: + cross_validation: + save: 'none' Calibration: method: qmap + save: 'none' Skill: metric: RPSS + save: 'none' Probabilities: percentiles: [[1/10, 9/10]] + save: 'none' Indicators: index: FALSE ncores: # Optional, int: number of cores, defaults to 1 diff --git a/tests/recipes/recipe-decadal_monthly_1.yml b/tests/recipes/recipe-decadal_monthly_1.yml index 35b55b1a..a2849c27 100644 --- a/tests/recipes/recipe-decadal_monthly_1.yml +++ b/tests/recipes/recipe-decadal_monthly_1.yml @@ -31,15 +31,21 @@ Analysis: Workflow: Anomalies: compute: no - cross-validation: + cross-validation: + save: Calibration: method: bias + save: 'all' Skill: metric: RPSS + save: 'all' Probabilities: - percentiles: [[1/3, 2/3], [1/10, 9/10]] + percentiles: [[1/3, 2/3], [1/10, 9/10]] + save: 'all' Indicators: index: FALSE + Visualization: + plots: skill_metrics most_likely_terciles forecast_ensemble_mean ncores: # Optional, int: number of cores, defaults to 1 remove_NAs: # Optional, bool: Whether NAs are removed, defaults to FALSE Output_format: S2S4E diff --git a/tests/recipes/recipe-decadal_monthly_1b.yml b/tests/recipes/recipe-decadal_monthly_1b.yml index 5551d9c7..5a1ce4fd 100644 --- a/tests/recipes/recipe-decadal_monthly_1b.yml +++ b/tests/recipes/recipe-decadal_monthly_1b.yml @@ -31,13 +31,17 @@ Analysis: Workflow: Anomalies: compute: no - cross_validation: + cross_validation: + save: 'none' Calibration: method: bias + save: 'none' Skill: metric: RPSS + save: 'none' Probabilities: - percentiles: [[1/3, 2/3], [1/10, 9/10]] + percentiles: [[1/3, 2/3], [1/10, 9/10]] + save: 'none' Indicators: index: FALSE ncores: # Optional, int: number of cores, defaults to 1 diff --git a/tests/recipes/recipe-decadal_monthly_2.yml b/tests/recipes/recipe-decadal_monthly_2.yml index 45eb01dd..b0892a0c 100644 --- a/tests/recipes/recipe-decadal_monthly_2.yml +++ b/tests/recipes/recipe-decadal_monthly_2.yml @@ -32,14 +32,20 @@ Analysis: Anomalies: compute: no cross_validation: + save: 'all' Calibration: method: raw + save: 'all' Skill: metric: RPSS_specs EnsCorr_specs FRPS_specs FRPSS_specs BSS10_specs FRPS + save: 'all' Probabilities: percentiles: [[1/3, 2/3]] + save: 'all' Indicators: index: FALSE + Visualization: + plots: most_likely_terciles skill_metrics forecast_ensemble_mean ncores: # Optional, int: number of cores, defaults to 1 remove_NAs: # Optional, bool: Whether NAs are removed, defaults to FALSE Output_format: S2S4E diff --git a/tests/recipes/recipe-decadal_monthly_3.yml b/tests/recipes/recipe-decadal_monthly_3.yml index 94bdfebc..fc42cd2d 100644 --- a/tests/recipes/recipe-decadal_monthly_3.yml +++ b/tests/recipes/recipe-decadal_monthly_3.yml @@ -31,13 +31,17 @@ Analysis: Workflow: Anomalies: compute: no - cross_validation: + cross_validation: + save: 'none' Calibration: method: 'evmos' + save: 'none' Skill: metric: BSS10 Corr + save: 'none' Probabilities: percentiles: [[1/3, 2/3]] + save: 'none' Indicators: index: FALSE ncores: # Optional, int: number of cores, defaults to 1 diff --git a/tests/recipes/recipe-seasonal_daily_1.yml b/tests/recipes/recipe-seasonal_daily_1.yml index afa0f496..f70f0c03 100644 --- a/tests/recipes/recipe-seasonal_daily_1.yml +++ b/tests/recipes/recipe-seasonal_daily_1.yml @@ -31,10 +31,13 @@ Analysis: Anomalies: compute: no cross_validation: + save: 'none' Calibration: method: qmap + save: 'none' Skill: metric: EnsCorr_specs + save: 'none' Indicators: index: no Output_format: S2S4E diff --git a/tests/recipes/recipe-seasonal_monthly_1.yml b/tests/recipes/recipe-seasonal_monthly_1.yml index 68c58f83..21321fab 100644 --- a/tests/recipes/recipe-seasonal_monthly_1.yml +++ b/tests/recipes/recipe-seasonal_monthly_1.yml @@ -28,17 +28,23 @@ Analysis: method: bilinear type: to_system Workflow: - Anomalies: - compute: no - cross_validation: + # Anomalies: + # compute: no + # cross_validation: + # save: 'none' Calibration: method: mse_min + save: 'all' Skill: metric: RPSS CRPSS EnsCorr Corr Enscorr_specs + save: 'all' Probabilities: percentiles: [[1/3, 2/3], [1/10, 9/10]] + save: 'all' Indicators: index: no + Visualization: + plots: skill_metrics most_likely_terciles forecast_ensemble_mean Output_format: S2S4E Run: Loglevel: INFO diff --git a/tests/testthat/test-decadal_daily_1.R b/tests/testthat/test-decadal_daily_1.R index 400b864d..c26b8978 100644 --- a/tests/testthat/test-decadal_daily_1.R +++ b/tests/testthat/test-decadal_daily_1.R @@ -219,4 +219,4 @@ as.POSIXct("1992-03-30 12:00:00", tz = 'UTC') # #}) - +unlink(recipe$Run$output_dir, recursive = TRUE) diff --git a/tests/testthat/test-decadal_monthly_1.R b/tests/testthat/test-decadal_monthly_1.R index 4fc92b3d..9b46cce8 100644 --- a/tests/testthat/test-decadal_monthly_1.R +++ b/tests/testthat/test-decadal_monthly_1.R @@ -30,21 +30,13 @@ suppressWarnings({invisible(capture.output( probs <- compute_probabilities(recipe, calibrated_data) ))}) -# Saving -suppressWarnings({invisible(capture.output( -save_data(recipe = recipe, data = calibrated_data, - skill_metrics = skill_metrics, probabilities = probs) -))}) - # Plotting suppressWarnings({invisible(capture.output( -plot_data(recipe = recipe, archive = archive, data = calibrated_data, - skill_metrics = skill_metrics, probabilities = probs, significance = T) +plot_data(recipe = recipe, data = calibrated_data, + skill_metrics = skill_metrics, probabilities = probs, + significance = T) ))}) - -outdir <- get_dir(recipe) - #====================================== test_that("1. Loading", { @@ -256,10 +248,10 @@ tolerance = 0.0001 #====================================== test_that("4. Saving", { - +outputs <- paste0(recipe$Run$output_dir, "/outputs/") expect_equal( -all(list.files(outdir) %in% -c("plots", "tas_19911101.nc", "tas_19921101.nc", "tas_19931101.nc", "tas_19941101.nc", "tas_20211101.nc", +all(basename(list.files(outputs, recursive = T)) %in% +c("tas_19911101.nc", "tas_19921101.nc", "tas_19931101.nc", "tas_19941101.nc", "tas_20211101.nc", "tas-obs_19911101.nc", "tas-obs_19921101.nc", "tas-obs_19931101.nc", "tas-obs_19941101.nc", "tas-percentiles_month11.nc", "tas-probs_19911101.nc", "tas-probs_19921101.nc", "tas-probs_19931101.nc", "tas-probs_19941101.nc", "tas-probs_20211101.nc", "tas-skill_month11.nc")), @@ -270,30 +262,30 @@ TRUE #) expect_equal( -length(list.files(outdir)), -17 +length(list.files(outputs, recursive = T)), +16 ) }) test_that("5. Visualization", { +plots <- paste0(recipe$Run$output_dir, "/plots/") expect_equal( -all(list.files(paste0(outdir, "/plots/")) %in% +all(basename(list.files(plots, recursive = T)) %in% c("forecast_ensemble_mean-2021.png", "forecast_most_likely_tercile-2021.png", "rpss.png")), TRUE ) expect_equal( -length(list.files(paste0(outdir, "/plots/"))), +length(list.files(plots, recursive = T)), 3 ) }) # Delete files -unlink(paste0(outdir, list.files(outdir, recursive = TRUE))) - +unlink(recipe$Run$output_dir, recursive = TRUE) #============================================================== @@ -345,4 +337,5 @@ lapply(probs_b$probs_fcst, ClimProjDiags::Subset, 'syear', 2), probs$probs_fcst ) +unlink(recipe$Run$output_dir, recursive = TRUE) }) diff --git a/tests/testthat/test-decadal_monthly_2.R b/tests/testthat/test-decadal_monthly_2.R index 40a56abf..a6ca9254 100644 --- a/tests/testthat/test-decadal_monthly_2.R +++ b/tests/testthat/test-decadal_monthly_2.R @@ -29,11 +29,6 @@ suppressWarnings({invisible(capture.output( probs <- compute_probabilities(recipe, calibrated_data) ))}) -# Saving -suppressWarnings({invisible(capture.output( -save_data(recipe, calibrated_data, skill_metrics, probs) -))}) - # Plotting suppressWarnings({invisible(capture.output( plot_data(recipe = recipe, data = calibrated_data, @@ -250,18 +245,18 @@ tolerance = 0.0001 #====================================== test_that("4. Saving", { - +outputs <- paste0(recipe$Run$output_dir, "/outputs/") expect_equal( -all(list.files(outdir) %in% -c("plots", "tas_19901101.nc", "tas_19911101.nc", "tas_19921101.nc", "tas_20201101.nc", "tas_20211101.nc", +all(basename(list.files(outputs, recursive = T)) %in% +c("tas_19901101.nc", "tas_19911101.nc", "tas_19921101.nc", "tas_20201101.nc", "tas_20211101.nc", "tas-obs_19901101.nc", "tas-obs_19911101.nc", "tas-obs_19921101.nc", "tas-percentiles_month11.nc", "tas-probs_19901101.nc", "tas-probs_19911101.nc", "tas-probs_19921101.nc", "tas-probs_20201101.nc", "tas-probs_20211101.nc", "tas-skill_month11.nc")), TRUE ) expect_equal( -length(list.files(outdir)), -16 +length(list.files(outputs, recursive = T)), +15 ) }) @@ -269,19 +264,20 @@ length(list.files(outdir)), #====================================== test_that("5. Visualization", { +plots <- paste0(recipe$Run$output_dir, "/plots/") expect_equal( -all(list.files(paste0(outdir, "/plots/")) %in% +all(basename(list.files(plots, recursive = T)) %in% c("bss10_specs.png", "enscorr_specs.png", "forecast_ensemble_mean-2020.png", "forecast_ensemble_mean-2021.png", "forecast_most_likely_tercile-2020.png", "forecast_most_likely_tercile-2021.png", "frps_specs.png", "frps.png", "rpss_specs.png") ), TRUE ) expect_equal( -length(list.files(paste0(outdir, "/plots/"))), +length(list.files(plots, recursive = T)), 9 ) }) # Delete files -unlink(paste0(outdir, list.files(outdir, recursive = TRUE))) +unlink(recipe$Run$output_dir, recursive = TRUE) diff --git a/tests/testthat/test-decadal_monthly_3.R b/tests/testthat/test-decadal_monthly_3.R index 85c15c88..988172c6 100644 --- a/tests/testthat/test-decadal_monthly_3.R +++ b/tests/testthat/test-decadal_monthly_3.R @@ -196,4 +196,4 @@ tolerance = 0.0001 }) - +unlink(recipe$Run$output_dir, recursive = TRUE) diff --git a/tests/testthat/test-seasonal_daily.R b/tests/testthat/test-seasonal_daily.R index 10cba33e..da0e789b 100644 --- a/tests/testthat/test-seasonal_daily.R +++ b/tests/testthat/test-seasonal_daily.R @@ -164,4 +164,4 @@ tolerance=0.0001 ) }) -unlink(recipe$Run$output_dir) +unlink(recipe$Run$output_dir, recursive = TRUE) diff --git a/tests/testthat/test-seasonal_monthly.R b/tests/testthat/test-seasonal_monthly.R index 6a166503..83b5ceab 100644 --- a/tests/testthat/test-seasonal_monthly.R +++ b/tests/testthat/test-seasonal_monthly.R @@ -212,10 +212,10 @@ rep(FALSE, 3) }) test_that("4. Saving", { - +outputs <- paste0(recipe$Run$output_dir, "/outputs/") expect_equal( -all(list.files(outdir) %in% -c("plots", "tas_19931101.nc", "tas_19941101.nc", "tas_19951101.nc", +all(basename(list.files(outputs, recursive = T)) %in% +c("tas_19931101.nc", "tas_19941101.nc", "tas_19951101.nc", "tas_19961101.nc", "tas_20201101.nc", "tas-corr_month11.nc", "tas-obs_19931101.nc", "tas-obs_19941101.nc", "tas-obs_19951101.nc", "tas-obs_19961101.nc", "tas-percentiles_month11.nc", "tas-probs_19931101.nc", @@ -224,26 +224,27 @@ c("plots", "tas_19931101.nc", "tas_19941101.nc", "tas_19951101.nc", TRUE ) expect_equal( -length(list.files(outdir)), -18 +length(list.files(outputs, recursive = T)), +17 ) }) test_that("5. Visualization", { +plots <- paste0(recipe$Run$output_dir, "/plots/") expect_equal( -all(list.files(paste0(outdir, "/plots/")) %in% +all(basename(list.files(plots, recursive = T)) %in% c("crpss-november.png", "enscorr_specs-november.png", "enscorr-november.png", "forecast_ensemble_mean-20201101.png", "forecast_most_likely_tercile-20201101.png", "rpss-november.png")), TRUE ) expect_equal( -length(list.files(paste0(outdir, "/plots/"))), +length(list.files(plots, recursive = T)), 6 ) }) # Delete files -unlink(paste0(outdir, list.files(outdir, recursive = TRUE))) +unlink(recipe$Run$output_dir, recursive = T) diff --git a/tools/check_number_of_dependent_verifications.R b/tools/check_number_of_dependent_verifications.R new file mode 100644 index 00000000..0c85d09f --- /dev/null +++ b/tools/check_number_of_dependent_verifications.R @@ -0,0 +1,134 @@ +check_number_of_dependent_verifications <- function(recipe) { + # Number of verifications depends on the variables and indicators requested + # and the order of the workflow: + # workflow: correction + indicator --> only 1 variable is calibrated + # workflow: indicator + correction --> the indicator and the ecv are calibrated + independent_verifications <- NULL + dependent_verifications <- NULL + dep <- 1 + # check workflow order: + if (all(c('Calibration', 'Indicators') %in% names(recipe$Analysis$Workflow))) { + cal_pos <- which(names(recipe$Analysis$Workflow) == 'Calibration') + ind_pos <- which(names(recipe$Analysis$Workflow) == 'Indicators') + if (cal_pos < ind_pos) { + workflow_independent <- FALSE + } else { + workflow_independent <- TRUE + } + } + if (workflow_independent) { + independent_verifications <- append(recipe$Analysis$Variables$ECVs, + recipe$Analysis$Variables$Indicators) + } else { + if (is.null(recipe$Analysis$Variables$Indicators) || + (length(recipe$Analysis$Variables$Indicators) == 1 && + is.null(recipe$Analysis$Variables$ECVs))) { + independent_verifications <- append(recipe$Analysis$Variables$ECVs, + recipe$Analysis$Variables$Indicators) + } else { + ecvs <- recipe$Analysi$Variables$ECVs + inds <- recipe$Analysi$Variables$Indicators + ind_table <- read_yaml(paste0(recipe$Run$code_dir, + "conf/indicators_table.yml")) + # first, loop on ecvs if any and compare to indicators + done <- NULL # to gather the indicators reviewed + if (!is.null(ecvs)) { + for (i in 1:length(ecvs)) { + dependent <- list(ecvs[[i]]) + for (j in 1:length(inds)) { + if (ind_table[inds[[j]]$name][[1]]$ECVs == ecvs[[i]]$name) { + if (ind_table[inds[[j]]$name][[1]]$freq == ecvs[[i]]$freq) { + # they are dependent + dependent <- append(dependent, inds[[j]]) + done <- append(done, inds[[j]]) + } + } + } + if (length(dependent) == 1) { + dependent <- NULL + independent_verifications <- append(independent_verifications, + list(ecvs[[i]])) + } else { + dependent_verifications <- append(dependent_verifications, + list(dependent)) + } + } + # There are indicators not reviewed yet? + if (length(done) < length(inds)) { + if (length(inds) == 1) { + independent_verifications <- append(independent_verifications, + inds) + } else { + done <- NULL + for (i in 1:(length(inds) - 1)) { + dependent <- list(inds[[i]]$name) + if (is.na(match(unlist(dependent), unlist(done)))) { + for (j in (i+1):length(inds)) { + if (ind_table[inds[[i]]$name][[1]]$ECVs == + ind_table[inds[[j]]$name][[1]]$ECVs) { + if (ind_table[inds[[i]]$name][[1]]$freq == + ind_table[inds[[j]]$name][[1]]$freq) { + dependent <- append(dependent, inds[[j]]$name) + done <- dependent + } + } + } + } + if (length(dependent) == 1) { + independent_verifications <- dependent + dependent <- NULL + } else { + dependent_verifications <- dependent + } + } + } + } + } else { # there are only Indicators: + done <- NULL + for (i in 1:(length(inds) - 1)) { + dependent <- list(inds[[i]]$name) + if (is.na(match(unlist(dependent), unlist(done)))) { + for (j in (i+1):length(inds)) { + if (ind_table[inds[[i]]$name][[1]]$ECVs == + ind_table[inds[[j]]$name][[1]]$ECVs) { + if (ind_table[inds[[i]]$name][[1]]$freq == + ind_table[inds[[j]]$name][[1]]$freq) { + dependent <- append(dependent, inds[[j]]$name) + done <- dependent + } + } + } + } + if (length(dependent) == 1) { + independent_verifications <- dependent + dependent <- NULL + } else { + dependent_verifications <- dependent + } + } + } + } + } + if (!is.null(independent_verifications)) { + info(logger, paste("The variables for independent verification are ", + paste(independent_verifications, collapse = " "))) + } + if (!is.null(dependent_verifications)) { + info(logger, paste("The variables for dependent verification are: ", + paste(dependent_verifications, collapse = " "))) + } + # remove unnecessary names in objects to be removed + return(list(independent = independent_verifications, + dependent = dependent_verifications)) +} +#workflow <- list(Calibration = list(method = 'SBC'), +# Skill = list(metric = 'RPSS')) +#ApplyWorkflow <- function(workflow) { + +#res <- do.call('CST_BiasCorrection', +# args = list(exp = lonlat_data$exp, +# obs = lonlat_data$obs)) + + + + diff --git a/tools/check_recipe.R b/tools/check_recipe.R index eaec8f9a..a9170707 100644 --- a/tools/check_recipe.R +++ b/tools/check_recipe.R @@ -10,10 +10,10 @@ check_recipe <- function(recipe) { # --------------------------------------------------------------------- TIME_SETTINGS_SEASONAL <- c("sdate", "ftime_min", "ftime_max", "hcst_start", - "hcst_end") + "hcst_end") TIME_SETTINGS_DECADAL <- c("ftime_min", "ftime_max", "hcst_start", "hcst_end") PARAMS <- c("Horizon", "Time", "Variables", "Region", "Regrid", "Workflow", - "Datasets") + "Datasets") HORIZONS <- c("subseasonal", "seasonal", "decadal") ARCHIVE_SEASONAL <- "conf/archive.yml" ARCHIVE_DECADAL <- "conf/archive_decadal.yml" @@ -24,21 +24,21 @@ check_recipe <- function(recipe) { # Check basic elements in recipe:Analysis: if (!("Analysis" %in% names(recipe))) { error(recipe$Run$logger, - "The recipe must contain an element called 'Analysis'.") + "The recipe must contain an element called 'Analysis'.") error_status <- T } if (!all(PARAMS %in% names(recipe$Analysis))) { error(recipe$Run$logger, paste0("The element 'Analysis' in the recipe must contain all of ", - "the following: ", paste(PARAMS, collapse = ", "), ".")) + "the following: ", paste(PARAMS, collapse = ", "), ".")) error_status <- T } if (!any(HORIZONS %in% tolower(recipe$Analysis$Horizon))) { error(recipe$Run$logger, paste0("The element 'Horizon' in the recipe must be one of the ", - "following: ", paste(HORIZONS, collapse = ", "), ".")) + "following: ", paste(HORIZONS, collapse = ", "), ".")) error_status <- T } # Check time settings @@ -47,18 +47,18 @@ check_recipe <- function(recipe) { archive <- read_yaml(ARCHIVE_SEASONAL)[[recipe$Run$filesystem]] if (!all(TIME_SETTINGS_SEASONAL %in% names(recipe$Analysis$Time))) { error(recipe$Run$logger, - paste0("The element 'Time' in the recipe must contain all of the ", - "following: ", paste(TIME_SETTINGS_SEASONAL, - collapse = ", "), ".")) + paste0("The element 'Time' in the recipe must contain all of the ", + "following: ", paste(TIME_SETTINGS_SEASONAL, + collapse = ", "), ".")) error_status <- T } } else if (tolower(recipe$Analysis$Horizon) == "decadal") { archive <- read_yaml(ARCHIVE_DECADAL)[[recipe$Run$filesystem]] if (!all(TIME_SETTINGS_DECADAL %in% names(recipe$Analysis$Time))) { error(recipe$Run$logger, - paste0("The element 'Time' in the recipe must contain all of the ", - "following: ", paste(TIME_SETTINGS_DECADAL, - collapse = ", "), ".")) + paste0("The element 'Time' in the recipe must contain all of the ", + "following: ", paste(TIME_SETTINGS_DECADAL, + collapse = ", "), ".")) error_status <- T } } else { @@ -68,14 +68,14 @@ check_recipe <- function(recipe) { if (!is.null(archive)) { if (!all(recipe$Analysis$Datasets$System$name %in% names(archive$System))) { error(recipe$Run$logger, - "The specified System name was not found in the archive.") + "The specified System name was not found in the archive.") error_status <- T } # Check reference names if (!all(recipe$Analysis$Datasets$Reference$name %in% names(archive$Reference))) { error(recipe$Run$logger, - "The specified Reference name was not found in the archive.") + "The specified Reference name was not found in the archive.") error_status <- T } } @@ -83,36 +83,36 @@ check_recipe <- function(recipe) { if ((!(recipe$Analysis$Time$ftime_min > 0)) || (!is.integer(recipe$Analysis$Time$ftime_min))) { error(recipe$Run$logger, - "The element 'ftime_min' must be an integer larger than 0.") + "The element 'ftime_min' must be an integer larger than 0.") error_status <- T } if ((!(recipe$Analysis$Time$ftime_max > 0)) || (!is.integer(recipe$Analysis$Time$ftime_max))) { error(recipe$Run$logger, - "The element 'ftime_max' must be an integer larger than 0.") + "The element 'ftime_max' must be an integer larger than 0.") error_status <- T } if (recipe$Analysis$Time$ftime_max < recipe$Analysis$Time$ftime_min) { error(recipe$Run$logger, - "'ftime_max' cannot be smaller than 'ftime_min'.") + "'ftime_max' cannot be smaller than 'ftime_min'.") error_status <- T } # Check consistency of hindcast years if (!(as.numeric(recipe$Analysis$Time$hcst_start) %% 1 == 0) || (!(recipe$Analysis$Time$hcst_start > 0))) { error(recipe$Run$logger, - "The element 'hcst_start' must be a valid year.") + "The element 'hcst_start' must be a valid year.") error_status <- T } if (!(as.numeric(recipe$Analysis$Time$hcst_end) %% 1 == 0) || (!(recipe$Analysis$Time$hcst_end > 0))) { error(recipe$Run$logger, - "The element 'hcst_end' must be a valid year.") + "The element 'hcst_end' must be a valid year.") error_status <- T } if (recipe$Analysis$Time$hcst_end < recipe$Analysis$Time$hcst_start) { error(recipe$Run$logger, - "'hcst_end' cannot be smaller than 'hcst_start'.") + "'hcst_end' cannot be smaller than 'hcst_start'.") error_status <- T } ## TODO: Is this needed? @@ -141,7 +141,7 @@ check_recipe <- function(recipe) { if (is.null(recipe$Analysis$Time$fcst_year)) { warn(recipe$Run$logger, paste("The element 'fcst_year' is not defined in the recipe.", - "No forecast year will be used.")) + "No forecast year will be used.")) } ## TODO: Adapt and move this inside 'if'? # fcst.sdate <- NULL @@ -165,7 +165,7 @@ check_recipe <- function(recipe) { # calculate number of workflows to create for each variable and if (length(recipe$Analysis$Horizon) > 1) { error(recipe$Run$logger, - "Only one single Horizon can be specified in the recipe") + "Only one single Horizon can be specified in the recipe") error_status <- T } @@ -197,7 +197,7 @@ check_recipe <- function(recipe) { if (!all(LIMITS %in% names(region))) { error(recipe$Run$logger, paste0("There must be 4 elements in 'Region': ", - paste(LIMITS, collapse = ", "), ".")) + paste(LIMITS, collapse = ", "), ".")) error_status <- T } } @@ -206,15 +206,15 @@ check_recipe <- function(recipe) { if (!("name" %in% names(region)) || (is.null(region$name))) { error(recipe$Run$logger, paste("If more than one region has been defined, every region", - "must have a unique name.")) + "must have a unique name.")) } } } # Atomic recipe } else if (!all(LIMITS %in% names(recipe$Analysis$Region))) { error(recipe$Run$logger, - paste0("There must be 4 elements in 'Region': ", - paste(LIMITS, collapse = ", "), ".")) + paste0("There must be 4 elements in 'Region': ", + paste(LIMITS, collapse = ", "), ".")) error_status <- T } ## TODO: Implement multiple regions @@ -253,47 +253,110 @@ check_recipe <- function(recipe) { "The 'Calibration' element 'method' must be specified.") error_status <- T } + SAVING_OPTIONS_CALIB <- c("all", "none", "exp_only", "fcst_only") + if ((is.null(recipe$Analysis$Workflow$Calibration$save)) || + (!(recipe$Analysis$Workflow$Calibration$save %in% SAVING_OPTIONS_CALIB))) { + error(recipe$Run$logger, + paste0("Please specify which Calibration module outputs you want ", + "to save with the 'save' parameter. The options are: ", + paste(SAVING_OPTIONS_CALIB, collapse = ", "), ".")) + error_status <- T + } } # Anomalies if ("Anomalies" %in% names(recipe$Analysis$Workflow)) { + # Computation and cross-validation checks if (is.null(recipe$Analysis$Workflow$Anomalies$compute)) { error(recipe$Run$logger, - "Parameter 'compute' must be defined under 'Anomalies'.") + "Parameter 'compute' must be defined under 'Anomalies'.") error_status <- T } else if (!(is.logical(recipe$Analysis$Workflow$Anomalies$compute))) { error(recipe$Run$logger, - paste("Parameter 'Anomalies:compute' must be a logical value", - "(True/False or yes/no).")) - error_status <- T - } else if ((recipe$Analysis$Workflow$Anomalies$compute) && - (!is.logical(recipe$Analysis$Workflow$Anomalies$cross_validation))) { - error(recipe$Run$logger, - paste("If anomaly computation is requested, parameter", - "'cross_validation' must be defined under 'Anomalies', - and it must be a logical value (True/False or yes/no).")) + paste("Parameter 'Anomalies:compute' must be a logical value", + "(True/False or yes/no).")) error_status <- T + } else if ((recipe$Analysis$Workflow$Anomalies$compute)) { + # Cross-validation check + if (!is.logical(recipe$Analysis$Workflow$Anomalies$cross_validation)) { + error(recipe$Run$logger, + paste("If anomaly computation is requested, parameter", + "'cross_validation' must be defined under 'Anomalies', + and it must be a logical value (True/False or yes/no).")) + error_status <- T + } + # Saving checks + SAVING_OPTIONS_ANOM <- c("all", "none", "exp_only", "fcst_only") + if ((is.null(recipe$Analysis$Workflow$Anomalies$save)) || + (!(recipe$Analysis$Workflow$Anomalies$save %in% SAVING_OPTIONS_ANOM))) { + error(recipe$Run$logger, + paste0("Please specify which Anomalies module outputs you want ", + "to save with the 'save' parameter. The options are: ", + paste(SAVING_OPTIONS_ANOM, collapse = ", "), ".")) + error_status <- T + } } } # Skill if (("Skill" %in% names(recipe$Analysis$Workflow)) && (is.null(recipe$Analysis$Workflow$Skill$metric))) { error(recipe$Run$logger, - "Parameter 'metric' must be defined under 'Skill'.") + "Parameter 'metric' must be defined under 'Skill'.") error_status <- T + # Saving checks + SAVING_OPTIONS_SKILL <- c("all", "none") + if ((is.null(recipe$Analysis$Workflow$Skill$save)) || + (!(recipe$Analysis$Workflow$Skill$save %in% SAVING_OPTIONS_SKILL))) { + error(recipe$Run$logger, + paste0("Please specify whether you want to save the Skill metrics ", + "with the 'save' parameter. The options are: ", + paste(SAVING_OPTIONS_SKILL, collapse = ", "), ".")) + error_status <- T + } } # Probabilities if ("Probabilities" %in% names(recipe$Analysis$Workflow)) { if (is.null(recipe$Analysis$Workflow$Probabilities$percentiles)) { error(recipe$Run$logger, - "Parameter 'percentiles' must be defined under 'Probabilities'.") + "Parameter 'percentiles' must be defined under 'Probabilities'.") error_status <- T } else if (!is.list(recipe$Analysis$Workflow$Probabilities$percentiles)) { error(recipe$Run$logger, - paste("Parameter 'Probabilities:percentiles' expects a list.", - "See documentation in the wiki for examples.")) + paste("Parameter 'Probabilities:percentiles' expects a list.", + "See documentation in the wiki for examples.")) + error_status <- T + } + # Saving checks + SAVING_OPTIONS_PROBS <- c("all", "none", "bins_only", "percentiles_only") + if ((is.null(recipe$Analysis$Workflow$Probabilities$save)) || + (!(recipe$Analysis$Workflow$Probabilities$save %in% SAVING_OPTIONS_PROBS))) { + error(recipe$Run$logger, + paste0("Please specify whether you want to save the percentiles ", + "and probability bins with the 'save' parameter. The ", + "options are: ", + paste(SAVING_OPTIONS_PROBS, collapse = ", "), ".")) error_status <- T } } + # Visualization + if ("Visualization" %in% names(recipe$Analysis$Workflow)) { + PLOT_OPTIONS <- c("skill_metrics", "forecast_ensemble_mean", + "most_likely_terciles") + ## Separate plots parameter and check if all elements are in PLOT_OPTIONS + if (is.null(recipe$Analysis$Workflow$Visualization$plots)) { + error(recipe$Run$logger, + "The 'plots' element must be defined under 'Visualization'.") + error_status <- T + } else { + plots <- strsplit(recipe$Analysis$Workflow$Visualization$plots, + ", | |,")[[1]] + if (!all(plots %in% PLOT_OPTIONS)) { + error(recipe$Run$logger, + paste0("The options available for the plots are: ", + paste(PLOT_OPTIONS, collapse = ", "), ".")) + error_status <- T + } + } + } # --------------------------------------------------------------------- # RUN CHECKS @@ -307,7 +370,7 @@ check_recipe <- function(recipe) { } if (!all(RUN_FIELDS %in% names(recipe$Run))) { error(recipe$Run$logger, paste("Recipe element 'Run' must contain", - "all of the following fields:", + "all of the following fields:", paste(RUN_FIELDS, collapse=", "), ".")) error_status <- T } @@ -347,8 +410,8 @@ check_recipe <- function(recipe) { # --------------------------------------------------------------------- AUTO_PARAMS <- c("script", "expid", "hpc_user", "wallclock", - "processors_per_job", "platform", "email_notifications", - "email_address", "notify_completed", "notify_failed") + "processors_per_job", "platform", "email_notifications", + "email_address", "notify_completed", "notify_failed") # Autosubmit false by default if (is.null(recipe$Run$autosubmit)) { recipe$Run$autosubmit <- F @@ -360,53 +423,53 @@ check_recipe <- function(recipe) { # Check that the autosubmit configuration parameters are present if (!("auto_conf" %in% names(recipe$Run))) { error(recipe$Run$logger, - "The 'auto_conf' is missing from the 'Run' section of the recipe.") + "The 'auto_conf' is missing from the 'Run' section of the recipe.") error_status <- T } else if (!all(AUTO_PARAMS %in% names(recipe$Run$auto_conf))) { error(recipe$Run$logger, - paste0("The element 'Run:auto_conf' must contain all of the ", - "following: ", paste(AUTO_PARAMS, collapse = ", "), ".")) + paste0("The element 'Run:auto_conf' must contain all of the ", + "following: ", paste(AUTO_PARAMS, collapse = ", "), ".")) error_status <- T } # Check that the script is not NULL and exists if (is.null(recipe$Run$auto_conf$script)) { error(recipe$Run$logger, - "A script must be provided to run the recipe with autosubmit.") + "A script must be provided to run the recipe with autosubmit.") error_status <- T } else if (!file.exists(recipe$Run$auto_conf$script)) { error(recipe$Run$logger, - "Could not find the file for the script in 'auto_conf'.") + "Could not find the file for the script in 'auto_conf'.") error_status <- T } # Check that the experiment ID exists if (is.null(recipe$Run$auto_conf$expid)) { error(recipe$Run$logger, - paste("The Autosubmit EXPID is missing. You can create one by", - "running the following commands on the autosubmit machine:")) + paste("The Autosubmit EXPID is missing. You can create one by", + "running the following commands on the autosubmit machine:")) error(recipe$Run$logger, - paste("module load", auto_specs$module_version)) + paste("module load", auto_specs$module_version)) error(recipe$Run$logger, - paste("autosubmit expid -H", auto_specs$platform, - "-d ")) + paste("autosubmit expid -H", auto_specs$platform, + "-d ")) } else if (!dir.exists(paste0(auto_specs$experiment_dir, - recipe$Run$auto_conf$expid))) { + recipe$Run$auto_conf$expid))) { error(recipe$Run$logger, - paste0("No folder in ", auto_specs$experiment_dir, - " for the EXPID", recipe$Run$auto_conf$expid, - ". Please make sure it is correct.")) + paste0("No folder in ", auto_specs$experiment_dir, + " for the EXPID", recipe$Run$auto_conf$expid, + ". Please make sure it is correct.")) } if ((recipe$Run$auto_conf$email_notifications) && - (is.null(recipe$Run$auto_conf$email_address))) { + (is.null(recipe$Run$auto_conf$email_address))) { error(recipe$Run$logger, - "Autosubmit notifications are enabled but email address is empty!") + "Autosubmit notifications are enabled but email address is empty!") } if (is.null(recipe$Run$auto_conf$hpc_user)) { error(recipe$Run$logger, - "The 'Run:auto_conf:hpc_user' field can not be empty.") + "The 'Run:auto_conf:hpc_user' field can not be empty.") } else if ((recipe$Run$filesystem == "esarchive") && - (!substr(recipe$Run$auto_conf$hpc_user, 1, 5) == "bsc32")) { + (!substr(recipe$Run$auto_conf$hpc_user, 1, 5) == "bsc32")) { error(recipe$Run$logger, - "Please check your hpc_user ID. It should look like: 'bsc32xxx'") + "Please check your hpc_user ID. It should look like: 'bsc32xxx'") } } @@ -418,150 +481,15 @@ check_recipe <- function(recipe) { ## TODO: Implement number of dependent verifications #nverifications <- check_number_of_dependent_verifications(recipe) # info(recipe$Run$logger, paste("Start Dates:", - # paste(fcst.sdate, collapse = " "))) + # paste(fcst.sdate, collapse = " "))) # Return error if any check has failed if (error_status) { error(recipe$Run$logger, "RECIPE CHECK FAILED.") stop("The recipe contains some errors. Find the full list in the", - "startup.log file.") + " startup.log file.") } else { info(recipe$Run$logger, "##### RECIPE CHECK SUCCESSFULL #####") # return(append(nverifications, fcst.sdate)) } } - -check_number_of_dependent_verifications <- function(recipe) { - # Number of verifications depends on the variables and indicators requested - # and the order of the workflow: - # workflow: correction + indicator --> only 1 variable is calibrated - # workflow: indicator + correction --> the indicator and the ecv are calibrated - independent_verifications <- NULL - dependent_verifications <- NULL - dep <- 1 - # check workflow order: - if (all(c('Calibration', 'Indicators') %in% names(recipe$Analysis$Workflow))) { - cal_pos <- which(names(recipe$Analysis$Workflow) == 'Calibration') - ind_pos <- which(names(recipe$Analysis$Workflow) == 'Indicators') - if (cal_pos < ind_pos) { - workflow_independent <- FALSE - } else { - workflow_independent <- TRUE - } - } - if (workflow_independent) { - independent_verifications <- append(recipe$Analysis$Variables$ECVs, - recipe$Analysis$Variables$Indicators) - } else { - if (is.null(recipe$Analysis$Variables$Indicators) || - (length(recipe$Analysis$Variables$Indicators) == 1 && - is.null(recipe$Analysis$Variables$ECVs))) { - independent_verifications <- append(recipe$Analysis$Variables$ECVs, - recipe$Analysis$Variables$Indicators) - } else { - ecvs <- recipe$Analysi$Variables$ECVs - inds <- recipe$Analysi$Variables$Indicators - ind_table <- read_yaml(paste0(recipe$Run$code_dir, - "conf/indicators_table.yml")) - # first, loop on ecvs if any and compare to indicators - done <- NULL # to gather the indicators reviewed - if (!is.null(ecvs)) { - for (i in 1:length(ecvs)) { - dependent <- list(ecvs[[i]]) - for (j in 1:length(inds)) { - if (ind_table[inds[[j]]$name][[1]]$ECVs == ecvs[[i]]$name) { - if (ind_table[inds[[j]]$name][[1]]$freq == ecvs[[i]]$freq) { - # they are dependent - dependent <- append(dependent, inds[[j]]) - done <- append(done, inds[[j]]) - } - } - } - if (length(dependent) == 1) { - dependent <- NULL - independent_verifications <- append(independent_verifications, - list(ecvs[[i]])) - } else { - dependent_verifications <- append(dependent_verifications, - list(dependent)) - } - } - # There are indicators not reviewed yet? - if (length(done) < length(inds)) { - if (length(inds) == 1) { - independent_verifications <- append(independent_verifications, - inds) - } else { - done <- NULL - for (i in 1:(length(inds) - 1)) { - dependent <- list(inds[[i]]$name) - if (is.na(match(unlist(dependent), unlist(done)))) { - for (j in (i+1):length(inds)) { - if (ind_table[inds[[i]]$name][[1]]$ECVs == - ind_table[inds[[j]]$name][[1]]$ECVs) { - if (ind_table[inds[[i]]$name][[1]]$freq == - ind_table[inds[[j]]$name][[1]]$freq) { - dependent <- append(dependent, inds[[j]]$name) - done <- dependent - } - } - } - } - if (length(dependent) == 1) { - independent_verifications <- dependent - dependent <- NULL - } else { - dependent_verifications <- dependent - } - } - } - } - } else { # there are only Indicators: - done <- NULL - for (i in 1:(length(inds) - 1)) { - dependent <- list(inds[[i]]$name) - if (is.na(match(unlist(dependent), unlist(done)))) { - for (j in (i+1):length(inds)) { - if (ind_table[inds[[i]]$name][[1]]$ECVs == - ind_table[inds[[j]]$name][[1]]$ECVs) { - if (ind_table[inds[[i]]$name][[1]]$freq == - ind_table[inds[[j]]$name][[1]]$freq) { - dependent <- append(dependent, inds[[j]]$name) - done <- dependent - } - } - } - } - if (length(dependent) == 1) { - independent_verifications <- dependent - dependent <- NULL - } else { - dependent_verifications <- dependent - } - } - } - } - } - if (!is.null(independent_verifications)) { - info(logger, paste("The variables for independent verification are ", - paste(independent_verifications, collapse = " "))) - } - if (!is.null(dependent_verifications)) { - info(logger, paste("The variables for dependent verification are: ", - paste(dependent_verifications, collapse = " "))) - } - # remove unnecessary names in objects to be removed - return(list(independent = independent_verifications, - dependent = dependent_verifications)) -} -#workflow <- list(Calibration = list(method = 'SBC'), -# Skill = list(metric = 'RPSS')) -#ApplyWorkflow <- function(workflow) { - -#res <- do.call('CST_BiasCorrection', -# args = list(exp = lonlat_data$exp, -# obs = lonlat_data$obs)) - - - - diff --git a/tools/data_summary.R b/tools/data_summary.R index 5f532dcf..92dcb353 100644 --- a/tools/data_summary.R +++ b/tools/data_summary.R @@ -19,7 +19,7 @@ data_summary <- function(data_cube, recipe) { info(recipe$Run$logger, "DATA SUMMARY:") info(recipe$Run$logger, paste(object_name, "months:", months)) info(recipe$Run$logger, paste(object_name, "range:", sdate_min, "to", - sdate_max)) + sdate_max)) info(recipe$Run$logger, paste(object_name, "dimensions:")) # Use capture.output() and for loop to display results neatly output_string <- capture.output(dim(data_cube$data)) @@ -27,7 +27,7 @@ data_summary <- function(data_cube, recipe) { info(recipe$Run$logger, i) } info(recipe$Run$logger, paste0("Statistical summary of the data in ", - object_name, ":")) + object_name, ":")) output_string <- capture.output(summary(data_cube$data)) for (i in output_string) { info(recipe$Run$logger, i) diff --git a/tools/prepare_outputs.R b/tools/prepare_outputs.R index 61825738..d0857730 100644 --- a/tools/prepare_outputs.R +++ b/tools/prepare_outputs.R @@ -22,8 +22,8 @@ #'@export prepare_outputs <- function(recipe_file, - disable_checks = FALSE, - uniqueID = TRUE) { + disable_checks = FALSE, + uniqueID = TRUE) { # recipe_file: path to recipe YAML file # disable_checks: If TRUE, does not perform checks on recipe # disable_uniqueID: If TRUE, does not add a unique ID to output dir @@ -39,7 +39,7 @@ prepare_outputs <- function(recipe_file, } else { folder_name <- paste0(gsub(".yml", "", gsub("/", "_", recipe$name)), "_", gsub(" ", "", gsub(":", "", gsub("-", "", - Sys.time())))) + Sys.time())))) } print("Saving all outputs to:") print(paste0(output_dir, folder_name)) @@ -49,7 +49,7 @@ prepare_outputs <- function(recipe_file, ## TODO: Move this part to main recipe # Copy recipe to output folder file.copy(recipe$recipe_path, file.path(output_dir, folder_name, 'logs', - 'recipes')) + 'recipes')) # Create log output file logfile <- file.path(output_dir, folder_name, 'logs', 'main.log') file.create(logfile) @@ -84,12 +84,12 @@ prepare_outputs <- function(recipe_file, if (is.null(recipe$Run$filesystem)) { recipe$Run$filesystem <- "esarchive" warn(recipe$Run$logger, - "Filesystem not specified in the recipe. Setting it to 'esarchive'.") + "Filesystem not specified in the recipe. Setting it to 'esarchive'.") } # Run recipe checker if (disable_checks) { warn(recipe$Run$logger, - "Recipe checks disabled. The recipe will not be checked for errors.") + "Recipe checks disabled. The recipe will not be checked for errors.") } else { check_recipe(recipe) } diff --git a/tools/read_atomic_recipe.R b/tools/read_atomic_recipe.R index 1eadb707..de2ad5b5 100644 --- a/tools/read_atomic_recipe.R +++ b/tools/read_atomic_recipe.R @@ -28,7 +28,7 @@ read_atomic_recipe <- function(recipe_file) { recipe$name <- tools::file_path_sans_ext(basename(recipe_file)) # Create log file for atomic recipe logfile <- file.path(recipe$Run$output_dir, 'logs', - paste0(recipe$name, '.log')) + paste0(recipe$name, '.log')) file.create(logfile) # Set default behaviour of logger if (is.null(recipe$Run)) { diff --git a/tools/write_autosubmit_conf.R b/tools/write_autosubmit_conf.R index a0208a9e..a425566d 100644 --- a/tools/write_autosubmit_conf.R +++ b/tools/write_autosubmit_conf.R @@ -20,9 +20,9 @@ write_autosubmit_conf <- function(recipe, nchunks) { ## expid, email notifications and address conf$config$EXPID <- expid if (recipe$Run$auto_conf$email_notifications) { - conf$mail$NOTIFICATIONS <- "True" + conf$mail$NOTIFICATIONS <- "True" } else { - conf$mail$NOTIFICATIONS <- "False" + conf$mail$NOTIFICATIONS <- "False" } conf$mail$TO <- recipe$Run$auto_conf$email_address } else if (conf_type == "expdef") { @@ -37,34 +37,34 @@ write_autosubmit_conf <- function(recipe, nchunks) { ## wallclock, notify_on, platform?, processors # Different file structure depending on autosubmit version if (auto_specs$auto_version == "4.0.0") { - jobs <- conf$JOBS + jobs <- conf$JOBS } else { - jobs <- conf + jobs <- conf } jobs$verification$WALLCLOCK <- recipe$Run$auto_conf$wallclock if (recipe$Run$auto_conf$notify_completed) { jobs$verification$NOTIFY_ON <- paste(jobs$verification$NOTIFY_ON, - "COMPLETED") + "COMPLETED") } if (recipe$Run$auto_conf$notify_failed) { - jobs$verification$NOTIFY_ON <- paste(jobs$verification$NOTIFY_ON, - "FAILED") + jobs$verification$NOTIFY_ON <- paste(jobs$verification$NOTIFY_ON, + "FAILED") } jobs$verification$PROCESSORS <- recipe$Run$auto_conf$processors_per_job # ncores? # Return to original list if (auto_specs$auto_version == "4.0.0") { - conf$JOBS <- jobs + conf$JOBS <- jobs } else { - conf <- jobs + conf <- jobs } } else if (conf_type == "platforms") { # Section 4: platform configuration ## nord3v2 configuration... platform name? user, processors_per_node if (auto_specs$auto_version == "4.0.0") { - conf$Platforms[[auto_specs$platform]]$USER <- - recipe$Run$auto_conf$hpc_user + conf$Platforms[[auto_specs$platform]]$USER <- + recipe$Run$auto_conf$hpc_user } else { - conf[[auto_specs$platform]]$USER <- recipe$Run$auto_conf$hpc_user + conf[[auto_specs$platform]]$USER <- recipe$Run$auto_conf$hpc_user } } else if (conf_type == "proj") { # Section 5: proj @@ -75,31 +75,31 @@ write_autosubmit_conf <- function(recipe, nchunks) { # Write config file inside autosubmit dir ## TODO: Change write.type depending on autosubmit version write.config(conf, paste0(dest_dir, dest_file), - write.type = auto_specs$conf_format) + write.type = auto_specs$conf_format) Sys.chmod(paste0(dest_dir, dest_file), mode = "755", use_umask = F) } info(recipe$Run$logger, paste("##### AUTOSUBMIT CONFIGURATION WRITTEN FOR", expid, "#####")) info(recipe$Run$logger, paste0("You can check your experiment configuration at: ", - "/esarchive/autosubmit/", expid, "/conf/")) + "/esarchive/autosubmit/", expid, "/conf/")) # Print instructions/commands for user if (recipe$Run$Terminal) { ## TODO: Change SSH message for other environments (outside BSC) info(recipe$Run$logger, - paste("Please SSH into bscesautosubmit01 or bscesautosubmit02 and run", - "the following commands:")) + paste("Please SSH into bscesautosubmit01 or bscesautosubmit02 and run", + "the following commands:")) info(recipe$Run$logger, - paste("module load", auto_specs$module_version)) + paste("module load", auto_specs$module_version)) info(recipe$Run$logger, - paste("autosubmit create", expid)) + paste("autosubmit create", expid)) info(recipe$Run$logger, - paste("autosubmit refresh", expid)) + paste("autosubmit refresh", expid)) info(recipe$Run$logger, - paste("nohup autosubmit run", expid, "& disown")) + paste("nohup autosubmit run", expid, "& disown")) } else { print(paste("Please SSH into bscesautosubmit01 or bscesautosubmit02 and run", - "the following commands:")) + "the following commands:")) print(paste("module load", auto_specs$module_version)) print(paste("autosubmit create", expid)) print(paste("autosubmit refresh", expid)) -- GitLab From fb7760eeb1171a1e305a7080389ced7311cc6230 Mon Sep 17 00:00:00 2001 From: nperez Date: Fri, 28 Apr 2023 15:14:23 +0200 Subject: [PATCH 147/388] RMSS and clim scores --- modules/Skill/R/CRPS_clim.R | 13 +++++++++++++ modules/Skill/R/RPS_clim.R | 20 ++++++++++++++++++++ modules/Skill/Skill.R | 37 +++++++++++++++++++++++++++++++++++-- 3 files changed, 68 insertions(+), 2 deletions(-) create mode 100644 modules/Skill/R/CRPS_clim.R create mode 100644 modules/Skill/R/RPS_clim.R diff --git a/modules/Skill/R/CRPS_clim.R b/modules/Skill/R/CRPS_clim.R new file mode 100644 index 00000000..36db4e94 --- /dev/null +++ b/modules/Skill/R/CRPS_clim.R @@ -0,0 +1,13 @@ +CRPS_clim <- function(obs, memb_dim ='ensemble'){ + time_dim <- names(dim(obs)) + obs_time_len <- dim(obs)[time_dim] + + ref <- array(data = rep(obs, each = obs_time_len), dim = c(obs_time_len, obs_time_len)) + names(dim(ref)) <- c(time_dim, memb_dim) + # ref: [sdate, memb] + # obs: [sdate] + crps_ref <- s2dv:::.CRPS(exp = ref, obs = obs, time_dim = time_dim, memb_dim = memb_dim, + dat_dim = NULL, Fair = FALSE) + # crps_ref should be [sdate] + return(mean(crps_ref)) +} diff --git a/modules/Skill/R/RPS_clim.R b/modules/Skill/R/RPS_clim.R new file mode 100644 index 00000000..58f9da4e --- /dev/null +++ b/modules/Skill/R/RPS_clim.R @@ -0,0 +1,20 @@ +# RPS version for climatology +RPS_clim <- function(obs, indices_for_clim = NULL, prob_thresholds = c(1/3, 2/3)) { + + if (is.null(indices_for_clim)){ + indices_for_clim <- 1:length(obs) + } + + obs_probs <- .get_probs(data = obs, indices_for_quantiles = indices_for_clim, ## temporarily removed s2dv::: + prob_thresholds = prob_thresholds, weights = NULL, cross.val = T) ## here! + # clim_probs: [bin, sdate] + clim_probs <- c(prob_thresholds[1], diff(prob_thresholds), 1 - prob_thresholds[length(prob_thresholds)]) + clim_probs <- array(clim_probs, dim = dim(obs_probs)) + + # Calculate RPS for each time step + probs_clim_cumsum <- apply(clim_probs, 2, cumsum) + probs_obs_cumsum <- apply(obs_probs, 2, cumsum) + rps_ref <- apply((probs_clim_cumsum - probs_obs_cumsum)^2, 2, sum) + + return(mean(rps_ref)) +} diff --git a/modules/Skill/Skill.R b/modules/Skill/Skill.R index d3f74b13..42a277b2 100644 --- a/modules/Skill/Skill.R +++ b/modules/Skill/Skill.R @@ -111,18 +111,27 @@ compute_skill_metrics <- function(recipe, data) { time_dim = time_dim, memb_dim = memb_dim, Fair = Fair, + cross.val = recipe$Analysis$Workflow$Skill$cross.val, ncores = ncores) skill <- .drop_dims(skill) skill_metrics[[ metric ]] <- skill + skill <- lapply(skill, function(x) { + .drop_dims(x)}) + skill_metrics[[ metric ]] <- skill$rpss + skill_metrics[[ paste0(metric, "_significance") ]] <- skill$sign + rps_clim <- Apply(list(data$obs$data), + target_dims = c(time_dim, memb_dim), + RPS_clim)$output1 + rps_clim <- .drop_dims(rps_clim) + # Ranked Probability Skill Score and Fair version } else if (metric %in% c('rpss', 'frpss')) { skill <- RPSS(data$hcst$data, data$obs$data, time_dim = time_dim, memb_dim = memb_dim, Fair = Fair, + cross.val = recipe$Analysis$Workflow$Skill$cross.val, ncores = ncores) - skill <- lapply(skill, function(x) { - .drop_dims(x)}) skill_metrics[[ metric ]] <- skill$rpss skill_metrics[[ paste0(metric, "_significance") ]] <- skill$sign # Brier Skill Score - 10th percentile @@ -131,6 +140,7 @@ compute_skill_metrics <- function(recipe, data) { time_dim = time_dim, memb_dim = memb_dim, prob_thresholds = 0.1, + cross.val = recipe$Analysis$Workflow$Skill$cross.val, Fair = Fair, ncores = ncores) skill <- lapply(skill, function(x) { @@ -143,6 +153,7 @@ compute_skill_metrics <- function(recipe, data) { time_dim = time_dim, memb_dim = memb_dim, prob_thresholds = 0.9, + cross.val = recipe$Analysis$Workflow$Skill$cross.val, Fair = Fair, ncores = ncores) skill <- lapply(skill, function(x) { @@ -158,6 +169,10 @@ compute_skill_metrics <- function(recipe, data) { ncores = ncores) skill <- .drop_dims(skill) skill_metrics[[ metric ]] <- skill + crps_clim <- Apply(list(data$obs$data), target_dims = time_dim, + fun = CRPS_clim, memb_dim = memb_dim)$output1 + crps_clim <- .drop_dims(crps_clim) + skill_metrics[['crps_clim']] <- crps_clim # CRPSS and FCRPSS } else if (metric %in% c('crpss', 'fcrpss')) { skill <- CRPSS(data$hcst$data, data$obs$data, @@ -169,6 +184,24 @@ compute_skill_metrics <- function(recipe, data) { .drop_dims(x)}) skill_metrics[[ metric ]] <- skill$crpss skill_metrics[[ paste0(metric, "_significance") ]] <- skill$sign + } else if (metric == 'RMS') { + skill <- RMS(exp = data$hcst$data, + obs = data$obs$data, + time_dim = time_dim, dat_dim = NULL, comp_dim = NULL, + limits = NULL, conf = TRUE, alpha = 0.05, ncores = ncores) + skill <- lapply(skill, function(x) { + .drop_dims(x)}) + skill_metrics[[ metric ]] <- skill$rms + #skill_metrics[[ paste0(metric, "_significance") ]] <- NULL #skill$sign + } else if (metric == 'RMSS') { + skill <- RMSS(exp = data$hcst$data, + obs = data$obs$data, ref = NULL, + time_dim = time_dim, dat_dim = NULL, + memb_dim = memb_dim, pval = TRUE, sign = FALSE, alpha = 0.05, + sig_method = 'one-sided Fisher', ncores = NULL) + skill <- .drop_dims(skill) + skill_metrics[[ metric ]] <- skill + skill_metrics[[ paste0(metric, "_significance") ]] <- skill$sign # Mean bias (climatology) } else if (metric == 'mean_bias') { ## TODO: Eliminate option to compute from anomalies -- GitLab From 25f747305c2964fb8cc8ee7804f48d982d98ba7c Mon Sep 17 00:00:00 2001 From: nperez Date: Fri, 28 Apr 2023 15:17:19 +0200 Subject: [PATCH 148/388] drop_dims added back --- modules/Skill/Skill.R | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/Skill/Skill.R b/modules/Skill/Skill.R index 42a277b2..9df1498f 100644 --- a/modules/Skill/Skill.R +++ b/modules/Skill/Skill.R @@ -132,6 +132,8 @@ compute_skill_metrics <- function(recipe, data) { Fair = Fair, cross.val = recipe$Analysis$Workflow$Skill$cross.val, ncores = ncores) + skill <- lapply(skill, function(x) { + .drop_dims(x)}) skill_metrics[[ metric ]] <- skill$rpss skill_metrics[[ paste0(metric, "_significance") ]] <- skill$sign # Brier Skill Score - 10th percentile -- GitLab From dd93e0ec4433485b9608a02b745460af9085680a Mon Sep 17 00:00:00 2001 From: nperez Date: Fri, 28 Apr 2023 16:24:05 +0200 Subject: [PATCH 149/388] fix drop_dims and source --- modules/Skill/R/RPS_clim.R | 2 +- modules/Skill/Skill.R | 19 +++++-------------- 2 files changed, 6 insertions(+), 15 deletions(-) diff --git a/modules/Skill/R/RPS_clim.R b/modules/Skill/R/RPS_clim.R index 58f9da4e..e8b6452d 100644 --- a/modules/Skill/R/RPS_clim.R +++ b/modules/Skill/R/RPS_clim.R @@ -5,7 +5,7 @@ RPS_clim <- function(obs, indices_for_clim = NULL, prob_thresholds = c(1/3, 2/3) indices_for_clim <- 1:length(obs) } - obs_probs <- .get_probs(data = obs, indices_for_quantiles = indices_for_clim, ## temporarily removed s2dv::: + obs_probs <- .GetProbs(data = obs, indices_for_quantiles = indices_for_clim, ## temporarily removed s2dv::: prob_thresholds = prob_thresholds, weights = NULL, cross.val = T) ## here! # clim_probs: [bin, sdate] clim_probs <- c(prob_thresholds[1], diff(prob_thresholds), 1 - prob_thresholds[length(prob_thresholds)]) diff --git a/modules/Skill/Skill.R b/modules/Skill/Skill.R index 9df1498f..ea7b0220 100644 --- a/modules/Skill/Skill.R +++ b/modules/Skill/Skill.R @@ -15,6 +15,8 @@ source("modules/Skill/R/tmp/RPS.R") source("modules/Skill/R/tmp/RPSS.R") source("modules/Skill/R/tmp/GetProbs.R") source("modules/Skill/R/tmp/RandomWalkTest.R") +source("modules/SKill/R/RPS_clim.R") +source("modules/Skill/R/CRPS_clim.R") ## TODO: Implement this in the future ## Which parameter are required? # if (!("obs" %in% ls()) || is.null(obs)) { @@ -113,8 +115,6 @@ compute_skill_metrics <- function(recipe, data) { Fair = Fair, cross.val = recipe$Analysis$Workflow$Skill$cross.val, ncores = ncores) - skill <- .drop_dims(skill) - skill_metrics[[ metric ]] <- skill skill <- lapply(skill, function(x) { .drop_dims(x)}) skill_metrics[[ metric ]] <- skill$rpss @@ -123,7 +123,7 @@ compute_skill_metrics <- function(recipe, data) { target_dims = c(time_dim, memb_dim), RPS_clim)$output1 rps_clim <- .drop_dims(rps_clim) - + skill_metrics[['rps_clim']] <- rps_clim # Ranked Probability Skill Score and Fair version } else if (metric %in% c('rpss', 'frpss')) { skill <- RPSS(data$hcst$data, data$obs$data, @@ -187,23 +187,14 @@ compute_skill_metrics <- function(recipe, data) { skill_metrics[[ metric ]] <- skill$crpss skill_metrics[[ paste0(metric, "_significance") ]] <- skill$sign } else if (metric == 'RMS') { + source("https://earth.bsc.es/gitlab/es/s2dv/-/raw/master/R/RMS.R") skill <- RMS(exp = data$hcst$data, obs = data$obs$data, time_dim = time_dim, dat_dim = NULL, comp_dim = NULL, - limits = NULL, conf = TRUE, alpha = 0.05, ncores = ncores) + limits = NULL, conf = FALSE, alpha = 0.05, ncores = ncores) skill <- lapply(skill, function(x) { .drop_dims(x)}) skill_metrics[[ metric ]] <- skill$rms - #skill_metrics[[ paste0(metric, "_significance") ]] <- NULL #skill$sign - } else if (metric == 'RMSS') { - skill <- RMSS(exp = data$hcst$data, - obs = data$obs$data, ref = NULL, - time_dim = time_dim, dat_dim = NULL, - memb_dim = memb_dim, pval = TRUE, sign = FALSE, alpha = 0.05, - sig_method = 'one-sided Fisher', ncores = NULL) - skill <- .drop_dims(skill) - skill_metrics[[ metric ]] <- skill - skill_metrics[[ paste0(metric, "_significance") ]] <- skill$sign # Mean bias (climatology) } else if (metric == 'mean_bias') { ## TODO: Eliminate option to compute from anomalies -- GitLab From e61b64c5bcd494c0dfdb132af81e2238033f87d6 Mon Sep 17 00:00:00 2001 From: nperez Date: Fri, 28 Apr 2023 16:31:59 +0200 Subject: [PATCH 150/388] typo --- modules/Skill/Skill.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/Skill/Skill.R b/modules/Skill/Skill.R index ea7b0220..122aa722 100644 --- a/modules/Skill/Skill.R +++ b/modules/Skill/Skill.R @@ -15,7 +15,7 @@ source("modules/Skill/R/tmp/RPS.R") source("modules/Skill/R/tmp/RPSS.R") source("modules/Skill/R/tmp/GetProbs.R") source("modules/Skill/R/tmp/RandomWalkTest.R") -source("modules/SKill/R/RPS_clim.R") +source("modules/Skill/R/RPS_clim.R") source("modules/Skill/R/CRPS_clim.R") ## TODO: Implement this in the future ## Which parameter are required? -- GitLab From cbae842f0a91df5e68a7a386eb6feace699b6a2e Mon Sep 17 00:00:00 2001 From: nperez Date: Fri, 28 Apr 2023 16:52:45 +0200 Subject: [PATCH 151/388] cross.val check --- modules/Skill/Skill.R | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/modules/Skill/Skill.R b/modules/Skill/Skill.R index 122aa722..7b2ef7ed 100644 --- a/modules/Skill/Skill.R +++ b/modules/Skill/Skill.R @@ -92,6 +92,11 @@ compute_skill_metrics <- function(recipe, data) { } else { na.rm = recipe$Analysis$remove_NAs } + if (is.null(recipe$Analysis$Workflow$Skill$cross.val)) { + cross.val <- FALSE + } else { + cross.val <- recipe$Analysis$Workflow$Skill$cross.val + } skill_metrics <- list() for (metric in strsplit(metrics, ", | |,")[[1]]) { # Whether the fair version of the metric is to be computed @@ -113,12 +118,10 @@ compute_skill_metrics <- function(recipe, data) { time_dim = time_dim, memb_dim = memb_dim, Fair = Fair, - cross.val = recipe$Analysis$Workflow$Skill$cross.val, + cross.val = cross.val, ncores = ncores) - skill <- lapply(skill, function(x) { - .drop_dims(x)}) - skill_metrics[[ metric ]] <- skill$rpss - skill_metrics[[ paste0(metric, "_significance") ]] <- skill$sign + skill <- .drop_dims(skill) + skill_metrics[[ metric ]] <- skill rps_clim <- Apply(list(data$obs$data), target_dims = c(time_dim, memb_dim), RPS_clim)$output1 @@ -130,7 +133,7 @@ compute_skill_metrics <- function(recipe, data) { time_dim = time_dim, memb_dim = memb_dim, Fair = Fair, - cross.val = recipe$Analysis$Workflow$Skill$cross.val, + cross.val = cross.val, ncores = ncores) skill <- lapply(skill, function(x) { .drop_dims(x)}) @@ -142,7 +145,7 @@ compute_skill_metrics <- function(recipe, data) { time_dim = time_dim, memb_dim = memb_dim, prob_thresholds = 0.1, - cross.val = recipe$Analysis$Workflow$Skill$cross.val, + cross.val = cross.val, Fair = Fair, ncores = ncores) skill <- lapply(skill, function(x) { @@ -155,7 +158,7 @@ compute_skill_metrics <- function(recipe, data) { time_dim = time_dim, memb_dim = memb_dim, prob_thresholds = 0.9, - cross.val = recipe$Analysis$Workflow$Skill$cross.val, + cross.val = cross.val, Fair = Fair, ncores = ncores) skill <- lapply(skill, function(x) { @@ -186,9 +189,11 @@ compute_skill_metrics <- function(recipe, data) { .drop_dims(x)}) skill_metrics[[ metric ]] <- skill$crpss skill_metrics[[ paste0(metric, "_significance") ]] <- skill$sign - } else if (metric == 'RMS') { + } else if (metric == 'rms') { source("https://earth.bsc.es/gitlab/es/s2dv/-/raw/master/R/RMS.R") - skill <- RMS(exp = data$hcst$data, + hcst_mean <- Apply(list(data$hcst$data), target_dims = memb_dim, + fun = mean, na.rm = na.rm, ncores = ncores)$output1 + skill <- RMS(exp = hcst_mean, obs = data$obs$data, time_dim = time_dim, dat_dim = NULL, comp_dim = NULL, limits = NULL, conf = FALSE, alpha = 0.05, ncores = ncores) -- GitLab From 3a7a39d4bbce672ffe591b271efc62fed9929e57 Mon Sep 17 00:00:00 2001 From: nperez Date: Fri, 28 Apr 2023 16:58:31 +0200 Subject: [PATCH 152/388] ensemble mean --- modules/Skill/Skill.R | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/Skill/Skill.R b/modules/Skill/Skill.R index 7b2ef7ed..20eec5c3 100644 --- a/modules/Skill/Skill.R +++ b/modules/Skill/Skill.R @@ -193,6 +193,7 @@ compute_skill_metrics <- function(recipe, data) { source("https://earth.bsc.es/gitlab/es/s2dv/-/raw/master/R/RMS.R") hcst_mean <- Apply(list(data$hcst$data), target_dims = memb_dim, fun = mean, na.rm = na.rm, ncores = ncores)$output1 + hcst_mean <- InsertDim(hcst_mean, pos = 1, len = 1, name = memb_dim) skill <- RMS(exp = hcst_mean, obs = data$obs$data, time_dim = time_dim, dat_dim = NULL, comp_dim = NULL, -- GitLab From 591234d3ec2882686a3a9844db51eba7fba8652a Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Tue, 2 May 2023 13:20:41 +0200 Subject: [PATCH 153/388] Change name of cross.val parameter, fix _clim metric name, fix pipeline --- modules/Skill/Skill.R | 8 +++++--- tests/testthat/test-decadal_monthly_2.R | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/modules/Skill/Skill.R b/modules/Skill/Skill.R index 20eec5c3..7eb44321 100644 --- a/modules/Skill/Skill.R +++ b/modules/Skill/Skill.R @@ -92,10 +92,12 @@ compute_skill_metrics <- function(recipe, data) { } else { na.rm = recipe$Analysis$remove_NAs } - if (is.null(recipe$Analysis$Workflow$Skill$cross.val)) { + if (is.null(recipe$Analysis$Workflow$Skill$cross_validation)) { + warn(recipe$Run$logger, + "cross_validation parameter not defined, setting it to FALSE.") cross.val <- FALSE } else { - cross.val <- recipe$Analysis$Workflow$Skill$cross.val + cross.val <- recipe$Analysis$Workflow$Skill$cross_validation } skill_metrics <- list() for (metric in strsplit(metrics, ", | |,")[[1]]) { @@ -126,7 +128,7 @@ compute_skill_metrics <- function(recipe, data) { target_dims = c(time_dim, memb_dim), RPS_clim)$output1 rps_clim <- .drop_dims(rps_clim) - skill_metrics[['rps_clim']] <- rps_clim + skill_metrics[[paste0(metric, "_clim")]] <- rps_clim # Ranked Probability Skill Score and Fair version } else if (metric %in% c('rpss', 'frpss')) { skill <- RPSS(data$hcst$data, data$obs$data, diff --git a/tests/testthat/test-decadal_monthly_2.R b/tests/testthat/test-decadal_monthly_2.R index a6ca9254..01fe0440 100644 --- a/tests/testthat/test-decadal_monthly_2.R +++ b/tests/testthat/test-decadal_monthly_2.R @@ -164,7 +164,7 @@ TRUE ) expect_equal( names(skill_metrics), -c("rpss_specs", "enscorr_specs", "frps_specs", "frpss_specs", "bss10_specs", "frps") +c("rpss_specs", "enscorr_specs", "frps_specs", "frpss_specs", "bss10_specs", "frps", "frps_clim") ) expect_equal( class(skill_metrics$rpss_specs), -- GitLab From 8c69f7b196a7f752287d8fd1d45e913aff36b2c0 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Thu, 4 May 2023 08:58:15 +0200 Subject: [PATCH 154/388] Add custom warning if output dir already exists --- tools/prepare_outputs.R | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/tools/prepare_outputs.R b/tools/prepare_outputs.R index d0857730..f9e71132 100644 --- a/tools/prepare_outputs.R +++ b/tools/prepare_outputs.R @@ -43,10 +43,14 @@ prepare_outputs <- function(recipe_file, } print("Saving all outputs to:") print(paste0(output_dir, folder_name)) - dir.create(file.path(output_dir, folder_name, 'outputs'), recursive = TRUE) - dir.create(file.path(output_dir, folder_name, 'logs')) - dir.create(file.path(output_dir, folder_name, 'logs', 'recipes')) - ## TODO: Move this part to main recipe + if (dir.exists(file.path(output_dir, folder_name))) { + warning("The output directory already exists and files may be overwritten.") + } else { + dir.create(file.path(output_dir, folder_name, 'outputs'), + recursive = T, showWarnings = F) + } + dir.create(file.path(output_dir, folder_name, 'logs', 'recipes'), + recursive = T, showWarnings = F) # Copy recipe to output folder file.copy(recipe$recipe_path, file.path(output_dir, folder_name, 'logs', 'recipes')) -- GitLab From bdc229b9cd14eacdd55ed00190145c692ddbf2e4 Mon Sep 17 00:00:00 2001 From: aho Date: Fri, 5 May 2023 15:11:12 +0200 Subject: [PATCH 155/388] Regrid right after each file is loaded --- modules/Loading/GRIB/GrbLoad.R | 21 ++++- modules/Loading/Loading_GRIB.R | 155 ++++++++++++++++++++------------- modules/test_GRIB.R | 2 - 3 files changed, 115 insertions(+), 63 deletions(-) diff --git a/modules/Loading/GRIB/GrbLoad.R b/modules/Loading/GRIB/GrbLoad.R index 29bcc8a3..1163a459 100644 --- a/modules/Loading/GRIB/GrbLoad.R +++ b/modules/Loading/GRIB/GrbLoad.R @@ -4,8 +4,10 @@ # If exp, has.memb is a number; if obs, has.memb = NULL # syear_time_dim is the time attr dim of exp as the input for obs #---------------------------------------------------------------------------------- -GrbLoad <- function (dat, time_step = 1, has.memb = NULL, syear_time_dim = NULL) { - +#--------NEW-------- +GrbLoad <- function (dat, time_step = 1, has.memb = NULL, syear_time_dim = NULL, + regrid = NULL) { +#-------NEW_END----------- library(gribr) result <- vector('list', length = length(dat)) @@ -143,6 +145,21 @@ GrbLoad <- function (dat, time_step = 1, has.memb = NULL, syear_time_dim = NULL) times[[dat_i]] <- cdo_time_attr #-------------------------------- + ################################################################## + # regrid + ################################################################## + if (!is.null(regrid)) { + # result[[dat_i]]: [longitude, latitude, time] + res_data <- s2dv::CDORemap(result[[dat_i]], lons = attr(result, 'longitude'), lats = attr(result, 'latitude'), + grid = regrid$type, method = regrid$method, force_remap = TRUE) + if (dat_i == length(dat)) { + attr(result, 'longitude') <- res_data$lons + attr(result, 'latitude') <- res_data$lats + } + result[[dat_i]] <- res_data$data_array + } + + ################################################################## # Save memory rm(memb_ftime); rm(gm1); gc() diff --git a/modules/Loading/Loading_GRIB.R b/modules/Loading/Loading_GRIB.R index 6db2e6cd..619baf19 100644 --- a/modules/Loading/Loading_GRIB.R +++ b/modules/Loading/Loading_GRIB.R @@ -26,6 +26,11 @@ load_datasets <- function(recipe) { variable <- recipe$Analysis$Variables$name #'tas' store.freq <- recipe$Analysis$Variables$freq +#-----------NEW--------- + regrid.method <- recipe$Analysis$Regrid$method + regrid.type <- recipe$Analysis$Regrid$type +#--------NEW_END-------- + # get MARS datasets dict: archive <- read_yaml("conf/archive.yml")[[recipe$Run$filesystem]] exp_descrip <- archive$System[[exp.name]] @@ -56,7 +61,20 @@ load_datasets <- function(recipe) { hcst.year <- paste0(as.numeric(hcst.inityear):as.numeric(hcst.endyear)) hcst.files <- paste0(hcst.path, variable, '_', hcst.year, hcst.sdate, '.grb') - hcst <- GrbLoad(dat = as.list(hcst.files), time_step = hcst.ftime, has.memb = hcst.nmember) +#---------NEW-------------- + if (!regrid.type %in% c('none', 'to_system')) { + if (regrid.type == 'to_reference') { + regrid_list <- c(method = regrid.method, type = reference_descrip$reference_grid) + } else { # e.g., "r360x181" + regrid_list <- list(method = regrid.method, type = regrid.type) + } + } else { + regrid_list <- NULL + } + + hcst <- GrbLoad(dat = as.list(hcst.files), time_step = hcst.ftime, has.memb = hcst.nmember, + syear_time_dim = NULL, regrid = regrid_list) +#-----------NEW_END----------- gc() info(recipe$Run$logger, @@ -67,8 +85,10 @@ load_datasets <- function(recipe) { if (!is.null(fcst.year)) { fcst.path <- paste0(archive$src, hcst.dir) fcst.files <- paste0(fcst.path, variable, '_', fcst.year, hcst.sdate, '.grb') - - fcst <- GrbLoad(dat = as.list(fcst.files), time_step = hcst.ftime, has.memb = fcst.nmember) +#----------NEW------------ + fcst <- GrbLoad(dat = as.list(fcst.files), time_step = hcst.ftime, has.memb = fcst.nmember, + syear_time_dim = NULL, regrid = regrid_list) +#---------NEW_END---------- gc() } else { fcst <- NULL @@ -87,8 +107,21 @@ load_datasets <- function(recipe) { obs.files <- paste0(obs.path, variable, '_', hcst_times_strings, '.grb') +#----------NEW----------- + if (!regrid.type %in% c('none', 'to_reference')) { + if (regrid.type == 'to_system') { + regrid_list <- c(method = regrid.method, type = exp_descrip$reference_grid) + } else { # e.g., "r360x181" + regrid_list <- list(method = regrid.method, type = regrid.type) + } + } else { + regrid_list <- NULL + } + #NOTE: only 1 time step in each obs file - obs <- GrbLoad(dat = as.list(obs.files), time_step = 1, has.memb = NULL, syear_time_dim = dim(hcst_times)) + obs <- GrbLoad(dat = as.list(obs.files), time_step = 1, has.memb = NULL, + syear_time_dim = dim(hcst_times), regrid = regrid_list) +#--------NEW_END-------- gc() info(recipe$Run$logger, @@ -125,61 +158,65 @@ load_datasets <- function(recipe) { ################################################################################# - # Regridding - #------------------------------------------------------------------- - regrid.method <- recipe$Analysis$Regrid$method - regrid.type <- recipe$Analysis$Regrid$type - if (!is.null(regrid.method) & !is.null(regrid.type)) { - if (regrid.type == 'to_reference') { - gridtype <- exp_descrip$reference_grid - #NOTE: Do we need force_remap? - tmp <- s2dv::CDORemap(hcst, lons = attr(hcst, 'longitude'), lats = attr(hcst, 'latitude'), - grid = gridtype, method = regrid.method, force_remap = TRUE) - hcst <- tmp$data_array - attr(hcst, 'latitude') <- tmp$lats - attr(hcst, 'longitude') <- tmp$lons - - if (!is.null(fcst)) { - tmp <- s2dv::CDORemap(fcst, lons = attr(fcst, 'longitude'), lats = attr(fcst, 'latitude'), - grid = gridtype, method = regrid.method, force_remap = TRUE) - fcst <- tmp$data_array - attr(fcst, 'latitude') <- tmp$lats - attr(fcst, 'longitude') <- tmp$lons - } - - } else if (regrid.type == 'to_system') { - gridtype <- reference_descrip$reference_grid - tmp <- s2dv::CDORemap(obs, lons = attr(obs, 'longitude'), lats = attr(obs, 'latitude'), - grid = gridtype, method = regrid.method, force_remap = TRUE) - obs <- tmp$data_array - attr(obs, 'latitude') <- tmp$lats - attr(obs, 'longitude') <- tmp$lons - - } else if (regrid.type != 'none') { - gridtype <- recipe$Analysis$Regrid$type - # hcst - tmp <- s2dv::CDORemap(hcst, lons = attr(hcst, 'longitude'), lats = attr(hcst, 'latitude'), - grid = gridtype, method = regrid.method, force_remap = TRUE) - hcst <- tmp$data_array - attr(hcst, 'latitude') <- tmp$lats - attr(hcst, 'longitude') <- tmp$lons - # fcst - if (!is.null(fcst)) { - tmp <- s2dv::CDORemap(fcst, lons = attr(fcst, 'longitude'), lats = attr(fcst, 'latitude'), - grid = gridtype, method = regrid.method, force_remap = TRUE) - fcst <- tmp$data_array - attr(fcst, 'latitude') <- tmp$lats - attr(fcst, 'longitude') <- tmp$lons - } - # obs - tmp <- s2dv::CDORemap(obs, lons = attr(obs, 'longitude'), lats = attr(obs, 'latitude'), - grid = gridtype, method = regrid.method, force_remap = TRUE) - obs <- tmp$data_array - attr(obs, 'latitude') <- tmp$lats - attr(obs, 'longitude') <- tmp$lons - } - - } +#------------NEW---------- +# # Regridding +# #------------------------------------------------------------------- +## regrid.method <- recipe$Analysis$Regrid$method +## regrid.type <- recipe$Analysis$Regrid$type +# if (!is.null(regrid.method) & !is.null(regrid.type)) { +# if (regrid.type == 'to_reference') { +# gridtype <- reference_descrip$reference_grid +# #NOTE: Do we need force_remap? +# tmp <- s2dv::CDORemap(hcst, lons = attr(hcst, 'longitude'), lats = attr(hcst, 'latitude'), +# grid = gridtype, method = regrid.method, force_remap = TRUE) +# hcst <- tmp$data_array +# attr(hcst, 'latitude') <- tmp$lats +# attr(hcst, 'longitude') <- tmp$lons +# +# if (!is.null(fcst)) { +# tmp <- s2dv::CDORemap(fcst, lons = attr(fcst, 'longitude'), lats = attr(fcst, 'latitude'), +# grid = gridtype, method = regrid.method, force_remap = TRUE) +# fcst <- tmp$data_array +# attr(fcst, 'latitude') <- tmp$lats +# attr(fcst, 'longitude') <- tmp$lons +# } +# +# } else if (regrid.type == 'to_system') { +##------------NEW---------- +# gridtype <- exp_descrip$reference_grid +##---------NEW_END------------ +# tmp <- s2dv::CDORemap(obs, lons = attr(obs, 'longitude'), lats = attr(obs, 'latitude'), +# grid = gridtype, method = regrid.method, force_remap = TRUE) +# obs <- tmp$data_array +# attr(obs, 'latitude') <- tmp$lats +# attr(obs, 'longitude') <- tmp$lons +# +# } else if (regrid.type != 'none') { +# gridtype <- recipe$Analysis$Regrid$type +# # hcst +# tmp <- s2dv::CDORemap(hcst, lons = attr(hcst, 'longitude'), lats = attr(hcst, 'latitude'), +# grid = gridtype, method = regrid.method, force_remap = TRUE) +# hcst <- tmp$data_array +# attr(hcst, 'latitude') <- tmp$lats +# attr(hcst, 'longitude') <- tmp$lons +# # fcst +# if (!is.null(fcst)) { +# tmp <- s2dv::CDORemap(fcst, lons = attr(fcst, 'longitude'), lats = attr(fcst, 'latitude'), +# grid = gridtype, method = regrid.method, force_remap = TRUE) +# fcst <- tmp$data_array +# attr(fcst, 'latitude') <- tmp$lats +# attr(fcst, 'longitude') <- tmp$lons +# } +# # obs +# tmp <- s2dv::CDORemap(obs, lons = attr(obs, 'longitude'), lats = attr(obs, 'latitude'), +# grid = gridtype, method = regrid.method, force_remap = TRUE) +# obs <- tmp$data_array +# attr(obs, 'latitude') <- tmp$lats +# attr(obs, 'longitude') <- tmp$lons +# } +# +# } +#----------NEW_END--------- info(recipe$Run$logger, "========== REGRID DONE. ==========") diff --git a/modules/test_GRIB.R b/modules/test_GRIB.R index b29e6e54..27cf3c9a 100644 --- a/modules/test_GRIB.R +++ b/modules/test_GRIB.R @@ -1,8 +1,6 @@ source('modules/Loading/GRIB/GrbLoad.R') source('modules/Loading//Loading_GRIB.R') source("tools/libs.R") # for prepare_outputs.R -#TODO: remove this line when new s2dv_cube() is in CSTools -source('modules/Loading/GRIB/s2dv_cube.R') recipe <- "modules/Loading/testing_recipes/recipe_GRIB_system5_era5.yml" recipe <- prepare_outputs(recipe) -- GitLab From 6873ee977513bca07d851031fbb2722286cff598 Mon Sep 17 00:00:00 2001 From: aho Date: Fri, 5 May 2023 15:14:26 +0200 Subject: [PATCH 156/388] Remove comments --- modules/Loading/GRIB/GrbLoad.R | 9 ----- modules/Loading/Loading_GRIB.R | 68 ---------------------------------- 2 files changed, 77 deletions(-) diff --git a/modules/Loading/GRIB/GrbLoad.R b/modules/Loading/GRIB/GrbLoad.R index 1163a459..ef1df0cb 100644 --- a/modules/Loading/GRIB/GrbLoad.R +++ b/modules/Loading/GRIB/GrbLoad.R @@ -4,10 +4,8 @@ # If exp, has.memb is a number; if obs, has.memb = NULL # syear_time_dim is the time attr dim of exp as the input for obs #---------------------------------------------------------------------------------- -#--------NEW-------- GrbLoad <- function (dat, time_step = 1, has.memb = NULL, syear_time_dim = NULL, regrid = NULL) { -#-------NEW_END----------- library(gribr) result <- vector('list', length = length(dat)) @@ -52,16 +50,9 @@ GrbLoad <- function (dat, time_step = 1, has.memb = NULL, syear_time_dim = NULL, # all members + ftimes: length should be memb*ftime (e.g., 51*7) ## Method 1: use grib_select and real values to filter -#--------NEW------------- memb_ftime <- grib_select(file_to_load, list(validityDate = cdo_time)) if (inherits(memb_ftime, 'gribMessage')) memb_ftime <- list(memb_ftime) -# needed_attrs <- c('Nx', 'Ny', 'Ni', 'Nj', 'pl', 'values', 'jPointsAreConsecutive') -# memb_ftime <- lapply(grib_select(file_to_load, list(validityDate = cdo_time)), -# '[', needed_attrs) -# if (inherits(memb_ftime, 'gribMessage')) memb_ftime <- list(memb_ftime) -#-----------NEW_END------------ - # ## Method 2: Calculate which messages are the desired ones # gm <- grib_get_message(file_to_load, time_step) # if (length(time_step) == 1) { diff --git a/modules/Loading/Loading_GRIB.R b/modules/Loading/Loading_GRIB.R index 619baf19..d7ad36fc 100644 --- a/modules/Loading/Loading_GRIB.R +++ b/modules/Loading/Loading_GRIB.R @@ -26,10 +26,8 @@ load_datasets <- function(recipe) { variable <- recipe$Analysis$Variables$name #'tas' store.freq <- recipe$Analysis$Variables$freq -#-----------NEW--------- regrid.method <- recipe$Analysis$Regrid$method regrid.type <- recipe$Analysis$Regrid$type -#--------NEW_END-------- # get MARS datasets dict: archive <- read_yaml("conf/archive.yml")[[recipe$Run$filesystem]] @@ -61,7 +59,6 @@ load_datasets <- function(recipe) { hcst.year <- paste0(as.numeric(hcst.inityear):as.numeric(hcst.endyear)) hcst.files <- paste0(hcst.path, variable, '_', hcst.year, hcst.sdate, '.grb') -#---------NEW-------------- if (!regrid.type %in% c('none', 'to_system')) { if (regrid.type == 'to_reference') { regrid_list <- c(method = regrid.method, type = reference_descrip$reference_grid) @@ -74,7 +71,6 @@ load_datasets <- function(recipe) { hcst <- GrbLoad(dat = as.list(hcst.files), time_step = hcst.ftime, has.memb = hcst.nmember, syear_time_dim = NULL, regrid = regrid_list) -#-----------NEW_END----------- gc() info(recipe$Run$logger, @@ -85,10 +81,8 @@ load_datasets <- function(recipe) { if (!is.null(fcst.year)) { fcst.path <- paste0(archive$src, hcst.dir) fcst.files <- paste0(fcst.path, variable, '_', fcst.year, hcst.sdate, '.grb') -#----------NEW------------ fcst <- GrbLoad(dat = as.list(fcst.files), time_step = hcst.ftime, has.memb = fcst.nmember, syear_time_dim = NULL, regrid = regrid_list) -#---------NEW_END---------- gc() } else { fcst <- NULL @@ -107,7 +101,6 @@ load_datasets <- function(recipe) { obs.files <- paste0(obs.path, variable, '_', hcst_times_strings, '.grb') -#----------NEW----------- if (!regrid.type %in% c('none', 'to_reference')) { if (regrid.type == 'to_system') { regrid_list <- c(method = regrid.method, type = exp_descrip$reference_grid) @@ -121,7 +114,6 @@ load_datasets <- function(recipe) { #NOTE: only 1 time step in each obs file obs <- GrbLoad(dat = as.list(obs.files), time_step = 1, has.memb = NULL, syear_time_dim = dim(hcst_times), regrid = regrid_list) -#--------NEW_END-------- gc() info(recipe$Run$logger, @@ -158,66 +150,6 @@ load_datasets <- function(recipe) { ################################################################################# -#------------NEW---------- -# # Regridding -# #------------------------------------------------------------------- -## regrid.method <- recipe$Analysis$Regrid$method -## regrid.type <- recipe$Analysis$Regrid$type -# if (!is.null(regrid.method) & !is.null(regrid.type)) { -# if (regrid.type == 'to_reference') { -# gridtype <- reference_descrip$reference_grid -# #NOTE: Do we need force_remap? -# tmp <- s2dv::CDORemap(hcst, lons = attr(hcst, 'longitude'), lats = attr(hcst, 'latitude'), -# grid = gridtype, method = regrid.method, force_remap = TRUE) -# hcst <- tmp$data_array -# attr(hcst, 'latitude') <- tmp$lats -# attr(hcst, 'longitude') <- tmp$lons -# -# if (!is.null(fcst)) { -# tmp <- s2dv::CDORemap(fcst, lons = attr(fcst, 'longitude'), lats = attr(fcst, 'latitude'), -# grid = gridtype, method = regrid.method, force_remap = TRUE) -# fcst <- tmp$data_array -# attr(fcst, 'latitude') <- tmp$lats -# attr(fcst, 'longitude') <- tmp$lons -# } -# -# } else if (regrid.type == 'to_system') { -##------------NEW---------- -# gridtype <- exp_descrip$reference_grid -##---------NEW_END------------ -# tmp <- s2dv::CDORemap(obs, lons = attr(obs, 'longitude'), lats = attr(obs, 'latitude'), -# grid = gridtype, method = regrid.method, force_remap = TRUE) -# obs <- tmp$data_array -# attr(obs, 'latitude') <- tmp$lats -# attr(obs, 'longitude') <- tmp$lons -# -# } else if (regrid.type != 'none') { -# gridtype <- recipe$Analysis$Regrid$type -# # hcst -# tmp <- s2dv::CDORemap(hcst, lons = attr(hcst, 'longitude'), lats = attr(hcst, 'latitude'), -# grid = gridtype, method = regrid.method, force_remap = TRUE) -# hcst <- tmp$data_array -# attr(hcst, 'latitude') <- tmp$lats -# attr(hcst, 'longitude') <- tmp$lons -# # fcst -# if (!is.null(fcst)) { -# tmp <- s2dv::CDORemap(fcst, lons = attr(fcst, 'longitude'), lats = attr(fcst, 'latitude'), -# grid = gridtype, method = regrid.method, force_remap = TRUE) -# fcst <- tmp$data_array -# attr(fcst, 'latitude') <- tmp$lats -# attr(fcst, 'longitude') <- tmp$lons -# } -# # obs -# tmp <- s2dv::CDORemap(obs, lons = attr(obs, 'longitude'), lats = attr(obs, 'latitude'), -# grid = gridtype, method = regrid.method, force_remap = TRUE) -# obs <- tmp$data_array -# attr(obs, 'latitude') <- tmp$lats -# attr(obs, 'longitude') <- tmp$lons -# } -# -# } -#----------NEW_END--------- - info(recipe$Run$logger, "========== REGRID DONE. ==========") -- GitLab From b937892c5a2c4d27971402d18b3060c568788537 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Thu, 11 May 2023 11:26:02 +0200 Subject: [PATCH 157/388] Add 'daily' option --- modules/Calibration/Calibration.R | 3 ++- modules/Loading/Loading.R | 9 ++++++--- modules/Loading/dates2load.R | 3 ++- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/modules/Calibration/Calibration.R b/modules/Calibration/Calibration.R index 899b1291..318af90b 100644 --- a/modules/Calibration/Calibration.R +++ b/modules/Calibration/Calibration.R @@ -108,7 +108,8 @@ calibrate_datasets <- function(recipe, data) { fcst_calibrated <- NULL } } - } else if (recipe$Analysis$Variables$freq == "daily_mean") { + } else if ((recipe$Analysis$Variables$freq == "daily_mean") || + (recipe$Analysis$Variables$freq == "daily")) { # Daily data calibration using Quantile Mapping if (!(method %in% c("qmap"))) { error(recipe$Run$logger, diff --git a/modules/Loading/Loading.R b/modules/Loading/Loading.R index a63f031c..e5e1d83e 100644 --- a/modules/Loading/Loading.R +++ b/modules/Loading/Loading.R @@ -120,7 +120,8 @@ load_datasets <- function(recipe) { split_multiselected_dims = split_multiselected_dims, retrieve = TRUE) - if (recipe$Analysis$Variables$freq == "daily_mean") { + if ((recipe$Analysis$Variables$freq == "daily_mean") || + (recipe$Analysis$Variables$freq == "daily")) { # Adjusts dims for daily case, could be removed if startR allows # multidim split names(dim(hcst))[which(names(dim(hcst)) == 'file_date')] <- "syear" @@ -176,7 +177,8 @@ load_datasets <- function(recipe) { split_multiselected_dims = split_multiselected_dims, retrieve = TRUE) - if (recipe$Analysis$Variables$freq == "daily_mean") { + if ((recipe$Analysis$Variables$freq == "daily_mean") || + (recipe$Analysis$Variables$freq == "daily")) { # Adjusts dims for daily case, could be removed if startR allows # multidim split names(dim(fcst))[which(names(dim(fcst)) == 'file_date')] <- "syear" @@ -242,7 +244,8 @@ load_datasets <- function(recipe) { split_multiselected_dims = TRUE, retrieve = TRUE) - } else if (store.freq == "daily_mean") { + } else if ((store.freq == "daily_mean") || + (store.freq == "daily")) { # Get year and month for file_date dates_file <- sapply(dates, format, '%Y%m') diff --git a/modules/Loading/dates2load.R b/modules/Loading/dates2load.R index 0e3613f3..03563268 100644 --- a/modules/Loading/dates2load.R +++ b/modules/Loading/dates2load.R @@ -60,7 +60,8 @@ dates2load <- function(recipe, logger) { get_timeidx <- function(sdates, ltmin, ltmax, time_freq="monthly_mean") { - if (time_freq == "daily_mean") { + if ((time_freq == "daily_mean") || + (time_freq == "daily")) { sdates <- ymd(sdates) idx_min <- sdates + months(ltmin - 1) -- GitLab From 8acaa3386c2d674dc56de5a897fd7ad83c066207 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Thu, 11 May 2023 13:13:17 +0200 Subject: [PATCH 158/388] Add 'daily' to data_summary() --- tools/data_summary.R | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tools/data_summary.R b/tools/data_summary.R index 5f532dcf..712bd825 100644 --- a/tools/data_summary.R +++ b/tools/data_summary.R @@ -8,7 +8,8 @@ data_summary <- function(data_cube, recipe) { object_name <- deparse(substitute(data_cube)) if (recipe$Analysis$Variables$freq == "monthly_mean") { date_format <- "%b %Y" - } else if (recipe$Analysis$Variables$freq == "daily_mean") { + } else if ((recipe$Analysis$Variables$freq == "daily_mean") || + (recipe$Analysis$Variables$freq == "daily")) { date_format <- "%b %d %Y" } months <- unique(format(as.Date(data_cube$attrs$Dates), format = '%B')) -- GitLab From c3c3710ffee765610a2fd92ceffe27647bca3016 Mon Sep 17 00:00:00 2001 From: eduzenli Date: Thu, 11 May 2023 16:00:02 +0200 Subject: [PATCH 159/388] edited to retrieve daily tasmax(min) data from the folder named daily, instead of daily_mean. For CERRA and system5c3s datasets --- conf/archive.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/conf/archive.yml b/conf/archive.yml index 87e9cd65..1b013c5f 100644 --- a/conf/archive.yml +++ b/conf/archive.yml @@ -5,9 +5,9 @@ archive: name: "ECMWF SEAS5" institution: "European Centre for Medium-Range Weather Forecasts" src: "exp/ecmwf/system5c3s/" + daily: {"tasmin":"/", "tasmax":"/"} daily_mean: {"tas":"_f6h/", "rsds":"_s0-24h/", "prlr":"_s0-24h/", "sfcWind":"_f6h/", - "tasmin":"_f24h/", "tasmax":"_f24h/", "ta300":"_f12h/", "ta500":"_f12h/", "ta850":"_f12h/", "g300":"_f12h/", "g500":"_f12h/", "g850":"_f12h/", "tdps":"_f6h/", "hurs":"_f6h/"} @@ -183,6 +183,7 @@ archive: name: "ECMWF CERRA" institution: "European Centre for Medium-Range Weather Forecasts" src: "recon/ecmwf/cerra/" + daily: {"tasmax":"-r2631x1113/", "tasmin":"-r2631x1113/"} daily_mean: {"hurs":"_f3h-r2631x1113/", "ps":"_f3h-r2631x1113/", "sfcWind":"_f3h-r2631x1113/", "tas":"_f3h-r2631x1113/", "winddir":"_f3h-r2631x1113/"} monthly_mean: {"hurs":"_f3h-r2631x1113/", "ps":"_f3h-r2631x1113/", "sfcWind":"_f3h-r2631x1113/", -- GitLab From fcc1362f51dc020bc0ca281bcf6b698b982f22d7 Mon Sep 17 00:00:00 2001 From: eduzenli Date: Fri, 12 May 2023 15:31:05 +0200 Subject: [PATCH 160/388] dev-point-obs updates are included --- modules/Downscaling/tmp/Intbc.R | 47 ++++++++++++++++--------- modules/Downscaling/tmp/Interpolation.R | 13 ++++++- modules/Downscaling/tmp/Intlr.R | 27 +++++++++----- 3 files changed, 61 insertions(+), 26 deletions(-) diff --git a/modules/Downscaling/tmp/Intbc.R b/modules/Downscaling/tmp/Intbc.R index 1cb558d5..a436f90e 100644 --- a/modules/Downscaling/tmp/Intbc.R +++ b/modules/Downscaling/tmp/Intbc.R @@ -82,9 +82,9 @@ CST_Intbc <- function(exp, obs, target_grid, bc_method, int_method = NULL, point res <- Intbc(exp = exp$data, obs = obs$data, exp_lats = exp$coords[[lat_dim]], exp_lons = exp$coords[[lon_dim]], obs_lats = obs$coords[[lat_dim]], obs_lons = obs$coords[[lon_dim]], target_grid = target_grid, int_method = int_method, bc_method = bc_method, points = points, - source_file = exp$attrs$source_files[1], method_point_interp = method_point_interp, - lat_dim = lat_dim, lon_dim = lon_dim, sdate_dim = sdate_dim, member_dim = member_dim, - region = region, ncores = ncores, ...) + source_file_exp = exp$attrs$source_files[1], source_file_obs = obs$attrs$source_files[1], + method_point_interp = method_point_interp, lat_dim = lat_dim, lon_dim = lon_dim, + sdate_dim = sdate_dim, member_dim = member_dim, region = region, ncores = ncores, ...) # Modify data, lat and lon in the origina s2dv_cube, adding the downscaled data exp$data <- res$data @@ -156,7 +156,9 @@ CST_Intbc <- function(exp, obs, target_grid, bc_method, int_method = NULL, point #''data' in exp and obs. Default set to "sdate". #'@param member_dim a character vector indicating the member dimension name in the element #''data' in exp and obs. Default set to "member". -#'@param source_file a character vector with a path to an example file of the exp data. +#'@param source_file_exp a character vector with a path to an example file of the exp data. +#'Only needed if the downscaling is to a point location. +#'@param source_file_obs a character vector with a path to an example file of the obs data. #'Only needed if the downscaling is to a point location. #'@param region a numeric vector indicating the borders of the region defined in obs. #'It consists of four elements in this order: lonmin, lonmax, latmin, latmax. lonmin refers @@ -187,7 +189,8 @@ CST_Intbc <- function(exp, obs, target_grid, bc_method, int_method = NULL, point #'@export Intbc <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, target_grid, bc_method, int_method = NULL, points = NULL, method_point_interp = NULL, lat_dim = "lat", lon_dim = "lon", sdate_dim = "sdate", - time_dim = "time", member_dim = "member", source_file = NULL, region = NULL, ncores = NULL, ...) { + time_dim = "time", member_dim = "member", source_file_exp = NULL, source_file_obs = NULL, + region = NULL, ncores = NULL, ...) { if (!inherits(bc_method, 'character')) { stop("Parameter 'bc_method' must be of the class 'character'") @@ -209,14 +212,13 @@ Intbc <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, target_grid, stop("Parameter 'member_dim' must be of the class 'character'") } - # Do not allow synonims for lat (latitude), lon (longitude) and time (sdate) dimension names - if (is.na(match(lon_dim, names(dim(exp)))) | is.na(match(lon_dim, names(dim(obs))))) { - stop("Missing longitude dimension in 'exp' and/or 'obs', or does not match the parameter ", + if (is.na(match(lon_dim, names(dim(exp))))) { + stop("Missing longitude dimension in 'exp', or does not match the parameter ", "'lon_dim'") } - if (is.na(match(lat_dim, names(dim(exp)))) | is.na(match(lat_dim, names(dim(obs))))) { - stop("Missing latitude dimension in 'exp' and/or 'obs', or does not match the parameter ", + if (is.na(match(lat_dim, names(dim(exp))))) { + stop("Missing latitude dimension in 'exp', or does not match the parameter ", "'lat_dim'") } @@ -235,9 +237,20 @@ Intbc <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, target_grid, "Accepted methods are 'simple_bias', 'calibration', 'quantile_mapping'. The abbreviations ", "'sbc', 'cal', 'qm' can also be used.") } + + # When observations are pointwise + if (!is.null(points) & !is.na(match("location", names(dim(obs))))) { + point_obs <- T + # dimension aux in obs is needed + if (is.na(match("aux", names(dim(obs))))) { + obs <- InsertDim(obs, posdim = 1, lendim = 1, name = "aux") + } + } else { + point_obs <- F + } - if (!is.null(points) & is.null(source_file)) { - stop("No source file found. Source file must be provided in the parameter 'source_file'.") + if (!is.null(points) & (is.null(source_file_exp))) { + stop("No source file found. Source file must be provided in the parameter 'source_file_exp'.") } if (!is.null(points) & is.null(method_point_interp)) { @@ -260,18 +273,18 @@ Intbc <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, target_grid, } exp_interpolated <- Interpolation(exp = exp, lats = exp_lats, lons = exp_lons, target_grid = target_grid, - method_remap = int_method, points = points, source_file = source_file, + method_remap = int_method, points = points, source_file = source_file_exp, lat_dim = lat_dim, lon_dim = lon_dim, method_point_interp = method_point_interp, region = region, ncores = ncores) # If after interpolating 'exp' data the coordinates do not match, the obs data is interpolated to # the same grid to force the matching if ((!.check_coords(lat1 = exp_interpolated$lat, lat2 = obs_lats, - lon1 = exp_interpolated$lon, lon2 = obs_lons)) | !is.null(points)) { + lon1 = exp_interpolated$lon, lon2 = obs_lons)) | !(point_obs)) { obs_interpolated <- Interpolation(exp = obs, lats = obs_lats, lons = obs_lons, target_grid = target_grid, - method_remap = int_method, points = points, source_file = source_file, - lat_dim = lat_dim, lon_dim = lon_dim, - method_point_interp = method_point_interp, region = region, ncores = ncores) + method_remap = int_method, points = points, source_file = source_file_obs, + lat_dim = lat_dim, lon_dim = lon_dim, method_point_interp = method_point_interp, + region = region, ncores = ncores) obs_ref <- obs_interpolated$data } else { obs_ref <- obs diff --git a/modules/Downscaling/tmp/Interpolation.R b/modules/Downscaling/tmp/Interpolation.R index e939e0c3..4cf0c1ed 100644 --- a/modules/Downscaling/tmp/Interpolation.R +++ b/modules/Downscaling/tmp/Interpolation.R @@ -688,7 +688,18 @@ Interpolation <- function(exp, lats, lons, points = NULL, source_file = NULL, me #----------------- is <- weights.df$i js <- weights.df$j - + + #----------------- + # If any of the indices happens to be 0, + # change it by 1 but give a warning + #----------------- + if (any(is == 0) | any(js == 0)) { + warning("Is the point location in the border of the region? The code can run but ", + "results will be less accurate than those obtained with a larger region." ) + is[is == 0] <- 1 + js[js == 0] <- 1 + } + #----------------- # Get indices of original is and js in unique(is),unique(js) that were requested #----------------- diff --git a/modules/Downscaling/tmp/Intlr.R b/modules/Downscaling/tmp/Intlr.R index b4b8a75e..f31b7d3b 100644 --- a/modules/Downscaling/tmp/Intlr.R +++ b/modules/Downscaling/tmp/Intlr.R @@ -259,13 +259,13 @@ Intlr <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, lr_method, t stop("Parameter 'large_scale_predictor_dimname' must be of the class 'character'") } - if (is.na(match(lon_dim, names(dim(exp)))) | is.na(match(lon_dim, names(dim(obs))))) { - stop("Missing longitude dimension in 'exp' and/or 'obs', or does not match the parameter ", + if (is.na(match(lon_dim, names(dim(exp))))) { + stop("Missing longitude dimension in 'exp', or does not match the parameter ", "'lon_dim'") } - if (is.na(match(lat_dim, names(dim(exp)))) | is.na(match(lat_dim, names(dim(obs))))) { - stop("Missing latitude dimension in 'exp' and/or 'obs', or does not match the parameter ", + if (is.na(match(lat_dim, names(dim(exp))))) { + stop("Missing latitude dimension in 'exp', or does not match the parameter ", "'lat_dim'") } @@ -273,10 +273,21 @@ Intlr <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, lr_method, t stop("Missing start date dimension in 'exp' and/or 'obs', or does not match the parameter ", "'sdate_dim'") } + + # When observations are pointwise + if (!is.null(points) & !is.na(match("location", names(dim(obs))))) { + point_obs <- T + # dimension aux in obs is needed + if (is.na(match("aux", names(dim(obs))))) { + obs <- InsertDim(obs, posdim = 1, lendim = 1, name = "aux") + } + } else { + point_obs <- F + } - if (!is.null(points) & (is.null(source_file_exp) | is.null(source_file_obs))) { - stop("No source files found. Source files for exp and obs must be provided in the parameters ", - "'source_file_exp' and 'source_file_obs', respectively.") + if (!is.null(points) & is.null(source_file_exp)) { + stop("No source file found. Source file for exp must be provided in the parameter ", + "'source_file_exp'.") } if (!is.null(points) & is.null(method_point_interp)) { @@ -344,7 +355,7 @@ Intlr <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, lr_method, t # If after interpolating 'exp' data the coordinates do not match, the obs data is interpolated to # the same grid to force the matching if ((!.check_coords(lat1 = exp_interpolated$lat, lat2 = obs_lats, - lon1 = exp_interpolated$lon, lon2 = obs_lons)) | !is.null(points)) { + lon1 = exp_interpolated$lon, lon2 = obs_lons)) | !(point_obs)) { obs_interpolated <- Interpolation(exp = obs, lats = obs_lats, lons = obs_lons, target_grid = target_grid, points = points, method_point_interp = method_point_interp, source_file = source_file_obs, lat_dim = lat_dim, lon_dim = lon_dim, -- GitLab From 407561deb7994e6a2b2a36f8909bde9f56820219 Mon Sep 17 00:00:00 2001 From: eduzenli Date: Fri, 12 May 2023 15:31:27 +0200 Subject: [PATCH 161/388] dev-point-obs and dev-logreg updates are included --- modules/Downscaling/tmp/LogisticReg.R | 98 ++++++++++++++------------- 1 file changed, 51 insertions(+), 47 deletions(-) diff --git a/modules/Downscaling/tmp/LogisticReg.R b/modules/Downscaling/tmp/LogisticReg.R index f569610f..60681b97 100644 --- a/modules/Downscaling/tmp/LogisticReg.R +++ b/modules/Downscaling/tmp/LogisticReg.R @@ -53,8 +53,6 @@ #''data' in exp and obs. Default set to "sdate". #'@param member_dim a character vector indicating the member dimension name in the element #''data' in exp and obs. Default set to "member". -#'@param source_file a character vector with a path to an example file of the exp data. -#'Only needed if the downscaling is to a point location. #'@param region a numeric vector indicating the borders of the region defined in obs. #'It consists of four elements in this order: lonmin, lonmax, latmin, latmax. lonmin refers #'to the left border, while lonmax refers to the right border. latmin indicates the lower @@ -108,8 +106,8 @@ CST_LogisticReg <- function(exp, obs, target_grid, int_method = NULL, log_reg_me int_method = int_method, log_reg_method = log_reg_method, points = points, method_point_interp = method_point_interp, lat_dim = lat_dim, lon_dim = lon_dim, sdate_dim = sdate_dim, member_dim = member_dim, - source_file = exp$attrs$source_files[1], region = region, loocv = loocv, - ncores = ncores) + source_file_exp = exp$attrs$source_files[1], source_file_obs = obs$attrs$source_files[1], + region = region, loocv = loocv, ncores = ncores) # Modify data, lat and lon in the origina s2dv_cube, adding the downscaled data exp$data <- res$data @@ -189,7 +187,9 @@ CST_LogisticReg <- function(exp, obs, target_grid, int_method = NULL, log_reg_me #''data' in exp and obs. Default set to "sdate". #'@param member_dim a character vector indicating the member dimension name in the element #''data' in exp and obs. Default set to "member". -#'@param source_file a character vector with a path to an example file of the exp data. +#'@param source_file_exp a character vector with a path to an example file of the exp data. +#'Only needed if the downscaling is to a point location. +#'@param source_file_obs a character vector with a path to an example file of the obs data. #'Only needed if the downscaling is to a point location. #'@param region a numeric vector indicating the borders of the region defined in obs. #'It consists of four elements in this order: lonmin, lonmax, latmin, latmax. lonmin refers @@ -224,10 +224,10 @@ CST_LogisticReg <- function(exp, obs, target_grid, int_method = NULL, log_reg_me #'probs_cat = c(1/3, 2/3)) #'@export LogisticReg <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, target_grid, - int_method = NULL, log_reg_method = "ens_mean", probs_cat = c(1/3,2/3), + int_method = NULL, log_reg_method = "ens_mean", probs_cat = c(1/3,2/3), return_most_likely_cat = FALSE, points = NULL, method_point_interp = NULL, lat_dim = "lat", lon_dim = "lon", sdate_dim = "sdate", member_dim = "member", - source_file = NULL, region = NULL, loocv = FALSE, ncores = NULL) { + source_file_exp = NULL, source_file_obs = NULL, region = NULL, loocv = FALSE, ncores = NULL) { #----------------------------------- # Checkings @@ -260,8 +260,12 @@ LogisticReg <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, target stop("Parameter 'member_dim' must be of the class 'character'") } - if (!is.null(source_file) & !inherits(source_file, 'character')) { - stop("Parameter 'source_file' must be of the class 'character'") + if (!is.null(source_file_exp) & !inherits(source_file_exp, 'character')) { + stop("Parameter 'source_file_exp' must be of the class 'character'") + } + + if (!is.null(source_file_obs) & !inherits(source_file_obs, 'character')) { + stop("Parameter 'source_file_obs' must be of the class 'character'") } if (!inherits(loocv, 'logical')) { @@ -288,8 +292,19 @@ LogisticReg <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, target "'member_dim'") } - if (!is.null(points) & (is.null(source_file))) { - stop("No source files found. One source file for exp must be provided in the parameter 'source_file'.") + # When observations are pointwise + if (!is.null(points) & !is.na(match("location", names(dim(obs))))) { + point_obs <- T + # dimension aux in obs is needed + if (is.na(match("aux", names(dim(obs))))) { + obs <- InsertDim(obs, posdim = 1, lendim = 1, name = "aux") + } + } else { + point_obs <- F + } + + if (!is.null(points) & (is.null(source_file_exp))) { + stop("No source file found. Source file must be provided in the parameter 'source_file_exp'.") } if (!is.null(points) & is.null(method_point_interp)) { @@ -324,13 +339,14 @@ LogisticReg <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, target } exp_interpolated <- Interpolation(exp = exp, lats = exp_lats, lons = exp_lons, target_grid = target_grid, - method_remap = int_method, points = points, source_file = source_file, + method_remap = int_method, points = points, source_file = source_file_exp, lat_dim = lat_dim, lon_dim = lon_dim, method_point_interp = method_point_interp, region = region, ncores = ncores) # compute ensemble mean anomalies if (log_reg_method == "ens_mean") { - predictor <- .get_ens_mean_anom(obj_ens = exp_interpolated$data, member_dim = member_dim, sdate_dim = sdate_dim, ncores = ncores) + predictor <- .get_ens_mean_anom(obj_ens = exp_interpolated$data, member_dim = member_dim, sdate_dim = sdate_dim, + ncores = ncores) target_dims_predictor <- sdate_dim } @@ -355,24 +371,29 @@ LogisticReg <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, target # If after interpolating 'exp' data the coordinates do not match, the obs data is interpolated to # the same grid to force the matching if ((!.check_coords(lat1 = exp_interpolated$lat, lat2 = obs_lats, - lon1 = exp_interpolated$lon, lon2 = obs_lons)) | !is.null(points)) { + lon1 = exp_interpolated$lon, lon2 = obs_lons)) | !(point_obs)) { obs_interpolated <- Interpolation(exp = obs, lats = obs_lats, lons = obs_lons, target_grid = target_grid, - method_remap = int_method, points = points, source_file = source_file, - lat_dim = lat_dim, lon_dim = lon_dim, - method_point_interp = method_point_interp, region = region, ncores = ncores) + method_remap = int_method, points = points, source_file = source_file_obs, + lat_dim = lat_dim, lon_dim = lon_dim, method_point_interp = method_point_interp, + region = region, ncores = ncores) obs_ref <- obs_interpolated$data } else { obs_ref <- obs } # convert observations to categorical predictands - obs_cat <- Apply(obs_ref, target_dims = sdate_dim, function(x) { - terc <- convert2prob(as.vector(x), prob = probs_cat) - apply(terc, 1, function(r) which (r == 1))}, - output_dims = sdate_dim, ncores = ncores)$output1 + +obs_cat <- Apply(obs_ref, target_dims = sdate_dim, function(x) { + if (!any(!is.na(x))) { + rep(NA,length(x)) + } else { + terc <- convert2prob(as.vector(x), prob = probs_cat) + apply(terc, 1, function(r) which (r == 1))}}, + output_dims = sdate_dim, ncores = ncores)$output1 + res <- Apply(list(predictor, obs_cat), target_dims = list(target_dims_predictor, sdate_dim), fun = function(x, y) - .log_reg(x = x, y = y, loocv = loocv), output_dims = c(sdate_dim, "category"), ncores = ncores)$output1 + .log_reg(x = x, y = y, loocv = loocv,probs_cat=probs_cat), output_dims = c(sdate_dim, "category"), ncores = ncores)$output1 if (return_most_likely_cat) { res <- Apply(res, target_dims = c(sdate_dim, "category"), .most_likely_category, @@ -437,10 +458,11 @@ LogisticReg <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, target tmp_df <- data.frame(x = x, y = y) # if the data is all NA, force return return NA - if (all(is.na(tmp_df)) | (sum(apply(tmp_df, 2, function(x) !all(is.na(x)))) == 1)) { + if (all(is.na(tmp_df)) | (sum(apply(tmp_df, 2, function(x) !all(is.na(x)))) == 1) | all(is.na(tmp_df$y))) { - n <- nrow(tmp_df) - res <- matrix(NA, nrow = n, ncol = length(unique(tmp_df$y))) + n1 <- nrow(tmp_df) + n2<- length(probs_cat)+1 + res <- matrix(NA, nrow = n1, ncol = n2) } else { # training @@ -464,11 +486,11 @@ LogisticReg <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, target if (loocv) { - lm1 <- lapply(1:nrow(df), function(j) ifelse(length(unique(df[-j,]$y))==1,NA,return(multinom(y ~ ., data = df[ -j, ])))) ## if all the observed categories are the same for the corresponding loocv step, assign NA to the relevant lm1 element. + lm1 <- lapply(1:nrow(df), function(j) multinom(y ~ ., data = df[ -j, ])) } else { - lm1 <- ifelse(length(unique(df$y))==1,list(NA),list(multinom(y ~ ., data = df))) + lm1 <- list(multinom(y ~ ., data = df)) } @@ -489,31 +511,20 @@ pred_lr <- function(df, lm1, loocv,probs_cat) { pred_vals_ls <-list() for (j in 1:nrow(df)) { - if(length(unique(df[-j,]$y))==1) - { - pred_vals_ls[[j]] <-NA ## if all the observed categories are the same for the corresponding loocv step, assign NA as predicted class (we need this step for the two-class cases. predict.multinom function provides the probability for the second category for two-class examples.we can obtain the prob of the first categort by 1-prob of second category) - } else{ pred_vals_ls[[j]] <- predict(lm1[[j]], df[j,], type = "probs") } - } pred_vals <- laply(pred_vals_ls, .fun = as.array) if( length(probs_cat)+1==2) { - - if (any(is.na(pred_vals))) ### if all the observed categories are the same for the corresponding loocv step, assign 100% probability to the observed categories for the relevant prediction. - { - ifelse(names(which.max(table(df$y)))==1,pred_vals[is.na(pred_vals)]<-0, - pred_vals[is.na(pred_vals)]<-1) - } pred_vals_dum<-array(NA,dim=c(nrow(df),2)) pred_vals_dum[,2]<-pred_vals pred_vals_dum[,1]<-1-pred_vals pred_vals<-pred_vals_dum colnames(pred_vals)<-c(1,2) - } - + } + } else { # type = class, probs @@ -523,13 +534,6 @@ pred_lr <- function(df, lm1, loocv,probs_cat) { if( length(probs_cat)+1==2) { - - if (any(is.na(pred_vals))) ### if all the observed categories are the same for the corresponding loocv step, assign 100% probability to the observed categories for the relevant prediction. - { - ifelse(names(which.max(table(df$y)))==1,pred_vals[is.na(pred_vals)]<-0, - pred_vals[is.na(pred_vals)]<-1) - } - pred_vals_dum<-array(NA,dim=c(nrow(df),2)) pred_vals_dum[,2]<-pred_vals pred_vals_dum[,1]<-1-pred_vals -- GitLab From 5c58c890a9e127db073dc2a07c2dde527662b3c7 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Tue, 16 May 2023 09:20:01 +0200 Subject: [PATCH 162/388] Create function to print memory usage details when loglevel is DEBUG --- modules/Loading/Loading_GRIB.R | 3 +++ recipes/tests/recipe_autosubmit_marstest.yml | 6 +++--- tools/Utils.R | 13 +++++++++++++ tools/libs.R | 2 ++ 4 files changed, 21 insertions(+), 3 deletions(-) create mode 100644 tools/Utils.R diff --git a/modules/Loading/Loading_GRIB.R b/modules/Loading/Loading_GRIB.R index d7ad36fc..3c82172a 100644 --- a/modules/Loading/Loading_GRIB.R +++ b/modules/Loading/Loading_GRIB.R @@ -69,6 +69,7 @@ load_datasets <- function(recipe) { regrid_list <- NULL } + .log_memory_usage(recipe$Run$logger, when = "Before loading the data") hcst <- GrbLoad(dat = as.list(hcst.files), time_step = hcst.ftime, has.memb = hcst.nmember, syear_time_dim = NULL, regrid = regrid_list) gc() @@ -116,6 +117,7 @@ load_datasets <- function(recipe) { syear_time_dim = dim(hcst_times), regrid = regrid_list) gc() + .log_memory_usage(recipe$Run$logger, when = "After loading the data") info(recipe$Run$logger, "========== OBS LOADED. ==========") @@ -269,6 +271,7 @@ load_datasets <- function(recipe) { # ..$ source_files: chr [1:2] "/esarchive/scratch/aho/tmp/GRIB/GRIB_system5_tas_CORRECTED/tas_20001101.grb" "/esarchive/scratch/aho/tmp/GRIB/GRIB_system5_tas_CORRECTED/tas_20011101.grb" # ..$ gribEdition : num 1 # - attr(*, "class")= chr "s2dv_cube" + .log_memory_usage(recipe$Run$logger, when = "After regridding") info(recipe$Run$logger, "##### GRIB DATA LOADED SUCCESSFULLY #####") diff --git a/recipes/tests/recipe_autosubmit_marstest.yml b/recipes/tests/recipe_autosubmit_marstest.yml index aaec7ed1..27131e3b 100644 --- a/recipes/tests/recipe_autosubmit_marstest.yml +++ b/recipes/tests/recipe_autosubmit_marstest.yml @@ -23,9 +23,9 @@ Analysis: Time: sdate: # list, split - '1101' - fcst_year: '2020' # list, don't split, handled internally + fcst_year: # list, don't split, handled internally hcst_start: '2000' # single option - hcst_end: '2003' # single option + hcst_end: '2020' # single option ftime_min: 1 # single option ftime_max: 3 # single option Region: # multiple lists, Add region name if there is more than 1 region @@ -53,7 +53,7 @@ Analysis: ## Run CONFIGURATION ################################################################################ Run: - Loglevel: INFO + Loglevel: DEBUG Terminal: yes filesystem: mars output_dir: /esarchive/scratch/vagudets/auto-s2s-outputs/ diff --git a/tools/Utils.R b/tools/Utils.R new file mode 100644 index 00000000..c0acf374 --- /dev/null +++ b/tools/Utils.R @@ -0,0 +1,13 @@ +## TODO: Write header +## TODO: Add if 'DEBUG' +.log_memory_usage <- function(logger, when) { + debug(logger, paste0(when, ":")) + mem_info <- capture.output(memuse::Sys.meminfo()) + for (i in mem_info) { + debug(recipe$Run$logger, i) + } + proc_mem <- capture.output(memuse::Sys.procmem()) + for (i in proc_mem) { + debug(recipe$Run$logger, i) + } +} diff --git a/tools/libs.R b/tools/libs.R index 67936799..d3933064 100644 --- a/tools/libs.R +++ b/tools/libs.R @@ -18,6 +18,7 @@ library(configr) # # library(parallel) library(pryr) # To check mem usage. +library(memuse) #setwd("/esarchive/scratch/nperez/git/S2S4E-backend-BSC/data-analysis/") # source('export_2_nc.R') # source('S2S/s2s.filefmt.R') @@ -36,4 +37,5 @@ source("tools/data_summary.R") source("tools/read_atomic_recipe.R") source("tools/write_autosubmit_conf.R") source("tools/get_archive.R") +source("tools/Utils.R") # source("tools/add_dims.R") # Not sure if necessary yet -- GitLab From 7446cb795e6defa05c1cd6add54bc9e6fab26774 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Wed, 17 May 2023 16:49:48 +0200 Subject: [PATCH 163/388] Add debug memory usage logs to the modules --- modules/Anomalies/Anomalies.R | 1 + modules/Calibration/Calibration.R | 1 + modules/Loading/Loading.R | 1 + modules/Loading/Loading_decadal.R | 2 +- modules/Skill/Skill.R | 3 +++ 5 files changed, 7 insertions(+), 1 deletion(-) diff --git a/modules/Anomalies/Anomalies.R b/modules/Anomalies/Anomalies.R index 06f955a8..59a825ce 100644 --- a/modules/Anomalies/Anomalies.R +++ b/modules/Anomalies/Anomalies.R @@ -95,6 +95,7 @@ compute_anomalies <- function(recipe, data) { } ## TODO: Return fcst full value? + .log_memory_usage(recipe$Run$logger, "After computing anomalies") return(list(hcst = data$hcst, obs = data$obs, fcst = data$fcst, hcst.full_val = hcst_fullvalue, obs.full_val = obs_fullvalue)) diff --git a/modules/Calibration/Calibration.R b/modules/Calibration/Calibration.R index 899b1291..091f8a1d 100644 --- a/modules/Calibration/Calibration.R +++ b/modules/Calibration/Calibration.R @@ -163,6 +163,7 @@ calibrate_datasets <- function(recipe, data) { } } info(recipe$Run$logger, CALIB_MSG) + .log_memory_usage(recipe$Run$logger, "After calibration") ## TODO: Sort out returns return_list <- list(hcst = hcst_calibrated, obs = data$obs, diff --git a/modules/Loading/Loading.R b/modules/Loading/Loading.R index 46fa00fd..f2705fd0 100644 --- a/modules/Loading/Loading.R +++ b/modules/Loading/Loading.R @@ -418,6 +418,7 @@ load_datasets <- function(recipe) { ############################################################################ ############################################################################ + .log_memory_usage(recipe$Run$logger, when = "After loading") return(list(hcst = hcst, fcst = fcst, obs = obs)) diff --git a/modules/Loading/Loading_decadal.R b/modules/Loading/Loading_decadal.R index b9a145e3..4f6b6b6e 100644 --- a/modules/Loading/Loading_decadal.R +++ b/modules/Loading/Loading_decadal.R @@ -517,7 +517,7 @@ load_datasets <- function(recipe) { info(recipe$Run$logger, "##### DATA LOADING COMPLETED SUCCESSFULLY #####") - + .log_memory_usage(recipe$Run$logger, when = "After loading") return(list(hcst = hcst, fcst = fcst, obs = obs)) } diff --git a/modules/Skill/Skill.R b/modules/Skill/Skill.R index d83d92c1..dcc6436f 100644 --- a/modules/Skill/Skill.R +++ b/modules/Skill/Skill.R @@ -277,6 +277,7 @@ compute_skill_metrics <- function(recipe, data) { } } info(recipe$Run$logger, "##### SKILL METRIC COMPUTATION COMPLETE #####") + .log_memory_usage(recipe$Run$logger, when = "After skill metric computation") return(skill_metrics) } @@ -379,6 +380,8 @@ compute_probabilities <- function(recipe, data) { info(recipe$Run$logger, "##### PERCENTILES AND PROBABILITY CATEGORIES COMPUTED #####") + .log_memory_usage(recipe$Run$logger, when = "After anomaly computation") + return(results) } } -- GitLab From 3b7b04754686de9fb1f49fc187ae2b2bf49bb330 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Wed, 17 May 2023 16:49:56 +0200 Subject: [PATCH 164/388] update recipe --- recipes/tests/recipe_autosubmit_marstest.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/recipes/tests/recipe_autosubmit_marstest.yml b/recipes/tests/recipe_autosubmit_marstest.yml index 27131e3b..d9d6660f 100644 --- a/recipes/tests/recipe_autosubmit_marstest.yml +++ b/recipes/tests/recipe_autosubmit_marstest.yml @@ -25,9 +25,9 @@ Analysis: - '1101' fcst_year: # list, don't split, handled internally hcst_start: '2000' # single option - hcst_end: '2020' # single option + hcst_end: '2019' # single option ftime_min: 1 # single option - ftime_max: 3 # single option + ftime_max: 4 # single option Region: # multiple lists, Add region name if there is more than 1 region - {latmin: -90, latmax: 90, lonmin: 0, lonmax: 360} Regrid: @@ -64,7 +64,7 @@ Run: script: /esarchive/scratch/vagudets/repos/auto-s2s/modules/test_parallel_GRIB.R # path to the script to run expid: a5ta ## if left empty, create new exp? hpc_user: bsc32762 # your hpc username - wallclock: 04:00 # hh:mm + wallclock: 02:30 # hh:mm processors_per_job: 14 # use ncores parameter? platform: nord3v2 # make this constant? email_notifications: yes # enable/disable email notifications -- GitLab From 41a2c80d59b1a9e827f805d53ffbb86bdd22ba54 Mon Sep 17 00:00:00 2001 From: vagudets Date: Tue, 30 May 2023 12:21:21 +0200 Subject: [PATCH 165/388] Load and process multiple variables in one single atomic recipe --- conf/archive.yml | 22 +- conf/archive_decadal.yml | 10 +- conf/variable-dictionary.yml | 8 + modules/Anomalies/Anomalies.R | 15 +- modules/Loading/Dev_Loading.R | 501 ++++++++++++++++++ modules/Loading/Loading.R | 195 ++++--- modules/Loading/Loading_decadal.R | 37 +- modules/Loading/R/mask_tas_tos.R | 84 +++ modules/Loading/helper_loading_decadal.R | 26 +- modules/Saving/R/Utils.R | 2 +- modules/Saving/R/get_dir.R | 37 +- modules/Saving/R/save_corr.R | 104 ++-- modules/Saving/R/save_forecast.R | 158 +++--- modules/Saving/R/save_metrics.R | 104 ++-- modules/Saving/R/save_observations.R | 176 +++--- modules/Saving/R/save_percentiles.R | 92 ++-- modules/Saving/R/save_probabilities.R | 131 ++--- modules/Saving/Saving.R | 145 ++--- modules/Skill/Skill.R | 31 +- modules/Visualization/R/plot_ensemble_mean.R | 128 +++-- .../R/plot_most_likely_terciles_map.R | 87 ++- modules/Visualization/R/plot_skill_metrics.R | 225 ++++---- modules/Visualization/Visualization.R | 13 +- modules/test_seasonal.R | 7 +- .../atomic_recipes/recipe_seasonal-tests.yml | 2 +- .../atomic_recipes/recipe_test_multivar.yml | 53 ++ .../recipe_test_multivar_decadal.yml | 57 ++ ...recipe_test_multivar_decadal_multipath.yml | 57 ++ .../recipe_test_multivar_nadia.yml | 49 ++ recipes/recipe_scorecards_s2s-suite.yml | 50 ++ tas-tos_scorecards_data_loading.R | 63 +++ tests/testthat/test-decadal_monthly_1.R | 14 +- tests/testthat/test-decadal_monthly_2.R | 24 +- tests/testthat/test-decadal_monthly_3.R | 16 +- tests/testthat/test-seasonal_daily.R | 4 +- tests/testthat/test-seasonal_monthly.R | 8 +- tools/data_summary.R | 25 +- 37 files changed, 1882 insertions(+), 878 deletions(-) create mode 100644 modules/Loading/Dev_Loading.R create mode 100644 modules/Loading/R/mask_tas_tos.R create mode 100644 recipes/atomic_recipes/recipe_test_multivar.yml create mode 100644 recipes/atomic_recipes/recipe_test_multivar_decadal.yml create mode 100644 recipes/atomic_recipes/recipe_test_multivar_decadal_multipath.yml create mode 100644 recipes/atomic_recipes/recipe_test_multivar_nadia.yml create mode 100644 recipes/recipe_scorecards_s2s-suite.yml create mode 100644 tas-tos_scorecards_data_loading.R diff --git a/conf/archive.yml b/conf/archive.yml index a982b84f..88872cb8 100644 --- a/conf/archive.yml +++ b/conf/archive.yml @@ -16,7 +16,7 @@ esarchive: "tasmin":"_f24h/", "tasmax":"_f24h/", "ta300":"_f12h/", "ta500":"_f12h/", "ta850":"_f12h/", "g300":"_f12h/", "g500":"_f12h/", "g850":"_f12h/", - "tdps":"_f6h/"} + "tdps":"_f6h/", "tos":"_f6h/"} nmember: fcst: 51 hcst: 25 @@ -156,7 +156,9 @@ esarchive: "tasmin":"_f1h-r1440x721cds/", "ta300":"_f1h-r1440x721cds/", "ta500":"_f1h-r1440x721cds/", - "ta850":"_f1h-r1440x721cds/"} + "ta850":"_f1h-r1440x721cds/", + "tos":"_f1h-r1440x721cds" + } calendar: "standard" reference_grid: "/esarchive/recon/ecmwf/era5/monthly_mean/tas_f1h-r1440x721cds/tas_201805.nc" ERA5-Land: @@ -197,6 +199,22 @@ esarchive: monthly_mean: {"prlr":"_f6h-r2631x1113/"} calendar: "proleptic_gregorian" reference_grid: "/esarchive/recon/ecmwf/cerraland/monthly_mean/prlr_f6h-r2631x1113/prlr_200412.nc" + HadCRUT5: + name: "HadCRUT5" + institution: "Met Office" + src: "obs/ukmo/hadcrut_v5.0_analysis/" + monthly_mean: {"tasanomaly":"/"} + calendar: "proleptic_gregorian" + reference_grid: "/esarchive/obs/ukmo/hadcrut_v5.0_analysis/monthly_mean/tasanomaly/tasanomaly_202001.nc" + BEST: + name: "BEST" + institution: "European Centre for Medium-Range Weather Forecasts" + src: "obs/berkeleyearth/berkeleyearth/" + daily_mean: {"tas":"/"} + monthly_mean: {"tas":"/"} + calendar: "proleptic_gregorian" + reference_grid: "/esarchive/obs/berkeleyearth/berkeleyearth/monthly_mean/tas/tas_201805.nc" + diff --git a/conf/archive_decadal.yml b/conf/archive_decadal.yml index 91637024..2e0a1b29 100644 --- a/conf/archive_decadal.yml +++ b/conf/archive_decadal.yml @@ -91,9 +91,9 @@ esarchive: first_dcppB_syear: 2019 monthly_mean: table: {"tas":"Amon", "pr":"Amon", "psl":"Amon", "ts":"Amon", "tos":"Omon"} - grid: {"tas":"gr", "psl":"gr", "pr":"gr", "ts":"gr", "tos":"gr"} + grid: {"tas":"gn", "psl":"gr", "pr":"gr", "ts":"gr", "tos":"gr"} #version depends on member and variable - version: {"tas":"v20200316", "psl":"v20200316", "pr":"v20200316", "ts":"v20200316", "tos":"v20200417"} + version: {"tas":"v20200417", "psl":"v20200316", "pr":"v20200316", "ts":"v20200316", "tos":"v20200417"} daily_mean: grid: {"tas":"gn"} version: {"tasmin":"v20200101", "tasmax":"v20200101", "pr":"v20200417"} @@ -132,10 +132,10 @@ esarchive: fcst: "exp/canesm5/cmip6-dcppB-forecast_i1p2/original_files/cmorfiles/DCPP/CCCma/CanESM5/dcppB-forecast/" first_dcppB_syear: 2020 monthly_mean: - table: {"tas":"Amon", "pr":"Amon", "psl":"Amon", "tasmin":"Amon", "tasmax":"Amon"} + table: {"tas":"Amon", "pr":"Amon", "psl":"Amon", "tasmin":"Amon", "tasmax":"Amon", "tos":"Omon"} - grid: {"tas":"gn", "pr":"gn", "psl":"gn", "tasmin":"gn", "tasmax":"gn"} - version: {"tas":"v20190429", "pr":"v20190429", "psl":"v20190429", "tasmin":"v20190429", "tasmax":"v20190429"} + grid: {"tas":"gn", "pr":"gn", "psl":"gn", "tasmin":"gn", "tasmax":"gn", "tos":"gr"} + version: {"tas":"v20190429", "pr":"v20190429", "psl":"v20190429", "tasmin":"v20190429", "tasmax":"v20190429", "tos":"v20190429"} daily_mean: grid: {"pr":"gn", "tas":"gn", "tasmax":"gn", "tasmin":"gn"} version: {"pr":"v20190429", "tas":"v20190429", "tasmax":"v20190429", "tasmin":"v20190429"} diff --git a/conf/variable-dictionary.yml b/conf/variable-dictionary.yml index 917abc64..0bfbffe0 100644 --- a/conf/variable-dictionary.yml +++ b/conf/variable-dictionary.yml @@ -204,6 +204,14 @@ vars: long_name: "Surface Upward Sensible Heat Flux" standard_name: "surface_upward_sensible_heat_flux" accum: no +## Adding new variable + tasanomaly: + units: "K" + long_name: "Near-Surface Air Temperature Anomaly" + standard_name: "air_temperature_anom" + accum: no + + # Coordinates coords: diff --git a/modules/Anomalies/Anomalies.R b/modules/Anomalies/Anomalies.R index 97ce1f51..28092625 100644 --- a/modules/Anomalies/Anomalies.R +++ b/modules/Anomalies/Anomalies.R @@ -18,7 +18,7 @@ compute_anomalies <- function(recipe, data) { cross <- FALSE cross_msg <- "without" } - original_dims <- dim(data$hcst$data) + original_dims <- data$hcst$dim # Compute anomalies anom <- CST_Anomaly(data$hcst, data$obs, @@ -45,10 +45,10 @@ compute_anomalies <- function(recipe, data) { # Change variable metadata for (var in data$hcst$attrs$Variable$varName) { # Change hcst longname - data$hcst$attrs$Variable$variables[[var]]$long_name <- + data$hcst$attrs$Variable$metadata[[var]]$long_name <- paste(data$hcst$attrs$Variable$metadata[[var]]$long_name, "anomaly") # Change obs longname - data$obs$attrs$Variable$variables[[var]]$long_name <- + data$obs$attrs$Variable$metadata[[var]]$long_name <- paste(data$obs$attrs$Variable$metadata[[var]]$long_name, "anomaly") } # Compute forecast anomaly field @@ -63,10 +63,13 @@ compute_anomalies <- function(recipe, data) { ncores = recipe$Analysis$ncores) clim_hcst <- InsertDim(clim$clim_exp, posdim = 1, lendim = 1, name = "syear") + # Store original dimensions dims <- dim(clim_hcst) - clim_hcst <- rep(clim_hcst, dim(data$fcst$data)[['ensemble']]) - dim(clim_hcst) <- c(dims, ensemble = dim(data$fcst$data)[['ensemble']]) - clim_hcst <- Reorder(clim_hcst, order = names(dim(data$fcst$data))) + # Repeat the array as many times as ensemble members + clim_hcst <- rep(clim_hcst, data$fcst$dim[['ensemble']]) + # Rename and reorder dimensions + dim(clim_hcst) <- c(dims, ensemble = data$fcst$dim[['ensemble']]) + clim_hcst <- Reorder(clim_hcst, order = names(data$fcst$dim)) # Get fcst anomalies data$fcst$data <- data$fcst$data - clim_hcst # Change metadata diff --git a/modules/Loading/Dev_Loading.R b/modules/Loading/Dev_Loading.R new file mode 100644 index 00000000..fb456eb3 --- /dev/null +++ b/modules/Loading/Dev_Loading.R @@ -0,0 +1,501 @@ +## TODO: remove paths to personal scratchs +source("/esarchive/scratch/vagudets/repos/csoperational/R/get_regrid_params.R") +# Load required libraries/funs +source("modules/Loading/R/dates2load.R") +source("modules/Loading/R/get_timeidx.R") +source("modules/Loading/R/check_latlon.R") +## TODO: Move to prepare_outputs.R +source("tools/libs.R") +## TODO: remove these two lines when new as.s2dv_cube() is in CSTools +source('https://earth.bsc.es/gitlab/external/cstools/-/raw/develop-new_s2dv_cube/R/as.s2dv_cube.R') +source('https://earth.bsc.es/gitlab/external/cstools/-/raw/develop-new_s2dv_cube/R/zzz.R') + +## TODO: Source new s2dv_cube version +## TODO: Eliminate dim_var dimension (merge_across_dims?) + +load_datasets <- function(recipe) { + + # ------------------------------------------- + # Set params ----------------------------------------- + + hcst.inityear <- recipe$Analysis$Time$hcst_start + hcst.endyear <- recipe$Analysis$Time$hcst_end + lats.min <- recipe$Analysis$Region$latmin + lats.max <- recipe$Analysis$Region$latmax + lons.min <- recipe$Analysis$Region$lonmin + lons.max <- recipe$Analysis$Region$lonmax + ref.name <- recipe$Analysis$Datasets$Reference$name + exp.name <- recipe$Analysis$Datasets$System$name + + variable <- strsplit(recipe$Analysis$Variables$name, ", | |,")[[1]][1] + vars <- strsplit(recipe$Analysis$Variables$name, ", | |,")[[1]] + store.freq <- recipe$Analysis$Variables$freq + + # get sdates array + ## LOGGER: Change dates2load to extract logger from recipe? + sdates <- dates2load(recipe, recipe$Run$logger) + + idxs <- NULL + idxs$hcst <- get_timeidx(sdates$hcst, + recipe$Analysis$Time$ftime_min, + recipe$Analysis$Time$ftime_max, + time_freq=store.freq) + + if (!(is.null(sdates$fcst))) { + idxs$fcst <- get_timeidx(sdates$fcst, + recipe$Analysis$Time$ftime_min, + recipe$Analysis$Time$ftime_max, + time_freq=store.freq) + } + + ## TODO: Examine this verifications part, verify if it's necessary + # stream <- verifications$stream + # sdates <- verifications$fcst.sdate + + ## TODO: define fcst.name + ##fcst.name <- recipe$Analysis$Datasets$System[[sys]]$name + + # get esarchive datasets dict: + ## TODO: Adapt to 'filesystem' option in recipe + archive <- read_yaml("conf/archive.yml")$esarchive + exp_descrip <- archive$System[[exp.name]] + + freq.hcst <- unlist(exp_descrip[[store.freq]][variable]) + reference_descrip <- archive$Reference[[ref.name]] + freq.obs <- unlist(reference_descrip[[store.freq]][variable]) + obs.dir <- reference_descrip$src + fcst.dir <- exp_descrip$src + hcst.dir <- exp_descrip$src + fcst.nmember <- exp_descrip$nmember$fcst + hcst.nmember <- exp_descrip$nmember$hcst + + ## TODO: it is necessary? + ##if ("accum" %in% names(reference_descrip)) { + ## accum <- unlist(reference_descrip$accum[store.freq][[1]]) + ##} else { + ## accum <- FALSE + ##} + + var_dir_obs <- reference_descrip[[store.freq]][vars] + var_dir_exp <- exp_descrip[[store.freq]][vars] + + # ----------- + obs.path <- paste0(archive$src, + obs.dir, store.freq, "/$var$", "$var_dir$", + "/$var$_$file_date$.nc") + + hcst.path <- paste0(archive$src, + hcst.dir, store.freq, "/$var$", "$var_dir$", + "$var$_$file_date$.nc") + + fcst.path <- paste0(archive$src, + hcst.dir, store.freq, "/$var$", "$var_dir$", + "/$var$_$file_date$.nc") + + # Define regrid parameters: + #------------------------------------------------------------------- + regrid_params <- get_regrid_params(recipe, archive) + + # Longitude circular sort and latitude check + #------------------------------------------------------------------- + circularsort <- check_latlon(lats.min, lats.max, lons.min, lons.max) + + if (recipe$Analysis$Variables$freq == "monthly_mean"){ + split_multiselected_dims = TRUE + } else { + split_multiselected_dims = FALSE + } + + # Load hindcast + #------------------------------------------------------------------- + hcst <- Start(dat = hcst.path, + var = vars, + var_dir = var_dir_exp, + file_date = sdates$hcst, + time = idxs$hcst, + var_dir_depends = 'var', + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = circularsort, + transform = regrid_params$fcst.transform, + transform_params = list(grid = regrid_params$fcst.gridtype, + method = regrid_params$fcst.gridmethod), + transform_vars = c('latitude', 'longitude'), + synonims = list(latitude = c('lat', 'latitude'), + longitude = c('lon', 'longitude'), + ensemble = c('member', 'ensemble')), + ensemble = indices(1:hcst.nmember), + metadata_dims = 'var', # change to just 'var'? + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = 'file_date'), + split_multiselected_dims = split_multiselected_dims, + retrieve = TRUE) + + # Remove var_dir dimension + if ("var_dir" %in% names(dim(hcst))) { + hcst <- Subset(hcst, along = "var_dir", indices = 1, drop = "selected") + } + + if (recipe$Analysis$Variables$freq == "daily_mean") { + # Adjusts dims for daily case, could be removed if startR allows + # multidim split + names(dim(hcst))[which(names(dim(hcst)) == 'file_date')] <- "syear" + default_dims <- c(dat = 1, var = 1, sday = 1, + sweek = 1, syear = 1, time = 1, + latitude = 1, longitude = 1, ensemble = 1) + default_dims[names(dim(hcst))] <- dim(hcst) + dim(hcst) <- default_dims + # Change time attribute dimensions + default_time_dims <- c(sday = 1, sweek = 1, syear = 1, time = 1) + names(dim(attr(hcst, "Variables")$common$time))[which(names( + dim(attr(hcst, "Variables")$common$time)) == 'file_date')] <- "syear" + default_time_dims[names(dim(attr(hcst, "Variables")$common$time))] <- + dim(attr(hcst, "Variables")$common$time) + dim(attr(hcst, "Variables")$common$time) <- default_time_dims + } + + # Convert hcst to s2dv_cube object + ## TODO: Give correct dimensions to $Dates + ## (sday, sweek, syear instead of file_date) + hcst <- as.s2dv_cube(hcst) + # Adjust dates for models where the time stamp goes into the next month + if (recipe$Analysis$Variables$freq == "monthly_mean") { + hcst$attrs$Dates[] <- hcst$attrs$Dates - seconds(exp_descrip$time_stamp_lag) + } + + ## Combine tas and tos data into one variable: tas-tos + if(recipe$Analysis$Variables$name == 'tas tos'){ + #if(recipe$Analysis$Datasets$Reference$name == 'HadCRUT5' || recipe$Analysis$Datasets$Reference$name == 'BEST') { + source('/esarchive/scratch/nmilders/gitlab/git_clones/s2s-suite/modules/Loading/R/mask_tas_tos.R') + hcst <- mask_tas_tos(input_data = hcst, region = c(lons.min, lons.max,lats.min, lats.max), + grid = 'r360x181', + lon = hcst$coords$longitude, + lat = hcst$coords$latitude, + lon_dim = 'longitude', lat_dim = 'latitude', ncores = NULL) + + hcst$dims[['var']] <- dim(hcst$data)[['var']] + #} + } + + # Load forecast + #------------------------------------------------------------------- + if (!is.null(recipe$Analysis$Time$fcst_year)) { + # the call uses file_date instead of fcst_syear so that it can work + # with the daily case and the current version of startR not allowing + # multiple dims split + + fcst <- Start(dat = fcst.path, + var = vars, + var_dir = var_dir_exp, + var_dir_depends = 'var', + file_date = sdates$fcst, + time = idxs$fcst, + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = circularsort, + transform = regrid_params$fcst.transform, + transform_params = list(grid = regrid_params$fcst.gridtype, + method = regrid_params$fcst.gridmethod), + transform_vars = c('latitude', 'longitude'), + synonims = list(latitude = c('lat', 'latitude'), + longitude = c('lon', 'longitude'), + ensemble = c('member', 'ensemble')), + ensemble = indices(1:fcst.nmember), + metadata_dims = 'var', + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = 'file_date'), + split_multiselected_dims = split_multiselected_dims, + retrieve = TRUE) + + if ("var_dir" %in% names(dim(fcst))) { + fcst <- Subset(fcst, along = "var_dir", indices = 1, drop = "selected") + } + + if (recipe$Analysis$Variables$freq == "daily_mean") { + # Adjusts dims for daily case, could be removed if startR allows + # multidim split + names(dim(fcst))[which(names(dim(fcst)) == 'file_date')] <- "syear" + default_dims <- c(dat = 1, var = 1, sday = 1, + sweek = 1, syear = 1, time = 1, + latitude = 1, longitude = 1, ensemble = 1) + default_dims[names(dim(fcst))] <- dim(fcst) + dim(fcst) <- default_dims + # Change time attribute dimensions + default_time_dims <- c(sday = 1, sweek = 1, syear = 1, time = 1) + names(dim(attr(fcst, "Variables")$common$time))[which(names( + dim(attr(fcst, "Variables")$common$time)) == 'file_date')] <- "syear" + default_time_dims[names(dim(attr(fcst, "Variables")$common$time))] <- + dim(attr(fcst, "Variables")$common$time) + dim(attr(fcst, "Variables")$common$time) <- default_time_dims + } + + # Convert fcst to s2dv_cube + fcst <- as.s2dv_cube(fcst) + # Adjust dates for models where the time stamp goes into the next month + if (recipe$Analysis$Variables$freq == "monthly_mean") { + fcst$attrs$Dates[] <- + fcst$attrs$Dates - seconds(exp_descrip$time_stamp_lag) + } + + } else { + fcst <- NULL + } + + # Load reference + #------------------------------------------------------------------- + + # Obtain dates and date dimensions from the loaded hcst data to make sure + # the corresponding observations are loaded correctly. + dates <- hcst$attrs$Dates + dim(dates) <- hcst$dims[c("sday", "sweek", "syear", "time")] + + # Separate Start() call for monthly vs daily data + if (store.freq == "monthly_mean") { + + dates_file <- format(as.Date(dates, '%Y%m%d'), "%Y%m") + dim(dates_file) <- dim(dates) + + ## tas tos mask + if (recipe$Analysis$Variables$name == 'tas tos'){ + if (recipe$Analysis$Datasets$Reference$name == 'HadCRUT5'){ + vars <- 'tasanomaly' + var_dir_obs <- reference_descrip[[store.freq]][vars] + } + } + + if (recipe$Analysis$Variables$name == 'tas tos'){ + if (recipe$Analysis$Datasets$Reference$name == 'BEST'){ + vars <- 'tas' + var_dir_obs <- reference_descrip[[store.freq]][vars] + } + } + + obs <- Start(dat = obs.path, + var = vars, + var_dir = var_dir_obs, + var_dir_depends = 'var', + file_date = dates_file, + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = circularsort, + transform = regrid_params$obs.transform, + transform_params = list(grid = regrid_params$obs.gridtype, + method = regrid_params$obs.gridmethod), + transform_vars = c('latitude', 'longitude'), + synonims = list(latitude = c('lat','latitude'), + longitude = c('lon','longitude')), + metadata_dims = 'var', + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = 'file_date'), + split_multiselected_dims = TRUE, + retrieve = TRUE) + + } else if (store.freq == "daily_mean") { + + # Get year and month for file_date + dates_file <- sapply(dates, format, '%Y%m') + dim(dates_file) <- dim(dates) + # Set hour to 12:00 to ensure correct date retrieval for daily data + lubridate::hour(dates) <- 12 + lubridate::minute(dates) <- 00 + # Restore correct dimensions + dim(dates) <- dim(dates_file) + + obs <- Start(dat = obs.path, + var = vars, + var_dir = var_dir_obs, + var_dir_depends = 'var', + file_date = sort(unique(dates_file)), + time = dates, + time_var = 'time', + time_across = 'file_date', + merge_across_dims = TRUE, + merge_across_dims_narm = TRUE, + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = circularsort, + transform = regrid_params$obs.transform, + transform_params = list(grid = regrid_params$obs.gridtype, + method = regrid_params$obs.gridmethod), + transform_vars = c('latitude', 'longitude'), + synonims = list(latitude = c('lat','latitude'), + longitude = c('lon','longitude')), + metadata_dims = 'var', + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = 'file_date'), + split_multiselected_dims = TRUE, + retrieve = TRUE) + } + + # Remove var_dir dimension + if ("var_dir" %in% names(dim(obs))) { + obs <- Subset(obs, along = "var_dir", indices = 1, drop = "selected") + } + # Adds ensemble dim to obs (for consistency with hcst/fcst) + default_dims <- c(dat = 1, var = 1, sday = 1, + sweek = 1, syear = 1, time = 1, + latitude = 1, longitude = 1, ensemble = 1) + default_dims[names(dim(obs))] <- dim(obs) + dim(obs) <- default_dims + + # Convert obs to s2dv_cube + obs <- as.s2dv_cube(obs) + + ## Combine tas and tos data into one variable: tas-tos + if(recipe$Analysis$Variables$name == 'tas tos'){ + if(recipe$Analysis$Datasets$Reference$name != 'HadCRUT5' & recipe$Analysis$Datasets$Reference$name != 'BEST'){ + source('/esarchive/scratch/nmilders/gitlab/git_clones/s2s-suite/modules/Loading/R/mask_tas_tos.R') + obs <- mask_tas_tos(input_data = obs, region = c(lons.min, lons.max,lats.min, lats.max), + grid = 'r360x181', + lon = obs$coords$longitude, + lat = obs$coords$latitude, + lon_dim = 'longitude', lat_dim = 'latitude', ncores = NULL) + + obs$dims[['var']] <- dim(obs$data)[['var']] + } + } + + # Check for consistency between hcst and obs grid + if (!(recipe$Analysis$Regrid$type == 'none')) { + if (!isTRUE(all.equal(as.vector(hcst$lat), as.vector(obs$lat)))) { + lat_error_msg <- paste("Latitude mismatch between hcst and obs.", + "Please check the original grids and the", + "regrid parameters in your recipe.") + error(recipe$Run$logger, lat_error_msg) + hcst_lat_msg <- paste0("First hcst lat: ", hcst$lat[1], + "; Last hcst lat: ", hcst$lat[length(hcst$lat)]) + info(recipe$Run$logger, hcst_lat_msg) + obs_lat_msg <- paste0("First obs lat: ", obs$lat[1], + "; Last obs lat: ", obs$lat[length(obs$lat)]) + info(recipe$Run$logger, obs_lat_msg) + stop("hcst and obs don't share the same latitudes.") + } + if (!isTRUE(all.equal(as.vector(hcst$lon), as.vector(obs$lon)))) { + lon_error_msg <- paste("Longitude mismatch between hcst and obs.", + "Please check the original grids and the", + "regrid parameters in your recipe.") + error(recipe$Run$logger, lon_error_msg) + hcst_lon_msg <- paste0("First hcst lon: ", hcst$lon[1], + "; Last hcst lon: ", hcst$lon[length(hcst$lon)]) + info(recipe$Run$logger, hcst_lon_msg) + obs_lon_msg <- paste0("First obs lon: ", obs$lon[1], + "; Last obs lon: ", obs$lon[length(obs$lon)]) + info(recipe$Run$logger, obs_lon_msg) + stop("hcst and obs don't share the same longitudes.") + + } + } + + # Remove negative values in accumulative variables + dictionary <- read_yaml("conf/variable-dictionary.yml") + for (var_idx in 1:length(vars)) { + var_name <- vars[var_idx] + if (dictionary$vars[[var_name]]$accum) { + info(recipe$Run$logger, + paste0("Accumulated variable ", var_name, + ": setting negative values to zero.")) + # obs$data[, var_idx, , , , , , , ] <- pmax(Subset(obs$data, + # along = "var", + # indices = var_idx, F), 0) + obs$data[, var_idx, , , , , , , ][obs$data[, var_idx, , , , , , , ] < 0] <- 0 + hcst$data[, var_idx, , , , , , , ][hcst$data[, var_idx, , , , , , , ] < 0] <- 0 + if (!is.null(fcst)) { + fcst$data[, var_idx, , , , , , , ][fcst$data[, var_idx, , , , , , , ] < 0] <- 0 + } + } + + # Convert prlr from m/s to mm/day + ## TODO: Make a unit conversion function + if (vars[[var_idx]] == "prlr") { + # Verify that the units are m/s and the same in obs and hcst + if (((obs$attrs$Variable$metadata[[var_name]]$units == "m s-1") || + (obs$attrs$Variable$metadata[[var_name]]$units == "m s**-1")) && + ((hcst$attrs$Variable$metadata[[var_name]]$units == "m s-1") || + (hcst$attrs$Variable$metadata[[var_name]]$units == "m s**-1"))) { + info(recipe$Run$logger, "Converting precipitation from m/s to mm/day.") + obs$data[, var_idx, , , , , , , ] <- + obs$data[, var_idx, , , , , , , ]*86400*1000 + obs$attrs$Variable$metadata[[var_name]]$units <- "mm/day" + hcst$data[, var_idx, , , , , , , ] <- + hcst$data[, var_idx, , , , , , , ]*86400*1000 + hcst$attrs$Variable$metadata[[var_name]]$units <- "mm/day" + if (!is.null(fcst)) { + fcst$data[, var_idx, , , , , , , ] <- + fcst$data[, var_idx, , , , , , , ]*86400*1000 + fcst$attrs$Variable$metadata[[var_name]]$units <- "mm/day" + } + } + } + } + # Compute anomalies if requested + # Print a summary of the loaded data for the user, for each object + if (recipe$Run$logger$threshold <= 2) { + data_summary(hcst, recipe) + data_summary(obs, recipe) + if (!is.null(fcst)) { + data_summary(fcst, recipe) + } + } + + info(recipe$Run$logger, + "##### DATA LOADING COMPLETED SUCCESSFULLY #####") + + ############################################################################ + # + # CHECKS ON MISSING FILES + # + ############################################################################ + + #obs.NA_dates.ind <- Apply(obs, + # fun=(function(x){ all(is.na(x))}), + # target_dims=c('time', 'latitude', 'longitude'))[[1]] + #obs.NA_dates <- dates_file[obs.NA_dates.ind] + #obs.NA_dates <- obs.NA_dates[order(obs.NA_dates)] + #obs.NA_files <- paste0(obs.dir, store.freq,"/",variable,"_", + # freq.obs,"obs.grid","/",variable,"_",obs.NA_dates,".nc") + # + #if (any(is.na(hcst))){ + # fatal(recipe$Run$logger, + # paste(" ERROR: MISSING HCST VALUES FOUND DURING LOADING # ", + # " ################################################# ", + # " ###### MISSING FILES #### ", + # " ################################################# ", + # "hcst files:", + # hcst.NA_files, + # " ################################################# ", + # " ################################################# ", + # sep="\n")) + # quit(status = 1) + #} + # + #if (any(is.na(obs)) && !identical(obs.NA_dates,character(0))){ + # fatal(recipe$logger, + # paste(" ERROR: MISSING OBS VALUES FOUND DURING LOADING # ", + # " ################################################# ", + # " ###### MISSING FILES #### ", + # " ################################################# ", + # "obs files:", + # obs.NA_files, + # " ################################################# ", + # " ################################################# ", + # sep="\n")) + # quit(status=1) + #} + # + #info(recipe$logger, + # "######### DATA LOADING COMPLETED SUCCESFULLY ##############") + + ############################################################################ + ############################################################################ + + return(list(hcst = hcst, fcst = fcst, obs = obs)) + +} diff --git a/modules/Loading/Loading.R b/modules/Loading/Loading.R index c5eb41e6..ebeadbf2 100644 --- a/modules/Loading/Loading.R +++ b/modules/Loading/Loading.R @@ -6,12 +6,18 @@ source("modules/Loading/R/get_timeidx.R") source("modules/Loading/R/check_latlon.R") ## TODO: Move to prepare_outputs.R source("tools/libs.R") +## TODO: remove these two lines when new as.s2dv_cube() is in CSTools +source('https://earth.bsc.es/gitlab/external/cstools/-/raw/develop-new_s2dv_cube/R/as.s2dv_cube.R') +source('https://earth.bsc.es/gitlab/external/cstools/-/raw/develop-new_s2dv_cube/R/zzz.R') -load_datasets <- function(recipe) { +## TODO: Source new s2dv_cube version +## TODO: Eliminate dim_var dimension (merge_across_dims?) +load_datasets <- function(recipe) { + # ------------------------------------------- # Set params ----------------------------------------- - + hcst.inityear <- recipe$Analysis$Time$hcst_start hcst.endyear <- recipe$Analysis$Time$hcst_end lats.min <- recipe$Analysis$Region$latmin @@ -20,13 +26,14 @@ load_datasets <- function(recipe) { lons.max <- recipe$Analysis$Region$lonmax ref.name <- recipe$Analysis$Datasets$Reference$name exp.name <- recipe$Analysis$Datasets$System$name - variable <- recipe$Analysis$Variables$name + + variable <- strsplit(recipe$Analysis$Variables$name, ", | |,")[[1]] store.freq <- recipe$Analysis$Variables$freq - + # get sdates array ## LOGGER: Change dates2load to extract logger from recipe? sdates <- dates2load(recipe, recipe$Run$logger) - + idxs <- NULL idxs$hcst <- get_timeidx(sdates$hcst, recipe$Analysis$Time$ftime_min, @@ -39,7 +46,7 @@ load_datasets <- function(recipe) { recipe$Analysis$Time$ftime_max, time_freq=store.freq) } - + ## TODO: Examine this verifications part, verify if it's necessary # stream <- verifications$stream # sdates <- verifications$fcst.sdate @@ -52,9 +59,9 @@ load_datasets <- function(recipe) { archive <- read_yaml("conf/archive.yml")$esarchive exp_descrip <- archive$System[[exp.name]] - freq.hcst <- unlist(exp_descrip[[store.freq]][variable]) + freq.hcst <- unlist(exp_descrip[[store.freq]][variable[1]]) reference_descrip <- archive$Reference[[ref.name]] - freq.obs <- unlist(reference_descrip[[store.freq]][variable]) + freq.obs <- unlist(reference_descrip[[store.freq]][variable[1]]) obs.dir <- reference_descrip$src fcst.dir <- exp_descrip$src hcst.dir <- exp_descrip$src @@ -67,22 +74,22 @@ load_datasets <- function(recipe) { ##} else { ## accum <- FALSE ##} + + var_dir_obs <- reference_descrip[[store.freq]][variable] + var_dir_exp <- exp_descrip[[store.freq]][variable] # ----------- obs.path <- paste0(archive$src, - obs.dir, store.freq, "/$var$", - reference_descrip[[store.freq]][[variable]], - "$var$_$file_date$.nc") + obs.dir, store.freq, "/$var$", "$var_dir$", + "/$var$_$file_date$.nc") hcst.path <- paste0(archive$src, - hcst.dir, store.freq, "/$var$", - exp_descrip[[store.freq]][[variable]], + hcst.dir, store.freq, "/$var$", "$var_dir$", "$var$_$file_date$.nc") fcst.path <- paste0(archive$src, - hcst.dir, store.freq, "/$var$", - exp_descrip[[store.freq]][[variable]], - "$var$_$file_date$.nc") + hcst.dir, store.freq, "/$var$", "$var_dir$", + "/$var$_$file_date$.nc") # Define regrid parameters: #------------------------------------------------------------------- @@ -91,7 +98,7 @@ load_datasets <- function(recipe) { # Longitude circular sort and latitude check #------------------------------------------------------------------- circularsort <- check_latlon(lats.min, lats.max, lons.min, lons.max) - + if (recipe$Analysis$Variables$freq == "monthly_mean"){ split_multiselected_dims = TRUE } else { @@ -102,8 +109,10 @@ load_datasets <- function(recipe) { #------------------------------------------------------------------- hcst <- Start(dat = hcst.path, var = variable, + var_dir = var_dir_exp, file_date = sdates$hcst, time = idxs$hcst, + var_dir_depends = 'var', latitude = values(list(lats.min, lats.max)), latitude_reorder = Sort(), longitude = values(list(lons.min, lons.max)), @@ -116,12 +125,18 @@ load_datasets <- function(recipe) { longitude = c('lon', 'longitude'), ensemble = c('member', 'ensemble')), ensemble = indices(1:hcst.nmember), + metadata_dims = 'var', # change to just 'var'? return_vars = list(latitude = 'dat', longitude = 'dat', time = 'file_date'), split_multiselected_dims = split_multiselected_dims, retrieve = TRUE) - + + # Remove var_dir dimension + if ("var_dir" %in% names(dim(hcst))) { + hcst <- Subset(hcst, along = "var_dir", indices = 1, drop = "selected") + } + if (recipe$Analysis$Variables$freq == "daily_mean") { # Adjusts dims for daily case, could be removed if startR allows # multidim split @@ -134,12 +149,12 @@ load_datasets <- function(recipe) { # Change time attribute dimensions default_time_dims <- c(sday = 1, sweek = 1, syear = 1, time = 1) names(dim(attr(hcst, "Variables")$common$time))[which(names( - dim(attr(hcst, "Variables")$common$time)) == 'file_date')] <- "syear" + dim(attr(hcst, "Variables")$common$time)) == 'file_date')] <- "syear" default_time_dims[names(dim(attr(hcst, "Variables")$common$time))] <- dim(attr(hcst, "Variables")$common$time) dim(attr(hcst, "Variables")$common$time) <- default_time_dims } - + # Convert hcst to s2dv_cube object ## TODO: Give correct dimensions to $Dates ## (sday, sweek, syear instead of file_date) @@ -148,16 +163,18 @@ load_datasets <- function(recipe) { if (recipe$Analysis$Variables$freq == "monthly_mean") { hcst$attrs$Dates[] <- hcst$attrs$Dates - seconds(exp_descrip$time_stamp_lag) } - + # Load forecast #------------------------------------------------------------------- if (!is.null(recipe$Analysis$Time$fcst_year)) { # the call uses file_date instead of fcst_syear so that it can work # with the daily case and the current version of startR not allowing # multiple dims split - - fcst <- Start(dat = fcst.path, + + fcst <- Start(dat = fcst.path, var = variable, + var_dir = var_dir_exp, + var_dir_depends = 'var', file_date = sdates$fcst, time = idxs$fcst, latitude = values(list(lats.min, lats.max)), @@ -172,12 +189,17 @@ load_datasets <- function(recipe) { longitude = c('lon', 'longitude'), ensemble = c('member', 'ensemble')), ensemble = indices(1:fcst.nmember), + metadata_dims = 'var', return_vars = list(latitude = 'dat', longitude = 'dat', time = 'file_date'), split_multiselected_dims = split_multiselected_dims, retrieve = TRUE) + if ("var_dir" %in% names(dim(fcst))) { + fcst <- Subset(fcst, along = "var_dir", indices = 1, drop = "selected") + } + if (recipe$Analysis$Variables$freq == "daily_mean") { # Adjusts dims for daily case, could be removed if startR allows # multidim split @@ -190,12 +212,12 @@ load_datasets <- function(recipe) { # Change time attribute dimensions default_time_dims <- c(sday = 1, sweek = 1, syear = 1, time = 1) names(dim(attr(fcst, "Variables")$common$time))[which(names( - dim(attr(fcst, "Variables")$common$time)) == 'file_date')] <- "syear" + dim(attr(fcst, "Variables")$common$time)) == 'file_date')] <- "syear" default_time_dims[names(dim(attr(fcst, "Variables")$common$time))] <- dim(attr(fcst, "Variables")$common$time) dim(attr(fcst, "Variables")$common$time) <- default_time_dims } - + # Convert fcst to s2dv_cube fcst <- as.s2dv_cube(fcst) # Adjust dates for models where the time stamp goes into the next month @@ -203,30 +225,29 @@ load_datasets <- function(recipe) { fcst$attrs$Dates[] <- fcst$attrs$Dates - seconds(exp_descrip$time_stamp_lag) } - + } else { fcst <- NULL } # Load reference #------------------------------------------------------------------- - + # Obtain dates and date dimensions from the loaded hcst data to make sure # the corresponding observations are loaded correctly. dates <- hcst$attrs$Dates - dim(dates) <- dim(Subset(hcst$data, - along=c('dat', 'var', - 'latitude', 'longitude', 'ensemble'), - list(1,1,1,1,1), drop="selected")) - + dim(dates) <- hcst$dims[c("sday", "sweek", "syear", "time")] + # Separate Start() call for monthly vs daily data if (store.freq == "monthly_mean") { - + dates_file <- format(as.Date(dates, '%Y%m%d'), "%Y%m") dim(dates_file) <- dim(dates) - + obs <- Start(dat = obs.path, var = variable, + var_dir = var_dir_obs, + var_dir_depends = 'var', file_date = dates_file, latitude = values(list(lats.min, lats.max)), latitude_reorder = Sort(), @@ -236,16 +257,17 @@ load_datasets <- function(recipe) { transform_params = list(grid = regrid_params$obs.gridtype, method = regrid_params$obs.gridmethod), transform_vars = c('latitude', 'longitude'), - synonims = list(latitude = c('lat', 'y', 'latitude'), - longitude = c('lon', 'x', 'longitude')), + synonims = list(latitude = c('lat','latitude'), + longitude = c('lon','longitude')), + metadata_dims = 'var', return_vars = list(latitude = 'dat', longitude = 'dat', time = 'file_date'), split_multiselected_dims = TRUE, retrieve = TRUE) - + } else if (store.freq == "daily_mean") { - + # Get year and month for file_date dates_file <- sapply(dates, format, '%Y%m') dim(dates_file) <- dim(dates) @@ -254,9 +276,11 @@ load_datasets <- function(recipe) { lubridate::minute(dates) <- 00 # Restore correct dimensions dim(dates) <- dim(dates_file) - + obs <- Start(dat = obs.path, var = variable, + var_dir = var_dir_obs, + var_dir_depends = 'var', file_date = sort(unique(dates_file)), time = dates, time_var = 'time', @@ -269,24 +293,30 @@ load_datasets <- function(recipe) { longitude_reorder = circularsort, transform = regrid_params$obs.transform, transform_params = list(grid = regrid_params$obs.gridtype, - method = regrid_params$obs.gridmethod), + method = regrid_params$obs.gridmethod), transform_vars = c('latitude', 'longitude'), synonims = list(latitude = c('lat','latitude'), - longitude = c('lon','longitude')), + longitude = c('lon','longitude')), + metadata_dims = 'var', return_vars = list(latitude = 'dat', - longitude = 'dat', - time = 'file_date'), + longitude = 'dat', + time = 'file_date'), split_multiselected_dims = TRUE, retrieve = TRUE) } + + # Remove var_dir dimension + if ("var_dir" %in% names(dim(obs))) { + obs <- Subset(obs, along = "var_dir", indices = 1, drop = "selected") + } # Adds ensemble dim to obs (for consistency with hcst/fcst) default_dims <- c(dat = 1, var = 1, sday = 1, sweek = 1, syear = 1, time = 1, latitude = 1, longitude = 1, ensemble = 1) default_dims[names(dim(obs))] <- dim(obs) dim(obs) <- default_dims - + # Convert obs to s2dv_cube obs <- as.s2dv_cube(obs) @@ -301,7 +331,7 @@ load_datasets <- function(recipe) { "; Last hcst lat: ", hcst$lat[length(hcst$lat)]) info(recipe$Run$logger, hcst_lat_msg) obs_lat_msg <- paste0("First obs lat: ", obs$lat[1], - "; Last obs lat: ", obs$lat[length(obs$lat)]) + "; Last obs lat: ", obs$lat[length(obs$lat)]) info(recipe$Run$logger, obs_lat_msg) stop("hcst and obs don't share the same latitudes.") } @@ -314,47 +344,54 @@ load_datasets <- function(recipe) { "; Last hcst lon: ", hcst$lon[length(hcst$lon)]) info(recipe$Run$logger, hcst_lon_msg) obs_lon_msg <- paste0("First obs lon: ", obs$lon[1], - "; Last obs lon: ", obs$lon[length(obs$lon)]) + "; Last obs lon: ", obs$lon[length(obs$lon)]) info(recipe$Run$logger, obs_lon_msg) stop("hcst and obs don't share the same longitudes.") - + } } - + # Remove negative values in accumulative variables dictionary <- read_yaml("conf/variable-dictionary.yml") - if (dictionary$vars[[variable]]$accum) { - info(recipe$Run$logger, - "Accumulated variable: setting negative values to zero.") - obs$data[obs$data < 0] <- 0 - hcst$data[hcst$data < 0] <- 0 - if (!is.null(fcst)) { - fcst$data[fcst$data < 0] <- 0 - } - } - - # Convert prlr from m/s to mm/day - ## TODO: Revise this - ## TODO: Make a unit conversion function? - if (variable == "prlr") { - # Verify that the units are m/s and the same in obs and hcst - if (((obs$attrs$Variable$metadata[[variable]]$units == "m s-1") || - (obs$attrs$Variable$metadata[[variable]]$units == "m s**-1")) && - ((hcst$attrs$Variable$metadata[[variable]]$units == "m s-1") || - (hcst$attrs$Variable$metadata[[variable]]$units == "m s**-1"))) { - - info(recipe$Run$logger, "Converting precipitation from m/s to mm/day.") - obs$data <- obs$data*86400*1000 - obs$attrs$Variable$metadata[[variable]]$units <- "mm/day" - hcst$data <- hcst$data*86400*1000 - hcst$attrs$Variable$metadata[[variable]]$units <- "mm/day" + for (var_idx in 1:length(variable)) { + var_name <- variable[var_idx] + if (dictionary$vars[[var_name]]$accum) { + info(recipe$Run$logger, + paste0("Accumulated variable ", var_name, + ": setting negative values to zero.")) + # obs$data[, var_idx, , , , , , , ] <- pmax(Subset(obs$data, + # along = "var", + # indices = var_idx, F), 0) + obs$data[, var_idx, , , , , , , ][obs$data[, var_idx, , , , , , , ] < 0] <- 0 + hcst$data[, var_idx, , , , , , , ][hcst$data[, var_idx, , , , , , , ] < 0] <- 0 if (!is.null(fcst)) { - fcst$data <- fcst$data*86400*1000 - fcst$attrs$Variable$metadata[[variable]]$units <- "mm/day" + fcst$data[, var_idx, , , , , , , ][fcst$data[, var_idx, , , , , , , ] < 0] <- 0 + } + } + + # Convert prlr from m/s to mm/day + ## TODO: Make a unit conversion function + if (variable[[var_idx]] == "prlr") { + # Verify that the units are m/s and the same in obs and hcst + if (((obs$attrs$Variable$metadata[[var_name]]$units == "m s-1") || + (obs$attrs$Variable$metadata[[var_name]]$units == "m s**-1")) && + ((hcst$attrs$Variable$metadata[[var_name]]$units == "m s-1") || + (hcst$attrs$Variable$metadata[[var_name]]$units == "m s**-1"))) { + info(recipe$Run$logger, "Converting precipitation from m/s to mm/day.") + obs$data[, var_idx, , , , , , , ] <- + obs$data[, var_idx, , , , , , , ]*86400*1000 + obs$attrs$Variable$metadata[[var_name]]$units <- "mm/day" + hcst$data[, var_idx, , , , , , , ] <- + hcst$data[, var_idx, , , , , , , ]*86400*1000 + hcst$attrs$Variable$metadata[[var_name]]$units <- "mm/day" + if (!is.null(fcst)) { + fcst$data[, var_idx, , , , , , , ] <- + fcst$data[, var_idx, , , , , , , ]*86400*1000 + fcst$attrs$Variable$metadata[[var_name]]$units <- "mm/day" + } } } } - # Compute anomalies if requested # Print a summary of the loaded data for the user, for each object if (recipe$Run$logger$threshold <= 2) { @@ -364,7 +401,7 @@ load_datasets <- function(recipe) { data_summary(fcst, recipe) } } - + info(recipe$Run$logger, "##### DATA LOADING COMPLETED SUCCESSFULLY #####") @@ -415,7 +452,7 @@ load_datasets <- function(recipe) { ############################################################################ ############################################################################ - + return(list(hcst = hcst, fcst = fcst, obs = obs)) - + } diff --git a/modules/Loading/Loading_decadal.R b/modules/Loading/Loading_decadal.R index b9a145e3..43b3c54f 100644 --- a/modules/Loading/Loading_decadal.R +++ b/modules/Loading/Loading_decadal.R @@ -15,8 +15,8 @@ source("tools/libs.R") #==================================================================== -# recipe_file <- "modules/Loading/testing_recipes/recipe_decadal.yml" -# recipe_file <- "modules/Loading/testing_recipes/recipe_decadal_daily.yml" +# recipe_file <- "recipes/atomic_recipes/recipe_decadal.yml" +# recipe_file <- "recipes/atomic_recipes/recipe_decadal_daily.yml" load_datasets <- function(recipe) { @@ -35,7 +35,8 @@ load_datasets <- function(recipe) { exp.name <- recipe$Analysis$Datasets$System$name #'HadGEM3' ref.name <- recipe$Analysis$Datasets$Reference$name #'era5' member <- strsplit(recipe$Analysis$Datasets$System$member, ',')[[1]] #c("r1i1p1f2", "r2i1p1f2") - variable <- recipe$Analysis$Variables$name #'tas' +# variable <- recipe$Analysis$Variables$name #'tas' + variable <- strsplit(recipe$Analysis$Variables$name, ", | |,")[[1]] store.freq <- recipe$Analysis$Variables$freq #monthly_mean lats.min <- as.numeric(recipe$Analysis$Region$latmin) #0 lats.max <- as.numeric(recipe$Analysis$Region$latmax) #10 @@ -64,12 +65,12 @@ load_datasets <- function(recipe) { # Read from archive: #------------------------- if (store.freq == "monthly_mean") { - table <- archive$System[[exp.name]][[store.freq]]$table[[variable]] #'Amon' + table <- archive$System[[exp.name]][[store.freq]]$table[variable] #list(tas = 'Amon') } else { table <- 'day' } - grid <- archive$System[[exp.name]][[store.freq]]$grid[[variable]] - version <- archive$System[[exp.name]][[store.freq]]$version[[variable]] + grid <- archive$System[[exp.name]][[store.freq]]$grid[variable] #list(tas = 'gr') + version <- archive$System[[exp.name]][[store.freq]]$version[variable] #list(tas = 'v20210910') if (identical(member, 'all')) { member <- strsplit(archive$System[[exp.name]]$member, ',')[[1]] } @@ -95,13 +96,14 @@ load_datasets <- function(recipe) { version = version, sdates = sdates_hcst) path_list <- tmp$path_list multi_path <- tmp$multi_path -# hcst.path <- file.path(archive$src, archive$System[[exp.name]]$src$hcst, -# '$ensemble$', table, '$var$', grid, version) -# hcst.files <- paste0('$var$_', table, '_*_*_s$syear$-$ensemble$_', grid, '_$chunk$.nc') + #TODO: to make this case work; enhance Start() if it's possible + if (multi_path & length(variable) > 1) { + stop("The recipe requests multiple variables and start dates from both dpccA-hindcast and dcppB-forecast. This case is not available for now.") + } Start_default_arg_list <- list( - dat = path_list, #file.path(hcst.path, hcst.files), + dat = path_list, var = variable, syear = paste0(sdates_hcst), chunk = 'all', @@ -120,7 +122,7 @@ load_datasets <- function(recipe) { transform_params = list(grid = regrid_params$fcst.gridtype, method = regrid_params$fcst.gridmethod), transform_vars = c('latitude', 'longitude'), - path_glob_permissive = 2, # for version +# path_glob_permissive = 2, # for version synonims = list(longitude = c('lon', 'longitude'), latitude = c('lat', 'latitude')), return_vars = list(latitude = NULL, longitude = NULL, @@ -128,6 +130,12 @@ load_datasets <- function(recipe) { silent = !DEBUG, retrieve = T) + if (length(variable) > 1) { + Start_default_arg_list <- c(Start_default_arg_list, + list(table = table, grid = grid, version = version, + table_depends = 'var', grid_depends = 'var', version_depends = 'var')) + } + if (!multi_path) { Start_hcst_arg_list <- Start_default_arg_list hcst <- do.call(Start, Start_hcst_arg_list) @@ -189,10 +197,11 @@ load_datasets <- function(recipe) { version = version, sdates = sdates_fcst) path_list <- tmp$path_list multi_path <- tmp$multi_path -# fcst.path <- file.path(archive$src, archive$System[[exp.name]]$src$fcst, -# '$ensemble$', table, '$var$', grid, version) -# fcst.files <- paste0('$var$_', table, '_*_*_s$syear$-$ensemble$_', grid, '_$chunk$.nc') + #TODO: to make this case work; enhance Start() if it's possible + if (multi_path & length(variable) > 1) { + stop("The recipe requests multiple variables and start dates from both dpccA-hindcast and dcppB-forecast. This case is not available for now.") + } # monthly & daily if (!multi_path) { diff --git a/modules/Loading/R/mask_tas_tos.R b/modules/Loading/R/mask_tas_tos.R new file mode 100644 index 00000000..a2eeb0b6 --- /dev/null +++ b/modules/Loading/R/mask_tas_tos.R @@ -0,0 +1,84 @@ +library(multiApply) +library(startR) +library(s2dv) + +mask_tas_tos <- function(input_data, grid, lon, lat, region = region , + lon_dim = 'lon', lat_dim = 'lat', ncores = NULL){ + + + mask <- .load_mask(grid = grid, lon_dim = lon_dim, lat_dim = lat_dim, + sea_value = 1, land_value = 0, region = region) + + + ## TO DO: improve the check and correct lats + stopifnot(all(lon == mask$lon)) + stopifnot(max(abs(as.numeric(round(lat,2) - round(mask$lat,2)))) < 0.1) # stopifnot(all(lat == mask$lat)) + + tas <- Subset(input_data$data, along = 'var', indices = 1) + tos <- Subset(input_data$data, along = 'var', indices = 2) + + tas_tos <- multiApply::Apply(data = list(tas, tos), + target_dims = c(lon_dim, lat_dim), + fun = .mask_tas_tos, + mask = mask$mask, + sea_value = 1, + ncores = ncores)$output1 + input_data$data <- tas_tos + + return(input_data) +} + +.mask_tas_tos <- function(data_tas, data_tos, mask, sea_value){ + data_tas[mask == sea_value] <- data_tos[mask == sea_value] + return(data_tas) +} + +.load_mask <- function(grid, mask_path = NULL, land_value = 0, sea_value = 1, + lon_dim = 'lon', lat_dim = 'lat', region = region){ + + if (is.null(mask_path)){ + mask_sea_land_path <- '/esarchive/exp/ecmwf/system5c3s/constant/lsm/lsm.nc' ## /esarchive/recon/ecmwf/era5land/constant/lsm-r3600x1801cds/lsm.nc' + } else if (is.character(mask_path)){ + mask_sea_land_path <- mask_path + } else { + stop("mask_path must be NULL (to use the default mask and interpolate it to + the specified grid) or a string with the mask's path you want to load") + } + + lons.min <- region[1] + lons.max <- region[2] + lats.min <- region[3] + lats.max <- region[4] + + ## TO DO: + ## Fix region filter for lat and lon + ## Fix 'number' parameter for mask + + + data <- startR::Start(dat = mask_sea_land_path, + var = 'lsm', + lon = 'all', + lat = 'all', + number = 1, ## needed to add for ensemble member dimension of lsm.nc + # lon = values(list(lons.min, lons.max)), + # lat = values(list(lats.min, lats.max)), + transform = CDORemapper, transform_extra_cells = 2, + transform_params = list(grid = grid, method = 'con', crop = region), + transform_vars = c('lat','lon'), + return_vars = list(lat = NULL, lon = NULL), + synonims = list(lon = c('lon','longitude'), + lat = c('lat','latitude')), + lat_reorder = Sort(decreasing = FALSE), + lon_reorder = CircularSort(0,359.9), + num_procs = 1, retrieve = TRUE) + + mask <- list(mask = drop(data), + lon = as.numeric(attr(data,'Variables')$common$lon), + lat = as.numeric(attr(data,'Variables')$common$lat)) + + mask$mask[data <= 0.5] <- sea_value + mask$mask[data > 0.5] <- land_value + names(dim(mask$mask)) <- c(lon_dim, lat_dim) + + return(mask) +} diff --git a/modules/Loading/helper_loading_decadal.R b/modules/Loading/helper_loading_decadal.R index f4f1ec32..b93f3279 100644 --- a/modules/Loading/helper_loading_decadal.R +++ b/modules/Loading/helper_loading_decadal.R @@ -106,22 +106,36 @@ correct_daily_for_leap <- function(data = NULL, time_attr, return_time = TRUE) { #========================================== # This function generates the path for Start() call. It shouldn't be needed when Start() is improved. +# table, grid, version: A list with variables as name. E.g., list(tas = 'Amon') get_dcpp_path <- function(archive, exp.name, table, grid, version, sdates) { # Define path (monthly and daily) multi_path <- FALSE if (is.null(archive$System[[exp.name]]$src$first_dcppB_syear) | isTRUE(all(sdates < archive$System[[exp.name]]$src$first_dcppB_syear))) { # only dcppA - fcst.path <- file.path(archive$src, archive$System[[exp.name]]$src$hcst, - '$ensemble$', table, '$var$', grid, version) - fcst.files <- paste0('$var$_', table, '_*_dcppA-hindcast_s$syear$-$ensemble$_', grid, '_$chunk$.nc') + if (length(table) == 1) { # only one variable + fcst.path <- file.path(archive$src, archive$System[[exp.name]]$src$hcst, + '$ensemble$', table, '$var$', grid, version) + fcst.files <- paste0('$var$_', table, '_*_dcppA-hindcast_s$syear$-$ensemble$_', grid, '_$chunk$.nc') + } else { # multiple vars + fcst.path <- file.path(archive$src, archive$System[[exp.name]]$src$hcst, + '$ensemble$', '$table$', '$var$', '$grid$', '$version$') + fcst.files <- paste0('$var$_', '$table$', '_*_dcppA-hindcast_s$syear$-$ensemble$_', '$grid$', '_$chunk$.nc') + } path_list <- file.path(fcst.path, fcst.files) } else { if (all(sdates >= archive$System[[exp.name]]$src$first_dcppB_syear)) { # only dcppB - fcst.path <- file.path(archive$src, archive$System[[exp.name]]$src$fcst, - '$ensemble$', table, '$var$', grid) #, version) - fcst.files <- paste0('v*/$var$_', table, '_*_dcppB-forecast_s$syear$-$ensemble$_', grid, '_$chunk$.nc') + if (length(table) == 1) { # only one variable + fcst.path <- file.path(archive$src, archive$System[[exp.name]]$src$fcst, + '$ensemble$', table, '$var$', grid, version) + + fcst.files <- paste0('$var$_', table, '_*_dcppB-forecast_s$syear$-$ensemble$_', grid, '_$chunk$.nc') + } else { + fcst.path <- file.path(archive$src, archive$System[[exp.name]]$src$fcst, + '$ensemble$', '$table$', '$var$', '$grid$', '$version$') + fcst.files <- paste0('$var$_', '$table$', '_*_dcppB-forecast_s$syear$-$ensemble$_', '$grid$', '_$chunk$.nc') + } path_list <- file.path(fcst.path, fcst.files) } else { # have both dcppA and dcppB diff --git a/modules/Saving/R/Utils.R b/modules/Saving/R/Utils.R index 9ff695a6..a5bd5d0c 100644 --- a/modules/Saving/R/Utils.R +++ b/modules/Saving/R/Utils.R @@ -34,7 +34,7 @@ dim(time) <- length(time) sdate <- as.Date(sdate, format = '%Y%m%d') # reformatting metadata <- list(time = list(units = paste0(ref, sdate, 'T00:00:00'), - calendar = calendar)) + calendar = calendar)) attr(time, 'variables') <- metadata names(dim(time)) <- 'time' diff --git a/modules/Saving/R/get_dir.R b/modules/Saving/R/get_dir.R index ac633968..915c3f11 100644 --- a/modules/Saving/R/get_dir.R +++ b/modules/Saving/R/get_dir.R @@ -1,16 +1,14 @@ ## TODO: Separate by time aggregation -## TODO: Build a default path that accounts for: -## variable, system, reference, start date and region name -get_dir <- function(recipe, agg = "global") { +get_dir <- function(recipe, variable, agg = "global") { # This function builds the path for the output directory. The output # directories will be subdirectories within outdir, organized by variable, # startdate, and aggregation. ## TODO: Get aggregation from recipe + ## TODO: Change variable name to s2dv_cube name + # variable <- strsplit(recipe$Analysis$Variables$name, ", | |,")[[1]] outdir <- recipe$Run$output_dir - ## TODO: multivar case - variable <- recipe$Analysis$Variables$name system <- gsub('.','', recipe$Analysis$Datasets$System$name, fixed = T) if (tolower(recipe$Analysis$Output_format) == 'scorecards') { @@ -23,18 +21,18 @@ get_dir <- function(recipe, agg = "global") { # Get startdate or hindcast period if (!is.null(recipe$Analysis$Time$fcst_year)) { if (tolower(recipe$Analysis$Horizon) == 'decadal') { - # decadal doesn't have sdate + ## PROBLEM: decadal doesn't have sdate fcst.sdate <- paste0(recipe$Analysis$Time$fcst_year, collapse = '_') } else { fcst.sdate <- paste0(recipe$Analysis$Time$fcst_year, - recipe$Analysis$Time$sdate) + recipe$Analysis$Time$sdate) } } else { if (tolower(recipe$Analysis$Horizon) == 'decadal') { - # decadal doesn't have sdate + ## PROBLEM: decadal doesn't have sdate fcst.sdate <- paste0("hcst-", paste(recipe$Analysis$Time$hcst_start, - recipe$Analysis$Time$hcst_end, - sep = '_')) + recipe$Analysis$Time$hcst_end, + sep = '_')) } else { fcst.sdate <- paste0("hcst-", recipe$Analysis$Time$sdate) } @@ -43,15 +41,18 @@ get_dir <- function(recipe, agg = "global") { calib.method <- tolower(recipe$Analysis$Workflow$Calibration$method) store.freq <- recipe$Analysis$Variables$freq ## TODO: Change "_country" + if (!is.null(recipe$Analysis$Region$name)) { + outdir <- paste0(outdir, "/", recipe$Analysis$Region$name) + } switch(tolower(agg), - "country" = {dir <- paste0(outdir, "/", system, "/", calib.method, - "-", store.freq, "/", variable, - "_country/", fcst.sdate, "/")}, - "global" = {dir <- paste0(outdir, "/", system, "/", calib.method, - "-", store.freq, "/", variable, "/", - fcst.sdate, "/")}) + "country" = {dir <- paste0(outdir, "/", system, "/", calib.method, + "-", store.freq, "/", variable, + "_country/", fcst.sdate, "/")}, + "global" = {dir <- paste0(outdir, "/", system, "/", calib.method, + "-", store.freq, "/", variable, "/", + fcst.sdate, "/")}) } - ## TODO: Multivar case - dir.create(dir, showWarnings = FALSE, recursive = TRUE) + ## TODO: Dir creation? + return(dir) } diff --git a/modules/Saving/R/save_corr.R b/modules/Saving/R/save_corr.R index 8b945318..65349acd 100644 --- a/modules/Saving/R/save_corr.R +++ b/modules/Saving/R/save_corr.R @@ -10,11 +10,6 @@ save_corr <- function(recipe, dictionary <- read_yaml("conf/variable-dictionary.yml") # Define grid dimensions and names lalo <- c('longitude', 'latitude') - # Remove singleton dimensions and rearrange lon, lat and time dims - if (tolower(agg) == "global") { - skill <- lapply(skill, function(x) { - Reorder(x, c(lalo, 'ensemble', 'time'))}) - } # Add global and variable attributes global_attributes <- .get_global_attributes(recipe, archive) ## TODO: Sort out the logic once default behavior is decided @@ -26,27 +21,6 @@ save_corr <- function(recipe, global_attributes <- c(global_attributes, list(from_anomalies = "No")) } - attr(skill[[1]], 'global_attrs') <- global_attributes - - for (i in 1:length(skill)) { - metric <- names(skill[i]) - long_name <- dictionary$metrics[[metric]]$long_name - missing_val <- -9.e+33 - skill[[i]][is.na(skill[[i]])] <- missing_val - if (tolower(agg) == "country") { - sdname <- paste0(metric, " region-aggregated metric") - dims <- c('Country', 'ensemble', 'time') - } else { - sdname <- paste0(metric) #, " grid point metric") # formerly names(metric) - dims <- c(lalo, 'ensemble', 'time') - } - metadata <- list(metric = list(name = metric, - standard_name = sdname, - long_name = long_name, - missing_value = missing_val)) - attr(skill[[i]], 'variables') <- metadata - names(dim(skill[[i]])) <- dims - } # Time indices and metadata fcst.horizon <- tolower(recipe$Analysis$Horizon) @@ -55,7 +29,7 @@ save_corr <- function(recipe, # Generate vector containing leadtimes dates <- as.PCICt(ClimProjDiags::Subset(data_cube$attrs$Dates, 'syear', 1), - cal = calendar) + cal = calendar) if (fcst.horizon == 'decadal') { init_month <- archive$System[[recipe$Analysis$Datasets$System$name]]$initial_month init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, '-', @@ -92,26 +66,62 @@ save_corr <- function(recipe, times <- .get_times(store.freq, fcst.horizon, leadtimes, fcst.sdate, calendar) time <- times$time - # Generate name of output file - if (is.null(outdir)) { - outdir <- get_dir(recipe) - } - outfile <- get_filename(outdir, recipe, data_cube$attrs$Variable$varName, - fcst.sdate, agg, "corr") + # Loop over variable dimension + for (var in 1:data_cube$dims[['var']]) { + # Subset skill arrays + subset_skill <- lapply(skill, function(x) { + ClimProjDiags::Subset(x, along = 'var', + indices = var, + drop = 'selected')}) - # Get grid data and metadata and export to netCDF - if (tolower(agg) == "country") { - country <- .get_countries(grid) - ArrayToNc(append(country, time, skill), outfile) - } else { - latitude <- data_cube$coords$lat[1:length(data_cube$coords$lat)] - longitude <- data_cube$coords$lon[1:length(data_cube$coords$lon)] - latlon <- .get_latlon(latitude, longitude) - # Compile variables into a list and export to netCDF - vars <- list(latlon$lat, latlon$lon, time) - vars <- c(vars, skill) - ArrayToNc(vars, outfile) + # Generate name of output file + variable <- data_cube$attrs$Variable$varName[[var]] + outdir <- get_dir(recipe = recipe, variable = variable) + if (!dir.exists(outdir)) { + dir.create(outdir, recursive = T) + } + outfile <- get_filename(outdir, recipe, variable, + fcst.sdate, agg, "corr") + # Remove singleton dimensions and rearrange lon, lat and time dims + if (tolower(agg) == "global") { + subset_skill <- lapply(subset_skill, function(x) { + Reorder(x, c(lalo, 'ensemble', 'time'))}) + } + attr(subset_skill[[1]], 'global_attrs') <- global_attributes + + for (i in 1:length(subset_skill)) { + metric <- names(subset_skill[i]) + long_name <- dictionary$metrics[[metric]]$long_name + missing_val <- -9.e+33 + skill[[i]][is.na(subset_skill[[i]])] <- missing_val + if (tolower(agg) == "country") { + sdname <- paste0(metric, " region-aggregated metric") + dims <- c('Country', 'ensemble', 'time') + } else { + sdname <- paste0(metric) #, " grid point metric") # formerly names(metric) + dims <- c(lalo, 'ensemble', 'time') + } + metadata <- list(metric = list(name = metric, + standard_name = sdname, + long_name = long_name, + missing_value = missing_val)) + attr(skill[[i]], 'variables') <- metadata + names(dim(skill[[i]])) <- dims + } + # Get grid data and metadata and export to netCDF + if (tolower(agg) == "country") { + country <- .get_countries(grid) + ArrayToNc(append(country, time, subset_skill), outfile) + } else { + latitude <- data_cube$coords$lat[1:length(data_cube$coords$lat)] + longitude <- data_cube$coords$lon[1:length(data_cube$coords$lon)] + latlon <- .get_latlon(latitude, longitude) + # Compile variables into a list and export to netCDF + vars <- list(latlon$lat, latlon$lon, time) + vars <- c(vars, subset_skill) + ArrayToNc(vars, outfile) + } + info(recipe$Run$logger, + "##### ENSEMBLE CORRELATION SAVED TO NETCDF FILE #####") } - info(recipe$Run$logger, - "##### ENSEMBLE CORRELATION SAVED TO NETCDF FILE #####") } diff --git a/modules/Saving/R/save_forecast.R b/modules/Saving/R/save_forecast.R index 9ec8499c..07fdddf7 100644 --- a/modules/Saving/R/save_forecast.R +++ b/modules/Saving/R/save_forecast.R @@ -13,17 +13,11 @@ save_forecast <- function(recipe, lalo <- c('longitude', 'latitude') archive <- get_archive(recipe) dictionary <- read_yaml("conf/variable-dictionary.yml") - variable <- data_cube$attrs$Variable$varName - var.longname <- data_cube$attrs$Variable$metadata[[variable]]$long_name global_attributes <- .get_global_attributes(recipe, archive) fcst.horizon <- tolower(recipe$Analysis$Horizon) store.freq <- recipe$Analysis$Variables$freq calendar <- archive$System[[global_attributes$system]]$calendar - if (is.null(outdir)) { - outdir <- get_dir(recipe) - } - # Generate vector containing leadtimes dates <- as.PCICt(ClimProjDiags::Subset(data_cube$attrs$Dates, 'syear', 1), cal = calendar) @@ -55,83 +49,99 @@ save_forecast <- function(recipe, } # Get time difference in hours leadtimes <- as.numeric(dates - init_date)/3600 - + syears <- seq(1:dim(data_cube$data)['syear'][[1]]) # expect dim = [sday = 1, sweek = 1, syear, time] syears_val <- lubridate::year(data_cube$attrs$Dates[1, 1, , 1]) - for (i in syears) { - # Select year from array and rearrange dimensions - fcst <- ClimProjDiags::Subset(data_cube$data, 'syear', i, drop = T) + + # Loop over variables + for (var in 1:data_cube$dims[['var']]) { + subset_cube <- CST_Subset(data_cube, along = 'var', indices = var, + drop = F, var_dim = 'var', dat_dim = 'dat') + variable <- subset_cube$attrs$Variable$varName + var.longname <- subset_cube$attrs$Variable$metadata[[variable]]$long_name - if (!("time" %in% names(dim(fcst)))) { - dim(fcst) <- c("time" = 1, dim(fcst)) - } - if (tolower(agg) == "global") { - fcst <- list(Reorder(fcst, c(lalo, 'ensemble', 'time'))) - } else { - fcst <- list(Reorder(fcst, c('country', 'ensemble', 'time'))) + # Create output directory + outdir <- get_dir(recipe = recipe, variable = variable) + if (!dir.exists(outdir)) { + dir.create(outdir, recursive = T) } - # Add metadata - var.sdname <- dictionary$vars[[variable]]$standard_name - if (tolower(agg) == "country") { - dims <- c('Country', 'ensemble', 'time') - var.expname <- paste0(variable, '_country') - var.longname <- paste0("Country-Aggregated ", var.longname) - var.units <- attr(data_cube$Variable, 'variable')$units - } else { - dims <- c(lalo, 'ensemble', 'time') - var.expname <- variable - var.sdname <- var.sdname - var.units <- data_cube$attrs$Variable$metadata[[variable]]$units - } + # Loop over each year in the data and save independently + for (i in syears) { + # Select year from array and rearrange dimensions + fcst <- ClimProjDiags::Subset(subset_cube$data, 'syear', i, drop = T) - metadata <- list(fcst = list(name = var.expname, - standard_name = var.sdname, - long_name = var.longname, - units = var.units)) - attr(fcst[[1]], 'variables') <- metadata - names(dim(fcst[[1]])) <- dims - # Add global attributes - attr(fcst[[1]], 'global_attrs') <- global_attributes + if (!("time" %in% names(dim(fcst)))) { + dim(fcst) <- c("time" = 1, dim(fcst)) + } + if (tolower(agg) == "global") { + fcst <- list(Reorder(fcst, c(lalo, 'ensemble', 'time'))) + } else { + fcst <- list(Reorder(fcst, c('country', 'ensemble', 'time'))) + } + + # Add metadata + var.sdname <- dictionary$vars[[variable]]$standard_name + if (tolower(agg) == "country") { + dims <- c('Country', 'ensemble', 'time') + var.expname <- paste0(variable, '_country') + var.longname <- paste0("Country-Aggregated ", var.longname) + var.units <- subset_cube$attrs$Variable$metadata[[variable]]$units + } else { + dims <- c(lalo, 'ensemble', 'time') + var.expname <- variable + var.sdname <- var.sdname + var.units <- subset_cube$attrs$Variable$metadata[[variable]]$units + } - # Select start date - if (fcst.horizon == 'decadal') { - ## NOTE: Not good to use data_cube$load_parameters$dat1 because decadal - ## data has been reshaped - # fcst.sdate <- format(as.Date(data_cube$Dates$start[i]), '%Y%m%d') - - # init_date is like "1990-11-01" - init_date <- as.POSIXct(init_date) - fcst.sdate <- init_date + lubridate::years(syears_val[i] - lubridate::year(init_date)) - fcst.sdate <- format(fcst.sdate, '%Y%m%d') - - } else { - fcst.sdate <- data_cube$attrs$load_parameters$dat1$file_date[[1]][i] - } - - # Get time dimension values and metadata - times <- .get_times(store.freq, fcst.horizon, leadtimes, fcst.sdate, calendar) - time <- times$time - - # Generate name of output file - outfile <- get_filename(outdir, recipe, data_cube$attrs$Variable$varName, - fcst.sdate, agg, "exp") + metadata <- list(fcst = list(name = var.expname, + standard_name = var.sdname, + long_name = var.longname, + units = var.units)) + attr(fcst[[1]], 'variables') <- metadata + names(dim(fcst[[1]])) <- dims + # Add global attributes + attr(fcst[[1]], 'global_attrs') <- global_attributes + + # Select start date + if (fcst.horizon == 'decadal') { + ## NOTE: Not good to use data_cube$load_parameters$dat1 because decadal + ## data has been reshaped + # fcst.sdate <- format(as.Date(data_cube$Dates$start[i]), '%Y%m%d') - # Get grid data and metadata and export to netCDF - if (tolower(agg) == "country") { - country <- get_countries(grid) - ArrayToNc(append(country, time, fcst), outfile) - } else { - latitude <- data_cube$coords$lat[1:length(data_cube$coords$lat)] - longitude <- data_cube$coords$lon[1:length(data_cube$coords$lon)] - latlon <- .get_latlon(latitude, longitude) - # Compile variables into a list and export to netCDF - vars <- list(latlon$lat, latlon$lon, time) - vars <- c(vars, fcst) - ArrayToNc(vars, outfile) + # init_date is like "1990-11-01" + init_date <- as.POSIXct(init_date) + fcst.sdate <- init_date + lubridate::years(syears_val[i] - lubridate::year(init_date)) + fcst.sdate <- format(fcst.sdate, '%Y%m%d') + + } else { + fcst.sdate <- data_cube$attrs$load_parameters$dat1$file_date[[1]][i] + } + + # Get time dimension values and metadata + times <- .get_times(store.freq, fcst.horizon, leadtimes, fcst.sdate, calendar) + time <- times$time + + # Generate name of output file + outfile <- get_filename(outdir, recipe, variable, fcst.sdate, + agg, "exp") + + # Get grid data and metadata and export to netCDF + if (tolower(agg) == "country") { + country <- get_countries(grid) + ArrayToNc(append(country, time, fcst), outfile) + } else { + latitude <- data_cube$coords$lat[1:length(data_cube$coords$lat)] + longitude <- data_cube$coords$lon[1:length(data_cube$coords$lon)] + latlon <- .get_latlon(latitude, longitude) + # Compile variables into a list and export to netCDF + vars <- list(latlon$lat, latlon$lon, time) + vars <- c(vars, fcst) + ArrayToNc(vars, outfile) + } } + info(recipe$Run$logger, paste("#####", toupper(type), + "SAVED TO NETCDF FILE #####")) } - info(recipe$Run$logger, paste("#####", toupper(type), - "SAVED TO NETCDF FILE #####")) } diff --git a/modules/Saving/R/save_metrics.R b/modules/Saving/R/save_metrics.R index d48d9d8d..609537c0 100644 --- a/modules/Saving/R/save_metrics.R +++ b/modules/Saving/R/save_metrics.R @@ -11,12 +11,6 @@ save_metrics <- function(recipe, archive <- get_archive(recipe) dictionary <- read_yaml("conf/variable-dictionary.yml") - - # Remove singleton dimensions and rearrange lon, lat and time dims - if (tolower(agg) == "global") { - skill <- lapply(skill, function(x) { - Reorder(x, c(lalo, 'time'))}) - } # Add global and variable attributes global_attributes <- .get_global_attributes(recipe, archive) ## TODO: Sort out the logic once default behavior is decided @@ -28,27 +22,6 @@ save_metrics <- function(recipe, global_attributes <- c(list(from_anomalies = "No"), global_attributes) } - attr(skill[[1]], 'global_attrs') <- global_attributes - - for (i in 1:length(skill)) { - metric <- names(skill[i]) - long_name <- dictionary$metrics[[metric]]$long_name - missing_val <- -9.e+33 - skill[[i]][is.na(skill[[i]])] <- missing_val - if (tolower(agg) == "country") { - sdname <- paste0(metric, " region-aggregated metric") - dims <- c('Country', 'time') - } else { - sdname <- paste0(metric) #, " grid point metric") - dims <- c(lalo, 'time') - } - metadata <- list(metric = list(name = metric, - standard_name = sdname, - long_name = long_name, - missing_value = missing_val)) - attr(skill[[i]], 'variables') <- metadata - names(dim(skill[[i]])) <- dims - } # Time indices and metadata fcst.horizon <- tolower(recipe$Analysis$Horizon) @@ -57,13 +30,13 @@ save_metrics <- function(recipe, # Generate vector containing leadtimes dates <- as.PCICt(ClimProjDiags::Subset(data_cube$attrs$Dates, 'syear', 1), - cal = calendar) + cal = calendar) if (fcst.horizon == 'decadal') { init_month <- archive$System[[recipe$Analysis$Datasets$System$name]]$initial_month init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, '-', sprintf('%02d', init_month), '-01'), - cal = calendar) + cal = calendar) } else { init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, recipe$Analysis$Time$sdate), @@ -95,25 +68,60 @@ save_metrics <- function(recipe, times <- .get_times(store.freq, fcst.horizon, leadtimes, fcst.sdate, calendar) time <- times$time - # Generate name of output file - if (is.null(outdir)) { - outdir <- get_dir(recipe) - } - outfile <- get_filename(outdir, recipe, data_cube$attrs$Variable$varName, - fcst.sdate, agg, "skill") + # Loop over variable dimension + for (var in 1:data_cube$dims[['var']]) { + # Subset skill arrays + subset_skill <- lapply(skill, function(x) { + ClimProjDiags::Subset(x, along = 'var', + indices = var, + drop = 'selected')}) + # Generate name of output file + variable <- data_cube$attrs$Variable$varName[[var]] + outdir <- get_dir(recipe = recipe, variable = variable) + if (!dir.exists(outdir)) { + dir.create(outdir, recursive = T) + } + outfile <- get_filename(outdir, recipe, variable, + fcst.sdate, agg, "skill") + # Remove singleton dimensions and rearrange lon, lat and time dims + if (tolower(agg) == "global") { + subset_skill <- lapply(subset_skill, function(x) { + Reorder(x, c(lalo, 'time'))}) + } + attr(subset_skill[[1]], 'global_attrs') <- global_attributes - # Get grid data and metadata and export to netCDF - if (tolower(agg) == "country") { - country <- get_countries(grid) - ArrayToNc(append(country, time, skill), outfile) - } else { - latitude <- data_cube$coords$lat[1:length(data_cube$coords$lat)] - longitude <- data_cube$coords$lon[1:length(data_cube$coords$lon)] - latlon <- .get_latlon(latitude, longitude) - # Compile variables into a list and export to netCDF - vars <- list(latlon$lat, latlon$lon, time) - vars <- c(vars, skill) - ArrayToNc(vars, outfile) + for (i in 1:length(subset_skill)) { + metric <- names(subset_skill[i]) + long_name <- dictionary$metrics[[metric]]$long_name + missing_val <- -9.e+33 + subset_skill[[i]][is.na(subset_skill[[i]])] <- missing_val + if (tolower(agg) == "country") { + sdname <- paste0(metric, " region-aggregated metric") + dims <- c('Country', 'time') + } else { + sdname <- paste0(metric) + dims <- c(lalo, 'time') + } + metadata <- list(metric = list(name = metric, + standard_name = sdname, + long_name = long_name, + missing_value = missing_val)) + attr(subset_skill[[i]], 'variables') <- metadata + names(dim(subset_skill[[i]])) <- dims + } + # Get grid data and metadata and export to netCDF + if (tolower(agg) == "country") { + country <- get_countries(grid) + ArrayToNc(append(country, time, subset_skill), outfile) + } else { + latitude <- data_cube$coords$lat[1:length(data_cube$coords$lat)] + longitude <- data_cube$coords$lon[1:length(data_cube$coords$lon)] + latlon <- .get_latlon(latitude, longitude) + # Compile variables into a list and export to netCDF + vars <- list(latlon$lat, latlon$lon, time) + vars <- c(vars, subset_skill) + ArrayToNc(vars, outfile) + } + info(recipe$Run$logger, "##### SKILL METRICS SAVED TO NETCDF FILE #####") } - info(recipe$Run$logger, "##### SKILL METRICS SAVED TO NETCDF FILE #####") } diff --git a/modules/Saving/R/save_observations.R b/modules/Saving/R/save_observations.R index dcaf0765..fcf91d2f 100644 --- a/modules/Saving/R/save_observations.R +++ b/modules/Saving/R/save_observations.R @@ -12,30 +12,24 @@ save_observations <- function(recipe, lalo <- c('longitude', 'latitude') archive <- get_archive(recipe) dictionary <- read_yaml("conf/variable-dictionary.yml") - variable <- data_cube$attrs$Variable$varName - var.longname <- data_cube$attrs$Variable$metadata[[variable]]$long_name global_attributes <- .get_global_attributes(recipe, archive) fcst.horizon <- tolower(recipe$Analysis$Horizon) store.freq <- recipe$Analysis$Variables$freq calendar <- archive$Reference[[global_attributes$reference]]$calendar - if (is.null(outdir)) { - outdir <- get_dir(recipe) - } - # Generate vector containing leadtimes ## TODO: Move to a separate function? dates <- as.PCICt(ClimProjDiags::Subset(data_cube$attrs$Dates, 'syear', 1), - cal = calendar) + cal = calendar) if (fcst.horizon == 'decadal') { ## Method 1: Use the first date as init_date. But it may be better to use ## the real initialized date (ask users) -# init_date <- as.Date(data_cube$Dates$start[1], format = '%Y%m%d') + # init_date <- as.Date(data_cube$Dates$start[1], format = '%Y%m%d') ## Method 2: use initial month init_month <- archive$System[[recipe$Analysis$Datasets$System$name]]$initial_month init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, '-', sprintf('%02d', init_month), '-01'), - cal = calendar) + cal = calendar) } else { init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, @@ -48,90 +42,104 @@ save_observations <- function(recipe, syears <- seq(1:dim(data_cube$data)['syear'][[1]]) ## expect dim = [sday = 1, sweek = 1, syear, time] syears_val <- lubridate::year(data_cube$attrs$Dates[1, 1, , 1]) - for (i in syears) { - # Select year from array and rearrange dimensions - fcst <- ClimProjDiags::Subset(data_cube$data, 'syear', i, drop = T) - if (!("time" %in% names(dim(fcst)))) { - dim(fcst) <- c("time" = 1, dim(fcst)) - } - if (tolower(agg) == "global") { - fcst <- list(Reorder(fcst, c(lalo, 'time'))) - } else { - fcst <- list(Reorder(fcst, c('country', 'time'))) - } + # Loop over variables + for (var in 1:data_cube$dims[['var']]) { + subset_cube <- CST_Subset(data_cube, along = 'var', indices = var, + drop = F, var_dim = 'var', dat_dim = 'dat') + variable <- subset_cube$attrs$Variable$varName + var.longname <- subset_cube$attrs$Variable$metadata[[variable]]$long_name - # Add metadata - var.sdname <- dictionary$vars[[variable]]$standard_name - if (tolower(agg) == "country") { - dims <- c('Country', 'time') - var.expname <- paste0(variable, '_country') - var.longname <- paste0("Country-Aggregated ", var.longname) - var.units <- data_cube$attrs$Variable$metadata[[variable]]$units - } else { - dims <- c(lalo, 'time') - var.expname <- variable - var.units <- data_cube$attrs$Variable$metadata[[variable]]$units + # Create output directory + outdir <- get_dir(recipe = recipe, variable = variable) + if (!dir.exists(outdir)) { + dir.create(outdir, recursive = T) } - - metadata <- list(fcst = list(name = var.expname, - standard_name = var.sdname, - long_name = var.longname, - units = var.units)) - attr(fcst[[1]], 'variables') <- metadata - names(dim(fcst[[1]])) <- dims - # Add global attributes - attr(fcst[[1]], 'global_attrs') <- global_attributes - - # Select start date. The date is computed for each year, and adapted for - # consistency with the hcst/fcst dates, so that both sets of files have - # the same name pattern. - ## Because observations are loaded differently in the daily vs. monthly - ## cases, different approaches are necessary. - if (fcst.horizon == 'decadal') { - # init_date is like "1990-11-01" - init_date <- as.POSIXct(init_date) - fcst.sdate <- init_date + lubridate::years(syears_val[i] - lubridate::year(init_date)) - } else { + + for (i in syears) { + # Select year from array and rearrange dimensions + fcst <- ClimProjDiags::Subset(subset_cube$data, 'syear', i, drop = T) + if (!("time" %in% names(dim(fcst)))) { + dim(fcst) <- c("time" = 1, dim(fcst)) + } + if (tolower(agg) == "global") { + fcst <- list(Reorder(fcst, c(lalo, 'time'))) + } else { + fcst <- list(Reorder(fcst, c('country', 'time'))) + } - if (store.freq == "monthly_mean") { - fcst.sdate <- data_cube$attrs$load_parameters$dat1$file_date[[1]][i] - fcst.sdate <- as.Date(paste0(fcst.sdate, "01"), '%Y%m%d') + # Add metadata + var.sdname <- dictionary$vars[[variable]]$standard_name + if (tolower(agg) == "country") { + dims <- c('Country', 'time') + var.expname <- paste0(variable, '_country') + var.longname <- paste0("Country-Aggregated ", var.longname) + var.units <- data_cube$attrs$Variable$metadata[[variable]]$units } else { - fcst.sdate <- as.Date(data_cube$attrs$Dates[i]) + dims <- c(lalo, 'time') + var.expname <- variable + var.units <- data_cube$attrs$Variable$metadata[[variable]]$units } - } + + metadata <- list(fcst = list(name = var.expname, + standard_name = var.sdname, + long_name = var.longname, + units = var.units)) + attr(fcst[[1]], 'variables') <- metadata + names(dim(fcst[[1]])) <- dims + # Add global attributes + attr(fcst[[1]], 'global_attrs') <- global_attributes + + # Select start date. The date is computed for each year, and adapted for + # consistency with the hcst/fcst dates, so that both sets of files have + # the same name pattern. + ## Because observations are loaded differently in the daily vs. monthly + ## cases, different approaches are necessary. + if (fcst.horizon == 'decadal') { + # init_date is like "1990-11-01" + init_date <- as.POSIXct(init_date) + fcst.sdate <- init_date + lubridate::years(syears_val[i] - lubridate::year(init_date)) + } else { - # Ensure the year is correct if the first leadtime goes to the next year - init_date <- as.POSIXct(init_date) - if (lubridate::month(fcst.sdate) < lubridate::month(init_date)) { - lubridate::year(fcst.sdate) <- lubridate::year(fcst.sdate) + 1 - } - # Ensure that the initialization month is consistent with the hindcast - lubridate::month(fcst.sdate) <- lubridate::month(init_date) - fcst.sdate <- format(fcst.sdate, format = '%Y%m%d') + if (store.freq == "monthly_mean") { + fcst.sdate <- data_cube$attrs$load_parameters$dat1$file_date[[1]][i] + fcst.sdate <- as.Date(paste0(fcst.sdate, "01"), '%Y%m%d') + } else { + fcst.sdate <- as.Date(data_cube$attrs$Dates[i]) + } + } - # Get time dimension values and metadata - times <- .get_times(store.freq, fcst.horizon, leadtimes, fcst.sdate, calendar) - time <- times$time + # Ensure the year is correct if the first leadtime goes to the next year + init_date <- as.POSIXct(init_date) + if (lubridate::month(fcst.sdate) < lubridate::month(init_date)) { + lubridate::year(fcst.sdate) <- lubridate::year(fcst.sdate) + 1 + } + # Ensure that the initialization month is consistent with the hindcast + lubridate::month(fcst.sdate) <- lubridate::month(init_date) + fcst.sdate <- format(fcst.sdate, format = '%Y%m%d') - # Generate name of output file - outfile <- get_filename(outdir, recipe, data_cube$attrs$Variable$varName, - fcst.sdate, agg, "obs") - - # Get grid data and metadata and export to netCDF - if (tolower(agg) == "country") { - country <- get_countries(grid) - ArrayToNc(append(country, time, fcst), outfile) - } else { - latitude <- data_cube$coords$lat[1:length(data_cube$coords$lat)] - longitude <- data_cube$coords$lon[1:length(data_cube$coords$lon)] - latlon <- .get_latlon(latitude, longitude) - # Compile variables into a list and export to netCDF - vars <- list(latlon$lat, latlon$lon, time) - vars <- c(vars, fcst) - ArrayToNc(vars, outfile) + # Get time dimension values and metadata + times <- .get_times(store.freq, fcst.horizon, leadtimes, fcst.sdate, calendar) + time <- times$time + + # Generate name of output file + outfile <- get_filename(outdir, recipe, variable, + fcst.sdate, agg, "obs") + + # Get grid data and metadata and export to netCDF + if (tolower(agg) == "country") { + country <- get_countries(grid) + ArrayToNc(append(country, time, fcst), outfile) + } else { + latitude <- data_cube$coords$lat[1:length(data_cube$coords$lat)] + longitude <- data_cube$coords$lon[1:length(data_cube$coords$lon)] + latlon <- .get_latlon(latitude, longitude) + # Compile variables into a list and export to netCDF + vars <- list(latlon$lat, latlon$lon, time) + vars <- c(vars, fcst) + ArrayToNc(vars, outfile) + } } + info(recipe$Run$logger, "##### OBS SAVED TO NETCDF FILE #####") } - info(recipe$Run$logger, "##### OBS SAVED TO NETCDF FILE #####") } diff --git a/modules/Saving/R/save_percentiles.R b/modules/Saving/R/save_percentiles.R index b4aab605..68095671 100644 --- a/modules/Saving/R/save_percentiles.R +++ b/modules/Saving/R/save_percentiles.R @@ -6,15 +6,8 @@ save_percentiles <- function(recipe, # This function adds metadata to the percentiles # and exports them to a netCDF file inside 'outdir'. archive <- get_archive(recipe) - # Define grid dimensions and names lalo <- c('longitude', 'latitude') - # Remove singleton dimensions and rearrange lon, lat and time dims - if (tolower(agg) == "global") { - percentiles <- lapply(percentiles, function(x) { - Reorder(x, c(lalo, 'time'))}) - } - # Add global and variable attributes global_attributes <- .get_global_attributes(recipe, archive) ## TODO: Sort out the logic once default behavior is decided @@ -26,21 +19,6 @@ save_percentiles <- function(recipe, global_attributes <- c(list(from_anomalies = "No"), global_attributes) } - attr(percentiles[[1]], 'global_attrs') <- global_attributes - - for (i in 1:length(percentiles)) { - ## TODO: replace with proper standard names - percentile <- names(percentiles[i]) - long_name <- paste0(gsub("^.*_", "", percentile), "th percentile") - if (tolower(agg) == "country") { - dims <- c('Country', 'time') - } else { - dims <- c(lalo, 'time') - } - metadata <- list(metric = list(name = percentile, long_name = long_name)) - attr(percentiles[[i]], 'variables') <- metadata - names(dim(percentiles[[i]])) <- dims - } # Time indices and metadata fcst.horizon <- tolower(recipe$Analysis$Horizon) @@ -83,25 +61,57 @@ save_percentiles <- function(recipe, } times <- .get_times(store.freq, fcst.horizon, leadtimes, fcst.sdate, calendar) time <- times$time + + for (var in 1:data_cube$dims[['var']]) { + # Subset arrays + subset_percentiles <- lapply(percentiles, function(x) { + ClimProjDiags::Subset(x, along = 'var', + indices = var, + drop = 'selected')}) + # Generate name of output file + variable <- data_cube$attrs$Variable$varName[[var]] + outdir <- get_dir(recipe = recipe, variable = variable) + if (!dir.exists(outdir)) { + dir.create(outdir, recursive = T) + } + outfile <- get_filename(outdir, recipe, variable, + fcst.sdate, agg, "percentiles") - # Generate name of output file - if (is.null(outdir)) { - outdir <- get_dir(recipe) - } - outfile <- get_filename(outdir, recipe, data_cube$attrs$Variable$varName, - fcst.sdate, agg, "percentiles") - # Get grid data and metadata and export to netCDF - if (tolower(agg) == "country") { - country <- get_countries(grid) - ArrayToNc(append(country, time, percentiles), outfile) - } else { - latitude <- data_cube$coords$lat[1:length(data_cube$coords$lat)] - longitude <- data_cube$coords$lon[1:length(data_cube$coords$lon)] - latlon <- .get_latlon(latitude, longitude) - # Compile variables into a list and export to netCDF - vars <- list(latlon$lat, latlon$lon, time) - vars <- c(vars, percentiles) - ArrayToNc(vars, outfile) + # Remove singleton dimensions and rearrange lon, lat and time dims + if (tolower(agg) == "global") { + subset_percentiles <- lapply(subset_percentiles, function(x) { + Reorder(x, c(lalo, 'time'))}) + } + + attr(subset_percentiles[[1]], 'global_attrs') <- global_attributes + + for (i in 1:length(subset_percentiles)) { + ## TODO: replace with proper standard names + percentile <- names(subset_percentiles[i]) + long_name <- paste0(gsub("^.*_", "", percentile), "th percentile") + if (tolower(agg) == "country") { + dims <- c('Country', 'time') + } else { + dims <- c(lalo, 'time') + } + metadata <- list(metric = list(name = percentile, long_name = long_name)) + attr(subset_percentiles[[i]], 'variables') <- metadata + names(dim(subset_percentiles[[i]])) <- dims + } + + # Get grid data and metadata and export to netCDF + if (tolower(agg) == "country") { + country <- get_countries(grid) + ArrayToNc(append(country, time, subset_percentiles), outfile) + } else { + latitude <- data_cube$coords$lat[1:length(data_cube$coords$lat)] + longitude <- data_cube$coords$lon[1:length(data_cube$coords$lon)] + latlon <- .get_latlon(latitude, longitude) + # Compile variables into a list and export to netCDF + vars <- list(latlon$lat, latlon$lon, time) + vars <- c(vars, subset_percentiles) + ArrayToNc(vars, outfile) + } + info(recipe$Run$logger, "##### PERCENTILES SAVED TO NETCDF FILE #####") } - info(recipe$Run$logger, "##### PERCENTILES SAVED TO NETCDF FILE #####") } diff --git a/modules/Saving/R/save_probabilities.R b/modules/Saving/R/save_probabilities.R index 20af9be7..974ef7dc 100644 --- a/modules/Saving/R/save_probabilities.R +++ b/modules/Saving/R/save_probabilities.R @@ -16,12 +16,7 @@ save_probabilities <- function(recipe, lalo <- c('longitude', 'latitude') archive <- get_archive(recipe) - variable <- data_cube$attrs$Variable$varName - var.longname <- data_cube$attrs$Variable$metadata[[variable]]$long_name global_attributes <- .get_global_attributes(recipe, archive) - if (is.null(outdir)) { - outdir <- get_dir(recipe) - } # Add anomaly computation to global attributes ## TODO: Sort out the logic once default behavior is decided if ((!is.null(recipe$Analysis$Workflow$Anomalies$compute)) && @@ -39,7 +34,7 @@ save_probabilities <- function(recipe, # Generate vector containing leadtimes ## TODO: Move to a separate function? dates <- as.PCICt(ClimProjDiags::Subset(data_cube$attrs$Dates, 'syear', 1), - cal = calendar) + cal = calendar) if (fcst.horizon == 'decadal') { init_month <- archive$System[[recipe$Analysis$Datasets$System$name]]$initial_month init_date <- as.PCICt(paste0(recipe$Analysis$Time$hcst_start, '-', @@ -57,68 +52,82 @@ save_probabilities <- function(recipe, syears <- seq(1:dim(data_cube$data)['syear'][[1]]) ## expect dim = [sday = 1, sweek = 1, syear, time] syears_val <- lubridate::year(data_cube$attrs$Dates[1, 1, , 1]) - for (i in syears) { - # Select year from array and rearrange dimensions - probs_syear <- lapply(probs, ClimProjDiags::Subset, 'syear', i, drop = 'selected') - if (tolower(agg) == "global") { - probs_syear <- lapply(probs_syear, function(x) { - Reorder(x, c(lalo, 'time'))}) - } else { - probs_syear <- lapply(probs_syear, function(x) { - Reorder(x, c('country', 'time'))}) + + # Loop over variable dimension + for (var in 1:data_cube$dims[['var']]) { + subset_probs <- lapply(probs, function(x) { + ClimProjDiags::Subset(x, along = 'var', + indices = var, + drop = 'selected')}) + # Create output directory + variable <- data_cube$attrs$Variable$varName[[var]] + outdir <- get_dir(recipe = recipe, variable = variable) + if (!dir.exists(outdir)) { + dir.create(outdir, recursive = T) } - ## TODO: Replace for loop with something more efficient? - for (bin in 1:length(probs_syear)) { - prob_bin <- names(probs_syear[bin]) - long_name <- paste0(prob_bin, " probability category") - if (tolower(agg) == "country") { - dims <- c('Country', 'time') + # Loop over each year in the data and save independently + for (i in syears) { + # Select year from array and rearrange dimensions + probs_syear <- lapply(subset_probs, ClimProjDiags::Subset, 'syear', i, drop = 'selected') + if (tolower(agg) == "global") { + probs_syear <- lapply(probs_syear, function(x) { + Reorder(x, c(lalo, 'time'))}) } else { - dims <- c(lalo, 'time') + probs_syear <- lapply(probs_syear, function(x) { + Reorder(x, c('country', 'time'))}) } - metadata <- list(metric = list(name = prob_bin, long_name = long_name)) - attr(probs_syear[[bin]], 'variables') <- metadata - names(dim(probs_syear[[bin]])) <- dims # is this necessary? - } - # Add global attributes - attr(probs_syear[[1]], 'global_attrs') <- global_attributes - - # Select start date - if (fcst.horizon == 'decadal') { - # init_date is like "1990-11-01" - init_date <- as.POSIXct(init_date) - fcst.sdate <- init_date + lubridate::years(syears_val[i] - lubridate::year(init_date)) - fcst.sdate <- format(fcst.sdate, '%Y%m%d') - } else { - fcst.sdate <- data_cube$attrs$load_parameters$dat1$file_date[[1]][i] - } + for (bin in 1:length(probs_syear)) { + prob_bin <- names(probs_syear[bin]) + long_name <- paste0(prob_bin, " probability category") + if (tolower(agg) == "country") { + dims <- c('Country', 'time') + } else { + dims <- c(lalo, 'time') + } + metadata <- list(metric = list(name = prob_bin, long_name = long_name)) + attr(probs_syear[[bin]], 'variables') <- metadata + names(dim(probs_syear[[bin]])) <- dims # is this necessary? + } - # Get time dimension values and metadata - times <- .get_times(store.freq, fcst.horizon, leadtimes, fcst.sdate, calendar) - time <- times$time + # Add global attributes + attr(probs_syear[[1]], 'global_attrs') <- global_attributes + + # Select start date + if (fcst.horizon == 'decadal') { + # init_date is like "1990-11-01" + init_date <- as.POSIXct(init_date) + fcst.sdate <- init_date + lubridate::years(syears_val[i] - lubridate::year(init_date)) + fcst.sdate <- format(fcst.sdate, '%Y%m%d') + } else { + fcst.sdate <- data_cube$attrs$load_parameters$dat1$file_date[[1]][i] + } + + # Get time dimension values and metadata + times <- .get_times(store.freq, fcst.horizon, leadtimes, fcst.sdate, calendar) + time <- times$time - # Generate name of output file - outfile <- get_filename(outdir, recipe, data_cube$attrs$Variable$varName, - fcst.sdate, agg, "probs") - - # Get grid data and metadata and export to netCDF - if (tolower(agg) == "country") { - country <- get_countries(grid) - ArrayToNc(append(country, time, probs_syear), outfile) - } else { - latitude <- data_cube$coords$lat[1:length(data_cube$coords$lat)] - longitude <- data_cube$coords$lon[1:length(data_cube$coords$lon)] - latlon <- .get_latlon(latitude, longitude) - # Compile variables into a list and export to netCDF - vars <- list(latlon$lat, latlon$lon, time) - vars <- c(vars, probs_syear) - ArrayToNc(vars, outfile) + # Generate name of output file + outfile <- get_filename(outdir, recipe, data_cube$attrs$Variable$varName, + fcst.sdate, agg, "probs") + + # Get grid data and metadata and export to netCDF + if (tolower(agg) == "country") { + country <- get_countries(grid) + ArrayToNc(append(country, time, probs_syear), outfile) + } else { + latitude <- data_cube$coords$lat[1:length(data_cube$coords$lat)] + longitude <- data_cube$coords$lon[1:length(data_cube$coords$lon)] + latlon <- .get_latlon(latitude, longitude) + # Compile variables into a list and export to netCDF + vars <- list(latlon$lat, latlon$lon, time) + vars <- c(vars, probs_syear) + ArrayToNc(vars, outfile) + } } + info(recipe$Run$logger, + paste("#####", toupper(type), + "PROBABILITIES SAVED TO NETCDF FILE #####")) } - - info(recipe$Run$logger, - paste("#####", toupper(type), - "PROBABILITIES SAVED TO NETCDF FILE #####")) } diff --git a/modules/Saving/Saving.R b/modules/Saving/Saving.R index 75c7908c..c52991d3 100644 --- a/modules/Saving/Saving.R +++ b/modules/Saving/Saving.R @@ -1,4 +1,5 @@ ## TODO: Save obs percentiles +## TODO: Insert vardim to simplify the code? source("modules/Saving/R/get_dir.R") source("modules/Saving/R/get_filename.R") @@ -31,24 +32,9 @@ save_data <- function(recipe, data, if (is.null(data)) { error(recipe$Run$logger, paste("The 'data' parameter is mandatory. It should be a list", - "of at least two s2dv_cubes containing the hcst and obs.")) + "of at least two s2dv_cubes containing the hcst and obs.")) stop() } - # Create output directory - outdir <- get_dir(recipe) - dir.create(outdir, showWarnings = FALSE, recursive = TRUE) - - # Export hindcast, forecast and observations onto outfile - save_forecast(recipe = recipe, data_cube = data$hcst, - type = 'hcst', - outdir = outdir) - if (!is.null(data$fcst)) { - save_forecast(recipe = recipe, data_cube = data$fcst, - type = 'fcst', - outdir = outdir) - } - save_observations(recipe = recipe, data_cube = data$obs, - outdir = outdir) # Separate ensemble correlation from the rest of the metrics, as it has one # extra dimension "ensemble" and must be saved to a different file @@ -63,102 +49,51 @@ save_data <- function(recipe, data, corr_metrics <- NULL } - # Export skill metrics onto outfile + # Iterate over variables to subset s2dv_cubes and save outputs + save_forecast(recipe = recipe, + data_cube = data$hcst, + outdir = outdir[var], + type = 'hcst') + if (!is.null(data$fcst)) { + save_forecast(recipe = recipe, + data_cube = data$fcst, + outdir = outdir[var], + type = 'fcst') + } + save_observations(recipe = recipe, + data_cube = data$obs, + outdir = outdir[var]) + + # Export skill metrics if (!is.null(skill_metrics)) { - save_metrics(recipe = recipe, skill = skill_metrics, - data_cube = data$hcst, - outdir = outdir) + save_metrics(recipe = recipe, + skill = skill_metrics, + data_cube = data$hcst, + outdir = outdir[var]) } if (!is.null(corr_metrics)) { - save_corr(recipe = recipe, skill = corr_metrics, + save_corr(recipe = recipe, + skill = corr_metrics, data_cube = data$hcst, - outdir = outdir) - } - + outdir = outdir[var]) # Export probabilities onto outfile if (!is.null(probabilities)) { - save_percentiles(recipe = recipe, percentiles = probabilities$percentiles, - data_cube = data$hcst, - outdir = outdir) - save_probabilities(recipe = recipe, probs = probabilities$probs, + save_percentiles(recipe = recipe, + percentiles = probabilities$percentiles, data_cube = data$hcst, - type = "hcst", - outdir = outdir) - if (!is.null(probabilities$probs_fcst)) { - save_probabilities(recipe = recipe, probs = probabilities$probs_fcst, - data_cube = data$fcst, - type = "fcst", - outdir = outdir) + outdir = outdir[var]) + save_probabilities(recipe = recipe, + probs = probabilities$probs, + data_cube = data$hcst, + outdir = outdir[var], + type = "hcst") + if (!is.null(probabilities$probs_fcst)) { + save_probabilities(recipe = recipe, + probs = probabilities$probs_fcst, + data_cube = data$fcst, + outdir = outdir[var], + type = "fcst") + } } } } - -get_global_attributes <- function(recipe, archive) { - # Generates metadata of interest to add to the global attributes of the - # netCDF files. - parameters <- recipe$Analysis - hcst_period <- paste0(parameters$Time$hcst_start, " to ", - parameters$Time$hcst_end) - current_time <- paste0(as.character(Sys.time()), " ", Sys.timezone()) - system_name <- parameters$Datasets$System$name - reference_name <- parameters$Datasets$Reference$name - - attrs <- list(reference_period = hcst_period, - institution_system = archive$System[[system_name]]$institution, - institution_reference = archive$Reference[[reference_name]]$institution, - system = system_name, - reference = reference_name, - calibration_method = parameters$Workflow$Calibration$method, - computed_on = current_time) - - return(attrs) -} - -get_times <- function(store.freq, fcst.horizon, leadtimes, sdate, calendar) { - # Generates time dimensions and the corresponding metadata. - ## TODO: Subseasonal - - switch(fcst.horizon, - "seasonal" = {time <- leadtimes; ref <- 'hours since '; - stdname <- paste(strtoi(leadtimes), collapse=", ")}, - "subseasonal" = {len <- 4; ref <- 'hours since '; - stdname <- ''}, - "decadal" = {time <- leadtimes; ref <- 'hours since '; - stdname <- paste(strtoi(leadtimes), collapse=", ")}) - - dim(time) <- length(time) - sdate <- as.Date(sdate, format = '%Y%m%d') # reformatting - metadata <- list(time = list(units = paste0(ref, sdate, 'T00:00:00'), - calendar = calendar)) - attr(time, 'variables') <- metadata - names(dim(time)) <- 'time' - - sdate <- 1:length(sdate) - dim(sdate) <- length(sdate) - metadata <- list(sdate = list(standard_name = paste(strtoi(sdate), - collapse=", "), - units = paste0('Init date'))) - attr(sdate, 'variables') <- metadata - names(dim(sdate)) <- 'sdate' - - return(list(time=time)) -} - -get_latlon <- function(latitude, longitude) { - # Adds dimensions and metadata to lat and lon - # latitude: array containing the latitude values - # longitude: array containing the longitude values - - dim(longitude) <- length(longitude) - metadata <- list(longitude = list(units = 'degrees_east')) - attr(longitude, 'variables') <- metadata - names(dim(longitude)) <- 'longitude' - - dim(latitude) <- length(latitude) - metadata <- list(latitude = list(units = 'degrees_north')) - attr(latitude, 'variables') <- metadata - names(dim(latitude)) <- 'latitude' - - return(list(lat=latitude, lon=longitude)) - -} diff --git a/modules/Skill/Skill.R b/modules/Skill/Skill.R index 7eb44321..f22d6b9b 100644 --- a/modules/Skill/Skill.R +++ b/modules/Skill/Skill.R @@ -425,11 +425,11 @@ compute_probabilities <- function(recipe, data) { named_quantiles <- lapply(named_quantiles, function(x) {.drop_dims(x)}) if (!is.null(data$fcst)) { fcst_years <- dim(data$fcst$data)[['syear']] - named_probs_fcst <- lapply(named_probs_fcst, - function(x) {Subset(x, - along = 'syear', - indices = 1:fcst_years, - drop = 'non-selected')}) + named_probs_fcst <- lapply(named_probs_fcst, function(x) {.drop_dims(x)}) + # function(x) {Subset(x, + # along = 'syear', + # indices = 1:fcst_years, + # drop = 'non-selected')}) results <- list(probs = named_probs, probs_fcst = named_probs_fcst, percentiles = named_quantiles) @@ -464,20 +464,21 @@ compute_probabilities <- function(recipe, data) { } } -## TODO: Replace with ClimProjDiags::Subset .drop_dims <- function(metric_array) { - # Drop all singleton dimensions - metric_array <- drop(metric_array) - # If time happened to be a singleton dimension, add it back in the array - if (!("time" %in% names(dim(metric_array)))) { - dim(metric_array) <- c("time" = 1, dim(metric_array)) - } + # Define dimensions that are not essential for saving + droppable_dims <- c("dat", "sday", "sweek", "ensemble", "nobs", + "nexp", "exp_memb", "obs_memb", "bin") + # Select non-essential dimensions of length 1 + dims_to_drop <- intersect(names(which(dim(metric_array) == 1)), + droppable_dims) + drop_indices <- grep(paste(dims_to_drop, collapse = "|"), + names(dim(metric_array))) + # Drop selected dimensions + metric_array <- abind::adrop(metric_array, drop = drop_indices) # If array has memb dim (Corr case), change name to 'ensemble' if ("exp_memb" %in% names(dim(metric_array))) { - names(dim(metric_array))[which(names(dim(metric_array)) == + names(dim(metric_array))[which(names(dim(metric_array)) == "exp_memb")] <- "ensemble" - # } else { - # dim(metric_array) <- c(dim(metric_array), "ensemble" = 1) } return(metric_array) } diff --git a/modules/Visualization/R/plot_ensemble_mean.R b/modules/Visualization/R/plot_ensemble_mean.R index e0fa8b84..e3d75138 100644 --- a/modules/Visualization/R/plot_ensemble_mean.R +++ b/modules/Visualization/R/plot_ensemble_mean.R @@ -10,80 +10,72 @@ plot_ensemble_mean <- function(recipe, fcst, outdir) { longitude <- fcst$coords$lon archive <- get_archive(recipe) system_name <- archive$System[[recipe$Analysis$Datasets$System$name]]$name - variable <- recipe$Analysis$Variables$name - units <- attr(fcst$Variable, "variable")$units start_date <- paste0(recipe$Analysis$Time$fcst_year, recipe$Analysis$Time$sdate) # Compute ensemble mean ensemble_mean <- s2dv::MeanDims(fcst$data, 'ensemble') - # Drop extra dims, add time dim if missing: - ensemble_mean <- drop(ensemble_mean) + # Loop over variable dimension + for (var in 1:fcst$dims[['var']]) { + variable <- fcst$attrs$Variable$varName[[var]] + units <- fcst$attrs$Variable$metadata[[variable]]$units + var_ens_mean <- ClimProjDiags::Subset(ensemble_mean, + along = c("dat", "var", + "sday", "sweek"), + indices = list(1, var, 1, 1), + drop = 'selected') - if (!("time" %in% names(dim(ensemble_mean)))) { - dim(ensemble_mean) <- c("time" = 1, dim(ensemble_mean)) - } - if (!'syear' %in% names(dim(ensemble_mean))) { - ensemble_mean <- Reorder(ensemble_mean, c("time", - "longitude", - "latitude")) - } else { - ensemble_mean <- Reorder(ensemble_mean, c("syear", - "time", - "longitude", - "latitude")) - } - ## TODO: Redefine column colors, possibly depending on variable - if (variable == 'prlr') { - palette = "BrBG" - rev = F - } else { - palette = "RdBu" - rev = T - } - # Define brks, centered on in the case of anomalies - ## - if (grepl("anomaly", - fcst$attrs$Variable$metadata[[variable]]$long_name)) { - variable <- paste(variable, "anomaly") - max_value <- max(abs(ensemble_mean)) - ugly_intervals <- seq(-max_value, max_value, max_value/20) - brks <- pretty(ugly_intervals, n = 12, min.n = 8) - } else { - brks <- pretty(range(ensemble_mean, na.rm = T), n = 15, min.n = 8) - } - cols <- grDevices::hcl.colors(length(brks) - 1, palette, rev = rev) - options(bitmapType = "cairo") - - for (i_syear in start_date) { - # Define name of output file and titles - if (length(start_date) == 1) { - i_ensemble_mean <- ensemble_mean - outfile <- paste0(outdir, "forecast_ensemble_mean-", start_date, ".png") + var_ens_mean <- Reorder(var_ens_mean, c("syear", + "time", + "longitude", + "latitude")) + ## TODO: Redefine column colors, possibly depending on variable + if (variable == 'prlr') { + palette = "BrBG" + rev = F } else { - i_ensemble_mean <- ensemble_mean[which(start_date == i_syear), , , ] - outfile <- paste0(outdir, "forecast_ensemble_mean-", i_syear, ".png") + palette = "RdBu" + rev = T + } + # Define brks, centered on in the case of anomalies + ## + if (grepl("anomaly", + fcst$attrs$Variable$metadata[[variable]]$long_name)) { + variable <- paste(variable, "anomaly") + max_value <- max(abs(var_ens_mean)) + ugly_intervals <- seq(-max_value, max_value, max_value/20) + brks <- pretty(ugly_intervals, n = 12, min.n = 8) + } else { + brks <- pretty(range(var_ens_mean, na.rm = T), n = 15, min.n = 8) + } + cols <- grDevices::hcl.colors(length(brks) - 1, palette, rev = rev) + options(bitmapType = "cairo") + + for (i_syear in start_date) { + # Define name of output file and titles + i_var_ens_mean <- var_ens_mean[which(start_date == i_syear), , , ] + outfile <- paste0(outdir[[var]], "forecast_ensemble_mean-", i_syear, ".png") + toptitle <- paste("Forecast Ensemble Mean -", variable, "-", system_name, + "- Initialization:", i_syear) + months <- lubridate::month(fcst$attrs$Dates[1, 1, which(start_date == i_syear), ], + label = T, abb = F) + titles <- as.vector(months) + # Plots + PlotLayout(PlotEquiMap, c('longitude', 'latitude'), + i_var_ens_mean, longitude, latitude, + filled.continents = F, + toptitle = toptitle, + title_scale = 0.6, + titles = titles, + units = units, + cols = cols, + brks = brks, + fileout = outfile, + bar_label_digits = 4, + bar_extra_margin = rep(0.7, 4), + bar_label_scale = 1.5, + axes_label_scale = 1.3) } - toptitle <- paste("Forecast Ensemble Mean -", variable, "-", system_name, - "- Initialization:", i_syear) - months <- lubridate::month(fcst$attrs$Dates[1, 1, which(start_date == i_syear), ], - label = T, abb = F) - titles <- as.vector(months) - # Plots - PlotLayout(PlotEquiMap, c('longitude', 'latitude'), - i_ensemble_mean, longitude, latitude, - filled.continents = F, - toptitle = toptitle, - title_scale = 0.6, - titles = titles, - units = units, - cols = cols, - brks = brks, - fileout = outfile, - bar_label_digits = 4, - bar_extra_margin = rep(0.7, 4), - bar_label_scale = 1.5, - axes_label_scale = 1.3) + info(recipe$Run$logger, + "##### FCST ENSEMBLE MEAN PLOT SAVED TO OUTPUT DIRECTORY #####") } - info(recipe$Run$logger, - "##### FCST ENSEMBLE MEAN PLOT SAVED TO OUTPUT DIRECTORY #####") } diff --git a/modules/Visualization/R/plot_most_likely_terciles_map.R b/modules/Visualization/R/plot_most_likely_terciles_map.R index 9ab0199e..f912e249 100644 --- a/modules/Visualization/R/plot_most_likely_terciles_map.R +++ b/modules/Visualization/R/plot_most_likely_terciles_map.R @@ -1,3 +1,4 @@ +## TODO: Change name plot_most_likely_terciles <- function(recipe, fcst, probabilities, @@ -34,55 +35,47 @@ plot_most_likely_terciles <- function(recipe, ## TODO: Improve this section # Drop extra dims, add time dim if missing: - probs_fcst <- drop(probs_fcst) - if (!("time" %in% names(dim(probs_fcst)))) { - dim(probs_fcst) <- c("time" = 1, dim(probs_fcst)) - } - if (!'syear' %in% names(dim(probs_fcst))) { - probs_fcst <- Reorder(probs_fcst, c("time", "bin", "longitude", "latitude")) - } else { - probs_fcst <- Reorder(probs_fcst, - c("syear", "time", "bin", "longitude", "latitude")) - } + for (var in 1:fcst$dims[['var']]) { + variable <- fcst$attrs$Variable$varName[[var]] + var_probs <- ClimProjDiags::Subset(probs_fcst, + along = c("var"), + indices = var, + drop = 'selected') - for (i_syear in start_date) { - # Define name of output file and titles - if (length(start_date) == 1) { - i_probs_fcst <- probs_fcst - outfile <- paste0(outdir, "forecast_most_likely_tercile-", start_date, - ".png") - } else { - i_probs_fcst <- probs_fcst[which(start_date == i_syear), , , , ] - outfile <- paste0(outdir, "forecast_most_likely_tercile-", i_syear, ".png") + var_probs <- Reorder(var_probs, + c("syear", "time", "bin", "longitude", "latitude")) + for (i_syear in start_date) { + # Define name of output file and titles + i_var_probs <- var_probs[which(start_date == i_syear), , , , ] + outfile <- paste0(outdir[[var]], "forecast_most_likely_tercile-", + i_syear, ".png") + toptitle <- paste("Most Likely Tercile -", variable, "-", system_name, "-", + "Initialization:", i_syear) + months <- lubridate::month(fcst$attrs$Dates[1, 1, which(start_date == i_syear), ], + label = T, abb = F) + ## TODO: Ensure this works for daily and sub-daily cases + titles <- as.vector(months) + # Plots + ## NOTE: PlotLayout() and PlotMostLikelyQuantileMap() are still being worked + ## on. + suppressWarnings( + PlotLayout(PlotMostLikelyQuantileMap, c('bin', 'longitude', 'latitude'), + cat_dim = 'bin', + i_var_probs, longitude, latitude, + coast_width = 1.5, + title_scale = 0.6, + legend_scale = 0.8, #cex_bar_titles = 0.6, + toptitle = toptitle, + titles = titles, + fileout = outfile, + bar_label_digits = 2, + bar_scale = rep(0.7, 4), + bar_label_scale = 1.2, + axes_label_scale = 1.3, + triangle_ends = c(F, F), width = 11, height = 8) + ) } - toptitle <- paste("Most Likely Tercile -", variable, "-", system_name, "-", - "Initialization:", i_syear) - months <- lubridate::month(fcst$attrs$Dates[1, 1, which(start_date == i_syear), ], - label = T, abb = F) - ## TODO: Ensure this works for daily and sub-daily cases - titles <- as.vector(months) - - # Plots - ## NOTE: PlotLayout() and PlotMostLikelyQuantileMap() are still being worked - ## on. - suppressWarnings( - PlotLayout(PlotMostLikelyQuantileMap, c('bin', 'longitude', 'latitude'), - cat_dim = 'bin', - i_probs_fcst, longitude, latitude, - coast_width = 1.5, - title_scale = 0.6, - legend_scale = 0.8, #cex_bar_titles = 0.6, - toptitle = toptitle, - titles = titles, - fileout = outfile, - bar_label_digits = 2, - bar_scale = rep(0.7, 4), - bar_label_scale = 1.2, - axes_label_scale = 1.3, - triangle_ends = c(F, F), width = 11, height = 8) - ) - } - info(recipe$Run$logger, "##### MOST LIKELY TERCILE PLOT SAVED TO OUTPUT DIRECTORY #####") + } } diff --git a/modules/Visualization/R/plot_skill_metrics.R b/modules/Visualization/R/plot_skill_metrics.R index f8be19d9..e62496f6 100644 --- a/modules/Visualization/R/plot_skill_metrics.R +++ b/modules/Visualization/R/plot_skill_metrics.R @@ -47,116 +47,123 @@ plot_skill_metrics <- function(recipe, data_cube, skill_metrics, scores <- c("rps", "frps", "crps", "frps_specs") # Assign colorbar to each metric type ## TODO: Triangle ends - for (name in c(skill_scores, scores, "mean_bias", "enssprerr")) { - if (name %in% names(skill_metrics)) { - # Define plot characteristics and metric name to display in plot - if (name %in% c("rpss", "bss90", "bss10", "frpss", "crpss", - "rpss_specs", "bss90_specs", "bss10_specs", - "rmsss")) { - display_name <- toupper(strsplit(name, "_")[[1]][1]) - skill <- skill_metrics[[name]] - brks <- seq(-1, 1, by = 0.2) - colorbar <- clim.colors(length(brks) + 1, diverging_palette) - cols <- colorbar[2:(length(colorbar) - 1)] - col_inf <- colorbar[1] - col_sup <- NULL - } else if (name == "mean_bias_ss") { - display_name <- "Mean Bias Skill Score" - skill <- skill_metrics[[name]] - brks <- seq(-1, 1, by = 0.2) - colorbar <- clim.colors(length(brks) + 1, diverging_palette) - cols <- colorbar[2:(length(colorbar) - 1)] - col_inf <- colorbar[1] - col_sup <- NULL - } else if (name %in% c("enscorr", "enscorr_specs")) { - display_name <- "Ensemble Mean Correlation" - skill <- skill_metrics[[name]] - brks <- seq(-1, 1, by = 0.2) - cols <- clim.colors(length(brks) - 1, diverging_palette) - col_inf <- NULL - col_sup <- NULL - } else if (name %in% scores) { - skill <- skill_metrics[[name]] - display_name <- toupper(strsplit(name, "_")[[1]][1]) - brks <- seq(0, 1, by = 0.1) - colorbar <- grDevices::hcl.colors(length(brks), sequential_palette) - cols <- colorbar[1:(length(colorbar) - 1)] - col_inf <- NULL - col_sup <- colorbar[length(colorbar)] - } else if (name == "enssprerr") { - skill <- skill_metrics[[name]] - display_name <- "Spread-to-Error Ratio" - brks <- c(0, 0.6, 0.7, 0.8, 0.9, 1, 1.2, 1.4, 1.6, 1.8, 2) - colorbar <- clim.colors(length(brks), diverging_palette) - cols <- colorbar[1:length(colorbar) - 1] - col_inf <- NULL - col_sup <- colorbar[length(colorbar)] - } else if (name == "mean_bias") { - skill <- skill_metrics[[name]] - display_name <- "Mean Bias" - max_value <- max(abs(quantile(skill, 0.02, na.rm = T)), - abs(quantile(skill, 0.98, na.rm = T))) - brks <- max_value * seq(-1, 1, by = 0.2) - colorbar <- clim.colors(length(brks) + 1, diverging_palette) - cols <- colorbar[2:(length(colorbar) - 1)] - col_inf <- colorbar[1] - col_sup <- colorbar[length(colorbar)] - } - options(bitmapType = "cairo") - # Reorder dimensions - skill <- Reorder(skill, c("time", "longitude", "latitude")) - # If the significance has been requested and the variable has it, - # retrieve it and reorder its dimensions. - significance_name <- paste0(name, "_significance") - if ((significance) && (significance_name %in% names(skill_metrics))) { - skill_significance <- skill_metrics[[significance_name]] - skill_significance <- Reorder(skill_significance, c("time", - "longitude", - "latitude")) - # Split skill significance into list of lists, along the time dimension - # This allows for plotting the significance dots correctly. - skill_significance <- ClimProjDiags::ArrayToList(skill_significance, - dim = 'time', - level = "sublist", - names = "dots") - } else { - skill_significance <- NULL - } - # Define output file name and titles - if (tolower(recipe$Analysis$Horizon) == "seasonal") { - outfile <- paste0(outdir, name, "-", month_label, ".png") - } else { - outfile <- paste0(outdir, name, ".png") + for (var in 1:data_cube$dims[['var']]) { + var_skill <- lapply(skill_metrics, function(x) { + ClimProjDiags::Subset(x, along = 'var', + indices = var, + drop = 'selected')}) + + for (name in c(skill_scores, scores, "mean_bias", "enssprerr")) { + if (name %in% names(skill_metrics)) { + # Define plot characteristics and metric name to display in plot + if (name %in% c("rpss", "bss90", "bss10", "frpss", "crpss", + "rpss_specs", "bss90_specs", "bss10_specs", + "rmsss")) { + display_name <- toupper(strsplit(name, "_")[[1]][1]) + skill <- var_skill[[name]] + brks <- seq(-1, 1, by = 0.2) + colorbar <- clim.colors(length(brks) + 1, diverging_palette) + cols <- colorbar[2:(length(colorbar) - 1)] + col_inf <- colorbar[1] + col_sup <- NULL + } else if (name == "mean_bias_ss") { + display_name <- "Mean Bias Skill Score" + skill <- var_skill[[name]] + brks <- seq(-1, 1, by = 0.2) + colorbar <- clim.colors(length(brks) + 1, diverging_palette) + cols <- colorbar[2:(length(colorbar) - 1)] + col_inf <- colorbar[1] + col_sup <- NULL + } else if (name %in% c("enscorr", "enscorr_specs")) { + display_name <- "Ensemble Mean Correlation" + skill <- var_skill[[name]] + brks <- seq(-1, 1, by = 0.2) + cols <- clim.colors(length(brks) - 1, diverging_palette) + col_inf <- NULL + col_sup <- NULL + } else if (name %in% scores) { + skill <- var_skill[[name]] + display_name <- toupper(strsplit(name, "_")[[1]][1]) + brks <- seq(0, 1, by = 0.1) + colorbar <- grDevices::hcl.colors(length(brks), sequential_palette) + cols <- colorbar[1:(length(colorbar) - 1)] + col_inf <- NULL + col_sup <- colorbar[length(colorbar)] + } else if (name == "enssprerr") { + skill <- var_skill[[name]] + display_name <- "Spread-to-Error Ratio" + brks <- c(0, 0.6, 0.7, 0.8, 0.9, 1, 1.2, 1.4, 1.6, 1.8, 2) + colorbar <- clim.colors(length(brks), diverging_palette) + cols <- colorbar[1:length(colorbar) - 1] + col_inf <- NULL + col_sup <- colorbar[length(colorbar)] + } else if (name == "mean_bias") { + skill <- var_skill[[name]] + display_name <- "Mean Bias" + max_value <- max(abs(quantile(skill, 0.02, na.rm = T)), + abs(quantile(skill, 0.98, na.rm = T))) + brks <- max_value * seq(-1, 1, by = 0.2) + colorbar <- clim.colors(length(brks) + 1, diverging_palette) + cols <- colorbar[2:(length(colorbar) - 1)] + col_inf <- colorbar[1] + col_sup <- colorbar[length(colorbar)] + } + options(bitmapType = "cairo") + # Reorder dimensions + skill <- Reorder(skill, c("time", "longitude", "latitude")) + # If the significance has been requested and the variable has it, + # retrieve it and reorder its dimensions. + significance_name <- paste0(name, "_significance") + if ((significance) && (significance_name %in% names(skill_metrics))) { + skill_significance <- var_skill[[significance_name]] + skill_significance <- Reorder(skill_significance, c("time", + "longitude", + "latitude")) + # Split skill significance into list of lists, along the time dimension + # This allows for plotting the significance dots correctly. + skill_significance <- ClimProjDiags::ArrayToList(skill_significance, + dim = 'time', + level = "sublist", + names = "dots") + } else { + skill_significance <- NULL + } + # Define output file name and titles + if (tolower(recipe$Analysis$Horizon) == "seasonal") { + outfile <- paste0(outdir[var], name, "-", month_label, ".png") + } else { + outfile <- paste0(outdir[var], name, ".png") + } + toptitle <- paste(display_name, "-", data_cube$attrs$Variable$varName[var], + "-", system_name, "-", month_abbreviation, + hcst_period) + months <- unique(lubridate::month(data_cube$attrs$Dates, + label = T, abb = F)) + titles <- as.vector(months) + # Plot + suppressWarnings( + PlotLayout(PlotEquiMap, c('longitude', 'latitude'), + asplit(skill, MARGIN=1), # Splitting array into a list + longitude, latitude, + special_args = skill_significance, + dot_symbol = 20, + toptitle = toptitle, + title_scale = 0.6, + titles = titles, + filled.continents=F, + brks = brks, + cols = cols, + col_inf = col_inf, + col_sup = col_sup, + fileout = outfile, + bar_label_digits = 3, + bar_extra_margin = rep(0.9, 4), + bar_label_scale = 1.5, + axes_label_scale = 1.3) + ) } - toptitle <- paste(display_name, "-", data_cube$attrs$Variable$varName, - "-", system_name, "-", month_abbreviation, - hcst_period) - months <- unique(lubridate::month(data_cube$attrs$Dates, - label = T, abb = F)) - titles <- as.vector(months) - # Plot - suppressWarnings( - PlotLayout(PlotEquiMap, c('longitude', 'latitude'), - asplit(skill, MARGIN=1), # Splitting array into a list - longitude, latitude, - special_args = skill_significance, - dot_symbol = 20, - toptitle = toptitle, - title_scale = 0.6, - titles = titles, - filled.continents=F, - brks = brks, - cols = cols, - col_inf = col_inf, - col_sup = col_sup, - fileout = outfile, - bar_label_digits = 3, - bar_extra_margin = rep(0.9, 4), - bar_label_scale = 1.5, - axes_label_scale = 1.3) - ) } + info(recipe$Run$logger, + "##### SKILL METRIC PLOTS SAVED TO OUTPUT DIRECTORY #####") } - info(recipe$Run$logger, - "##### SKILL METRIC PLOTS SAVED TO OUTPUT DIRECTORY #####") } diff --git a/modules/Visualization/Visualization.R b/modules/Visualization/Visualization.R index 1ae48109..44640055 100644 --- a/modules/Visualization/Visualization.R +++ b/modules/Visualization/Visualization.R @@ -1,11 +1,12 @@ ## TODO: Add the possibility to read the data directly from netCDF ## TODO: Adapt to multi-model case +## TODO: Adapt to multi-variable case ## TODO: Add param 'raw'? ## TODO: Decadal plot names -source("modules/Visualization/R/plot_ensemble_mean.R") -source("modules/Visualization/R/plot_most_likely_terciles_map.R") source("modules/Visualization/R/plot_skill_metrics.R") +source("modules/Visualization/R/plot_most_likely_terciles_map.R") +source("modules/Visualization/R/plot_ensemble_mean.R") plot_data <- function(recipe, data, @@ -22,8 +23,12 @@ plot_data <- function(recipe, plots <- strsplit(recipe$Analysis$Workflow$Visualization$plots, ", | |,")[[1]] recipe$Run$output_dir <- paste0(recipe$Run$output_dir, "/plots/") - outdir <- paste0(get_dir(recipe)) - dir.create(outdir, showWarnings = FALSE, recursive = TRUE) + ## TODO: Sort this out + outdir <- get_dir(recipe = recipe, + variable = data$hcst$attrs$Variable$varName) + for (directory in outdir) { + dir.create(directory, showWarnings = FALSE, recursive = TRUE) + } if ((is.null(skill_metrics)) && (is.null(data$fcst))) { error(recipe$Run$logger, "The Visualization module has been called, diff --git a/modules/test_seasonal.R b/modules/test_seasonal.R index 4535d41b..575585db 100644 --- a/modules/test_seasonal.R +++ b/modules/test_seasonal.R @@ -5,7 +5,7 @@ source("modules/Skill/Skill.R") source("modules/Saving/Saving.R") source("modules/Visualization/Visualization.R") -recipe_file <- "recipes/atomic_recipes/recipe_system7c3s-tas.yml" +recipe_file <- "recipes/atomic_recipes/recipe_test_multivar.yml" recipe <- prepare_outputs(recipe_file) # Load datasets @@ -19,7 +19,8 @@ skill_metrics <- compute_skill_metrics(recipe, data) # Compute percentiles and probability bins probabilities <- compute_probabilities(recipe, data) # Export all data to netCDF +## TODO: Fix plotting # save_data(recipe, data, skill_metrics, probabilities) # Plot data -plot_data(recipe, data, skill_metrics, probabilities, - significance = T) +# plot_data(recipe, calibrated_data, skill_metrics, probabilities, +# significance = T) diff --git a/recipes/atomic_recipes/recipe_seasonal-tests.yml b/recipes/atomic_recipes/recipe_seasonal-tests.yml index 2e1ac394..3da81a34 100644 --- a/recipes/atomic_recipes/recipe_seasonal-tests.yml +++ b/recipes/atomic_recipes/recipe_seasonal-tests.yml @@ -4,7 +4,7 @@ Description: Analysis: Horizon: Seasonal Variables: - name: tas + name: tas prlr freq: monthly_mean Datasets: System: diff --git a/recipes/atomic_recipes/recipe_test_multivar.yml b/recipes/atomic_recipes/recipe_test_multivar.yml new file mode 100644 index 00000000..94e41223 --- /dev/null +++ b/recipes/atomic_recipes/recipe_test_multivar.yml @@ -0,0 +1,53 @@ +Description: + Author: V. Agudetse + +Analysis: + Horizon: Seasonal + Variables: + name: tas prlr + freq: monthly_mean + Datasets: + System: + name: ECMWF-SEAS5 + Multimodel: False + Reference: + name: ERA5 + Time: + sdate: '1101' + fcst_year: '2020' + hcst_start: '1999' + hcst_end: '2010' + ftime_min: 1 + ftime_max: 2 + Region: + latmin: -10 + latmax: 10 + lonmin: 0 + lonmax: 20 + Regrid: + method: bilinear + type: to_system + Workflow: + Calibration: + method: raw + save: 'exp_only' + Anomalies: + compute: yes + cross_validation: yes + save: 'none' + Skill: + metric: RPS RPSS CRPS CRPSS BSS10 BSS90 EnsCorr mean_bias mean_bias_SS + save: 'all' + Probabilities: + percentiles: [[1/3, 2/3], [1/10, 9/10]] + save: 'all' + Indicators: + index: no + ncores: 7 + remove_NAs: yes + Output_format: S2S4E +Run: + Loglevel: INFO + Terminal: yes + output_dir: /esarchive/scratch/vagudets/auto-s2s-outputs/ + code_dir: /esarchive/scratch/vagudets/repos/auto-s2s/ diff --git a/recipes/atomic_recipes/recipe_test_multivar_decadal.yml b/recipes/atomic_recipes/recipe_test_multivar_decadal.yml new file mode 100644 index 00000000..00563fe2 --- /dev/null +++ b/recipes/atomic_recipes/recipe_test_multivar_decadal.yml @@ -0,0 +1,57 @@ +Description: + Author: An-Chi Ho + '': split version +Analysis: + Horizon: Decadal + Variables: + name: tas tos + freq: monthly_mean + Datasets: + System: + name: CanESM5 + member: r1i1p2f1,r2i1p2f1,r3i1p2f1 #'all' + Multimodel: no + Reference: + name: ERA5 #JRA-55 + Time: + fcst_year: [2020,2021] + hcst_start: 1990 + hcst_end: 1993 +# season: 'Annual' + ftime_min: 2 + ftime_max: 14 + Region: + latmin: 10 + latmax: 20 + lonmin: 150 + lonmax: 170 + Regrid: + method: bilinear + type: to_system #to_reference + Workflow: + Anomalies: + compute: no + cross_validation: + save: + Calibration: + method: bias + save: 'all' + Skill: + metric: RPSS Corr + save: 'all' + Probabilities: + percentiles: [[1/3, 2/3]] + save: 'all' + Indicators: + index: FALSE + Visualization: + plots: skill_metrics, forecast_ensemble_mean, most_likely_terciles + ncores: # Optional, int: number of cores, defaults to 1 + remove_NAs: # Optional, bool: Whether NAs are removed, defaults to FALSE + Output_format: S2S4E +Run: + Loglevel: INFO + Terminal: yes + output_dir: /esarchive/scratch/aho/git/auto-s2s/out-logs/ + code_dir: /esarchive/scratch/aho/git/auto-s2s/ + diff --git a/recipes/atomic_recipes/recipe_test_multivar_decadal_multipath.yml b/recipes/atomic_recipes/recipe_test_multivar_decadal_multipath.yml new file mode 100644 index 00000000..a38f81b8 --- /dev/null +++ b/recipes/atomic_recipes/recipe_test_multivar_decadal_multipath.yml @@ -0,0 +1,57 @@ +Description: + Author: An-Chi Ho + '': split version +Analysis: + Horizon: Decadal + Variables: + name: tas pr + freq: monthly_mean + Datasets: + System: + name: EC-Earth3-i4 + member: r1i4p1f1,r2i4p1f1,r3i4p1f1 #'all' + Multimodel: no + Reference: + name: ERA5 #JRA-55 + Time: + fcst_year: [2020,2021] + hcst_start: 1990 + hcst_end: 1993 +# season: 'Annual' + ftime_min: 2 + ftime_max: 14 + Region: + latmin: 10 #-90 + latmax: 20 #90 + lonmin: 0 + lonmax: 15 #359.9 + Regrid: + method: bilinear + type: to_system #to_reference + Workflow: + Anomalies: + compute: no + cross_validation: + save: + Calibration: + method: bias + save: 'all' + Skill: + metric: RPSS Corr + save: 'all' + Probabilities: + percentiles: [[1/3, 2/3]] + save: 'all' + Indicators: + index: FALSE + Visualization: + plots: skill_metrics, forecast_ensemble_mean, most_likely_terciles + ncores: # Optional, int: number of cores, defaults to 1 + remove_NAs: # Optional, bool: Whether NAs are removed, defaults to FALSE + Output_format: S2S4E +Run: + Loglevel: INFO + Terminal: yes + output_dir: /esarchive/scratch/aho/git/auto-s2s/out-logs/ + code_dir: /esarchive/scratch/aho/git/auto-s2s/ + diff --git a/recipes/atomic_recipes/recipe_test_multivar_nadia.yml b/recipes/atomic_recipes/recipe_test_multivar_nadia.yml new file mode 100644 index 00000000..50cc62f7 --- /dev/null +++ b/recipes/atomic_recipes/recipe_test_multivar_nadia.yml @@ -0,0 +1,49 @@ +Description: + Author: V. Agudetse + +Analysis: + Horizon: Seasonal + Variables: + name: tas tos + freq: monthly_mean + Datasets: + System: + name: ECMWF-SEAS5 + Multimodel: False + Reference: + name: BEST + Time: + sdate: '0101' + fcst_year: + hcst_start: '1993' + hcst_end: '2016' + ftime_min: 1 + ftime_max: 6 + Region: + latmin: -90 + latmax: 90 + lonmin: 0 + lonmax: 359.9 + Regrid: + method: bilinear + type: to_system + Workflow: + Calibration: + method: raw + Anomalies: + compute: yes + cross_validation: yes + Skill: + metric: mean_bias EnsCorr RPS RPSS CRPS CRPSS enssprerr + Probabilities: + percentiles: [[1/3, 2/3]] + Indicators: + index: no + ncores: 7 + remove_NAs: yes + Output_format: scorecards +Run: + Loglevel: INFO + Terminal: yes + output_dir: /esarchive/scratch/nmilders/scorecards_data/to_system/tas-tos/ECMWF-SEAS5/tas-tos/ + code_dir: /esarchive/scratch/nmilders/gitlab/git_clones/s2s-suite/ diff --git a/recipes/recipe_scorecards_s2s-suite.yml b/recipes/recipe_scorecards_s2s-suite.yml new file mode 100644 index 00000000..ae17f9cd --- /dev/null +++ b/recipes/recipe_scorecards_s2s-suite.yml @@ -0,0 +1,50 @@ +Description: + Author: nmilders + Info: scorecards data + +Analysis: + Horizon: seasonal # Mandatory, str: either subseasonal, seasonal, or decadal + Variables: + name: prlr # Mandatory, str: tas prlr psl sfcWind + freq: monthly_mean # Mandatory, str: either monthly_mean or daily_mean + Datasets: + System: + name: ECMWF-SEAS5 # Mandatory, str: system5c3s system21_m1 system35c3s system3_m1-c3s system2_m1 system7c3s + Multimodel: no # Mandatory, bool: Either yes/true or no/false + Reference: + name: ERA5 # Mandatory, str: Reference codename. See docu. + Time: + sdate: '0101' ## MMDD + fcst_year: # Optional, int: Forecast year 'YYYY' + hcst_start: '1993' # Mandatory, int: Hindcast start year 'YYYY' + hcst_end: '2016' # Mandatory, int: Hindcast end year 'YYYY' + ftime_min: 1 # Mandatory, int: First leadtime time step in months + ftime_max: 6 # Mandatory, int: Last leadtime time step in months + Region: + latmin: -90 # Mandatory, int: minimum latitude + latmax: 90 # Mandatory, int: maximum latitude + lonmin: 0 # Mandatory, int: minimum longitude + lonmax: 359.9 # Mandatory, int: maximum longitude + Regrid: + method: conservative # conservative for prlr, bilinear for tas, psl, sfcWind + type: to_system + Workflow: + Calibration: + method: raw # Mandatory, str: Calibration method. See docu. + Anomalies: + compute: yes + cross_validation: no + Skill: + metric: mean_bias EnsCorr rps rpss crps crpss EnsSprErr # str: Skill metric or list of skill metrics. See docu. + Probabilities: + percentiles: [[1/3, 2/3], [1/10], [9/10]] # frac: Quantile thresholds. + Indicators: + index: no + ncores: 15 # Optional, int: number of cores, defaults to 1 + remove_NAs: # Optional, bool: Whether NAs are removed, defaults to FALSE + Output_format: Scorecards #S2S4E +Run: + Loglevel: INFO + Terminal: yes + output_dir: /esarchive/scratch/nmilders/scorecards_data/to_system/cross_validation/tercile_cross_val/ECMWF-SEAS5/prlr/ + code_dir: /esarchive/scratch/nmilders/gitlab/git_clones/s2s-suite/ diff --git a/tas-tos_scorecards_data_loading.R b/tas-tos_scorecards_data_loading.R new file mode 100644 index 00000000..da124cd4 --- /dev/null +++ b/tas-tos_scorecards_data_loading.R @@ -0,0 +1,63 @@ + +rm(list = ls()); gc() + +args <- commandArgs(trailingOnly = TRUE) + +setwd("/esarchive/scratch/nmilders/gitlab/git_clones/s2s-suite/") + +#source("modules/Loading/Loading.R") +source("modules/Loading/Dev_Loading.R") +source("modules/Anomalies/Anomalies.R") +#source("modules/Calibration/Calibration.R") +source("modules/Skill/Skill.R") +source("modules/Saving/Saving.R") +#source("modules/Visualization/Visualization.R") +source("tools/prepare_outputs.R") + +recipe_file <- "recipes/atomic_recipes/recipe_test_multivar_nadia.yml" +recipe <- prepare_outputs(recipe_file) + +## Run job for each start month +recipe$Analysis$Time$sdate <- paste0(sprintf("%02d", as.numeric(args)), '01') + +## Load datasets +data <- load_datasets(recipe) + + +################################################################################ + +### For Testing ### +# +# lon <- attributes(data$hcst$coords$longitude) +# lat <- attributes(data$hcst$coords$latitude) +# +# +# source('/esarchive/scratch/nmilders/gitlab/git_clones/s2s-suite/modules/Loading/R/mask_tas_tos.R') +# tas_tos_hcst <- mask_tas_tos(input_data = data$hcst, region = c(20, 40, 30, 50), +# grid = 'r360x181', lon = lon, lat = lat, +# lon_dim = 'longitude', lat_dim = 'latitude', ncores = NULL) +# +# tas_tos_obs <- mask_tas_tos(input_data = data$obs, region = c(0.1, 359.95, -90, 90), +# grid = 'r360x181', lon = lon, lat = lat, +# lon_dim = 'longitude', lat_dim = 'latitude', ncores = NULL) +# +# +# source('/esarchive/scratch/nmilders/gitlab/git_clones/s2s-suite/modules/Loading/R/mask_tas_tos.R') +# mask <- .load_mask(grid = 'r360x181', mask_path = NULL, +# land_value = 0, sea_value = 1, +# lon_dim = 'lon', lat_dim = 'lat', region = NULL) + +################################################################################ + +## compute anomalies +anomalies <- compute_anomalies(recipe, data) + +## Compute skill metrics of data +skill_metrics <- compute_skill_metrics(recipe, anomalies) + +## save data +save_data(recipe, data, skill_metrics = skill_metrics) +gc() + +## plot metrics maps +## plot_data(recipe, anomalies, skill_metrics, significance = T) diff --git a/tests/testthat/test-decadal_monthly_1.R b/tests/testthat/test-decadal_monthly_1.R index 9b46cce8..a5c95e0c 100644 --- a/tests/testthat/test-decadal_monthly_1.R +++ b/tests/testthat/test-decadal_monthly_1.R @@ -187,7 +187,7 @@ class(skill_metrics$rpss), ) expect_equal( dim(skill_metrics$rpss), -c(time = 3, latitude = 5, longitude = 4) +c(var = 1, time = 3, latitude = 5, longitude = 4) ) expect_equal( dim(skill_metrics$rpss_significance), @@ -218,27 +218,27 @@ c('percentile_33', 'percentile_66', 'percentile_10', 'percentile_90') ) expect_equal( dim(probs$probs$prob_b33), -c(syear = 4, time = 3, latitude = 5, longitude = 4) +c(var = 1, syear = 4, time = 3, latitude = 5, longitude = 4) ) expect_equal( dim(probs$percentiles$percentile_33), -c(time = 3, latitude = 5, longitude = 4) +c(var = 1, time = 3, latitude = 5, longitude = 4) ) expect_equal( -as.vector(probs$probs$prob_b33[, 1, 2, 2]), +as.vector(probs$probs$prob_b33[, , 1, 2, 2]), c(0.0, 0.5, 0.0, 1.0) ) expect_equal( -as.vector(probs$probs$prob_10_to_90[, 1, 2, 2]), +as.vector(probs$probs$prob_10_to_90[, , 1, 2, 2]), c(1.0, 1.0, 0.5, 0.5) ) expect_equal( -as.vector(probs$percentiles$percentile_33[, 1, 2]), +as.vector(probs$percentiles$percentile_33[, , 1, 2]), c(293.7496, 287.4263, 285.8295), tolerance = 0.0001 ) expect_equal( -as.vector(probs$percentiles$percentile_10[, 1, 2]), +as.vector(probs$percentiles$percentile_10[, , 1, 2]), c(293.1772, 286.9533, 284.7887), tolerance = 0.0001 ) diff --git a/tests/testthat/test-decadal_monthly_2.R b/tests/testthat/test-decadal_monthly_2.R index 01fe0440..2b605109 100644 --- a/tests/testthat/test-decadal_monthly_2.R +++ b/tests/testthat/test-decadal_monthly_2.R @@ -37,7 +37,7 @@ plot_data(recipe = recipe, data = calibrated_data, ))}) -outdir <- get_dir(recipe) +outdir <- get_dir(recipe = recipe, variable = data$hcst$attrs$Variable$varName) #====================================== @@ -171,11 +171,11 @@ class(skill_metrics$rpss_specs), "array" ) expect_equal( -all(unlist(lapply(lapply(skill_metrics, dim), all.equal, c(time = 14, latitude = 8, longitude = 5)))), +all(unlist(lapply(lapply(skill_metrics, dim), all.equal, c(var = 1, time = 14, latitude = 8, longitude = 5)))), TRUE ) expect_equal( -as.vector(skill_metrics$rpss_specs[6:8, 1, 2]), +as.vector(skill_metrics$rpss_specs[, 6:8, 1, 2]), c(-0.3333333, 0.1666667, -0.3333333), tolerance = 0.0001 ) @@ -184,26 +184,26 @@ tolerance = 0.0001 #TRUE #) expect_equal( -as.vector(skill_metrics$enscorr_specs[6:8, 1, 2]), +as.vector(skill_metrics$enscorr_specs[, 6:8, 1, 2]), c(0.4474382, 0.1026333, 0.4042823), tolerance = 0.0001 ) expect_equal( -as.vector(skill_metrics$frps_specs[6:8, 1, 2]), +as.vector(skill_metrics$frps_specs[, 6:8, 1, 2]), c(0.4444444, 0.2222222, 0.4444444), tolerance = 0.0001 ) expect_equal( -as.vector(skill_metrics$frpss_specs[4:7, 1, 5]), +as.vector(skill_metrics$frpss_specs[, 4:7, 1, 5]), c( 1.0, -0.5, -0.5, 0.5), tolerance = 0.0001 ) expect_equal( -as.vector(skill_metrics$bss10_specs[6:8, 1, 2]), +as.vector(skill_metrics$bss10_specs[, 6:8, 1, 2]), c(0.5, -0.5, -0.5), ) expect_equal( -as.vector(skill_metrics$frps[6:8, 1, 2]), +as.vector(skill_metrics$frps[, 6:8, 1, 2]), c(0.4444444, 0.2222222, 0.4444444), tolerance = 0.0001 ) @@ -223,19 +223,19 @@ c('percentile_33', 'percentile_66') ) expect_equal( dim(probs$probs$prob_b33), -c(syear = 3, time = 14, latitude = 8, longitude = 5) +c(var = 1, syear = 3, time = 14, latitude = 8, longitude = 5) ) expect_equal( dim(probs$percentiles$percentile_33), -c(time = 14, latitude = 8, longitude = 5) +c(var = 1,time = 14, latitude = 8, longitude = 5) ) expect_equal( -as.vector(probs$probs$prob_b33[, 1, 2, 2]), +as.vector(probs$probs$prob_b33[, , 1, 2, 2]), c(0.0, 0.3333333, 0.6666667), tolerance = 0.0001 ) expect_equal( -as.vector(probs$percentiles$percentile_33[1:3, 1, 2]), +as.vector(probs$percentiles$percentile_33[, 1:3, 1, 2]), c(271.7508, 273.1682, 274.1937), tolerance = 0.0001 ) diff --git a/tests/testthat/test-decadal_monthly_3.R b/tests/testthat/test-decadal_monthly_3.R index 988172c6..7232ebfd 100644 --- a/tests/testthat/test-decadal_monthly_3.R +++ b/tests/testthat/test-decadal_monthly_3.R @@ -140,15 +140,15 @@ class(skill_metrics[[1]]), "array" ) expect_equal( -all(unlist(lapply(lapply(skill_metrics, dim)[1:2], all.equal, c(time = 3, latitude = 25, longitude = 16)))), +all(unlist(lapply(lapply(skill_metrics, dim)[1:2], all.equal, c(var = 1, time = 3, latitude = 25, longitude = 16)))), TRUE ) expect_equal( -all(unlist(lapply(lapply(skill_metrics, dim)[3:4], all.equal, c(ensemble = 3, time = 3, latitude = 25, longitude = 16)))), +all(unlist(lapply(lapply(skill_metrics, dim)[3:4], all.equal, c(ensemble = 3, var = 1, time = 3, latitude = 25, longitude = 16)))), TRUE ) expect_equal( -as.vector(skill_metrics$bss10[, 1, 2]), +as.vector(skill_metrics$bss10[, , 1, 2]), c(-0.1904762, -0.1904762, -0.1904762), tolerance = 0.0001 ) @@ -157,7 +157,7 @@ any(as.vector(skill_metrics$bss10_significance)), FALSE ) expect_equal( -as.vector(skill_metrics$corr[2, , 1, 2]), +as.vector(skill_metrics$corr[2, , , 1, 2]), c(-0.2015265, 0.4635463, -0.1019575), tolerance = 0.0001 ) @@ -177,19 +177,19 @@ c('percentile_33', 'percentile_66') ) expect_equal( dim(probs$probs$prob_b33), -c(syear = 4, time = 3, latitude = 25, longitude = 16) +c(var = 1, syear = 4, time = 3, latitude = 25, longitude = 16) ) expect_equal( dim(probs$percentiles$percentile_33), -c(time = 3, latitude = 25, longitude = 16) +c(var = 1, time = 3, latitude = 25, longitude = 16) ) expect_equal( -as.vector(probs$probs$prob_b33[, 1, 2, 2]), +as.vector(probs$probs$prob_b33[, , 1, 2, 2]), c(0.0, 0.3333333, 0.3333333, 0.6666667), tolerance = 0.0001 ) expect_equal( -as.vector(probs$percentiles$percentile_33[1:3, 1, 2]), +as.vector(probs$percentiles$percentile_33[, 1:3, 1, 2]), c(278.1501, 279.5226, 282.0237), tolerance = 0.0001 ) diff --git a/tests/testthat/test-seasonal_daily.R b/tests/testthat/test-seasonal_daily.R index da0e789b..8a51cc86 100644 --- a/tests/testthat/test-seasonal_daily.R +++ b/tests/testthat/test-seasonal_daily.R @@ -155,10 +155,10 @@ class(skill_metrics$enscorr_specs), ) expect_equal( dim(skill_metrics$enscorr_specs), -c(time = 31, latitude = 4, longitude = 4) +c(var = 1, time = 31, latitude = 4, longitude = 4) ) expect_equal( -skill_metrics$enscorr_specs[1:3, 1, 1], +skill_metrics$enscorr_specs[, 1:3, 1, 1], c(0.7509920, 0.6514916, 0.5118371), tolerance=0.0001 ) diff --git a/tests/testthat/test-seasonal_monthly.R b/tests/testthat/test-seasonal_monthly.R index 83b5ceab..0e311424 100644 --- a/tests/testthat/test-seasonal_monthly.R +++ b/tests/testthat/test-seasonal_monthly.R @@ -41,7 +41,7 @@ plot_data(recipe = recipe, data = calibrated_data, skill_metrics = skill_metrics, probabilities = probs, significance = T) ))}) -outdir <- get_dir(recipe) +outdir <- get_dir(recipe = recipe, variable = data$hcst$attrs$Variable$varName) # ------- TESTS -------- @@ -193,19 +193,19 @@ class(skill_metrics$rpss), ) expect_equal( dim(skill_metrics$rpss), -c(time = 3, latitude = 3, longitude = 3) +c(var = 1, time = 3, latitude = 3, longitude = 3) ) expect_equal( dim(skill_metrics$rpss_significance), dim(skill_metrics$rpss) ) expect_equal( -as.vector(skill_metrics$rpss[, 2, 3]), +as.vector(skill_metrics$rpss[, , 2, 3]), c(-0.2918857, -1.4809143, -1.3842286), tolerance = 0.0001 ) expect_equal( -as.vector(skill_metrics$rpss_significance[, 2, 3]), +as.vector(skill_metrics$rpss_significance[, , 2, 3]), rep(FALSE, 3) ) diff --git a/tools/data_summary.R b/tools/data_summary.R index 92dcb353..714c5a0b 100644 --- a/tools/data_summary.R +++ b/tools/data_summary.R @@ -1,5 +1,7 @@ # Print a summary of the loaded data for the user, for each object. -# object: hindcast, forecast or reference data in s2dv_cube format. +# data_cube: An s2dv_cube returned by one of the functions in Auto-S2S +# recipe: The Auto-S2S recipe as returned by read_yaml() + ## TODO: Adapt to daily/subseasonal cases ## TODO: Add check for missing files/NAs by dimension @@ -13,9 +15,11 @@ data_summary <- function(data_cube, recipe) { } months <- unique(format(as.Date(data_cube$attrs$Dates), format = '%B')) months <- paste(as.character(months), collapse=", ") - sdate_min <- format(min(as.Date(data_cube$attrs$Dates)), format = date_format) - sdate_max <- format(max(as.Date(data_cube$attrs$Dates)), format = date_format) - # Create log instance and sink output to logfile and terminal + sdate_min <- format(min(as.Date(data_cube$attrs$Dates)), + format = date_format) + sdate_max <- format(max(as.Date(data_cube$attrs$Dates)), + format = date_format) + # Log the summary info(recipe$Run$logger, "DATA SUMMARY:") info(recipe$Run$logger, paste(object_name, "months:", months)) info(recipe$Run$logger, paste(object_name, "range:", sdate_min, "to", @@ -26,11 +30,18 @@ data_summary <- function(data_cube, recipe) { for (i in output_string) { info(recipe$Run$logger, i) } + # Print statistical summary of the data for every variable info(recipe$Run$logger, paste0("Statistical summary of the data in ", object_name, ":")) - output_string <- capture.output(summary(data_cube$data)) - for (i in output_string) { - info(recipe$Run$logger, i) + for (var_index in 1:data_cube$dims[['var']]) { + info(recipe$Run$logger, + paste("Variable:", data_cube$attrs$Variable$varName[var_index])) + output_string <- capture.output(summary(Subset(data_cube$data, + along = "var", + indices = var_index))) + for (i in output_string) { + info(recipe$Run$logger, i) + } } info(recipe$Run$logger, "---------------------------------------------") invisible(gc()) -- GitLab From e578e2798eeeceba25525cf93b7bda95347ddf9d Mon Sep 17 00:00:00 2001 From: aho Date: Tue, 30 May 2023 14:28:10 +0200 Subject: [PATCH 166/388] Modify obs loading for multivar; add metadata_dims = 'var' --- modules/Loading/Loading_decadal.R | 94 +++++++++++++++++++++---------- 1 file changed, 63 insertions(+), 31 deletions(-) diff --git a/modules/Loading/Loading_decadal.R b/modules/Loading/Loading_decadal.R index 43b3c54f..626afeef 100644 --- a/modules/Loading/Loading_decadal.R +++ b/modules/Loading/Loading_decadal.R @@ -133,7 +133,8 @@ load_datasets <- function(recipe) { if (length(variable) > 1) { Start_default_arg_list <- c(Start_default_arg_list, list(table = table, grid = grid, version = version, - table_depends = 'var', grid_depends = 'var', version_depends = 'var')) + table_depends = 'var', grid_depends = 'var', version_depends = 'var', + metadata_dims = 'var')) } if (!multi_path) { @@ -277,9 +278,15 @@ load_datasets <- function(recipe) { #------------------------------------------- # Step 3. Load the reference #------------------------------------------- - obs.path <- file.path(archive$src, archive$Reference[[ref.name]]$src, store.freq, - paste0(variable, archive$Reference[[ref.name]][[store.freq]][[variable]])) - obs.files <- paste0('$var$_$file_date$.nc') +#-------NEW-------- + obs.path <- file.path(archive$src, archive$Reference[[ref.name]]$src, + store.freq, "$var$$var_dir$", "$var$_$file_date$.nc") + var_dir_obs <- archive$Reference[[ref.name]][[store.freq]][variable] # list(tas = "_f1h-r1440x721cds", tos = "_f1h-r1440x721cds") + +# obs.path <- file.path(archive$src, archive$Reference[[ref.name]]$src, store.freq, +# paste0(variable, archive$Reference[[ref.name]][[store.freq]][[variable]])) +# obs.files <- paste0('$var$_$file_date$.nc') +#--------NEW_END------------- # Get from startR_cube # dates <- attr(hcst, 'Variables')$common$time @@ -299,8 +306,12 @@ load_datasets <- function(recipe) { # Restore correct dimensions dim(dates) <- dim(dates_file) - obs <- Start(dat = file.path(obs.path, obs.files), +#--------NEW---------- + obs <- Start(dat = obs.path, var = variable, + var_dir = var_dir_obs, + var_dir_depends = 'var', +#--------NEW_END------------ file_date = unique(format(dates, '%Y%m')), time = dates, # [sday, sweek, syear, time] time_across = 'file_date', @@ -327,8 +338,12 @@ load_datasets <- function(recipe) { # Method 2: reshape hcst time attr's date into an array with time dim then as obs date selector #//////////////// - obs <- Start(dat = file.path(obs.path, obs.files), +#-----------NEW------------ + obs <- Start(dat = obs.path, var = variable, + var_dir = var_dir_obs, + var_dir_depends = 'var', +#--------NEW_END------------ file_date = dates_file, #dates_arr, # [sday, sweek, syear, time] split_multiselected_dims = TRUE, latitude = values(list(lats.min, lats.max)), @@ -344,6 +359,9 @@ load_datasets <- function(recipe) { longitude = c('lon','longitude')), return_vars = list(latitude = NULL, longitude = NULL, time = 'file_date'), +#-------NEW---------- + metadata_dims = 'var', +#-------NEW_END--------- silent = !DEBUG, retrieve = TRUE) } @@ -353,6 +371,9 @@ load_datasets <- function(recipe) { # sday sweek syear time # 1 1 2 14 + # Remove var_dir dimension + obs <- Subset(obs, along = "var_dir", indices = 1, drop = "selected") + # Only ensemble dim could be different if (!identical(dim(obs), dim(hcst$data)[-9])) { error(recipe$Run$logger, @@ -480,36 +501,47 @@ load_datasets <- function(recipe) { #------------------------------------------- # Remove negative values in accumulative variables dictionary <- read_yaml("conf/variable-dictionary.yml") - if (dictionary$vars[[variable]]$accum) { - info(recipe$Run$logger, - " Accumulated variable: setting negative values to zero.") - obs$data[obs$data < 0] <- 0 - hcst$data[hcst$data < 0] <- 0 - if (!is.null(fcst)) { - fcst$data[fcst$data < 0] <- 0 - } - } - # Convert precipitation to mm/day - ## TODO: Make a function? - if (variable == "prlr") { - # Verify that the units are m/s and the same in obs and hcst - if (((attr(obs$Variable, "variable")$units == "m s-1") || - (attr(obs$Variable, "variable")$units == "m s**-1")) && - ((attr(hcst$Variable, "variable")$units == "m s-1") || - (attr(hcst$Variable, "variable")$units == "m s**-1"))) { - +#----------NEW---------- + for (var_idx in 1:length(variable)) { + var_name <- variable[var_idx] + if (dictionary$vars[[var_name]]$accum) { info(recipe$Run$logger, - "Converting precipitation from m/s to mm/day.") - obs$data <- obs$data*86400*1000 - attr(obs$Variable, "variable")$units <- "mm/day" - hcst$data <- hcst$data*86400*1000 - attr(hcst$Variable, "variable")$units <- "mm/day" + paste0("Accumulated variable ", var_name, + ": setting negative values to zero.")) + # obs$data[, var_idx, , , , , , , ] <- pmax(Subset(obs$data, + # along = "var", + # indices = var_idx, F), 0) + obs$data[, var_idx, , , , , , , ][obs$data[, var_idx, , , , , , , ] < 0] <- 0 + hcst$data[, var_idx, , , , , , , ][hcst$data[, var_idx, , , , , , , ] < 0] <- 0 if (!is.null(fcst)) { - fcst$data <- fcst$data*86400*1000 - attr(fcst$Variable, "variable")$units <- "mm/day" + fcst$data[, var_idx, , , , , , , ][fcst$data[, var_idx, , , , , , , ] < 0] <- 0 + } + } + + # Convert prlr from m/s to mm/day + ## TODO: Make a unit conversion function + if (variable[[var_idx]] == "prlr") { + # Verify that the units are m/s and the same in obs and hcst + if (((obs$attrs$Variable$metadata[[var_name]]$units == "m s-1") || + (obs$attrs$Variable$metadata[[var_name]]$units == "m s**-1")) && + ((hcst$attrs$Variable$metadata[[var_name]]$units == "m s-1") || + (hcst$attrs$Variable$metadata[[var_name]]$units == "m s**-1"))) { + info(recipe$Run$logger, "Converting precipitation from m/s to mm/day.") + obs$data[, var_idx, , , , , , , ] <- + obs$data[, var_idx, , , , , , , ]*86400*1000 + obs$attrs$Variable$metadata[[var_name]]$units <- "mm/day" + hcst$data[, var_idx, , , , , , , ] <- + hcst$data[, var_idx, , , , , , , ]*86400*1000 + hcst$attrs$Variable$metadata[[var_name]]$units <- "mm/day" + if (!is.null(fcst)) { + fcst$data[, var_idx, , , , , , , ] <- + fcst$data[, var_idx, , , , , , , ]*86400*1000 + fcst$attrs$Variable$metadata[[var_name]]$units <- "mm/day" + } } } } +#---------NEW_END--------- #------------------------------------------- # Step 6. Print summary -- GitLab From d437f9d0bfe6cc1f847600f8f26d1d8787648fe4 Mon Sep 17 00:00:00 2001 From: aho Date: Tue, 30 May 2023 14:43:52 +0200 Subject: [PATCH 167/388] Remove comment lines --- modules/Loading/Loading_decadal.R | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/modules/Loading/Loading_decadal.R b/modules/Loading/Loading_decadal.R index 626afeef..74c97e29 100644 --- a/modules/Loading/Loading_decadal.R +++ b/modules/Loading/Loading_decadal.R @@ -278,7 +278,6 @@ load_datasets <- function(recipe) { #------------------------------------------- # Step 3. Load the reference #------------------------------------------- -#-------NEW-------- obs.path <- file.path(archive$src, archive$Reference[[ref.name]]$src, store.freq, "$var$$var_dir$", "$var$_$file_date$.nc") var_dir_obs <- archive$Reference[[ref.name]][[store.freq]][variable] # list(tas = "_f1h-r1440x721cds", tos = "_f1h-r1440x721cds") @@ -286,7 +285,6 @@ load_datasets <- function(recipe) { # obs.path <- file.path(archive$src, archive$Reference[[ref.name]]$src, store.freq, # paste0(variable, archive$Reference[[ref.name]][[store.freq]][[variable]])) # obs.files <- paste0('$var$_$file_date$.nc') -#--------NEW_END------------- # Get from startR_cube # dates <- attr(hcst, 'Variables')$common$time @@ -306,12 +304,10 @@ load_datasets <- function(recipe) { # Restore correct dimensions dim(dates) <- dim(dates_file) -#--------NEW---------- obs <- Start(dat = obs.path, var = variable, var_dir = var_dir_obs, var_dir_depends = 'var', -#--------NEW_END------------ file_date = unique(format(dates, '%Y%m')), time = dates, # [sday, sweek, syear, time] time_across = 'file_date', @@ -338,12 +334,10 @@ load_datasets <- function(recipe) { # Method 2: reshape hcst time attr's date into an array with time dim then as obs date selector #//////////////// -#-----------NEW------------ obs <- Start(dat = obs.path, var = variable, var_dir = var_dir_obs, var_dir_depends = 'var', -#--------NEW_END------------ file_date = dates_file, #dates_arr, # [sday, sweek, syear, time] split_multiselected_dims = TRUE, latitude = values(list(lats.min, lats.max)), @@ -359,9 +353,7 @@ load_datasets <- function(recipe) { longitude = c('lon','longitude')), return_vars = list(latitude = NULL, longitude = NULL, time = 'file_date'), -#-------NEW---------- metadata_dims = 'var', -#-------NEW_END--------- silent = !DEBUG, retrieve = TRUE) } @@ -501,7 +493,6 @@ load_datasets <- function(recipe) { #------------------------------------------- # Remove negative values in accumulative variables dictionary <- read_yaml("conf/variable-dictionary.yml") -#----------NEW---------- for (var_idx in 1:length(variable)) { var_name <- variable[var_idx] if (dictionary$vars[[var_name]]$accum) { @@ -541,7 +532,6 @@ load_datasets <- function(recipe) { } } } -#---------NEW_END--------- #------------------------------------------- # Step 6. Print summary -- GitLab From 6dded665cef35736dcd04d4dad1f3bb666985adc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pierre-Antoine=20Bretonni=C3=A8re?= Date: Wed, 31 May 2023 17:10:59 +0200 Subject: [PATCH 168/388] Add formattable and kableextra + gribr --- conda_installation/environment-cerise.yml | 28 +++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/conda_installation/environment-cerise.yml b/conda_installation/environment-cerise.yml index 44a0e719..ea1ffa3d 100644 --- a/conda_installation/environment-cerise.yml +++ b/conda_installation/environment-cerise.yml @@ -17,10 +17,10 @@ dependencies: - bwidget=1.9.14=ha770c72_1 - bzip2=1.0.8=h7f98852_4 - c-ares=1.18.1=h7f98852_0 - - ca-certificates=2022.12.7=ha878542_0 + - ca-certificates=2023.5.7=hbcca054_0 - cairo=1.16.0=ha61ee94_1014 - cdo=2.1.1=h4f55462_2 - - certifi=2022.12.7=pyhd8ed1ab_0 + - certifi=2023.5.7=pyhd8ed1ab_0 - cffi=1.15.1=py37h43b0acd_1 - colorama=0.4.6=pyhd8ed1ab_0 - conda=4.14.0=py37h89c1867_0 @@ -153,9 +153,10 @@ dependencies: - nspr=4.35=h27087fc_0 - nss=3.89=he45b914_0 - numpy=1.21.6=py37h976b520_0 - - openssl=3.1.0=hd590300_1 + - openssl=3.1.1=hd590300_1 - packaging=23.0=pyhd8ed1ab_0 - pandas=1.3.5=py37he8f5f7f_0 + - pandoc=2.19.2=h32600fe_2 - pango=1.50.14=hd33c08f_0 - paramiko=3.1.0=pyhd8ed1ab_0 - pcre2=10.40=hc3806b6_0 @@ -181,6 +182,7 @@ dependencies: - pytz=2022.7.1=pyhd8ed1ab_0 - qt-main=5.15.8=h5d23da1_6 - r-abind=1.4_5=r42hc72bb7e_1004 + - r-askpass=1.1=r42h06615bd_3 - r-assertthat=0.2.1=r42hc72bb7e_3 - r-base=4.2.3=ha7d60f8_0 - r-base64enc=0.1_3=r42h06615bd_1005 @@ -200,6 +202,7 @@ dependencies: - r-configr=0.3.5=r42hc72bb7e_0 - r-cpp11=0.4.3=r42hc72bb7e_0 - r-crayon=1.5.2=r42hc72bb7e_1 + - r-curl=4.3.3=r42h06615bd_1 - r-desc=1.4.1=r42h6115d3f_0 - r-diffobj=0.3.5=r42h76d94ec_0 - r-digest=0.6.31=r42h38f115c_0 @@ -215,6 +218,7 @@ dependencies: - r-fields=14.1=r42hac0b197_1 - r-fontawesome=0.5.1=r42hc72bb7e_0 - r-foreach=1.5.2=r42hc72bb7e_1 + - r-formattable=0.2.1=r42ha770c72_1 - r-fs=1.6.1=r42h38f115c_0 - r-future=1.32.0=r42hc72bb7e_0 - r-generics=0.1.2=r42h142f84f_0 @@ -223,16 +227,21 @@ dependencies: - r-ggplot2=3.4.1=r42hc72bb7e_0 - r-globals=0.16.2=r42hc72bb7e_0 - r-glue=1.6.2=r42h06615bd_1 - - r-gribr=1.2.4=r42h9ecb321_2 + - r-gribr=1.2.5=r42hd590300_3 - r-gridextra=2.3=r42hc72bb7e_1004 - r-gtable=0.3.3=r42hc72bb7e_0 + - r-highr=0.10=r42hc72bb7e_0 - r-htmltools=0.5.5=r42h38f115c_0 + - r-htmlwidgets=1.6.2=r42hc72bb7e_0 - r-httpuv=1.6.9=r42h38f115c_0 + - r-httr=1.4.6=r42hc72bb7e_0 - r-ini=0.3.1=r42hc72bb7e_1004 - r-isoband=0.2.7=r42h38f115c_1 - r-iterators=1.0.14=r42hc72bb7e_1 - r-jquerylib=0.1.4=r42hc72bb7e_1 - r-jsonlite=1.8.0=r42h76d94ec_0 + - r-kableextra=1.3.4=r42hc72bb7e_1 + - r-knitr=1.43=r42hc72bb7e_0 - r-labeling=0.4.2=r42hc72bb7e_2 - r-later=1.3.0=r42h7525677_1 - r-lattice=0.20_45=r42h06615bd_1 @@ -255,6 +264,7 @@ dependencies: - r-nbclust=3.0.1=r42hc72bb7e_1 - r-ncdf4=1.21=r42h93dc0a4_1 - r-nlme=3.1_162=r42hac0b197_0 + - r-openssl=2.0.6=r42habfbb5e_0 - r-parallelly=1.34.0=r42hc72bb7e_0 - r-pbapply=1.7_0=r42hc72bb7e_0 - r-pcict=0.5_4.4=r42h133d619_0 @@ -277,13 +287,16 @@ dependencies: - r-rcpptoml=0.1.7=r42h7525677_2 - r-rematch2=2.1.2=r42h142f84f_0 - r-rlang=1.1.0=r42h38f115c_0 + - r-rmarkdown=2.21=r42hc72bb7e_0 - r-rpmg=2.2_3=r42hc72bb7e_2 - r-rprojroot=2.0.3=r42h6115d3f_0 - r-rstudioapi=0.13=r42h6115d3f_0 + - r-rvest=1.0.3=r42hc72bb7e_1 - r-s2dv=1.4.0=r42hc72bb7e_0 - r-s2dverification=2.10.3=r42hc72bb7e_1 - r-sass=0.4.5=r42h38f115c_0 - r-scales=1.2.1=r42hc72bb7e_1 + - r-selectr=0.4_2=r42hc72bb7e_2 - r-shiny=1.7.4=r42h785f33e_0 - r-sourcetools=0.1.7_1=r42h38f115c_0 - r-sp=1.6_0=r42h133d619_0 @@ -293,8 +306,12 @@ dependencies: - r-startr=2.2.1=r42hc72bb7e_0 - r-stringi=1.7.12=r42h1ae9187_0 - r-stringr=1.5.0=r42h785f33e_0 + - r-svglite=2.1.1=r42he8f5e61_0 + - r-sys=3.4.2=r42h57805ef_0 + - r-systemfonts=1.0.4=r42h0ff29ef_1 - r-testthat=3.1.4=r42h884c59f_0 - r-tibble=3.2.1=r42h133d619_1 + - r-tinytex=0.45=r42hc72bb7e_0 - r-tzdb=0.3.0=r42h7525677_1 - r-utf8=1.2.3=r42h133d619_0 - r-uuid=1.1_0=r42h06615bd_1 @@ -302,7 +319,10 @@ dependencies: - r-viridis=0.6.2=r42hc72bb7e_1 - r-viridislite=0.4.1=r42hc72bb7e_1 - r-waldo=0.4.0=r42h6115d3f_0 + - r-webshot=0.5.4=r42hc72bb7e_1 - r-withr=2.5.0=r42hc72bb7e_1 + - r-xfun=0.39=r42ha503ecb_0 + - r-xml2=1.3.3=r42h884c59f_0 - r-xtable=1.8_4=r42hc72bb7e_4 - r-yaml=2.3.7=r42h133d619_0 - readline=8.1.2=h0f457ee_0 -- GitLab From 520cdafee3a639ca9d9cb55e87a1868483ceff57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pierre-Antoine=20Bretonni=C3=A8re?= Date: Thu, 1 Jun 2023 16:44:08 +0200 Subject: [PATCH 169/388] Add gribr (local and official) --- .../environment-cerise-localgribr.yml | 398 ++++++++++++++++++ conda_installation/environment-cerise.yml | 192 +++++---- conda_installation/gribr_1.2.5.tar.gz | Bin 0 -> 3161637 bytes conda_installation/load_cerise.bash | 12 +- 4 files changed, 500 insertions(+), 102 deletions(-) create mode 100644 conda_installation/environment-cerise-localgribr.yml create mode 100644 conda_installation/gribr_1.2.5.tar.gz diff --git a/conda_installation/environment-cerise-localgribr.yml b/conda_installation/environment-cerise-localgribr.yml new file mode 100644 index 00000000..20808ef8 --- /dev/null +++ b/conda_installation/environment-cerise-localgribr.yml @@ -0,0 +1,398 @@ +name: condaCerise +channels: + - r + - conda-forge + - defaults +dependencies: + - _libgcc_mutex=0.1=conda_forge + - _openmp_mutex=4.5=2_gnu + - _r-mutex=1.0.0=anacondar_1 + - alsa-lib=1.2.8=h166bdaf_0 + - atk-1.0=2.36.0=ha1a6a79_0 + - attr=2.5.1=h166bdaf_1 + - binutils_impl_linux-64=2.40=hf600244_0 + - brotli=1.0.9=h5eee18b_7 + - brotli-bin=1.0.9=h5eee18b_7 + - brotlipy=0.7.0=py37h27cfd23_1003 + - bwidget=1.9.11=1 + - bzip2=1.0.8=h7b6447c_0 + - c-ares=1.19.0=h5eee18b_0 + - ca-certificates=2023.01.10=h06a4308_0 + - cairo=1.16.0=ha61ee94_1014 + - cdo=2.1.1=h4f55462_2 + - certifi=2022.12.7=py37h06a4308_0 + - cffi=1.15.1=py37h5eee18b_3 + - conda=4.14.0=py37h89c1867_0 + - conda-package-handling=2.0.2=py37h06a4308_0 + - conda-package-streaming=0.7.0=py37h06a4308_0 + - cov-core=1.15.0=py_1 + - curl=7.88.1=hdc1c0ab_1 + - cycler=0.11.0=pyhd3eb1b0_0 + - dbus=1.13.18=hb2f20db_0 + - eccodes=2.29.0=h7986f14_1 + - expat=2.5.0=h27087fc_0 + - fftw=3.3.10=nompi_hf0379b8_106 + - findlibs=0.0.2=pyhd8ed1ab_0 + - flit-core=3.6.0=pyhd3eb1b0_0 + - font-ttf-dejavu-sans-mono=2.37=hd3eb1b0_0 + - font-ttf-inconsolata=2.001=hcb22688_0 + - font-ttf-source-code-pro=2.030=hd3eb1b0_0 + - font-ttf-ubuntu=0.83=h8b1ccd4_0 + - fontconfig=2.14.2=h14ed4e7_0 + - fonts-anaconda=1=h8fa9717_0 + - fonts-conda-ecosystem=1=hd3eb1b0_0 + - fonttools=4.25.0=pyhd3eb1b0_0 + - freeglut=3.2.2=h9c3ff4c_1 + - freetype=2.12.1=h4a9f257_0 + - fribidi=1.0.10=h7b6447c_0 + - gcc_impl_linux-64=12.2.0=hcc96c02_19 + - gdk-pixbuf=2.42.10=h5eee18b_0 + - gettext=0.21.1=h27087fc_0 + - gfortran_impl_linux-64=12.2.0=h55be85b_19 + - giflib=5.2.1=h5eee18b_3 + - glib=2.74.1=h6239696_1 + - glib-tools=2.74.1=h6239696_1 + - gobject-introspection=1.72.0=py37hbb6d50b_1 + - graphite2=1.3.14=h295c915_1 + - graphviz=7.1.0=h2e5815a_0 + - gsl=2.7.1=h6e86dc7_1 + - gst-plugins-base=1.22.0=h4243ec0_2 + - gstreamer=1.22.0=h25f0c4b_2 + - gstreamer-orc=0.4.33=h166bdaf_0 + - gtk2=2.24.33=h73c1081_2 + - gts=0.7.6=hb67d8dd_3 + - gxx_impl_linux-64=12.2.0=hcc96c02_19 + - harfbuzz=6.0.0=h8e241bc_0 + - hdf4=4.2.15=h9772cbc_5 + - hdf5=1.12.2=nompi_h4df4325_101 + - icu=70.1=h27087fc_0 + - idna=3.4=py37h06a4308_0 + - jack=1.9.22=h11f4161_0 + - jasper=4.0.0=h0ff4b12_0 + - jpeg=9e=h5eee18b_1 + - kernel-headers_linux-64=2.6.32=he073ed8_15 + - keyutils=1.6.1=h166bdaf_0 + - kiwisolver=1.4.4=py37h6a678d5_0 + - krb5=1.20.1=h81ceb04_0 + - lame=3.100=h7b6447c_0 + - lcms2=2.12=h3be6417_0 + - ld_impl_linux-64=2.40=h41732ed_0 + - lerc=3.0=h295c915_0 + - libaec=1.0.6=hcb278e6_1 + - libblas=3.9.0=16_linux64_openblas + - libbrotlicommon=1.0.9=h5eee18b_7 + - libbrotlidec=1.0.9=h5eee18b_7 + - libbrotlienc=1.0.9=h5eee18b_7 + - libcap=2.66=ha37c62d_0 + - libcblas=3.9.0=16_linux64_openblas + - libclang=15.0.7=default_had23c3d_1 + - libclang13=15.0.7=default_h3e3d535_1 + - libcups=2.3.3=h36d4200_3 + - libcurl=7.88.1=hdc1c0ab_1 + - libdb=6.2.32=h6a678d5_1 + - libdeflate=1.17=h5eee18b_0 + - libedit=3.1.20221030=h5eee18b_0 + - libev=4.33=h7f8727e_1 + - libevent=2.1.10=h28343ad_4 + - libffi=3.4.4=h6a678d5_0 + - libflac=1.4.2=h27087fc_0 + - libgcc-devel_linux-64=12.2.0=h3b97bd3_19 + - libgcc-ng=12.2.0=h65d4601_19 + - libgcrypt=1.10.1=h166bdaf_0 + - libgd=2.3.3=h695aa2c_1 + - libgfortran-ng=12.2.0=h69a702a_19 + - libgfortran5=12.2.0=h337968e_19 + - libglib=2.74.1=h606061b_1 + - libglu=9.0.0=hf484d3e_1 + - libgomp=12.2.0=h65d4601_19 + - libgpg-error=1.46=h620e276_0 + - libiconv=1.17=h166bdaf_0 + - liblapack=3.9.0=16_linux64_openblas + - libllvm15=15.0.7=hadd5161_1 + - libnetcdf=4.9.1=nompi_h34a3ff0_101 + - libnghttp2=1.52.0=h61bc06f_0 + - libnsl=2.0.0=h5eee18b_0 + - libogg=1.3.5=h27cfd23_1 + - libopenblas=0.3.21=h043d6bf_0 + - libopus=1.3.1=h7b6447c_0 + - libpng=1.6.39=h5eee18b_0 + - libpq=15.2=hb675445_0 + - librsvg=2.54.4=h7abd40a_0 + - libsanitizer=12.2.0=h46fd767_19 + - libsndfile=1.2.0=hb75c966_0 + - libsodium=1.0.18=h7b6447c_0 + - libsqlite=3.40.0=h753d276_0 + - libssh2=1.10.0=hf14f497_3 + - libstdcxx-devel_linux-64=12.2.0=h3b97bd3_19 + - libstdcxx-ng=12.2.0=h46fd767_19 + - libsystemd0=252=h2a991cd_0 + - libtiff=4.5.0=h6a678d5_2 + - libtool=2.4.7=h27087fc_0 + - libudev1=253=h0b41bf4_0 + - libuuid=2.32.1=h7f98852_1000 + - libvorbis=1.3.7=h7b6447c_0 + - libwebp=1.2.4=h11a3e52_1 + - libwebp-base=1.2.4=h5eee18b_1 + - libxcb=1.13=h1bed415_1 + - libxkbcommon=1.5.0=h79f4944_1 + - libxml2=2.10.3=hca2bb57_4 + - libzip=1.9.2=hc929e4a_1 + - libzlib=1.2.13=h166bdaf_4 + - lz4-c=1.9.4=h6a678d5_0 + - magics=4.13.0=h37abd2f_1 + - magics-python=1.5.8=pyhd8ed1ab_1 + - make=4.2.1=h1bed415_1 + - matplotlib=3.5.3=py37h89c1867_2 + - matplotlib-base=3.5.3=py37hf590b9c_0 + - mock=5.0.1=pyhd8ed1ab_0 + - mpg123=1.31.3=hcb278e6_0 + - munkres=1.1.4=py_0 + - mysql-common=8.0.32=ha901b37_0 + - mysql-libs=8.0.32=hd7da12d_0 + - ncurses=6.4=h6a678d5_0 + - ninja=1.10.2=h06a4308_5 + - ninja-base=1.10.2=hd09550d_5 + - nose=1.3.7=py_1006 + - nose-cov=1.6=py_1 + - nspr=4.35=h6a678d5_0 + - nss=3.89=he45b914_0 + - numpy=1.21.6=py37h976b520_0 + - openssl=3.1.1=hd590300_1 + - packaging=22.0=py37h06a4308_0 + - pandoc=2.12=h06a4308_3 + - pango=1.50.14=hd33c08f_0 + - paramiko=3.1.0=pyhd8ed1ab_0 + - pcre2=10.40=hc3806b6_0 + - phantomjs=2.1.1=1 + - pillow=9.4.0=py37h6a678d5_0 + - pip=23.0.1=pyhd8ed1ab_0 + - pixman=0.40.0=h7f8727e_1 + - ply=3.11=py37_0 + - proj=9.1.1=h8ffa02c_2 + - pulseaudio=16.1=ha8d29e2_1 + - pycosat=0.6.4=py37h5eee18b_0 + - pycparser=2.21=pyhd3eb1b0_0 + - pynacl=1.5.0=py37h5eee18b_0 + - pyopenssl=23.0.0=py37h06a4308_0 + - pyparsing=3.0.9=pyhd8ed1ab_0 + - pyqt=5.15.7=py37hf30b843_1 + - pyqt5-sip=12.11.0=py37hd23a5d3_1 + - pysocks=1.7.1=py37_1 + - python=3.7.12=hf930737_100_cpython + - python-dateutil=2.8.2=pyhd8ed1ab_0 + - python_abi=3.7=3_cp37m + - qt-main=5.15.8=h5d23da1_6 + - r-abind=1.4_5=r42hc72bb7e_1004 + - r-askpass=1.1=r42h06615bd_3 + - r-assertthat=0.2.1=r42hc72bb7e_3 + - r-base=4.2.3=ha7d60f8_0 + - r-base64enc=0.1_3=r42h06615bd_1005 + - r-bigmemory=4.6.1=r42h7525677_1 + - r-bigmemory.sri=0.1.6=r42hc72bb7e_0 + - r-brio=1.1.3=r42h76d94ec_0 + - r-bslib=0.4.2=r42hc72bb7e_0 + - r-cachem=1.0.7=r42h133d619_0 + - r-callr=3.7.0=r42h6115d3f_0 + - r-cli=3.6.0=r42h38f115c_0 + - r-climdex.pcic=1.1_11=r42h7525677_1 + - r-climprojdiags=0.3.0=r42hc72bb7e_0 + - r-clock=0.6.1=r42h7525677_1 + - r-codetools=0.2_19=r42hc72bb7e_0 + - r-colorspace=2.1_0=r42h133d619_0 + - r-commonmark=1.9.0=r42h133d619_0 + - r-configr=0.3.5=r42hc72bb7e_0 + - r-cpp11=0.4.3=r42hc72bb7e_0 + - r-crayon=1.5.2=r42hc72bb7e_1 + - r-curl=4.3.3=r42h06615bd_1 + - r-desc=1.4.1=r42h6115d3f_0 + - r-diffobj=0.3.5=r42h76d94ec_0 + - r-digest=0.6.31=r42h38f115c_0 + - r-doparallel=1.0.17=r42hc72bb7e_1 + - r-dotcall64=1.0_2=r42hac0b197_1 + - r-easyncdf=0.1.1=r42hc72bb7e_1 + - r-easyverification=0.4.4=r42h7525677_2 + - r-ellipsis=0.3.2=r42h06615bd_1 + - r-evaluate=0.15=r42h6115d3f_0 + - r-fansi=1.0.4=r42h133d619_0 + - r-farver=2.1.1=r42h7525677_1 + - r-fastmap=1.1.1=r42h38f115c_0 + - r-fields=14.1=r42hac0b197_1 + - r-fontawesome=0.5.1=r42hc72bb7e_0 + - r-foreach=1.5.2=r42hc72bb7e_1 + - r-formattable=0.2.1=r42ha770c72_1 + - r-fs=1.6.1=r42h38f115c_0 + - r-future=1.32.0=r42hc72bb7e_0 + - r-generics=0.1.2=r42h142f84f_0 + - r-geomap=2.5_0=r42h06615bd_1 + - r-geomapdata=2.0_0=r42hc72bb7e_1 + - r-ggplot2=3.4.1=r42hc72bb7e_0 + - r-globals=0.16.2=r42hc72bb7e_0 + - r-glue=1.6.2=r42h06615bd_1 + - r-gridextra=2.3=r42hc72bb7e_1004 + - r-gtable=0.3.3=r42hc72bb7e_0 + - r-highr=0.10=r42hc72bb7e_0 + - r-htmltools=0.5.5=r42h38f115c_0 + - r-htmlwidgets=1.6.2=r42hc72bb7e_0 + - r-httpuv=1.6.9=r42h38f115c_0 + - r-httr=1.4.6=r42hc72bb7e_0 + - r-ini=0.3.1=r42hc72bb7e_1004 + - r-isoband=0.2.7=r42h38f115c_1 + - r-iterators=1.0.14=r42hc72bb7e_1 + - r-jquerylib=0.1.4=r42hc72bb7e_1 + - r-jsonlite=1.8.0=r42h76d94ec_0 + - r-kableextra=1.3.4=r42hc72bb7e_1 + - r-knitr=1.43=r42hc72bb7e_0 + - r-labeling=0.4.2=r42hc72bb7e_2 + - r-later=1.3.0=r42h7525677_1 + - r-lattice=0.20_45=r42h06615bd_1 + - r-lifecycle=1.0.3=r42hc72bb7e_1 + - r-listenv=0.9.0=r42hc72bb7e_0 + - r-lobstr=1.1.2=r42h38f115c_2 + - r-log4r=0.4.3=r42h06615bd_0 + - r-lubridate=1.8.0=r42h884c59f_0 + - r-magrittr=2.0.3=r42h06615bd_1 + - r-mapproj=1.2.11=r42h133d619_0 + - r-maps=3.4.1=r42h06615bd_1 + - r-mass=7.3_58.3=r42h133d619_0 + - r-matrix=1.5_3=r42h5f7b363_0 + - r-mba=0.1_0=r42h7525677_0 + - r-memoise=2.0.1=r42hc72bb7e_1 + - r-mgcv=1.8_42=r42he1ae0d6_0 + - r-mime=0.12=r42h06615bd_1 + - r-multiapply=2.1.3=r42hc72bb7e_1 + - r-munsell=0.5.0=r42hc72bb7e_1005 + - r-nbclust=3.0.1=r42hc72bb7e_1 + - r-ncdf4=1.21=r42h93dc0a4_1 + - r-nlme=3.1_162=r42hac0b197_0 + - r-openssl=2.0.6=r42habfbb5e_0 + - r-parallelly=1.34.0=r42hc72bb7e_0 + - r-pbapply=1.7_0=r42hc72bb7e_0 + - r-pcict=0.5_4.4=r42h133d619_0 + - r-pillar=1.8.1=r42hc72bb7e_1 + - r-pkgconfig=2.0.3=r42hc72bb7e_2 + - r-pkgload=1.2.4=r42h142f84f_0 + - r-plyr=1.8.8=r42h7525677_0 + - r-praise=1.0.0=r42h6115d3f_4 + - r-prettyunits=1.1.1=r42hc72bb7e_2 + - r-processx=3.5.3=r42h76d94ec_0 + - r-proj4=1.0_12=r42h66e2efa_1 + - r-promises=1.2.0.1=r42h7525677_1 + - r-pryr=0.1.6=r42h38f115c_0 + - r-ps=1.7.0=r42h76d94ec_0 + - r-r6=2.5.1=r42hc72bb7e_1 + - r-rappdirs=0.3.3=r42h06615bd_1 + - r-rcolorbrewer=1.1_3=r42h785f33e_1 + - r-rcpp=1.0.10=r42h38f115c_0 + - r-rcpparmadillo=0.11.4.4.0=r42h358215d_0 + - r-rcpptoml=0.1.7=r42h7525677_2 + - r-rematch2=2.1.2=r42h142f84f_0 + - r-rlang=1.1.0=r42h38f115c_0 + - r-rmarkdown=2.21=r42hc72bb7e_0 + - r-rpmg=2.2_3=r42hc72bb7e_2 + - r-rprojroot=2.0.3=r42h6115d3f_0 + - r-rstudioapi=0.13=r42h6115d3f_0 + - r-rvest=1.0.3=r42hc72bb7e_1 + - r-s2dv=1.4.0=r42hc72bb7e_0 + - r-s2dverification=2.10.3=r42hc72bb7e_1 + - r-sass=0.4.5=r42h38f115c_0 + - r-scales=1.2.1=r42hc72bb7e_1 + - r-selectr=0.4_2=r42hc72bb7e_2 + - r-shiny=1.7.4=r42h785f33e_0 + - r-sourcetools=0.1.7_1=r42h38f115c_0 + - r-sp=1.6_0=r42h133d619_0 + - r-spam=2.9_1=r42hb20cf53_1 + - r-specsverification=0.5_3=r42h7525677_2 + - r-splancs=2.01_43=r42h8da6f51_1 + - r-startr=2.2.1=r42hc72bb7e_0 + - r-stringi=1.7.12=r42h1ae9187_0 + - r-stringr=1.5.0=r42h785f33e_0 + - r-svglite=2.1.1=r42he8f5e61_0 + - r-sys=3.4.2=r42h57805ef_0 + - r-systemfonts=1.0.4=r42h0ff29ef_1 + - r-testthat=3.1.4=r42h884c59f_0 + - r-tibble=3.2.1=r42h133d619_1 + - r-tinytex=0.45=r42hc72bb7e_0 + - r-tzdb=0.3.0=r42h7525677_1 + - r-utf8=1.2.3=r42h133d619_0 + - r-uuid=1.1_0=r42h06615bd_1 + - r-vctrs=0.6.0=r42h38f115c_0 + - r-viridis=0.6.2=r42hc72bb7e_1 + - r-viridislite=0.4.1=r42hc72bb7e_1 + - r-waldo=0.4.0=r42h6115d3f_0 + - r-webshot=0.5.4=r42hc72bb7e_1 + - r-withr=2.5.0=r42hc72bb7e_1 + - r-xfun=0.39=r42ha503ecb_0 + - r-xml2=1.3.3=r42h884c59f_0 + - r-xtable=1.8_4=r42hc72bb7e_4 + - r-yaml=2.3.7=r42h133d619_0 + - readline=8.2=h5eee18b_0 + - requests=2.28.1=py37h06a4308_0 + - ruamel_yaml=0.15.100=py37h27cfd23_0 + - sed=4.8=h7b6447c_0 + - simplejson=3.17.6=py37h7f8727e_0 + - sip=6.7.2=py37hd23a5d3_0 + - six=1.16.0=pyhd3eb1b0_1 + - sqlite=3.40.0=h4ff8645_0 + - sysroot_linux-64=2.12=he073ed8_15 + - tk=8.6.12=h1ccaba5_0 + - tktable=2.10=h14c3975_0 + - toml=0.10.2=pyhd3eb1b0_0 + - toolz=0.12.0=py37h06a4308_0 + - tornado=6.2=py37h5eee18b_0 + - typing_extensions=4.4.0=py37h06a4308_0 + - udunits2=2.2.25=hd30922c_1 + - urllib3=1.26.14=py37h06a4308_0 + - wheel=0.38.4=py37h06a4308_0 + - xcb-util=0.4.0=h166bdaf_0 + - xcb-util-image=0.4.0=h166bdaf_0 + - xcb-util-keysyms=0.4.0=h166bdaf_0 + - xcb-util-renderutil=0.3.9=h166bdaf_0 + - xcb-util-wm=0.4.1=h166bdaf_0 + - xkeyboard-config=2.38=h0b41bf4_0 + - xorg-fixesproto=5.0=h7f98852_1002 + - xorg-inputproto=2.3.2=h7f98852_1002 + - xorg-kbproto=1.0.7=h7f98852_1002 + - xorg-libice=1.0.10=h7f98852_0 + - xorg-libsm=1.2.3=hd9c2040_1000 + - xorg-libx11=1.8.4=h0b41bf4_0 + - xorg-libxau=1.0.9=h7f98852_0 + - xorg-libxext=1.3.4=h0b41bf4_2 + - xorg-libxfixes=5.0.3=h7f98852_1004 + - xorg-libxi=1.7.10=h7f98852_0 + - xorg-libxrender=0.9.10=h7f98852_1003 + - xorg-libxt=1.2.1=h7f98852_2 + - xorg-renderproto=0.11.1=h7f98852_1002 + - xorg-xextproto=7.3.0=h0b41bf4_1003 + - xorg-xproto=7.0.31=h27cfd23_1007 + - xz=5.2.10=h5eee18b_1 + - yaml=0.2.5=h7b6447c_0 + - zlib=1.2.13=h166bdaf_4 + - zstandard=0.19.0=py37h5eee18b_0 + - zstd=1.5.5=hc292b87_0 + - pip: + - argparse==1.4.0 + - attrs==22.2.0 + - autosubmit==4.0.73 + - autosubmitconfigparser==1.0.21 + - bcrypt==4.0.1 + - bscearth-utils==0.5.2 + - charset-normalizer==3.1.0 + - configobj==5.0.8 + - coverage==7.2.2 + - cryptography==39.0.2 + - exceptiongroup==1.1.1 + - importlib-metadata==6.1.0 + - iniconfig==2.0.0 + - networkx==2.6.3 + - pluggy==1.0.0 + - portalocker==2.7.0 + - py3dotplus==1.1.0 + - pygments==2.14.0 + - pytest==7.2.2 + - pythondialog==3.5.3 + - ruamel-yaml==0.17.21 + - ruamel-yaml-clib==0.2.7 + - setuptools==67.6.0 + - xlib==0.21 + - zipp==3.15.0 +prefix: /esarchive/scratch/pbretonn/conda-cerise/conda/envs/condaCerise diff --git a/conda_installation/environment-cerise.yml b/conda_installation/environment-cerise.yml index ea1ffa3d..9be18a85 100644 --- a/conda_installation/environment-cerise.yml +++ b/conda_installation/environment-cerise.yml @@ -6,102 +6,104 @@ channels: dependencies: - _libgcc_mutex=0.1=conda_forge - _openmp_mutex=4.5=2_gnu - - _r-mutex=1.0.1=anacondar_1 + - _r-mutex=1.0.0=anacondar_1 - alsa-lib=1.2.8=h166bdaf_0 - - atk-1.0=2.38.0=hd4edc92_1 + - atk-1.0=2.36.0=ha1a6a79_0 - attr=2.5.1=h166bdaf_1 - binutils_impl_linux-64=2.40=hf600244_0 - - brotli=1.0.9=h166bdaf_8 - - brotli-bin=1.0.9=h166bdaf_8 - - brotlipy=0.7.0=py37h540881e_1004 - - bwidget=1.9.14=ha770c72_1 - - bzip2=1.0.8=h7f98852_4 - - c-ares=1.18.1=h7f98852_0 + - brotli=1.0.9=h5eee18b_7 + - brotli-bin=1.0.9=h5eee18b_7 + - brotlipy=0.7.0=py37h27cfd23_1003 + - bwidget=1.9.11=1 + - bzip2=1.0.8=h7b6447c_0 + - c-ares=1.19.0=h5eee18b_0 - ca-certificates=2023.5.7=hbcca054_0 - cairo=1.16.0=ha61ee94_1014 - cdo=2.1.1=h4f55462_2 - certifi=2023.5.7=pyhd8ed1ab_0 - - cffi=1.15.1=py37h43b0acd_1 - - colorama=0.4.6=pyhd8ed1ab_0 + - cffi=1.15.1=py37h5eee18b_3 - conda=4.14.0=py37h89c1867_0 - - conda-package-handling=1.9.0=py37h540881e_0 + - conda-package-handling=2.0.2=py37h06a4308_0 + - conda-package-streaming=0.7.0=py37h06a4308_0 - cov-core=1.15.0=py_1 - curl=7.88.1=hdc1c0ab_1 - - cycler=0.11.0=pyhd8ed1ab_0 - - dbus=1.13.6=h5008d03_3 + - cycler=0.11.0=pyhd3eb1b0_0 + - dbus=1.13.18=hb2f20db_0 - eccodes=2.29.0=h7986f14_1 - expat=2.5.0=h27087fc_0 - fftw=3.3.10=nompi_hf0379b8_106 - findlibs=0.0.2=pyhd8ed1ab_0 - - font-ttf-dejavu-sans-mono=2.37=hab24e00_0 - - font-ttf-inconsolata=3.000=h77eed37_0 - - font-ttf-source-code-pro=2.038=h77eed37_0 - - font-ttf-ubuntu=0.83=hab24e00_0 + - flit-core=3.6.0=pyhd3eb1b0_0 + - font-ttf-dejavu-sans-mono=2.37=hd3eb1b0_0 + - font-ttf-inconsolata=2.001=hcb22688_0 + - font-ttf-source-code-pro=2.030=hd3eb1b0_0 + - font-ttf-ubuntu=0.83=h8b1ccd4_0 - fontconfig=2.14.2=h14ed4e7_0 - - fonts-conda-ecosystem=1=0 - - fonts-conda-forge=1=0 - - fonttools=4.38.0=py37h540881e_0 + - fonts-anaconda=1=h8fa9717_0 + - fonts-conda-ecosystem=1=hd3eb1b0_0 + - fonttools=4.25.0=pyhd3eb1b0_0 - freeglut=3.2.2=h9c3ff4c_1 - - freetype=2.12.1=hca18f0e_1 - - fribidi=1.0.10=h36c2ea0_0 + - freetype=2.12.1=h4a9f257_0 + - fribidi=1.0.10=h7b6447c_0 - gcc_impl_linux-64=12.2.0=hcc96c02_19 - - gdk-pixbuf=2.42.10=h05c8ddd_0 + - gdk-pixbuf=2.42.10=h5eee18b_0 - gettext=0.21.1=h27087fc_0 - gfortran_impl_linux-64=12.2.0=h55be85b_19 - - giflib=5.2.1=h0b41bf4_3 + - giflib=5.2.1=h5eee18b_3 - glib=2.74.1=h6239696_1 - glib-tools=2.74.1=h6239696_1 - - graphite2=1.3.13=h58526e2_1001 + - gobject-introspection=1.72.0=py37hbb6d50b_1 + - graphite2=1.3.14=h295c915_1 - graphviz=7.1.0=h2e5815a_0 - - gsl=2.7=he838d99_0 + - gsl=2.7.1=h6e86dc7_1 - gst-plugins-base=1.22.0=h4243ec0_2 - gstreamer=1.22.0=h25f0c4b_2 - gstreamer-orc=0.4.33=h166bdaf_0 - - gtk2=2.24.33=h90689f9_2 - - gts=0.7.6=h64030ff_2 + - gtk2=2.24.33=h73c1081_2 + - gts=0.7.6=hb67d8dd_3 - gxx_impl_linux-64=12.2.0=hcc96c02_19 - harfbuzz=6.0.0=h8e241bc_0 - hdf4=4.2.15=h9772cbc_5 - hdf5=1.12.2=nompi_h4df4325_101 - icu=70.1=h27087fc_0 - - idna=3.4=pyhd8ed1ab_0 + - idna=3.4=py37h06a4308_0 - jack=1.9.22=h11f4161_0 - jasper=4.0.0=h0ff4b12_0 - - jpeg=9e=h0b41bf4_3 + - jpeg=9e=h5eee18b_1 - kernel-headers_linux-64=2.6.32=he073ed8_15 - keyutils=1.6.1=h166bdaf_0 - - kiwisolver=1.4.4=py37h7cecad7_0 + - kiwisolver=1.4.4=py37h6a678d5_0 - krb5=1.20.1=h81ceb04_0 - - lame=3.100=h166bdaf_1003 - - lcms2=2.15=hfd0df8a_0 + - lame=3.100=h7b6447c_0 + - lcms2=2.12=h3be6417_0 - ld_impl_linux-64=2.40=h41732ed_0 - - lerc=4.0.0=h27087fc_0 + - lerc=3.0=h295c915_0 - libaec=1.0.6=hcb278e6_1 - libblas=3.9.0=16_linux64_openblas - - libbrotlicommon=1.0.9=h166bdaf_8 - - libbrotlidec=1.0.9=h166bdaf_8 - - libbrotlienc=1.0.9=h166bdaf_8 + - libbrotlicommon=1.0.9=h5eee18b_7 + - libbrotlidec=1.0.9=h5eee18b_7 + - libbrotlienc=1.0.9=h5eee18b_7 - libcap=2.66=ha37c62d_0 - libcblas=3.9.0=16_linux64_openblas - libclang=15.0.7=default_had23c3d_1 - libclang13=15.0.7=default_h3e3d535_1 - libcups=2.3.3=h36d4200_3 - libcurl=7.88.1=hdc1c0ab_1 - - libdb=6.2.32=h9c3ff4c_0 - - libdeflate=1.17=h0b41bf4_0 - - libedit=3.1.20191231=he28a2e2_2 - - libev=4.33=h516909a_1 + - libdb=6.2.32=h6a678d5_1 + - libdeflate=1.17=h5eee18b_0 + - libedit=3.1.20221030=h5eee18b_0 + - libev=4.33=h7f8727e_1 - libevent=2.1.10=h28343ad_4 - - libffi=3.4.2=h7f98852_5 + - libffi=3.4.4=h6a678d5_0 - libflac=1.4.2=h27087fc_0 - libgcc-devel_linux-64=12.2.0=h3b97bd3_19 - libgcc-ng=12.2.0=h65d4601_19 - libgcrypt=1.10.1=h166bdaf_0 - - libgd=2.3.3=h5aea950_4 + - libgd=2.3.3=h695aa2c_1 - libgfortran-ng=12.2.0=h69a702a_19 - libgfortran5=12.2.0=h337968e_19 - libglib=2.74.1=h606061b_1 - - libglu=9.0.0=he1b5a44_1001 + - libglu=9.0.0=hf484d3e_1 - libgomp=12.2.0=h65d4601_19 - libgpg-error=1.46=h620e276_0 - libiconv=1.17=h166bdaf_0 @@ -109,77 +111,76 @@ dependencies: - libllvm15=15.0.7=hadd5161_1 - libnetcdf=4.9.1=nompi_h34a3ff0_101 - libnghttp2=1.52.0=h61bc06f_0 - - libnsl=2.0.0=h7f98852_0 - - libogg=1.3.4=h7f98852_1 - - libopenblas=0.3.21=pthreads_h78a6416_3 - - libopus=1.3.1=h7f98852_1 - - libpng=1.6.39=h753d276_0 + - libnsl=2.0.0=h5eee18b_0 + - libogg=1.3.5=h27cfd23_1 + - libopenblas=0.3.21=h043d6bf_0 + - libopus=1.3.1=h7b6447c_0 + - libpng=1.6.39=h5eee18b_0 - libpq=15.2=hb675445_0 - librsvg=2.54.4=h7abd40a_0 - libsanitizer=12.2.0=h46fd767_19 - libsndfile=1.2.0=hb75c966_0 - - libsodium=1.0.18=h36c2ea0_1 + - libsodium=1.0.18=h7b6447c_0 - libsqlite=3.40.0=h753d276_0 - libssh2=1.10.0=hf14f497_3 - libstdcxx-devel_linux-64=12.2.0=h3b97bd3_19 - libstdcxx-ng=12.2.0=h46fd767_19 - libsystemd0=252=h2a991cd_0 - - libtiff=4.5.0=h6adf6a1_2 + - libtiff=4.5.0=h6a678d5_2 - libtool=2.4.7=h27087fc_0 - libudev1=253=h0b41bf4_0 - libuuid=2.32.1=h7f98852_1000 - - libvorbis=1.3.7=h9c3ff4c_0 - - libwebp=1.2.4=h1daa5a0_1 - - libwebp-base=1.2.4=h166bdaf_0 - - libxcb=1.13=h7f98852_1004 + - libvorbis=1.3.7=h7b6447c_0 + - libwebp=1.2.4=h11a3e52_1 + - libwebp-base=1.2.4=h5eee18b_1 + - libxcb=1.13=h1bed415_1 - libxkbcommon=1.5.0=h79f4944_1 - libxml2=2.10.3=hca2bb57_4 - libzip=1.9.2=hc929e4a_1 - libzlib=1.2.13=h166bdaf_4 - - lz4-c=1.9.4=hcb278e6_0 + - lz4-c=1.9.4=h6a678d5_0 - magics=4.13.0=h37abd2f_1 - magics-python=1.5.8=pyhd8ed1ab_1 - - make=4.3=hd18ef5c_1 + - make=4.2.1=h1bed415_1 - matplotlib=3.5.3=py37h89c1867_2 - - matplotlib-base=3.5.3=py37hf395dca_2 + - matplotlib-base=3.5.3=py37hf590b9c_0 - mock=5.0.1=pyhd8ed1ab_0 - mpg123=1.31.3=hcb278e6_0 - - munkres=1.1.4=pyh9f0ad1d_0 + - munkres=1.1.4=py_0 - mysql-common=8.0.32=ha901b37_0 - mysql-libs=8.0.32=hd7da12d_0 - - ncurses=6.3=h27087fc_1 + - ncurses=6.4=h6a678d5_0 + - ninja=1.10.2=h06a4308_5 + - ninja-base=1.10.2=hd09550d_5 - nose=1.3.7=py_1006 - nose-cov=1.6=py_1 - - nspr=4.35=h27087fc_0 + - nspr=4.35=h6a678d5_0 - nss=3.89=he45b914_0 - numpy=1.21.6=py37h976b520_0 - openssl=3.1.1=hd590300_1 - - packaging=23.0=pyhd8ed1ab_0 - - pandas=1.3.5=py37he8f5f7f_0 - - pandoc=2.19.2=h32600fe_2 + - packaging=22.0=py37h06a4308_0 + - pandoc=2.12=h06a4308_3 - pango=1.50.14=hd33c08f_0 - paramiko=3.1.0=pyhd8ed1ab_0 - pcre2=10.40=hc3806b6_0 - phantomjs=2.1.1=1 - pillow=9.4.0=py37h6a678d5_0 - pip=23.0.1=pyhd8ed1ab_0 - - pixman=0.40.0=h36c2ea0_0 - - ply=3.11=py_1 + - pixman=0.40.0=h7f8727e_1 + - ply=3.11=py37_0 - proj=9.1.1=h8ffa02c_2 - - pthread-stubs=0.4=h36c2ea0_1001 - pulseaudio=16.1=ha8d29e2_1 - - pycosat=0.6.4=py37h540881e_0 - - pycparser=2.21=pyhd8ed1ab_0 - - pynacl=1.5.0=py37h540881e_1 - - pyopenssl=23.0.0=pyhd8ed1ab_0 + - pycosat=0.6.4=py37h5eee18b_0 + - pycparser=2.21=pyhd3eb1b0_0 + - pynacl=1.5.0=py37h5eee18b_0 + - pyopenssl=23.0.0=py37h06a4308_0 - pyparsing=3.0.9=pyhd8ed1ab_0 - pyqt=5.15.7=py37hf30b843_1 - pyqt5-sip=12.11.0=py37hd23a5d3_1 - - pysocks=1.7.1=py37h89c1867_5 + - pysocks=1.7.1=py37_1 - python=3.7.12=hf930737_100_cpython - python-dateutil=2.8.2=pyhd8ed1ab_0 - python_abi=3.7=3_cp37m - - pytz=2022.7.1=pyhd8ed1ab_0 - qt-main=5.15.8=h5d23da1_6 - r-abind=1.4_5=r42hc72bb7e_1004 - r-askpass=1.1=r42h06615bd_3 @@ -325,29 +326,24 @@ dependencies: - r-xml2=1.3.3=r42h884c59f_0 - r-xtable=1.8_4=r42hc72bb7e_4 - r-yaml=2.3.7=r42h133d619_0 - - readline=8.1.2=h0f457ee_0 - - requests=2.28.2=pyhd8ed1ab_0 - - ruamel_yaml=0.15.80=py37h540881e_1007 - - scipy=1.7.3=py37hf2a6cf1_0 - - sed=4.8=he412f7d_0 - - simplejson=3.17.6=py37h540881e_1 + - readline=8.2=h5eee18b_0 + - requests=2.28.1=py37h06a4308_0 + - ruamel_yaml=0.15.100=py37h27cfd23_0 + - sed=4.8=h7b6447c_0 + - simplejson=3.17.6=py37h7f8727e_0 - sip=6.7.2=py37hd23a5d3_0 - - six=1.16.0=pyh6c4a22f_0 + - six=1.16.0=pyhd3eb1b0_1 - sqlite=3.40.0=h4ff8645_0 - sysroot_linux-64=2.12=he073ed8_15 - - tk=8.6.12=h27826a3_0 - - tktable=2.10=hb7b940f_3 - - toml=0.10.2=pyhd8ed1ab_0 - - tomli=2.0.1=pyhd8ed1ab_0 - - toolz=0.12.0=pyhd8ed1ab_0 - - tornado=6.2=py37h540881e_0 - - tqdm=4.65.0=pyhd8ed1ab_1 - - typing-extensions=4.5.0=hd8ed1ab_0 - - typing_extensions=4.5.0=pyha770c72_0 - - udunits2=2.2.28=hc3e0081_0 - - unicodedata2=14.0.0=py37h540881e_1 - - urllib3=1.26.15=pyhd8ed1ab_0 - - wheel=0.40.0=pyhd8ed1ab_0 + - tk=8.6.12=h1ccaba5_0 + - tktable=2.10=h14c3975_0 + - toml=0.10.2=pyhd3eb1b0_0 + - toolz=0.12.0=py37h06a4308_0 + - tornado=6.2=py37h5eee18b_0 + - typing_extensions=4.4.0=py37h06a4308_0 + - udunits2=2.2.25=hd30922c_1 + - urllib3=1.26.14=py37h06a4308_0 + - wheel=0.38.4=py37h06a4308_0 - xcb-util=0.4.0=h166bdaf_0 - xcb-util-image=0.4.0=h166bdaf_0 - xcb-util-keysyms=0.4.0=h166bdaf_0 @@ -361,7 +357,6 @@ dependencies: - xorg-libsm=1.2.3=hd9c2040_1000 - xorg-libx11=1.8.4=h0b41bf4_0 - xorg-libxau=1.0.9=h7f98852_0 - - xorg-libxdmcp=1.1.3=h7f98852_0 - xorg-libxext=1.3.4=h0b41bf4_2 - xorg-libxfixes=5.0.3=h7f98852_1004 - xorg-libxi=1.7.10=h7f98852_0 @@ -369,11 +364,12 @@ dependencies: - xorg-libxt=1.2.1=h7f98852_2 - xorg-renderproto=0.11.1=h7f98852_1002 - xorg-xextproto=7.3.0=h0b41bf4_1003 - - xorg-xproto=7.0.31=h7f98852_1007 - - xz=5.2.6=h166bdaf_0 - - yaml=0.2.5=h7f98852_2 + - xorg-xproto=7.0.31=h27cfd23_1007 + - xz=5.2.10=h5eee18b_1 + - yaml=0.2.5=h7b6447c_0 - zlib=1.2.13=h166bdaf_4 - - zstd=1.5.2=h3eb15da_6 + - zstandard=0.19.0=py37h5eee18b_0 + - zstd=1.5.5=hc292b87_0 - pip: - argparse==1.4.0 - attrs==22.2.0 diff --git a/conda_installation/gribr_1.2.5.tar.gz b/conda_installation/gribr_1.2.5.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..2da172102e503c5e62b0da499626f2bc628aed4c GIT binary patch literal 3161637 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 z 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%0DJe<=GNL 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

Q(!+qy=}S*=BFzPDMO=gwbQ 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

wo|r8_RDsbb*^=><+FLH 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

L+cGg<9?cx^?yE@+}D-l-#KBJ$lvQuzm*kw|_4 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

kqoVNs{9JRUkbHBg@DE8lU!~lWAxDME(7KTt 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

Td(`=) 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 z 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

YyP$J9~nzb#z@yh*}~oBZdjwS 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ɁCe0BJerz(0(2U* zZgjHJJfHY9qY6kluBG}BJoFwH$1fM#Q5B;d)x1!LTzwP0+!I@0 zf?TgD27~#>y=&)xf)`%JhMdQOd$5F31v)$ zf~ASAkA`ZDY66sCX{Ot;_GhDDr5Rvp!Smjm4yNm){}nYZwto2WY%&bL90C?Xm!&i@ z`cv0iY*SUNc3g`VZ1be(ZL8?zsOH(Ism9(XONE@xi{6il#bRlm&4Bent`OJSpXY>JC4(&&J&)D= zPXd}3stQ-BVzlE$mxx;8x06H8Q^Agig)Jfas4)t*MD)TyY-?2El31xE7R(Ph&lA)6 z26hAjikBAAYtd^}u(b+j8yn}bkUK5W|1J!p%`>o-b|{Z2sNPmc%D@UmUD^az?c9^%>HZ=R1&b#kQ+qd zMHlMc8mnRqSYnY`;)+ZBd5JvTK4`ceWH7{NE+#<>Eg7Y1DZ#La^XC zPArLqA_mkR)C!|mhcHox4KTx~&jcv#QJ)`RE$U*m^I}@Mpr}E~h)a*wU5?scK>yv0 ziXDJs3TB>+uLWz|);!z$pJaYr7=Y)&hA999;zX%&mrFiB#+AF5N@mvVAKdM)VijrU z#qpNlco*Yy*5btKV(Yu#AKVpb*CTGNb&gdN6zRmh3(~y{QqPv!?~dE=j!ZR1r{B3t zWC^c?^s6AYBBhXir4R_1kPj*P?-1M~ltLPn|J&sMmk2^rMw|!JMGF7R6O70MUaO4Q zM@WVcEB@al5tJcJiXjj%C%DOlFv*8l%ODCYk`9S@8w`<$5{rc>{8v<}Y)FK3NTX;7 zu@WLPL^?QvGZ-R+NQ3z!ltZj(LL!8Mz&v1Ssc%CdqELurpn?SAs#L|`erz9IUO!^o zV2Dx(lR}7)Vvx095NtaLjUhxAtV=#5LNE{w->IKF5RD=PA{CM<nn^2m~|k1QtmK?I;Bm@dq}_g3SwVq;plEf))vdL`a212nVAH zh7^&5bp;cPgb>SzFj0qi#rs>!27%{=6asemgRbR6(CC8|l!JBB5M8hq2$H`x6O0d< zdF{W$54O

U9)7f&@S<)z<7c%CARdg@?Q0iT*{Zyq$&cZku_8$Al2hT0P5wAh8WIn zkv{kC+%-~DG)p=1r`U)m!l9|H`sRBrP|ge1iqu8}=WP#Db7Z)w1N^L_mNPa(+Y30p za*KqTZ+vWq%FcL2m}+A zRx<*-&w~Xj`4P^B#c)t&Y}?q(XVA6*ZF)>AFW4$31q@`nKgKSZ$e5b%va&gE z@Ufx`ctt>y`n)0$=IDkIOZpK|v^Y8+7(yGq>E9b(B--#I2EI1;AVzOnk}U90hHMt1 zx9w257f#*=XmmsaoIcc{wEG^DZEZ+=9g3SwwL1Pavrhk)OmZ4PMUPK3)XjZ8;T161 zinIvie#9|aB>>je!AP`8oL)3U^Qxj34$YtPP2>eRpyeV6s2DvuYn?*F{EQa?0|O0_ z^NM>HB4Cb)wZeJ5fmOD_LO)S91I-i&a`d#m4aEjQbRAx~wz055WxGain|z%Qx?7vb zSohFcmfG5FzJ#t6!h+^46gdo-LQs0hD>rQjaBHBf*KYI#{r5nx%jkj86TNm*N$nr# zy&hI5a4yJZnmgl*9<$MNLsRV4!`l{CHXv;D`0y6p5Djx$mVtpU%BfTprB!u zqo>tPtgJ-2xicPD5zjp)yD4;cpt0L$=JQQZeg_n={ecDn_cFD$(64B_?$$z+#SdYr zXm0G*8fd=GT_ZCU1)$Stj?=8Sm@1ag+$)*Zbb+Z!CJj*@HzS@_0f>RQ8EqlhRFu6~ zE5hydx*=$ByT7<@2tY=G+on5!O%{UO2K(HxLJ_i~Ghgc)^%0P5cRi^2KtmY9e8z

dIq#SY}|H35jECA8hGJVY6wHK7Hq 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 TA&qlj)bf)0A3+9^b4R@;OGM0GmJAA>7^1$mYAa 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

yV=AjewSZLO8HuCV&f0B-@g-SDv6y#%TCH= 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%0DaceU1|14$G%}EKe+7~yyhED>haO%FL*&4 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
-=a>7U=Z!OBeFn`n z?c%W)LAti@(|~%`E_&r@o|nUnPQGp`w!o$UHy4l8%=GY>93WI!7o*7&&~uljs_kk0 z&VZ~Gw&##{=OFqyGR)s4_rxp`h%}^D`+W# z8D~eS@2n=k3G-(HcZWj#W>K-ys@cYj(R;O}Xjj(3mu{r-k%5<)Fbkm6rA1*Eyo=gI znXYjO1+nYvaZ_Qw-Zy;5XN2BOIRGYSiJFR(b9J(56fj(H zo}M;*YCYmb;jnd7Gh%vh$NBa+OX7~H!X~zG{mK{Bw!ChM*Z}fuWK{?)JBn_>EoUXe zX_6kOSCxAiT1i=!EKIug9CR%CuuoI$*l{GAAG5WNh_RiPKU`-r0YL7f7zW8YgfUE*|5G>i!cKtz!(tW)t{AVKtDeX#Up|A8HYvosq51%wH&a z7K-nDVEWOD6BCcMXS8%fz*1is&zGmdNb~|t?ZWH}9EEvpCXUObjyZblfna%Rg~NLu zk#!@?X>(P44PK)c-(W(iiHS+CrrrI#rp5_I_J_%}96)uR5*MBDOMc2T=E*ce>cAfy z6?_>lBi{Ipt(V6G10rF7p^zsQ#oJ)bx1XOCPfX*y?Kt;R@EE~iOhEQa4lR^Z{@(v7 z4H47U1^twg=~vfQp2=*1%!-OM@hCf|Y=2N(WhEMInq=hBT&cOmw9zTNNTq=@5CeM+ zogO(1dG5XM23lwwemfS%RX97<%>Q(uhf6FkIKuQ`Z3}fCm~sR7Y6_=^cOcDu|2mFo z_UN0Xc^$~DgTBW`ok`k%zxCR3Tdx4X)$f2~`6RS+%j1KBFpI>gM>i-vHTl^-#WrDS z*k;z7>vi7gj9u?-TLh{8PI`c)Tzz`YoH7wtaJ3Z@I3@MWRMTl3WkFzrt)KDMxlG2n z;5VO+=x;auP;Yrkhv4^1;ktI3u~C zoMBBL^!Cj&fGI@Fm5)3=?EXq!xI77zViPJD=0mg)xbpZqa zg=xD9S+XPAt1q1mjH%9hdoYfp_?eHW`>g`GE!a_qNjT7S??2Fkr$(bxLOwawOVr z2A))yQPI3|xBsnWxU}1EiQc7#Wr5czbF-8ee036Zn=^EQc|qH64S?g=id3j!RI1;K zOwYmC8N^sEK8c!!kDS=vK{s@qXO*ef_Q2k6aHZU6&C~@V6`>CgKuMW5=8Fswaa5{aN z+>?4obMLEpEQpzGYPfD*2F^r`)@yyPYW6Y|mb@`s zxIOwdV>VN1_xf3>!GW4LnNDuBjhb{h`{^w6`57T5A7l1bFhS}$+b67sz)B46_`AOF z_*~fW9NpB<@4CpVSC_mKLB}>t`or_Fyejr93n(Pwe$KPtaHm`&|Ya1IDp(*Cb@ubx~@P;glW>W32(ZcSsZ3q)HOH<#@Tjj<(5x&hs?V#azT{CFH+br z_XpE7K-{XXs!*7-ND5jROriX`-36#!jxA2zk_d6m8&6hetmmaZ7qnBozC#OH-ZDlT z8{Bfjk=uE9vu*B;m+|4BOyjd+5}dd^I*Ia5Y5@zAs1IcL@C#A5lq5Y>vT7)BeyQA2 znh^7CQl8UNf*Nuk9`d@zqvJz3$6lyyhRdFrvLoMm)h!kdPHE|&aQ|iF9=V>}DDeKt zrsl;$q)hQzW$;SH_&(c`xBGEj?4HD*`aiEO;@D%Ksa1OuR}==f0EUV1J-5c_qwKXP z!*eMUSA)WJ2j_PU!EyE*EDKs}Mfpanhzg=nn4aEt5xwU|2Rl)v|v`2ZXfuD0^^8%=`DX*p>G7pv&@ zudXRquy?;`7r%c~haj^$7M~)1Qx}wPm#Mnf2qP-Q>@v#Kv(5t>cOsFqN=m~8(l5QLLpiYa|;J}R_b4WZuSE;Won6Y!OUu&3r%F`|=RLFZpOvYZeeg z8ZpA2qY6;B5&ITh7mxY&S;yL>7{$1fn%!Bdi%CQ88=iL?InH0k-giplg&Kzg_k;QK ztF6OaVf$BcPB~gvmua6@(+h^UW(ZyNjT(&o#d!1SNXY5P+WNAt(JBy zsVieAnTi?#U-2uszke{s{cFMPd65GhKB(P+~?iJTr?~JgUt( z%U{teW~*P)J$m-?H!+QkwW-fDg7jvRWB7B2L@azr`%8%09l~NeS(R8-4*oKbMN1mo z;J06BRra4~A5guezu=p|YADe0gPnCGAaNf)fTwGE|DfGk!5g-e1o?F8q%&*&*ko(c zr|$ddEG1Gr-1zx7iz6i3hL93KU;db@i80yiscGq5>2fSHbA#*@?Hcd0Zy#^%8}FYy zvB*w#vYXy2p>On7wA8|vY6K`s{Wwd`R-+&tEsYbofg0eS?#70(yzOqQ5+r% zBoZ4qH{{1nX2%V9{X{Gqhv-h9{^_R1B3Qoh>Mq>Xo%$@QSOW$^v6s*Qyfy;0^LrR2 z-Uu>4$U-1*k-V2ZH1CEpB-T0{AuuTKg2o!P@s<=W&WB1GrJA!aTBepGvul8}Md9(T zV@EZt>C;xCC*#yKB}Wps2{|w)ALtmZ{Q*Zr^F^E=CcL#jKzf z?QuEJAI#Ah-B3gBplBFyQ=E|LcuTz$VM}Rpk|PHPLHg$A#s}KR1U^_isJQxSuKd%C z3;6lgeOQ6NR!DKfxMH9ZDKe&UF1p77oaHzlR#>!32$gQO_6o^5jb!icrD4W=toz=1 zkQHPnqnyMa3WIsbYRt|_y~lmy z<%iMOGr0k*C);+sDLk4z8oX(g&^mD>h!uAWcC8wFAh_*UXeS%tEgFe9EkNcJE`ivdIOmI}MV<9D!yCR;S;J2L~5xM9JJ&t-!W19@oP zA%jrG(ke`*KGZn$u&3NVW&dtH@Nl?D$AdftA9$(~e)z-t(24Og&p5qtJS2s(zLU^- zDb4Rr7ne7dHE#2_a1P!dNK*jE%&VfzbtOI*;6MIit#Z9Wf`e$gU{e~vqI=ri=E+E^ zWBS?L=Orn;?#OG%iL;tK?2xclLy`Tmok2IpAfrp;kL6&YcH8?~&D@tq55=glMaj2qFB_F;HNXRvPG(|EDZ7|fzyZb? zQw^-F$yz|jyNtBe&oI>hJwU?0gPs!Qn(@9Ltw9?MH@3cNAd(u3idzMz`EHT%e0|DOVHuE(uR95n?x9@V+&B!SChI+`pFrULW z)KL{w3e@o0r~mLddq2>1LFk1^cat zXI$fyMNPqkG?ElLumxBqRNa`H(OV6PF;)6jS`N(&I>@_E9I5#OFnK7eKN(lC)on4) z868&GQpK;MGx3jbfxc$-Lm!4hF05I7aE04rQ8I#?eVlvUKx8|~2;6nL|;-e%+)tbmVkxmEEDt21%7jA}me)TWwov-j=E zRZv~u_*9&a9#b}6gUW0^5og25I1pP_Mg48Ls*T8(}q1@oQ7QF zbf(y;6Q^g3x!>(O3k$8FB#y<!TphNqY_(4gX& zUs995LU`-gpt--qWYOH5s`&>PaMC0$#=){r?q+%d9GU3pDuC*hWw}ytG(;F4asiW1 z_7yhDri%^R1bP&nuMc7*up!r!XD>rCsKyi6-G(PYGMulMG&F^jsiG=)p;O!xFG-Pr zi(`R7Ybh|cWn+((!Yp*jm&>d#t0`_zwC*S|_nh4S^JJ=l-aguFc_!5pTbc%w!K9^F zVcO|_wJHZ3ju3zP@Q&27oH3n0rPF%L>`;II>v`;_TYW6iKg?nmX7z0nBT)w+VA#}& zC1knl>DL)M;z28(j(F>qKT64hfK2vw7^4Xd%lF+`BELT+O|&k6gPY0X*n=3}aUbhFT|t90-}^OJ)Hycg znr7@p!H$yBNdeWy986>OwB1XYxgW0{r3}lHmFp>!bm^E2YhVAqe{YPR;-2$+tih=W z=msk(h7r9j*eZ7LT77CNaSP{nu3|@6R!qyaljo8B_5n_H4PP5mu-a~o&|Bn40fo;j zo?awc_8Pyj+D03`L@u*x%w1RjuEko+6aSu^H5eGsz#6l8Apz`Be9Gj+h}M#?P%91B z8ai_=T>&Tl)(p<(Z$R)-dw~ITHG(?ZqGDN~T)w-C&NG$k_WLIew|>A-$Cr4YlO#{S zOg8V_u~U!�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
-S0Pt-7 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
  • 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
    BZl03fqmFWK1jwxfzhRa)c)JGz7-134% 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

    g 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%0DJZn5YdSbmlU+emHM!ev--o-wq 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 a!)~0z?crP3h$wX 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

    N;|vlQ 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

    KePD zZubun1^UkRaS|j4Zo`gOatSD)q}PC5q9x)Z-xmA__owIBJA~)kj)UFj(?suq5@ zgL|#VS#`LdpnGz}!L|`-{EcMKWibsg3eb*0vda}7lI1*v+7ipYu)Tq<_U#~*aktT3ah)OZO;#XTs?Xnc9_P(cb zR{nsUzy=m{@H_?UW}-Am{a7LX%YvX`xP3~HZnsTvN>-W5Pq|Mcv&KyTt%yQRWqfr3x)O%Otqq-r0_~OgR0g^h4RHr+C=bF^A9h1+6*D(= zAN4@)gn#u%Cx|Ko^md)`Ebm zWuf>YDd3v$p|oL2wzw0-xyk8mdv^|B!L@JArfa0B-(vV;@5|o)QR}kH$VIh~bR=w}9>2QA z&pPV-tzruv8#&8NKb5gFKoQnvNx5T<7>PtmxZYXfU!3!N zZqBxQkz_YfYqOssWb5XPI`|EUs}&OoV+GUYvX_gU(Y~ip;OAz(=t4BpN=Wdh_T4_i zT|)904HNhzx2lVJ%qSOOUnxN#SI)Q#L;E)oo>D_$k&-fe3yTsO)CFsM4S=a|{PnA< zxT$NT;dfINZenGrA*%^omN0>-+1vfqTv=oTNm$G7P%IprI8XM*3~23se`BLlBfS#p zxHe$pEI#_C1Kbd5D75_Jj|pex|7FD(Da}RtfB) zb+or;(W~2Au5}idzXaJx%8Ec@S>mf_##ibxeLG?35sB;OKP9olxuXqnCpm?l77M&j z_aPgi-;5Z?@PX&%zUtZ=U)&Aj)W<1(H@fsNGU4aIO|Qp|QNUjEu>#I&SsIph?qp6*=QP0R}D=<3*(Cb zN5W-lGquY5gUp)9Ys3BDlhc*JW<)@RV1D0>k4Hb&m)ji{qEv=gQ)!BPQe$@ZrCcwe z+%@qs+3AmuRGaOW3)$s1#9)EyMk7(RN=Iet4pR`I! zSNEaf?}j92#ouA*Y1Cj>eS);Lu1D*(qSI9OgZ7DpyT=jKW=h}2Q1f7CVae3g+;D!~ z&h!t&5Y)R3EH8W;YLsFH+w_CjsSS(Zk>7W*XZz_0o@!rpFXJvJ08{eYMSpmt(gcOb z3*-jEwv!KRs`9+KYzsMhfDAo0E(%kM`;p0NwpW(6d)!DuaEr>(GpupMy zbhG=cA=W|8(nzK@jrQM`lkgOcKcGfp4mq*e<7C!FS~N2V+?JMxqiygh$Rl6)HxAPc z14&IVULQ7_`wdC2op*`xciw1C=#u?G1H@=l-x%ikPK-R)TCl_geB|3+}!q z$J=s-4Y4b0z=FQw)F!1z`^rDXgfy5lq7j-Z{H@_^XCL30`8t(bvvZ?1?2h%xw0=uNt ztGt+N%}Q*sC7dPS6Ed3kCB2JV7zCg}T=i+xpw_(!rRp(C5^$$$!_02Obwtjv_wm9~ zQRU{srCo6#>?nOhf0NV@TUSX@gmJ0`&*O4`Yx8bvVg+t%8jHXAv6Jk`SDOYxHJE5X zH+CxHe#iPFwE!+d6J98tZg0yLv$)$<*7jr?@jIC!Rt@{f68T&5{4xliy3-JSNyfIg zFaUTJ8*njcI+cyu3Z{ll&9nJG!`X~*<3GJ1F4ate;X-_YY#Z=3R;1LZSQ~m?v?G%F zQdIN7_@oAz#=bf1vtR0Hj9y&kpQ~*slg47k{AAY4eZ}_{Uc*-PqVdLnR_tR9mA(~T zl1X}CzTW8a87JQTw=v7e+TQ3dmXX@nMLA+gjaYS4e@ZvmSLB{*`<#pLE1SmOuEHPs(cp{`i+Z6 z_J`keEqy36Em?hE`5XZhF+bN>Y2fM{>+Tp3(;6*s;2^HyDmnRaD28_`zf(+%*Rx}s z|G;x!lwOdwF0{<757S{cm-`QJ*7y(ox^x(i?3?ZnVQ;cpoT3gFmQUm4j)}(gU72@T z^aBY+taWDCbyM_u7?8=Qs4F*)&j`H*eFDzyV3{Y4&#pGO3)hWa>}2Ht=x2i6sv%LF z5rHywRJD_fq+ZLn0B%iZYX5nmCcodLnRfjnn2k=HPzVtCqA!u9qgG~vd77s^gqPSS z$`DjNhhjoDmK38r)NoLvC}38JGdVSg%-E;kwTo_WcE6p~HadOA;-1=xGs)YZ3vn6f z-MkiHQ`9-995G;;TT){471{4<_xsj^Q}62{Z^fz%1cqzBU4>fG%5kNV(i|Mp?|6kZ zie@x^V0B^ob-O?$A*N=~0Dl?}+g|+WC4$$FuxkAJ$b@eqw!#G2b5Z$9gB$ob!u0AF z%O6)>0e4Wvt7q+KYRx}uD-qma(ymC`huC+TZBM=S4)H1?6)GX!`KkN9Z#zDQ#frCS zqFg1DOpj1dZ^DX3_we-0{m!{}@Rh3GVPG(UuWEh2SB!`b1fC?yQ<7 z>W=eMGW+)Nk7e&$#((K`j+e4nxon*z5XkcUS?Bi4#Q=Ql4C$4;RRJcGjRX@IlEz$; z-XjJKEW>$S%vlwe`IaZzYg-jX0Zl|3R+z@{qBp5x*W7;+z%14c9LN> zFSUNR38Zij%;w}Uhf;**vLMcX9Q?2^jXL?(pO+Xup6OSbRXW`GUNg?;lOk;xCL5^}@ji~j ze2++yaC~r1Qq^;@-#lve{&dNW?)0g^!iImTsoF`a{#z9-2xdNWxw^*Kbf|n2s&Lf( zh1q4iZ2^^zC4J-oXEuRo!} z)?ReJXj@C{dc+M<3;>ddFA{Jwi!&a#lPZGEa~|Pu5ZW+ob>#R-VC(pnQNX{gF7box zW}PvrU8$YE9cGtDJM)uWx1^sYed=5mdnONpzZm?80n&)Lw>nwQe_Otv3C-ubXZ=F5 z#ZcE+P+SsF<(7Tfd`bAq`1!_v4(NxF0%o_uY(M2hDIu%q*$v~PB4CdRZX!j-KmQNh$V zzkc^!X}s5e0bIr5JI>Xw6D|Vhh5^aLG-A~)Vs9^LuQq&f*{aJ#X$z6<>|%Wz$4qXD ziL(0y1-(1nbsdL1ua9=WZ{uir{@WI28<*1-=}fy!6&KLJe3~cQBtm7XZhBF(bG!Nc zDHA?5&|1b7pyNp>KkS_|w#Fa(YLnsB58(x_m(_NY*cv3!1^5338YIXx_UQP6$O7Ia}+;LSecJVG5b zUk)5cWpcK99oV+|*oBK$m`%G6A2?e!KFb9LcT^q2d46>8m98oj83*$%#(an{DM@192aYp8qWSe*28X&csLlVY@pUK6|C;M7mZ>tBimn}uh!akFRX4e0vx8ImZD93$DmsPH&8jXm{P};O5m2_LH83J)C zYMK9vk;+v#*~>fF22W4uZy;m8Zws*ShG8+i_*|&ptmB~0H2c$-M0GH1Nx$AI6Bv? zICynRokqM|`N6#ppT+MZ!(cfYpJ&H8KZ1UPe`{*0DbtKY+Z@Hr{F z!=6%h;7?j?E)zHC)vMDNum9wJFJpATMrZ7Lt(KH+UDuW67WvROn=aAfqIH%2yGRe2 zeB1w9Ww^0isHWeojB#cqea~LArE}mLqV6d}+!b+Izlr}fU5AKC*gLZi6l4*q#<#q# zOoN8MJ+0;OUIU0qJw5RUJ_U&&9QEwJMR)4UVgd+IHl7fyb+T+i=kYB~QQ}CVH>afN zC%CN{cD)EX=qwvIFC$k{-t6?^rUUluw1uoiHPz)zj2czct5UC1v|KA1#G*a~NIJZ4 zk*s1wMd4ENp0*q@VbYAAUSXR&^LV)u0byQHI;W~GNG8N!LI7*5G3AiH3EpTPqq`J+ zV-d^^cTj1AP#z_#O(VU5i#hciS*GWBhkttS?LXtHI;j}!%^)(=XKDRF%`%zxz2-ssrykE@sl$_blXvTiD)(Y)AxHzrv}3G)=;|A_)EPX*2kn~ zR{>u*lniLE53g;SGoX169x(Cm<_k=A>7BKDJ{H^zM#4L6}CD5p^W5Qru*f&F%M8>JSZ@>+$ShCJX2l`M8emI)A zvY{fJr_WIsDa$3e89(JfG~P?}>jChOPQpu1gDLbqPh&E-s~`UzM%{29TE?-1m0}u9 zZBIYpu+;Ep+XfEm_m}-+;rfgO_28$mqS4QrI=WwYbcjvqr)@op{h07hk52eIa5=`^ zeE?6GFYcPyhuws0Gwha5d0rI346oFJ2-eO>RMarT)>xoG+%mDZ26;kXs+LFEMy92x(k3+XkfpQE}XO3NmqzC7&_;hdC=>@)Ov0 zbFF3%DA=E)ZF)iN+Qd70o7 z`X@2srfl;PtE-oxT!7Ifg#JR*fo$1d05`Q5%Ify>k{eNLSxvlNMr@nsQ>Ux6^KJf%Nh+HuwRsYYdw{);@9&c2 z<}e#?6O(S35VL^MWXc~Qqf&gJsNRp(F!pdhW2>(bZ)efT*W_^z@W{&9)!Ev~%MPDG zNuxyOKVd5ko1I>BOroC$b{yAn%Q3evAsH5cYn&f~cTV=E2lmzrAJrpMmd{@5>*bcC zxF}OlSyg#*cF^`6#XOA&h1`jqxV)%o$K$vS1|cA?&^k^Ew8rXf1c&q+UojOx);cyS zoQ9KP_4p%LZc<2uVOR}bCPfhmJ$f1o1uI+Jx}tK?P&tCf#O0DD=62Yse>^t_u5o&1 zVya0j5Ui(Ft0MUnIN0?7RE7E?h335TUz@RkU!17Cn3v$_@0F#+&K4q?LW>YZp;hTW z*=*+estOTBGe6mje9pkuPp3JuIYf*i+`AWI1&hlB&0|H#hvZeYUeY=Zl0~`YNKhPk zJ-<*4uKBu@=UlH_vg6Xfbm&!;Ye%4c8wzHEb(B7S>xAo5dmmXeas699OS?!5`M%a# z`7^XkDejwIzgC7yS?~BS&6PTg21_t5MO?#H3122U*Nd)1zoQ^CN)1+!2u!yZlxM27 z9My7p#7=ZopE(5p5Qk(Vjh#{0~{*Rqqh;blZewD749{ z7?;hJZiXNIkfUEW07FSV2}h&e0<&e%)RPL>iW{t30JrH>QngX z8Gn~h8t7D|3pX!$?f2G^h=UTeTuJ^sgZ)`PP{das#<_D71~f8m3mKj{J@ND>7W7Ry zgm50}6$|%#_7!+4^ZxlfA=iK$PQCQh{S$O3Za{Xw^Zh%*r~l&LzFu(_oIeQ06Zx?y zvab@UE&8=>*+pc*UiMNBCtAWghLF7E{5EUHH#3l9l(aBn@saHCO4*FKO*qV2>hP0U@y}#ub z?(CUPLXK@yPX_nNI6ZgYB<1mD(gDAyeE4VPOq4gYS_Sju$}I$RUW?Vk5^D!;_~(fU z{9q(9jq&>~^D6RK1m3G`LhGpkl2zo$yit41ycFm`yl4;L4_F z_&Q;?ESuiK2E&PFS!2776lPj4LRJ*_TpOuX>j~2bH#}NW547Xp4Sn_v%tPTCuq!`( zuXhbd!`OF8T{pM?bWcIZ{RIM-Aa-`^9j7Bufssh{$xw<%Jl!EB+jo( z)j*=9h(=Zoo5;yR9<(;LQmYn(m}EQqmZwvp{%`~H?&_<2u?`1`O}A95P3}Y3YVRSC zox4ooP{TQ(*IQ#p$u{i)EVwid;=DfnL~YiP@16J=bCU9?bMt94i}O&F*1pETpOH_~ zx4K#79ka;9EiP;=eGmcq-=55`g+1a;4V}?5J69_GIuA^Lg6_Xo`y2>tm7(xoM;^TA zc8V-)jBzGBia$D3&(+>>X?mzXRyeMwd$arEoMBvZcANNBRt^wiqHCkY#ssqg<0l}f zR4Pj=1trc0=B{l5%HF1pMOCI7<49uJ6cw`qfV0Gilo-VXm0hri_$!!nF0wJ){;N%K zD>ipDjD03#IW_{^7Uo`5XVYU`5CJzVO8Md5JZV_$Sr9%Y_f3LW?6m9U=0lJ63{CS41L!h&9=RX2@YHFnoyBFJ9v~eO)(oPz;W8Aon>>;*9#_7->qaC^y>Y*g= zF4QBOoI%F>DQ~LLLN){!hTK=h%C`eP^Mhha^UdeOW}=^}uj=>Go9*{IXND5#GcUbj z>%jba5$+UMp><{@8`I{I!2vJ)pqbr`t z?UmX@b@&n4laoDmbJM@ev$bsyFKbP7G&F3jx7*^~)aaC&9ykEa@x-os9#`S6@#_-{ z6S?N67$|hf0hbt|L^C0~g(N2o!M)Gk8`NfCQO;!5RQQ*q<7j5&&&m42(l)gLs`scz zuXt^~^_QA^@`D|GHV08;`-Ss0#LEnKd~tMqdW*XOZgx*@%!)icm7Tq0GU?}B>0lev zwQEI90=V_Wdg4iK+EE${zW`3&p}_*aq-)nDlc#wZ`O>`VlxHT zX1@2wTM9p#_ZtxwSM&ExSpF>w%hhd~G|)h}H>AOq-q_unf4}h^xqbd@e6iBxiw={P zU#n9jvc1@x^v7PliCw>v0g)0Xry87BcJru{a%>!4iHZ-X4zhaHO0KM-#Yimo`Q;%_ zuDAOuP~G0xUR~e&yS9>C-ey$)Co=A{14)?kft=T)`wkdI9!9lpLCA9+Y006Jw0#lN z@$VOKJ?Biumv;LZhC0#hxOB99!i#Q?%7`bW5-XnRgX%!u%raA^mvvrat9$LwaNlD0 z`067eA6`~XanW@2;Z@!W2Uu`}u1#3?jG7jwlvW_0$5q3}rWN)uY<#eQLXVw(N9lU5 zeH}@)YAuqbyh&KZU$YkEGVV8Pv@eF6G_|WS#>w)vIO&KG93J$@UZr8?sH=vz&e2IS z3bHx~dTHZ+0S1+?q_OgDn|Vce;Kv=_g6Ql*>+8_0{I}fLCCl5A!1)3;wuH2NYot+X zk#)f|t&c~btYHHueXyMA``uJ>l&bRQY}hGXz0af2j-OS9etFWYiCjB;^0_(m;bBtr zPGnt1l*Hkma(=W8-)y%~SO_m#vt5UBUn%m1d@jz!y+KsUwJkT>%%N*a+&->>d5bbyc_mMUfV?pTDGp<+5j?mv9w**V|37^ga_4Qd`&+1W)W~sV*B-hY6Vt0=pC37*D zNos6ZDI=67TyVk%p6oRA&~>Yy!X#a^T&zqk4@GRi4dZ})we*fodjO4yDQ!H&=cF=;!V@PWZ+0nN-Ig-|iXD|KrT;hxER6UA!eOBW# z81*(W-}Sjps^FDe!H;}fX5R~5&_2k5H)}{9K-a_Sm9iu+&^=|l&Gg7B+xf@66?;DP z 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

    ^Mt%D|aO5(li{J6hjLZrMEZFxf5?Z2vO$5Z(Z zxCvS>D-?uqPJ`k`$;D|_QXnt5KZUw2cKOCB5>J+qtDUkvA~SI7qW6-k;0ntIiW@E1DJ&0dL9}=AY?P3T{p`W4A187@Du&!yjy4??R#Lgwp zDqQDxuC&RBtTpC$4Q1%!HYT-CCCakGfP(wi3>Dc-a*C;bE`;S#?4SO}IgNjtHX057o{JR`+XQ546l)Qljxjd`6?{j~Q2n;OtU^@ip z&|u`*2&!X$1|XWvBiTI*Ukk;(%zw7DZCSzqLlpnt3^XiiR<;9@JI!+c0(q&6y4aa^ zpot;2WuKSlj)=&+e?oRE_=#bgwHu-Gz121|<1DooF*pnzC-)f&jLfM7mTOmM52TPsx1c?)ZW|>#d zVLyhTBWHQAlJK)r=C6~a{PB~dh*2Q`bv+Zrede5D%vX1(^=yP0*>f+65MigNETDg| zZ}ugWTWtI&*F4h$ z^!j6S;-FN=`rn--(aPjJ2#A9@9PA?D?d$f!ZOOYagFXB3z;mFM{UG(SYuIj@{>7Yt-=-Fv%tyo}UxHMr zeyN;f7|xpZiOz4^HDV;e$b~JPO$*5Wp^l42L%V>+b@*l%mV?R zta`G{Z)LbA)ZQuLc_aQMLYG*V4$Tt=G(tfdce#Sm?`ZK_4F!J|ez9^T4T~uKtU0hL z7RC5tjh03cg#@5RKT)?=68p!bbg;Piz2)Xpx;{qBFUij?=mj}m@QuAL)x8ave3D+^ z#C88&+}T%**vBmv`7xKN`ismxk~&eiM1NHU<{D2+mzh&jAoaTxOCPASXh4hJa| ztbeJ=+z&R7P3P@NoVWX3XB$)KHOFDK4XI2T=ippRt4@ucNxR;+)q|ciEIbJLQKR;@ z@IrYm7jW9$Re@`qwaDts4dtyOh{m%q1>_%7lHh?5k*1&HxI2coPxS=1 z{kcK)Mc|85tOo`hcrMkpQGGa2P--scmn)3PzZcM(e+lVWa!f?AI;uqaBn&$AJyr(w zI!}uEe%M-1DZSTY*>xALXP}$Fy9Ce&EWsKgR5IyFCxX=Pc6MTOEwhp_DSwW^GsaiD zGOl)RM4OeQck`XwsNnoveeyC!yH0}jir^~4-{x~?UTx!n1P0w-@27cQR1|mr!RPcT zzR})>vzrDx2R|>aHpBRTIYC~VgZEWR*U(!RInA077QDa2dyx3Axn1j9m0ibyKXBjH z`j=?e_A<~R;L8Hf&|Vi?-O$LD0deADY_lF=<$3hu<5F%X1SCG)e|W835jSFdHj2xa z6uBU*i(;R-gmn(PcBsO6kW^P>`IUoFLA6LS(m!95?Cfg}0fS|r>8Zj#wbjo6!^@+C zLfBTP@V~}yRO|2_SfiFX+S(5CxvfMC^2hG7&94lqQ8KNj!&?=z!j^$iM|p(XnJLxA zmCcdvuXm*eihO!y07|;6rrkD;d)O#VkoSYL^aqwy$-UZ1jbJ02v`?GGIl@ts%r@Jm zZ5EREHF)`2vPSI`Csu<0o}*EXi=B42WX-8zT`%`*R&K_zdaK{BL-3j%%}B}F+-=JF zCoSWe0o%!U06Rd$zZK5`?R`N)_J zzyrG5BJ5_mAlAL}+dtF8fgiQMJEa9a%EA`68GtM6>YnV?GT#99SIsENecb%k0=8mJ zs=~00NC9MqqNH?@ufM1ZXVSJNJl%;>g7;#0W^DOA=E6hzC{_1!3UJzXFG8_3XFpsm zq;1(-THX`U%HA$XB$otW8{-=KiT+SB(OnSnQP3`FT4JC3+AIExJB5mXYP=%)RslR$ zB7W`yr-+OBb!A@jgm$pyb(-7OahkR*>-r`iWx`CX3g<~eu1jEx9X@h(aPFE=yI}V< zKYQt8>*HtJg)LiC#`C=mQlMGIBuF~;nz0erIvlW*>*xw9B=HertOA!XH+v z^@)+tsA2RAl3DL(hO}{AS@ah%3#Evji*W+;EbzB}-Q^hdL`CpT{Qz4z-8K$kaSgkm zRoTc&xD2P70@B>H+oWloQ;)}oyUV^Lhii2e=0oel*PfuJ35HWfGvQ802zBh6Kou>b z(@ByaeXEh!2c_5{;4)^yC0DrM8sLGl!Q+TS2%ByOHH;@k^$<3EBX3-_f1f9=G?^HD02EC)4OBAGlM5 zfdXG)r9=IOR6iWB#_DwTK~zSEUnr11B^eH!ty$5IQ0VBO z+@yLN^9|p1IvwU#tXd_ck$~-$g|~$k>QMy+vQLmdq#~C%4c5X1;pmpOH65SsouFS`}ZZVs9ME+DQ!ft=5H0`W=2YnCWCu z9QLy&L%{uf_Ppw;`%CmkzA~-zkA?zvcr@YQ(YARBEz__E@)B@1#6f2iRGg|>S`ql% zqa))Jq8g!}rpgJU1Azd~SxxVszR&@+wAMow@xnhz?-DDRHycg1?YyeoR!wI~$r%MY z?E&<9+-RBG?(lwNN7NQo}_U#QInEp!zX;F#um+`TbV8 zvhb`-8O?-?dapNKDU#uo`p`PnMZ!~}M4QuSX(|1|ngIiNNtCZGEAV&(&;~3)2I}b$ z-_WnYLt2RnySF}V^qLlxpGdi*dYHk(Wn+2%lUs+jQ}OE95;+k(Kgrw8kh4zd`paKV zSrCx){9)=X#`u0%pjuUvFgK^dj{LWKUwC&^4|mrMD~+E>KZBjJ0*K9=SR_!F&5Xae z|EG`x&5{_H3oTnIURT_=K`C=4Pla}k@!v_n6j>u8EU5*`7$%Xn0pPj3)V2PFs8UDk zBu)d52X=b}l}y zpQ|NmJAhYDS#K4E@5)2rD^5;%nsIDu;1O45Fk9=E#wUvj0P2gKa|7(2|6Cei-p7EK zh-SThpLF#EYIi;efMvM4GB%x5hJBmFq9u0fpN$18KkYCcGgylcUhBpCz1GLub?9#U z6HMGB!bPsWE4+*K?Q&V38+K{}_n^g}WzEX4qbU-CdMBt$lp^l5y6!xzk)-^&dDsNw zw^8wuM|qa26$7eq{^we?<#M{zn4iNgoP{8F-(-iCTtj6SzP_a6>`5-wQ>t8eU! zHarD*Ro`tftDhr1HE}((I9ArKF<%E1(M|E1yuMe01#>+LYFRyta=vSI9K=U=!aOQo zY{I}+fhaA@^xQoOtzWe;9u}8UzQLoZOr*}YB=u-?8oUPLyEPo!9gb#~?m9Amj(9%= zXRw+vY)Dq5KHQe#hqL@ujn6uJiMC>0|7SyF`y=bje#z@d&A1h4}<$HUJ(5_8U12|S;j>#GR%@U&CgA;>7YFaYvc?uZLaDLu6 zc9!#Z?e8kOJKlneCH$v24qcJP;vrJ>6msd%sS>+p^tR)-$hQv)3Dt|5#qiZzAA5U; z_ta+3e=4l}9g?)GImONbcRTq<+sbY9>|5Xkrs`&cRs%-7;3GGM+2(sMyV}%k{e3@A zVNg8gHi335;e9z9Q8tWEVZI2Z3)*BG(7nQcY)oPktyvEQB~8k0$0N>~blBYRM!#M$AgXQlw3`pa zJ9)Yk1{Vhg&BGc|%p`Qm`Sl0KHEuRrLv|^7l-Mk3o!Y5vDQ47)+mU!eT*7im#mG*~ zLaO9r9q$^sNMEY)&C#-o!^c9SM#zn288UyRUcvF~U|%532*w`?p1JoH3(a?|_2qzv zIcKS#>sl0Yp~4`ZQj2fo)2V`OJ2J9Nf@BSM8!sxnh#La=t6p0Ffk0rNYY*Mkh$1yu zsw@#b#+{}|LlXfDQ9@A@b{La=D*_0bq1z$)3xXg!| zI|n_{QJo^qJQ;@H`wtRQCTHq@teQ9E+SvH&+A_vdWRWMjqi(5QKN=JFkiZnsIxyRs z`)GDS8Km}9H^L1v)u{p&&M~1O61VBnc|K zC^9`Sf6OHoV)akQng^0w&as_xQpFjykyv};$|a8tY1Mx!N#8|41w!5tz^AV+!2xb2 z0g2L&dZE(bH7Y1l|1Ki(@PI+<_!r}*WZdH4X!*LN>@9*evF;uj<`+ik^t4@W1!_C> z;W%VS&aQx!?@Wvj1hnTbLZC=1deyr-oprM7pMX%3$c%lY(1^U>r}V|vKg>80d{xDr zJ=mCYBL|uccjbhN)Llekh^P~Zl*xPXY^ki7_YN

    jvH%C-7E1hx#)F=4;njNjd^(74c+*$HoMoitku&^ zM~wbjA%4s4S!SFCj&>By1|h!KNu3L$eocNXQrj*yZW+aI0N{KiuOqK)#rZYtzo@S5 zd(f<>z_fGBsBB_5v*@!9mUTF7AqoFl)k4PDqP^m?_BkfhT*lNS)q=?T)L6mmj{bL= zLN0Bl0UsM zW{oxFO=gpSwi)AqP`9?3qp31zJ;qSTe%J#!8$3A?b2{0 zUOFbP3`g!;W;b%8wv5a5VcDA0za3U0E(jh^61I4`I%2I}n$qBC>Kmbr}ymns>Ym!P7TFQ6h|JEKEvt zcDPls5#;t?W4`~>Qy4t6nftYvBICw)`*?B$^}W{@IcWZ%mrMdqgq9S+Wqnlrl zq_=*d-947xdQLoCgn3H9gfYY@Ra+&o0RbOGA1=0sB#9Wr|H1YsvbZlGOcWgx62x|( zkh{Tg<%iPF^kKPj-8QDM0AR1@q_0?hTl_6yls;=LJ_T8UuI@z{Pi)6(fA`yRecRMA zRm)xXI~esrWvH;~-=6x4KdJhT({VGH73OW!hn=6MabSNR50DGoYIN6t*oeAse!<7P zpUv^*L{8-_lNzJHC=RoJmh}MJx~X$NP2Hn#6;@$UYh_w)z37kL;X}alI?o63l`X$? za#jTqet7N6YGu9}m=#p#kS^0>)3Iu^Sq&hEg~S?}P)e|@Ik zo1W@4Vl+aZcqh3I77@jTD!uR7%<3Bu*k<%Zvfk{@n>CWK*1x?MhH`Ez8&~(=dJ6^l zrhfjc+f0_KYUHhm_?& z?^3OKjSYL&Sq?kgI6}qgQUE|Df?_%ZJf0D$+J&D~&XSfSYE6X`EVL)m)uWr!doaC^ z&JftXMcq<9Ee!wq6mp+JS8^mHp+;mAYg!x)WUrJ zoL#8~F520kG`gE@JD#h;qJs0#5=X6%^$yb7suMn;^eXBsu(P^xCdI8zrmr^%t-akD zCd_{U6b6gS1gf^_C|g_g%Fj1I_{^oyPiE_?!Xp1gc{Gvi`CaafM!Y%?s&L&~zc#KP zc9Vi*|7G6p)qZ;V0G=17U)!AR)Si3~FgwfkSc~o|*v0M08{k#8(A3WYuVI!i(qd%H zb)Jd*^2)g<$5_x*Tp#P@XW$R%E+9-^v5w)#7&6?LkVoLB7QTrmO9KEOIs51WeD95O ztz~^G7P5J+wk%&Ru_|@=S~N<1oq6zYzdi@BoBcOfN={GLzu@{~ipK%$fZfS5u^ptj zWZ$NUxbwKgi=fq#qio5M!8T967&c!TO8pcXHA&C2x0&}Yxl9A+H^8@f`m{BieD@GP zTo3n}vSJ=hmyw4d@|0=8TAUcGQ(f{o&0gtO&Nj@nhhs4UnJ`FtuP)v{#oSV=Mngf4 zm&WJQV_NjfvDOR{ zg?s4Q|5a^AO#4D&AY3V01DDyTbaPUuKx8|B3YN|K$i+r5*VS6)=&Wz;y-w0fiy}+4fa?O7b7d*xa z{9CBww*9W$g_f^i9zL9g;5K!9itTXk1Zu$Ajnm4Pl9mX#HJR09oe75wx_7=qGpiw06XN@C&6y2zsXvcoFMS+*><0IR zl1*vbyD__21tX~DcQt~GF=k&kKj~4hN|{u?*{ws9RUc-;zy zuy9pni8A8VHzYDB7Mb(Q5AVe7)BYEiL=Fl2T<6#YVhdAXKCB&^sa0-Acv@b_Ht5@- zu=NRd-8HZW6_iitXCiWEA}hrr=xVM=9LG<~zOf-McA4x^VbS)lT@l zvJuVYMQ>F~P{1XNZ)+A)%yninp*%M<{9}2*iIpYK_QBM)wev*34Jr(VrklTGLBMuq zfT-lT%nmZv@8HZFxmEC0;qqDs_nFHMY%bPNEvaV&z1W2rE*KOc-OCc~ zyUh+Z?7q)m!Rr?LJ(4FI?HY9aosNgaD2p7?U~MHKyh zN54hHMzRTP^1316=#!EX+3ffRYh`+qcF|DvTC#5ke2g3DR~}alF_M44Km@0syuB=F z2G@@O^j(rYHwxqwO9uzLNSX9oA2J@uTgPX~S)yb-2b$}0@5z(0A-ag{sx|a8c zOBevx0~U%>)LBl4`x>Akz3s<;m}#OzcQdU_J7Ss+ z+r(^Fzoyv@B<&}3wC?1@Z9aSQa@{pbH$)-pDgALo~s{ZM@06kO&TFM+mrI|`V4#}K1 z6;CJL9*AiiX*oqyJ7LgM>U9kV&kkx_;WsKdlX?!ZWw8p!#XQ{%sO#}5+P{$Lc&BBK z3*VwCrcqVq2`@XP3QS#2kDm=Cgj{H$TLGvfsqEo7I&-!hg8)=nj5}Zof4tptXjkOu8q0hwaU)tc@0{^B}k4p`b-kXX!8MX$a`(JRa3_!u%WZRwyE4%lB;}FGpwW95mJA zMj3#?#6or+#jk$Y1ZkW(#%GClKj7WaxY8Th5?_9RJ=DfSCkq?Y5Dic1Z|C0=2uRC_ zd%3W$PGlRarB0rGdu)C`)TY`cvB3dQ`mpFK?1d59Vw+OA^4r$u-1xZ~6(urSaN-K} z8@ftC*6jlF1oLYZTy^L-ga~nzC;YThq-@!#G5}TVFxTc*_jT}BUnqZTuHHu3*4B0- z{)g^*`J-p|_|>ING{@(-XjA}}o^E%L>-@f)?jQ6#gUK!J0jti}O%*L-!Hhl9bpO!W zZU^wp)t7b>=0>8cT%$Yn_~g2O_)EGi>z1mn^8&1k{ccOcC1-BWPy`2E(hu&tVX<`1 zCJ0ynYOfaI>(8c8=S17l=My_jZZ;XVG;+~|_f0>|CFk>lhZG%>TQc3Fh;)6I4%v@B zgw_t%#-de4x0VU1;QEt$8+femTvxGoqg&7K7snj-wXZS%xDX5cb{cH64zIGWeauL! z_{Gr$TE?mILyNGm*VKJ2_FYkmW9#7r^_b%Wdj^V6 z+2wuxj_6M^-neM+l;^I^l}r`A-HD7ureN=!3Ol{YMwl1nAYXwcSH6O0! zR51@v6CAD@Y^L2Ftd3>r9S+!ktryL=QVc+Zt~o(~gOabQ1|eD{kuN#|sW`o_ z32yXu^c}*qULWUBzpC_~Q%}iw0KB}9bLtTv zX_}WzpUG4=b^TK{{oMr1FVl)N)_XEvMO&D1S`TY+tDZESy=PG&>SYj zPoT7~j23*Q?5rT7&oFePT(0+v2KPjY?q;(9+O$p=Nk2g~$!TBLMsieRqVCtnE=cz; zHi>K7rytAs5In$4Ck`;z{CTmj=v%MJ)u}FZBzQ4-^9EKT?d*d^ zo~(?-ORX5~l4qpna2NZ&=${#hN09@~o6wHk!?SPgLyY$3ZThOFYH{~pTxOuGRwz|b z6wAqUd{&D`bp>`bSs=4XQBJXfkz_}W&f7?)GeYg$Q*gmb?=$UI5t3wCP$B^3Ec!N8 z{xY_fG!--G)Vdez125^h;?kdZ3IsK$eNp6}?+&K*0?7o~O_;@` zoAra=C#ez1@;0@fMXGO;iwx@+nvBTuwL%* zubIU(9g0TQ=bbwY=3M^{0Zk%LzO70(Qs)+;EaMQRHtQxl>;3k<6Go}6IB;2+*crb6 zYvRSqIsA8X=wHh9qtozqT`fs%uf4jEa0(>vb$D2WTaQ0 z>JDL0&s)PdS>&$0-rl6KUrJy=Q%mkpxF%mg-^=-Y(xSr^;&Mr!MNyL9KWiM;W>!F= zUp#89oxW2PV+md@we^(XNG1GJ$KJ*bGc3wgs4^0Yq?;Us-d^ArlyoS$W;jHHgxei;AE+%_DYQ+^6 z``j_ntnB0z0YhaK_boXKUt=8B0-q_HUMpJh%4yIu@YOPLDpn7T{_U}ac5~_=v*-Io zE0oFf3P%&D-7XGW!F|_yL#_5_uSxhl__2)h)pilamL~WL1EH00v(bbhK8AZ@?Z1*N z?F#Jr=;& zAUU|dK8O6PjRRf&)T!?EvF6f~l<6HhRHC4;;h^lOR|z4NsY9$Y^R z-SR5Ov}x;Ry~p6w?J%2G_Q+gI$uSMq_aJ-LdL@L zg=vrS$~s}qz53C+k0imVb;R%OsKKfKBDG~EYZA&K{5!REJXij#$PotLdznl3Or~o> z9eQWRRX3o$>ojLKb;U!d?GigBsn0+4#k8%oJz4NYNTV4#a8*n$A=}bt(54pOvm~tn za*p5jGnDk2J+f^#$Rxt!Qm=!PL)q9-mGJE#cE+gQc#g-FW5!_|c0(ofn)G)?n(`U| z915m0->RB5(2f2qe{Z939xGd`t6eQMhQnk-C1_$bbf>f?S4?gIN~S8*Wtn6f%;yQA zlCvp!fd!|o0snO#B<6&TtG2$6ZbzAfovq$uzB`GJzK<<3HHDm$vo?0zyI6g5=gz<8 z^495*Jd+O<(%*Bgvy1&ToxB+ucpi#L3cDK8ZLCT-zT10=o5AMt95eCA%%X>DUH?*D zhL*4n0WOzWsS`U_RYW5t37<_m3)pUKN9DA|s8u##A!5u%sV zAHKukVS81}Xz_Gs;&w#C&7H9|lU{UB=M9bJZ>`3ZIIGK-ABx_BR|B5m@t6NV!`+Q0 zvh&ZhUVL}dtQp({dmpZ~D_C9T1h4}5jJ%bDz{~d3ofw=tLtch7wSKVP+@h~=qzNIl z_U}f{H>t$Bu;XLwJ6+DD#t0*$Q#!Lzwd-#iP;SVT(~MWX;wYL zQ`Cw|W6KAyXe~}|Jf9n(RypBwCQc5HU=xn~PK5y$>E9h3%7vXKbtK1VFP}7Swnw$` zbnbV-Bj)q6LcrGJo{^X~_n(XkadT^*?k3R4CJCa12F#RFf_XE-gSr@ny$2M3$yRW6ltOE#Q{F>8&haQMXRC25*;is1S3ZZUlE zVMbpQ@f7LJ;}G$$A!Rrj+WTwPH}kW6xpsV)6rmFG1< zK)jibAjN6U@{6}zK{M<}O9Q1AoFkUaMa?XRJe~I~3|7uJiJHeG2P67xd|Ei=FZ4WAJRx-Z18!Q%wcsmOIt26XmxWm_+RiC! zsciT7Q`eWC$qrVfk*xcpj={c+4g&JMpj<&d{}HZF+vEujTQiM{Gx~<@l8G* zQC;N57wF~dY%X;F`zMcy`9S_Xzw7C6ogQqHPerCz<-(C$#=YN~?EK8%54%kBI1HPW z2%2*twvoT)QxQtQO-8hVktExFmBd-@2W8%Ka4r@9lq-|wBr>P@{;c`%NmHWqc;tEu zU%TMK%~DWxy|rs7f$5!>n^F9>@Be4atj3hQDS^QLM*B^%1VZE9dyHlJ^8OD-&!j~3wcGXb#otAz5 zoLGwACU*p%Ij34nd$(YPlZ+k(o#e`3{aZam$oqVCI2#VGop80oB;y9nEDrp~R>ENp zr-JbsBY&pRc5@-^k7PZkm4w56FaYZX{7J3UEV&^o2`OjuQU&YEVeJ%GWX;QxL7HV8 zn+YwzP80#Ghl8TPc$_5;(%1 zb%Nb%Xlqt36l{XWb|BD#Z$c5{T00YAABKOw+hfVIPLd^2^KaiHw50L-@jWquGCtHO zs^2Pm+f(r1(IKnV%G~^&b^k=uGv?j0TAfLyD7Uk!+IPQ|P$`lF@Ivd>spTKPQ+H^i ziP#+v{g^6`n@aTdu=}7}yKil@*;EFR+F^at8a&D(YZa4K`Lm8xz{MSa19_A1w>_)Sm1BaDX!KP961C zD}E;XP}1+w?k_+BzR|LpTvmpSbcw=I=s~G3iU$IyLgcjhZX%n^dM|5=e9G5}i66NS zzH>s5PNPBRHXkof_G)rr!h%|cQOX*sVP=!L#mZAN(mBn8m8EFGHpE}uv*!*7gIV%C z_)eUh_B~rmxAWV6+W_muUbf3>+ePryw&i2&nz;t@bKn|~8AJn<3xdag zcfKx=wzR+FXW$A<)YahVjSLlf`Lqv4c$9_bY1N}BKU!V@&6Qz^(0?iqXRR(2GqfUp89zf6L_Tx`pq8C=UT#ie!L2dV; zBDmQwIAG;4mnkE9&`R~AOL#fB9E;`!Xb>EZ`i6e;1CEsIVs zlNQ!L&XdOyDtjCaF$xIS`x~+m)Su#`q#FR}j9IuuG@htIN!UGW0w8GRy5vuiuj;e* z?wnOimUOC#nI=-E2D*=VKZKLr$~42s0c3Hr{z9QJ)qL_?-siU5(8%RJfFZIRA7MRe z+7;dv7CESp>B6r%9&FHWa^iRVr-EUO^DjOS;nHMNd*#hDI5Ny6j@s)#ATQ%(EVMX| z@d|+xS$xR8tF3V`Y#M@Do`Ca9=IK)rkZ`~h)5*p7|k%!Lg`jasA z2Ah%mvOp(2`ZW0?$D}-)=|9%Y$#v3I$W-m>p8*MYOys^v>0L8-@m+i!Gc3(+{%Zpv z8dYDJOR~YnYD)hWi6GD#gU9^y_CxKuV!`_rmE7aF`&(x@Dp!R>MbIYm)$_Ne;O=(W zh*XCj(oeL|MY}tEX_a#bN&|F8!?17R$#A&(&c!EI zPUvjsm=@{mCVS@#l<7(2{Amw*!?bJuRJa$|8vE4aLl>XUoX!^dqh7y;N*u%3sOt7Y zcvHyCVE|5InltloC{)Bo!UF7@P>U?9Wo$-mBqDmI^e`M-vQj2S?#dC_z+jf44m(={ zAd&TNa}3=2l0V_F9Hni4%sw2#`qkbyr{Pr0k(jrNdH5s~CVHF`J-WtiAlz-$q-@T7 z4(><^993vt)v%}D+F_YOl@MiSjnuQ#>Ppf0jOIf{`b+ww(rezw7vOv)a6R#fuh`oz zsesp^L(hmMR{|QSL8&z)}hzejNyi9IG5 zbTi}=l;HEg+;{?B?VZzdbfeGn&~aCLGcRDz9LED0i?blKb;|%4Cf?Ywz3}5o&>^Y$ zv_AW%Uc!_w8*@o&6UbyRP+CA97P=T$7_~I?SFtSXulL3g0!Kt>SBvf8z+wXDpU#VwImHnY_$On@3x58ErhA5NVT@Kn&Gvt%DA>I^^wIUPeL`2} zt@D}2!u-C(zp>!^1_30ODSGuPh1W!nuif3GtVhfSpL65Tvc8G^TwTuM-5~maB6Y_< z{a+-kDdH^>fN2l!P@OE-4Zh<=O7Emvgh6T5$L;gCz5Fm}A5x*I*3k zE@D5y|7-F=32i*I#_Y?y@K9X`Glg6(8%9B#KjoikcU?%S1BKGS!*Gk{%&B3ziRF_g zcUVTg(@>okJD54)7-Pll6 zwoaa7x8v{;4bW}jVhNZgONIt2*j#$$6xsz|$kb3NeGyvA#j^Hf1Gf{yGr5jMPsxXV z`-R-#N!Z}*RD9HiuonG-DdWhw9|F))Ohn_h2)^Co4O~7x!-1E{ z^qyKdbIY@Noq>3+VL#Lb?>lwhhOg=(Eb~JlPc@#*BnNYe zD^)+G8jSEw-LEbG^s;wd3(CkXb4P=dpN6sBPZSw?1hdK>tIb@*n8<{aER`_%;ogHiSMcO{F0|0 z4qOp=eXrg7zC6|i7V>wIrW|xc5wICXByi|zW=3Mh@w|smW~YxP^CN4NyB8Y?+sF00 zfQ#j;V3Em7S4)ySD^5bRTKD2!hMTL9NPo4x1<#{phL=Z(GeIpuAIw;5wG;OyZ|Ffq zDjpLoO)ra^n;b%bnvyQHPp>5#m(8}Pjj`i7uq|v{?xu2!lQ!xCJFQ6yKH=Eq0ma@P zEzewrd*0v-&V9bBMS|qQ%nXS}UXq3cWXq-rgUa&6_BZyhIkM@lU5=UEA-H1lmny=O zDo2eQwNuwPc~~na^wdvKQ+)`rMSqNMfpJeNs)dmIOBje6D^NGjHRs6%ypm9e0|OpU_y zhK7G($Wxj4?0$h`Z2($Ow5Gp%+WIooksbb3_2;_~>iXbDCLZtIUXYseJ7nZF-%9L( z_E^IDjrM6?{CvT-s5La@S%H~0q#u{{&E@!C9#KOV@H*D+dVj?AQ>$^ep>YH_Ly-e71=+o)aOM>0F)|X z7a40AK$&VBw7(8lzjr`*#GOSR^1*%L=dQ9sx` zrASuD_t)WjGAGIv>Tok4VGQbj$1<-J_995!>7J<#2bXmzsRqsTq2y${5+#^d(Wu}u zw+3m~Pi%PPJh_kTom8gfYFlByv~*dS_tDka?ESst$!PXAIe4L4tn5l@nREFh688fo z2_)z=^s91bim49@^nWEd;$|mm#nD!K2OwZU+iJG5r#}6#A?A2uvi8ReR`a=XAF@iz ziN)Ho*(miJ@YK4$Ysl$`>ExSku|B~4?7y0IL5 z9ia5lDixd-FBeKfvGG@0J=U&$*n^NZRJY*#Y`;uQU>twyE+#aEB@8Fe?`FgfT zV08o|fUl)-`Ja)Nx_yt*Rt?QM9oXasbCTu$LHSuWhds|wq5M@6V8=i=Ah6f09|K+s zh1JRLGOnkREg9GTuoEwqI(gL3?Hnh+;{~@k?@>g3J7ko!rJ-=f%XfmHA$UUgNyUwecVi0{e2zOqh(H7<^u3!w0rrh&G)We zJEg9)ji`U-z}Abgmbw^Rel}@rkfN>$de~^5;`;_3)}TyxCj;u8(uU!O619o#C2Wd? zJ4Mmpsr@RCS|6n$Vs7;-IyJxYqij-3RM^59s)@J84|`9)O7iz-tYOCji^7q5LbF?L z6>rO}njx>0fcJQ;r2p7f>smf1Ox~LTGMS0sLYRN?tCyEq7#wC7dZ5_Z9k&N~SS`0x z<_;qYNf#|w$3m_l;B8Z08%&IgPQ|ICZY8c~$C=L?is80XrVC2&x{e5wMDnyY*g5SC zr#60KLvnaJ+g&!9p5;4FCtPniSWOT2Odv1*_mXbK4o9Ifq4uaA!;s^~N0?`07`~_( z0Io1fr>sg^A>uiSvJ9f4w;C@T0v4h7z8mWI_}v!x6X2Zr;j=Yc6|Z%h9(SviNAr4R zuS9TSXjk&YcPF)=755M{X$LPzYFV*25&Oe+H0cViAecLBx5 zkDoF-cAEBkXs)b`JNRzlYeb*3?C24crT;>|NP$&gHwI}Pw(1FpK!cu0QfNb zl!#H!-@BW}h4-zO=1X&*T!FM@vr5SI^=D)TJp+(NCsxttT4ECrFsz)aagc_V()le} z3s;+V1>BTpJtAcbF6k)SFj~LZhJH0X9?9Yx!$8kKZqK?k#43mIQM9uu2h>zW?BHPiBh8tUYgf^J*#{j)Ir)-fk2&U zZ2Bo*872@)P0djHF0obTq^PB$Mr1?1KKo8{P0xvOuzzK+Tbf7zOL6fCo<2$HB(_FV zJ0`2S+X8?KXWQdkJOYV0je@thcx)XTE>aTCap@|lQEoBjJxi_ajgmJ`Rih$OWkT>s zv^n`}mA9~+ili%Kjz>@?jvAwxXs1(&7+Cw;9TAX#A+{Lky1bHsWo<@c-IT(;{A!8?ld2Tn~Zg_F)9@14@f(=H81V->A1_;nxl^`XVSBzO|bgrsI+ zqRFw}Vy&959P*d}Inm4Oy^(3zvuSWBVVda}8qd|_2J`e!D5nzY6wb=|>uN-sTJHr6 zwROG;PHu0P&l8cfEAL|v#h+X?B#c2>*RWNTYT=n&tPjDakVK{i9L_M}~cPx)#XTxdN z!%&^_b}1oFV8n}#4FYlx)0q)l&3Amf_E-sx8wIa=;2;m>fjn;d=+?>en)Q-+G5}P2YX82l(Q8{{gpSt&9))Net!@UI-;&MR-|9rY=8e%f>X7EqKtpX z=I~p?JMT<{RUfNSeIYW$=)bL<6eSj9>e8%T;5<6m%>2}Who9)8U1}cyX>EaQVb3(X zD~jAJ*QFq4^q$0f+D3=<(}2R0KYV!qFu^fDTzNK{<8n)kT+}s1=jH;uu7(X?#nE9zoYBFxJNBFH%eO=YqDqaWe`XNk@I; z3c?__2~Q($*r?81V$@&YUdK9E>`(XKpUbQYV&JvO;4O!}J=b?}tG+*U+h0WylirPd zG`ZVC^0Yv21FPEIjZ)l7C?nXcl!0*r2vc?Z9OHlOk-0boL-r)! z!nbj9;lR-6o)ET25x)SQ>E2+?=(d6t$1$o~UhLWXF7O%e%-*utFs+G2DsZ|bfBM7G zWQk!2dJ5~lbm@Pg|BEO8>#w<`P~0H5QL{PkIIc6hExZWNYmso*7hLVn>d#;4v*dFJ zuf#u)6-^#4?t>}^oyzDFlB~;$*Os>cyuYh!@g=iZ*0Mj9mG5fH#h~y#UwRgQ=M*4c}ygG?JRpF$L0rOuAt*PsBc4lq7 zWbjY&2c!dR4((13ytSu$!#`z}tE_Z{)bNe`NRFI=0C4wV$&^IA4v9vxeCuTtmnQO=h zza;@cFHBt<`_Dx*D?Z~y?>t$iko*WP+d%O2M} z;)}n;6F!8d_fJ1`a4Rs?6Hv#A7D;R*`EV=t=Qxmrhn*oSHT!aA&>$U=kbnt*FOfB^ z_F3NsdA~8u-b%Cf84OZvCfg5iF|!mdEOOZw(psZx2cHS+!;9{5L!b-~KNOnygR3U( zDDqBiX^R={(|LcQQNT`?vd6Zhgq{`vXsRpOS$zK_xysG;5KN3!f~9tgwpaekn*2{s z^yfDx{AUio$|mgc6OFwqtNefYV#dcz6U-Dw-9a1xK_j<=x~W6&d8EgeyI?K-MybXl z+lP*vqLR)5aQlrx7;Gsut(=t!A`gj3ahlgtrP^_p&mFob-$oX4Ri_}`4pCaRxQ^FZ z!{q3|hOlg7{DQ4XYBP%{QL824I6EQX9am7scgNIXhxhqB?Nz2sTQYoKhToRGxBznw zhESK1vQ(~AUK`ii5={*Ps?NdysFF++He(zDufxMIHp!)nAyzvu%R8;RLHxt>Dls|p zNI7Hg=>^47=(YB!X8IvepUMQ`?tVtwex$i~T6vKfvrQ2u+r}~EsRpm|Bf|ypb|zkp z{F9Gg!skbyeKTl~5vKZ2%A9T1R83u`Y?SaJzct15YF%B6J5N{`ea45$Y0!C?w*k}{ zhnGn^jKl3m?KZg`w_RGY_nWTQNJ8Ua+HsGgv;CqxCW~Iv%+0z-La7OfOe%MTI;^*c zL_ZU5rQpEcz+PvJHhOs?G?vsR1M%s&3$&s8b&)lo_r?WO{FX*|J+f2d0#B2uL!~W8 z6KwOh*sZISvk+|LwEjeAFI>M&LjZgl<46+k1XAk|kv`sQ{uA-jLv^Mc$3U`~cA;9L zDjGF*5+6!K75vcVY1YH>Q5piK9GT?X%92Vx39`}BOp2KPll}0UgxPL+9!zLyZaZ}& zf8-?Bz6nW*I@#}&*rH>2)D1;H#fS~*e!TKX^^zUJ&2yW@{$7LAMl5dsfD_>EgRPt{j; zUwzgYl#k5Qfn}H5HS5`_{{)2tC!9?0WPf4I_JI9RzunQit<)nU%cN{7@03M{SJh?k z_--k<$gUT1Kk)~T`+DyAD4Y}Cz?a#sz{^1=fKphj2|MB}&I$s3a+^`ok@%Y7N6wX| ztwgSu{jJIVLuLlXiX?cT8Edb#>+owwo{L&f+AiMHx=rUu#7I&5i&p?1)!Z89_$Tco zCY25w#t@wo545%MI8$uGWE|E(VyGlNJ9-e~oX=Fj9}UznC6qRynF9-Ka|fa}d8$kB z^l{|K#LxCZAsXENxhynh`|BIdkD5z@DK6z%-5em+T@p0HVj1^U%GvUjKvq4$foaBg z4A-&iacs>l_)Yzt>DrM>EL@9r0L8z1-002Ci&Ntrq7GX)jrNS#itrUm+kAYhPo(Cc2YOI z++6Pg3K+;&>B}WAqY4Y;-{Q0r{#BEH)1RtYzxgW~On-(DVovZKGDsG!c=PV>3Kw~} zG#?a5gnTtS1Q*-6<-V?*;I+2%JyZI>_Zsb#WjVENRU5z0XsM=1KYrL-7;5%s*Nah^*m+3oAfLT6xVv(1U zR>NQ4_|G7kaOAMUQs^`1!}}OxSfZq9A)RoN%7X{&KoW`m*t1!o$1uylaqjF)x~O8f$LI{> z?PN~hJNeO7{GE{MEIDOUS*zR8A7&aMt#s4>lue5+Dk z)kR6hgYmI8Lak{~e75}W@xn7X; zZ!WSo*l9_D4r&vofUMf<0rJ%S?F{7Ox}4q7CcnCN{kncySuxxBeiI(rVeWomKROuqnD4DP&TB-mqt=R-WJ=8LT;(TJm zgd8H&wC=%1RkHSmm<}Cd)zjHB)ghuV`nG7p(Rr)f_(*jG51Z*koBAmwKQ)pKTKLsn zE2=1f=EIJ;7V`Q}Hd6G;;>JyWZWZGwJu|*2Tj7?`p3YrjXZqb@^!~;vmTo+*p$kfm z;z4?v5xc{Dw&H@3Wd;F*;_!{D^>%cxQ$?NWsh7wwY+|fp8en5BPg6KpG*GJ{rsX$CTb+}%DJE^i9>Of}fS zIuyY&LP(|_zKE>pa zF!gC%ZI!^i!FxXNh&4Xt|FLZ&+KOM;NqhYk+y)xt6)(LX+Wmbx!6Jc(R@|oqeWnQ# z+GPBpZLbln`1j3Ndsi2mnkL53loZlv8SYU(iG|ftUBPNdxU* z4^H!7TluVE?BKh&DwPM9&sc|FOM`6coWA^Odzs-xb~A4KYvsw-ctW*2O<)h$B73X$&j3w=lVq1$CT>>XRpnUgKBN3^q}XgzRcjSG`HTL(MC#} zX$cQX5jqM3laX*V*7rnVeQ}gjCd4JupOQP483AK4N>)Q%q!=<5Pkc`kpUkhW-9)D=7^jTzdY(orJ8x@n382!;hCWq+I!}Ypt8*bpV%N?#k-Mc2w=! z%-SxTQEk~U2m;E*lP>JOVBc7T_j59;ukhA0g6%p@OJG=2<7#qgiLX!^5BJ`R@C@Sz z!%P~2^ry44L<|2DPMYb5WQo4-{~E!QnWl8$?6$0vzHfV8-c=U}ySDkDg-_o&`DyO= zX?<&*^eKP+k=&XD@K^A>R8ilgX)F=Bu%LA1jzu2gkeNG9f<{BYtZ~!N=YLQGaQ?&Y z+&n=*xpZ;T{p>CF*~}w+V^l+&8@)8k$on#U{!D`70Ysg=n7>@_VQK4lz|+QbsGeD6 z7nqA4Jy}h5UBbwQ>Et`LsM|2vj5-DneS=PfIXK*LvtHUW8sxQc?3~N$su1Q24R-bG zhG5z;pDuaK0dP+@Q<|V@yyPD1RvNKC<$UN z-)A>RymW!*nBpi*dY>kS#QFP8ji-sN&90F8Jqzs8J5$B|jQvtqVJK&2z1^S%n2k)0 z)B2Q_Bd$;R?pGhFhMfv(0_Dx_lz9GnzlIKy`{OpHH`Ux0Rzw#x<%Tts?D%72qjgYH zFz#%d-A>AW=;7{s$1coL&OBMXbOBLMV&AlPfWhDI&Rw(WxCpjQ;6Z+UBV$f&^oh(4 zp!JrT6o>6*kKi|l>wsrGdiw^7%)+Hm#YAuIE?UA3A5;VF_>oi+1k>=h+_YxIx#_Yg z;PF#(-YHTkB?epg9L74Y*tTBc$29Tz4=8W5~!}7(&cN2QcYJ( z=hrT<$@WsIpVYZ$Q?Q4hl4kce#f~BAR=$zd9vL-{t@5H#m(7iu+w?F0SUu$VyE2Yb z^OsfH1wY37CLDy5@v*<*6oHDp1jCoB5d?8O`63Ekz%`ZItis2bQ#a$i+1Z>hC_ok~ z)U3<8eaD3eHb)M_tFccNk~tYI0yhkt(?sWB17BE>zg8j~)2McYJN`);30w~1A_#*E z0he|e1fLCC@SERs>g_16B&;xJ_U;cd^?36uSCo=~TSe=VoXTW|{t}t?jP7An7o{rw z;^dV!;k~h<5=U|{$0tV)nTB&$Jy8faAf7*UP`QZTz0KV`hi#%7p`<2we{LJ10l-O` zwQtQt+s|$V;ZsQu=O$hqw8Ap*Jgq(T{AX?!M%$nG#oo73{qqM|8@RDw%Z0oiYGkKz2+y!d4_W4&BzBNz3ZQDO+XoGH*|)An=rfH^iqll`bY_xDW( zT*if6(C5(PesmH}MvqohvdG^9&4}lDXqm&Wa+!tA%E^hkHFqEIf$Vm2GcM$%(j;*+{yfub*&;B~u zYw0C@UozF76rM;J_=za$8%7MxA%aH*i=~oD#g~aOHl>e#q56_VurwKB$r??B zj7T3EyPyOF_loGddY>QZAix6o`HD`nfwk-7^_Je-Y^*74s*Nu2r4%MP#yyOvWUf`_ zoyRKrSs|x99)wXGk@9=dNX_E-QLVGxon=11M&50F71)D<*F(}41 zuD)u(=n?v@LF4VZz|&vp%w6lR#Qn`mA!Qqu>4C#?1HPQyJe1pD?uhs|5<*kHMn93L zR0v*Hy=tIREE@}bjTc@lcrlYVk0AP$M*fMP$>dm1IinX!54+@RWb(&q#6OHC?^fnH z6Zg<(``;?(n1F``Y5Y1>oMMXla`)G=V4c5{^p=API_=R*WEkth!loVA*&OJaaf>Q+ z<^SP`#|?t;RDGhoj1Z5;&?{+kxWu0#q1@U(EIyGAEIB{8@`KaGsh;xiG$gJ(_q2R3 z-7$=eL(!TZ#ki@MUBqlpK2{QBx-n!fjke7jaL%Pau`a+8A<=@rwwEfQ4n=OqHmdgBwO%=nwD za-Sq*i5&X>8A_FboAa!toRNbUp&6TtL*5RZXlAr}mnMV)bS|%ERz{ibO+4*CyY^qw zz(ySaZ^hmoBQ{>U5sKV0w;FsX@3*wyRQukMXGn*6T%*?7d99iU<4$iT&C}3lABrWA zUY}zn&OdkpUaKwtLytX?yUY7yhC7eWN93`OD{Y2S%LAo`Y?eMVkro0^aHcYMc`FF^y!Qj^I)vP##)N=%-=MU?}Eoghh5=Q zoRMZ~OZL1Sq~8qR)0I2lxp`&u4q$rw*WuO)~83l;D4y?q-W+q;ipj|B}hVn zJXR8D(0wqfDaD`-mZQ!fr~)T>BBY_Nm}1kk%=Bv9a;Pe>`GI#l`>9^ltWQpPR_T=s z{r!zGGf`6R7}2Y^Ywq=ek4&~&4rZ8~%|rnv6$KM~j+U2JDEW1g~OatIK@wTJK`&Ni$ zbzuwnF0aWV8|9bz&Wj@eo%*+Dg_I25s&0CvRjS)1>q=L-W?Xzes(g#4-3GkzLiH=s zaNu@$L|&qUHQ|R$;Hp@p8p|Z2g6Kspk|=Lsn?W zj`k(YWw^x+sXBBdu>O&Y_xHayuWVD#n6k@6nCsU9U?9+elHZa14<(m?D^{dY@VQ~l zzKAfGiQvTa|8Tl`!oTHV5FNRe+_vm(dzS^yA}!!7_w!R_u}n%*;w2aLA(U_ao_x|? zYMquX){8z=F+k|jY`MFMk0ACEv`t?QKO7j!W!{GW#wd5UBDu&)wQ5^D>V$*tBfuI? zUvPh_W;e{QN5mbY?fKjL7QHS&F@~>w&&5-rg3YuYb5~xE z*Gk{%y)}()kJ!@DE#=}&xc%^a5`P4q}NlTZ=-QD$W1Kc0k^e?1oDoFhrNgiBB zyPfodfV!Uxe=a!d=+QClXOH!#y$V>T-ZVy|M=#3WorC?qW9PkzIu{8$ZBjvZvZ;Q8 zf7JCA$Xw$G$9x(J@4;ir80F29M@qrYRU41YwPR^7=3b(;$s=fA4pi{I<6e;yi(>aB zl9HHFnFwvr{9R-h~{CwGE!p;LU zt({=rRnDYf`z+ibZa3ij3rhrl_g|l2IZ?5lCG+QNCVlU5CHAXd&!b@yDJd(=cU?nn z)@O@u6m66JF6!p=Q>Q4)roDS^FLNhjYh2ZjDSZIQ%`W-12xf<((D`?4XDVPSMarob z{NVRm9Vo=R)Gm1?6^4$b=)uS((<;HQ@(7ug;V5+^m+exf4fl6}&W@nlm4`)2hSWs! zr|{z9+KM`3#x78erVTG?LM$DnCvarN6kqw>mdb`tx5Pja+{hG_l&J z6!=>l(^VTWqa%gxu?iK@Ii29-zwWpDM32L7u}$6Q7L({WSSc-&X(MZ`tu~{y-d2Ez zn?6YyRnM(?YX;c_Pr2G*Xga&IB?Rngq;mCgX7tZ~Z_gPvClvF{_X)*m3;JVi8+&?N zU?L0#Dnbs;i@wDLQ-@Qpp4yapm6@_V`H1~lUop|QTr<}d+~C{430{+ex4H^Pw~lZvBN@#G zYo`CC{n-6Cl{$YZL&R1;U`6O>0S<4_5j*!eHBJ_Y@aNuYPI+W@^n^5QOx(&5_rE|E*n_{V0UfnNq49(x{bdM5rR}<#v216@Q5k*>c2|!4MA>MQXLxI#^#;8^$6iJk|X>c>I3Nr8AK$ z@t3LI=k&?+QIWj7I4!6mOs;pFIPx7Eg z^G}f?=or9b``*UK=~5*9^spOkXwP6n!Am7-Oefl7KBi370_$hfV((kf1?&VtSiHdV zLd>fBdIw{l%ct}Y<~D*(l^CbBappyYx&YR$t)W=oPa&^qnwe% zi3H=ksI=SsR|R&iY`dEG#~9S*p%!lpI{?51qLF7(C5ey1WfiQS$t=&!e)2LJw@jQt zCk|R10QNYncbI-`ruMZ?9*vAbTICN5OVtTV#54DJaUCM$(E_DIs$EsXRB~q}WhXKX zTjxdIxSQo}4kyPJZQ=^fToYgNR!&Iba}g-b6Zujf^z6!4F#fikmdki)!h$D7xOL~9 zjB?$+xB_jIrNx$`lrYsLAPhzREJlIalX`bMK%EAn*QqtYs-QB%W1f-=K zq`SMNySqiCOS<>{ZuIwmp7)&d{j6*D%w1D!tywX%Kp%H>eI%EXc;1h^mB`A>qb~2> zJ%N@cQa((Kb^#15Y+5GDZwX`pcW`#(OWunwlu>aKjfz@ulPaifOvv5pdtChz7t0fL zvYtk1v)QCRe}Ccj(i>;ClymKUYP*Yabe5H=uuL-;$VD0~J@HV^NmMk!;!?eO2zb=Q z;=%ka?sBi<)LS(YdCwa|xUT-0sX3DA$zd1R?BEKgbDC1wmqmV!-a0rz8?U8|F@r?s z8-X4&p@2Oq%T6Ya{JzZbEK_Eh3joeTYR$%iRli@Q$;?-o`p07%PQ%6p;Ns_)tO~fF zM^%6tfIPBFq;wa=xv=jY^uZ+9eVe;7S$a^5`Is^9x~-VfqOL$NptN`^uT&c|M~BZd{O4=NP?NnbvBH=zXVtug=bFhx^=t<4 zFn9WEi-3Mx79rf$ZwF{gfH0c6+_c-4bvT_aB#r)@P-u@Ee8fCX%k~T{ODl?r10ch^ zceNc`6J1`P>2(F7SG5$Z0N{{yXe|$uqW!qC#9(cHY1wv!*!!Q}(*&2xalb#M6hpPCrmQcmpS!7cI7eOR-m8<;-Dexr+}nL z|1Da*&(Xj%V~9><`K3}I@NiK5E{gEUtK_U^4#Sm-uR1F#&kqle_J&X)VLY?K!D@pP zZRBRPU+l_dDj-nvmk&x)#dwWSHN1UbElmnVC6H30$!V$GavTW&dm(w1;vUW~LVUhm zKQIvMbM-uVv^o6bm581geOH)SmD&l6trIlOrKnEvqZ=L6X{c0608f%nvF+LoG)zgq zvr9I;-EI5kU-Kp^teTO}rV%yk9Xt zg}^;OQ`{8s8)*UX)2U7@K|yH7PdmM#Vi}_Agx-9fa`7sf36Y!vsLlAKx@hH<7;#2! z#(RLka5`f%1GfPby@qFsX-$}ksDW#x`y@zcU0W!OQuyr;RnVmEJ{Zu>SWT3f8SuWM zzNXOWvqpiBHFt8FXCSs&F-$1wP@A9L?$StLm=gMF=4|JiM5@lpR^c*0q} zS6?cua96o88rrAW=Ej-ON-`3(Pa|UcdJ!G z_iBwtq_^GQeT+E%b+)y+aoinCZk9V%@pL}Vw3bx*5>X75e36m2;U+CDIwB3$VXc+< z%2U#6t1@xzFulsBm$&xABolh`uSb~$J4fJg?zX0FLFJ%3$&;SJj0mAj`wBI7oW)#; zKrq$Xh=*$%<*J3A=GYA0kEbU&A*VEho^Pd6!MolaspRDQcJpezoGr~}q_!6iof+$Q zZ`-27ysg;taIePSGO@p2)1jr==c@qc4F#1$+SariDzrMiZ9kX~N)fyXVmZ{$Y(jm4 zTynzVz41NbJdzx6^IH+yidgE}bB%1I4)nS|d()vacmQV+3czkQa9$ev=L)66SNnsy z{SZEvWN6%LL=kJw#4B;y(z@>_vEB>>ZVJG4-jb8Wrg4pTit|{9lT1m0FR6x}%3Heu4j3eG8XEakNizk8oRIIGy0kBz zKMJ_m@^GP)q5sk9NyDo(5>mm#{y|Eb1%Qnic4qf6V&#w=Rs`9GRwsb1>68<~Pz2%@ zgUlwFc^$5M((ZhPhSPu&Jl~f&mIQhmz^!ZUpFDYPt*^gs?WW&psu*Lr;cZ$4{b`YS zw;}HN^y?TySFbD8f5OTVZFr|yTY z2JF!*So(~Kt!(^yvB}bCLMxfk+x64N|Mh0r1zpG)D5~@ERXN=7)u#~U)lU+QN3jY_Em$KCwfVgi71Hve*X3&mZOXZOL^ zcHI?Uj*(ooiiKem2}RU85q*%EtS&>9TjP3c7)=luA8)37TkqOCWr&}W7P!*h7E1`T z{X4^ziqol1VTu^ex`uMh0pmd!{OFB#{m?gwt>*5!dw6tAaIi}Ikq=o&0E=Q2jeC?a zP3-3k_e4G4n>zMa<5K(#aGEQ$Q@~vpS`6@jp{LM<%>)7 zu{Mz6`@~DQ1iE^QFyrPet)m|E&o$_Aa$j{yuIH;!sTgu24lSJ>ek9uorPkmzr5vi$ zGP5xaiBBR7Fn@Bi9X5ZpuhkA-^@ylvX=Im#w4e{E=hgy%zn=q1M44Zk=#%yO-C>Ed zRV^3#I49v&?!=s68mLJ`h&`X8W3n+6)U5OqNS-?Ovv7$&mB&+U%CLeATF_ z)nJNGc~_5$J-YGEc_htTu+mLtt6Sc@Yualsk#oHU8#q zTRX6MF0f2ImMmtM-_Z`-`v|Dpjk)uwy02>9Y10o1F$3*!GsK@N{i1rrq?2+=99d>| zcG~&*eJ2zjz0?v&wXBJdG>SCBv-sv^%Pb~vgUdENfR({5gg34IWUK-Cj20HPTvjtG zJ)P?n)~lJPz|xVqeb@pMk@=TpYCLtlvDoSIg`^eUBd!(Rgf2#d_^wc;cBT!WV{S6$ zt=sQ+Xn+=?I0qeL1iyhTc7}I$@KpWSiN0deFA|Qo;aSI~EWvegMlArIl2^G z8m5)HwR^o*n+Cv-eAqn^j04kUUdwa#n4@&ktqKLiaJGB{U~2MYLQwF_)s0EVaf6Gk z&7j$xkPD~Ii&J3qL#*ggM1d&cd#3tY=emTLK; zYTexCN4#gqmVbIvOHa+HFF}{y4ZbhH_T4Lcoh_6D%A0>(p{f96X$4{ziTHbsd_oh9 zek5gr%L=n-gg2sn5^qf>csQ}t7w&@WG#W`PVq{0=hqW;4yEjv^&& zs5C`r7Qc2}<9RlYBDAuk?zT+K<%3_7eV!+{GSiucv(d-lCSdtrJYpG-tQqmlf~oM51a|!$h(ZaVNtC?QH9Bd z-puTv3}Nze;C!|<5YB_|TQ6j|sU&AMKCXm2Wc#3Vl+>ALhjml_xGr2@?eRUuxKX8>ncR z%5{~BnMmxMRx27Cq^uMzK2}aFWJ`%arr!WskaXM6v~16`T-4>$I{&akJS~MIKv2ioC$BRae>F!bmXbCv2>BtxI^q^f;SS} zIW@RhWN*w5!uKmI=@hru)lAHoO;}8T-}xt9?oHREI;@|RIA{i?ux$+BuQG7sxhYWdcb&*P)loEm$i$# zx#3MYbWwIpmp6@4JMPZcTYn>;$C>sCQQD^-dxjuVDNpzAyQ}9frc`3^jCJIuUgTnG0<(8bF5y%wsnV1deW7WK5}*Z`%~;w@zUWb0bPb_ zY)rR_^M1oilh6imUxlwnW2{TVDxX_wZ8v-g)P7>aOQtzCI< zqm+uSeaSVy_#;$F zh3M3*B`l=Aa`h~cy09-EF;bpei`Bt$Ke?nbCh69s*x@L+R?VOH+E6y4$q@hmm6F+` z`5U(JF$DIx9fqpYtxoh{AExd3qpxpYvuv5>wEb##0U+l<>(qs$AaEnWHHvp*F!az< z+NpT~{vL5+vJ+7PyX;2{4EjnLQ2Br7%+xx)X@q^f8M;dFHH9T5D&F$bRgo2H-{jCZ z+_>(S*6qBejehZ7J-?R|=H6PJfFa`UU;{&)k?z4%sp4-jsZl$&0kl@k&xK0w2DH1# z7@{)WSNZarrf3kA?ZCF<;aBf*@Q>0yJvBQ3hqS+0l&31Hwd9-f1$f=CH4dt$J|=oI z_gV4zvD^UXpFi#9Uh-RhmL>>+SCxHbrO!a;x%+*K5=DHfAJ`1&`&g{y$e2nY@srM<_rj%ron=Ag^?+s|KRQM`G4LzM@R&yK zV);irM;|0a>HfsjcnbVj&Uk{Y8N8%M=p z5_V0k?fe?=3JxwwzUD?m27QSkmBQeh@NfV&(d%BUI=payJ-5y@8^7m~>B$}w=aXkZ zwdjckWU)VrpC^$hz}`Pii)J6t}8#M2YXM=gez}>)|Dr^Lb7i(xXJK zb{#?&xVD1hCJkz--1m}z$MM%ogX0ac>1Sv7o*KYIx&3X0`g{i8#nTWojW4dFXJ6DK zvGLL4%%)$`pww~~r*FO4&HeIk;HgaR_;X{`_n&FVQtouaKM!zR1L1%tHgVQ0;HgyO z+RHg(t3GoxnCaEQD3Wb~v$G zI)j4uBk6VB0Y;p~LFm49>2GUXQ@So2p|ETx}ZiRxX2 zHdRvEb|o%{r)SfB-ES5;Wfs)QgR37_Iq8SEmE+R`m6S$*R$`@ADBB1y!J6E^Xb@@d zTMZ&gLal6R;o96OE|F7vD+B~ zC+IV8_hL)%N{eMD}#(y;UO$09b+v+QqzUJe*zXWM2HpFfp&q z`2Jd>80A*f0obF6s)hyVm~kSEcWdqCQGdCO!F1p`xPf zVEJPpb9+B`1n3U!Pamh+fH^NLc9vt3a^lC%u&<^Zqlm*1I$AbK3jf|~{YES=ve!q> zRjb6JVcN3yq!P%o(O+7Op#5ycl+5c-92BpYVQ~NkR;|fA;P(VNN_D#4<^2%^ycwA8 z7$kB8+lTB3X9*aYufBZB1#%_C7B0*;-F*ipShYm~KrzP$9Wfeo;uDRbd%d+RA6vy)?G<)m^?e?1n zwhioWn1IKj@g#V6wjNEh03CTO-Chg11{h;$UB*J0^&a4XAMurJ&&xLH1WRe$cdMfG zN=hOI9HbXpI;+%e>s#9vR>(s=HTgdmWx9L^nH&#z2r4o$B2$5%*-G}|AT@@*Nc@;; zEu+tUSc@Hbn$du}#9`MSSAKOlLI3^3m!H&UQCosglUTocFx5$0{i-u$eXinm{1X|A zdY!f)q*O+AfBbHxsJ$Zo*bkjQXz8jgk*CYj3Y4M#hAZ`zlB)qc42gQ|FaSZK>L+IM z4+r*&ZN>|YtJ+*s4DULwvl`M$M%jS}e|75&jqejqs;9Ghxjl07Tu029`(XuV&avXd9nq+@&{U}MFYt7;MOtI+tz8h zl~CDjonR((4q5AW=4ux1!J#iw6uf&0V#)M;eic@9uxX)W`>kdbie={ z+SDtwnQR6?94>c?;JgRWPie3%v+U1M5_(cX|Fp$;;VyocHHSU#cGSr$>@CM zm_B|y`u$*t2n>uVAz+Aay2-abrLK=(tf!|n=A=i1F>v}uXhVr~>l4Vb1&bwVkG+Zv?#;^@9YVH< z@M}ZMW$cfr9Xur#1%X|Q#KKSdC^~&wM&s$HfG#l=(lV}*QOg`lpx(~>WCrP~c5aj5vv(9@Z@O6!yqFP77do%m`>7c+q)%4~Or4X@e@?W9oId7?7 ztc5DafFW66yv<^zju5tBp zO0<~juWMv3E!YSuJjUN8v^%+3Fx7F(dZOTmQyjRVODEa$aN!pZD4B*oSIhY zqrpuSxUMA+7AyAZ!cJF-k%~Q5@|n}hFklhvOYo#x(0*%^(x+vo?Ga9CZ_u9_s?q&b zwkm@g!OK%IaUh-BgTUUrKSDY&=q0b;t$CnS6VkIVvq#yygv#ajh;M2Wx;H|?L2X`=kmbO`!w>vP2?^1td_)> zDkXaymQMiWB%@J6iQ_eKPwfs@7y$6QfM;iRAu2HcB4j~j`h>JBHys&HgK96Cu#8BJeF|eHkF?&V+h*P?ag0<# zV6Yhs4A1-a5ZIdAPBmmyy5W)EhPhj2k=_MG4GK#{KrIHap?0P8VqBx9fVMgssA zO2qIs4;qR}m87HAndj0n2tv(j8T(Oim}n_XC-bhcfr<*_eW$D)1_ z`s&=PXm4w_hcZ)Fr*E7FcZ?-KkEIS8e-i zJ`%vd;u%-jqlx!Lh8Vx?_6w4zlMfESuI+6mN|$Hw7wt+!%vnFY+nFfG(W8wCds*-J(EG#;oHOfQB6Rcz*H`6a z@K)`rgNNEyQ8obJjvjFEaNp|3QN~GhD5&2%%o){63+BRQag7>G#20+bR@3uX@n6;S zT1FUnL@y)SP3Wf zmc3q`CCk7CuOcb2E}=s9V;Dob8hB#VUVnA@D1)g%TIDC_dHU|&!vbX`hKbQG3&@$R zH)(ulsY)*}KPeS)lmAr*6%3?rJyd^Cj%gZkfZL z=qjvSI2yRv2Cy10?Fz34fJ2KnZr+Vv>owo)u=7ZwPdUM`sWWbmB4alpFPIydi!K%` zP{)2kw4D$Z_-BA$yA-uP2#Ln@>APVJeJSd(6Tsw4Y&FlU^xu?21Sve@uDKS$Qq!u& z>~r@&6Mhfs(M-a5dA+F@5)YddX_i#6akT&@2$YrbW_3`U=8kGskiU$mrY;oNFJ_uN zxQGj0CFv{x8VIc7Wx&IBkKV& zGcCU#Qa+7*y%3Q+zaOs#x*K3SKlSQ}Eb;ud>&GDDcIVT&q+wv2>dUq@-+(Jfv#z}P zBLgZCi?FDBQW#3->)m>454`HXq-rH-YWmGP+LqM64H}nw0b_*R?K1FFyj@eLm&>PQ zwEXpe8=IXfP60tUH!Q(N0H|?Bw5oT^{y6jQS_KmCOlsA`%pYm0voP?kU1|o8T_>pB zR=<1eX=rh)d+ne-DdW{iGhUKsu9d5Xk3{Wn2Y_7VgjO>&Y(0IA>AZnqI08k6Mkn2tMt56I?CTZ+ubTKs(y-0RsWHm@g|%)~p|1vkL;J z1WdEMN%UN03ATl62*4RVfr*Vec~%WRTnN-oKj$w}=004CP zZkpZ>k0D1cmj@LSRIWbWtZlptXRe9u>@R**iPLkg!#l1l?weNF%Lr-fQ-<^c~psIDREJ&}A{wAWpGUDxqafi8xZr zXJLv__{eVcMx*&4@<&Eo2Jd?VX+g*^)4Y=ha3^MMjW=!mneAJ3Mqg=?ZmGG@0qohF z(5xH^eTkv~(R;PBLsM*h;IUmF&I{K0I!z2F+j{U;fh%g))+_3p)?m9t-M0Q5X2M%4 zlOG*|K=&^+gYL~xDnOwOn;wmnZAD=2xcHUpFx+S|-B=H9CuG1l+b@02Zi6gflTJc? z6p4=wIAyD7LYUgcn?BiL{>0~)n!M7M8bKed*B-cW zbB1Iv<>jJf1$a@M99d*E&ad(7#J!3th+^shTz@fBxKhxMGL&Ja%_05j!d;nv|2d|C`Pb3<-}w;&D^B4nzO%ASHsXRJ<_;Fnd)n9a#? z{{7l2__{xdfk`oK1C5MRsK2YXL_NMU#O;^=Xkr=d`r(A$Sdp>2U_g3i^npVyZDSX> z&=BP@ps777dY>^k=S!XL$(#uQ;0{}|JaKVs_NqtrXiicO$&gPH0LhvR@wv7ja@$@F z{ZM5`;MvOrk|;`#g@9xBO6f3?CX~HDG7JR`2G+(Fxxx$PpBYJl&8h>b0Eov#%5<*x zaPtGM;dia?^&eOs1*Y+a&$c1RNhUX7$OP{6hb)uMQx^k)ul!EdA&DKI7Re>!QFc61 zY8tF|atr@NL4<$@3o6{W66CKNUL6a@B!wF z%DsA9T+D0_Mj6#9H2j^@$iPqjcZTS-6!Xl^LvTX}+TZqdV)0NTXig&rBSI0XOlbBR zikob#AAa^|@i!kRnU7?8@g>tVdixp!j}QD+=GCvYL&gJ+9m{kUCGNJ6WN}nn=ap#fe^=+drXV+m|4Kx zCfa)*E%r3h!L@fHmhq!*pTBsS+D5CWC0)ow_2fO%Px`p1v>D)To&- zsy1C3<*bw4gh%(FQ1~5#F;L4o^!mLOs-y0MBM&S~Edk3Xy!SW{JlKU7=4@TSWAD21 z5T{>jCQGYPoQ}3E`ga3&+r!r%JD+NL@Amh2MSrKt=an!T7qI`%6wB-IWw=f?VZt;V z4lm@1jL0|04G%u%M2qbgqMb+j9#*%9BeAhmmU;@2_?Y09znx{^AvNfbRwy@A*}9Su z99_7Uqp$Abne?g3o=zj7d8LX$4Zw`4bdSzdEgiMy)Bbg8!wyM#@e87k85Q zSD%0rD;%@J*6d1gJKn?CRE3QheLBRZBy_@S;Epgn`s(PM4QElM6R^N;G??46!sWMD zk5N|kpqxD`(41*UPu7;!oPTh3U3Fj_n#{An9m2G808Zqx_u@MgP37>1XR+!Dlr!~^ zU$9j5?&1xefAM0}K9E({ZNe|?pB^4Hml0_f?v~UBKib*KRPxNuOY$I#iTrF8_o5ad z(17Y=pXKE@S8)m+xR_>;rC3~}P@kCMrbc-;VjyN6d-jh%0jF+SwzzF3889`pvAX|j zW2R~nGNClsdgZPxj2&=k8SHh(Oau#l3KGN;7NG_no^}(@@hdmnB#?AN#I;Au_(O-2 zWV8D7f9*$7)oH%#k#4vnCBhTd1c30DrMoWcf%(*(SqtUGq zv2o~ZpiYvKkwZc>;}rH_+fiaE{-q#__qVYd@D#!T?r|Kl9tv8jVI{br1^_gBNjy{!%<}oB?tPcMWwIYol~p`sL|Grq?T-b@-)FuHLbRJ(j@Z96zF4UacW1- zMThQ!LRFi&r(fCUG`-w(^$?P`Jp6!9%V!X-opS(qaGm|)Qu0ErEfBcJ8SFfu6sP>X zpRYC^tEA=edJP^UZjRGc>$lyCk{BD|oFcj%6b}Fk*efaul7VLBKa!O+{v1~nyRfoJ3=I&F*}ls<1-^P? z#TNMcTX9rKHx|AMX?T4-?n6sNNRFsmTjK9%{X*>x3|}4c$5*5c7A@ygZ;SFW`ue>9 z4ZBe>2M4?rJ|xd4LQE<0{c};p4PdR9!cpVZqaEusj@)U48!soZuPTmRv4u7czkwKE zP2HNpi2=kcT<_e?&VIo?$jM|LqkgEx?i3LG9mf(B6UC^oKjeQ%sb7<5-kdap*S&ti zYj>KyOn2v0TIU!IgeRpVr6#UBtOJi}oOWXSok@qURv!ujJNAM5uOHsIXX&&Qukds3 z76OSonHU(tJoilYiSzT*{Y+_?;7^TvlI8cg^rRDCmg9A9zh7} zkx^a}>N1MlLFC)YdD#6#gQdz5@ZIbV{k(xqnS$!A`QUs)t?m3Nu(g44+uS?;))Dhl z+QHB1u7K@%dz_IQ$Ud11PNH3KE0ag`_zmQwB2nKRd%Jz$dRN-9OU{Y)RVr}lVN^)G zWxLBk7~840l)r6ZxRSv>|EIddvwukB@+tf4N&|Me@v5rofcGdfeZ(Rz?x`LCV0#b8 zF`s9UtLen2-?8*y)D3(rl{S&HC{vab$eBG6eBdL^jg40>*Rue+FsJ!H4j3R9mQe)Z zjC2s#wL%f|WPNd$*ThSQL0s7C%V~f?srWm-?lM{w2@2nR{#rfi|kS4>xvv%oXNDSlbd9CDq16sIs-Wx!nGDGQ# z!IbHV(wm(8^KU0pL#;RAFY^JQ=l!fICb2DW-yR&bm!2X+F-`rsb>xws`QgF1n-;Md z506(!l}esTUCq|l^>yhg6N+})QU2-E25^U;AgVE5z5b>y^Ri%Jj#osI#93qZB|74l zE}}AHx=`)DS;vA){81Sz;E#mKLIwI)3T>+XQ9(#}!Y|KA9U0)tz1gSTsOBhB&8`W2 z4d_66Q3EskyG}K?@by;w`?Ot&Cku^tP#^6VqhAa!^WM2`m;7c!Oc2gC@ALd%fO;dt z$;?^=zEBQ{oUmhadoiJKC40SX@29Pe zS?SltS|MY4?prM-=9$EQ3c{!p7S^e(arAQlYpV-j!GDY=X0Rd%$Is{X@Mv@5!l`>V zbuPnN%vcj*!x-}!9<6Ap_ARhcfL5?-D*y2utMj87@sotem@;ovzkq{E$05TQz3qcC z#(>`9`utd+(td8teOhd@MdJo5o*i*6@a@;4p=FZs=eGvv#l%C{y4_Od9`BILbt$|TKtK!l;?Z7?KVUy6MGx??7uXKBR*tLm>)a}8ztB1 zcLH2qO>z}>D(I@XI-K)zpZ0?4{&iFqXSuj`SoMp!j_N4l~F3eAa;ob$jRe_+q;E?-0l9 z`#E=;$9)WLSfrFuVpFOjN^Nx3f9>w=nf+Q_P{gC*ZQ||tC?s{PzM}v0_ntNQ;>6l~ zbM174r%w=Q-#)4I^Lg0Nhukc5wm+R#f_)&}j4qn><<_jrH~mhPhdkr1`TS0*=$T70 zF~ZYg@ioTgbOi?oe|}lpIIIc!ym})AY)MBWKg=KFme-xSL;QU19v*8%UoU#BR;xV03{4X>Ng4VTGye(RTk$mqUs?7sj!RUdmVl>bcuATB6?{{IFN%2L80Lkt)Yh!93?1_+RV zUcG$t3Ihc5_V0Uas{mLKhy(c2(|hBX5ao-Ytz z>b!fc3IF8e0D^xBn}Nh<2z^LON{WGjflf|JM#jd<$|@ov#vx`xEv~Afs-enZYN2kT zu4-mVrKYN3VFqui?keu?t}f*6;cBj7W??3wZfWW6W?}B`?hgHhcv`r-y98K-SXg?x zdssLIgjje4dwObwxO-S?xVw8mUx%2vdjyAsxO+;_Xjr;?dRTZ`dW2|NLcb68^a%Ot zsbLWUy?|yRK_Q+ro-QGh(4SifqNS%@4ccFbg@vak zw6wGc3GsX$raQDTb7*tH&;hy!Lnjdu5@POQq3-@XOmk0n=nOQU$4?ENow>V&r3>`u z1|2Q*#?Zn7I<*i>4@r;bX3U{^h(}1UyN9`irG=@xM~J1SdWgFT6id+8>h5kK9`5EL z2tjTZ&{4Wucq)c?Lf=5Uw{*8e^l*RfIK%?clk4+yE6`@3qx=GWEeRcS@biE*-JwYE z&KB5H+B!V=kC=#ER-$X+}*f5-CZo8RB&@~_kcdq zP&Zezuz-%yU7b^1f?CzgLeWB9gVN1Z!%$sZ!%W>>9s1l&%+y?6)l@^=%|g{o!$jT8 zoWsn_#7siNoXgZr3`%-aPBleScSQ;_4hvOv6%tN$RWVBF3lVWuELAfx6?ijMHC0Ms zRS^+#Gf@dqRZ(&>5fL&Gb_x@6D8G>jqmz=ND}q259S>4lD||PZe=a5@FQfUjFa%2N z_;(ZdE~fdvL`z=G@$XOYZ_Rnt9@su8sMRj2&rH;-M)LCncv{+y{y@KfsZ zlTYxgJR?NrCR$)-S`s=t9fjDL&1WQ2XWCv&s9vudUav#H;a6E~C{p03j!nN(IBO&N zaUadEX5^(Z@du*Acd-ebh#mQaT zxrP0F=v<%`pV37=0j+3Py9mwesSEjoiJ;?@ytv>e|6`|-ZKR_hr4h>qQQ*7GRJ}>I zi$LWkUy;06Bq_DYRkP3=r&u72xz0DPCR&-A5>KF3`5{5zz&iwVP9 z1>4I^XpeT}i>epD|Mq^scV!3dR4s7YXn$QDb6si&iYQby3MjYC)mtVc z#_;0cZ$1%>`8-M)&;CAo-wTTHh3P@6G~Gk@>`;1E@PjE zbp2cl+9`i0s?pY>Efi^&(E^y$su$Bx>KHyKLz{)Nw_wjSlmVawwY^xZyPlA$ofy4| zO+UAI*V;( zewAsX+Vx$wXL<={di@M|2CzTaADRXD`-7o{H#h)#5BBx-_xJJh^Y`%f@b$IvvGs6P z@$+Z!GO%%X^)vRi;BWx@T55V}a$2dH`C2L3c_`SJdid)&I5_)QF-mgl_yl+w_}FTa z`MIkyt8?nvTYCl2sfv)vc`9hT;_2IKGiqDn#^h}+Hwv& zh73j^Wo^Wsl{yw;(%e*AyrTo6%7CdfT)!zWraa{OdtV}BM0a` zkr|inN05uKuq20;%Eyl|#$sZ|Aa-4wkMc@NATy8%2>qQ6E69W1A7oAD020ts2Jv$% z)AEB%L3DDU54IpxkP7G{h)*A+qz&Si2fcu5Zjdvb86k)W#*PdmNv9zN!vSLf`T#Nl zi7|luK++&8Ul6MY^eahU5HG6}NGVSAP=uOy^LG~bHkS2)UTp6U!4E^?l7Kly(q{jx51M!;( zL%(E`P&8Aef{x@p$XH$gqy%F6r~)$7<_0lp2!rUM)1tFb(qmKMvsWk4;8x)UaZ4z% z7%T9A*v#yBc=VZ6oj}yaAOST;c1?eFa~4eyBS_hf$HI$F14QXZt>#9n3&Jpmj?J1M ziWGNC0S)s2IRQ~I6JA~=kT6J45yZpe3F4!-2QgUCfM`I*s&vExAPxIJM zmy=UV%$-LYWFc+t%V@5M38Ga8If9(@Ktu}qvVQCqdKrC?ARdqqNQ^}qWGiY0WivKP zQA;g(7;UG@$~Cz7^wq1=97$v{CyQV9WEy zknbaiUjoEOq>RC>VC@ew@Q`)(_L4?ccHrX!p@K9;Ox*SO`PEqc{nbI#Hhd~HZayMh zARJp-UmeN-9;kt<^4^i!he)3tRguk*$jRSc(8yd*#mL*3&p;AG3aX3gtwOJb$r?ntQ>;H>YaV@qY`W3Pp->!xI<6=3L~!{Y2} zrRkw->ZWMpq3v$R;41gtLYLCjS;x*DN8iuZ$jDyK$je^WMb}uzOT*sptsQ}(vLB9-9pIzp;Oy%z>g#3W z>){0U_XE58dwKhTJ$%6~0d68-Z(m>Vvt;`Om1p39fX`s)ozb)0djmofQn)#_J1i+l z1x_}uX6M)gNM@xW*M}v=38@tT5CBhsAtVHwRg$1q@S~>O%|ArbJ07E=q(H*{!S3cy zP9yLHLljSNuU)cZ)6&suuB8?8;$tW9lqZTVrk2>QCc12YXcjAjZ%-ll0t*HhVyfX` zkK|mE*QujySZ!%$nrwxXQ^neAoi`5F)094lbwLoh4H_)WCMYyM`4=h4gW7 zLB;ubiT}Gyn>C6W9*UTi)1#pvR>_j;W_(I^A^1-MT&KfHX6CBqhQ8F2ExM3n+4V*r zim5S&DY1z!W;84niGqVZkV3CTRdZ|j6mdoqybnu~dO+_74?qUH*+5V8(9K~wU5q_3 zimTpg!$L!i(N9fH^-4|U9g7`reFS0WuVQ6A0}H5W3I*Lc!&J?jm_Af>Szy@8NG~PN zX;05vm%X~|)T|XeWAWhCdgl|P*-we6Sht11GlVv3wtFtUETW(!y}ncNLyBrPRy^Hm zur_>Zvg6^@CF4F_nnO)*9(={d*Mo1~g_N8((sr_5i93Cjf0pU8aryzc;Td;H3^AQ; zmaE>G-c<+AKWT;WhpFH>T$g>&K3K0b$wlZoGJ^k7edKE6vn2TyF|N~Y@gi1sCaAaF z(ZE@~Q(A|+eOrFr_k^pZscvH9qM?}d)1t}ew?k;(0x~k`m)6jR63Tiy8CnjkyO*?S z)SDr}q&)?_2z3k$hUbJ&I%Pv(GCl1X(oR*a$E7&a`9c(Af~yp+3&`q_V$|`FJ@5U~ z7Z8U@oL_0}8xA0K?}=^Mkjhm&H3?tk)0@3btATaND_y?<4ZVgHyGFaM6zo9%lZNGj z6$|#9?v9jk>SzFYpfP?#DS-g!z;md;=}0mmTIf%^0VMA2OIq66hEhWf;kC#s2`>lU zJOJWr6{qF&6F%ucth| zxB6-1gc9pzl&G~Ig=dyjI8Q5WERtypP^MR%%8E-Lmf^FfVi?Dh^+z z-nsYoxRIbjTklLw9B0iV#(=7keO^NexSPxs3#X!3oLQBNp|!R2aK8+^PN;8UnCO&j zwqXr>u|2#?$xE~6Pp)V)sCt1S+4Od#G}vD9TUN^?o<&Jex%FJBMm-QTbaA{A z>|bxa+tuiQ8+{rDQzQzO99e+Kr|c0XB~ zNIQL8`XygmVF{GlnyJT=PxQ#9Rh^0TOG{5cJRc7+GH#taq28%$FO43tZi$v%1#ao0Es% z-^K(u{f@%do^t6=kR5}v>G z4Fo_LTWPdkd)S>I=2lZ4Yl$n9-91e|J2Tt_-(<|_xzcV<&E554>kH0Bgyi-@RLsXx z1oyHN^A0|6em>ZL_gMoNS#X%j75{Q;Ih5JUWMqL8LNMmtL_ZGWF)C|f4Wo>!$OzBQsOg` zaQwV`Zxt+`MCrrh=P^YXjLmbhDI8A3?s@j}Ga_kgD6>1A4nS}Aj1~mrF9ptY1)<9M z(segRA+3+B#P3fa<_5yEl13oP)u@$Z)d~P_e3S5uUOwVLdVY1yxy^6tn*ksmi96mh z85^Tos*eH42i&9Y!k}{AKE|NPzu=;hydc}#f`M^tM|DD?B(+-t61B82zA}sBjuo!x zjm+)zYFF@UyZst2riu?{A|H)0c!H?_k6Y%q%)ZHBRlSe%GE3AlQzEWPpjlyW1q{vV zxN0_8+%VD~b`r(`oDbGhu<{#fE0V1Bz`N$cD4rQfZNoO!#>#tKhvtRAx#ijPt7tF4 zdOF1=rD5B8F5~#Pp1`hQ6((}#un#WJ6z(BH<>DjCgQ!aFCHX@zPn0h_JUpm!R$ts4i_T>Tw79m_mL|Hu9C0`FgTAl)(EW?V6yKa-Yt+fn9 zx7p$33(7YIhi_==l7gqFW#dZc6H*P8-{%>TS*N+>ou*JvPaPe0Zo^9t#;P=U{+Mfb zEEk>@0rh@sFx+Q?7cF#^VIG;)xspn&KK*23y|*S5@l;%&?~Om51KiYfxOsW9Nc}&Zgguo|+kvc^Ckk z^a(={zpw~2`{?T2+=$Fj0hcO+Xa=youa>aMNGPP$(NX^+iERKV#SvWU(hrC(?= z)b8`qbmePxjt-^BBU1B zQcu?c?_+si*(V}h?Vm`U73dK^epSq7&whnr@omEb)am?0S-c*@bM)0QTUfViX2Hr- z|Cikax8fU>`<3~|Tima^$=ez)hD&Q3IvPXzJwmtkVfB;Zi40)-a-zB4;Xpd1iMoo*oxo2OKBfGNv$eX+^C?G zuiN=j=|DN535M*SL&9-)n~IS;_j)E8W+EGm`^p0O!|$+GM}S|hDXgYLQ9mxZ6becq zP#qtNK_U5E2m=3uC(Rs>o3i1r1D8I@a6vv2ZCvOQ?R0yH{{Z2tNYHwHzP{W>8=4uu zc(uJSWOcDSktN`JOq+mC5*^u+L5q9q6TL-?Hm;IC$0y@}ymclq$Lj~<>yXIU z;j4R*?(mk;JU^O3u`HwFnoX5;vrUYNVB&DAq4S-T_Fz5X$Xqhu{-7Uu6kX^V8;xlr%DZ~-cfAYaD$@uW<`USoM0f&Fr`R;VxL_rQq zhj_NI?|wx8IjIDBgesii24}4EWfL;dbTk=XQFT_Q|Ht3bRjJi7K3Hs;Bq@=)>4F;@ z%OiTkzw43|#a!mM9@3OrnEVk6hsBr@X6|rIoDz>0sVGayuY#T>eXIL1v{-I;A4jCM zRsLW;my5_+KpSxuDA{m=B1fftU6r?Byc}T&m(}6N(q);_)SiC4(y;rc?pwCP{gJe0 z4Bm4qMeeiKp;6{1pZB*Kb==<)seKg|C;)#S&Gy>Od`?=6F}rEbRHo2te|JsxfOF!+ zV3mM?Z+&F$_>*`6H4>%pQ)yC z+FOBXTsr7>IGniOT15L(@3n&B?G^Trrxl0b5iyO~OPT%SRWBU%rriRU2aRYS;KItd zhJa&tiBG@X`)Vh%LBFka;SEM~PR4^Z_u!U8ZM5D5nJ_bT1FgYibGC$uPjT4 ze4+Gp1pu|6D)no0b8tKg&+1;CRZrNQPNN*u;Y||UjGPWYRSUOIpAXpY?g4z*xo(}D zU!9@yss=FWpnLUNdViemRR;4dwY(1kcIZr@daj<7$>t zS!jHl?YFUB?l+V!d&wn(oVPTM7D&`uh+h{M_69kr)#g#S6KS)chPix7N;1=MEOmwd z$vf$UcJPo*kQ%?5tmFAOvqR5pr0*X^G$^2c`v$}G2MrB}=MUO{fV{;Z)7l-uK`LCi^I^q9|^&=e5Fq5yhTgKXe%N zK36zfcX=%y;fzZ+{q3*9xiZ~)=N-Buz_eNMQd+;xn8C+`C0rs;O1lfZKxJ#`(}g;+ z1|2$z!`UQCIkQZ$qrxnQct_Xswig<%Y+B}NbZD_M=$hbrul@1t-;Ap4@FV=F*R=$(NKr}oKDM~g^W6nsVT~3Jo6if6}@bd zYQgKCt{{ziCjluXHLiRr6oXLgJp21%a_7}c6IIKxwv=eQ`PhR@j#%*TFsgkh=V|(8 zi949Nd@7sx;>j@+0QL0$rsI}cuvj| zjhcvj^J^6o68!OlPq^!ckdP3Pv1|{w09zZo$mARnzo?LOe_zW`HP6S6$yTAIzKlj` zxo*1V5Bx&znT;1e$f#Fj<*8~l6@`QZn`E1r`pmVNxUb@8Ba&xpnDf)`*k5xwWUvtpH3;DBT1 zV+Gz4Sm=p!)8DY5x?S+Uyr+GOh_JgS31!e_Y!+a`?Xo!@Vx8|YeZNwB+glBRLaQ(| zqnjZ-xNP1Zg-v>sPT*e_Mw4n)kg>aF0&e%t`&s7zT^&zr&CZ79(Vs#-I{3I`#sv36 z@uFMoY|$&lwj2t+TGHiq{1$$)@i>%Gpfb;Vzc;$@sN}BxKSz#z^h{(#UQFY6m@o@{ z&L>NfJP3*DVob4k(VX^Pq!G7qaxt-J1yL5qDhOLS?Gf(bQmy%DWuz_Wvx`jxVd)oF z`IT2;K3kVx^7?)gJUpZgmk?|%JUlk4?a3rD={7qR$sjz+JwagZo&c8Z9c3mu4yj=^ zyS~1h3_S?%-n?M@)2~;^Pk*7@cMN!Xdd#;r2z{DM{S=7;6FK)3tQCK?^u2+=zj{8q zbBe^^C#^$N@=uzr6w0M{w;zHqMTvjYuBU;@UO8?NI62=~s`{9=B$`Vm2Zq}ACk0T( zG{yc;`Ta9nlEyE;VSIH)b(xK}|1%Ws+&1|h4JEA3Da`V{o>ij^N@e1+YzDnoZvQ8s zVbZH~=UD?$plbYta^l#)s)#G(KAKat80z^X&^;GIh=ak4U*}6u5D{Nm@WN8lnXS|8 z7!O$X4~D+8dW#C})bKkA5#iB;=?Ja@W<6??f$y9?MKgf#Dg=yNQL|A#Jhicn1 zb|-ivJKINwWJN|tgnn>Qn&OlR2=?~OSF}p>OlBiL6-+}F+=qw6xJ+v*b93`YYcg6$ zG%VeVr+oEHr@LgQku=rLMt7(Q2_=^c=>E0sbst6_jKGYX>R$3%yz{A?kt#i{o(c>U zK&P0{>^2Jt)(8d$-7@$7l76~NQ;RJGg^)W|Dn5NQFYea;azjrww)vGPp{5;_X;vN9s;>|MxCl-_@nfj;myvL0zT(%!u9`J1{&ct9UtXJf-I z&_m~RUol?<@m-GJIRtk6@Sv7zKmdL9*SJuZ_Z>>|5z&25Hyhpv8-6z%ewW7^a#>fW zKI=E(al+)HvP5b!7nk&h^jjY>oK8Boq<4?+IXdYu-%lZNg?xZ}M%sKNkNG9?Gyc%g z?%;??WgtHGQ@Ov27hZ$}I82fKgS(+unoZO<+L&$Xu#K9CD7J3m))+Rs1>!v28x0Z+qwK%lI zXDQU)L*G7$#??fwmw`a=aILD3uun*FCRh}Qt3hRiBY`yn5e)Ef&R3#3HEa@4RXx<1 z_0VvxQPHXQLfW~-sS54?01ni1R0wNvzkEIOIH`K^n>}{o3rvZw?uE+54X@f4S1kDd z!T()W((z>9QtRHE)+Wpj92EReJy0!%dMz>UPtxE&4yO-0sTOj(CtC&t?0gvg_U#4g z)5Vr}BtE<4RIYl}M-h(XCB3EWfrlz2g*UF~uP2mdUOO^;i+)=>T^4!CQib*gL3UO7 z=U*!fqjpC1&qVcmG}O~cyU|)@3;H%D%Bdp-24XV9A(xkL9KnWNp9;`J6kG6ZI52pB z2+0aIYHtbs2fSST%J{S&*91BkJDmfCI)7-&OW~}&H?gge!eym+8#eTyu4`4e8Er%44cCb z^nqRg&v&{sUSRO2co)ym@H)3}A75?fUFkR;$1DE;@IUY5*-4pizgnwO+P2{U=0i(g z+bbR4N59YYwNq7Qn|acCi&=6Gd@3v+$G@oNQHgA^fHIa#geR0@Gd^t;zI7Dr!+~s< z@O*)V+M%Ng=@jsAn#ljmw=wOj!wpF2h5!uGyLAlhbFUL|SXiE#6C#CdehALgo|z1P z5Pa6ax{>%ya@_7kJJE<1jkx0voQ%WT0*MBQAA`eg)*O?l=h?bkBocP9Pz6R4E)A4x zk^BZ1uI49VHZA)w`)Gn{9XETi{}|~)_5%yY3Ar6Ndpwv3=>tsY0s=2yjo18B0nnN1 zE(_`d4can%>{lbud6zi>nv1TzifPDYy?-bgJ)sR#?;&M+BEnJb(y7n^XBlp$-m7ha zI6-vtOf%_+jTDnhFO)AUjh^M;`mFT)!ftoBzVFuvhWrquJnmLt=~)&!ZZ1^gY#&U} z*4Xj3Pdrrqe51L#{+;+I2}#!Xf7=!;%p}C)Q{O+#$LN`)Mc+?;UFKgZNVPk>7hN7GxbU4&Iy z%oN-Zysu?Vh|hK}!t~Xkg#^?amwFRebX!zBJGY34(kwhBPX6Nmx!|AcN{gZvkKV7wI z$@KrHkt6Xn3MV+)0M_Sa`*-zz5*L9otc&5duqY_oYRCH+@}Hjmx9wZ;ozCdb&#bl4 z#XM$$UpmHd89$#fN!4tqcxp(TCBIck0wUKlC_d7g+sD{=r_xx!`FL*K#CrM!BRlPN z5e;=sP$w8^<)Trp9Oi3V0l}0)cJJ$o4#8!Ov|z3zcb;EX>=6_NiBf}PQ9LCvjZ2>r zj8-!crEZ?ZzCY}8gB#?9;zddqf1f?sE8~(!O7@7W^y)a@kC$DT_JbjlnktBE9I7d6pTHh#JEU9LM;W-`uY6xd)8D#^&0(oaVi z%;61zgGYp#IPkErpa2l30$fijI@+a>SroN^@7=}jQnW@y=b_rAUe0%t*LvSIo^ee1 zPbL@7tWE@W=9DOBlo$dM(oZY!Hmqyz+;I+2nvVK)${*k7MmEJXu=-*x{*mZ?_P0Qhikg zoLpY*^tS-~yNwsfV`7M=lX1RkD#^+aogA<}PBrVUP$PN!XC z^fQia>d+t62kh7QIspM`>h)#--rE`M*QOi6bASCr%c172D#m(PZQX%cf(CqREaCC& z|EU6&2$Q${(2Q~%Qs3caGsb?sM9C><4l(9okl?FTi*jlDjXuUc3p`=vQNXo!cW;#u z3S#z(_#9rs9X`UvuK4NA(mx=TF)~55A;C4(0@(Bj~Rr>iH{>ev$|%Pwrd2#rs}8#M`m!!7FtCHlUQ1#}a*WJL;R~2H8}WZrY*hZ}EREHf9VC9Gqrq%6 zQfOa_&hYuY(2NJ(k_c+I;@;m zYD|5y`76MME1YFc(BCsn?I$;u_EX>W#tz_d!tLhtad_x$hR9mj&}L)kejsF>#)(*( zUqBT{%8sFuqmM5pyD(f>MuSS%*vpW3BxME4;-sdeM5Hb^t$*P=W9)YlGFH+>M-3CH zweQ$!Y8sK*DH*=n`pM(&ay4OGs!2(YD)dD1q5s=tlTCS#Mid#37*eHdkE)1<&UA*3 zj*gvN*h$YEgm`XP`D_`Q7zu*bg`e=$KH&Vh;zGRr(>uYB9)biO;||;ZTBy|T!Vdlf z4*cwsK53*I5mmcl@Oa~E;;h55+o1s5)mrL!ak>uGnvbnO%0m8p=ky~|qs4UTNm^ED zk2CKv9lk0`B^e0Cj}Izmx*rqoj-1;WOTGWOk{e03gZV|eH9?Hwg)iI?WDB{8=k-7bSGj;Y(CHD$SEf*QV~35BfFJ?`3uB4p`e|-Sh;3~+P^V+ zKo&GlE5y14!TB6t!)7{i)Yjhsr;bH&Vi>?q9Sr2(W94-ZfOG+w6 z99B-seCMq){~j0zeBNTpQ8l$UXHd~32lhueLFU*%}BcGmx&1jru>W2q&7+kbjrB4u09*oP!V5i3Rc?mCMi z2mN^Vopw%=sRg3G8JRo-PI{S({?4mlJYYD0FfGv7+r3sQ+a;&m#9AnNf9VBJ{)~Cqvxn#mMZ+ak)UBZI`Nz6^oUjeyAbhW;V+f$^RROe;Q)qWoYMTIDM=66?2HY zqd0F!nnj%bJ^RSU4_2*RX^}5J?G6her!V!I!61C&H0&hZV>@%pBWew=Lb;V)<)Ln0 zC5O*c^KwLvN;E-`dT6pt+RnN@bSm8p@mJZVnB=YY&n;xGuq$*iQ{aAk)X&17H?FVE zX*T41f{aqy1QUlrv)Z^HrpP-K(oVJ6fL@=_es+A1!~b-lF1uEr0(sUSJj`W#ThaF) zqqw(XX)XZu7DA{986Pv#O?lq^6y9oXC3B2uA6;r!e%=dR77Y1X36;*QvqKG*j_6FM zbK=q!2sbA1b*4+$!f%#p&3|E_PA2A$RR@g=H}JCJ&5c?pQ~nXJti!8yI7|j9 zEyCV+!se9^K`Tv3l%n2VuA{OK#(sa zDK7BloCz2;1x&wXc_O=ZElR|G>=zAGmdLqwyr`VYCJUE(_=T>-o%0j8?fT0Z1Fdrn z1Ns!nTD{2@YrD6exOAR!^PUBEG9t1#p((;5uZ2Y#f@R2Ft<{Wor7PmXI*J$h*q3SIskjeM+FF*Aj0q<# z6}jvg{$+{vX?&3FI?f}Lq7R`hrnNVP>cIMF>up9LY{4HnZsM|70dTnGDx8% z6d0$M8f35bT8oe888mB(qSxnsRp-<*JwZ(jJ&p*iU9juA_*)H5wHV%6+~tun8*lZ` z;VN?Y7qf)2>E{#?BW!_>@UyyWnsvp_+aoEgvdtT_TvhkFEsndAVds=-jWW_-OCr4G z+z-VT^|qUpEfp&P>Q+}8SOKArBkdyNlC7db^X$A6b*lf|RN~g{4@LdG;-dW@p?3n6 zY-4$5^>X4I;hn}(4TGveO@o3TJG`7%n~rFozSz<42NzE+#Ze;4_ZhbPU>~b0cy^VF z7N^!(Ph#BCq47Jf8!KPne1%l^z`zaEHb&q{NaGYW7A(l?&w>a-@EVGSB_s=5RNX?5 zmppT!8SSlce_5;?huwyRoyTne2vehGP5Qb;dmb?v)N86~ZEOoSbx8c|@l9L}tYw64 z{oNMcn(9kIt-<|m2~Dk7?3Rl z*faNga6|^;uT%MYIHlJjjLjR;HTL3qCXrgpcH8Y%iS~2Po^<>@Q}O5nO8W{|g?2P^ ziLP?~$rZ}N&AF!pPa4&}rRQ6>#v4tC3ul?K<$S&j8m%tv9)=oETA@9e+Z2Rs2m^he z?tV~%j@aCBL5qetx+jEq-0#7-dC(-_rFh&UmPss)K)|v@ade)rl`|v!y;LoFB;ho3 zOQ8ue(#6hL8pnS4qJ>I&jlu(_d3zSoDz7Z-ni^Zg^HE9Si0VRwvx^+ITYW=Y1cn6Q z+BG5RMAqvhOg{AWt5tU}1U?$uuH}ppkCmd$^_T44cy_P9+Ls2wGZy=KQJtw>iTKYA zuN>0?Z$52%ePC?~ycf)$s%q?%aj>#FypDMLUSq`Uh9TC*9+Jf{=H}R#5DR`=U{2L} z%9_H--f*F39{dX#F^z6apev1`csvAnGuBD#>uyRXLGH%Oo45Rhk<(2eQ@}p zHBPlg29D{UurFE3=6EWvPx;OQYW!*K{!AJr>ev)yIB5JCvd1%9IkGUX_=7xgtj_Ai zq^g%>M695^R+PFzS7>fFjIz??#3ezVc!ZcZppoQ-fL&^pY^hzY|0B)JHxw9?kGft@ zCYjg~!$M9r(;(Q8cS);etrS~W%Wa&sdx$zp%l8w_|I)!JT*o|*Iz!~JXTqOMC4b!M^WIX(W0vgE&3?a zL64`T<}1BI>G-?ZoSLkX`v-qIrE=cD!OD`;4Z_IzdFH#?n(#`Gg8So|503R4Wi=zT zDo=mymf=I^VW3H$@z+hetpfVdiL9dvJqqeKomv{K>6kuwoJ7U{Z594Kd;6l%xnmU$ zzp?JMn`uq`_keqL-S^{!8*j6LutzvJEhfPga>eeIU{o89eA)bdlXv4*DIwwc;81(1 zJQq@NaU`o)xB*P%G_`V3FO!x9^f zW^v1{tM5J0+8Np|TSKL4E`ueFA{rYFrOI<^x)-_aDh>6JctKN%&d~`iPqGLuaCN>4 zgU*?u$M&X!jW%^3Mj24v57)BE;b`NBr6e5hK~}xN#!?Aot&I%*A2TZ=m6%bZCA&0H4;_9DXGdcosPIIhZd`Q2z4d2$^Y#Kz5cr)xROLH z2rWAQ9z!1W%z5V@d}5GDs{|@>J|l_Pe394Q|lE?o*zb!S9 zQ1!yx-(%L@C|V%nSY5fMFY|ZhU9L`!p0s0&)nlwsnPNnN!_);+1oQ0Tp5pl>xb|qy zB}w7oCr5p4Qr6TB)LwVsg=W?-QJj9+c?2DwZN|Phfu-XsR;3t%9J{`$S2Y+TvbmrN zxkaYD=3J2S8u%){bS3*#kdTo`sAn=yTJshU`Fjj6CIWhKH^dBTiGKKKMgRkXT>g9< zLy31d%^V8hEwy5!wN3HNL@JHfsl}}O&x4@N#!?c)vicHbtpMD^f2p}m6FHy}G9M5w zeT+?2(>prxrH(PSo?}|quC{qlit2eMcDn7Y(bG@+k!8fiF5pc2Wvb=~o?Ssntz6|r zI)#rQ&C{!0_QOz^yg_AB;V%#hZpBOrvv;m$D&Q#xdf?fk`J0dmwMG`~*CI`CkG;6Q zfA~K;vok+@mq3u`yE!r~GQQ%dwHEt+wu|nqg!!>mcCM$nG`ag-um5{?uIE-==#OA2 z%(Va5d66rwy+MwEc`l=bZzaQSqZ+l`J1}L)ThF2U6`87kN(t5{`u0_$;SPPBl|&>y zWAQm35Z0K5Ur1W<+{ExbZXVI|->oG4{JT1=`gF zi0xZ$y{}%?nOxiD;DMkNy*F1nRH2^9_75eLUr*>b!}Angl$h&DIR5M{Bz%^&tN?JnG8<@Mk_6 z#?q>2aR#614cv_B2+y;vfoQ_G6)G|^M2uf}i$9Z2$Fp;FsLLt76O#^o9nybM6txA2 zn@Yxzp?0|id9s-F{*8RXUHW?U{k1B)8$f~`9(yoX`b0}6`ZexvOw?DbfB=f2_sd^D z1=uk-1|^h_b!3G7-7d>DJ+rG{QlY*lpr5Ta{(G*GA^ThBt)2IXasm&V=3T%_c#!%5^3c2pwJ)ojr&fS|?7=Fhs86)~VFQC^C8yfa1k5Db z`^j&0T(OR5s7J@;X(Oe^eH+JRW7WoeM;8_g)y5(vFy__#-54*fU*f+wJEvOby06Ib z$n@HZ&LCOsFJjGXg~|qp{txe;yvu41%DSTuZPd%P+wbQ0*EUwJ2JcUycjex52`ZKN zV-bzJV%h$?8hES#Onbkcj^}Vv2nr!T{hzoHzUEtCFz6NLC9ImD4=fg=_cw=-v#N7v z$Es+i36!Z**3~fV?*HS;RfjJJkXE2`xk2lEza;4L%FnY@1|P|k~xZ(GxJ!QnV=e;yj8vS zvCH!?bdAnSB zLCb~GUY+n#TgpXZvaD@ z*zYOd;s7i8bgqkM>r)W|Ul*(lGSnUB1YQrzQY;|K$_e(=u(m->cGi`Mveu1FCVbW^ znH9LVOSSvQszCI+0C6Pk{GjZMB9wF_?zLv(U*|UKze6ZK**~0!(-eq$Abt&%Pak&M zR&|e=7ra`($wz;khGn@~jH5^Ax?lG%K48w~Bk@-JjwR{Xl3en8!>+)WuNATxIKz;F zY`Sf&!gFE4&Bk4UFHqjTS8VK`0#=W=3jarz#gMF91hZnRB80cMP|fn{Y7$(X*e(_3 z%tY$Kx(7{N{dMx{d4dR>w-N3-Sx`Fwty@?kGY)NQ1i5BznHdE4Yn13&A z36wl<_CD|Ut~M~B0xPv86iP<~|NHE|Leyx*>8)aD|6}mI1Zo zx`k)-hY&BT%8%y0uD=J8;zG=AvqC~Id4+_~|8L+XCU_naa+)!G^3RrXhLnWfHSaGv z>-PW~mhrz9jk{~;nf`Pq%V<@{OLDc?+>7q;jJu@o@|WqyVhFax3_ZMOS5_9>txI_Y z2VH8N{!cd>lIQRr6V*R!GZ(ySI;Tz*yU|cfX3{1<{ z5L9T%W4*eAeE3Vhjf?0DhR)OdNtTl;WmW~`Sm%A|6ejIZ4hzE!MkO_DOTI%j6FlXA zF$vE96%a5@99(MFDy4LMnE8HezI6P()A;!3cq4p@Zz^BjH9ocf<2s1%jm<=%gM#WG z%`cO9lD5t%n|yD6Y)r`JJkg0_FAaESt0v#MM-5yFo~or^sfvG3n_jYOG>GzCa`*sl zo8X=qXCE2PerNlsOrHCzgc2AN*wC{1Peb#KwD3Y*=8xiS=5k5=ww?H0hQ#l?$3#oI z<)>O1nmUApgk?{E-Nc$0%h6Ng}$d`3nJ_^?zw&uT7jLDqla zgBPKU$|^iOg^MdZ{7YlF(ns>&Z^SZuVg&BH8L%wQhR6S%!Btv3&9Wb=ms=k{@pHKD z)p92T1Bc$-lW#v7l8juu{~L_esR6!-AFPF=dLP6hUGh!vXm9td|}|ASXVtfFtn$oFI* z5iie-djgv1WpB25L+D<2J6J5KpZy98!79B~s_GO5;Pov{j+56&ITsvKUpC{fh{$skAHUAwKiYCWUbwyg6Mk9K)kRqk0RGLYA z!vFV<;2{*ZVsx%D^H*NphAt_wX8Mc?t+WBdUv$F1k@$qI_eCVl=Hl?KBmevx5f|~_ zWikkc7Lz%m2@j8+lRsRpfSc3yJBQPMsw5!2G1r6LxH?(XG2nCHXV1Gw#A%am&*O)? zjctpuIT`xk2-`US^7%PR4h=aq)j2@7h}l%YL%l&Phn#N-zF zqMQ6BW$@jukVtb5${{wr;Ov?SdcG-RQYbLG=>-3iA@Q7%nLQju1c#1@Qo@Tq3Ic^D`A@GP8 zl`i0zcVAY&1$+(QGyUZ4QUpo3!m$rDi6s4{jygxNiRSXb4L2DzdW2$cZ8Q#+e6Jf@ zDl4p!Ol5Z>mopzP&gv4FhN{z*`cFvLKo9@l;KYo&T`=cQW!w^bl2s+m?^(p_-(UUR zwhekNrUf69_n+{mJ5DaIAx|i$kf?0^a3sf*%jg8fm(Njo z0IQ$Pn;qFS@yKBT!OlWjAHjzBH~(BWI=79aYzvaYkAy9WmY%YrX@&RLE`I|_5isG& zKdWLzB;>N{jll|+bI|uPaImxO+Yk~QyQQ-W<(YY1z2KWxe(1TRpnR3+vRC*nCq-~< z?elEwU0sQOy+ZolnaQjx>kT@6S=Dm)@B2Hty?rG8h+%iZ%SN%^nrDTArrYXbVrt*| zPq2z~1cCE=_l@Xxh1_jBVTrTwHtB9Cq0()CotsOoWW`@VD$ctHRoDKISFj*hSUAh4 z%>S0{{ofeWhdK+DEcpap*ZrBoCw^Yn+g(F^BI@+5)iJ{Z>_t685)y;|Vi_7}zoAV4 z0N{J~bb5)&+e~_~8-dLkw`P6rvwU+vpr3{;_6<#05i?fVNg?93ol>rNG(Lm36Mg%| zQ=fQWR5DPYVUZx~l1cm}2eb*|tHvz=n72OKgT;PL{sCj$KL4$SPXS*)yT!%pe<>KYCG)Kq4DogJP7NS73iz5o z<7W|+6rjiwNX-1_>WAmlrFmXu>t5pFGv{(J2{-$Q> zCK@A^rpQzb?-d_#QLE&BWjr>&Lyx1dH1vT)YD{iO><5&G1+!`Q`UW|re#F#$c*?1$=nf(a+UUsk7CgD9Ow^dQX`CMUKPTnDPZBzY{G1J85)#rJ z{fwXF1JOhtHp88(k$5iFvnV+V@6pgs-xKy!Upk(?7;iV9TbV1Gt2Q6Y#N1z#3ETG0 zm)^{PWY-$*$dvyJS#B86VZNTP*rTOLhN^|&=&@vjw1|L!j}4(dI9{bzX`Lypt*sfr zR+6~wFd9Jv7=@jtCV#BdSgw4bufA`gDf9qufXdulqoDk6=$U%;dpgKjcx(y$;IF4= z5miOyKPvGDrT?2&)t@&LRZdQS&``T4;9USAD*5{#uFa*?6I$e-{CW!MGuVxJTtEFJ z9`TWN^oJ7Y^8|LvUuc_TtIPf-Zf6(}Ka=9%5fduh;Sw08$!nidRcH9gnhoN1z;UYo zFZ>&7i%qa~mu%UzDx4uyk1Jx{vpAA-T{$uzUzo{6zqDJbrYS5^){4dhhN1pdL2R*R z0yg+^h%ma#ByofyR*HPULM~Q}UGkils-5R@|2f#7Pw-;E{P2+pIi29>)s)QR^Qw4> z?{<>`tfzeBpeG=_UUMfhv0y$UlKkQqZTX)-6Ti%*_7Cv>l3$wx_6`mVaFzG~`+T~q znu23qd1t|rfI;YY)zMv$e!{(be<(D=zGVC7$7NN|>&X^0R11jGfIhpP+cekwdoS*qByXmrdn^IzGJ(>cMpt2$!TmMFy8&;kVovfOSbdut@ziE6mY-c z;hzunL#Z%Vz&E17Gd%fRyf)9~r{-pbmT9V%nF+0lGBIVMmT{^xAO=hWo1c%7@T-km zbB>o8%(d%;Djo6Yv1Vm$PR36I3wHwO|4*#Bvn_*!Oo^E=U(XN0aE_7v5q<%(dcmLa zLIT3{ETgGy{Z0iGf`ZRNTUhXi;7qQ3CiAjUH4tb|=emIOED*e3Q(Nsn$K=q>Zh7~? zR697AyGNb^lO#f)VBuem(FwbjgiqVeTN0l`%^JyN_x$0`OLOs3W@OIu{{`Joq*WmM z+@HCWK}qrk3-jXQNlmX2aLLeK)7huU!!A@fM&aHP_ zW^a9+u9G`-d9pVp5lt`yEp^EMO|5E5d&^pM#iEw}zX<#HkFe(}r60!RF#OW*KDZLQ zEDt@zt&8PRz{A6>JRG6^i;n=kqOnESkB+|B*;@@3pI2L=ZDe!^MSxlW0^@`BzH$M!`J^9g@5y?yPD4q4?81j zw{d%{UFn{OSDq;eU7r=pnImuKO!l0-3;{nLgNw zV?`32PtLB0XwTe+7=sX}17^NcBI8fOp#Hmt>b+IeJD?X`5+_8Z(rQ0{2nn|L2zK^_ zk=Q(9qBVX(A&S28Zl8VE19gxf&4**SaFPp+U!UU)kCPKZwP@ZxpE&Q)AnbZ1-MvSA zcBya}lWRHpVNeKZoQy~7liq1DO~e!xj~0K^TiU&cnv=w#p%7VdH)G>>D07c*tBpr$ z{UIM*TzV=hiSL|@`@(T>16_O|OF93!H^2K;ru19+$yzxbZq~2;RvKM^Fu{k(sFrqm zMlDt{$u|a9H%xpRnT;2=b~XyQ_2uR(*YzrMP}!lLE8?;7+H{=o4<}8&x&2;ie2*Uza3on;mB(1 zHS236!7ke+9$sb>4(rWY+uk#$-I+%4lZ)NiKzilL0uD1i-QUsIt;QR-D1swQ-sU2_ z()Fw+Y4=acJEBxR%L zC@L=VOZgC#cmK9napYTpV>QXjjqQ>d6g6JYeU{rVu>Z~-phS^?(nZNcPmS?PO|?>e zzM~hoQd3h9J>j~FlAn36_`j2mLTTMbx#L>^EO#q6ZV?LF%yKjrNw}hWGGx^7-~ic6hz)EZHU%%Af%7bO@Aq1UxCBd6VUs6B2m_CuUrz# zWpICH+-SWv)VpH;*j+I6{BI9I=v)0U$Z0lzGSnLhb)v6x|FOWGrIDJ$=Z!v%A_&ts;M{7JkGWz)}+Z z^SO8n*iGXoyhe(^p*RvQk5<1lDu-UK;4 ztnZ3FZ>LqI#y#)JK&5l0lDY+tw9;q6zl(-e`gQI2QNQtK#p}Pje$X-Ly<_i$SSlKJ z0RTi~w6H1)wFTURRr4E}eZ-D^=Ko>rufy8tzOZ4G8f|HdyS2DOafcRnO>ikt+)8mM zO$FED4#go5DDKb}EAAQ~#a)9#GGFNPd*5@e>-_PZ$uQZovt{jjt!+cH?qxvDt%v%* z^WB|_#m(ysNI>0mK>Pm|y67i+|K}@`|1QMEd|}r2{ykNJ=-f+=^X?$tGiJbvC7dfQ3WzY86C zxE>_q;F){$;F49F{fbvm(a8g!iwEr(wInTdC`MC@*bXhTrQc3y5b2A`{e|Wjbo9Sn zWnsmOf169cl9>J-;DDytccWCV6h_kt*Xt0#pOEir>H+`mcxBxmZqkn4Y0Zo=Q}f*c z`u=`CU%qvQ@EAW*GWeKyD*+ft=a%i^SnmH7`Qufrc|QiocxJclg@M3>r9Ky7d(|gN z{piF0et+^0li!Hp|NGycf8S3_^}le5K(qY&r3vP|yj?DbG~s!)ir+_IM4kL%SH)oW z&(G-2m^#2^f9j@>>Ei+adoJqQo^B|tE)7}`{~AwoYRXUrf60EbO*`=k$fDZWvm_kVr! zXOWcnn!Ls{rM92 zxr6a6aiMz3rcpG%fnHOywwdg;$4&cGGgs5xE)*($Z8Qbjb7&31DUe3>Mo|jr)bXlB zQ5J4POAt?{CTp-*Y<$qWq{sT>ztHOAe2`yX&Rqqc|7-2yc@xn5U+ARoqxAoN(Z&Pj z!3@5y`zM-Um#^J*3w3NYfamZzyI-wrnX&?a0k- zpy5^e=}G=`BHT$H=A)eD+*?ZJA8Fd?);I1@js0(F{iy0>my>)Oev$ESLdq2l*CE0; z1=u9~=GXppw)@{6eA%Cxg0#=|Ze;nchkI{#d(XdavP~lAId9r1sTYtwoUMRJNz`r4 z4y^(^?S^3LckSS@KbTS95G#z1$MR7<%CR*?1c^7YJm53 zsPrGmmdWal2!tHcPH11j zjr@XDadyIe1~_&N zdHbQ43d~x8)(#WAJ~gym4u9HyRyanWa#V2ojLC7ok4XPV_C><>0HE64P%blVv3$4@^}xL;*jiX|<}pxx=go?%##O=LKWc8i|y|EU$Ff-9OY2JcFob z7WDu(O^F6HBo2qK(8xH0^qnGTaQ)^V{Y1%|Soq+n%4ek_hz0fdo|sibAugB zSLu#H6}2Z?cBy#o&Q`jcUIC~=!_eZoopKq%*}3!dZ?B0Ea~v>>VZ&MW^5*vl({qH= z8)Zet!hVhl+@p@+V-ss=dDG6noj|}f_)@)y3p0#WDknNWC)SqN08ll1J)SSS?(-Cj zK0_45^)kL|nE-1XLp3QT|8_N1`}1Gv--v3svlYvZjMtGLTn=3?o?|x6=qVc_ONy0)@2j;CHCjOj0=dP%jWjjU-aH+?~6>;NhsS=Ia)yc> z@CA@z8`M1!a6unuTZx>$^!>RaHUgXkzG5?+eH4B>{Ua^~Q4Ws(drV}ExO(S4KZBVu zNWj)0FnH#?4e#sxG+QFzM#`qot>Lpyyd&(kdk&PFz)gnup}!(SqzQ<4!ExOc1eilG z;F7c028e7Zk~POJaI#99NU=43UeRahvC$4WZ>@67Ja(jg`zDP?)9v}czR^B67KEi^0C^G%uS`SOc zp@Q%F3Y6vmtq`u}aUZf#<(=4?IvU+)WugsKe|>YwH;5xx6>B0sz$Y zzA`ff&NjxxW$5lOY@lC7GVo=x>zv0Y=-?NrQg0)H1&b2Vn4bUElXJq(b#sgkqx#%$ z)kY!7WPkdUUvmlB_n1QvWV6m5o(&$ODQ_U1mS$wsF}zo|f((d*^SI|1?uZig|s+O!W-~!1Av2pR6U0wc=PRJ zj~$qkZ2)jts(cVx-R9l4e((V1L@4OjdVp$l`A&k~5M60scVuZDPOKjG_I!QcuXaSv z#y0E#{^fzJpq_8@AnL4Jg{?bI$5i?LVB5J9Vz2KD)?Fn4&fsGF?$aX<$PN{os0(_x z?%?1G{=^}R1;L)F0lArCBkv~sgvDmqTq|gZK(!uGXgEY75mVbT5%~Mve=M=?+70Vx z1D7wi7wXTWjrcKpDZL>Y3BN&Lx7hQ=T?Qfh{uB_u27vCh#CNCcs*L^s8-f7W-Y>U9 z-^%SqLMw$4=bVAXeJ~>5R>V*GJ}5i%40UQxn&I^Q2|L$^1r)zN(1^J9*o6@>65e60 z1@=%2@a7a7J%iA&5I1}*0s(znZy);@G-hmx`osz|tAgf3p=DKH==;hB!Jgo?0|4S; z!uKLU=e_G50#a8eSp9PUh@iQ3o4sb7UtQN6A?~TwR}38{Yeu1fBJb&s-WzTH=Lqq( zYv;GJS81g+@Hq942ox~aOYKmC^;)mOsC|Ebr({nBK+(zFmrpi?mY0@mUB!YitxAXt z4OJc0Cg65RGc19+>|^W;tQ5xK4P0Yk5l-1R?ZdUJ`k-93Ip94~#7*}9wlx1=+yno3 z0qk}DFE2pR{|_&~?e+hK7r-6|^y$GXLEpJ2*xIzuUff5zx!m#sq&$mcXwjp4!r)P-uTU~uSTR{aqA8%_d`uZW($zgiF)?U6TKDO2&cEw&PdR|^BUS5XDMd6;dwy8dzM#&*X;laVa zCBY#nz9nI{p*|%gVLtY$#VI9rzJ6)RVLraa#lA*q;fdP!PSVtBewV~Jy0c)eX(N<&kM9W*7) zC#^mrEybrKA}z!xt)V0=BqA+6BrLosIV3$SBE>r`JUyi-BqA)l!N}4l zEex7c66&9l?v>(;sk<>exHr5$q&O`#)hETPFQwEr#kaKN*3o}cO0j(yw9z-DDZJ3v zFC@LBG^IG%p%^1ocuHw{NqBOxLrS_&akyVYv0reBe@aAXTDVV9T2e^}=2a3_T#RXt zk3(`vNl}__NJ@%VN{PQ;Qc<#9QIfBpeR8sWm~B#hl5eOF29~7Y#Lh@Q*uclyHYC_K*wfBHALJEcZEI`o^VT{@C`3*# z(OS@p$OQ?-IQDM+zXFCGz(o zH=O830=ZY!kEe7JQ`O9&gdCHy*Ysr@_KmO#J&%#@iLua~e1ja8WLQ+X&1G1d5gEc=uZ-7P7-f@o2$ftPU57d^FnWTVvD}|DVQyp#mb`O`fx16 zu=0-Pt^0J{VZU*tl&3A|Dh~6hULl^(tvCDiM57pG-5E)SVQ}@LWY{F8BI(X7iL)7} z^INy=7P|j!s>g06q@erfC4R=|j7kDIBXLG9sXJDKT$Egmk?z>Lb?ttVE;WT$^UwLe zq_L)y>{y)pun!U`aYl=gTyjlQk7!tOBL;+oJFnapd+YxnBQ01HbPBHdw{>?qflBJ$ zfKFnZ8O9`8Vtmf^99BrqVN73FNjETvL*HSTbx_PkB$0F-z$@ z3)5=Q8J^FnP9~;Br<#&H!#^ z)xj92GrU{x^fxmSCpnmk(sai#ZTGp>ar*CJ#5tz1!x;dc)I_>ueT?+ITS5Vh-X;F| ztCwWhlkzl^Tp9bHw9OwR&ZsO{vXlTS$u(oikeFNF`^d@L8g&=Jw}?#!V)V$c_+Px_ zY8Ivy7S&_7jXJ+&l#sa4^kw|l5X||1o`y)AS4*6YNvT*N>GI!}?To{_kOOI9CBjnDYrQX33|8U9@vV|*DFZ}on1t5%8Ib`7h{ z;z`zO`VqmUrdDrn^Dt1%_^v`R>0_DkFap>7>jIdHoX)dAx4DKf;$^N3`;o=m(nFkT z9(|om18d$k_9P1u2F7nLb6KZRC#YP z*^-1h8@i~hJ~%`jH3=zPG@vZy^rJ@G1iLp8lq(->qGILyyNjo(R-9a-D(jf!{|r(w zd~k};t`d+DsmEUtFvb)n*f~@AFi%Y*VzdfV+bI6ZTjMX~xlHmtv6OjgCXpk4&wmv) zK3$=H6G;$_)3y1WEK80jyfTiZ+ozq1zLPS%;_i!I7t>@ba!Qc|Mno-2zE3S9&A*I# z@pt{1y>I^XZUBCqVAq8p;c|<3pe8%ZYqA2eTnVG7cLfJL2KuB7a>k*R&XY35U}Cz! z`(gM6(_Mf3DRKi1LwG8~Ul)HRw*(1z^O`;F3h{lsOw1FZW%Tk_k%m7_M_$+gH{Wli z_6M00#9>FyMX&Y0)Ger;!*Mg`UGP?ZCZ8-q{$&2v8JU4 zlt=D@pMWk<(Vi!qOm2psnEv?4`4C1cldShXN6swl(30u*#v}L=(O8gn5=Rm<%{|jy zK7n_=$0>^1L<{qBLAcH!K9*S`^ZS(cc-T~R`F%aK{fuGwu=zG}k>hEiSE3x5hnxni z`?-$RR%)T^k~U5k190E416<yC#i%7{=}L z^p(C%-7{6)&wF~zVl!z+k14OQp8it7!Zrddkbl0cKdWO%B0nMDsxl7_a2EelH#7Jh z%PX8DOeBSkg!UeV1ZUKGX5rtnzw??7VUtz4LRg=c-*Vd*9pz9=Z;$ErTX}0$(WkR) zF7)41*HT^G?qmthqT2p0>^O@49UMF|-i+n_63U$6*^TuiBG`D180$IH64`SZahtz) z$$n~Kjm0sjhW))0P)gPo_v$`t7!PkAM`7gN&-)Lta1zU#Hle7PF%FaA*HP)@X2)}J zVp#a#^H13CM-BO#z6{TomU*XPQ8upoYAX;+ZV1`Gx_6+x^9xlot^X*y0n6UjH|4(K z7S7*zxsQq$SaeB8k7-OuOqU5(_|Ips$nK2S>u?j`p&%UDu9tkSbZ0Q6(g zY9>hLb)keFJ{DbumN9n{p2*}Bl3a|+E~EkL<#d)=wtzAQbp+Kh9?oJQEmurs0aKFR zN-~vKuq)Tswi!CIS9hunG)eGq|K!{^NFNN`OQglRj~=Fpr2O#C_v*F2=My z451rLx<84u;F=k7UTb?3lxw@2%0IDe|6<)#+a{SM&%YAV6l3@<^y%8@C)U@Pi+yqL zw#e_lda&>ej+!st$C^cI%9Y`ee!`Zy$oz@rUSSwpsPE-RXLX~l)m4y^U%>^+$AD;cljnl55w}=1=QIV6TL>Z=@?eRq1LrB_g8;D87G$;34k$QsP$%M zFk8d~__vW45m2o3OFN5^etN{-l18l|`>nR&_h$ZigdB|-0W)p2odINdh1KkE^7k+D z;$JjzhoQVAPI4o6o=qpb4vOSDX!oH#HguBx;A}?OBBV@6Ghp%NU1f+Y7)A1;Ou=H~ktGFaR1fq3y9{J+q>kje*$*CCYzFFKV?@uPa=&l4{H5)A}D@e>lAdE4@L zUi|~Udb3<|Gw~Atj3;j)Mcad`Gr9p|pKnpKzc4d;?rdBX@8_*9@|GRCdkZ0>Rg4|N zC3p*ORYOK%59BtbiI-J#Bk|aIUKh7hyeZT4J5*p*5Q%z3pN|`I6pbs%noYS(Z0^k) zEhLxx728V9CZduzT7EN%G|$8=$c{!1|0CaiGr-;9F^c3&WK7{u;QZyDuzIpXo4mYh0P_Z6_0nf zGZ|JRs;j?l-=xuHuiu*+wCC(RX*_A%stE?y-oErEot>TQ;4b_7$YI^dTIXixx=9eS zZUWit?A$!8H-D-JHwNv2h0%M{rq)vn)@KOkX;W8YPjIWTvopB18MITYTML#1w_@%z z^`;IaHNhYNC;&4lgPFiON?_%rlC3~cA2hS5i(LhjvBfs@ig@p8mRcyy!G3FN8w!Pc zXJwWAd-sEFLo@$3xdIdy2dun zYTrwR&iCr(&V9G{=L}0y7tc$!GwY_=Dk^+8N}U(r&ZQ0uuu=yov}C*9uLuUMrZ+pN zKeixccCfMW7}zkLsxQ-N1W*HVa^e!5UVBZ2=goWh(QpT7siULA+yd0IuGx13I#iBc zldLaCn7)k@W<)rbCo{%#Pt>;Seb!T^WEB@4ZL}U@%zOYm*a_iz-r}`4?zKZA2r183 zP{jR1Uu`(~a-zMq-sEh^A8DO5pXSKr!bS~lW=c~vcJPLx*Yq+MOBbOfP~SyI<+j1* zh*nhngL(%Cxmf>oC6xlsx;~45i^6d7f*YQOZL6m#dX<5ey7We+I%K-B$@F~0_ZMr3 z5clK5>eAn`m*B8>h(0<4P^hybc@=(TTh=7UOnddcT=%(z*eaZIS;3=&eQY^vvfu7b zzVK;??7cD%CvoI>bzXX&tp4Q#;+A=VY56RG!o#%<;u%;yIK-kUex#-p_4Ix;`J@6< zz8}OT8ZIxW?+HdYO)nx4fA-LDZ4zY?8GHtEgNEiNXe7{m$2{F0U8rNo6(?6+^$I>d zD8Th{dDj)4oo@C~7+8!B4lV?6(f!o^{9;v2{Cu?>)dGB}f^*>YUAIpqjVe z^^^tG@QJghM!n{8!fG;R>(*SF;K8hUvE5^@rqjz6Uo`9CRaKW1Ckfdxc+SF1yYC_SP1py?H7z(>cl*s_NdgUvd$AU@H+)lhc-CTi*<(on?eUn6aqQN2J(EyYOxZB#%5zkFmz~kMQ{Rq2oCF$2){25ImTzsLuNWDF<2yq$@XvKLu3H&!GKS z%2AQ1Z_df;t`&EW!)S8s!UvUjW z{x0m2buGLAGeFG0Hdh{3JTNZvIdwJ$!P6~K)I0kr+)h$;Du<-iuGoy&`B63b8wJWB z>K?90M~esF8!qJ^{yul0-WVc?v|_Cjh%ByR52!|bpuqP}JGYD%sa%fS?LmsjrH&YaiTa5cA?`9#QmQO3 z(oV0UJX1>P6kaWB3l%--D=jM4pv+y}=v7$X@0Go)1C2h%X}Ij^((hR-`)W@2AD()M zU5#J00Uexs6CExZJ$P+hy&*&9YImYh){*8ZZEhbdn*dVBd4Cr}>q?p5yqVeCtvgm@afqJ#p0m5e&C%mTGNy)*f@iBWk&E3GlW%0qQIEpL0kWr6h09*)eXDge4kx3w@f-8_vXG#cXP7FJ18 zy(Ao*KE<4F(-?K|*}4U5g>K^a4MR5TSkKjXu}~;yt$d~Whr)%?F;uo~g4-*cPl({j zj}$5FtQOSSo6H$gRA6*2^mu!&lu}knhzmGBA;C{De=;$7HU6W4`!25_L&fT3flZ@0 z6V?jkZ6;0`%bY3~~_ z6zxMRFa|V_c}^E(T|8=!dG?`x`z>nv`Y{=gW=VAb==t_2>F8K&x!$;X5rqq{`oEwEHt6MEl^LHpKmxMfYEi-*hucj<=G~R5Q zw&f*|b$XLOGhNgaOD|q^?(q(WW3r{oq!};NZvSBnN0U0tB(aB|vz}szFaPg^Dqg@A zQz1A5@q9onnoWWEid&=J+Tp4Bfmtg9X?IF_7-`tdCXoDB#=y)B*R~%`Ef8%|j2}P&gkk;U?=vk8=kSRi*E%QCD0&BbCEiT5~*{|PG z0WL@pbQ9Rk#8a2V2hoGj?=*kd0Zg&EJF-lf9_Y)47<<`0%^pTY$atPTq7(coPVM|ynm{{@gI71%%w3#)l1@^d(h7(V=oba9nqk-x`aee4 zj0YE)jl99P?`+PZOC6Dlg;b0>PEw6%J&lY(cB?k$sR#k?W1nmZ8y<~?^Z4odBcY0 zH_5)9(I|0#s@Z8nv%DM?nTdMl+8xoasNVXUdR)k9X7wI0yZ47CbGk=i`fZEJVJXr6 zuct88K&XTjzzG<;zwB`WFGJSMNfv}284 zr+QdwG|-1au0#0(lP-wPOte$~j2Y+Fn)GdK7^EpP1h>-(G@b$Lap8^mS-z!l6y;eg zt65iXtvNZ+_zsLpE`nYxi>8h|i z-y1Rnl3E?K?N@q#CsIxpDzw|w#>`}DrOK3P7l!YN{HSL2+XYx09p7K)p!3%L?wOi< z(<~a7@N9!)(i|tl^IrgTCn5>%y|H(7FRD3uVz@n(_}3b;y*}P!@gMw3bILJQAo+QS zy*}F4gcMbAqRz?gyF+6LJSL7^YV`dW(J8P+DfE$LkgG?qmsUXO$KT)D<@^!0R}pcl zQrw&9LfjTz$G=^EO**FC(bZaWzc{~dj0cQ4FB(_Y%2tn+;hivyf0#NAORk2rTWWEp4X(wdDs{{cbwUTO=6K}76PFoK{c=`$MO#Ymd11_`kKj&Ueq=)^Q%P!2{AET=T=Jq&}><|-p zYH-LWT95I2XN7L$fM7e@S8iwaXjMi6k;o?fJ3xj(l`;@sd)~1_=FtjjkG+;fWix*j z*v zbmlN=-}g6$%{A2e34?AZ-SIk3 z-1)|!)5Y5@nnLN90b4YNWzD3DsMqM5dh#C?vhHvlEz*VUiawO)90YxDeQcoN6_=9Q;dq4asH^~YRW z6uO$;J!k5U0Pb<;`PlN=<-xKnx9a|%VBX*57%!C z7z@p-sf1n$E!XdgllJ`Bck~VL_kNXSWPZKSzb$gP;bf-(!1hGM>4sx0J+!%Syt}97 zUM=2{t3MFP?NI(`*~49=w~<2qpl;AU$r-ZCPz=v*ExT#s&dd<0=K;pW*dgnQL!c!4 z3~+f>B67OJXU>9+vEsp4l49X&XGoC3LVIblqBUh5r%>Q>*0^jrF5PC~n#jdCw#rc9td`BuoRU$tnllkpR(k=yX*#X%$CCm|LZylI z?y>J}+R`Gjzg2GHnmrSr+-DjO|B?bA^{k1VtVNq2UZbgWtqSkIW%PC3Xi6nVK18h2 z*t_+u$UINhu0g%zh4+26ZFb}XCgyq1of0p*M|)t7CLKv;Y00-%xX{{5Z&9TC@N=~x$V9W z4SY352n!OKMl~wLRYP0r5);W#3dSuaqNod?32eLexY;C=W|f@5@?MIBH5yJBPqYE7Ca&G zfMy15!Q#d3neR&}G`L1K6wl4sa7f=*e)MUXy4_(WR43K2&$)IF?QdAllVmkr_&nt; z8LTzn?;IJB$59dCijMM4-sTr-{&+W4Hv@iRoqT*SuPc74tBZb`Ngl>I0Rcv5ggr0L zN&UohiIRkTE)(`frIGLX8tUJ&dpkR>d}H={v2!ucjX2Ek>2um$nfHDX+kPD>djqWa zzw5SXekdqc*i|R6*WjzYSwWriHVvg9Vb$E}(K1*wdH)w!=0Mw%k?X6wb)Hi~!nhSP z*o5C zEof%VM#e0twBRJdgO8YimkHwDbq1+NQ;lx*((B@xaT;VudEi7{a*Dq@ssG15gHSbh zJ>5E|yc7E>Jhe#`!s1Qezo1I}#};_+wtJsAX_S(&ZME?CBu!dnXz`!g{L)2#9NsWs zS>!T?+BcFv2#W)KN`Z4gLG(eFC+oH9%SpZ+kp(FxV!>x%w(!`=LG$d%(siJcLR1Sp z)c0F#(5WQ%WM3~(Z&m{pF5)oOzHv8{3TZr=_}d^Ia?$ws!(+bnj%0J%n+wj3b{9#G zy5Deeo{NDwcceLoYpCA&b@ziVsluZ*QpG8E62_-2-Cx6aZe9}WeV{yn*Q#1Hd9_)O z-GvqAWmIiGT}Y>hQecukVP%{QZu_+`Y$qT^c%Eu3F#JcX6SAXW2G9TksN*ukM?sBAz<}wv5P+TitV|8d;K#=$OP*S6|T{An)TjB>QZSKhg32@7l*y zv@t-?Wre9M#7LKs-(xhD^aHj!{oCaq#@BP^W{7nSRiM`#Y18@a{Q}Taut*P|teRC) zk{gg192r(==1QM1`wESK0*if)*|dALcqe`uq7;;AlDuFU})qOP*#zkoJRpZH&P2uG+Bk^y+4?t1ZhGl`O# z`o_qp$*%~d_VgN_c!I#bHD{ZTh=ejh5ahu^MzU?)R(Rn(VH*ns%In z`Bq;7eyhN9bx2y#onJu(6XP119j1vue!`FV%Lz;Edf;8}@)*mc>8qJIL7Q(CD2kOx$c-uc##Bw1>7lcy_w-!j=*f)CW`MEs{ zQ`83!RvZOsT4@SOM!Yc7hnW%@kB7?xW4al&PmjUg9FUpG#$?c!N=IqrI%_Um*@!A) zjl51M(y~!X!sZ1IcX;$0cFF=log-vu_ACS=BN`&NIy?d&BYT?x`rmGnv{A z91Gr)P$3Y^=2AU#@}`6AJN4~$oR9O$`Pp_wDeHQ29`I>RsuPIxO3;>7m68KhQyHU^ z5xmm&!f4lZe6bV6T=>ExK=mcH1d4!2-d@*k=v+KHI~AxCIVZW?^HWf<3;>p5cf1a# z;wA*CTYf{8r#5cuzB_Ge(bL19_Iz7D9bp~YH@&R2 z>Wa+WX;A2%)T>MB=~@%cp=4q15t>TIRyZduv{mr(R#4RUt{Bn0E{`g6GHg*d?3;!; zB-hsh>Z`3H6=pmKoPbeTx*B#|tnoTzd(Q%)K`4K(#ezq^xp7EH!{oX|ByWWLLmhSV zN)NQlfjBKp_idkX9IMRvae2Kq)5ukXkMm^t@Sa5%z&Y()lA$~9PGx;B~1`6bosvnd;z`Xm3L@whK7FM*|Mp_Qhc zn6ZJZg14F3_PMDWY8RscH&E%IE9?e!E{)|Qq0=V)FP*=~_@`K5S7ina7X-0rxiZJ`=F zY3Qk~Oe@ELQ1v`BuDfTb4yTyt3gkvmIhC#L4hq$kOG>Z2L+DU;fY*ZROb!~3&n?r|H})>Q8!)!eNoY6(JIZz-+63aI-@ThpHlRHo7ea zL?0AH=i&lu2gN2d$a`OYet(zpfdWqWS-!TH_(Sa9ja;)?ZAH;`P;@e^+qi=KPDVdY#O}_duRINTJnGwZ?g8HGAAwj?Hss zH>gEyBtlKP^;z#s1+ino@kp~Ra2&URu0N0Ja`(~`VcKD_5-2c+Py#nkgk*aBYgZf% zu3+#xKGo9a+tp$GAIevgcc`QLesh%(`kME{>&-dF3;U74R*gx--OjZFbsJi};B{vC zGqe2w$FcOUHIv*Mz)oRIFvQVjaU1L|02ig z7kQjq*{qgQrHmSEXh7v>EXEMHu)H>tvtj&!+l04ezRl}lXeg-9gmd;y|K^v;J8b6r zw&bZ?vnlztW{h@obIyJ5l0}$pBNH9m%>4c!P^ZL2&Bl1uOLyXbmjX9kBfV2dg_Oh_ zO?s~h=&?;=NR1hT4p3`?|9Ilg&)|#}ioH6dXu`Hjd1kd*wrV!2fo&(~jVwvcAsYX& zPH{%tjoQB9SKHMA!6`9h@BfyCN9;3gxL;}HwvJ=CQ4 z=sDLD4|nZs8UT5=)lTZ;c&+Cs7}1(72!tL90^wQ$U>a=(&SW_o8-%W!(W1o?y* ztuCpN=&5L^s~vOWTNK>>YU^N+x=_)kM3>(Vu?v|&1WWeOJvGZd(998Se0KRt zqW^GWwt53Fv7lM>QRxf%hD?`Z@RXAe?s8JauMlyNca>;K9ojC9e*gmzj1SHNmlbA> ze`bn+U&9|etKKu@>U9&RgO-%_1_7)ucie(&grI(d3rYB*PKJMm#u@S}F2J>2l#)86 zwW^Gs4let2NHFVf_Gd&1%?m-(KUZzGF)?}JS{ z4vd`V+R>mWCvp0jkmrtf{gc+&Os}otY@aH`Ty|qW%xZF(EOs2Cta7a1HK=wX3SS%; zow_&v8DX?$7TD^kODGZ$Cvw37|Ij64ohbdsc+5fV%=lG_7U7}%14ndHw}kbE*h$Gz z#ivoP)SP}Gh!eBL4ngz?nGe`ezWPnDUXS?>H zzYy)u1U!PST};TY#+>Y^#BmLRY6%_HWDP&MO;yOGC_lVrq9 zVp+#?^YamPsjVA`_Bh8-^P z6_cChuX>AK6LKzGh|s2q!ohP^X-6UTQs#I-?sqgQ`>XvM*Rlb(q}FrO20^@*3N`ba ztxwBi6Z&?hp!L{3ZTAKSjq5GCr!1u2@95Q;?-V#o`8ata ziUcM{A!k2%kJ9w%WbZ)EACtUce573AYdF1+6R`H4{$3ocBVMEXd&X5?h^^n*p9Yib zX&{oD23ybeC?H1*a@4FIGyEy9URrS??gymen{s>)cXMkGKNL0lU>^vh^~;cF8rcnc zbqcgR@$rverL84+H*C^``y%*zd#9~!pOqHMnK0>r)q6u2K&vo z+voO_%_=}SH_zQ4wfzd$UWqoyd#(zs<`x?)jT5O>oxT3nJlES2Ti!j%-+1jBX^iXt z5Ex;!mIMIbV4oJ}GWOp7X950wpoldf21o8(>xFvsDM}D5{)GM<|F!M)FJ-kPJ;_%; zPxJ&;rp(cHE#Psc>HxQ1<7Gd*A~Oq~CSXpRA~7+^gW|hBE_DIrAl{xtark~Thx4gK z7hLa(HbmaoP`%V0xZuzQUX@H2NL~Ie+x%Q>KGLvoGn;qmZG4)Ic4a7@^%fwS7k-Ft zJE~8vwGy%EhpdQ2OMXPnGJamtILD3$PV4A%R;p${H&RP1gRyn1#ugHWQx@=ZN@Plk zY=f^p_0w+~PH+JLZej(nlj7(8K4xjj7uS`}j(Nze8C? zR!-zs_t2zpTK@YB$oE{BkfEB2fU5RAoul0c54#ARs%d^7d(<+vYSGx2C0l0!31MJn^#1I@O(|m7M!3Y9!Ln#F zb;{3A<}7V3o``gj=Exm>*R0c-`5U<+3M~1YjJpCWmIJf0ZkaBt%IZ|+T{|(dCVqGD)VKqUdtEZvpK)6O8>D6oM~SQ*(WXNCUWC&eGFg-m83bkdO&MJqW7_; z+)&V2Y?XIpcDMI!wJAtOIWk_%Ql?1o4vWC-mzS3O{f%sY=8S0$US0ci3Du$8dk1(u zu2=hezHHCF0Fa_IwUED;*3a4w=YI$C3=&}jui~6_Cw{mtGUxMB>JVb~n`bA2CpMeF zWvD2w(KZ3Wc>^)DCL^9mF%q0_X43!2{tPrh9;Z!=&oGRtplETydE7Z-7}f>Wamc3- zZi(=84(Sd*;i2x+E@PdPlPdz;2AO`B;V*K@ga%PFl-0$%`4P13LKaj8Kf~Dg*n5k& zS|?XzoxP(~fHh}PLEqshzTggify>W8q-BNW%2skG%Q=uEW(c$7w`Y=>|Ld$$3|33x z-S%Uzj}&k(a3HGv+Of%xtKdM~Yx$9HNjwP1598YQElhJO&?Q`zWFZ{X%4{`#r?PWw zMG*+hh1a(W!8i_(OzDtq3o3iZ+JZP5gdI7kD89VMov6yY+vhmxraT_1FgJ8~oHS^( z-+5I=nT%GEi0lV#Zl*zZGas_I%v^kZaNmL>f@W3xFeu=a`yXMX&6*@_#19<&-^t8R zJ?0f-dz@%fU>jD?Evl62mYC!XO-!agfB*DGX>Sz*{$4T8!``K&K7xFw2{aYBZ6Y;)-T^HG!x<{139wGGy%l&6g`-bZ{TOx+Z>~cE)RNCEk`5Zgb~JTprY# zNZLxZUyEjsdTo4Mhhcfm)kk9pv|uDEsyMtI==T)K6&9v`<6_LaX& z)9>$d(v+V=bectQ<4Lv}`=eXB6~a z%2rhbLcMbTXQ0j)c0{^GU2}R=W_I_9EoD-Dq+M`>4F$8}#-Cc(6T4tkz@s}1S$X)! zqfyN*4)>2aILo4*sYBJ_=p#ljpIOzHRAprvj=ygs#7$$+Ph_k2J$DkPBHm<6SvpDe z4V|0ZQ8B+!eNB-dHzb)vRCcPKNHn#f1u;EUL)oI(wKg_AC8<%K4jc|CI#3$sNZ2R&Hoz_81VqMPw+ zi?9~2j9$74Y{|g>-Y~*?8h^+Eb3x+YhSuStcfMUK{`1~UlC}qwE~lwSEqMerTVhh? z=Yq8#9EYl-3g+ICNdu=|dlRX4KY`Tv>9V=6_OQh^p~)hcdhXW|#rK&*h6EJ3Z$+cV z#CR2aPMQfpc zWjUVbD4&VRVNDcbjM@EUQkr~^V0>EY^kIZx^J#s!YJ@T8+}l!;&jgBBx^L9k-i?1u zdrY^GaoYb7xNOX>4Q&XL_xhMW9?}JP;Aj&Cy^Pm0N?Cm(FAx3ckh~}`;Y&ccn_Kh! zi17JMjX>0^!K$DqVXu~=Mbcbsjo#OlnLN{7u;o;@`P=-%p-mXpj<$Gx$UAZOeqI?z zD?ddSUtGdych#LetsWV)T_hp+W*%pV9%=Nkqv8DKKHJ-bw7Fv56IX^P-e-QfoiRk4 zm#>~6r}pJ4jD1Oe?|g}+tRC1v^UZAPsC)d8#Q!vxzwNiZ-+88r&@OxDfzm{^#ag() z>*^`cB!=*&8R8w2?3>2Mf;}2R4R4n4k=5<3967(2vhblGpsyrV2xoHW!N~vv8UjoQ z*Nm4--&Dce#v&?E#`QYIzkWeY4LMbwMHk;6GdX>#8l#Epg6mcVt8~X##f#_+34m;u zJ(D5#dl;crtaeh3lUzQG7e|Vt@-k`Q;lm#BvOCwV8dE?KfSbQ0(3tA_8@sPziN<<9 zF{SSMTcMUTdWhae%T6R z&qkGh*-Px(I58>sB2Jd}iuaT?gVrjpRP^0U&j-GvGQ|n|=8{5RxgkMw)PQnY_u$mi zplEL8YsCv?{G3iz|J^TY#9b$PeOTB`mu&J63BHDpRt(>;%W)7O)p368b_Nf2I1m|% zAN;T_a*0GjjZVuD}~)Fq=-fBmn<57S8B z&P@BYf}5bNVMA(^Kotu*0MwSP%^^P6(x3Jt0W`1u>-TDi!dls>SoI0J$IJq;ZKcc| z+PH3pLz{apfg4A>2050e!lBA@zH_UHQOt) z)T_e0UH#hm`RELqnmw2~J#Jl(#mkk9N!JC~@y>u*^ubY`lU0{a3Yy{~%SJ}Lg2j_A z4JN;e+qEA82K~(s+D_k~^n=%eg8a>Gwf1C}+do&8I8Tf1tw3LUqtLtUrAfq^2cGhE z*Jz8BN%#UqrBTF(CFoL~iI=}cH@0bJ?#IJsrY#*xaGR81lB!R2gSq{jYvWN zpLDY`=Ly^D804 zSfr~zJ8*tBXc)%(dAc$moa;dMVB|d<#gRiBT+SVBuF%W!Mf&uaM8uK`Wa_!3eZsW> z?_!Z;>1B$IN~?$ki3JN}py}tZvetPW4SDgFT$4h)Os5OYi!R&8(Q|@Rf*syCAs6`+ z7LMrrH8s=zN3n^#I8g`R1`46%UXEI^qc6UiAK44tm$ciBi40s=WJ|)46wRXF} zJHiQzX@}D@@p#3naMHOI?+55l9nZ1!XtOAF%xX20s>?enCV@PJx( z#9i~RHXhC;wJp={_A~q2wLF{aBfbGp(}c?MV!xselCXo#uhPcYY)MFHvpx2+x>7pX zPi(Tb0~Yfo@AJOiOZgy3b#D+dDYq%p|-LoCS=9jw@dt&D{iXf+K=;U z&qvq5MubxeW$>D$fBt*^_cfjruft!N;f4*qjvjY4uv1d!pKa)fDqssDUGFrt<31bZ1f{VCx^(TM(*Mp@6o&_frWfS2?!=(?*M7y2!0H`Z zaoA_y`>9*^`CbiB0!?N~6kU%dEAwhC%8MB2UFjb+gJ+J@WEhxaZ0WTx3YS%KsmGPW zzayQVpKw_wPLvP23fj1$*hvNEm3-FQIP}7Ov1jLOlV`3UP=@EGJ2ePwTycO5^~L_4`|EMVD1r6FnCiZW=Bm1) zfSSBqlFEsnVxW#HRmim?<4xt`0|ef_v0%SA+v+g4^h`g#tMP79AS-=mxxC+}rs~dM z`R2RZcTgxJ2bF$?y=N`#ec7lJHyvQyhTxF~PPif07oOqrvvQU+GvhwiRW z5ybtn8!=YU-l1F>s;2$eKgpEGOBH{&y$V{99iM%b3l(>rkK*gwQX^yMA#ARu6Yr6n z#8o)fRV8kXVSH1}I={f^t7VsYeV(!<7xqj7Z1(a8CMYHRwU;v6kjqvQ zczgSMgg@NKy8203lmPH6qW??8S(4!L*~H91(|vmZM`k+Njr4Bw@ErRkWiQB$SfWhI zrf-^=cT)XLIylg+T>|Bdot z3(EpK^`ZVW!+KcowkXhYvB8Z72RlX@+BSbbg&d`};>0xZYE^y3E=<~B# z3;s)A8fEa7Z(`9*PjC@3v~$)kjb1QvY_rs_8kG#}APULR+w=AfDwX%FnS5u&`Yq65 z{j+`&4tFPcBSz0QQQBDon!{#PK1XFh^E{~hisVlqy2~EHAXzQ83)kmmF+hgL@>W~3L&x)&;oULvW#%6d| zWO#XinQ2NUw<6itk+hXy0kDQ3<8)fxp=Y3TZqm1YV0`&;bZLJEdnnso(O<0oDjjxr z!@9n&#QgGv_VL}=)~ny9;DTY4Oprb6GHV*Gi70AIly~F2zb`z5hzr;zN{y5$L?^(; z+rIX|WUHR$=@^#uL&dIJ%65nf1oPk1xbRQ%% z0lQk_&mIInY3|fhTPA(r=&4EF;Y{{c8l0Fvw@Q1h>--S)bm8p;v8Uc6lc-S$0QML* zoS``_SVY42&nWXfpwW;B{_bKo?bkafoXxVuW`FykNY_tr=)oF_7i{- z;@`bH)_SMq`ZB)q*->q3jD1x72DKrO=&D(gcId}j*u+n)HXL?2TmY3S*e1-QH=wf= zHd#9*3xHM%|Io-Lt4}yG2Fxy)@G}KuOl#v8Xiw6N)AsCtbTJ>=w>nbPs1P4Dltoob zrhYB#erR5pd!(Ze;E8iL4|eqcXWsgLj;fRgNo&_hKbm$_b&LvLUQK@F6yyW>IE7gg~QRD@u7(aKNxtO38@DlyHWv$m#-b4oGV{e zvpn{V&f6%uN8m)u-qtRZW{#%AHkQ5V(y@uRHg**^&CxI|ajb7ypYzT}Cx`YYwn^q$ zHZa`ht6oQo&9Sc_dkgl;bIJBBK15zsk$7Jj(kL(MQ4^OcgYbYVYZxst`5Nz|FGI(6 z*G4VvmksyR=FM67=@boI{%^oZHrm}BMI3I7sPPv+~=@EWi?=h(a7B|-R zV1}CnDzQ%hfZdZmUgFmZw1XS?BhI8690`!!`L6z$$(Xn&KA$5SEogNI>~GiNW73Ts zPzdxrJ(3^rE9`m$iye`q&J-v$l*>M-Z)VmB*`t1@vjh}7qz1N3424AI6q+nU7NY+Q zm-3qxY6zurps{B{BM*D%o>*u;GP8|PCF<2^8N*fOG8Gh;THgaAopjEJPj6re^RJl=8Uqy7O|c{l#PQa0qlELY~St6mO)2d*qZ+YmJuR^wIbw`N;Oy zrroQ4!-O2J!uPE<1J;8z(r0zjz~GdPc)$&|zwp)ea;0HJ^t>RgK(7w<#dInkAJ3lm zO)Ie*xvn4;^}F`{2u1Xe*u{NXpsPObEB!#+0E}S-zolJQp1&*%uS+Y{GVbCb(A{k3 zz8^H%^pJYq*gvXX-}v*~M9^#^Ki&zeZ~8g{@LK6N4+(tqqUYB}!B7bc50G4_Sv2*G ziSngiKmRpgAHW@tr|W1f51|tzzI+CD%xn3L3QAtiFPuK=QbC_f>bpBTN^=lo4Kal6 z*Le~olnSmx9F;iLx}TZ-Qv52K@F2Wg^5D5~+Xuo^B%%0yA3Zu{KWg;?NdZy->3uTz z8Yt_Fh(sAC+%Ic48_8Ir7pYmbJpM^y)&JP}%cTTEXJB+}l2kYA2AN%gMYvlQ)1R#l znmoJ3GbBN`#-IFMR?d)wZZH*jsQAS4a|BA@kFmMSlWM*_UE=92!v( z-=r)}9&`-LX2V~94(s1Af8ah|*AW4@m!|8(BD7^qRf@t&7lAM1JY30@23#diH*Rob zg9Hm0nmuY3s8)i=V|V_h;>4hOup550M=)^;jBc+Je1l2L0#P+qc=NnHS`MBx*{2g> z@jU?aZ$ZRmCJ94KjJ_i+r_E8Z%8y0D?U_PI40g~2fTT$di${H^NZpitXw77DA8?a@ zU&cWvc9n1Q5wcI2c{;F7=?#eP?=JI*T$ig(j*YEO>#X}_WjX2O|0p07Wq-!8wCpZy zLAtU)Cht--Emfs0YtwR?6Z2GP;=uou%XWgLMQE~2VBI9Rv_u=!f2tdp%H7U5D z@Nu|mvQ1c=M=H}fi-`TBFg6h(y~q9zI!h%7H$n8aH)am<43k34yhL=V!rW@Q=+a4HUbxo0AB1 z>uC~6%^8U?x;%KXjLA0mfg0cn*vN7J2A+o*@~)^Yt+;~Ds?9Rn8l_kcySGZoP994i z(PrM&NZf+?D$TsHE$?Cjzw}L*;1YL9y1$eFz=@{bwX-$|c~lg51EiU3S9h_pkqr}~ zw&`_lc(vmV(=DAZIy^o+doNkWwm+01E8yw?MtH)+II*v9cO_W^ZBE1DGIxOxkfO;IJPQuG`79PT$;o zYz2N5uq*V)RyLKvrpDR@xH4emVBRY{6l(ksQoXzI`V8R+DK z3#x);d)A!SJ%O=QqVxSlJr~W2Vdw6GwXO5$d*Q1dX9QU*Q?RvE!rAiGCAsWTftu5t z$Bu?_-8*h*xcbQg0lCfd3urUkz4gnssz=hJ1ntZF*0dv&CW?>cCpN4of&gH=@`JG_ zo#<3DGfjYTVyU}_I+fK+WY~d#Oe$5F^L0LtBzZgP>Tvig`+fx{_#sEU%+4dv`qCGH z8~h^2b|V)b+bgV`GZr96r{7*L0|Q4?V%f(H_+};(7Yrj00bROp3(pu@2;>4(8fL`v zPkoIVQbYtsVuac+CmA}TCuMA)_!?{GKscv*(9?!_r;DaN;RxWjEQ4U5y6HschU{fn zh>h<|GMOdS%jt6$Q;C|?q%8|zR~*sv(^sNRf4lB-I(F^dX6El$Yk6;nlL$|CqEIJC zIx$5W&)QBP$?Q^{xBo&KJz5>F8{TOXZ?GU5U_YBclBLmHbWLG>-#)rp?7JM;oCt_p zvUVW8G>w5EcP-o}1PDgCzPZ2qCY0QC3G01lbV=;+%lqE9_AAoTjEzSXxOqPVnzK=M zw%n29deaquHv>G3jA!9X13en>B>+BTXzsKr)qa^8Mxt6jV)=~&TV__RlHO=$j`i=? z4kGNs#3p3Ycv|;7P>(0jQ&mvmebV+5h)6j5-Bz+6VVJ>ip{h0Q$^&?@yl}i)@&3N+ zsGeg78DcP zYs>Q*yEz^zeTJ)$)26${=VjRTFPOIxheZpkJ?3h4Wz`>em)ppsGyx+A&nNmgI^#De z+0h9hW4NQcc{mtQzt)^m8D5}je&<3q4QUr~sU-HimcIBwJZ7$U`LAgKZ`6IEvp2b7l4m#8b?%E?uHt^Qgi z`9xf~)AV9c+fbL%L+ep$D)m{2dSX_m@i_>{aNF8E6$2~Crk9A6{>v{5uyhvf%5 zqm8+0qsGDraLw|SxLiRciWKCKkYA@Q*w87`#lBfgb5NU4mIwHeHkW5Yx0K66i`4TQ z4=&hD;RVX&^~$o*c)fLjjlHch*YW}JawrZ{Y4OiM3(^E~Nwg&Vm-yM|YBzlwXU@sC zv!!|vv`_f@BY+NLPidmNKpf)AwoQDoJ4nybBnf|rM@H&j4!Kedog6)j++sJF3D`25 zstH`o^pvZns*t`hvHIfF1DR^OYuSqZw3f-qI)LjzvX*NL^XP-!sk0hjDs?bET@-8k zv>rJ8#3eCtHJcP<`&=fL>48bVzorS}D*+~TS!r$5jWck>HA9v*^$CGv`{gFW1G_Gpk_^^jr zoTOq0=LR#% z8;oFY)&6@}!M(k%re`tetAb(`?yO?_aN2K0uu^B&I$nqJ^Osw~0cpPoYNRivxAo^} zbM=hfU6+e41)(-5jbdJ(H*${B7tGvHrp+v2IP|HS&#~@T+liGk$jJxShmh2zw?XzT z-B2hu&KH9M_Y5iZzVcTaz^utt-%_qa{WVdH^;24J_#Sb47K2G?%FEGJC4(c{)f4|{ z0!#jh(MHW7wXq&iC7_+e(AY>oDl;}OZVwFn;&bX^9;>9`^^h=qkR|=Mo-xtRLa;2B z#*nmzF$O)KF3=5_KCvE>v&IhHBdUnJG)ltF?h8MBc=oYO;2jcXyv8L|# zvS;l$%hPy($D&_<*CNV2KNMhl1`3X?_NldPT=v7YP4=q|iCA8~UnimA!;xwcVR^-h zm!ehT<*W86^I@R}cI1Tgalh<#jz_N<(@_NO2BTlRzRNx|@$=flmF@2-r3Iw3N%Vt9 zZD%f&GOl`5syBZ$Vrw+p!$mjn&NaQioFxq#1HG3egK5&@2u_1fcx=rC^p<&pW-8$eNrQR>fMj*%8?6?kc<&nh?o`by8zA{pm$i<3Dv#>%9~skr zbNtv-^8vF*|EQe$LtupS8vdm7U8m@iSBDauH?zhw(`M#>&8;jZtR|le7@h!!TeD(% z`}%`}pdqP+CX)FrZV)zAy_2fa17J-szl>*1g?ximYnk)%hr@NJM8cn7PXNT(?4J@| zPo?H{&jR4|+oK(3c^_u0z^j@x(mJxM;nXL6)r5RZ?P0eqUxlnW>={iD-1%9%qWZR6 zw0P_-_#K__<=u0K?G^>=v|snn0XjXyH|;37!?8(Q3)|m*F3D=D2||~S3XO6^}{!<1To|p?=#NdwUo9-AcsRZAmzYK3%i2;=#BIxl3P2zx{EQv z=ybXA>nzY^IUIxV&912E$?-O4o)__Z(=}Z*j6RLh=hj4Jy&&_N&2j&m929K!=89nn zai$6SG2dqY`}_p5PcTO;*ZLM!NAjT)ZvVMZ`eri9CwmFtz%xDPmKgrBT$$;RoV+Q0 zOi9z|CDu(6=;)Aq@|D(!6!F73J$U>3#+*uiIm4(e{C6oJewudf{T&n#QO$G~>qAmJ?=u2?j^L7Gsc!|o27_0}HO4-V+r+a&I$8W*ZH z$o{lBue3nav&J?lP2AG$g`z#+lG8e?=3<|PUaH`;!b@Q())$Jdu6F8@;_`Barh>Rk zyf0l<1xkS&YJ;6_;D9ApItj%gCN|0{!g^p0EH3KT+Gsy_&r_y<5C8b^!hEu2VVy+M zbbi4pB#A~21twtvuWMAtv*4XVazB>GZ?rT^LaQ;p6*;CLWt-35{Vts;( z6G4;~$wn&emI`ug=4wsumOa97Faly z?ELxnn?4tthiujLX21FXjlaw2()=u6y7ce%*DDQA_vcn{tlETIqDpo>}<-IY7q0+p6x9_5+WI`i0V1BYrQubD*v8o;on6S9Tp0XD(4W zVN1l;T5*6nB|!{T=Wo4t-1fC?q9PH#zZ1S?7TRfkCQMMz{f!yD-enV|e zZ9?fJeXO={j-C}y@?#ddA!Y8jZIHS0I5h9dBaqLaO)k-a0DPQRtg-mt%EX(&-3d49Ku;Kmz>fwb6>QG()>`3gY= zxb@VLO`_q~I~mV`6#~VBVRVm5_QmYJ>+(F0d1a9U;m1Uy;hSVsoAH-FwCas#gwdCt z13=c3-c(QHaB>w2-lEZWTP3-|$QAWmfnOr(5zgDVDN%7>)c-``S`OqS`^Zj|`lEX% zw$+JReDb3M*bpd= zuspqwP4LezOL3m9rPFRxX~TMaLrb0leM;hMUpd~A8)PD#d zW!{2QRkf9@ow%(;cLML2ReJQTRYuxuOW3|FAiqoc9Ejd{!RG8`*GWi&|Dk4 zXvE_zr{fItdXv{jZ`)2nnmoxpA2KvZd6lY^^`?4(7~B zb@z);2Lr!VV%#?bT2@~E=H7uk>vGwMvp^z6<zDP8bg7T*8qT( z;D)vK3zjN&UxyhkP(|;evW#hYafXNR-M2|BCf>j?e?;zU@?wh*kDaK-;2Q_%*%O6o zP54O;MfS03rssA9!A9TWGJCvXt=MG=!sbY#0ww=xFG~Flq%|VR`|}~%Zgt(%ViPh= zDDLj%_5NrTtiR*83g1*w1iBIycituKN^v9Kmn+#JfvX*;eZD0XJS7mx_!b9hQmgXT zk&+kmS*)9zvIZ=Tnt1wVD4t-^=0F(*Y?k{!V}3}N`enMVj}_`%PtQmQY$ZiNb(DME zWvuebeM%oT$=j;zT29O*a6ErgO`tZdFvRx0_d4)V-n6@D{8UV#_8VS3O_VQi87sLL z({55@vha}<@cZSMaAJLMt?4{zuF7*>A_Tdqpv;+9sotEeHRF&Uc+-_Gxzcpzc(z!N z?#z+{RV7C--+K)CIcp?NQVSX%k=0P0m<9f}=Sn$C<)nvTs{_+NwJhd)MSpOXR?4V1 zk+x+&Ymq#!WRV8^UcUJid* z(=K`V3~oZ)E6~eo@Ah9%xJ3R3Oh{W<~3>Pw&my)NrJj!e{SA2LT!3!@e zvtJalG8ICLm`CmxN$-_Xf}N{>y$=DjeoPonu@SC)DSfBC0?-)nkXJY??DUkIip9Q< zVB*eGjUgm_tw_qLQ=+md?Bi8n{Pp_cuUYvp*Ox6}({Ug*#KK(jYs{zJOq!0_0I+-i zsA0(W5#bm#^Ji(Op^L!QsjAWlZ*wD%QB`$;6OoGmzPmS!{iv?W%`I(rE2g$vO0+0= z%>InF=-P5KOa-{~o@uIOFZCTY-9{o?JE2mta%Uy$s8t%eU3*zYGBMLKL?$G|NZ?*m|lFVN+r0lBg0y>iZp71Q&~xQ!yAS z#{++lz2IR%?qF3z_xQ?be@V6V-R-6v`JNy*4RHWn%^0hg@5|b&M^xqK>ek}auq&W+ z^EB7NwNu-0Lxc2b7zr=0?aCjZAmpP#euKK{`eYM-mzw&hrq-~UyoyTyA2#Tmqmf*{ z2c$af=hT#ZedW*Hw+c04ea3p+33`wb{&8zba>if3UrRQ%y*90Od?2QsH@*hwiZHWg z-8i{EhXLrKXLE18l8e@W9)hNmNR!qmN&y2`gC_TJZHkI*d3JoSe#s9foi|2?%a-ew&HUZokSot^P*qseBCuPTTmP%|m#lP4Lp7%$s!Y9C@*I(j zKC)!r^ez%d|0=3SkGAVAG&nC*3w@-$DtAdswyYC3s0WIGc*WSQ_Wn1m`G)0FtoAa> z%P!Ny7p*2oYva`dgYF&r6+oLsI|*#vT#-~38D88SqOeaj%{tj`QAR#5y_Bho%~7*w zSnUS9RMZ~z#LjOxXOJ~!_Mli9He4!#T%H@R#zng{X|XSTtb}Eo18@n4Haa;k7OHsI z?uKgVpBcwAY2a#m>Ft0w&B8S5JqQotic2wC`0ilZ`li(lhpbt=rL7%-4rnp{;N9wO zARp?)=D=1Jzd9v$(taAQ`KMQ5aQe;8$>vniCqBsK;Skj<_@( zqs2J4R?;Vb*S7L7wY4uzn3b}#v7cX-w?pD2zeXwocFQHcb=T@H-V|RN5ibj}eZ#wDEQ>9dp>|G{N@;!+bN(5o znHdIcki(UVDYx;`iYS&RtMg?8mrV8TTM*hc3a6e%2+A6oW8G_Coigv$JigTR<=aiG zIPXfmJ1u}N6>%q-cO-rz6P|xEn|%$xH}7tZEZ1R^s($ubTEwRWNPkAb!^_1$#XzKo zcz#(Z`Bh`x*;I7DQ3KR?#Iy)6EF;sr`7!C)nvEyy-#fSMBTbimo|QbPo}kJ(EXo-r zuVJ`ma&TmR!=zG8SjCGwT*VK%dR3(})^y?t5Z1k(Bw*y1Y0dfUo! zP*FX%J$n_|kIPI;V?me1pC|JLbzJ=?xeF##bduAMeS8qLc>wm9tVZfY+Pott2Ym)nz|A$e^fG(I@)unFCch9#{Z3b|L}Z`1>NJ^uy8mdUPvaGRHd4G;zZUz``-6( zt6;To!^Yguw*CBRpFAMk|~9egLGALt_u`ew($Z%UWBgMi1J)9JzI&KyBrda zK^naIahs+Qvh^Q$;FVriZ6B1H9xp`cMn6~mIDTuQ9zaheIoGX}HzCM{Rm*xpn>eIOsDwwk{X zoXuoJH=v;R)|gQP+f?AGvCR$%gt+&M?4ul`Z+0@xv<9QF_wx|coHuDhT8r^XC=C!t z0)Lg-JDnNRT<@V7bhb132j95mJSuTxI>Wuq$0}IZI@-Xo96;<8=2=G?Hiw9L%<|F= zz+@!*RBxCvsaj5E(4Ti3PM?EP^aNHr++Bx*5wHrL|Kw@YZ9|_m9ce# z>N7(iV!g0KwOO#)cd@qXW4pQBNFDr9Dhug3e=ks?uc~fpYiu76$ky!bIkgK>?+Dje zooU@|ooR3M;WcbV^oP)^5j@=i&_|51HTy?^0uBYqOt`W8xD#_g(wkBjPHTn5fGzH( zREy6W3*lwCz$~X8WtUX4O1=)1L@Z&$@O5<7xli$yC*Ug?U6pXu6k|lx zIFYqdDOV!$W|=#yeU9s45GB}t8jv`kF#pnWf+WL#4SvM;0n%FC$0bO>`{-RYwJpIh zW||CMpx|C?r?Lem7M{AMv_z>5Os?B3M-G1K3=1ULfhdqpf82*0_~m{vWQ&9u4-ph_ zF=h7a+8&%Q{E{`cHJ-3|)QXqMaB6VpL{so}PiLI1vi) zPL!o}JiRY3jP@-QkMb@;H^LA->5N>WB*s8#LEPsp7>U5|<S}E~Y-5+` z+V@HWSAn+-bmYWglZ(H1D+=wiV>C~z{5C{;OI7oXt-LM56RJ|tmbsmZ$B4o?^S5KY z)b9$8+RuJCZbU3sIUb+~VPA{X{1f0R^V-c;ah+Z5h+6!^b1EsSw zB1I5^L%XM3n1lt6tp90NJvU~841o|V82avK8tTb9U8y;S1=Ydn^N*XZ#sR-z2qUUoPzCjwZRlj-DBlcF#B3bo%n|w^2gHfjk$XA zf-=@)cK+D(epbqwnj6Dhj;Iu9*!_(pL6cWxRS{NVb5jv>a~thvtfx$zZ!6pOM-I-* zXG_FDVSL4gt?1>Euh|rO@1y9yVHuz0=+TtyG8R!-7bF<7Z(KGTi*0i;_a=!Bltc~p zdk+BL$e&szva0Ci838vzcfUDOqs;P{*p1*gAN8h;igP&SE^>udD}92xu$YdhgH98ZP7{Q7?v= zqXz9iAO&HLQLdutf9o_ZFOwDRg01zv37xSf=g;ilZCbI1E~HImudfO z_{^whNy&9f%3E0lu(c1Y=^eOYFX_FYelQnT#ig%Ed78aB~q0(g7X5hmnr$lET;u;&k&?H7h?CC%5*w(CY# z;KmZh{yB+etGId@X)l48%+0D|J#cMxOc(snV~g5-3^jLIn3yy*wMDm38EWhuq&nI= zyE@vNo5TWEw)Xap)*Mw}li~uKw3*$cUhC8sc-d><_o_63`Ei|b`608;f`Yof?Fi29 z17B~jHdv@`4t|749VlvY@b<;}MjlpARYq^rW-8t~VA_RVd)v$4Oenb69T@jv3u&X6 zNN>^@m;VA_PAr0qF{jrnr=wIJq4Bafk2r?5&+FhGNVt2`UbBZl z*d8!Y62^4B<2ZI8?y`@ZI2}(zIYk>6w83@?()}Eon_>3AR4welXlhcjW`F*4d{B2% z*VA$8KzFFMZbu)GhCz%v)3Lj+y1nR9b2E|%(wz}kf;g}4s%ZF*Y7cNU|SnhAhSo2FSC9SD>0Rhyd8^g-E5a-Ukf>iwcYE!9OUe~C?_wq(i zT?YGugMsGq%x!3q19TBqw=nJK@8Ac6L17EfQfLjVZUdURQIzEe^@Gkqp(T4wrS?#l z4g035Yk#Sw*hECub^Y~+{NK58rc~1xkG^O+=6gZfY2A$?qBG}3lY;1v--$^=iIzJyjmVZM`~1@NE=vbhD>Z0stj33diMw_MvyYJ$PW3;S@xw~1TO zB3phouRLaOFnMS~5)(A*jisTX!^bA&sOAcPzhtliNs^&KN}?P+IIV7ffA77a0fR$& z`FT-fZZ}KMfg6Ltn#RVMcfDI2B*7r5TRwD_TSjoqUmf(; zu{AUcqdu&=02=f5?*GH9^#6AJ<6R0b`@g(PlK+=?35)#x|G&IT;cs<5J-Q9xJtCwb z+*#iG#|cS~_+|;=mloyM(p85jtA;iu;Vob2Iw2Mv~Z~balSQ z+KJ87mO&lj0&CUZ&*j57*ps?S?D$E8nbcI%g1D4bW;{zubtv;I9USosxp1uT3u+xy z^%4t0jfj&m{*q=uCz1hTH4qb1506#OIV4r6key zIvT8VJ+=Z(zSz^%t9!BcKCP?K;jTeJ?Jp&2Yc4x{$}U*s8{%5JPs<m=y0AOu{&g z6D%{ijj+Cp4ESkT)jIK$A~PNQu|n>IIwn-pg;=K4lxP}|e&>E_Ojt+bU^&(;8l^;sc($5BK^u+Y&jFeRqB{k zE7)&2q*wCHexeJ8Nm78Rhv$!8fjACDNoyRo^);7)<78FzaInE%}l`hdHlW zH65eXvP~<(EX=q%44fAWy_?3N;V^tc&1Qs ze4G3|UBZF_2cx)2LEOg^Rt>wVIyEq6m9hLvW!Y#s8mLN2B3&3?k|$HROj06^vRG0= zroHxrCzAsosHS*ZMdxj%;_Hb-CS@HRPdav$=(v<3nTZ6(ULD+^{68{DUo#nar}7I} z#dH!Vu*C>JbFmO&>C$2IX~-qMlKJF8!$gOD=hG`0r7u`(k8$7NKN9&wj}`h7EAa7) z7ldE1Fn##lQ~TG^I#2JvxX<_WHG$gQZ??SHI#^vV0<}ZwDU|L$dO#P5^@yH4^u;GS zth@N1USRV4W2TbahWav@Nv@gsAcvKMbR>|&&ULpeJxa()&`C_tKguSFQ?ppzF(>4( z|0=dsW$|mI?O>p%s<&?x#qDA#B*^wkzQ<6zj=^vkxA6X3OR8s=E zByo}`sXOe1Ty#3g`X|5)Chsi?5^~0wVN!}{QL;WO5DAw!iIX_V|Hu0@9EiN}jj)hF zZcCgEgKimo#s?7uXDw{W_1q(8XO}wCgbf1*2FXfBbCGn z41?Z3&5qpybw(@spS>YxBrY^14Q{pXgdFqvr)wu9-04(P=^v7yeZds=!SyCkH@GxriL5}_JQ;fz> zV*Zg_&HUp%`#)%(YW|N|>kNYc{C^}}|EjpPf0mekSp8G?zl=^8TfJ4cCg?&_8H4JD z=6_}0%7Zb&Tk{xJamQ4;c*~uIF)9q&03N1A7{PoQW^RQ9h6hf~{>h0+vv(`4?xbWe z#uzZVFutwp)Ib7b7-x8xj)SoxrGK3Z1FR477Jns-5>Iadlw5&h^m~i;t!%53A&E+- zw+5s9b@pvB#rtox6oN|WvR7Z8qCv}va0r>L-k})si|HZ zEXb&-PS6QDGZ|H?tjAqYUh)o6`)W_^*vBwM zX@l;rCo+bwP2I&0dNI0TYWi3UIbbSc5;{jCzW#OtQQU%Zr6ES+drL5E78{b zlANgPpfl;jJ_XJzwbCI?f2OPAB1lrKHd%oY5?UnB!5*K0V29|;L#vg>#3j||(gkVR zJwO8mbl~MOXT$B>npoC1;~$F#L31!JEENr~<~Gkb!AHF3<(bwxeX)YlTU0|jrM95s zyk~cC-1)kh|BNOUFlpfw$s3E6)r>>`=sFhIGu!AhiLqCof*krZ)ABp?nu=THXNPN! znet>iit0}9=6mYQ6(%~^RZmQp(kPF;nIuX*6nL;bG`8^>(4;KL)S8QYNm3Ff+iD@H z9yMG*?-x!Syltj+T&k=d{Q2!K-(8Qq;+=`BQYLP{KpHJkZcmD>byeqLn-;dUL~Sv{ ziSPDu6UW7Hg(1rz{gTVmd*;?7?+Q@5re~h)e$hzFVtE}{;0|qJaggZaunA3Qq%L_% z7c+JVN});Mpp)gh?(-69EL_(p&T(aSHp6uj&C)ZycVUk(?WS&pg1L^+s^^#BCU ziP6R>4A95Z%}NgrVw>m#oNdFjs=u6SzSD>H^>-e7;bY?xxPHH zdD}G}c+_qS)u`pS3?n1#^@a*j4^-?t<*kn~iCy&^VoZ(29214uGAG?Jo!!q?VLYI?p-USG^JL-wjfGw6GUyzjLjY*?nCL!GntcI$vDi>%Jw;s-|1Qn!-Lc(q5R z1j0!nFR^gSNObKibgKv+vf;uqb%fj#omNvozk-;*P9^UV>JAI**uFSjy%(G0ajqiFXXO1=a21#(yR&zt+k1eA<{8$;f2i zCRFT>NnBIpT~4%%Xdb(h&#zJ!n2{)Uuhz-_Ty@p+nZ|M%4Jm~+2zSFlQTThR-cbC` zdJ}V8kKK`SPLZzs>HEaHDpd*Mx_W)1IjU@DpFw>W_uiAU&Z)dAcr^QJVh=~fWFc+8kwi683znxw!4-$-RFwZyKkC5MIa zal}nFl*}o|%xR-!kQX;=Y$xe(5HYCpq zm=whB?TLiH9H%VyRB_Kg1wYg0m{UypmV z&(L1JNUR6qhHM^f+wZ{E-k)-y&?{tWtfvXPf_g~F6xLluXV9F;A(?&0WOexe!`5Gb z#nCkV;&6-@Bm_^;1PvbCAq00_+}#Q8Y!WPZaEAav7k4MPLvV-S?k>CiE%*Jr?|IJu zJHM;0>YADE-s-OIo$BeHo;4|&e8N8Wl+pK_*os&AWRKG@BG|Y7(d71s%dgw?G| zPHPPiOPH>rv+nrE>nbNQ<$(M)-kD!)>gp-wQTgq|KXZa1#~G69 zb-$D@wwy=z;`5~H;?~~a3y-wtdn&7@B`7e7?}OF()N=Q+_h=fL zd$Tv#@UtiwxKY`}-s6w{{@E-uk^x)7*ZjbkUq;&pGlqPN7SV7o2;Rzv^>pREzs}AQ zxi{m+`pDwLcvN2cC(?XAHhga-pDo4F?tITg8W==FBgaX05mm_~CtS{5f={YW6^A7& zbxaP1E^QwaqpINo!8U$1Qj`BiwlhRq;2LtKx&2UCH-AWmImk~Y|I3-ud-AdHtT+|+ z_)ti%Q3agpNXZ%|s2rKB{a_{(=OInr=!aZOrIFMZYTG^#`7P>kqkJ+*MiN~7xfMi% zdPUhRyHN2#>Y19mdL{3+*eEowM@$kXA{0~!G0Go>c;!2N(n(n33xctp(ex>AW(6pV z!a8JTaFkDJx*!aBC$h*63waKM=vl}@ieXqPFJl`CBnz-lEi}ez^3#fL`-1&sc?y)ge`I1Qg3ZgQYIWMhom-b&5vA1AP_0A`xnN-fn zGgo1UHL71%R9YglDn@#JgM~2~+m#TjfBZ>fmDmD4P3{Ud^X*B9IgA>qm6rz1T~-~C zM3@xP3G~yTsT{Ymm>w@hdVTJN6iA(8kZH%WU~-USr1Q!BueVtS(?u%Driot#L8>uc z_8-UfAJ=pmspQ>Z%s-L0r@!d6UB}R1=PTxER9fP4G0u8bmDN&I?Km%STnl>d`ZZPq zMC4PK%LfCK(vJDxGui(3LFS!U`|eGQjg9>o8652I@9ysG0@o#N_c~c9EH&h_$}qF6 zLoGGu=V|ijc~>Ge_sgxThRbF{M;W~!5SrfX0f@B-NuTKt?cH%z$&9BsBy^3oOn#Jw+1 z8E?RqaI~U?ly_YZtv`z3y~iH1^Sfo_B2sPb2QC2YosCS4M5rXePM`eA)D z*JJ%-%wkj?CEY4}`Kghq$>zPWNqBA?d=X5?IiMAE=MJ+aB-Hx7dPdO)x6b%@UxH5j z-mk(C%fv}h)=n@lC|H^3+dMeYCU|p5y-UPil;GE_ajF_4p|n6u&0yoeXUd z^`>d8FgAneos^r~{*~92zS&U`)eMURE)$(W&;EIUtL1?>@XDdf5)#=z2T0^l%&vcu zG@+i};JI1ayL2ndrhyKwm{1u#}N& z<@6f-2jdWJC)w>mVK{>a1q1>afT*~QBg3;}Hi)W|@&H8Z;3Bc*vXd!9A9+?CqQMBi zK{yss>9}2HW!E<@Am(e0TxkKgz2~Q5J4-uZ)RFr3M@+AH6A#Q02}qT@0Vv) zEv&SUENr-oyqm-Vk`|AVIu})U$TZvl?~BDIaNwPvpMUOgRh<1c=>_l20epjdGg~b6 zQLjW8^{J(SoUck5*$>h9Sd|pp+ox04A2gEp{qX5O z5<99e$Ce!#T!-FjT;fGRrLrNnwN$&OI@?xw6JjY2w(rz>St1PL^Mg}t-=rymV_Z8) zpGQjRIRQW2!i@azS}?(x1LLtKE}dGr$$$*RNd}@zokI{I@iVcpxwTf(dA}gzD)#+P z4B79J@Czt#SwI%TW8suCFr%U#Ydbr*lLRlQBXfj{)nCDE7n~|MS-kkz>@}Ldc(F(R zDT_+t$JDH*re^(dVVcH7Wuc`Gq7L$YO9d%u)C{tOZPsJ3L~b@?1iLR7q}?nuRd^MH z<-LT3mZ7~mD*BF7&ykbl4X#0ll>OR4hh%_g7WlnX@*W!>9nHTr{X>n~kDpWVdVgK@ z;&bD_CpCi$aO{eJR_eMKi#+9L48dcXf!@3)YtP7{J-N8@sI`5%gOiHr0tG`7f~BlW zoclasD>X=#iII*`$^GU{(#BlPTk&ww{n-NmT0a!GRwEmS?sHfYY+bR|w^x%fc@pep zI<{VAoP9LzpJG`DtNvSL%BAM;7JK5{b*-p*(e~b>tUxe{LBXPT|MzI>2U+c}pn7{; zLc1pKZGQ^u58sEMn)P>eZ$g!XqGG-BKW@Wk^QKEhgN(ttp<<|FzIh*YmcaXYyv%45 z?q7}6$p5zL$A)`Z%uDwixDp(?X*6XrT~zpXpi=MFg1IrDUe^G!IofFLtjO0!D1Fv zNldBF%plD)+l;_-lLYj-7BVdeu8R4d|+=%`7g004w#gy7fe{*3AY^J4ZwSvIyW^tw>&mJGc)sd zr)_3-8Y#@At-CDhR;~+u%F=;Zd>|tM@61iQJYf1?ixcuXa*D^Z3MYZPr*REsn_(C;_0qlozgm#j#t zj95#H053~z!(}^} zh5-HezIK(H7D?B*0NgS9xTRDh@8$tZM0tfv8|Cw4`y%T1T=v=K zhwfxlrsQBOmR>8MxG$gn3u(T_Oy{2>L!rT{$<{BD7+lgJt}Rv$Hz`H@CxIh7?$E;^ zvjg(Ub9MK0dcN(7v{&6Hi8Sy}P(d(ns4%6!=bW}DDPwy3ukB?70El&VQzBC0*1#`uf+E7zuXg z;Vo`VO1oB4T>t_h@oys4m9vcv%Q|MmuOL|m0=ExiC{nVJ$ky7s3$hARvNAoraUe7W z(;SZ?X;vJEyxBh0y#qH(keuY9Mn`X{N!|-^z)NQC$X~aAcznF}VXSk1{{ofT3ry+~ zNEHjx;#M^af0!@Bhd9WAFc#xejYe)$={!h5^FsI`KM@N!KC*&b*bZ!Czx$=L{5;`J zX?(A+rtep2=&lBYzcXO8Sokf|#8IqGX#zN@?g$UQ@9>b)`JIKcp&|=))OmRb^RqpO zx+l(e!e~75@?b3ScAZ(B8v8jkDdU!>LxWp6@nk{N6fZEec)mAoknI^O&y zCemADw70q0$~`eDJ&j;)Et!CB{VV4p+%&Wa!?h>e`29*4C!kCm4dYz7BObyQwUtbj znXHZMCbOa#zrT^c&~Kw6e$A*Pg};k$)&5F4LxG4S4_#6Q zX7o3MZ`+GtK+}u~<8sT8bB{Y#&!3Of9kLaN9b8Mp7K@itr_?BLnq_LKqr$%U`(Z-%#j$quBI!xo7MX!rHg5FYxU-QXN zFCu+L;)Aim0z=`kO-K~Zh9?Qm~S77IFGHm2pe&HjA>5tq)7oxPDr}xlFXzhwwxzI5hMMt zEruxHu+=U2FvWc137f+|k6QnE+WR-Od%e=U$`E+7zr|6}Od}&()h5+>?*?62*j+67 zrgD(>uTOX80MWUwgg~%JjkJR77~Zw3#evmFx`M;Y_~PpFGupE|Q(>ha>uy;)=U1yc zH+#8Q_x5dU9W3_toOb|_*rJe(p@G<^RX^g4IHgvr!SJaeU6FpLlQ)8?9p>)>%wDerlW*n`0*U8L^y&Kig2YCFn#beS`G%6%7&@ur_1$c zB6@{&Z;1`~7!7{DW|Fgp5ZayC(w(Lcv|tkc0o>j3+= z%1yWQ-Qy7Zx~P|}-q+(Z*8Nm!Gx@pTddwt|h#KL}+Ugm~>9WqASth+GsT+18=B*?KXFl~D66BT(L#q>Ht=-IvFWissb%wI@` zSILG&V!qu4@cR1Z#e>(??`rqfFN*;JcLdkpp`5(%WhR1Gzq_Dc(W*?i?|+f*4b~NfPOvq22^Z@10UF|a^DIDuyZm_Hk-PMoKp+q87{jWWw z9{a@SBv^HM=-I^q-xqM+^LMrP`qa!X&{vl`jBfJwB~3!a0q>{hiZ7+zFUQo;O;X;ADk)vYa{PLhu zjJ$AjLXD{!lPUOiF7iq&*dfyHVSka+^6Ybarvrq}wSh&bHH8mqmDApD`_|UkYBG0p zFt5O+=s_R;|zWRGff0mX9n&*cX z{j@R76AGv*GT3#uj(MAAxO5~u2XPmTWcV*t8cFclt> zDTz6{;Wsz$cVZqSk4aByPMs|DvL#bET|87OlFB=pRi`DfP`?|Ycqf{ho9f;A4OB=DD2yuR`hYd6onwCI(n*>tXAl#H5l z4yX)%7qk}5RA|1rf-RVSt2$wY)bheNKEw11uKSci8;Pr@-a4R3Vk!cVnoEiuXkS&D zA1B%GFIeT1d8?(>sZhB1w1@aGeQTDA6TeMx<8cKcr@ zNZ_~KmT}h1*@9yiz4-Les=#fvt28XQ0(Dz{gx9WNgSD|*6^q=n2bM#np;72dM11=D z`5Tx@eIAOk#n;hh5K$L)$+WXSvovpj`c-!{at@Z{TnQ;EFG>PAwP)t+>kJ*}Kddvv z#^pC|7ZcbXh;HV~&K$aPha*(Yj+N>8p-)V09sUIr1oYWQDa9G) z^gR@Cu%D|YYY07LoJZE&SvkGxNFi;dk&_K=`7HN7*W=$Wv!RgW_TMm?4rlq=aTwER z40%{qCtdRTe(q6S(9S5cX8>x;&g=xN{U}8?DzsQS2b{9tx(FriklSyrJx{_&P27m; zIb$C7E*Q#V?jnBX! zLv8($hR8DElrmalW*W3lPd?}_C}4b1Z^x^#+*VFl&0g=|u|m|mXL()rn}JXW!8O-GOTEHCQ1KRTZRHN)Y$h_sC!LNHpa|Zj7k^0HZwk zxwnE7Vdy-hd<EowBNRh2EmP%Dr89-x)-f_aCs71IkUjevp!MTcj zx0#h9(?kRLy!}M~z>31HruJeJ6S}j zBmKX7goNFE(sHag}uI-b^K<~Ax<7w0@lj5skdF;xyE6XUwz$zo_ z(~F#*3Wlxvu0{pM?Is@fJGy%QM-!Y2vr0Pl-hR3Jru1Pma-SE{IJcSsLUIrFS1^Bf z&mq03f<2j=rF5BE#iUyHk5Y0-R(-?)Zm?)Z#M5XEDlCvhWXCc0i5fddgfv2OO1=6O zn{w2d6|Esa1Q=e$D)<(p-emv$;Q?120pQwAZt}Nhz|6kRGBORXap>zA~_T*d# zk8@;5ur!6?5o&%+I;a*4AHr0E*N!9NE2VHVeDEL&t_=qCcwmYndL?nb5yz4LEmL2< zb|+%u1ZTY4onsh#zA>PjYVgw(iU`63SL-Ya%sE>Wyk*T#VX5+$lNe`+FNl?*NCV8z zCSL?R#28$QLQ%1b6Sjd+YU9m{g)3OeX-fRYTPn~vs$C@lZ?3{hxm11`hxREjLE*C! zz6XCatODRuZ*VkcB8oM?F3#igjS^)t{>+Vv=}z#9t zDThFRhF^L#VqjvECabZL-}59~(XvCjSfwdZHnAA|6~12v-$V&zR_R4!N=ZBa!PH-l zmWB?AnYT4lR&fD)9~>wWq3u;;yQ~$*1pBdsrYp~e#&80jYT;y@4mH4Lclb&5VVt1UDu1AhG_e0bpEE7wBy@eURGJ> z%Q<{h`)`fShvboO9j`(Q*9+?(1|1($FSh5WBfdOP{Wy+Z-{aQ>lma}PU=|#15q^D}`}hS^_Y(8bw~bD><3sD{^z7`4yqMfy z>(`TFqo7OeU>^3spzhG+xF!w$Y>F@QUj6g4jB&-RiRUf;G~)^goFUys z;EmE=`p`ebZDsM@n|s}qpX}+wZof{ev(JM9rb-Y0ImpM6mGmrgiAUl zVO21)Fu=#2Ig@hHdOgns79D)jG%czW2rbL#+g5DF0hnk1PN^nIx6k%_=J)o^o?q3s z88lo}yu7LXGd7-qW^-^&Nw1?;sO*Y^eb8|H!G-lwULaq-b zoQ?gRAdc0O&XbH^tMGJPrM^s?ZZkJEFv{H~C{XxIIbG7GKCtT#)?s=bA}R@wSy=yk z&C76|FS^6?PCyoxdfKiqO4-2`Ce(YvI}}r}46dH4mP6U85YN;V0MNubmKVLv7K$fc za0n8EBB-veHY&EPMcZUN`2z;Cxj{E;ILMgi_R35?;31m5-l>S)r_@l&0)I6%5*-Cw z=PHFa4rwyMnlF>3?ZTnpG%8Py)mBPW+2Zm@6|GknqkN5)otj5>K8{W8Oc4h`=nyEc z$=OE=UAL88eQiCUw7jL~4l8+B*N3UOelJOG?j2G7OhHL0O_&(390i?D9ZBZ%R34nf z1UV)TOy;R%X5IAHhR5s)Z#q^Ofw>N2;xv5u#HB%p@l`Tzm|jeu{D;rb(~Z?bJNX~% z0|IcH=4_>{(`zsOG~@JPt0FoWT|rT4E$AtsqOr2s-`_u2fbSnLc}T9*AMn)eb~XyY zOUKUhXG;H45f9NPG2o9PF4v|29_PM5w97QUrqS(0v8tC03zgK8YCB zo5?;s$sE7gq`k=(ALk_YM2)}9z8;$3(=@bK5aj{88(`_jbaLIB15126n={76r=@ZC z4qG?U6D(Hkx+iCu4>iIL`n#J?*LjwT#)HbTa}?hfM5<+)uXNlH@X(?)M@?kc>f$Sq z8a4g`+oWH6;tHVx*O>W^l(#qb$yB_uz2!DMk*kff)>X4MXnix0XW$xdX}7S^A)e*2 zUjG{(y6JM~;_1)3(_8hoj_3SNZ~U0Dm8he8jhV|O7TVv{hQk%cij($k+A^#^uQl2? zF8(ZF`>2faQI!pSj7?mLUVh%|b^l(^+ySUb*|&SbLhL|jEg3MT{ZVONN{QkwCX!?Z zkN`Do62mtx8Er z$%L1Lv~>lBFr;nzqwvT?uj^H66gtnkEsO<2&k`Yz9NDS{55Nqw0c)U{*&uzoy&8k< zc5%7HU<3(49IyW`xBaQ_i(+Cfs!t4Q#r^?U_s?sM*${Oxa}L;=sBH%31u8M9ouLx* z0gY2>IEKWdU_BtB)s^HJf-gEa!F}kRb^tEm04jhSAYbs(G@sA*;PhuO7fHfnL+kN* zTRG^mu$Y7a4v~)Hx^IOPV|bEUd@ukXbMprY*DuFyx85ACz4)^nBd%t(0wO|6Yf6fD z>gl{W3*1)^i-Vam47x*(Wkm3%DjOzF=L8;^OW0aLZ#f~3@1B0H>f`T|3pi(=N{8QI zYZ1yt1H^Eq(_R!n)Ht)5s1#eA{~vnt5BQi6iQF4cJ`MtKG2Pqbd3CZel*aFQb;=0d z7~qj`fUX%x*wkipBb~+zH)6k-c&Aw`@aZAqq56FP6uW{6^;IqGtBHAx04OSg_0}6^ z)LT~lOIgCXF_;;5ofwSw`Gwg3BSP-515q-se5}e|37zkMPnX0!9xszUYF;s8&7O28 z4DhQ#kJ4XfA|A~fnY3uE*b-U4|Qhx*N^IcBCn2DxB%3qP&Ud?qrtU~8tgvXnaOwv_)Vdpo$oyFVCFrSs-+ zGqB!bdqHwyPYv9%P_n$JB~~jNs^5n<+pgT+enc-ng|B*d%X zH3@PwD-kBN{#)+7=O40CHurAKl*6Q=Cnd=@CE6!MQGDZ}z(2|fMbOjw=~(`)=^w9$ zb8=v6?|ASwrH$zESa)eFG%QNX17`rEqMhoE_$V5<-6~p#sp2MTlA?|Tf6JCx^G#+p z$iL>11zO{8p7@7aobO46Q#a4 zHv(5))=u%t8@DU~Lwi->gv+W`|3kbqCDt?FR{hNwiorCHW$p2plj!Tz|Iipc>Zd;y z+KU+ALYT0-J^lr1j^q*_B;k{#Y7BnXXl{RzIvsK-5V-|01nd}twTtOaZO5jcTO9{2 z8o_pSP^$C7M=GNvDe1)ZXLg0MkUE5+e7iILM*t8-t7UY%b!^0@5guYvmTQB*yY!AS zSUSFPVudTLxGGGtY<~?`IB4a7-}_nc>g!o8KX*9qCZDz)E z_z>JY((N&}6kVffcA2O<)~37akp{ko`2fT$1^u6=^4v^6t&HQd-sioLkd)+q>9KIp zgg&_$^Lt<5vQpS+;1y%#dDG;~jj0W#P*Zs})35C`Fd$*)5!zyE^%`-c%h2B^k@=4Q z2Jv?djgOqaGo^ z_?LF{fl_$)aa5MM`y_AI&kgp-nao_9n2>)E_0t6m5|_kEPjG(fH<)*VT2ZQWMH}qR z)K7wW{16ZFXAeI9Ab)=?9!4JMuAG51lK#_IGNvYj{k#7~dy?I<*9G5=$({f)(Y!GY z2#rx~6s2?myV1-9^hqcWe9kERXnKIsyysu^u}F;I^zqBrWuF+z^L-lK2 zGkV2kD-x2oh`5J^<{B=WD8EKdj@s>Jn|A^(b;wTkr_(SRP3IT9j$hC%7v(rTc?P}t zj`wX<_C@Y2QGu2TNBn$Hp+Lppp2o}&z@*sD`8%>LJ*W?XjafL;RH5^Y*wbcJ*M^j( z$ktgIq;J=hYjTu(+)+z2$irRFrIGHxq|(s9m;48E*S=dH@+`{p**_2icq_ry+w_9tAh*jf6p{(wlr=Y`AIaDp?OksRL1qTuvd6kpI_x;%k7>>=A3L=J_^OIjcrzfT5o~2%W!-j_`yHyvQbM0zAXqz(^4d80${uBP`PR(;-StW{EHv9i5Ai^b0WHMvA{(TZc0OiQoMvTEceKIy47*ur3w8KE1aQ zvFi3%mjjQFd4+<4j1P|u5r4aSX3vfq$Eefjezq44t)3rXaBX| zE)*bq+S!E@m#n$N=aCgy<_}Rq5rL>HRoPB#xVe=g`Sc1F!O9vLl~W6KW&{^cWTeN= zSgLT;h7HHV*ooAZ4E@6H-7{yycY(wBzYlD&hgh{7i2pJW2_&X?9lGojg8LqS+GHj3 z0PLDB`UK*V%T(PBIqnD{2V@ekRqoLWR+-6EM|UsW4}LiR!)Sd zOJ6mVKMwglWg#pX^z3tksZmQzYqYRDKGFllvw8-9{x|jJ!uw$UrrBj5fT$D1ZUYjH zv&l%_WD9qpLe}Rts=S7eGUm_9oSe|Vv_7f_;8v0nthGCB{zDvwh#XWX{{_0t|O`mzmg@ z$CAw&OKvrqO;C~>zUL~Yal{X*)Y`szD-u9;}$NOz_4eaeU4_a*OWmToH|yR!Q9 zP~a;#$YJ`bvZ5TNKzt{hgM1&(>5SK@3i^pd3T$|*B$U-MyiniAscP_#gSRI1Y47$Z z#bcoa-=Q~g9HmL~2fv&JAv-%&4FHrjV8xvf8}_?}GkJFE@2T>v9bb7i=`zL*0VoF> ziO0o#R}vsH+J%2)I@Qs9pLK|rmOa~NlC|T-jf3i7Ww&6p+O2t1MnY9J*gyq0Js3)I zqn}v^a6V0^*->0^J(b?FHMVQ`X87|$2Y``VI7imjbt*J#O9<^l8=8t0id-ceL-qf% z{k~S8?7A_ex$UiJ-~9SEg?*K2MKTKj`0QK;xRUN4+ycRMLoJPQc$kSSm#E=zkgQbA zt?7^_ZdHoBO~H6#xr*hB3UKrMG%O)p#j4;A&C~ye1=(A@4t3x%gf`B2+F36)YuZ^G zssNV*zZ*U5ZUW9o#*jy1{|T-IT>i6e<9~@FL&KT_Iaqm+oXww=p@BT4akk%KkTLTn z`*~X{(|n!Q+CYf1K+YZ!D8aXqnT^J z`k(J;7pR-hFk!p@K@a)edc->_M#!xFu|tezv;XrP^KPV2c3AB%(AdGq42>$ChoGqo z(y!gVZU+dDPxoG#cnF>Lj^2;?M3&LI(kWIVGczRXG)}#WX7P~;|LKX%1cR$8UdYh< zA+RFFodXb44*MmxLIL88)GUMW5?h9HRW=7zZKp}y!(oaBE~KFCG(YxCqLO^RJr#N- zF6aSLSe*Hz6GkyT_(`kDW|Qqc54(t0bIGuni?P@Y$A#xEu*3BnLdKm0z%d`;{O8_- zyq=J<^_OtHy3tDN?WdD*Ib0C#{1jd8BFAgy9N83ZXWI$rqW;bzV#tqHxetpEbs&k| zYP#Iy-@vsT5uz}C1RL0S@y&KvIAG)piq>6&Q(Wh^=m?T;sRNBSD|pSz2l=iG2{la&yU39Xu%4!;B z^4~V9M+VRU_g99P+l92C11^F0<|-zAlWg9L@{Q^jDq;$grPheXVsp+Nvkk9HbE|{) z2wAyBfm@JLP5r%*Za6RTmx@gC%mY|BP{nUaD>rZ%yjlbor$IX3Tkk}kO<#ULo2fs9 zuQIUaFJ6Y#QIuAn>_dp7yC|zvc@4;fqAUe&h{?AVu$_&6ud0sofpb2=^)d~DVuj)2 z=cJtyBEh5hDp;`K0K%UqE(p@6n2!(ASbm$?%(qmveQ_Qse=s3J!VeJRj-TF5va^M< z=7obdzpirEgNd z;Kw@gmr~D<`nMyb>>ZcU^0X;Nx735$o)2uN(F_E6=Vw0mfV>F6Kge`>Mcw!04g;ywizr&xi_z>I;dx0glbqGaUy3W{*jZSAC2yef%%WOIOC zME3mi^V=hLx;Vs+SGUV0;gF#{&2lqSp^GJ-ZQ~F)z!rJQj=$w*7lT&zn&4hfFrVr9 zJnC<}(thx_uTHE6y@eLL#WD@NQt;qBL-CxI`@p;u&(FC~N&7Qy+0XWzqAN`E9X3=91+j0dRB0AsU>Tcgr3n-*@$b_uHtzfD|!F z!JuEBUR}6?lYuIc%_PcaRrX7j3ou^{w$0M~78!0_W+xUpk5tj>_ZDsL4gy+az;p}; zY<&C7y-}xFHXJ0aZFZp?LX}m0<6f@_uZHt{pM~BkaV+p5;?!j=AG|P7AFNL|6T{fe_*R)o%bFnM z&jD^Hp9y1O%}dVL`pcK{Nmce~#ev^Cq@n{T3ah43&vdf++oVy!wB&FGB}Osg;<)Pi z7**4*?6{;E^Mg**jV@xZyxT5OZ|}Ra+cu~2bueUb90IXc3fgEL7==)G7O?Pv80KC0 zqwg6jCNK_k0@;fJ0u)rGHpPf?$+cnAO0Tn76y`LQV;uc@QzEXGX^R9bT*3<|u-8#< z)YMDNLb`(&&2C<*hjIbxxl@Cgs%;u<{UrzRpQKWH=6zI4Yco!db5VVM-rwTYvk%r; zu53pI6)Pf?*y!IRtB04I3gYLoUM27kC_J_|@-rt?2pNB|cXohiS!Prj*BOHXbRJU4 zjLn7FLEJ6U@O4ZJ8B|mc)|};{3AbeH@GY!_h+S$hl3g1L-!x zoTZkRTk}i2ykR%#pH5;iu^LFI22G65ayD2=Q1J;g7yi14*NKcUL^uZj(q{xW4MPtu zR*3SU4&12aMT?PwRKCoM@Q)ng!=IXnZvChnZ(bK{+K?C*79t%Ui^wrksI#ANNit+{bIUR{f?s3G~EfAK*8)QEVwWB%aeNSlW; z zsFQ^8cT`&P%CEi;LT?6bbDI)x2zEdFD^>z9xpQGC2!Qu&giFLI3DY92Yv!sgKO)s$ z7^7f*_G>w_EY%F(FND>~{aTa3<}H~yvm&w9@$rb+r#ot-aUd{nred~k`t_0(+^;<6 zouU+puR(D6tjJrp?&Fu?{k!jNU)q9yqTlq-pUS}U&KSzP**l@^!tDfXU|6`m zh5th#m%D3LW2DNleluHB>SGgU!WLYIGmE%iSA`_{)u@sNsSeknTCbtt*EkJvjDD0a zxan*EB!4c!h+#SO?7K%S^(D;R_gqDH8kavnCdqAvosm{{!Zq_i>o{M;mZsIYN{Lc6 zUG53C;?Bb4=WN1Yq?GyF}L~62#y+w*~;;qzpg6zow~vn;q?k?tWTI7Sxp~=>dVd zUvsIvFEHb*Wg;fRk*WLOlO+S`tX{eGc9LsKB7aMSzMm2Q;^ODVR&$mpvr8>VISo9F zzU1zW$2vf866Dpm>PXiKE{Y-}TxpLV-zQj)uu%QxHASDs2#jBv-OSj;=Y72yxz z=^C4GLubTHJ7e3OkDkhSGBKL-P$3N<#2&AqA5s=6m*o}9*gqR`9#A|GaC&8j{|1Bn zXjDes(LOp$Qu!ZJUp-gO>To!P^WO&>q=Op^TxW%dt?fm{h)XKKo|^yOTwwZWg@1x! zMrLs0&AX<2;jbmHVV>TjG|ol0rjPlC*#Cl?5Gk8aMpVuHVf;o6f(Hk4rhK+1L-)q^ z2G^9WFdteswvh4mpNl`3Btw*&+CR;X#%KO0tp2V5s^GPh0&d=SlZrDDu$qo&^yzuyo+AEylZ`VMl8su6vxAeF z%86|STL;uuYmbTodId#kRJcll)p6F-+D}M78REWZzJ1?$Ym}<31+JKzxTj|t8f&CuijhN#>rjIR zck3OU7oDo6N*QPs(9#Ht--}>1v8@teItjoISgbq|sQ1k2y`$#t#{XcDo^N7K2^`hF z|M3z=(RUWTWiDl`dubvd$ey%6`tek2*F2{+?Nu++jkHQ23G{|Ur*%G-lLM~~3t zSE6uJN4KbOH2a`NMi2o2ZvLD-{VY~hO`sWlh|$)$d5ddz(tWsK<#~7&lTKbxqn2bI?h*bFku*94O%aP{NM;F@j_9%RS13a{V+6Dn8nh+y>Y? z8q9oQrMLORn)zC6$p_%-hhZTHe(bAdn`|%cULxg_*wgCl@YI5?_umDVJVn6q@3@{? z!L=*ePp5HH!5qFh7a_?|V2$?OUIX`+S#73NO%2&Ue1I~{pOx{=7y4&m-1f+W2UwLBA5C{4x(gsuhE>^Z^s#2)O`1ft_ zj9Qk{wnk=fom~ELfah@xiG<;?KX9^s8ua7@YUbaclF8%0AwCJNg2f)<-&3Mbd%JBz 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
    3D_Bnc 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⪻?_0LBrU|xlA~MQj+m4CQ<>Z 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%0Dx-_jU< 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 FH~>u_0MY;e literal 0 HcmV?d00001 diff --git a/conda_installation/load_cerise.bash b/conda_installation/load_cerise.bash index 5d5bb83c..3a10f3f6 100755 --- a/conda_installation/load_cerise.bash +++ b/conda_installation/load_cerise.bash @@ -1,13 +1,17 @@ #!/bin/bash prefix=$1 +local_gribr=$2 + if [[ -z $prefix ]]; then - conda env create --file environment-cerise.yml + conda env create --file environment-cerise${local_gribr}.yml else - conda env create --file environment-cerise.yml --prefix $prefix + conda env create --file environment-cerise${local_gribr}.yml --prefix $prefix fi conda activate condaCerise -R -e "options(timeout = 600) ; install.packages('CSTools', repos='https://ftp.cixug.es/CRAN/')" +[[ -n ${local_gribr} ]] && module load ecCodes -#conda env export > environment-cerise.yml +R -e "options(timeout = 600) ; install.packages('CSTools', repos='https://ftp.cixug.es/CRAN/')" +[[ -n ${local_gribr} ]] && R -e "options(timeout = 600) ; install.packages('conda_installation/gribr_1.2.5.tar.gz', repos = NULL)" +#conda env export > environment-cerise${local_gribr}.yml -- GitLab From 359b8ae01f78118cd34539a50d3a13aa22fa77ea Mon Sep 17 00:00:00 2001 From: vagudets Date: Wed, 14 Jun 2023 10:45:19 +0200 Subject: [PATCH 170/388] Add the option to use different projections and choose between multi-panel and single-panel in the Visualization module --- MODULES | 16 +- .../tas-tos_scorecards_data_loading.R | 0 {modules => example_scripts}/test_decadal.R | 0 {modules => example_scripts}/test_seasonal.R | 3 +- modules/Visualization/R/get_proj_code.R | 22 + modules/Visualization/R/plot_ensemble_mean.R | 125 ++++- .../R/plot_most_likely_terciles_map.R | 95 +++- modules/Visualization/R/plot_skill_metrics.R | 145 +++-- modules/Visualization/R/tmp/PlotRobinson.R | 524 ++++++++++++++++++ modules/Visualization/Visualization.R | 3 + .../atomic_recipes/recipe_system5c3s-tas.yml | 11 +- .../atomic_recipes/recipe_system7c3s-tas.yml | 16 +- recipes/atomic_recipes/recipe_tas_global.yml | 57 ++ tests/recipes/recipe-decadal_monthly_1.yml | 2 + tests/recipes/recipe-decadal_monthly_2.yml | 2 + tests/recipes/recipe-seasonal_monthly_1.yml | 2 + tools/check_recipe.R | 19 +- tools/libs.R | 23 +- 18 files changed, 935 insertions(+), 130 deletions(-) rename tas-tos_scorecards_data_loading.R => example_scripts/tas-tos_scorecards_data_loading.R (100%) rename {modules => example_scripts}/test_decadal.R (100%) rename {modules => example_scripts}/test_seasonal.R (89%) create mode 100644 modules/Visualization/R/get_proj_code.R create mode 100644 modules/Visualization/R/tmp/PlotRobinson.R create mode 100644 recipes/atomic_recipes/recipe_tas_global.yml diff --git a/MODULES b/MODULES index ff2a2a34..20d77dcf 100644 --- a/MODULES +++ b/MODULES @@ -3,15 +3,7 @@ # WARNING: CDO HAS TO BE ON VERSION 1.9.4 # (If not, conflicts with weekly means computation could appear) -if [[ $BSC_MACHINE == "power" ]]; then - - module unuse /apps/modules/modulefiles/applications - module use /gpfs/projects/bsc32/software/rhel/7.4/ppc64le/POWER9/modules/all/ - - module load CDO/1.9.4-foss-2018b - module load R/3.6.1-foss-2018b - -elif [[ $BSC_MACHINE == "nord3v2" ]]; then +if [[ $BSC_MACHINE == "nord3v2" ]]; then module use /gpfs/projects/bsc32/software/suselinux/11/modules/all module unuse /apps/modules/modulefiles/applications /apps/modules/modulefiles/compilers /apps/modules/modulefiles/tools /apps/modules/modulefiles/libraries /apps/modules/modulefiles/environment @@ -19,11 +11,17 @@ elif [[ $BSC_MACHINE == "nord3v2" ]]; then module load CDO/1.9.8-foss-2019b module load R/4.1.2-foss-2019b module load OpenMPI/4.0.5-GCC-8.3.0-nord3-v2 + module load GEOS + module load GDAL + module load PROJ else module load CDO/1.9.8-foss-2015a module load R/4.1.2-foss-2015a-bare + module load GEOS + module load GDAL + module load PROJ fi diff --git a/tas-tos_scorecards_data_loading.R b/example_scripts/tas-tos_scorecards_data_loading.R similarity index 100% rename from tas-tos_scorecards_data_loading.R rename to example_scripts/tas-tos_scorecards_data_loading.R diff --git a/modules/test_decadal.R b/example_scripts/test_decadal.R similarity index 100% rename from modules/test_decadal.R rename to example_scripts/test_decadal.R diff --git a/modules/test_seasonal.R b/example_scripts/test_seasonal.R similarity index 89% rename from modules/test_seasonal.R rename to example_scripts/test_seasonal.R index 575585db..1afb9549 100644 --- a/modules/test_seasonal.R +++ b/example_scripts/test_seasonal.R @@ -22,5 +22,4 @@ probabilities <- compute_probabilities(recipe, data) ## TODO: Fix plotting # save_data(recipe, data, skill_metrics, probabilities) # Plot data -# plot_data(recipe, calibrated_data, skill_metrics, probabilities, -# significance = T) +plot_data(recipe, data, skill_metrics, probabilities, significance = T) diff --git a/modules/Visualization/R/get_proj_code.R b/modules/Visualization/R/get_proj_code.R new file mode 100644 index 00000000..ba040c00 --- /dev/null +++ b/modules/Visualization/R/get_proj_code.R @@ -0,0 +1,22 @@ +# This function returns the crs code for the projection indicated in +# 'proj_name' depending on the version of GDAL and proj.4, to be used +# in the PlotRobinson() function + +get_proj_code <- function(proj_name) { + # Define list with the grs codes for each projection + code_list <- list(robinson = c(54030, "ESRI:53030"), + stereographic = c(3995, "EPSG:3995"), + lambert_europe = c(102014, paste("+proj=lcc +lat_0=30", + "+lon_0=10 +lat_1=43", + "+lat_2=62 +x_0=0 +y_0=0", + "+ellps=intl +units=m", + "+no_defs +type=crs"))) + # Get crs code version depending on GDAL and PROJ version + if ((sf_extSoftVersion()[['GDAL']] < "3.0.0") && + (sf_extSoftVersion()[['PROJ']] < "6.0.0")) { + proj_code <- as.integer(code_list[[proj_name]][1]) + } else { + proj_code <- code_list[[proj_name]][2] + } + return(proj_code) +} diff --git a/modules/Visualization/R/plot_ensemble_mean.R b/modules/Visualization/R/plot_ensemble_mean.R index e3d75138..3263076d 100644 --- a/modules/Visualization/R/plot_ensemble_mean.R +++ b/modules/Visualization/R/plot_ensemble_mean.R @@ -12,12 +12,22 @@ plot_ensemble_mean <- function(recipe, fcst, outdir) { system_name <- archive$System[[recipe$Analysis$Datasets$System$name]]$name start_date <- paste0(recipe$Analysis$Time$fcst_year, recipe$Analysis$Time$sdate) + init_month <- as.numeric(substr(recipe$Analysis$Time$sdate, + start = 1, stop = 2)) + if (!is.null(recipe$Analysis$Workflow$Visualization$projection)) { + projection <- tolower(recipe$Analysis$Workflow$Visualization$projection) + } else { + projection <- "cylindrical_equidistant" + } + # Compute ensemble mean ensemble_mean <- s2dv::MeanDims(fcst$data, 'ensemble') # Loop over variable dimension for (var in 1:fcst$dims[['var']]) { variable <- fcst$attrs$Variable$varName[[var]] + var_long_name <- fcst$attrs$Variable$metadata[[variable]]$long_name units <- fcst$attrs$Variable$metadata[[variable]]$units + # Subset ensemble mean by variable var_ens_mean <- ClimProjDiags::Subset(ensemble_mean, along = c("dat", "var", "sday", "sweek"), @@ -36,10 +46,8 @@ plot_ensemble_mean <- function(recipe, fcst, outdir) { palette = "RdBu" rev = T } - # Define brks, centered on in the case of anomalies - ## - if (grepl("anomaly", - fcst$attrs$Variable$metadata[[variable]]$long_name)) { + # Define brks, centered around zero in the case of anomalies + if (grepl("anomaly", var_long_name)) { variable <- paste(variable, "anomaly") max_value <- max(abs(var_ens_mean)) ugly_intervals <- seq(-max_value, max_value, max_value/20) @@ -51,31 +59,94 @@ plot_ensemble_mean <- function(recipe, fcst, outdir) { options(bitmapType = "cairo") for (i_syear in start_date) { - # Define name of output file and titles - i_var_ens_mean <- var_ens_mean[which(start_date == i_syear), , , ] - outfile <- paste0(outdir[[var]], "forecast_ensemble_mean-", i_syear, ".png") - toptitle <- paste("Forecast Ensemble Mean -", variable, "-", system_name, - "- Initialization:", i_syear) + if (length(start_date) == 1) { + i_var_ens_mean <- var_ens_mean[which(start_date == i_syear), , , ] + outfile <- paste0(outdir[[var]], "forecast_ensemble_mean-", start_date) + } else { + i_var_ens_mean <- var_ens_mean[which(start_date == i_syear), , , ] + outfile <- paste0(outdir[[var]], "forecast_ensemble_mean-", i_syear) + } + toptitle <- paste0(system_name, " / ", str_to_title(var_long_name), + "\n", "Forecast Ensemble Mean / ", "Init.: ", i_syear) months <- lubridate::month(fcst$attrs$Dates[1, 1, which(start_date == i_syear), ], label = T, abb = F) - titles <- as.vector(months) - # Plots - PlotLayout(PlotEquiMap, c('longitude', 'latitude'), - i_var_ens_mean, longitude, latitude, - filled.continents = F, - toptitle = toptitle, - title_scale = 0.6, - titles = titles, - units = units, - cols = cols, - brks = brks, - fileout = outfile, - bar_label_digits = 4, - bar_extra_margin = rep(0.7, 4), - bar_label_scale = 1.5, - axes_label_scale = 1.3) + + if (recipe$Analysis$Workflow$Visualization$multi_panel) { + # Define name of output file and titles + titles <- as.vector(months) + # Plots + PlotLayout(PlotEquiMap, c('longitude', 'latitude'), + i_var_ens_mean, longitude, latitude, + filled.continents = F, + toptitle = toptitle, + title_scale = 0.7, + subtitle_scale = 0.8, + subtitle_margin_scale = 2, + titles = titles, + units = units, + cols = cols, + brks = brks, + fileout = paste0(outfile, ".png"), + bar_label_digits = 4, + extra_margin = rep(1, 4), + bar_label_scale = 1.5, + axes_label_scale = 1.1) + } else { + # Define function and parameters depending on projection + if (projection == 'cylindrical_equidistant') { + fun <- PlotEquiMap + base_args <- list(var = NULL, dots = NULL, + lon = longitude, lat = latitude, + dot_symbol = 20, title_scale = 0.6, + filled.continents = F, brks = brks, cols = cols, + bar_label_digits = 4, bar_label_scale = 1.5, + axes_label_scale = 1) + } else { + fun <- PlotRobinson + common_projections <- c("robinson", "stereographic", "lambert_europe") + if (projection %in% common_projections) { + target_proj <- get_proj_code(projection) + } else { + target_proj <- projection + } + base_args <- list(data = NULL, mask = NULL, + lon = longitude, lat = latitude, + lon_dim = 'longitude', lat_dim = 'latitude', + target_proj = target_proj, legend = 's2dv', + style = 'point', brks = brks, cols = cols) + } + # Loop over forecast times + for (i in 1:length(months)) { + # Get forecast time label + forecast_time <- match(months[i], month.name) - init_month + 1 + if (forecast_time < 1) { + forecast_time <- forecast_time + 12 + } + forecast_time <- sprintf("%02d", forecast_time) + # Define plot title + toptitle <- paste(system_name, "/", + str_to_title(var_long_name), + "\n", "Forecast Ensemble Mean /", months[i]) + # Define caption + if (identical(fun, PlotRobinson)) { + ## TODO: Customize technical details + base_args[['caption']] <- + paste0("Nominal start date: ", start_date, "\n", + "Forecast month: ", sprintf("%02d", i), "\n", + "Reference: ", recipe$Analysis$Datasets$Reference) + } + # Modify base arguments + base_args[[1]] <- i_var_ens_mean[i, , ] + fileout <- paste0(outfile, "_ft", sprintf("%02d", i), ".png") + # Plot + do.call(fun, + args = c(base_args, + list(toptitle = toptitle, + fileout = fileout))) + } + } } - info(recipe$Run$logger, - "##### FCST ENSEMBLE MEAN PLOT SAVED TO OUTPUT DIRECTORY #####") } + info(recipe$Run$logger, + "##### SKILL METRIC PLOTS SAVED TO OUTPUT DIRECTORY #####") } diff --git a/modules/Visualization/R/plot_most_likely_terciles_map.R b/modules/Visualization/R/plot_most_likely_terciles_map.R index f912e249..ec3fb392 100644 --- a/modules/Visualization/R/plot_most_likely_terciles_map.R +++ b/modules/Visualization/R/plot_most_likely_terciles_map.R @@ -14,9 +14,10 @@ plot_most_likely_terciles <- function(recipe, longitude <- fcst$coords$lon archive <- get_archive(recipe) system_name <- archive$System[[recipe$Analysis$Datasets$System$name]]$name - variable <- recipe$Analysis$Variables$name start_date <- paste0(recipe$Analysis$Time$fcst_year, recipe$Analysis$Time$sdate) + init_month <- as.numeric(substr(recipe$Analysis$Time$sdate, + start = 1, stop = 2)) # Retrieve and rearrange probability bins for the forecast if (is.null(probabilities$probs_fcst$prob_b33) || @@ -37,6 +38,7 @@ plot_most_likely_terciles <- function(recipe, # Drop extra dims, add time dim if missing: for (var in 1:fcst$dims[['var']]) { variable <- fcst$attrs$Variable$varName[[var]] + var_long_name <- fcst$attrs$Variable$metadata[[variable]]$long_name var_probs <- ClimProjDiags::Subset(probs_fcst, along = c("var"), indices = var, @@ -47,35 +49,72 @@ plot_most_likely_terciles <- function(recipe, for (i_syear in start_date) { # Define name of output file and titles i_var_probs <- var_probs[which(start_date == i_syear), , , , ] - outfile <- paste0(outdir[[var]], "forecast_most_likely_tercile-", - i_syear, ".png") - toptitle <- paste("Most Likely Tercile -", variable, "-", system_name, "-", - "Initialization:", i_syear) + outfile <- paste0(outdir[[var]], "forecast_most_likely_tercile-", i_syear) + browser() + toptitle <- paste0(system_name, " / ", str_to_title(var_long_name), + "\n", "Most Likely Tercile / Initialization: ", + i_syear) months <- lubridate::month(fcst$attrs$Dates[1, 1, which(start_date == i_syear), ], label = T, abb = F) - ## TODO: Ensure this works for daily and sub-daily cases - titles <- as.vector(months) - # Plots - ## NOTE: PlotLayout() and PlotMostLikelyQuantileMap() are still being worked - ## on. - suppressWarnings( - PlotLayout(PlotMostLikelyQuantileMap, c('bin', 'longitude', 'latitude'), - cat_dim = 'bin', - i_var_probs, longitude, latitude, - coast_width = 1.5, - title_scale = 0.6, - legend_scale = 0.8, #cex_bar_titles = 0.6, - toptitle = toptitle, - titles = titles, - fileout = outfile, - bar_label_digits = 2, - bar_scale = rep(0.7, 4), - bar_label_scale = 1.2, - axes_label_scale = 1.3, - triangle_ends = c(F, F), width = 11, height = 8) - ) + years <- lubridate::year(fcst$attrs$Dates[1, 1, which(start_date == i_syear), ]) + if (recipe$Analysis$Workflow$Visualization$multi_panel) { + ## TODO: Ensure this works for daily and sub-daily cases + titles <- as.vector(months) + # Plots + ## NOTE: PlotLayout() and PlotMostLikelyQuantileMap() are still being worked + ## on. + suppressWarnings( + PlotLayout(PlotMostLikelyQuantileMap, c('bin', 'longitude', 'latitude'), + cat_dim = 'bin', + i_var_probs, longitude, latitude, + coast_width = 1.5, + title_scale = 0.6, + title_margin_scale = 0.7, + subtitle_scale = 1, + legend_scale = 0.8, #cex_bar_titles = 0.6, + toptitle = toptitle, + titles = titles, + fileout = paste0(outfile, ".png"), + bar_label_digits = 2, + bar_scale = rep(0.7, 4), + extra_margin = rep(1, 4), + bar_label_scale = 1.2, + axes_label_scale = 1.1, + triangle_ends = c(F, F)) # , width = 11, height = 8) + ) + } else { + for (i in 1:length(months)) { + # Get forecast time label + forecast_time <- match(months[i], month.name) - init_month + 1 + if (forecast_time < 1) { + forecast_time <- forecast_time + 12 + } + forecast_time <- sprintf("%02d", forecast_time) + # Define plot title + toptitle <- paste0(system_name, " / ", + str_to_title(var_long_name), + "\n", "Most Likely Tercile / ", + months[i], " ", years[i], + " (Init.: ", i_syear, ")") + # Plot + fileout <- paste0(outfile, "_ft", forecast_time, ".png") + PlotMostLikelyQuantileMap(cat_dim = 'bin', + probs = i_var_probs[i, , , ], + lon = longitude, lat = latitude, + coast_width = 1.5, + title_scale = 1, + legend_scale = 0.8, + cex_bar_titles = 0.9, + toptitle = toptitle, + fileout = fileout, + bar_label_digits = 2, + bar_label_scale = 0.7, + axes_label_scale = 1.1, + triangle_ends = c(F, F) , width = 10, height = 8) + } + } } - info(recipe$Run$logger, - "##### MOST LIKELY TERCILE PLOT SAVED TO OUTPUT DIRECTORY #####") } + info(recipe$Run$logger, + "##### MOST LIKELY TERCILE PLOTS SAVED TO OUTPUT DIRECTORY #####") } diff --git a/modules/Visualization/R/plot_skill_metrics.R b/modules/Visualization/R/plot_skill_metrics.R index e62496f6..834cc8cc 100644 --- a/modules/Visualization/R/plot_skill_metrics.R +++ b/modules/Visualization/R/plot_skill_metrics.R @@ -1,3 +1,5 @@ +library(stringr) + plot_skill_metrics <- function(recipe, data_cube, skill_metrics, outdir, significance = F) { # recipe: Auto-S2S recipe @@ -7,7 +9,6 @@ plot_skill_metrics <- function(recipe, data_cube, skill_metrics, # outdir: output directory # significance: T/F, whether to display the significance dots in the plots - ## TODO: OPTION for CERISE: Using PuOr # Abort if frequency is daily if (recipe$Analysis$Variables$freq == "daily_mean") { error(recipe$Run$logger, "Visualization functions not yet implemented @@ -29,9 +30,13 @@ plot_skill_metrics <- function(recipe, data_cube, skill_metrics, start = 1, stop = 2)) month_label <- tolower(month.name[init_month]) month_abbreviation <- month.abb[init_month] + if (!is.null(recipe$Analysis$Workflow$Visualization$projection)) { + projection <- tolower(recipe$Analysis$Workflow$Visualization$projection) + } else { + projection <- "cylindrical_equidistant" + } # Define color palette and number of breaks according to output format - ## TODO: Make separate function if (tolower(recipe$Analysis$Output_format) %in% c("scorecards", "cerise")) { diverging_palette <- "purpleorange" sequential_palette <- "Oranges" @@ -45,14 +50,12 @@ plot_skill_metrics <- function(recipe, data_cube, skill_metrics, "enscorr", "rpss_specs", "bss90_specs", "bss10_specs", "enscorr_specs", "rmsss") scores <- c("rps", "frps", "crps", "frps_specs") - # Assign colorbar to each metric type - ## TODO: Triangle ends + # Loop over variables and assign colorbar and plot parameters to each metric for (var in 1:data_cube$dims[['var']]) { var_skill <- lapply(skill_metrics, function(x) { ClimProjDiags::Subset(x, along = 'var', indices = var, drop = 'selected')}) - for (name in c(skill_scores, scores, "mean_bias", "enssprerr")) { if (name %in% names(skill_metrics)) { # Define plot characteristics and metric name to display in plot @@ -122,7 +125,7 @@ plot_skill_metrics <- function(recipe, data_cube, skill_metrics, # Split skill significance into list of lists, along the time dimension # This allows for plotting the significance dots correctly. skill_significance <- ClimProjDiags::ArrayToList(skill_significance, - dim = 'time', + dim = "time", level = "sublist", names = "dots") } else { @@ -130,40 +133,112 @@ plot_skill_metrics <- function(recipe, data_cube, skill_metrics, } # Define output file name and titles if (tolower(recipe$Analysis$Horizon) == "seasonal") { - outfile <- paste0(outdir[var], name, "-", month_label, ".png") + outfile <- paste0(outdir[var], name, "-", month_label) } else { - outfile <- paste0(outdir[var], name, ".png") + outfile <- paste0(outdir[var], name) } - toptitle <- paste(display_name, "-", data_cube$attrs$Variable$varName[var], - "-", system_name, "-", month_abbreviation, - hcst_period) + # Get months months <- unique(lubridate::month(data_cube$attrs$Dates, label = T, abb = F)) - titles <- as.vector(months) - # Plot - suppressWarnings( - PlotLayout(PlotEquiMap, c('longitude', 'latitude'), - asplit(skill, MARGIN=1), # Splitting array into a list - longitude, latitude, - special_args = skill_significance, - dot_symbol = 20, - toptitle = toptitle, - title_scale = 0.6, - titles = titles, - filled.continents=F, - brks = brks, - cols = cols, - col_inf = col_inf, - col_sup = col_sup, - fileout = outfile, - bar_label_digits = 3, - bar_extra_margin = rep(0.9, 4), - bar_label_scale = 1.5, - axes_label_scale = 1.3) - ) + # Get variable name and long name + var_name <- data_cube$attrs$Variable$varName[[var]] + var_long_name <- data_cube$attrs$Variable$metadata[[var_name]]$long_name + + # Multi-panel or single-panel plots + if (recipe$Analysis$Workflow$Visualization$multi_panel) { + # Define titles + toptitle <- paste0(system_name, " / ", str_to_title(var_long_name), + "\n", display_name, " / ", hcst_period) + titles <- as.vector(months) + ## TODO: Combine PlotLayout with PlotRobinson? + suppressWarnings( + PlotLayout(PlotEquiMap, c('longitude', 'latitude'), + asplit(skill, MARGIN=1), # Splitting array into a list + longitude, latitude, + special_args = skill_significance, + dot_symbol = 20, + toptitle = toptitle, + title_scale = 0.6, + titles = titles, + filled.continents = F, + brks = brks, + cols = cols, + col_inf = col_inf, + col_sup = col_sup, + fileout = paste0(outfile, ".png"), + bar_label_digits = 3, + bar_extra_margin = rep(0.9, 4), + extra_margin = rep(1, 4), + bar_label_scale = 1.5, + axes_label_scale = 1.3) + ) + } else { + # Define function and parameters depending on projection + if (projection == 'cylindrical_equidistant') { + fun <- PlotEquiMap + base_args <- list(var = NULL, dots = NULL, + lon = longitude, lat = latitude, + dot_symbol = 20, title_scale = 0.6, + filled.continents = F, brks = brks, cols = cols, + col_inf = col_inf, col_sup = col_sup, + bar_label_digits = 3, bar_label_scale = 1.5, + axes_label_scale = 1) + } else { + fun <- PlotRobinson + common_projections <- c("robinson", "stereographic", "lambert_europe") + if (projection %in% common_projections) { + target_proj <- get_proj_code(projection) + } else { + target_proj <- projection + } + base_args <- list(data = NULL, mask = NULL, + lon = longitude, lat = latitude, + lon_dim = 'longitude', lat_dim = 'latitude', + target_proj = target_proj, legend = 's2dv', + style = 'point', brks = brks, cols = cols, + col_inf = col_inf, col_sup = col_sup) + } + # Loop over forecast times + for (i in 1:dim(skill)[['time']]) { + # Get forecast time label + forecast_time <- match(months[i], month.name) - init_month + 1 + if (forecast_time < 1) { + forecast_time <- forecast_time + 12 + } + forecast_time <- sprintf("%02d", forecast_time) + # Define plot title + toptitle <- paste(system_name, "/", + str_to_title(var_long_name), + "\n", display_name, "/", months[i], "/", + hcst_period) + # Modify base arguments + base_args[[1]] <- skill[i, , ] + if (!is.null(skill_significance)) { + base_args[[2]] <- skill_significance[[i]][[1]] + significance_caption <- "alpha = 0.05" + } else { + significance_caption <- NULL + } + if (identical(fun, PlotRobinson)) { + ## TODO: Customize alpha and other technical details depending on the metric + base_args[['caption']] <- + paste0("Nominal start date: ", + "1st of ", str_to_title(month_label), "\n", + "Forecast month: ", forecast_time, "\n", + "Reference: ", recipe$Analysis$Datasets$Reference, "\n", + significance_caption) + } + fileout <- paste0(outfile, "_ft", forecast_time, ".png") + # Plot + do.call(fun, + args = c(base_args, + list(toptitle = toptitle, + fileout = fileout))) + } + } } } - info(recipe$Run$logger, - "##### SKILL METRIC PLOTS SAVED TO OUTPUT DIRECTORY #####") } + info(recipe$Run$logger, + "##### SKILL METRIC PLOTS SAVED TO OUTPUT DIRECTORY #####") } diff --git a/modules/Visualization/R/tmp/PlotRobinson.R b/modules/Visualization/R/tmp/PlotRobinson.R new file mode 100644 index 00000000..6a3412f5 --- /dev/null +++ b/modules/Visualization/R/tmp/PlotRobinson.R @@ -0,0 +1,524 @@ +#'Plot map in Robinson or other projections +#' +#'Transform a regular grid longitude-latitude data to a different projection and +#'plot the map. The target projection must be a valid CRS string, preferrably be +#'EPSG or ESRI code; check \link[sf]{st_crs} for more explanation. This function +#'is mainly tested for Robinson projection (ESRI:54030), but it can work with +#'other projection types in theory.\n +#'The map can be plotted by points or polygon. A legend can be plotted as either +#'a color bar or a discrete ggplot legend. Dots can be drawn on top of the data, +#'which can be used for significance test. A mask can be added to not plot the +#'data specified. A number of options is provided to adjust aesthetics, like +#'position, size, colors, etc. +#' +#'@param data A numeric array with longitude and latitude dimensions. The grid +#' should be regular grid. It can contain NA values. +#'@param lon A numeric vector of longitude locations of the cell centers of the +#' grid of 'data'. Expected to be regularly spaced, within the range of either +#' [-180, 180] or [0, 360]. +#'@param lat A numeric vector of latitude locations of the cell centers of the +#' grid of 'data'. Expected to be regularly spaced, within the range [-90, 90] +#' of ascending or descending order. +#'@param lon_dim A character string indicating the longitude dimension name in +#' 'data'. If it is NULL, the function tries to find the name in +#' \code{s2dv:::.KnownLonNames}. The default value is NULL. +#'@param lat_dim A character string indicating the latitude dimension name in +#' 'data'. If it is NULL, the function tries to find the name in +#' \code{s2dv:::.KnownLatNames}. The default value is NULL. +#'@param target_proj A character string indicating the target projection. It +#' should be a valid crs string. The default projection is Robinson +#' (ESRI:54030). Note that the character string may work differently depending +#' on PROJ and GDAL module version. +#'@param legend A character string indicating the legend style. It can be 's2dv' +#' (color bar by \code{ColorBar()}), 'ggplot2' (discrete legend by ggplot2), or +#' NULL (no legend), +#'@param style A character string indicating the plotting style. It can be +#' 'point' or 'polygon'. The default value is 'point'. Note that 'polygon' may +#' be time- and memory-consuming for global or high-resolution data. +#'@param dots An array with the same dimensions as 'data' of [0, 1] or logical +#' indicating the grids to plot dots. The value 0 or FALSE is the point to be +#' dotted. +#'@param mask An array with the same dimensions as 'data' of [0, 1] or logical +#' indicating the grids to not plot data. The value 0 or FALSE is the point not +#' to be plotted. +#'@param brks,cols,bar_limits,triangle_ends Usually only providing 'brks' is +#' enough to generate the desired color bar. These parameters allow to +#' define n breaks that define n - 1 intervals to classify each of the values +#' in 'data'. The corresponding grid cell of a given value in 'data' will be +#' colored in function of the interval it belongs to. These parameters are +#' sent to \code{ColorBar()} to generate the breaks and colours. Additional +#' colours for values beyond the limits of the colour bar are also generated +#' and applied to the plot if 'bar_limits' or 'brks' and 'triangle_ends' are +#' properly provided to do so. See ?ColorBar for a full explanation. +#'@param col_inf,col_sup,colNA Colour identifiers to color the values that +#' excess the extremes of the color bar and to color NAs, respectively. 'colNA' +#' takes attr(cols, 'na_color') if available by default, where cols is the +#' parameter 'cols' if provided or the vector of colors returned by +#' 'color_fun'. 'col_inf' and 'col_sup' will take the value of 'colNA' if not +#' specified. See ?ColorBar for a full explanation. +#'@param color_fun,bar_extra_margin Set of +#' parameters to control the visual aspect of the drawn colour bar +#' (1/3). See ?ColorBar for a full explanation. +#'@param vertical A logical value indicating the direction of colorbar if +#' parameter 'legend' is 's2dv'. The default value is TRUE. +#'@param toptitle A character string of the top title of the figure, scalable +#' with parameter 'title_size'. +#'@param caption A character string of the caption located at left-bottom of the +#' plot. +#'@param units A character string of the data units, which is the title of the +#' legend. +#'@param crop_coastlines A named numeric vector [lonmin, lonmax, latmin, latmax] +#' indicating the region to plot coastlines. Note that the longitude range +#' cannot exceed 180 degrees. +#'@param point_size A number of the size of the data points if "style = 'point'". +#' The default is 'auto' and the function tries to find the appropriate size. +#'@param title_size A number of the size of the top title. The default is 16. +#'@param dots_size A number of the size of the dots. The default is 0.5. +#'@param dots_shape A number indicating the dot shape recognized by parameter +#' 'shape' in \code{geom_point()}. +#'@param coastlines_width A number indicating the width of the coastlines. +#'@param fileout A character string of the path to save the plot. If not +#' specified (default), a graphic device will pop up. The extension should be +#' accepted by \code{ggsave()}. +#'@param width A number of the plot width, in the units specified in parameter +#' 'size_units'. The default is 8. +#'@param height A number of the plot height, in the units specified in parameter +#' 'size_units'. The default is 4. +#'@param size_units A character string of the units of the size of the device +#' (file or window) to plot in. The default is 'in' (inches). See ?ggsave and +#' ?Devices for details of the corresponding device. +#'@param res Resolution of the device (file or window) to plot in. The default +#' value is 300. See ?ggsave 'dpi' and ?Devices for details of the +#' corresponding device. +#' +#'@return A map plot with speficied projection, either in pop-up window or a +#' saved file. +#' +#'@examples +#'data <- array(rep(seq(-10, 10, length.out = 181), 360) + rnorm(360), +#' dim = c(lat = 181, lon = 360)) +#'dots <- data +#'dots[which(dots < 4 & dots > -4)] <- 0 +#'dots[which(dots != 0)] <- 1 +#'PlotRobinson(data, lon = 0:359, lat = -90:90, dots = dots, +#' brks = seq(-10, 10, length.out = 11), +#' toptitle = 'synthetic example', vertical = F, +#' caption = 'Robinson Global\ns2dv::PlotRobinson example', +#' bar_extra_margin = c(0, 1, 0, 1), width = 8, height = 6) +#'PlotRobinson(data, lon = 0:359, lat = -90:90, mask = dots, legend = 'ggplot2', +#' target_proj = "+proj=moll", brks = seq(-10, 10, length.out = 11), +#' color_fun = clim.palette("purpleorange"), colNA = 'green', +#' toptitle = 'synthetic example', +#' caption = 'Mollweide Global\ns2dv::PlotRobinson example', +#' width = 8, height = 6) +#' +#'@import sf ggplot2 rnaturalearth cowplot +#'@export +PlotRobinson <- function(data, lon, lat, lon_dim = NULL, lat_dim = NULL, + target_proj = 54030, legend = 's2dv', style = 'point', + dots = NULL, mask = NULL, brks = NULL, cols = NULL, bar_limits = NULL, + triangle_ends = NULL, col_inf = NULL, col_sup = NULL, colNA = NULL, + color_fun = clim.palette(), bar_extra_margin = rep(0, 4), vertical = TRUE, + toptitle = NULL, caption = NULL, units = NULL, crop_coastlines = NULL, + point_size = "auto", title_size = 16, dots_size = 0.5, + dots_shape = 47, coastlines_width = 0.3, + fileout = NULL, width = 8, height = 4, size_units = "in", + res = 300) { + + # Sanity check + # data + data <- drop(data) + if (length(dim(data)) != 2) { + stop("Parameter 'data' must have two dimensions.") + } + dims <- dim(data) + # lon, lon_dim + if (is.null(lon_dim)) { + lon_dim <- names(dims)[names(dims) %in% .KnownLonNames()] + if (identical(lon_dim, character(0))) { + stop("Cannot find known longitude name in data dimension. Please define parameter 'lon_dim'.") + } + } + if (is.unsorted(lon)) { + .warning("Parameter 'lon' should be sorted to guarantee the correct result.") + } + # lat, lat_dim + if (is.null(lat_dim)) { + lat_dim <- names(dims)[names(dims) %in% .KnownLatNames()] + if (identical(lat_dim, character(0))) { + stop("Cannot find known latitude name in data dimension. Please define parameter 'lat_dim'.") + } + } + if (!all(names(dims) %in% c(lat_dim, lon_dim))) { + stop("Dimensions names in paramter 'data' should match 'lat_dim' and 'lon_dim.") + } + if (length(lon) != dims[lon_dim]) { + stop("Length of parameter 'lon' should match longitude dimension in 'data'.") + } + if (length(lat) != dims[lat_dim]) { + stop("Length of parameter 'lat' should match latitude dimension in 'data'.") + } + data <- s2dv::Reorder(data, c(lon_dim, lat_dim)) + # Make lat always from 90 to -90 + sort_lat <- FALSE + if (!is.unsorted(lat)) { + lat <- rev(lat) + data <- ClimProjDiags::Subset(data, along = lat_dim, indices = seq(length(lat), 1, -1)) + sort_lat <- TRUE + } + + # original_proj: it can only be regular grid now + original_proj <- st_crs(4326) + # tartget_proj + if (is.null(target_proj)) { + stop("Parameter 'target_proj' cannot be NULL.") + } else { + target_proj_tmp <- st_crs(target_proj) + if (is.na(target_proj_tmp)) { + .warning(paste0("Try ESRI code: ESRI:", target_proj)) + target_proj <- st_crs(paste0("ESRI:", target_proj)) + } else { + target_proj <- target_proj_tmp + } + } + + # legend + if (!is.null(legend) && (!legend %in% c('s2dv', 'ggplot2'))) { + stop("Parameter 'legend' must be NULL, ggplot2 or s2dv.") + } + # style + if (!style %in% c('point', 'polygon') || length(style) != 1) { + stop("Parameter 'style' must be 'point' or 'polygon'.") + } + if (style == 'polygon') { + # polygon is slow for global map (and may be wrong) Confirm if users want to proceed + if ((abs(diff(range(lon))) > 350 & abs(diff(range(lat))) > 175) | + (prod(dim(data)) >= (180 * 360))) { + if (!isTRUE(utils::askYesNo("The region seems to be global and style 'polygon' is chosen. It may be time- and memory-consuming to plot the map. Are you sure that you want to continue?"))) { + return(invisible()) + } + } + } + # dots + if (!is.null(dots)) { + dots <- drop(dots) + if (any(!names(dim(dots)) %in% c(lon_dim, lat_dim))) { + stop("Parameter 'dots' must have two dimensions named as longitude and latitude dimensions in 'data'.") + } else { + dots <- Reorder(dots, c(lon_dim, lat_dim)) + } + if (!identical(dim(dots), dim(data))) { + stop("Parameter 'dots' must have the same dimensions as 'data'.") + } else if (is.numeric(dots)) { + if (all(dots %in% c(0, 1))) { + dots <- array(as.logical(dots), dim = dim(dots)) + } else { + stop("Parameter 'dots' must have only TRUE/FALSE or 0/1.") + } + } else if (is.logical(dots)) { + if (!all(dots %in% c(T, F))) { + stop("Parameter 'dots' must have only TRUE/FALSE or 0/1.") + } + } else { + stop("Parameter 'dots' must be a logical or numerical array.") + } + } + # mask + if (!is.null(mask)) { + mask <- drop(mask) + if (any(!names(dim(mask)) %in% c(lon_dim, lat_dim))) { + stop("Parameter 'mask' must have two dimensions named as longitude and latitude dimensions in 'data'.") + } else { + mask <- Reorder(mask, c(lon_dim, lat_dim)) + } + if (!identical(dim(mask), dim(data))) { + stop("Parameter 'mask' must have the same dimensions as 'data'.") + } else if (is.numeric(mask)) { + if (all(mask %in% c(0, 1))) { + mask <- array(as.logical(mask), dim = dim(mask)) + } else { + stop("Parameter 'mask' must have only TRUE/FALSE or 0/1.") + } + } else if (is.logical(mask)) { + if (!all(mask %in% c(T, F))) { + stop("Parameter 'mask' must have only TRUE/FALSE or 0/1.") + } + } else { + stop("Parameter 'mask' must be a logical or numerical array.") + } + } + + # Color bar + ## Check: brks, cols, bar_limits, color_fun, bar_extra_margin, units + ## Build: brks, cols, bar_limits, col_inf, col_sup + var_limits <- c(min(data, na.rm = TRUE), max(data, na.rm = TRUE)) + colorbar <- ColorBar(brks = brks, cols = cols, vertical = vertical, subsampleg = NULL, + bar_limits = bar_limits, var_limits = var_limits, triangle_ends = triangle_ends, + col_inf = col_inf, col_sup = col_sup, color_fun = color_fun, + plot = FALSE, draw_ticks = TRUE, draw_separators = FALSE, + triangle_ends_scale = 1, extra_labels = NULL, + title = units, title_scale = 1, # units_scale + label_scale = 1, tick_scale = 1, #bar_tick_scale + extra_margin = bar_extra_margin, label_digits = 4) + brks <- colorbar$brks + cols <- colorbar$cols + col_inf <- colorbar$col_inf + col_sup <- colorbar$col_sup + bar_limits <- c(head(brks, 1), tail(brks, 1)) + # colNA + if (is.null(colNA)) { + if ('na_color' %in% names(attributes(cols))) { + colNA <- attr(cols, 'na_color') + if (!.IsColor(colNA)) { + stop("The 'na_color' provided as attribute of the colour vector must be a valid colour identifier.") + } + } else { + colNA <- 'pink' + } + } else if (!.IsColor(colNA)) { + stop("Parameter 'colNA' must be a valid colour identifier.") + } + # toptitle + if (!is.null(toptitle) && !is.character(toptitle)) { + stop("Parameter 'toptitle' must be a character string.") + } + # caption + if (!is.null(caption) && !is.character(caption)) { + stop("Parameter 'caption' must be a character string.") + } + # crop_coastlines + if (!is.null(crop_coastlines)) { + # if crop_coastlines doesn't have name, [lonmin, lonmax, latmin, latmax] + if (is.null(names(crop_coastlines))) { + names(crop_coastlines) <- c("lonmin", "lonmax", "latmin", "latmax") + } else if (!identical(sort(names(crop_coastlines)), sort(c("latmax", "latmin", "lonmax", "lonmin")))) { + stop("Parameter 'crop_coastlines' needs to have names 'latmax', 'latmin', 'lonmax', 'lonmin'.") + } + } + + # point_size + if (point_size == 'auto') { + # 360x181 with default setting, 0.05 + point_size <- round(0.05 * (360 * 181) / (length(lon) * length(lat)), 2) + } else if (!is.numeric(point_size)) { + stop("Parameter 'point_size' must be a number.") + } + # + +#================================================================= + + # Adapt s2dv ColorBar parameters to ggplot plot + # If legend is NULL, still tune with s2dv legend way + if (is.null(legend) || legend == 's2dv') { + # the colorbar triangle color. If it is NULL (no triangle plotted), use colNA + col_inf_image <- ifelse(is.null(col_inf), colNA, col_inf) + col_sup_image <- ifelse(is.null(col_sup), colNA, col_sup) + cols_ggplot <- c(col_inf_image, cols, col_sup_image) + # Add brks to triangles + brks_ggplot <- c(min(data, na.rm = T), brks, max(data, na.rm = T)) + + } else { # ggplot2 legend + brks_ggplot <- brks + cols_ggplot <- cols + } + + # Build data dataframe + lonlat_df <- data.frame(lon = rep(as.vector(lon), length(lat)), + lat = sort(rep(as.vector(lat), length(lon)), decreasing = TRUE)) + data_df <- lonlat_df %>% + dplyr::mutate(dat = as.vector(data)) + + # Remove the points where mask = FALSE + if (!is.null(mask)) { + if (sort_lat) { + mask <- ClimProjDiags::Subset(mask, along = lat_dim, indices = seq(length(lat), 1, -1)) + } + mask_df <- data.frame(lon = rep(as.vector(lon), length(lat)), + lat = sort(rep(as.vector(lat), length(lon)), decreasing = TRUE), + mask = as.vector(mask)) + data_df <- data_df[mask_df$mask == TRUE, ] + lonlat_df <- data_df[, 1:2] + } + + #NOTE: if target_proj = "ESRI:54030", Nord3v2 has different behavior from hub and ws!! + data_df <- st_as_sf(data_df, coords = c("lon", "lat"), crs = original_proj) + data_df <- st_transform(data_df, crs = target_proj) + data_df <- data_df %>% + dplyr::mutate(long = st_coordinates(data_df)[, 1], + lat = st_coordinates(data_df)[, 2]) + + # Re-project dots + if (!is.null(dots)) { + if (sort_lat) { + dots <- ClimProjDiags::Subset(dots, along = lat_dim, indices = seq(length(lat), 1, -1)) + } + dots_df <- data.frame(lon = rep(as.vector(lon), length(lat)), + lat = sort(rep(as.vector(lat), length(lon)), decreasing = TRUE), + dot = as.vector(dots)) + + dots_df <- st_as_sf(dots_df, coords = c("lon", "lat"), crs = original_proj) + dots_df <- st_transform(dots_df, crs = target_proj) + dots_df <- dots_df %>% + dplyr::mutate(long = st_coordinates(dots_df)[, 1], + lat = st_coordinates(dots_df)[, 2]) + dots_df <- subset(dots_df, dot == FALSE) + } + + # coastlines + coastlines <- rnaturalearth::ne_coastline(scale = "medium", returnclass = "sf") + ## crop the coastlines to the desired range + if (!is.null(crop_coastlines)) { + suppressWarnings({ + coastlines <- st_crop(coastlines, + xmin = as.numeric(crop_coastlines['lonmin']), + xmax = as.numeric(crop_coastlines['lonmax']), + ymin = as.numeric(crop_coastlines['latmin']), + ymax = as.numeric(crop_coastlines['latmax'])) + }) + } + coastlines <- st_transform(coastlines, crs = target_proj) + + if (style == 'polygon') { + # Calculate polygon points from regular lat/lon + #NOTE: The original grid must be regular grid with same space + d_lon <- abs(lon[2] - lon[1]) / 2 + d_lat <- abs(lat[2] - lat[1]) / 2 + lon_poly <- lat_poly <- rep(NA, 4 * dim(lonlat_df)[1]) + for (ii in 1:dim(lonlat_df)[1]) { + lon_poly[(ii*4-3):(ii*4)] <- c(lonlat_df$lon[ii] - d_lon, lonlat_df$lon[ii] + d_lon, + lonlat_df$lon[ii] + d_lon, lonlat_df$lon[ii] - d_lon) + lat_poly[(ii*4-3):(ii*4)] <- c(lonlat_df$lat[ii] - d_lat, lonlat_df$lat[ii] - d_lat, + lonlat_df$lat[ii] + d_lat, lonlat_df$lat[ii] + d_lat) + } + # # To prevent out-of-global lon + # lon_poly[which(lon_poly >= 180)] <- 179.9 + # lon_poly[which(lon_poly < -180)] <- -180 + # To prevent out-of-global lat + lat_poly[which(lat_poly > 90)] <- 90 + lat_poly[which(lat_poly < -90)] <- -90 + + lonlat_df <- data.frame(lon = lon_poly, lat = lat_poly) + # Transfer lon/lat to projection + proj_lonlat <- st_as_sf(lonlat_df, coords = c("lon", "lat"), crs = original_proj) + #NOTE: if target_proj = "ESRI:54030", on Nord3v2, st_transform has lon and lat swapped! + proj_lonlat <- st_transform(proj_lonlat, crs = target_proj) + lonlat_df_proj <- st_coordinates(proj_lonlat) + + # Use id to create groups for each polygon + ids <- factor(paste0("id_", 1:dim(data_df)[1])) + values <- data.frame(id = ids, + value = data_df$dat) + positions <- data.frame(id = rep(ids, each = 4), + x = lonlat_df_proj[, 1], + y = lonlat_df_proj[, 2]) + datapoly <- merge(values, positions, by = "id") + datapoly <- st_as_sf(datapoly, coords = c("x", "y"), crs = target_proj) + datapoly <- datapoly %>% + dplyr::group_by(id) %>% + dplyr::summarise() %>% #NOTE: VERY SLOW if plot global + dplyr::mutate(value = values[order(values$id), ]$value) %>% + st_cast("POLYGON") %>% + st_convex_hull() # maintain outer polygen (no bowtie shape) + } + + # Plots + if (style == 'polygon') { + res_p <- ggplot(data = data_df) + #NOTE: must be data_df? + geom_sf(data = datapoly, + aes(col = cut(value, breaks = brks_ggplot, include.lowest = T), + fill = cut(value, breaks = brks_ggplot, include.lowest = T))) + } else if (style == 'point') { + res_p <- ggplot(data = data_df) + + geom_point(aes(x = long, y = lat, + col = cut(dat, breaks = brks_ggplot, include.lowest = T)), + #NOTE: These two lines make point size vary with lat + #size = point_size / (data_df$lat / min(data_df$lat))) + + #size = (sort(rep(as.vector(lat), length(lon))) / max(lat)) * point_size) + + size = point_size) + } + res_p <- res_p + + geom_sf(data = coastlines, colour ='black', size = coastlines_width) + + # Remove background grid and lat/lon label; add white background + theme_void() + theme(plot.background = element_rect(fill = 'white', colour = 'white')) + + # crop the projection + coord_sf(xlim = range(data_df$long), ylim = range(data_df$lat), + expand = TRUE, datum = target_proj) + + if (!is.null(dots)) { + res_p <- res_p + geom_point(data = dots_df, aes(x = long, y = lat), + shape = dots_shape, size = dots_size) + #NOTE: This line makes point size vary with lat + #size = dots_size / (dots_df$lat / min(dots_df$lat))) + } + + if (identical(legend, 'ggplot2')) { + if (style == 'polygon') { + res_p <- res_p + scale_colour_manual(values = cols_ggplot, + aesthetics = c("colour", "fill"), + drop = FALSE, na.value = colNA) + + guides(fill = guide_legend(title = units, override.aes = list(size = 1)), + color = "none") + } else if (style == 'point') { + res_p <- res_p + scale_colour_manual(values = cols_ggplot, + drop = FALSE, na.value = colNA) + + guides(colour = guide_legend(title = units, override.aes = list(size = 1))) + } + + } else { # s2dv or NULL + if (style == 'polygon') { + res_p <- res_p + scale_colour_manual(values = cols_ggplot, + aesthetics = c("colour", "fill"), + drop = FALSE, na.value = colNA) + } else if (style == 'point') { + res_p <- res_p + scale_colour_manual(values = cols_ggplot, + drop = FALSE, na.value = colNA) + } + # Remove ggplot legend + res_p <- res_p + theme(legend.position = "none", plot.margin = margin(0.5, 0, 0, 0, 'cm')) + } + + if (!is.null(toptitle)) { + res_p <- res_p + ggtitle(toptitle) + + theme(plot.title = element_text(size = title_size, hjust = 0.5, vjust = 3)) + } + if (!is.null(caption)) { + res_p <- res_p + labs(caption = caption) + + theme(plot.caption = element_text(hjust = 0, vjust = 1, margin = margin(0, 0, 0, 0, 'cm'))) + } + + # s2dv legend fun to put in cowplot::plot_grid + if (identical(legend, 's2dv')) { + fun_legend <- function() { + if (vertical) { + par(mar = c(7.1, 2.2, 7.1, 3.1), mgp = c(3, 1, 0)) + } else { + par(mar = c(1.1, 1.2, 0.1, 1.1), mgp = c(3, 1, 0)) + } + ColorBar(brks = brks, cols = cols, vertical = vertical, subsampleg = NULL, + bar_limits = bar_limits, var_limits = var_limits, triangle_ends = triangle_ends, + col_inf = col_inf, col_sup = col_sup, color_fun = color_fun, + plot = TRUE, draw_ticks = TRUE, draw_separators = FALSE, + triangle_ends_scale = 1, extra_labels = NULL, + title = units, title_scale = 1, # units_scale + label_scale = 1, tick_scale = 1, #bar_tick_scale + extra_margin = bar_extra_margin, label_digits = 4) + } + if (vertical) { + res_p <- cowplot::plot_grid(res_p, fun_legend, rel_widths = c(6, 1)) + } else { + res_p <- cowplot::plot_grid(res_p, fun_legend, rel_heights = c(5, 1), ncol = 1) + } + res_p <- res_p + theme(plot.background = element_rect(fill = "white", colour = "white")) + } + + if (!is.null(fileout)) { + ext <- regmatches(fileout, regexpr("[a-zA-Z0-9]*$", fileout)) + ggsave(fileout, res_p, width = width, height = height, dpi = res, units = size_units, + device = ext) + } else { # pop-up window + dev.new(units = size_units, res = res, width = width, height = height) + res_p + } + +} + diff --git a/modules/Visualization/Visualization.R b/modules/Visualization/Visualization.R index 44640055..03a4d5a2 100644 --- a/modules/Visualization/Visualization.R +++ b/modules/Visualization/Visualization.R @@ -5,6 +5,9 @@ ## TODO: Decadal plot names source("modules/Visualization/R/plot_skill_metrics.R") +source("modules/Visualization/R/get_proj_code.R") +## TODO: Remove after the next s2dv release +source("modules/Visualization/R/tmp/PlotRobinson.R") source("modules/Visualization/R/plot_most_likely_terciles_map.R") source("modules/Visualization/R/plot_ensemble_mean.R") diff --git a/recipes/atomic_recipes/recipe_system5c3s-tas.yml b/recipes/atomic_recipes/recipe_system5c3s-tas.yml index c4606d59..b0f171e4 100644 --- a/recipes/atomic_recipes/recipe_system5c3s-tas.yml +++ b/recipes/atomic_recipes/recipe_system5c3s-tas.yml @@ -13,11 +13,11 @@ Analysis: Reference: name: ERA5 Time: - sdate: '0601' + sdate: '0301' fcst_year: '2020' hcst_start: '1993' hcst_end: '2006' - ftime_min: 1 + ftime_min: 2 ftime_max: 3 Region: latmin: -10 @@ -36,19 +36,20 @@ Analysis: method: raw save: fcst_only Skill: - metric: RPSS_specs BSS90_specs EnsCorr_specs FRPS_specs FRPSS_specs BSS10_specs FRPS + metric: FRPS save: all Probabilities: percentiles: [[1/3, 2/3]] save: all Visualization: plots: skill_metrics forecast_ensemble_mean - + multi_panel: no + projection: robinson Indicators: index: no Output_format: S2S4E Run: Loglevel: INFO Terminal: yes - output_dir: /esarchive/scratch/vagudets/repos/auto-s2s/out-logs/ + output_dir: /esarchive/scratch/vagudets/auto-s2s-outputs/ code_dir: /esarchive/scratch/vagudets/repos/auto-s2s/ diff --git a/recipes/atomic_recipes/recipe_system7c3s-tas.yml b/recipes/atomic_recipes/recipe_system7c3s-tas.yml index e5cd2aba..c30ed71c 100644 --- a/recipes/atomic_recipes/recipe_system7c3s-tas.yml +++ b/recipes/atomic_recipes/recipe_system7c3s-tas.yml @@ -15,15 +15,15 @@ Analysis: Time: sdate: '1101' fcst_year: '2020' - hcst_start: '1993' + hcst_start: '2000' hcst_end: '2010' ftime_min: 1 ftime_max: 2 Region: - latmin: -10 - latmax: 10 - lonmin: 0 - lonmax: 20 + latmin: 30 + latmax: 70 + lonmin: -20 + lonmax: 40 Regrid: method: bilinear type: to_system @@ -36,13 +36,15 @@ Analysis: method: mse_min save: 'none' # 'all'/'none'/'exp_only'/'fcst_only' Skill: - metric: RPS RPSS CRPS CRPSS FRPSS BSS10 BSS90 EnsCorr Corr mean_bias mean_bias_SS + metric: BSS10 BSS90 save: 'all' # 'all'/'none' Probabilities: - percentiles: [[1/3, 2/3], [1/10, 9/10], [1/4, 2/4, 3/4]] + percentiles: [[1/3, 2/3], [1/10, 9/10]] save: 'percentiles_only' # 'all'/'none'/'bins_only'/'percentiles_only' Visualization: plots: skill_metrics, forecast_ensemble_mean, most_likely_terciles + multi_panel: no + projection: lambert_europe Indicators: index: no ncores: 10 diff --git a/recipes/atomic_recipes/recipe_tas_global.yml b/recipes/atomic_recipes/recipe_tas_global.yml new file mode 100644 index 00000000..969e150d --- /dev/null +++ b/recipes/atomic_recipes/recipe_tas_global.yml @@ -0,0 +1,57 @@ +Description: + Author: V. Agudetse + +Analysis: + Horizon: Seasonal + Variables: + name: tas + freq: monthly_mean + Datasets: + System: + name: Meteo-France-System7 + Multimodel: False + Reference: + name: ERA5 + Time: + sdate: '1101' + fcst_year: '2020' + hcst_start: '2000' + hcst_end: '2010' + ftime_min: 1 + ftime_max: 2 + Region: + latmin: -90 + latmax: 90 + lonmin: 0 + lonmax: 359.9 + Regrid: + method: bilinear + type: to_system + Workflow: + Anomalies: + compute: yes # yes/no, default yes + cross_validation: yes # yes/no, default yes + save: 'all' # 'all'/'none'/'exp_only'/'fcst_only' + Calibration: + method: mse_min + save: 'none' # 'all'/'none'/'exp_only'/'fcst_only' + Skill: + metric: RPSS BSS10 BSS90 EnsCorr mean_bias mean_bias_SS + save: 'all' # 'all'/'none' + Probabilities: + percentiles: [[1/3, 2/3], [1/10, 9/10]] + save: 'percentiles_only' # 'all'/'none'/'bins_only'/'percentiles_only' + Visualization: + plots: skill_metrics, forecast_ensemble_mean, most_likely_terciles + multi_pannel: no + projection: robinson + Indicators: + index: no + ncores: 10 + remove_NAs: yes + Output_format: S2S4E +Run: + Loglevel: INFO + Terminal: yes + output_dir: /esarchive/scratch/vagudets/auto-s2s-outputs/ + code_dir: /esarchive/scratch/vagudets/repos/auto-s2s/ diff --git a/tests/recipes/recipe-decadal_monthly_1.yml b/tests/recipes/recipe-decadal_monthly_1.yml index a2849c27..ce44751d 100644 --- a/tests/recipes/recipe-decadal_monthly_1.yml +++ b/tests/recipes/recipe-decadal_monthly_1.yml @@ -46,6 +46,8 @@ Analysis: index: FALSE Visualization: plots: skill_metrics most_likely_terciles forecast_ensemble_mean + multi_panel: yes + projection: cylindrical_equidistant ncores: # Optional, int: number of cores, defaults to 1 remove_NAs: # Optional, bool: Whether NAs are removed, defaults to FALSE Output_format: S2S4E diff --git a/tests/recipes/recipe-decadal_monthly_2.yml b/tests/recipes/recipe-decadal_monthly_2.yml index b0892a0c..8f2e8111 100644 --- a/tests/recipes/recipe-decadal_monthly_2.yml +++ b/tests/recipes/recipe-decadal_monthly_2.yml @@ -46,6 +46,8 @@ Analysis: index: FALSE Visualization: plots: most_likely_terciles skill_metrics forecast_ensemble_mean + multi_panel: yes + projection: cylindrical_equidistant ncores: # Optional, int: number of cores, defaults to 1 remove_NAs: # Optional, bool: Whether NAs are removed, defaults to FALSE Output_format: S2S4E diff --git a/tests/recipes/recipe-seasonal_monthly_1.yml b/tests/recipes/recipe-seasonal_monthly_1.yml index 21321fab..0edf4795 100644 --- a/tests/recipes/recipe-seasonal_monthly_1.yml +++ b/tests/recipes/recipe-seasonal_monthly_1.yml @@ -45,6 +45,8 @@ Analysis: index: no Visualization: plots: skill_metrics most_likely_terciles forecast_ensemble_mean + multi_panel: yes + projection: cylindrical_equidistant Output_format: S2S4E Run: Loglevel: INFO diff --git a/tools/check_recipe.R b/tools/check_recipe.R index a9170707..abd0c8e2 100644 --- a/tools/check_recipe.R +++ b/tools/check_recipe.R @@ -341,7 +341,7 @@ check_recipe <- function(recipe) { if ("Visualization" %in% names(recipe$Analysis$Workflow)) { PLOT_OPTIONS <- c("skill_metrics", "forecast_ensemble_mean", "most_likely_terciles") - ## Separate plots parameter and check if all elements are in PLOT_OPTIONS + # Separate plots parameter and check if all elements are in PLOT_OPTIONS if (is.null(recipe$Analysis$Workflow$Visualization$plots)) { error(recipe$Run$logger, "The 'plots' element must be defined under 'Visualization'.") @@ -356,6 +356,23 @@ check_recipe <- function(recipe) { error_status <- T } } + # Check multi_panel option + if ((is.null(recipe$Analysis$Workflow$Visualization$multi_panel)) || + (!is.logical(recipe$Analysis$Workflow$Visualization$multi_panel))) { + error(recipe$Run$logger, + paste0("The 'multi_panel' element must be defined under ", + "Visualization, the options are 'yes' or 'no'.")) + error_status <- T + } + # Check projection + if (is.null(recipe$Analysis$Workflow$Visualization$projection)) { + warn(recipe$Run$logger, + paste0("No projection has been specified for the plots, the ", + "default projection is cylindrical equidistant.")) + ## TODO: This will not work + recipe$Analysis$Workflow$Visualization$projection <- "cylindrical_equidistant" + } + ## TODO: Add significance? } # --------------------------------------------------------------------- diff --git a/tools/libs.R b/tools/libs.R index 7a6b550f..e1179e8d 100644 --- a/tools/libs.R +++ b/tools/libs.R @@ -6,29 +6,20 @@ library(multiApply) library(yaml) library(s2dv) library(abind) -# library(s2dverification) -# library(ncdf4) -# library(easyVerification) library(easyNCDF) library(CSTools) library(lubridate) library(PCICt) library(RColorBrewer) library(configr) -# -# library(parallel) +library(sf) +library(ggplot2) +library(rnaturalearth) +library(cowplot) +library(stringr) library(pryr) # To check mem usage. -#setwd("/esarchive/scratch/nperez/git/S2S4E-backend-BSC/data-analysis/") -# source('export_2_nc.R') -# source('S2S/s2s.filefmt.R') -# source('s2s.calib.R') -# -# source("s2s_tools.R") -# source("Calibration_fcst4.R") -# source("R_Reorder.R") -# source("R_CST_MergeDims.R") -#setwd(recipe$Run$code_dir) -# # To be removed when new package is done by library(CSOperational) + +## To be removed when new package is done by library(CSOperational) source("tools/check_recipe.R") source("tools/prepare_outputs.R") source("tools/divide_recipe.R") -- GitLab From 509daf505c45e52eab39dd367df033486a8a3ba3 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Thu, 15 Jun 2023 10:43:10 +0200 Subject: [PATCH 171/388] Remove calls to CSTools functions, add 'daily' option --- modules/Loading/Loading.R | 12 +++--------- modules/Loading/R/get_timeidx.R | 4 ++-- 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/modules/Loading/Loading.R b/modules/Loading/Loading.R index ebeadbf2..d945d5af 100644 --- a/modules/Loading/Loading.R +++ b/modules/Loading/Loading.R @@ -6,12 +6,6 @@ source("modules/Loading/R/get_timeidx.R") source("modules/Loading/R/check_latlon.R") ## TODO: Move to prepare_outputs.R source("tools/libs.R") -## TODO: remove these two lines when new as.s2dv_cube() is in CSTools -source('https://earth.bsc.es/gitlab/external/cstools/-/raw/develop-new_s2dv_cube/R/as.s2dv_cube.R') -source('https://earth.bsc.es/gitlab/external/cstools/-/raw/develop-new_s2dv_cube/R/zzz.R') - -## TODO: Source new s2dv_cube version -## TODO: Eliminate dim_var dimension (merge_across_dims?) load_datasets <- function(recipe) { @@ -137,7 +131,7 @@ load_datasets <- function(recipe) { hcst <- Subset(hcst, along = "var_dir", indices = 1, drop = "selected") } - if (recipe$Analysis$Variables$freq == "daily_mean") { + if (store.freq %in% c("daily_mean", "daily")) { # Adjusts dims for daily case, could be removed if startR allows # multidim split names(dim(hcst))[which(names(dim(hcst)) == 'file_date')] <- "syear" @@ -200,7 +194,7 @@ load_datasets <- function(recipe) { fcst <- Subset(fcst, along = "var_dir", indices = 1, drop = "selected") } - if (recipe$Analysis$Variables$freq == "daily_mean") { + if (store.freq %in% c("daily_mean", "daily")) { # Adjusts dims for daily case, could be removed if startR allows # multidim split names(dim(fcst))[which(names(dim(fcst)) == 'file_date')] <- "syear" @@ -266,7 +260,7 @@ load_datasets <- function(recipe) { split_multiselected_dims = TRUE, retrieve = TRUE) - } else if (store.freq == "daily_mean") { + } else if (store.freq %in% c("daily_mean", "daily")) { # Get year and month for file_date dates_file <- sapply(dates, format, '%Y%m') diff --git a/modules/Loading/R/get_timeidx.R b/modules/Loading/R/get_timeidx.R index e4f61a1d..d2c66dde 100644 --- a/modules/Loading/R/get_timeidx.R +++ b/modules/Loading/R/get_timeidx.R @@ -9,12 +9,12 @@ #'@param sdates vector containind the start dates #'@param ltmin first leadtime #'@param ltmax last leadtime -#'@param time_freq time frequency ("monthly_mean" or "daily_mean") +#'@param time_freq time frequency ("monthly_mean" or "daily_mean" or "daily") get_timeidx <- function(sdates, ltmin, ltmax, time_freq="monthly_mean") { - if (time_freq == "daily_mean") { + if (time_freq %in% c("daily_mean", "daily")) { sdates <- ymd(sdates) idx_min <- sdates + months(ltmin - 1) -- GitLab From 32037c927077dee3c4be073fda3025293201ac8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nuria=20P=C3=A9rez-Zan=C3=B3n?= Date: Thu, 22 Jun 2023 17:01:11 +0200 Subject: [PATCH 172/388] Develop module Indices --- conf/archive.yml | 8 +- example_scripts/execute_NAO.R | 24 + example_scripts/execute_NAO_decadal.R | 24 + example_scripts/execute_Nino.R | 34 ++ example_scripts/execute_Nino_decadal.R | 24 + modules/Indices/Indices.R | 111 +++++ modules/Indices/R/compute_nao.R | 444 ++++++++++++++++++ modules/Indices/R/compute_nino.R | 438 +++++++++++++++++ modules/Indices/R/correlation_eno.R | 45 ++ modules/Indices/R/drop_indices_dims.R | 87 ++++ .../Indices/R/plot_deterministic_forecast.R | 176 +++++++ modules/Saving/R/drop_dims.R | 86 ++++ modules/Saving/R/get_filename.R | 3 +- modules/Saving/R/get_global_attributes.R | 20 + modules/Saving/R/get_latlon.R | 17 + modules/Saving/R/get_time.R | 30 ++ modules/Saving/R/save_metrics.R | 17 +- modules/Saving/Saving.R | 13 +- modules/Skill/Skill.R | 31 +- modules/Visualization/R/plot_ensemble_mean.R | 1 - modules/Visualization/R/plot_skill_metrics.R | 1 - recipes/examples/NAO_recipe.yml | 60 +++ recipes/examples/Nino_recipe.yml | 61 +++ recipes/examples/recipe_Nino_decadal.yml | 55 +++ recipes/examples/recipe_model_decadal_NAO.yml | 55 +++ tests/recipes/recipe-seasonal_NAO.yml | 62 +++ tests/testthat/test-seasonal_NAO.R | 261 ++++++++++ tools/check_recipe.R | 43 ++ tools/libs.R | 6 + 29 files changed, 2198 insertions(+), 39 deletions(-) create mode 100644 example_scripts/execute_NAO.R create mode 100644 example_scripts/execute_NAO_decadal.R create mode 100644 example_scripts/execute_Nino.R create mode 100644 example_scripts/execute_Nino_decadal.R create mode 100644 modules/Indices/Indices.R create mode 100644 modules/Indices/R/compute_nao.R create mode 100644 modules/Indices/R/compute_nino.R create mode 100644 modules/Indices/R/correlation_eno.R create mode 100644 modules/Indices/R/drop_indices_dims.R create mode 100644 modules/Indices/R/plot_deterministic_forecast.R create mode 100644 modules/Saving/R/drop_dims.R create mode 100644 modules/Saving/R/get_global_attributes.R create mode 100644 modules/Saving/R/get_latlon.R create mode 100644 modules/Saving/R/get_time.R create mode 100644 recipes/examples/NAO_recipe.yml create mode 100644 recipes/examples/Nino_recipe.yml create mode 100644 recipes/examples/recipe_Nino_decadal.yml create mode 100644 recipes/examples/recipe_model_decadal_NAO.yml create mode 100644 tests/recipes/recipe-seasonal_NAO.yml create mode 100644 tests/testthat/test-seasonal_NAO.R diff --git a/conf/archive.yml b/conf/archive.yml index 88872cb8..a0caf86a 100644 --- a/conf/archive.yml +++ b/conf/archive.yml @@ -16,7 +16,7 @@ esarchive: "tasmin":"_f24h/", "tasmax":"_f24h/", "ta300":"_f12h/", "ta500":"_f12h/", "ta850":"_f12h/", "g300":"_f12h/", "g500":"_f12h/", "g850":"_f12h/", - "tdps":"_f6h/", "tos":"_f6h/"} + "tdps":"_f6h/", "psl":"_f6h/", "tos":"_f6h/"} nmember: fcst: 51 hcst: 25 @@ -135,7 +135,7 @@ esarchive: daily_mean: {"tas":"_f1h-r1440x721cds/", "rsds":"_f1h-r1440x721cds/", "prlr":"_f1h-r1440x721cds/", - "g300":"_f1h-r1440x721cds/", + "g300":"_f1h-r1440x721cds/", "g500":"_f1h-r1440x721cds/", "g850":"_f1h-r1440x721cds/", "sfcWind":"_f1h-r1440x721cds/", @@ -146,6 +146,7 @@ esarchive: "ta850":"_f1h-r1440x721cds/", "hurs":"_f1h-r1440x721cds/"} monthly_mean: {"tas":"_f1h-r1440x721cds/", + "psl":"_f1h-r1440x721cds/", "prlr":"_f1h-r1440x721cds/", "rsds":"_f1h-r1440x721cds/", "g300":"_f1h-r1440x721cds/", @@ -157,8 +158,7 @@ esarchive: "ta300":"_f1h-r1440x721cds/", "ta500":"_f1h-r1440x721cds/", "ta850":"_f1h-r1440x721cds/", - "tos":"_f1h-r1440x721cds" - } + "tos":"_f1h-r1440x721cds/"} calendar: "standard" reference_grid: "/esarchive/recon/ecmwf/era5/monthly_mean/tas_f1h-r1440x721cds/tas_201805.nc" ERA5-Land: diff --git a/example_scripts/execute_NAO.R b/example_scripts/execute_NAO.R new file mode 100644 index 00000000..39d435c5 --- /dev/null +++ b/example_scripts/execute_NAO.R @@ -0,0 +1,24 @@ + +recipe_file <- "recipes/examples/NAO_recipe.yml" + +source("modules/Loading/Loading.R") +source("modules/Calibration/Calibration.R") +source("modules/Skill/Skill.R") +source("modules/Saving/Saving.R") +source("tools/prepare_outputs.R") +source("modules/Anomalies/Anomalies.R") +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") +source("modules/Indices/Indices.R") + 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') + + diff --git a/example_scripts/execute_NAO_decadal.R b/example_scripts/execute_NAO_decadal.R new file mode 100644 index 00000000..41570aa4 --- /dev/null +++ b/example_scripts/execute_NAO_decadal.R @@ -0,0 +1,24 @@ +recipe_file <- "recipes/examples/recipe_model_decadal_NAO.yml" + + +source("modules/Loading/Loading_decadal.R") +source("modules/Calibration/Calibration.R") +source("modules/Skill/Skill.R") +source("modules/Saving/Saving.R") +source("tools/prepare_outputs.R") +source("modules/Anomalies/Anomalies.R") +recipe <- prepare_outputs(recipe_file) + +#for (smonth in 1:12) { + data <- load_datasets(recipe) + gc() + data <- compute_anomalies(recipe, data) +# data <- readRDS("../data_decadal_nao.RDS") +source("modules/Indices/Indices.R") + 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') + + diff --git a/example_scripts/execute_Nino.R b/example_scripts/execute_Nino.R new file mode 100644 index 00000000..d64513ad --- /dev/null +++ b/example_scripts/execute_Nino.R @@ -0,0 +1,34 @@ +recipe_file <- "recipes/examples/Nino_recipe.yml" + + +source("modules/Loading/Loading.R") +source("modules/Calibration/Calibration.R") +source("modules/Skill/Skill.R") +source("modules/Saving/Saving.R") +source("tools/prepare_outputs.R") +source("modules/Anomalies/Anomalies.R") +recipe <- prepare_outputs(recipe_file) + +#for (smonth in 1:12) { + data <- load_datasets(recipe) + gc() + data <- compute_anomalies(recipe, data) +# saveRDS(data, file = "Test_Ninomodule.RDS") +# data <- readRDS("Test_Ninomodule.RDS") +source("modules/Indices/Indices.R") + nino_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 = nino_s2dv$Nino1, + agg = 'region') + skill_metrics <- compute_skill_metrics(recipe = recipe, data = nino_s2dv$Nino3, + agg = 'region') + + skill_metrics <- compute_skill_metrics(recipe = recipe, data = nino_s2dv$Nino4, + agg = 'region') + + skill_metrics <- compute_skill_metrics(recipe = recipe, data = nino_s2dv$Nino3.4, + agg = 'region') + + + diff --git a/example_scripts/execute_Nino_decadal.R b/example_scripts/execute_Nino_decadal.R new file mode 100644 index 00000000..1a7c3184 --- /dev/null +++ b/example_scripts/execute_Nino_decadal.R @@ -0,0 +1,24 @@ +recipe_file <- "recipes/examples/recipe_Nino_decadal.yml" + + +source("modules/Loading/Loading_decadal.R") +source("modules/Calibration/Calibration.R") +source("modules/Skill/Skill.R") +source("modules/Saving/Saving.R") +source("tools/prepare_outputs.R") +source("modules/Anomalies/Anomalies.R") +recipe <- prepare_outputs(recipe_file) + +#for (smonth in 1:12) { + data <- load_datasets(recipe) + gc() + data <- compute_anomalies(recipe, data) +# data <- readRDS("../data_decadal_nao.RDS") +source("modules/Indices/Indices.R") + nino_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 = nino_s2dv[[1]], + agg = 'region') + + diff --git a/modules/Indices/Indices.R b/modules/Indices/Indices.R new file mode 100644 index 00000000..fb9a7277 --- /dev/null +++ b/modules/Indices/Indices.R @@ -0,0 +1,111 @@ +source("modules/Indices/R/compute_nao.R") +source("modules/Indices/R/compute_nino.R") +source("modules/Indices/R/drop_indices_dims.R") +source("modules/Saving/Saving.R") +Indices <- function(recipe, data) { + # Define parameters + nao <- NULL + if ("nao" %in% tolower(names(recipe$Analysis$Workflow$Indices))) { + if (!is.null(recipe$Analysis$Workflow$Indices$NAO$obsproj)) { + obsproj <- recipe$Analysis$Workflow$Indices$NAO$obsproj + } else { + obsproj <- TRUE + } + if (!is.null(recipe$Analysis$Workflow$Indices$NAO$plot_ts)) { + plot_ts <- recipe$Analysis$Workflow$Indices$NAO$plot_ts + } else { + plot_ts <- TRUE + } + if (!is.null(recipe$Analysis$Workflow$Indices$NAO$plot_sp)) { + plot_sp <- recipe$Analysis$Workflow$Indices$NAO$plot_sp + } else { + plot_sp <- TRUE + } + if (!is.null(recipe$Analysis$Workflow$Indices$NAO$alpha)) { + alpha <- recipe$Analysis$Workflow$Indices$NAO$alpha + } else { + alpha <- 0.05 + } + nao <- compute_nao(data = data, recipe = recipe, + obsproj = obsproj, + plot_ts = plot_ts, plot_sp = plot_sp, + alpha = alpha) + } + ninos <- list() + num_ninos <- sum(tolower(substr(names(recipe$Analysis$Workflow$Indices), + 1, 4)) == "nino") + if (num_ninos > 0) { + for (nins in 1:num_ninos) { + if ("nino1+2" %in% + tolower(names(recipe$Analysis$Workflow$Indices)[nins])) { + region <- c(lonmin = -90, lonmax = -80, latmin = -10, latmax = 0) + } else if ("nino3" %in% + tolower(names(recipe$Analysis$Workflow$Indices)[nins])) { + region <- c(lonmin = -150, lonmax = -90, latmin = -5, latmax = 5) + } else if ("nino3.4" %in% + tolower(names(recipe$Analysis$Workflow$Indices)[nins])) { + region <- c(lonmin = -170, lonmax = -120, latmin = -5, latmax = 5) + } else if ("nino4" %in% + tolower(names(recipe$Analysis$Workflow$Indices)[nins])) { + region <- c(lonmin = 160, lonmax = -150, latmin = -5, latmax = 5) + } + if (is.null(recipe$Analysis$ncores)) { + ncores <- 1 + } else { + ncores <- recipe$Analysis$ncores + } + if (is.null(recipe$Analysis$remove_NAs)) { + na.rm <- TRUE + } else { + na.rm <- recipe$Analysis$remove_NAs + } + if (is.null(recipe$Analysis$Workflow$Indices[nins]$standardised)) { + standardised <- TRUE + } else { + standardised <-recipe$Analysis$Workflow$Indices[nins]$standardised + } + if (is.null(recipe$Analysis$Workflow$Indices[nins]$running_mean)) { + running_mean <- NULL + } else { + running_mean <-recipe$Analysis$Workflow$Indices[nins]$running_mean + } + if (!is.null(recipe$Analysis$Workflow$Indices[nins]$plot_ts)) { + plot_ts <- recipe$Analysis$Workflow$Indices[nins]$plot_ts + } else { + plot_ts <- TRUE + } + if (!is.null(recipe$Analysis$Workflow$Indices[nins]$plot_sp)) { + plot_sp <- recipe$Analysis$Workflow$Indices[nins]$plot_sp + } else { + plot_sp <- TRUE + } + if (!is.null(recipe$Analysis$Workflow$Indices[nins]$alpha)) { + alpha <- recipe$Analysis$Workflow$Indices[nins]$alpha + } else { + alpha <- 0.05 + } + if (!is.null(recipe$Analysis$Workflow$Indices[nins]$save)) { + save <- recipe$Analysis$Workflow$Indices[nins]$save + } else { + save <- 'all' + } + nino <- compute_nino(data = data, recipe = recipe, + standardised = standardised, + region = region, save = save, plot_ts = plot_ts, + plot_sp = plot_sp, alpha = alpha, + running_mean = running_mean, ncores = ncores, + na.rm = na.rm) + ninos[[nins]] <- nino + names(ninos)[nins] <- names(recipe$Analysis$Workflow$Indices)[nins] + } + } + if (is.null(nao)) { + return(ninos) + info(recipe$Run$logger, + "##### EL NINO INDICES COMPUTED SUCCESSFULLY #####") + } else { + return(nao) + info(recipe$Run$logger, + "##### NAO INDEX COMPUTED SUCCESSFULLY #####") + } +} diff --git a/modules/Indices/R/compute_nao.R b/modules/Indices/R/compute_nao.R new file mode 100644 index 00000000..4be27b89 --- /dev/null +++ b/modules/Indices/R/compute_nao.R @@ -0,0 +1,444 @@ + +compute_nao <- function(data, recipe, obsproj, plot_ts, plot_sp, + alpha, logo = NULL) { + ## TODO: if fcst object in data compute the nao too + if (!is.null(data$fcst)) { + warning("NAO computed only for hindcast data.") + } + # Check if subsetting the data for the region is required + lons <- data$hcst$coords$longitude + lats <- data$hcst$coords$latitude + subset_needed <- FALSE + nao_region <- c(lonmin = -80, lonmax = 40, + latmin = 20, latmax = 80) + if (any(lons < 0)) { #[-180, 180] + if (!(min(lons) > -90 & min(lons) < -70 & + max(lons) < 50 & max(lons) > 30)) { + subset_needed <- TRUE + } + } else { #[0, 360] + if (any(lons >= 50 & lons <= 270)) { + susbset_needed <- TRUE + } else { + lon_E <- lons[which(lons < 50)] + lon_W <- lons[-which(lons < 50)] + if (max(lon_E) < 30 | min(lon_W) > 290) { + subset_needed <- TRUE + } + } + } + if (any(max(lats) > 80 & min(lats) < 20)) { + subset_needed <- TRUE + } + if (subset_needed) { + warning("The data is being subsetted for 20N-80N and 80W-40E region.") + + hcst1 <- ClimProjDiags::SelBox(data$hcst$data, + lon = as.vector(lons), + lat = as.vector(lats), + region = nao_region, + londim = "longitude", + latdim = "latitude") + obs1 <- ClimProjDiags::SelBox(data$obs$data, + lon = as.vector(lons), + lat = as.vector(lats), + region = nao_region, + londim = "longitude", + latdim = "latitude") + hcst <- s2dv_cube(data = hcst1$data, lat = hcst1$lat, lon = hcst1$lon, + Variable = c(data$hcst$Variable[1], level = 'surface'), + data$hcst$Va, Datasets = data$hcst$Datasets, + time_dims = c('syear', 'time'), + Dates = data$hcst$Dates) + obs <- s2dv_cube(data = obs1$data, lat = obs1$lat, lon = obs1$lon, + Variable = c(data$obs$Variable[1], level = 'surface'), + Datasets = data$obs$Datasets, time_dims = c('syear', 'time')) +# TODO check and create data object for the next steps + data <- list(hcst = hcst, obs = obs) + lons <- data$hcst$coords$longitude + lats <- data$hcst$coords$latitude + obs1 <- hcst1 <- NULL + gc() + } + nao <- NAO(exp = data$hcst$data, obs = data$obs$data, + lat = data$hcst$coords$latitude, + lon = data$hcst$coords$longitude, + time_dim = 'syear', + memb_dim = 'ensemble', space_dim = c('latitude', 'longitude'), + ftime_dim = 'time', ftime_avg = NULL, + obsproj = obsproj, ncores = recipe$Analysis$ncores) + ## Standardisation: + nao$exp <- Apply(list(nao$exp), target_dims = c('syear', 'ensemble'), + fun = function(x) { + sd <- sqrt(var(as.vector(x), na.rm = TRUE)) + means <- mean(as.vector(x), na.rm = TRUE) + res <- apply(x, c(1,2), function(x) {(x-means)/sd})}, + ncores = recipe$Analysis$ncores)$output1 + nao$obs <- Apply(list(nao$obs), target_dims = c('syear', 'ensemble'), + fun = function(x) { + sd <- sqrt(var(as.vector(x), na.rm = TRUE)) + means <- mean(as.vector(x), na.rm = TRUE) + res <- apply(x, c(1,2), function(x) {(x-means)/sd})}, + ncores = recipe$Analysis$ncores)$output1 + nao$exp <- InsertDim(nao$exp, posdim = 1, lendim = 1, name = 'region') + nao$obs <- InsertDim(nao$obs, posdim = 1, lendim = 1, name = 'region') + hcst_dates <- data$hcst$attrs$Dates + hcst_dates <- drop(data$hcst$attrs$Dates) + + if (!("time" %in% names(dim(hcst_dates)))) { + if (is.null(dim(hcst_dates))) { + hcst_dates <- array(hcst_dates, c(syear = length(hcst_dates))) + } + hcst_dates <- InsertDim(hcst_dates, pos = 1, len = 1, name = 'time') + hcst_dates <- as.POSIXct(hcst_dates, origin = '1970-01-01', tz = 'UTC') + } + nao <- list(hcst = s2dv_cube( + data = nao$exp, + varName = "nao", + metadata = list( + region = list(name = "NAO region", + lats_range = paste0(range(lats)), + lons_range = paste0(range(lons))), + time = data$hcst$attrs$Variable$metadata$time, + nao = list(units = 'adim', + longname = '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))), + time = data$obs$attrs$Variable$metadata$time, + nao = list(units = 'adim', + longname = 'North Atlantic Oscillation')), + Dates = data$obs$attrs$Dates, + Dataset = recipe$Analysis$Datasets$Reference$name)) + if (recipe$Analysis$Workflow$Indices$NAO$save == 'all') { + file_dest <- paste0(recipe$Run$output_dir, "/outputs/Indices/") + if (tolower(recipe$Analysis$Horizon) == "seasonal") { + # Use startdates param from SaveExp to correctly name the files: + if (length(data$hcst$attrs$source_files) == dim(data$hcst$data)['syear']) { + file_dates <- Apply(data$hcst$attrs$source_files, target_dim = NULL, + fun = function(x) { + pos <- which(strsplit(x, "")[[1]] == ".") + res <- substr(x, pos-8, pos-1) + })$output1 + } + } else if (tolower(recipe$Analysis$Horizon) == "decadal"){ + file_dates <- paste0('s', + recipe$Analysis$Time$hcst_start : recipe$Analysis$Time$hcst_end) + } + # need to recover original dimensions after saving to make Skill module work + nao_original_dims_hcst <- nao$hcst$data + nao$hcst$data <- .drop_indices_dims(nao$hcst$data) + CST_SaveExp(data = nao$hcst, + destination = file_dest, + startdates = as.vector(file_dates), + dat_dim = NULL, sdate_dim = 'syear', + ftime_dim = 'time', var_dim = NULL, + memb_dim = 'ensemble') + nao_original_dims_obs <- nao$obs$data + nao$obs$data <- .drop_indices_dims(nao$obs$data) + CST_SaveExp(data = nao$obs, #res, + destination = file_dest, + startdates = as.vector(file_dates), + dat_dim = NULL, sdate_dim = 'syear', + ftime_dim = 'time', var_dim = NULL, + memb_dim = NULL) + nao$hcst$data <- nao_original_dims_hcst + nao$obs$data <- nao_original_dims_obs + nao_original_dims_hcst <- nao_original_dims_obs <- NULL + gc() + } + # Read variable long_name to plot it + conf <- yaml::read_yaml("conf/variable-dictionary.yml") + var_name <- conf$vars[[which(names(conf$vars) == + recipe$Analysis$Variables$name)]]$long + + if (plot_ts) { + dir.create(paste0(recipe$Run$output_dir, "/plots/Indices/"), + showWarnings = F, recursive = T) + source("modules/Indices/R/plot_deterministic_forecast.R") + for (tstep in 1:dim(nao$hcst$data)['time']) { + mes <- as.numeric(substr(recipe$Analysis$Time$sdate, 1,2)) + + (tstep - 1) + (recipe$Analysis$Time$ftime_min - 1) + mes <- ifelse(mes > 12, mes - 12, mes) + fmonth <- sprintf("%02d", tstep - 1 + recipe$Analysis$Time$ftime_min) + obs <- Subset(nao$obs$data, along = 'time', ind = tstep) + exp <- Subset(nao$hcst$data, along = 'time', ind = tstep) + if (gsub(".", "", recipe$Analysis$Datasets$System$name) == "") { + system <- recipe$Analysis$Datasets$System$name + } else { + system <-gsub(".", "", recipe$Analysis$Datasets$System$name) + } + if (tolower(recipe$Analysis$Horizon) == "seasonal") { + toptitle <- paste("NAO Index\n", + month.abb[mes], + "/", recipe$Analysis$Time$hcst_start, "-", + recipe$Analysis$Time$hcst_end, "\nMethod:", + ifelse(recipe$Analysis$Workflow$Indices$NAO$obsproj, + "Pobs", "Pmod"), "(Doblas-Reyes et al., 2003)") + plotfile <- paste0(recipe$Run$output_dir, "/plots/Indices/NAO_", + system, "_", recipe$Analysis$Datasets$Reference$name, + "_s", recipe$Analysis$Time$sdate, "_ftime", + sprintf("%02d", tstep - 1 + recipe$Analysis$Time$ftime_min), ".png") + caption <- paste0("NAO method: ", + ifelse(recipe$Analysis$Workflow$Indices$NAO$obsproj, + "Pobs", "Pmod"), " (Doblas-Reyes et al., 2003)\n", + "Nominal start date: 1st of ", + month.name[as.numeric(substr(recipe$Analysis$Time$sdate, 1,2))], + "\n", + "Forecast month: ", fmonth, "\n") + xlabs <- as.numeric(substr(file_dates, 1, 4)) + } else if (tolower(recipe$Analysis$Horizon) == "decadal"){ + toptitle <- paste("NAO Index\n", + "Lead time", fmonth, + " / Start dates", recipe$Analysis$Time$hcst_start, "-", + recipe$Analysis$Time$hcst_end, "\nMethod:", + ifelse(recipe$Analysis$Workflow$Indices$NAO$obsproj, + "Pobs", "Pmod"), "(Doblas-Reyes et al., 2003)") + plotfile <- paste0(recipe$Run$output_dir, "/plots/Indices/NAO_", + system, "_", recipe$Analysis$Datasets$Reference$name, + "_ftime", + sprintf("%02d", tstep - 1 + recipe$Analysis$Time$ftime_min), ".png") + caption <- paste0("NAO method: ", + ifelse(recipe$Analysis$Workflow$Indices$NAO$obsproj, + "Pobs", "Pmod"), " (Doblas-Reyes et al., 2003)\n", + "Start date month: ", + month.name[get_archive(recipe)$System[[recipe$Analysis$Datasets$System$name]]$initial_month], + "\n", + "Lead time: ", fmonth, "\n") + xlabs <- file_dates + } else { + toptitle <- NULL + warning("The plot title is not defined for this time horizon. ", + "The plots will not have a title.") + } + plot_deterministic_forecast(obs, exp, + time_dim = 'syear', + member_dim = 'ensemble', style = 'boxplot', + xlabs = xlabs, + title = toptitle, fileout = plotfile, + caption = caption, caption_line = 6.5, + legend_text = c( + recipe$Analysis$Datasets$Reference$name, + recipe$Analysis$Datasets$System$name)) + } + } + if (plot_sp) { + ## TODO: To be removed when s2dv is released: + source("modules/Visualization/R/tmp/PlotRobinson.R") + source("modules/Indices/R/correlation_eno.R") + source("modules/Visualization/R/get_proj_code.R") + dir.create(paste0(recipe$Run$output_dir, "/plots/Indices/"), + showWarnings = F, recursive = T) + # Get correct code for stereographic projection + projection_code <- get_proj_code(proj_name = "stereographic") + correl_obs <- Apply(list(data$obs$data, nao$obs$data), + target_dims = 'syear', fun = .correlation_eno, + time_dim = 'syear', method = 'pearson', alpha = alpha, + test.type = 'two-sided', pval = FALSE, + ncores = recipe$Analysis$ncores) + correl_hcst <- Apply(list(data$hcst$data, nao$hcst$data), + target_dims = c('syear', 'ensemble'), + fun = function(x, y) { + x <- apply(x, 1, mean, na.rm = TRUE) + y <- apply(y, 1, mean, na.rm = TRUE) + dim(y) <- c(syear = length(y)) + dim(x) <- c(syear = length(x)) + res <- .correlation_eno(x, y, + time_dim = 'syear', method = 'pearson', alpha = alpha, + test.type = 'two-sided', pval = FALSE)}, + ncores = recipe$Analysis$ncores) + correl_hcst_full <- Apply(list(data$hcst$data, nao$hcst$data), + target_dims = c('syear', 'ensemble'), + fun = function(x,y) { + dim(y) <- c(syear = length(y)) + dim(x) <- c(syear = length(x)) + res <- .correlation_eno(x, y, + time_dim = 'syear', method = 'pearson', alpha = alpha, + test.type = 'two-sided', pval = FALSE)}, + ncores = recipe$Analysis$ncores) + + for (tstep in 1:dim(nao$obs$data)['time']) { + fmonth <- sprintf("%02d", tstep - 1 + recipe$Analysis$Time$ftime_min) + ## Observations + map <- drop(Subset(correl_obs$r, along = 'time', ind = tstep)) + sig <- drop(Subset(correl_obs$sign, along = 'time', ind = tstep)) + if (tolower(recipe$Analysis$Horizon) == "seasonal") { + mes <- as.numeric(substr(recipe$Analysis$Time$sdate, 1,2)) + + (tstep - 1) + (recipe$Analysis$Time$ftime_min - 1) + mes <- ifelse(mes > 12, mes - 12, mes) + toptitle <- paste(recipe$Analysis$Datasets$Reference$name, "\n", + "NAO Index -",var_name, "\n", + " Correlation /", month.abb[mes], + "/", recipe$Analysis$Time$hcst_start, "-", + recipe$Analysis$Time$hcst_end) + plotfile <- paste0(recipe$Run$output_dir, "/plots/Indices/NAO_correlation_", + recipe$Analysis$Variable$name, "_", + recipe$Analysis$Datasets$Reference$name, + "_s", recipe$Analysis$Time$sdate, + "_ftime", fmonth, ".png") + caption <- paste0("NAO method: ", + ifelse(recipe$Analysis$Workflow$Indices$NAO$obsproj, + "Pobs", "Pmod"), " (Doblas-Reyes et al., 2003)\n", + "Nominal start date: 1st of ", + month.name[as.numeric(substr(recipe$Analysis$Time$sdate, 1,2))], + "\n", + "Forecast month: ", fmonth, "\n", + "Pearson correlation; alpha = ", alpha) + } else if (tolower(recipe$Analysis$Horizon) == "decadal") { + toptitle <- paste(recipe$Analysis$Datasets$Reference$name, "\n", + "NAO Index -",var_name, "\n", + " Correlation / Start dates ", + recipe$Analysis$Time$hcst_start, "-", + recipe$Analysis$Time$hcst_end) + plotfile <- paste0(recipe$Run$output_dir, "/plots/Indices/NAO_correlation_", + recipe$Analysis$Variable$name, "_", + recipe$Analysis$Datasets$Reference$name, + "_ftime", fmonth, ".png") + caption <- paste0("NAO method: ", + ifelse(recipe$Analysis$Workflow$Indices$NAO$obsproj, + "Pobs", "Pmod"), " (Doblas-Reyes et al., 2003)\n", + "Start date: month ", + month.name[get_archive(recipe)$System[[recipe$Analysis$Datasets$System$name]]$initial_month], + "\n", + "Forecast month: ", fmonth, "\n", + "Pearson correlation; alpha = ", alpha) + } else { + toptitle <- NULL + warning("The plot title is not defined for this time horizon. ", + "The plots will not have a title.") + } + if (gsub(".", "", recipe$Analysis$Datasets$System$name) == "") { + system <- recipe$Analysis$Datasets$System$name + } else { + system <- gsub(".", "", recipe$Analysis$Datasets$System$name) + } + + PlotRobinson(map, lon = lons, lat = lats, target_proj = projection_code, + lat_dim = 'latitude', lon_dim = 'longitude', + legend = 's2dv', style = 'polygon', + toptitle = toptitle, crop_coastlines = nao_region, + caption = caption, mask = sig, bar_extra_margin = c(4,0,4,0), + fileout = plotfile, width = 8, height = 6, + brks = seq(-1, 1, 0.2), cols = brewer.pal(10, 'PuOr')) + ## Ensemble-mean + map <- drop(Subset(correl_hcst$r, along = 'time', ind = tstep)) + sig <- drop(Subset(correl_hcst$sign, along = 'time', ind = tstep)) + if (tolower(recipe$Analysis$Horizon) == "seasonal") { + toptitle <- paste(recipe$Analysis$Datasets$System$name, "\n", + "NAO Index -", var_name, "\n", + " Correlation /", month.abb[mes], + "/", recipe$Analysis$Time$hcst_start, "-", + recipe$Analysis$Time$hcst_end) + plotfile <- paste0(recipe$Run$output_dir, "/plots/Indices/NAO_correlation_", + recipe$Analysis$Variable$name, "_ensmean_", + system, + "_s", recipe$Analysis$Time$sdate, + "_ftime", fmonth, ".png") + caption <- paste0("NAO method: ", + ifelse(recipe$Analysis$Workflow$Indices$NAO$obsproj, + "Pobs", "Pmod"), " (Doblas-Reyes et al., 2003)\n", + "Correlation ensemble mean\n", + "Nominal start date: 1st of ", + month.name[as.numeric(substr(recipe$Analysis$Time$sdate, 1,2))], + "\n", + "Forecast month: ", fmonth, "\n", + "Pearson correlation; alpha = ", alpha) + } else if (tolower(recipe$Analysis$Horizon) == "decadal"){ + toptitle <- paste(recipe$Analysis$Datasets$System$name,"\n", + "NAO Index -",var_name, "\n", + " Correlation / Start dates ", + recipe$Analysis$Time$hcst_start, "-", + recipe$Analysis$Time$hcst_end) + plotfile <- paste0(recipe$Run$output_dir, "/plots/Indices/NAO_correlation_", + recipe$Analysis$Variable$name, "_ensmean_", + system, + recipe$Analysis$Datasets$Reference$name, + "_ftime", fmonth, ".png") + caption <- paste0("NAO method: ", + ifelse(recipe$Analysis$Workflow$Indices$NAO$obsproj, + "Pobs", "Pmod"), " (Doblas-Reyes et al., 2003)\n", + "Correlation ensemble mean\n", + "Start date month: ", + month.name[get_archive(recipe)$System[[recipe$Analysis$Datasets$System$name]]$initial_month], + "\n", + "Forecast month: ", fmonth, "\n", + "Pearson correlation; alpha = ", alpha) + } else { + toptitle <- NULL + warning("The plot title is not defined for this time horizon. ", + "The plots will not have a title.") + } + + PlotRobinson(map, lon = lons, lat = lats, target_proj = projection_code, + lat_dim = 'latitude', lon_dim = 'longitude', + legend = 's2dv', bar_extra_margin = c(4,0,4,0), + toptitle = toptitle, style = 'polygon', + caption = caption, mask = sig, crop_coastline = nao_region, + fileout = plotfile, width = 8, height = 6, + brks = seq(-1, 1, 0.2), cols = brewer.pal(10, 'PuOr')) + + # Full hcst corr + map <- drop(Subset(correl_hcst_full$r, along = 'time', ind = tstep)) + sig <- drop(Subset(correl_hcst_full$sign, along = 'time', ind = tstep)) + if (tolower(recipe$Analysis$Horizon) == "seasonal") { + toptitle <- paste(recipe$Analysis$Datasets$System$name,"\n", + "NAO Index -",var_name, "\n", + " Correlation /", month.abb[mes], + "/", recipe$Analysis$Time$hcst_start, "-", + recipe$Analysis$Time$hcst_end) + plotfile <- paste0(recipe$Run$output_dir, "/plots/Indices/NAO_correlation_", + recipe$Analysis$Variable$name, "_member_", + system, + "_s", recipe$Analysis$Time$sdate, + "_ftime", fmonth, ".png") + caption <- paste0("NAO method: ", + ifelse(recipe$Analysis$Workflow$Indices$NAO$obsproj, + "Pobs", "Pmod"), " (Doblas-Reyes et al., 2003)\n", + "Correlation all members\n", + "Nominal start date: 1st of ", + month.name[as.numeric(substr(recipe$Analysis$Time$sdate, 1,2))], + "\n", + "Forecast month: ", fmonth, "\n", + "Pearson correlation; alpha = ", alpha) + } else if (tolower(recipe$Analysis$Horizon) == "decadal"){ + toptitle <- paste(recipe$Analysis$Datasets$System$name,"\n", + "NAO Index -",var_name, "\n", + " Correlation / Start dates ", + recipe$Analysis$Time$hcst_start, "-", + recipe$Analysis$Time$hcst_end) + plotfile <- paste0(recipe$Run$output_dir, "/plots/Indices/NAO_correlation_", + recipe$Analysis$Variable$name, "_member_", + system, + recipe$Analysis$Datasets$Reference$name, + "_ftime", fmonth, ".png") + caption <- paste0("NAO method: ", + ifelse(recipe$Analysis$Workflow$Indices$NAO$obsproj, + "Pobs", "Pmod"), " (Doblas-Reyes et al., 2003)\n", + "Correlation all members\n", + "Start date month: ", + month.name[get_archive(recipe)$System[[recipe$Analysis$Datasets$System$name]]$initial_month], + "\n", + "Forecast month: ", fmonth, "\n", + "Pearson correlation; alpha = ", alpha) + } else { + toptitle <- NULL + warning("The plot title is not defined for this time horizon. ", + "The plots will not have a title.") + } + PlotRobinson(map, lon = lons, lat = lats, target_proj = projection_code, + lat_dim = 'latitude', lon_dim = 'longitude', + legend = 's2dv', bar_extra_margin = c(4,0,4,0), + toptitle = toptitle, style = 'polygon', + caption = caption, mask = sig, crop_coastline = nao_region, + fileout = plotfile, width = 8, height = 6, + brks = seq(-1, 1, 0.2), cols = brewer.pal(10, 'PuOr')) + } # end tstep loop + } + return(nao) +} diff --git a/modules/Indices/R/compute_nino.R b/modules/Indices/R/compute_nino.R new file mode 100644 index 00000000..7ed50c65 --- /dev/null +++ b/modules/Indices/R/compute_nino.R @@ -0,0 +1,438 @@ +compute_nino <- function(data, recipe, region, standardised = TRUE, + running_mean = NULL, ftime_avg = NULL, + plot_ts = TRUE, plot_sp = TRUE, alpha = 0.5, + save = TRUE, na.rm = TRUE, logo = NULL, + ncores = NULL) { + #ftime_avg = 1:2 + if (!is.null(data$fcst)) { + warn(recipe$Run$logger, "Nino computed only for hindcast data.") + } + var <- recipe$Analysis$Variables$name + if (!(var %in% c('tos', 'sst'))) { + warn(recipe$Run$logger, "Variable name is not one of the expected sst or tos") + } + var_units <- data$hcst$attrs$Variable$metadata[[var]]$units + nino_hcst <- WeightedMean(data = data$hcst$data, + lon = as.vector(data$hcst$coords$longitude), + lat = as.vector(data$hcst$coords$latitude), + region = region, + londim = 'longitude', + latdim = 'latitude', + na.rm = na.rm, + ncores = ncores) + nino_obs <- WeightedMean(data = data$obs$data, + lon = as.vector(data$hcst$coords$longitude), + lat = as.vector(data$hcst$coords$latitude), + region = region, + londim = 'longitude', + latdim = 'latitude', + na.rm = na.rm, + ncores = ncores) + if (standardised) { + nino_hcst <- Apply(list(nino_hcst), target_dims = c('syear', 'ensemble'), + fun = function(x) { + sd <- sqrt(var(as.vector(x), na.rm = TRUE)) + means <- mean(as.vector(x), na.rm = TRUE) + res <- apply(x, c(1,2), function(x) {(x-means)/sd})}, + ncores = recipe$Analysis$ncores)$output1 + nino_obs <- Apply(list(nino_obs), target_dims = c('syear', 'ensemble'), + fun = function(x) { + sd <- sqrt(var(as.vector(x), na.rm = TRUE)) + means <- mean(as.vector(x), na.rm = TRUE) + res <- apply(x, c(1,2), function(x) {(x-means)/sd})}, + ncores = recipe$Analysis$ncores)$output1 + var_units <- 'adim' + } + if (!is.null(running_mean)) { + nino_hcst <- Smoothing(nino_hcst, + runmeanlen = running_mean, + time_dim = 'time', + ncores = ncores) + nino_obs <- Smoothing(nino_obs, + runmeanlen = running_mean, + time_dim = 'time', + ncores = ncores) + } + if (!is.null(ftime_avg)) { + if (recipe$Analysis$Variable$freq == 'monthly_mean') { + monini <- as.numeric(substr(recipe$Analysis$Time$sdate, 1, 2)) + moninf <- ftime_avg[1] + monsup <- ftime_avg[length(ftime_avg)] + nino_hcst <- Season(nino_hcst, posdim = 'time', + monini = monini, + moninf = moninf, monsup = monsup) + nino_obs <- Season(nino_obs, posdim = 'time', + monini = monini, + moninf = moninf, + monsup = monsup) + } else { + warning("'ftime_avg' only available for monthly data.") + } + } + if (all(region == c(-90, -80, -10, 0))) { + region_name <- "1+2" + nino_name <- "nino12" + } else if (all(region == c(-150, -90, -5, 5))) { + region_name <- "3" + nino_name <- "nino3" + } else if (all(region == c(-170, -120, -5, 5))) { + region_name <- "3.4" + nino_name <- "nino34" + } else if (all(region == c(160, -150, -5, 5))) { + region_name <- "4" + nino_name <- "nino4" + } else { + stop("Unknown nino region") + } + nino_hcst <- InsertDim(nino_hcst, posdim = 1, lendim = 1, name = 'region') + nino_obs <- InsertDim(nino_obs, posdim = 1, lendim = 1, name = 'region') + dims_dates_not_null <- dim(data$hcst$attrs$Dates)[which(dim(data$hcst$attrs$Dates) > 1)] + hcst_dates <- Subset(data$hcst$attrs$Dates, along = names(dims_dates_not_null), + indices = lapply(dims_dates_not_null, function(x){1:x}), + drop = "non-selected") + if (!("time" %in% names(dim(hcst_dates)))) { + hcst_dates <- InsertDim(hcst_dates, pos = 1, len = 1, name = 'time') + ## TODO: recover dates format + hcst_dates <- as.POSIXct(hcst_dates, origin = '1970-01-01', tz = 'UTC') + } + nino <- list(hcst = s2dv_cube( + 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])), + time = data$hcst$attrs$Variable$metadata$time, + nino = list(units = var_units, + longname = 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])), + time = data$obs$attrs$Variable$metadata$time, + nino = list(units = var_units, + longname = paste("El Niño", region_name, "Index"))), + Dates = data$obs$attrs$Dates, + Dataset = recipe$Analysis$Datasets$Reference$name)) + + if (save) { + file_dest <- paste0(recipe$Run$output_dir, "/outputs/Indices/") + # Use startdates param from SaveExp to correctly name the files: + if (tolower(recipe$Analysis$Horizon) == "seasonal") { + if (length(data$hcst$attrs$source_files) == dim(data$hcst$data)['syear']) { + file_dates <- Apply(data$hcst$attrs$source_files, target_dim = NULL, + fun = function(x) { + pos <- which(strsplit(x, "")[[1]] == ".") + res <- substr(x, pos-8, pos-1) + })$output1 + } + } else if (tolower(recipe$Analysis$Horizon) == "decadal"){ + file_dates <- paste0('s',recipe$Analysis$Time$hcst_start : recipe$Analysis$Time$hcst_end) + } + nino$hcst$data <- .drop_indices_dims(nino_hcst) + CST_SaveExp(data = nino$hcst, + destination = file_dest, + startdates = as.vector(file_dates), + dat_dim = NULL, sdate_dim = 'syear', + ftime_dim = 'time', var_dim = NULL, + memb_dim = 'ensemble') + res <- .drop_indices_dims(nino_obs) + if (!("time" %in% names(dim(res)))) { + res <- InsertDim(res, pos = 1, len = 1, name = 'time') + } + nino$obs$data <- res + CST_SaveExp(data = nino$obs, + destination = file_dest, + startdates = as.vector(file_dates), + dat_dim = NULL, sdate_dim = 'syear', + ftime_dim = 'time', var_dim = NULL, + memb_dim = NULL) + nino$hcst$data <- nino_hcst + nino$obs$data <- nino_obs + res <- NULL + gc() + } + # Read variable long_name to plot it + conf <- yaml::read_yaml("conf/variable-dictionary.yml") + var_name <- conf$vars[[which(names(conf$vars) == + recipe$Analysis$Variables$name)]]$long + if (plot_ts) { + dir.create(paste0(recipe$Run$output_dir, "/plots/Indices/"), + showWarnings = F, recursive = T) + source("modules/Indices/R/plot_deterministic_forecast.R") + for (tstep in 1:dim(nino$hcst$data)['time']) { + mes <- as.numeric(substr(recipe$Analysis$Time$sdate, 1,2)) + + (tstep - 1) + (recipe$Analysis$Time$ftime_min - 1) + mes <- ifelse(mes > 12, mes - 12, mes) + fmonth <- sprintf("%02d", tstep - 1 + recipe$Analysis$Time$ftime_min) + obs <- Subset(nino$obs$data, along = 'time', ind = tstep) + exp <- Subset(nino$hcst$data, along = 'time', ind = tstep) + if (gsub(".", "", recipe$Analysis$Datasets$System$name) == "") { + system <- recipe$Analysis$Datasets$System$name + } else { + system <- gsub(".", "", recipe$Analysis$Datasets$System$name) + } + if (tolower(recipe$Analysis$Horizon) == "seasonal") { + toptitle <- paste("Ni\u00F1o", region_name, "SST Index\n", + month.abb[mes], + "/", recipe$Analysis$Time$hcst_start, "-", + recipe$Analysis$Time$hcst_end) + plotfile <- paste0(recipe$Run$output_dir, "/plots/Indices/", + nino_name, "_", + system, "_", recipe$Analysis$Datasets$Reference$name, + "_s", recipe$Analysis$Time$sdate, "_ftime", + sprintf("%02d", tstep - 1 + recipe$Analysis$Time$ftime_min), + ".png") + caption <- paste0("Nominal start date: 1st of ", + month.name[as.numeric(substr(recipe$Analysis$Time$sdate, 1,2))], + "\n", + "Forecast month: ", fmonth) + xlabs = as.numeric(substr(file_dates, 1, 4)) + } else if (tolower(recipe$Analysis$Horizon) == "decadal") { + toptitle <- paste("Ni\u00F1o", region_name, "SST Index\n", + "Lead time", fmonth, + "/", recipe$Analysis$Time$hcst_start, "-", + recipe$Analysis$Time$hcst_end) + plotfile <- paste0(recipe$Run$output_dir, "/plots/Indices/", nino_name, "_", + system, "_", recipe$Analysis$Datasets$Reference$name, + "_ftime", + sprintf("%02d", tstep - 1 + recipe$Analysis$Time$ftime_min), ".png") + caption <- paste0("Start date month: ", + month.name[get_archive(recipe)$System[[recipe$Analysis$Datasets$System$name]]$initial_month], + "\n", + "Lead time: ", fmonth, "\n") + xlabs <- substr(file_dates, 2,5) + } else { + toptitle <- NULL + warning("The plot title is not defined for this time horizon. ", + "The plots will not have a title.") + } + plot_deterministic_forecast(obs, exp, + time_dim = 'syear', + member_dim = 'ensemble', style = 'boxplot', + xlabs = xlabs, + ylab = var_units, + title = toptitle, fileout = plotfile, + caption = caption, + legend_text = c( + recipe$Analysis$Datasets$Reference$name, + recipe$Analysis$Datasets$System$name)) + } + } + if (plot_sp) { + source("modules/Visualization/R/tmp/PlotRobinson.R") + source("modules/Indices/R/correlation_eno.R") + source("modules/Visualization/R/get_proj_code.R") + lons <- data$hcst$coords$longitude + lats <- data$hcst$coords$latitude + # Get code for Robinson projection depending on GEOS/GDAL/PROJ version + projection_code <- get_proj_code("robinson") + # Avoid rewriten longitudes a shift is neeced: + dir.create(paste0(recipe$Run$output_dir, "/plots/Indices/"), + showWarnings = F, recursive = T) + correl_obs <- Apply(list(data$obs$data, nino$obs$data), + target_dims = 'syear', + fun = .correlation_eno, + time_dim = 'syear', method = 'pearson', alpha = alpha, + test.type = 'two-sided', pval = FALSE, + ncores = recipe$Analysis$ncores) + correl_hcst <- Apply(list(data$hcst$data, nino$hcst$data), + target_dims = c('syear', 'ensemble'), + fun = function(x, y) { + x <- apply(x, 1, mean, na.rm = TRUE) + y <- apply(y, 1, mean, na.rm = TRUE) + dim(y) <- c(syear = length(y)) + dim(x) <- c(syear = length(x)) + res <- .correlation_eno(x, y, + time_dim = 'syear', method = 'pearson', alpha = alpha, + test.type = 'two-sided', pval = FALSE)}, + ncores = recipe$Analysis$ncores) + correl_hcst_full <- Apply(list(data$hcst$data, nino$hcst$data), + target_dims = c('syear', 'ensemble'), + fun = function(x,y) { + dim(y) <- c(syear = length(y)) + dim(x) <- c(syear = length(x)) + res <- .correlation_eno(x, y, + time_dim = 'syear', method = 'pearson', alpha = alpha, + test.type = 'two-sided', pval = FALSE)}, + ncores = recipe$Analysis$ncores) + for (tstep in 1:dim(nino$obs$data)['time']) { + map <- Subset(correl_obs$r, along = 'time', ind = tstep, drop = T) + sig <- Subset(correl_obs$sig, along = 'time', ind = tstep, drop = T) + if (tolower(recipe$Analysis$Horizon) == "seasonal") { + mes <- as.numeric(substr(recipe$Analysis$Time$sdate, 1,2)) + + (tstep - 1) + (recipe$Analysis$Time$ftime_min - 1) + mes <- ifelse(mes > 12, mes - 12, mes) + fmonth <- sprintf("%02d", tstep - 1 + recipe$Analysis$Time$ftime_min) + toptitle <- paste(recipe$Analysis$Datasets$Reference$name, "\n", + "Ni\u00F1o", region_name, "SST Index -",var_name, "\n", + " Correlation /", + month.abb[mes], + "/", recipe$Analysis$Time$hcst_start, "-", + recipe$Analysis$Time$hcst_end) + plotfile <- paste0(recipe$Run$output_dir, "/plots/Indices/", nino_name, + "_correlation_", + recipe$Analysis$Variable$name, "_", + recipe$Analysis$Datasets$Reference$name, + "_s", recipe$Analysis$Time$sdate, + "_ftime", fmonth, ".png") + caption <- paste0("Nominal start date: 1st of ", + month.name[as.numeric(substr(recipe$Analysis$Time$sdate, 1,2))], + "\n", + "Forecast month: ", fmonth, "\n", + "Pearson correlation ; alpha = ", alpha) + } else if (tolower(recipe$Analysis$Horizon) == "decadal") { + fmonth <- sprintf("%02d", tstep - 1 + recipe$Analysis$Time$ftime_min) + toptitle <- paste(recipe$Analysis$Datasets$Reference$name, "\n", + "Ni\u00F1o", region_name, "SST Index -",var_name, "\n", + "Correlation / Start dates", + recipe$Analysis$Time$hcst_start, "-", + recipe$Analysis$Time$hcst_end) + plotfile <- paste0(recipe$Run$output_dir, "/plots/Indices/", + nino_name, "_correlation_", + recipe$Analysis$Variable$name, "_", + recipe$Analysis$Datasets$Reference$name, + "_ftime", fmonth, ".png") + caption <- paste0("Start date: month ", + month.name[get_archive(recipe)$System[[recipe$Analysis$Datasets$System$name]]$initial_month], + "\n", + "Forecast month: ", fmonth, "\n", + "Pearson correlation; alpha = ", alpha) + } else { + toptitle <- NULL + warning("The plot title is not defined for this time horizon. ", + "The plots will not have a title.") + } + + PlotRobinson(map, lon = lons, lat = lats, + target_proj = projection_code, #"ESRI:54030", + lat_dim = 'latitude', lon_dim = 'longitude', + legend = 's2dv', style = 'point', + toptitle = toptitle, bar_extra_margin = c(4,0,4,0), + caption = caption, mask = sig, + fileout = plotfile, width = 8, height = 6, + brks = seq(-1, 1, 0.2), cols = brewer.pal(10, 'PuOr')) + + ## Ensemble-mean + map <- Subset(correl_hcst$r, along = 'time', ind = tstep) + sig <- Subset(correl_hcst$sig, along = 'time', ind = tstep) + if (gsub(".", "", recipe$Analysis$Datasets$System$name) == "") { + system <- recipe$Analysis$Datasets$System$name + } else { + system <-gsub(".", "", recipe$Analysis$Datasets$System$name) + } + if (tolower(recipe$Analysis$Horizon) == "seasonal") { + toptitle <- paste(recipe$Analysis$Datasets$System$name, "\n", + "Ni\u00F1o", region_name, "SST Index -",var_name, "\n", + "Correlation /", + month.abb[as.numeric(fmonth)], + "/", recipe$Analysis$Time$hcst_start, "-", + recipe$Analysis$Time$hcst_end) + plotfile <- paste0(recipe$Run$output_dir, "/plots/Indices/", + nino_name, "_correlation_", + recipe$Analysis$Variable$name, "_ensmean_", + system, + "_s", recipe$Analysis$Time$sdate, + "_ftime", fmonth, ".png") + caption <- paste0("Ensemble mean\n", + "Nominal start date: 1st of ", + month.name[as.numeric(substr(recipe$Analysis$Time$sdate, 1,2))], + "\n", + "Forecast month: ", fmonth, "\n", + "Pearson correlation ; alpha = ", alpha) + } else if (tolower(recipe$Analysis$Horizon) == "decadal"){ + toptitle <- paste(recipe$Analysis$Datasets$System$name, "\n", + "Ni\u00F1o", region_name, "SST Index -",var_name, "\n", + "Correlation / Start dates", + recipe$Analysis$Time$hcst_start, "-", + recipe$Analysis$Time$hcst_end) + plotfile <- paste0(recipe$Run$output_dir, "/plots/Indices/", + nino_name, "_correlation_", + recipe$Analysis$Variable$name, "_ensmean_", + system, + recipe$Analysis$Datasets$Reference$name, + "_ftime", fmonth, ".png") + caption <- paste0("Correlation ensemble mean\n", + "Start date month: ", + month.name[get_archive(recipe)$System[[recipe$Analysis$Datasets$System$name]]$initial_month], + "\n", + "Forecast month: ", fmonth, "\n", + "Pearson correlation; alpha = ", alpha) + } else { + toptitle <- NULL + warning("The plot title is not defined for this time horizon. ", + "The plots will not have a title.") + } + PlotRobinson(map, lon = lons, lat = lats, + target_proj = projection_code, #"ESRI:54030", + lat_dim = 'latitude', lon_dim = 'longitude', + legend = 's2dv', style = 'point', + toptitle = toptitle, bar_extra_margin = c(4,0,4,0), + caption = caption, mask = sig, + fileout = plotfile, width = 8, height = 6, + brks = seq(-1, 1, 0.2), cols = brewer.pal(10, 'PuOr')) + + # Full hcst corr + map <- Subset(correl_hcst_full$r, along = 'time', ind = tstep) + sig <- Subset(correl_hcst_full$sig, along = 'time', ind = tstep) + if (tolower(recipe$Analysis$Horizon) == "seasonal") { + toptitle <- paste(recipe$Analysis$Datasets$System$name, "\n", + "Ni\u00F1o", region_name, "SST Index -",var_name, "\n", + " Correlation /", + month.abb[as.numeric(fmonth)], + "/", recipe$Analysis$Time$hcst_start, "-", + recipe$Analysis$Time$hcst_end) + plotfile <- paste0(recipe$Run$output_dir, "/plots/Indices/", + nino_name, "_correlation_", + recipe$Analysis$Variable$name, "_member_", + system, + "_s", recipe$Analysis$Time$sdate, + "_ftime", fmonth, ".png") + caption <- paste0("Individual members\n", + "Nominal start date: 1st of ", + month.name[as.numeric(substr(recipe$Analysis$Time$sdate, 1,2))], + "\n", + "Forecast month: ", fmonth, "\n", + "Pearson correlation ; alpha = ", alpha) + } else if (tolower(recipe$Analysis$Horizon) == "decadal"){ + toptitle <- paste(recipe$Analysis$Datasets$System$name, "\n", + "Ni\u00F1o", region_name, "SST Index -",var_name, "\n", + "Correlation / Start dates", + recipe$Analysis$Time$hcst_start, "-", + recipe$Analysis$Time$hcst_end) + plotfile <- paste0(recipe$Run$output_dir, "/plots/Indices/", + nino_name, "_correlation_", + recipe$Analysis$Variable$name, "_ensmean_", + system, + recipe$Analysis$Datasets$Reference$name, + "_ftime", fmonth, ".png") + caption <- paste0("Correlation ensemble mean\n", + "Start date month: ", + month.name[get_archive(recipe)$System[[recipe$Analysis$Datasets$System$name]]$initial_month], + "\n", + "Forecast month: ", fmonth, "\n", + "Pearson correlation; alpha = ", alpha) + } else { + toptitle <- NULL + warning("The plot title is not defined for this time horizon. ", + "The plots will not have a title.") + } + PlotRobinson(map, lon = lons, lat = lats, + target_proj = projection_code, #"ESRI:54030", + lat_dim = 'latitude', lon_dim = 'longitude', + legend = 's2dv', style = 'point', + toptitle = toptitle, bar_extra_margin = c(4,0,4,0), + caption = caption, mask = sig, + fileout = plotfile, width = 8, height = 6, + brks = seq(-1, 1, 0.2), cols = brewer.pal(10, 'PuOr')) + + + } + } + return(nino) +} diff --git a/modules/Indices/R/correlation_eno.R b/modules/Indices/R/correlation_eno.R new file mode 100644 index 00000000..62a3d92b --- /dev/null +++ b/modules/Indices/R/correlation_eno.R @@ -0,0 +1,45 @@ +.correlation_eno <- function(exp, obs, time_dim, method, alpha, test.type, pval){ + + cor <- NULL + cor$r = cor(x = exp, y = obs, method = method) # Correlation coefficient + + n_eff = s2dv::Eno(data = obs, time_dim = time_dim, na.action = na.pass, ncores = 1) + + if (test.type == 'one-sided'){ + + t_alpha_n2 = qt(p=alpha, df = n_eff-2, lower.tail = FALSE) + t = cor$r * sqrt(n_eff-2) / sqrt(1-cor$r^2) + + if (anyNA(c(t,t_alpha_n2)) == FALSE & t >= t_alpha_n2 & cor$r > 0){ + cor$sign = TRUE + } else { + cor$sign = FALSE + } + + # cor$n_eff <- n_eff + + if (isTRUE(pval)){ + cor$pval <- pt(q = t, df = n_eff-2, lower.tail = FALSE) + } + + } else if (test.type == 'two-sided'){ + + t_alpha2_n2 = qt(p=alpha/2, df = n_eff-2, lower.tail = FALSE) + t = abs(cor$r) * sqrt(n_eff-2) / sqrt(1-cor$r^2) + + if (anyNA(c(t,t_alpha2_n2)) == FALSE & t >= t_alpha2_n2){ + cor$sign = TRUE + } else { + cor$sign = FALSE + } + + cor$n_eff <- n_eff + + if (isTRUE(pval)){ + cor$pval <- 2 * pt(q = t, df = n_eff-2, lower.tail = FALSE) + } + + } else {stop('test.type not supported')} + + return(cor) +} diff --git a/modules/Indices/R/drop_indices_dims.R b/modules/Indices/R/drop_indices_dims.R new file mode 100644 index 00000000..aab97a17 --- /dev/null +++ b/modules/Indices/R/drop_indices_dims.R @@ -0,0 +1,87 @@ +# version victoria https://earth.bsc.es/gitlab/es/auto-s2s/-/blob/dev-Loading-multivar/modules/Skill/Skill.R +# metric_array is in this case the index +.drop_indices_dims <- function(metric_array) { + # Define dimensions that are not essential for saving + droppable_dims <- c("var", "dat", "sday", "sweek", "ensemble", "nobs", + "nexp", "exp_memb", "obs_memb", "bin") + # Select non-essential dimensions of length 1 + dims_to_drop <- intersect(names(which(dim(metric_array) == 1)), + droppable_dims) + drop_indices <- grep(paste(dims_to_drop, collapse = "|"), + names(dim(metric_array))) + # Drop selected dimensions + metric_array <- abind::adrop(metric_array, drop = drop_indices) + # If array has memb dim (Corr case), change name to 'ensemble' + if ("exp_memb" %in% names(dim(metric_array))) { + names(dim(metric_array))[which(names(dim(metric_array)) == + "exp_memb")] <- "ensemble" + } + return(metric_array) +} + + + + + +## TODO: Replace with ClimProjDiags::Subset and add var and dat dimensions +#.drop_dims <- function(metric_array) { +# # Drop all singleton dimensions +# dims <- dim(metric_array) +# metric_array <- drop(metric_array) +# if ("region" %in% names(dims)) { +# if (!is.array(metric_array)) { +# dim(metric_array) <- length(metric_array) +# if (!all(dims > 1)) { +# if ("syear" %in% names(dims)) { +# names(dim(metric_array)) <- "syear" +# } else { +# names(dim(metric_array)) <- "time" +# } +# } else { +# names(dim(metric_array)) <- names(dims[which(dims > 1)]) +# } +# } +# if (!("time" %in% names(dim(metric_array)))) { +# dim(metric_array) <- c("time" = 1, dim(metric_array)) +# } +# # If latitude was singleton, add it back +# if (!("region" %in% names(dim(metric_array)))) { +# dim(metric_array) <- c(dim(metric_array), "region" = 1) +# } +# # If array has memb dim (Corr case), change name to 'ensemble' +# if ("exp_memb" %in% names(dim(metric_array))) { +# names(dim(metric_array))[which(names(dim(metric_array)) == +# "exp_memb")] <- "ensemble" +# } +# } else if (all(c("latitude", "longiguted") %in% names(dims))) { +# # If the array becomes a vector as a result, restore dimensions. +# ## This applies to the case of 'corr' with one lon and one lat +# if (!is.array(metric_array)) { +# dim(metric_array) <- length(metric_array) +# names(dim(metric_array)) <- names(dims[which(dims > 1)]) +# } +# # If the array becomes a vector as a result, restore dimensions. +# ## This applies to the case of 'corr' with one lon and one lat +# # If time happened to be a singleton dimension, add it back in the array +# if (!("time" %in% names(dim(metric_array)))) { +# dim(metric_array) <- c("time" = 1, dim(metric_array)) +# } +# # If latitude was singleton, add it back +# if (!("latitude" %in% names(dim(metric_array)))) { +# dim(metric_array) <- c(dim(metric_array), "latitude" = 1) +# } +# # If longitude was singleton, add it back +# if (!("longitude" %in% names(dim(metric_array)))) { +# dim(metric_array) <- c(dim(metric_array), "longitude" = 1) +# } +# # If array has memb dim (Corr case), change name to 'ensemble' +# if ("exp_memb" %in% names(dim(metric_array))) { +# names(dim(metric_array))[which(names(dim(metric_array)) == +# "exp_memb")] <- "ensemble" +# } else { +# stop("what dimensions") +# } +# } +# return(metric_array) +#} + diff --git a/modules/Indices/R/plot_deterministic_forecast.R b/modules/Indices/R/plot_deterministic_forecast.R new file mode 100644 index 00000000..da107e47 --- /dev/null +++ b/modules/Indices/R/plot_deterministic_forecast.R @@ -0,0 +1,176 @@ + +plot_deterministic_forecast <- function(obs, fcst, title = NULL, + xlabs = NULL, ylab = '', ylims = NULL, + xlabs_pos = NULL, ylabs_pos = NULL, + style = 'shading', col_obs = 'black', + col_hcst = 'blue', col_fcst = 'red', + member_dim = 'member', + time_dim = 'year', + logo = NULL, caption = NULL, + caption_line = NULL, + legend_text = c('Observations', 'Hindcast', + 'Forecast'), + width = 1010, height = 510, res = NA, + fileout = NULL) { + n_obs <- as.numeric(dim(obs)[time_dim]) + n_fcst <- as.numeric(dim(fcst)[time_dim]) + + if (is.null(ylims)) { + ylims <- c(-max(abs(fcst) + 0.1, abs(obs) + 0.1, na.rm = TRUE), + max(abs(fcst) + 0.1, abs(obs) + 0.1, na.rm = TRUE)) + } + if (is.null(xlabs)) { + xlabs <- 1:n_fcst + } + if (is.null(xlabs_pos)) { + xlabs_pos <- -2 + seq(from = 1, to = n_fcst, by = 5) + } + if (is.null(ylabs_pos)) { + ylabs_pos <- ylims[1] - 0.045 + par('usr')[3] + } + ## Opening the output file + if (!is.null(fileout)) { + png(filename = fileout, width = width, height = height, res = res) + } + if (identical(style, 'boxplot')) { + if (!is.null(legend_text)) { + right_mar <- max(c(nchar(legend_text), 8)) + 1 + } else { + right_mar <- 8 + } + par(mar = c(7, 4.1, 4.1, right_mar)) + } + ## Empty figure with the labs + plot(x = 1:n_fcst, y = rep(0,n_fcst), col = col_obs, type = 'l', lwd = 1, + xlab = '', ylab = ylab, main = title, xlim = c(1,n_fcst), ylim = ylims, + cex.lab = 1.2, cex.main = 1.2, cex.axis = 1.2, frame.plot = TRUE, + xaxt = 'n') + axis(1, at = 1:n_fcst, labels = xlabs, cex = 1.5) + #text(cex = 1.2, x = xlabs_pos, y = ylabs_pos, labels = xlabs[seq(from = 1, to = n_fcst, by = 5)], srt = 45, pos = 1, xpd = TRUE) + + ## Auxiliary lines + abline(h = 0, lw = 1) + abline(v = seq(from = 1, to = n_fcst, by = 5), lty = 2, lwd = 1, col = 'grey') + #abline(h = seq(from = floor(ylims[1]), to = ceiling(ylims[2]), by = 1), lty = 2, col = 'grey') + ## Ensemble spread + if (identical(style, 'boxplot')) { + ## Hindcast + for (y in 1:n_obs) { + boxplot(x = ClimProjDiags::Subset(x = fcst, + along = time_dim, + indices = y, + drop = 'selected'), + at = y, notch = FALSE, range = 0, add = TRUE, + col = adjustcolor(col_hcst, alpha.f = 0.60), + boxwex = 1, axes = F) + } + ## Forecast + if (n_fcst > n_obs) { + for (y in (n_obs+1):n_fcst) { + boxplot(x = ClimProjDiags::Subset(x = fcst, + along = time_dim, + indices = y, + drop = 'selected'), + at = y, notch = FALSE, range = 0, add = TRUE, + col = adjustcolor(col_fcst, alpha.f = 0.60), + boxwex = 1, axes = F) + } + } + } else if (identical(style, 'shading')) { + fcst_quantiles <- multiApply::Apply(data = fcst, target_dims = member_dim, + fun = function(x) {quantile(x = as.vector(x), type = 8, na.rm = FALSE)}, + ncores = 1)$output1 + ## Hindcast + polygon(x = c(1:n_obs, rev(1:n_obs)), + y = c(fcst_quantiles[4,1:n_obs], rev(fcst_quantiles[5,1:n_obs])), + col = adjustcolor(col_hcst, alpha.f = 0.10), + border = NA) + polygon(x = c(1:n_obs, rev(1:n_obs)), + y = c(fcst_quantiles[2,1:n_obs], rev(fcst_quantiles[4,1:n_obs])), + col = adjustcolor(col_hcst, alpha.f = 0.30), + border = NA) + polygon(x = c(1:n_obs, rev(1:n_obs)), + y = c(fcst_quantiles[1,1:n_obs], + rev(fcst_quantiles[2,1:n_obs])), + col = adjustcolor(col_hcst, alpha.f = 0.10), + border = NA) + ## Forecast + if (n_fcst > n_obs){ + polygon(x = c((n_obs):n_fcst, rev((n_obs):n_fcst)), + y = c(fcst_quantiles[4,(n_obs):n_fcst], + rev(fcst_quantiles[5,(n_obs):n_fcst])), + col = adjustcolor(col_fcst, alpha.f = 0.10), + border = NA) + polygon(x = c((n_obs):n_fcst, rev((n_obs):n_fcst)), + y = c(fcst_quantiles[2,(n_obs):n_fcst], + rev(fcst_quantiles[4,(n_obs):n_fcst])), + col = adjustcolor(col_fcst, alpha.f = 0.30), + border = NA) + polygon(x = c((n_obs):n_fcst, rev((n_obs):n_fcst)), + y = c(fcst_quantiles[1,(n_obs):n_fcst], + rev(fcst_quantiles[2,(n_obs):n_fcst])), + col = adjustcolor(col_fcst, alpha.f = 0.10), + border = NA) + } + ## NOTEV: What is 'fsct_stype'? + } else {stop('fcst_stype must be either boxplot or shading')} + + ## Observations + lines(x = 1:n_obs, y = obs, col = col_obs, lty = 'solid', lwd = 5) + + ## Ensemble mean + ## Hindcast + lines(x = 1:n_obs, + y = multiApply::Apply(data = fcst, + target_dims = member_dim, + fun = mean, + na.rm = FALSE, + ncores = 1)$output1[1:n_obs], + col = col_hcst, type = 'l', lwd = 5) + ## Forecast + if (n_fcst > n_obs) { + lines(x = (n_obs):n_fcst, + y = multiApply::Apply(data = fcst, + target_dims = member_dim, + fun = mean, + na.rm = FALSE, + ncores = 1)$output1[(n_obs):n_fcst], + col = col_fcst, type = 'l', lwd = 5) + } + + ## Legend with the skill scores + if (!is.null(legend)) { + par(xpd = TRUE) + legend(par('usr')[2], par('usr')[4],#x = 1, y = ylims[2], + text.col = c(col_obs, col_hcst), cex = 1.2, + legend = legend_text[1:2], lty = 1, lwd = 3, + col = c(col_obs, col_hcst, bg="transparent"), bty = 'n') + } + if (!is.null(caption)) { + if (is.null(caption_line)) { + caption_line <- 4.5 + } + mtext(caption, side = 1, line = caption_line, cex = 1.2, adj = 0) + } + if (identical(style, 'boxplot')){ + if (!is.null(logo)) { + rasterImage(logo, ybottom = par('usr')[3] - 2, ytop = par('usr')[3] - 1.1, #ylims[2] + 2, + xleft = par('usr')[2] - 1.5 , + xright = par('usr')[2] + dim(logo)[2]/dim(logo)[1] * width/height, xpd = T) + } + data_samp <- 1:100 + data_samp <- (data_samp - mean(data_samp))/ sqrt(var(data_samp)) + par(xpd = T) + box_params <- boxplot(data_samp, add = T, at = par('usr')[2] + n_fcst * 0.1) + text(x = par('usr')[2] + n_fcst * 0.1 + .5, y = box_params$stats[1,], "Minimum", adj = c(0,0)) + text(x = par('usr')[2] + n_fcst * 0.1 + .5, y = box_params$stats[2,], "Q1", adj = c(0,0)) + text(x = par('usr')[2] + n_fcst * 0.1 + .5, y = box_params$stats[3,], "Median", adj = c(0,0)) + text(x = par('usr')[2] + n_fcst * 0.1 + .5, y = box_params$stats[4,], "Q3", adj = c(0,0)) + text(x = par('usr')[2] + n_fcst * 0.1 + .5, y = box_params$stats[5,], "Maximum", adj = c(0,0)) + } + + ## Closing the output file + if (!is.null(fileout)){dev.off()} + +} + diff --git a/modules/Saving/R/drop_dims.R b/modules/Saving/R/drop_dims.R new file mode 100644 index 00000000..7361faa8 --- /dev/null +++ b/modules/Saving/R/drop_dims.R @@ -0,0 +1,86 @@ +# version victoria https://earth.bsc.es/gitlab/es/auto-s2s/-/blob/dev-Loading-multivar/modules/Skill/Skill.R +.drop_dims <- function(metric_array) { + # Define dimensions that are not essential for saving + droppable_dims <- c("dat", "sday", "sweek", "ensemble", "nobs", + "nexp", "exp_memb", "obs_memb", "bin") + # Select non-essential dimensions of length 1 + dims_to_drop <- intersect(names(which(dim(metric_array) == 1)), + droppable_dims) + drop_indices <- grep(paste(dims_to_drop, collapse = "|"), + names(dim(metric_array))) + # Drop selected dimensions + metric_array <- abind::adrop(metric_array, drop = drop_indices) + # If array has memb dim (Corr case), change name to 'ensemble' + if ("exp_memb" %in% names(dim(metric_array))) { + names(dim(metric_array))[which(names(dim(metric_array)) == + "exp_memb")] <- "ensemble" + } + return(metric_array) +} + + + + + +## TODO: Replace with ClimProjDiags::Subset and add var and dat dimensions +#.drop_dims <- function(metric_array) { +# # Drop all singleton dimensions +# dims <- dim(metric_array) +# metric_array <- drop(metric_array) +# if ("region" %in% names(dims)) { +# if (!is.array(metric_array)) { +# dim(metric_array) <- length(metric_array) +# if (!all(dims > 1)) { +# if ("syear" %in% names(dims)) { +# names(dim(metric_array)) <- "syear" +# } else { +# names(dim(metric_array)) <- "time" +# } +# } else { +# names(dim(metric_array)) <- names(dims[which(dims > 1)]) +# } +# } +# if (!("time" %in% names(dim(metric_array)))) { +# dim(metric_array) <- c("time" = 1, dim(metric_array)) +# } +# # If latitude was singleton, add it back +# if (!("region" %in% names(dim(metric_array)))) { +# dim(metric_array) <- c(dim(metric_array), "region" = 1) +# } +# # If array has memb dim (Corr case), change name to 'ensemble' +# if ("exp_memb" %in% names(dim(metric_array))) { +# names(dim(metric_array))[which(names(dim(metric_array)) == +# "exp_memb")] <- "ensemble" +# } +# } else if (all(c("latitude", "longiguted") %in% names(dims))) { +# # If the array becomes a vector as a result, restore dimensions. +# ## This applies to the case of 'corr' with one lon and one lat +# if (!is.array(metric_array)) { +# dim(metric_array) <- length(metric_array) +# names(dim(metric_array)) <- names(dims[which(dims > 1)]) +# } +# # If the array becomes a vector as a result, restore dimensions. +# ## This applies to the case of 'corr' with one lon and one lat +# # If time happened to be a singleton dimension, add it back in the array +# if (!("time" %in% names(dim(metric_array)))) { +# dim(metric_array) <- c("time" = 1, dim(metric_array)) +# } +# # If latitude was singleton, add it back +# if (!("latitude" %in% names(dim(metric_array)))) { +# dim(metric_array) <- c(dim(metric_array), "latitude" = 1) +# } +# # If longitude was singleton, add it back +# if (!("longitude" %in% names(dim(metric_array)))) { +# dim(metric_array) <- c(dim(metric_array), "longitude" = 1) +# } +# # If array has memb dim (Corr case), change name to 'ensemble' +# if ("exp_memb" %in% names(dim(metric_array))) { +# names(dim(metric_array))[which(names(dim(metric_array)) == +# "exp_memb")] <- "ensemble" +# } else { +# stop("what dimensions") +# } +# } +# return(metric_array) +#} + diff --git a/modules/Saving/R/get_filename.R b/modules/Saving/R/get_filename.R index 1c925651..f18a6fb4 100644 --- a/modules/Saving/R/get_filename.R +++ b/modules/Saving/R/get_filename.R @@ -17,7 +17,8 @@ get_filename <- function(dir, recipe, var, date, agg, file.type) { switch(tolower(agg), "country" = {gg <- "-country"}, - "global" = {gg <- ""}) + "global" = {gg <- ""}, + "region" = {gg <- "-region"}) system <- gsub('.','', recipe$Analysis$Datasets$System$name, fixed = T) reference <- gsub('.','', recipe$Analysis$Datasets$Reference$name, fixed = T) diff --git a/modules/Saving/R/get_global_attributes.R b/modules/Saving/R/get_global_attributes.R new file mode 100644 index 00000000..25c47279 --- /dev/null +++ b/modules/Saving/R/get_global_attributes.R @@ -0,0 +1,20 @@ +get_global_attributes <- function(recipe, archive) { + # Generates metadata of interest to add to the global attributes of the + # netCDF files. + parameters <- recipe$Analysis + hcst_period <- paste0(parameters$Time$hcst_start, " to ", + parameters$Time$hcst_end) + current_time <- paste0(as.character(Sys.time()), " ", Sys.timezone()) + system_name <- parameters$Datasets$System$name + reference_name <- parameters$Datasets$Reference$name + + attrs <- list(reference_period = hcst_period, + institution_system = archive$System[[system_name]]$institution, + institution_reference = archive$Reference[[reference_name]]$institution, + system = system_name, + reference = reference_name, + calibration_method = parameters$Workflow$Calibration$method, + computed_on = current_time) + + return(attrs) +} diff --git a/modules/Saving/R/get_latlon.R b/modules/Saving/R/get_latlon.R new file mode 100644 index 00000000..25d53638 --- /dev/null +++ b/modules/Saving/R/get_latlon.R @@ -0,0 +1,17 @@ +get_latlon <- function(latitude, longitude) { + # Adds dimensions and metadata to lat and lon + # latitude: array containing the latitude values + # longitude: array containing the longitude values + dim(longitude) <- length(longitude) + metadata <- list(longitude = list(units = 'degrees_east')) + attr(longitude, 'variables') <- metadata + names(dim(longitude)) <- 'longitude' + + dim(latitude) <- length(latitude) + metadata <- list(latitude = list(units = 'degrees_north')) + attr(latitude, 'variables') <- metadata + names(dim(latitude)) <- 'latitude' + + return(list(lat=latitude, lon=longitude)) + +} diff --git a/modules/Saving/R/get_time.R b/modules/Saving/R/get_time.R new file mode 100644 index 00000000..5426c177 --- /dev/null +++ b/modules/Saving/R/get_time.R @@ -0,0 +1,30 @@ +get_times <- function(store.freq, fcst.horizon, leadtimes, sdate, calendar) { + # Generates time dimensions and the corresponding metadata. + ## TODO: Subseasonal + + switch(fcst.horizon, + "seasonal" = {time <- leadtimes; ref <- 'hours since '; + stdname <- paste(strtoi(leadtimes), collapse=", ")}, + "subseasonal" = {len <- 4; ref <- 'hours since '; + stdname <- ''}, + "decadal" = {time <- leadtimes; ref <- 'hours since '; + stdname <- paste(strtoi(leadtimes), collapse=", ")}) + + dim(time) <- length(time) + sdate <- as.Date(sdate, format = '%Y%m%d') # reformatting + metadata <- list(time = list(units = paste0(ref, sdate, 'T00:00:00'), + calendar = calendar)) + attr(time, 'variables') <- metadata + names(dim(time)) <- 'time' + + sdate <- 1:length(sdate) + dim(sdate) <- length(sdate) + metadata <- list(sdate = list(standard_name = paste(strtoi(sdate), + collapse=", "), + units = paste0('Init date'))) + attr(sdate, 'variables') <- metadata + names(dim(sdate)) <- 'sdate' + + return(list(time=time)) +} + diff --git a/modules/Saving/R/save_metrics.R b/modules/Saving/R/save_metrics.R index 609537c0..a232d890 100644 --- a/modules/Saving/R/save_metrics.R +++ b/modules/Saving/R/save_metrics.R @@ -1,17 +1,16 @@ save_metrics <- function(recipe, skill, + dictionary = NULL, data_cube, agg = "global", outdir = NULL) { # This function adds metadata to the skill metrics in 'skill' # and exports them to a netCDF file inside 'outdir'. - # Define grid dimensions and names lalo <- c('longitude', 'latitude') archive <- get_archive(recipe) dictionary <- read_yaml("conf/variable-dictionary.yml") - # Add global and variable attributes global_attributes <- .get_global_attributes(recipe, archive) ## TODO: Sort out the logic once default behavior is decided if ((!is.null(recipe$Analysis$Workflow$Anomalies$compute)) && @@ -22,7 +21,6 @@ save_metrics <- function(recipe, global_attributes <- c(list(from_anomalies = "No"), global_attributes) } - # Time indices and metadata fcst.horizon <- tolower(recipe$Analysis$Horizon) store.freq <- recipe$Analysis$Variables$freq @@ -67,7 +65,6 @@ save_metrics <- function(recipe, times <- .get_times(store.freq, fcst.horizon, leadtimes, fcst.sdate, calendar) time <- times$time - # Loop over variable dimension for (var in 1:data_cube$dims[['var']]) { # Subset skill arrays @@ -98,6 +95,9 @@ save_metrics <- function(recipe, if (tolower(agg) == "country") { sdname <- paste0(metric, " region-aggregated metric") dims <- c('Country', 'time') + } else if (tolower(agg) == "region") { + sdname <- paste0(metric, " region-aggregated metric") + dims <- c('region', 'time') } else { sdname <- paste0(metric) dims <- c(lalo, 'time') @@ -113,6 +113,14 @@ save_metrics <- function(recipe, if (tolower(agg) == "country") { country <- get_countries(grid) ArrayToNc(append(country, time, subset_skill), outfile) + } else if (tolower(agg) == "region") { + region <- array(1:dim(skill[[1]])['region'], c(dim(skill[[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 + vars <- list(region, time) + vars <- c(vars, subset_skill) + ArrayToNc(vars, outfile) } else { latitude <- data_cube$coords$lat[1:length(data_cube$coords$lat)] longitude <- data_cube$coords$lon[1:length(data_cube$coords$lon)] @@ -125,3 +133,4 @@ save_metrics <- function(recipe, info(recipe$Run$logger, "##### SKILL METRICS SAVED TO NETCDF FILE #####") } } + diff --git a/modules/Saving/Saving.R b/modules/Saving/Saving.R index c52991d3..2d067ba3 100644 --- a/modules/Saving/Saving.R +++ b/modules/Saving/Saving.R @@ -10,10 +10,15 @@ source("modules/Saving/R/save_metrics.R") source("modules/Saving/R/save_corr.R") source("modules/Saving/R/save_probabilities.R") source("modules/Saving/R/save_percentiles.R") - +source("modules/Saving/R/get_time.R") +source("modules/Saving/R/get_latlon.R") +source("modules/Saving/R/get_global_attributes.R") +source("modules/Saving/R/drop_dims.R") save_data <- function(recipe, data, - skill_metrics = NULL, - probabilities = NULL) { + skill_metrics = NULL, + probabilities = NULL, + agg = 'global', + archive = NULL) { # Wrapper for the saving functions. # recipe: The auto-s2s recipe # archive: The auto-s2s archive @@ -68,7 +73,7 @@ save_data <- function(recipe, data, if (!is.null(skill_metrics)) { save_metrics(recipe = recipe, skill = skill_metrics, - data_cube = data$hcst, + data_cube = data$hcst, agg = agg, outdir = outdir[var]) } if (!is.null(corr_metrics)) { diff --git a/modules/Skill/Skill.R b/modules/Skill/Skill.R index f22d6b9b..ecb89224 100644 --- a/modules/Skill/Skill.R +++ b/modules/Skill/Skill.R @@ -10,6 +10,7 @@ source("modules/Skill/R/compute_quants.R") source("modules/Skill/R/compute_probs.R") source("modules/Skill/R/s2s.metrics.R") +source("modules/Saving/R/drop_dims.R") ## TODO: Remove with the next release of s2dv source("modules/Skill/R/tmp/RPS.R") source("modules/Skill/R/tmp/RPSS.R") @@ -54,9 +55,9 @@ source("modules/Skill/R/CRPS_clim.R") # " it can call ", metric_fun )) # compute_skill_metrics <- function(recipe, data$hcst, obs, -# clim_data$hcst = NULL, -# clim_obs = NULL) { -compute_skill_metrics <- function(recipe, data) { +# clim_data$hcst = NULL, +# clim_obs = NULL) { +compute_skill_metrics <- function(recipe, data, agg = 'global') { # data$hcst: s2dv_cube containing the hindcast # obs: s2dv_cube containing the observations @@ -316,6 +317,7 @@ compute_skill_metrics <- function(recipe, data) { } info(recipe$Run$logger, "##### SKILL METRIC COMPUTATION COMPLETE #####") # Save outputs +#NURIA: I think change the output_dir is a problem for future savings recipe$Run$output_dir <- paste0(recipe$Run$output_dir, "/outputs/Skill/") # Separate 'corr' from the rest of the metrics because of extra 'ensemble' dim @@ -323,7 +325,7 @@ compute_skill_metrics <- function(recipe, data) { corr_metric_names <- grep("^corr", names(skill_metrics)) if (length(corr_metric_names) == 0) { save_metrics(recipe = recipe, skill = skill_metrics, - data_cube = data$hcst) + data_cube = data$hcst, agg = agg) } else { # Save corr if (length(skill_metrics[corr_metric_names]) > 0) { @@ -333,7 +335,7 @@ compute_skill_metrics <- function(recipe, data) { # Save other skill metrics if (length(skill_metrics[-corr_metric_names]) > 0) { save_metrics(recipe = recipe, skill = skill_metrics[-corr_metric_names], - data_cube = data$hcst) + data_cube = data$hcst, agg = agg) } } } @@ -419,7 +421,6 @@ compute_probabilities <- function(recipe, data) { } } } - # Rearrange dimensions and return probabilities named_probs <- lapply(named_probs, function(x) {.drop_dims(x)}) named_quantiles <- lapply(named_quantiles, function(x) {.drop_dims(x)}) @@ -464,21 +465,3 @@ compute_probabilities <- function(recipe, data) { } } -.drop_dims <- function(metric_array) { - # Define dimensions that are not essential for saving - droppable_dims <- c("dat", "sday", "sweek", "ensemble", "nobs", - "nexp", "exp_memb", "obs_memb", "bin") - # Select non-essential dimensions of length 1 - dims_to_drop <- intersect(names(which(dim(metric_array) == 1)), - droppable_dims) - drop_indices <- grep(paste(dims_to_drop, collapse = "|"), - names(dim(metric_array))) - # Drop selected dimensions - metric_array <- abind::adrop(metric_array, drop = drop_indices) - # If array has memb dim (Corr case), change name to 'ensemble' - if ("exp_memb" %in% names(dim(metric_array))) { - names(dim(metric_array))[which(names(dim(metric_array)) == - "exp_memb")] <- "ensemble" - } - return(metric_array) -} diff --git a/modules/Visualization/R/plot_ensemble_mean.R b/modules/Visualization/R/plot_ensemble_mean.R index 3263076d..07e35706 100644 --- a/modules/Visualization/R/plot_ensemble_mean.R +++ b/modules/Visualization/R/plot_ensemble_mean.R @@ -56,7 +56,6 @@ plot_ensemble_mean <- function(recipe, fcst, outdir) { brks <- pretty(range(var_ens_mean, na.rm = T), n = 15, min.n = 8) } cols <- grDevices::hcl.colors(length(brks) - 1, palette, rev = rev) - options(bitmapType = "cairo") for (i_syear in start_date) { if (length(start_date) == 1) { diff --git a/modules/Visualization/R/plot_skill_metrics.R b/modules/Visualization/R/plot_skill_metrics.R index 834cc8cc..59f487c2 100644 --- a/modules/Visualization/R/plot_skill_metrics.R +++ b/modules/Visualization/R/plot_skill_metrics.R @@ -111,7 +111,6 @@ plot_skill_metrics <- function(recipe, data_cube, skill_metrics, col_inf <- colorbar[1] col_sup <- colorbar[length(colorbar)] } - options(bitmapType = "cairo") # Reorder dimensions skill <- Reorder(skill, c("time", "longitude", "latitude")) # If the significance has been requested and the variable has it, diff --git a/recipes/examples/NAO_recipe.yml b/recipes/examples/NAO_recipe.yml new file mode 100644 index 00000000..6db51af3 --- /dev/null +++ b/recipes/examples/NAO_recipe.yml @@ -0,0 +1,60 @@ +Description: + Author: nperez + Info: ECMWF SEAS5 Seasonal Forecast Example recipe (monthly mean, tas) + +Analysis: + Horizon: seasonal # Mandatory, str: either subseasonal, seasonal, or decadal + Variables: + name: psl + freq: monthly_mean + Datasets: + System: + name: ECMWF-SEAS5 # Mandatory, str: system5c3s system21_m1 system35c3s + Multimodel: no # Mandatory, bool: Either yes/true or no/false + Reference: + name: ERA5 # Mandatory, str: Reference codename. See docu. + Time: + sdate: '0301' ## MMDD + # fcst_year: # Optional, int: Forecast year 'YYYY' + hcst_start: '1993' # Mandatory, int: Hindcast start year 'YYYY' + hcst_end: '2016' # Mandatory, int: Hindcast end year 'YYYY' + ftime_min: 2 # Mandatory, int: First leadtime time step in months + ftime_max: 2 # Mandatory, int: Last leadtime time step in months + Region: + latmin: 20 # Mandatory, int: minimum latitude + latmax: 80 # Mandatory, int: maximum latitude + lonmin: -80 # Mandatory, int: minimum longitude + lonmax: 40 # Mandatory, int: maximum longitude + Regrid: + method: bilinear # Mandatory, str: Interpolation method. See docu. + type: "to_system" + #type: /esarchive/scratch/nmilders/gitlab/git_clones/auto-s2s/conf/grid_description.txt #'r360x180' # Mandatory, str: to_system, to_reference, or CDO-accepted grid. + Workflow: + Anomalies: + compute: yes + cross_validation: no + save: none + Indices: + NAO: {ftime_avg: no, obsproj: TRUE, save: 'all', plot_ts: TRUE, plot_sp: yes} + Calibration: + method: raw # Mandatory, str: Calibration method. See docu. + save: none + Skill: + metric: mean_bias EnsCorr rps rpss crps crpss EnsSprErr + save: 'all' + Probabilities: + percentiles: [[1/3, 2/3], [1/10, 9/10]] # frac: Quantile thresholds. + save: none + Indicators: + index: no + ncores: 4 # Optional, int: number of cores, defaults to 1 + remove_NAs: # Optional, bool: Whether NAs are removed, defaults to FALSE + Output_format: scorecards + logo: yes +Run: + Loglevel: INFO + Terminal: yes + output_dir: /esarchive/scratch/vagudets/auto-s2s-outputs/ + code_dir: /esarchive/scratch/nperez/git/s2s-suite/ + + diff --git a/recipes/examples/Nino_recipe.yml b/recipes/examples/Nino_recipe.yml new file mode 100644 index 00000000..257b6f53 --- /dev/null +++ b/recipes/examples/Nino_recipe.yml @@ -0,0 +1,61 @@ +Description: + Author: nperez + Info: ECMWF SEAS5 Seasonal Forecast Example recipe (monthly mean, tas) + +Analysis: + Horizon: seasonal # Mandatory, str: either subseasonal, seasonal, or decadal + Variables: + name: tos + freq: monthly_mean + Datasets: + System: + name: ECMWF-SEAS5 # Mandatory, str: system5c3s system21_m1 system35c3s + Multimodel: no # Mandatory, bool: Either yes/true or no/false + Reference: + name: ERA5 # Mandatory, str: Reference codename. See docu. + Time: + sdate: '0101' ## MMDD + # fcst_year: # Optional, int: Forecast year 'YYYY' + hcst_start: '1993' # Mandatory, int: Hindcast start year 'YYYY' + hcst_end: '2016' # Mandatory, int: Hindcast end year 'YYYY' + ftime_min: 2 # Mandatory, int: First leadtime time step in months + ftime_max: 2 # Mandatory, int: Last leadtime time step in months + Region: + latmin: -90 # Mandatory, int: minimum latitude + latmax: 90 # Mandatory, int: maximum latitude + lonmin: 0 # Mandatory, int: minimum longitude + lonmax: 359.9 # Mandatory, int: maximum longitude + Regrid: + method: bilinear # Mandatory, str: Interpolation method. See docu. + type: "to_system" + #type: /esarchive/scratch/nmilders/gitlab/git_clones/auto-s2s/conf/grid_description.txt #'r360x180' # Mandatory, str: to_system, to_reference, or CDO-accepted grid. + Workflow: + Anomalies: + compute: yes + cross_validation: no + save: none + Indices: + Nino1+2: {save: 'all', plot_ts: TRUE, plot_sp: TRUE} + Nino3: {save: 'all', plot_ts: TRUE, plot_sp: TRUE} + Nino3.4: {save: 'all', plot_ts: TRUE, plot_sp: TRUE} + Nino4: {save: 'all', plot_ts: TRUE, plot_sp: TRUE} + Calibration: + method: raw # Mandatory, str: Calibration method. See docu. + save: none + Skill: + metric: mean_bias EnsCorr rps rpss crps crpss EnsSprErr + save: 'all' + Probabilities: + percentiles: [[1/3, 2/3], [1/10, 9/10]] # frac: Quantile thresholds. + save: none + Indicators: + index: no + ncores: 4 # Optional, int: number of cores, defaults to 1 + remove_NAs: # Optional, bool: Whether NAs are removed, defaults to FALSE + Output_format: scorecards + logo: TRUE +Run: + Loglevel: INFO + Terminal: yes + output_dir: /esarchive/scratch/nperez/scorecards_data/input_test/ + code_dir: /esarchive/scratch/nperez/git/s2s-suite/ diff --git a/recipes/examples/recipe_Nino_decadal.yml b/recipes/examples/recipe_Nino_decadal.yml new file mode 100644 index 00000000..6eb9619f --- /dev/null +++ b/recipes/examples/recipe_Nino_decadal.yml @@ -0,0 +1,55 @@ +Description: + Author: Carlos Delgado + Info: Test for NAO indices in decadal prediction +Analysis: + Horizon: Decadal + Variables: + name: psl + freq: monthly_mean + Datasets: + System: + name: EC-Earth3-i4 + member: 'all' + Multimodel: no + Reference: + name: JRA-55 + Time: + fcst_year: + hcst_start: 1996 + hcst_end: 2016 + ftime_min: 3 + ftime_max: 4 + Region: + latmin: -90 + latmax: 90 + lonmin: 0 + lonmax: 359.9 + Regrid: + method: bilinear + type: "r180x90"#to_system + Workflow: + Anomalies: + compute: yes + cross_validation: no + save: none + Indices: + Nino3.4: {save: 'all', plot_ts: TRUE, plot_sp: yes} + Calibration: + method: raw + save: none + Skill: + metric: EnsCorr RPSS + save: "all" + Probabilities: + percentiles: [[1/3, 2/3]] + save: none + Indicators: + index: FALSE + ncores: 8 # Optional, int: number of cores, defaults to 1 + remove_NAs: FALSE # Optional, bool: Whether NAs are removed, defaults to FALSE + Output_format: scorecards +Run: + Loglevel: INFO + Terminal: yes + output_dir: /esarchive/scratch/nperez/scorecards_data/input_test/ + code_dir: /esarchive/scratch/nperez/git/s2s-suite/ diff --git a/recipes/examples/recipe_model_decadal_NAO.yml b/recipes/examples/recipe_model_decadal_NAO.yml new file mode 100644 index 00000000..cd1b2bdd --- /dev/null +++ b/recipes/examples/recipe_model_decadal_NAO.yml @@ -0,0 +1,55 @@ +Description: + Author: Carlos Delgado + Info: Test for NAO indices in decadal prediction +Analysis: + Horizon: Decadal + Variables: + name: psl + freq: monthly_mean + Datasets: + System: + name: EC-Earth3-i4 + member: 'all' + Multimodel: no + Reference: + name: JRA-55 + Time: + fcst_year: + hcst_start: 1995 + hcst_end: 2016 + ftime_min: 3 + ftime_max: 5 + Region: + latmin: 20 + latmax: 80 + lonmin: -80 + lonmax: 40 + Regrid: + method: bilinear + type: "r180x90"#to_system + Workflow: + Anomalies: + compute: yes + cross_validation: no + save: none + Indices: + NAO: {obsproj: TRUE, save: 'all', plot_ts: TRUE, plot_sp: yes} + Calibration: + method: raw + save: none + Skill: + metric: EnsCorr RPSS + save: "all" + Probabilities: + percentiles: [[1/3, 2/3]] + save: none + Indicators: + index: FALSE + ncores: 8 # Optional, int: number of cores, defaults to 1 + remove_NAs: FALSE # Optional, bool: Whether NAs are removed, defaults to FALSE + Output_format: scorecards +Run: + Loglevel: INFO + Terminal: yes + output_dir: /esarchive/scratch/nperez/scorecards_data/input_test/ + code_dir: /esarchive/scratch/nperez/git/s2s-suite/ diff --git a/tests/recipes/recipe-seasonal_NAO.yml b/tests/recipes/recipe-seasonal_NAO.yml new file mode 100644 index 00000000..95d5a86e --- /dev/null +++ b/tests/recipes/recipe-seasonal_NAO.yml @@ -0,0 +1,62 @@ +Description: + Author: nperez + Info: ECMWF SEAS5 Seasonal Forecast Example recipe (monthly mean, tas) + +Analysis: + Horizon: seasonal # Mandatory, str: either subseasonal, seasonal, or decadal + Variables: + name: psl + freq: monthly_mean + Datasets: + System: + name: ECMWF-SEAS5 # Mandatory, str: system5c3s system21_m1 system35c3s + Multimodel: no # Mandatory, bool: Either yes/true or no/false + Reference: + name: ERA5 # Mandatory, str: Reference codename. See docu. + Time: + sdate: '0301' ## MMDD + # fcst_year: # Optional, int: Forecast year 'YYYY' + hcst_start: '1993' # Mandatory, int: Hindcast start year 'YYYY' + hcst_end: '2000' # Mandatory, int: Hindcast end year 'YYYY' + ftime_min: 2 # Mandatory, int: First leadtime time step in months + ftime_max: 2 # Mandatory, int: Last leadtime time step in months + Region: + latmin: 20 # Mandatory, int: minimum latitude + latmax: 80 # Mandatory, int: maximum latitude + lonmin: -80 # Mandatory, int: minimum longitude + lonmax: 40 # Mandatory, int: maximum longitude + Regrid: + method: bilinear # Mandatory, str: Interpolation method. See docu. + type: "r180x90" + #type: /esarchive/scratch/nmilders/gitlab/git_clones/auto-s2s/conf/grid_description.txt #'r360x180' # Mandatory, str: to_system, to_reference, or CDO-accepted grid. + Workflow: + Anomalies: + compute: yes + cross_validation: no + save: none + Indices: + NAO: {ftime_avg: no, obsproj: TRUE, save: 'all', plot_ts: TRUE, plot_sp: yes} + Calibration: + method: raw # Mandatory, str: Calibration method. See docu. + save: none + Skill: + metric: mean_bias EnsCorr rps rpss crps crpss EnsSprErr + save: 'all' + Probabilities: + percentiles: [[1/3, 2/3], [1/10, 9/10]] # frac: Quantile thresholds. + save: none + Indicators: + index: no + ncores: 4 # Optional, int: number of cores, defaults to 1 + remove_NAs: # Optional, bool: Whether NAs are removed, defaults to FALSE + Output_format: scorecards + logo: yes +Run: + Loglevel: INFO + Terminal: yes + output_dir: ./tests/out-logs/ + code_dir: /esarchive/scratch/vagudets/repos/auto-s2s/ + #output_dir: /esarchive/scratch/nperez/scorecards_data/input_test/ + #code_dir: /esarchive/scratch/nperez/git/s2s-suite/ + + diff --git a/tests/testthat/test-seasonal_NAO.R b/tests/testthat/test-seasonal_NAO.R new file mode 100644 index 00000000..7a03ecbf --- /dev/null +++ b/tests/testthat/test-seasonal_NAO.R @@ -0,0 +1,261 @@ +context("Seasonal NAO monthly data") + +source("modules/Loading/Loading.R") +source("modules/Anomalies/Anomalies.R") +source("modules/Skill/Skill.R") +source("modules/Saving/Saving.R") +source("modules/Indices/Indices.R") + +recipe_file <- "tests/recipes/recipe-seasonal_NAO.yml" +recipe <- prepare_outputs(recipe_file, disable_checks = F) +archive <- read_yaml(paste0(recipe$Run$code_dir, "conf/archive.yml"))$archive + +# Load datasets +suppressWarnings({invisible(capture.output( +data <- load_datasets(recipe) +))}) + +# Compute anomalies +suppressWarnings({invisible(capture.output( +ano_data <- compute_anomalies(recipe, data) +))}) + +# Compute index NAO +suppressWarnings({invisible(capture.output( +nao_data <- Indices(recipe = recipe, data = ano_data) +))}) + +# Compute skill metrics +suppressWarnings({invisible(capture.output( +skill_metrics <- compute_skill_metrics(recipe, nao_data, agg = 'region') +))}) + + +outdir <- get_dir(recipe = recipe, variable = data$hcst$attrs$Variable$varName) + +# ------- TESTS -------- + +test_that("1. Loading", { + +expect_equal( +is.list(data), +TRUE +) +expect_equal( +names(data), +c("hcst", "fcst", "obs") +) +expect_equal( +class(data$hcst), +"s2dv_cube" +) +expect_equal( +class(data$fcst), +"NULL" +) +expect_equal( +class(data$obs), +"s2dv_cube" +) +expect_equal( +names(data$hcst), +c("data", "dims", "coords", "attrs") +) +expect_equal( +names(data$hcst), +names(data$obs) +) +expect_equal( +dim(data$hcst$data), +c(dat = 1, var = 1, sday = 1, sweek = 1, syear = 8, time = 1, latitude = 30, longitude = 61, ensemble = 25) +) +expect_equal( +dim(data$hcst$attrs$Dates), +c(sday = 1, sweek = 1, syear = 8, time = 1) +) +expect_equal( +as.vector(drop(data$hcst$data)[1:2,1,2,3]), +c(101607.2, 101523.7), +tolerance = 0.0001 +) +expect_equal( +mean(data$hcst$data), +101450, +tolerance = 0.0001 +) +expect_equal( +range(data$hcst$data), +c(98909.3, 103299.8), +tolerance = 0.0001 +) +expect_equal( +(data$hcst$attrs$Dates)[1], +as.POSIXct("1993-04-30 18:00:00", tz = 'UTC') +) +expect_equal( +(data$hcst$attrs$Dates)[2], +as.POSIXct("1994-04-30 18:00:00", tz = 'UTC') +) +expect_equal( +(data$hcst$attrs$Dates)[5], +as.POSIXct("1997-04-30 18:00:00", tz = 'UTC') +) +expect_equal( +(data$obs$attrs$Dates)[8], +as.POSIXct("2000-04-16", tz = 'UTC') +) + +}) + +test_that("2. Anomalies", { + +expect_equal( +is.list(ano_data), +TRUE +) +expect_equal( +names(ano_data), +c("hcst", "obs", "fcst", "hcst.full_val", "obs.full_val") +) +expect_equal( +class(ano_data$hcst), +"s2dv_cube" +) +expect_equal( +class(ano_data$fcst), +"NULL" +) +expect_equal( +dim(ano_data$hcst$data), +c(dat = 1, var = 1, sday = 1, sweek = 1, syear = 8, time = 1, latitude = 30, longitude = 61, ensemble = 25) +) +expect_equal( +mean(ano_data$hcst$data), +-1.044053e-13, +tolerance = 0.0001 +) +expect_equal( +as.vector(drop(ano_data$hcst$data)[1:3, 3, 4, 1]), +c(-165.688477, -233.336914, 3.358398), +tolerance = 0.0001 +) +expect_equal( +range(ano_data$hcst$data), +c(-2045.577, 2027.675), +tolerance = 0.0001 +) + +}) + +#===================================== +test_that("3. Indices", { + +expect_equal( +is.list(nao_data), +TRUE +) +expect_equal( +names(nao_data), +c("hcst", "obs") +) +expect_equal( +class(nao_data$hcst), +"s2dv_cube" +) +expect_equal( +class(nao_data$fcst), +"NULL" +) +expect_equal( +dim(nao_data$hcst$data), +c(region = 1, syear = 8, ensemble = 25, dat = 1, var = 1, sday = 1, sweek = 1, time = 1) +) +expect_equal( +mean(nao_data$hcst$data), +8.239937e-18, +tolerance = 0.0001 +) +expect_equal( +as.vector(drop(nao_data$hcst$data)[1:3, 1]), +c(0.6778843, -1.6014398, 0.3849058), +tolerance = 0.0001 +) +expect_equal( +range(nao_data$hcst$data), +c(-3.038780, 2.193189), +tolerance = 0.0001 +) + +outputs <- paste0(recipe$Run$output_dir, "/plots/") +expect_equal( +all(list.files(outputs, recursive = T) %in% +paste0("Indices/", + c("NAO_ECMWF-SEAS5_ERA5_s0301_ftime02.png", + "NAO_correlation_psl_ERA5_s0301_ftime02.png", + "NAO_correlation_psl_ensmean_ECMWF-SEAS5_s0301_ftime02.png", + "NAO_correlation_psl_member_ECMWF-SEAS5_s0301_ftime02.png"))), +TRUE) + +expect_equal( +length(list.files(outputs, recursive = T)), +4 +) + + +}) + +#====================================== +test_that("3. Metrics", { + +expect_equal( +is.list(skill_metrics), +TRUE +) +expect_equal( +names(skill_metrics), +c("mean_bias", "enscorr", + "enscorr_significance", "rps", "rps_clim", "rpss", "rpss_significance", + "crps", "crps_clim", "crpss", "crpss_significance", "enssprerr") +) +expect_equal( +class(skill_metrics$rpss), +"array" +) +expect_equal( +dim(skill_metrics$rpss), +c(region = 1, var = 1, time = 1) +) +expect_equal( +dim(skill_metrics$rpss_significance), +dim(skill_metrics$rpss) +) +expect_equal( +skill_metrics$rpss[1], +-0.06814118, +tolerance = 0.0001 +) +expect_equal( +skill_metrics$rpss_significance[1], +FALSE +) + +}) + +test_that("4. Saving", { +outputs <- paste0(recipe$Run$output_dir, "/outputs/") +expect_equal( +all(list.files(outputs, recursive = T) %in% +c(paste0("Indices/ECMWF-SEAS5/nao/", paste0("nao_", 1993:2000, "0301.nc")), + paste0("Indices/ERA5/nao/", paste0("nao_", 1993:2000, "0301.nc")), + "Skill/ECMWF-SEAS5/nao/scorecards_ECMWF-SEAS5_ERA5_nao-skill_1993-2000_s03.nc") +), TRUE) + +expect_equal( +length(list.files(outputs, recursive = T)), +17 +) + +}) + +# Delete files +unlink(recipe$Run$output_dir, recursive = T) diff --git a/tools/check_recipe.R b/tools/check_recipe.R index abd0c8e2..c1053534 100644 --- a/tools/check_recipe.R +++ b/tools/check_recipe.R @@ -296,6 +296,49 @@ check_recipe <- function(recipe) { } } } + # Indices + if ("Indices" %in% names(recipe$Analysis$Workflow)) { + nino_indices <- paste0("nino", c("1+2", "3", "3.4", "4")) + indices <- c("nao", nino_indices) + if (!("anomalies" %in% tolower(names(recipe$Analysis$Workflow)))) { + error(recipe$Run$logger, + paste0("Indices uses Anomalies as input, but Anomalies are missing", + "in the recipe.")) + error_status <- T + } else if (!(recipe$Analysis$Workflow$Anomalies$compute)) { + error(recipe$Run$logger, + paste0("Indices uses Anomalies as input, but the parameter", + "'Anomalies:compute' is set as no/False.")) + error_status <- T + } + recipe_indices <- tolower(names(recipe$Analysis$Workflow$Indices)) + if (!all(recipe_indices %in% indices)) { + error(recipe$Run$logger, + paste0("Some of the indices under 'Indices' are not available.", + "The available Indices are: 'NAO', 'Nino1+2', 'Nino3', ", + "'Nino3.4' and 'Nino4'.")) + error_status <- T + } + # Check that variables correspond with indices requested + recipe_variables <- strsplit(recipe$Analysis$Variables$name, ", | |,")[[1]] + if (("nao" %in% recipe_indices) && + (!all(recipe_variables %in% c("psl", "z500")))) { + error(recipe$Run$logger, + paste0("It is not possible to compute the NAO with some of the ", + "variables requested. To compute the NAO, please make sure", + "your recipe requests only psl and/or z500.")) + error_status <- T + } + if ((any(nino_indices %in% recipe_indices)) && + (!all(recipe_variables %in% c("tos", "sst")))) { + error(recipe$Run$logger, + paste0("It is not possible to compute El Nino indices with some ", + "of the variables requested. To compute El Nino, please ", + "make sure your recipe requests only tos.")) + error_status <- T + } + } + # Skill if (("Skill" %in% names(recipe$Analysis$Workflow)) && (is.null(recipe$Analysis$Workflow$Skill$metric))) { diff --git a/tools/libs.R b/tools/libs.R index e1179e8d..a67f9549 100644 --- a/tools/libs.R +++ b/tools/libs.R @@ -1,3 +1,4 @@ +# Libraries library(log4r) library(docopt) library(startR) @@ -19,6 +20,7 @@ library(cowplot) library(stringr) library(pryr) # To check mem usage. +# Functions ## To be removed when new package is done by library(CSOperational) source("tools/check_recipe.R") source("tools/prepare_outputs.R") @@ -28,3 +30,7 @@ source("tools/read_atomic_recipe.R") source("tools/write_autosubmit_conf.R") source("tools/get_archive.R") # source("tools/add_dims.R") # Not sure if necessary yet + +# Settings +options(bitmapType = 'cairo') +pdf(NULL) -- GitLab From d988df8fde8fdf89962609e3b854c795a5131c97 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Wed, 28 Jun 2023 14:47:11 +0200 Subject: [PATCH 173/388] Modify saving messages to only display once, even if there are multiple variables --- modules/Saving/R/save_corr.R | 4 ++-- modules/Saving/R/save_forecast.R | 4 ++-- modules/Saving/R/save_metrics.R | 2 +- modules/Saving/R/save_observations.R | 2 +- modules/Saving/R/save_percentiles.R | 2 +- modules/Saving/R/save_probabilities.R | 6 +++--- 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/modules/Saving/R/save_corr.R b/modules/Saving/R/save_corr.R index 65349acd..050fe68d 100644 --- a/modules/Saving/R/save_corr.R +++ b/modules/Saving/R/save_corr.R @@ -121,7 +121,7 @@ save_corr <- function(recipe, vars <- c(vars, subset_skill) ArrayToNc(vars, outfile) } - info(recipe$Run$logger, - "##### ENSEMBLE CORRELATION SAVED TO NETCDF FILE #####") } + info(recipe$Run$logger, + "##### ENSEMBLE CORRELATION SAVED TO NETCDF FILE #####") } diff --git a/modules/Saving/R/save_forecast.R b/modules/Saving/R/save_forecast.R index 07fdddf7..00a22850 100644 --- a/modules/Saving/R/save_forecast.R +++ b/modules/Saving/R/save_forecast.R @@ -141,7 +141,7 @@ save_forecast <- function(recipe, ArrayToNc(vars, outfile) } } - info(recipe$Run$logger, paste("#####", toupper(type), - "SAVED TO NETCDF FILE #####")) } + info(recipe$Run$logger, paste("#####", toupper(type), + "SAVED TO NETCDF FILE #####")) } diff --git a/modules/Saving/R/save_metrics.R b/modules/Saving/R/save_metrics.R index a232d890..cd4252ab 100644 --- a/modules/Saving/R/save_metrics.R +++ b/modules/Saving/R/save_metrics.R @@ -130,7 +130,7 @@ save_metrics <- function(recipe, vars <- c(vars, subset_skill) ArrayToNc(vars, outfile) } - info(recipe$Run$logger, "##### SKILL METRICS SAVED TO NETCDF FILE #####") } + info(recipe$Run$logger, "##### SKILL METRICS SAVED TO NETCDF FILE #####") } diff --git a/modules/Saving/R/save_observations.R b/modules/Saving/R/save_observations.R index fcf91d2f..127e9890 100644 --- a/modules/Saving/R/save_observations.R +++ b/modules/Saving/R/save_observations.R @@ -140,6 +140,6 @@ save_observations <- function(recipe, ArrayToNc(vars, outfile) } } - info(recipe$Run$logger, "##### OBS SAVED TO NETCDF FILE #####") } + info(recipe$Run$logger, "##### OBS SAVED TO NETCDF FILE #####") } diff --git a/modules/Saving/R/save_percentiles.R b/modules/Saving/R/save_percentiles.R index 68095671..862ed5ff 100644 --- a/modules/Saving/R/save_percentiles.R +++ b/modules/Saving/R/save_percentiles.R @@ -112,6 +112,6 @@ save_percentiles <- function(recipe, vars <- c(vars, subset_percentiles) ArrayToNc(vars, outfile) } - info(recipe$Run$logger, "##### PERCENTILES SAVED TO NETCDF FILE #####") } + info(recipe$Run$logger, "##### PERCENTILES SAVED TO NETCDF FILE #####") } diff --git a/modules/Saving/R/save_probabilities.R b/modules/Saving/R/save_probabilities.R index 974ef7dc..b7da0449 100644 --- a/modules/Saving/R/save_probabilities.R +++ b/modules/Saving/R/save_probabilities.R @@ -126,8 +126,8 @@ save_probabilities <- function(recipe, ArrayToNc(vars, outfile) } } - info(recipe$Run$logger, - paste("#####", toupper(type), - "PROBABILITIES SAVED TO NETCDF FILE #####")) } + info(recipe$Run$logger, + paste("#####", toupper(type), + "PROBABILITIES SAVED TO NETCDF FILE #####")) } -- GitLab From 4637e45d510232ac93b58d8c163e4ad0b19ce38a Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Mon, 3 Jul 2023 11:45:21 +0200 Subject: [PATCH 174/388] =?UTF-8?q?Fix=20Ni=C3=B1o=20saving=20bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/Indices/R/compute_nino.R | 4 ++-- recipes/examples/Nino_recipe.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/Indices/R/compute_nino.R b/modules/Indices/R/compute_nino.R index 7ed50c65..41eddbbf 100644 --- a/modules/Indices/R/compute_nino.R +++ b/modules/Indices/R/compute_nino.R @@ -1,7 +1,7 @@ compute_nino <- function(data, recipe, region, standardised = TRUE, running_mean = NULL, ftime_avg = NULL, plot_ts = TRUE, plot_sp = TRUE, alpha = 0.5, - save = TRUE, na.rm = TRUE, logo = NULL, + save = 'all', na.rm = TRUE, logo = NULL, ncores = NULL) { #ftime_avg = 1:2 if (!is.null(data$fcst)) { @@ -120,7 +120,7 @@ compute_nino <- function(data, recipe, region, standardised = TRUE, Dates = data$obs$attrs$Dates, Dataset = recipe$Analysis$Datasets$Reference$name)) - if (save) { + if (save == 'all') { file_dest <- paste0(recipe$Run$output_dir, "/outputs/Indices/") # Use startdates param from SaveExp to correctly name the files: if (tolower(recipe$Analysis$Horizon) == "seasonal") { diff --git a/recipes/examples/Nino_recipe.yml b/recipes/examples/Nino_recipe.yml index 257b6f53..779fc5f1 100644 --- a/recipes/examples/Nino_recipe.yml +++ b/recipes/examples/Nino_recipe.yml @@ -57,5 +57,5 @@ Analysis: Run: Loglevel: INFO Terminal: yes - output_dir: /esarchive/scratch/nperez/scorecards_data/input_test/ + output_dir: /esarchive/scratch/vagudets/auto-s2s/outputs code_dir: /esarchive/scratch/nperez/git/s2s-suite/ -- GitLab From d591dbf3fb6eba639cc58df492c588dbdf3e5d79 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Tue, 4 Jul 2023 12:59:38 +0200 Subject: [PATCH 175/388] Add descriptions to example scripts --- example_scripts/execute_NAO.R | 10 ++++++++-- example_scripts/execute_NAO_decadal.R | 10 ++++++++-- example_scripts/execute_Nino.R | 14 +++++++++++--- example_scripts/execute_Nino_decadal.R | 10 ++++++++-- example_scripts/test_decadal.R | 5 +++++ example_scripts/test_seasonal.R | 8 ++++++++ 6 files changed, 48 insertions(+), 9 deletions(-) diff --git a/example_scripts/execute_NAO.R b/example_scripts/execute_NAO.R index 39d435c5..3ec3586f 100644 --- a/example_scripts/execute_NAO.R +++ b/example_scripts/execute_NAO.R @@ -1,5 +1,9 @@ - -recipe_file <- "recipes/examples/NAO_recipe.yml" +############################################################################### +## Author: Núria Pérez-Zanón +## Description: Computes the NAO index and some skill metrics for it, for a +## seasonal prediction system. +## Instructions: To run it, modify the recipe to set your own output directory. +############################################################################### source("modules/Loading/Loading.R") source("modules/Calibration/Calibration.R") @@ -7,6 +11,8 @@ source("modules/Skill/Skill.R") source("modules/Saving/Saving.R") source("tools/prepare_outputs.R") source("modules/Anomalies/Anomalies.R") + +recipe_file <- "recipes/examples/NAO_recipe.yml" recipe <- prepare_outputs(recipe_file) #for (smonth in 1:12) { diff --git a/example_scripts/execute_NAO_decadal.R b/example_scripts/execute_NAO_decadal.R index 41570aa4..233e796f 100644 --- a/example_scripts/execute_NAO_decadal.R +++ b/example_scripts/execute_NAO_decadal.R @@ -1,5 +1,9 @@ -recipe_file <- "recipes/examples/recipe_model_decadal_NAO.yml" - +############################################################################### +## Author: Núria Pérez-Zanón +## Description: Computes the NAO index and some skill metrics for it, for a +## decadal prediction system. +## Instructions: To run it, modify the recipe to set your own output directory. +############################################################################### source("modules/Loading/Loading_decadal.R") source("modules/Calibration/Calibration.R") @@ -7,6 +11,8 @@ source("modules/Skill/Skill.R") source("modules/Saving/Saving.R") source("tools/prepare_outputs.R") source("modules/Anomalies/Anomalies.R") + +recipe_file <- "recipes/examples/recipe_model_decadal_NAO.yml" recipe <- prepare_outputs(recipe_file) #for (smonth in 1:12) { diff --git a/example_scripts/execute_Nino.R b/example_scripts/execute_Nino.R index d64513ad..4bd4a72c 100644 --- a/example_scripts/execute_Nino.R +++ b/example_scripts/execute_Nino.R @@ -1,12 +1,20 @@ -recipe_file <- "recipes/examples/Nino_recipe.yml" - - +############################################################################### +## Author: Núria Pérez-Zanón +## Description: Computes the Niño1+2, Niño3, Niño3.4 and Niño4 indices and some +## some skill metrics for each index. +## Instructions: To run it, modify the recipe to set your own output directory. +############################################################################### + +# Load modules source("modules/Loading/Loading.R") source("modules/Calibration/Calibration.R") source("modules/Skill/Skill.R") source("modules/Saving/Saving.R") source("tools/prepare_outputs.R") source("modules/Anomalies/Anomalies.R") + +# Read recipe +recipe_file <- "recipes/examples/Nino_recipe.yml" recipe <- prepare_outputs(recipe_file) #for (smonth in 1:12) { diff --git a/example_scripts/execute_Nino_decadal.R b/example_scripts/execute_Nino_decadal.R index 1a7c3184..cc5341bc 100644 --- a/example_scripts/execute_Nino_decadal.R +++ b/example_scripts/execute_Nino_decadal.R @@ -1,5 +1,9 @@ -recipe_file <- "recipes/examples/recipe_Nino_decadal.yml" - +############################################################################### +## Author: Núria Pérez-Zanón +## Description: Computes the Niño1+2, Niño3, Niño3.4 and Niño4 indices and some +## some skill metrics for each index. +## Instructions: To run it, modify the recipe to set your own output directory. +############################################################################### source("modules/Loading/Loading_decadal.R") source("modules/Calibration/Calibration.R") @@ -7,6 +11,8 @@ source("modules/Skill/Skill.R") source("modules/Saving/Saving.R") source("tools/prepare_outputs.R") source("modules/Anomalies/Anomalies.R") + +recipe_file <- "recipes/examples/recipe_Nino_decadal.yml" recipe <- prepare_outputs(recipe_file) #for (smonth in 1:12) { diff --git a/example_scripts/test_decadal.R b/example_scripts/test_decadal.R index f9f9521d..900b2622 100644 --- a/example_scripts/test_decadal.R +++ b/example_scripts/test_decadal.R @@ -1,3 +1,8 @@ +############################################################################### +## Author: An-Chi Ho +## Description: Script to test developments for decadal workflows. Please, +## do not modify. +############################################################################### source("modules/Loading/Loading_decadal.R") source("modules/Calibration/Calibration.R") diff --git a/example_scripts/test_seasonal.R b/example_scripts/test_seasonal.R index 1afb9549..0c1c1d2b 100644 --- a/example_scripts/test_seasonal.R +++ b/example_scripts/test_seasonal.R @@ -1,3 +1,10 @@ +############################################################################### +## Author: V. Agudetse +## Description: Script to test developments for seasonal workflows. Please, +## do not modify. +############################################################################### + +# Load modules source("modules/Loading/Loading.R") source("modules/Calibration/Calibration.R") source("modules/Anomalies/Anomalies.R") @@ -5,6 +12,7 @@ source("modules/Skill/Skill.R") source("modules/Saving/Saving.R") source("modules/Visualization/Visualization.R") +# Read recipe recipe_file <- "recipes/atomic_recipes/recipe_test_multivar.yml" recipe <- prepare_outputs(recipe_file) -- GitLab From d5a83d2252453f570104c1f4233d113b8247e90a Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Wed, 5 Jul 2023 15:53:28 +0200 Subject: [PATCH 176/388] Remove 'ftime_avg' parameter from recipe --- modules/Indices/R/compute_nino.R | 43 ++++++++++---------------------- recipes/examples/NAO_recipe.yml | 2 +- 2 files changed, 14 insertions(+), 31 deletions(-) diff --git a/modules/Indices/R/compute_nino.R b/modules/Indices/R/compute_nino.R index 41eddbbf..8fd2c9c8 100644 --- a/modules/Indices/R/compute_nino.R +++ b/modules/Indices/R/compute_nino.R @@ -1,9 +1,8 @@ compute_nino <- function(data, recipe, region, standardised = TRUE, - running_mean = NULL, ftime_avg = NULL, - plot_ts = TRUE, plot_sp = TRUE, alpha = 0.5, - save = 'all', na.rm = TRUE, logo = NULL, + running_mean = NULL, plot_ts = TRUE, plot_sp = TRUE, + alpha = 0.5, save = 'all', na.rm = TRUE, logo = NULL, ncores = NULL) { - #ftime_avg = 1:2 + if (!is.null(data$fcst)) { warn(recipe$Run$logger, "Nino computed only for hindcast data.") } @@ -53,22 +52,6 @@ compute_nino <- function(data, recipe, region, standardised = TRUE, time_dim = 'time', ncores = ncores) } - if (!is.null(ftime_avg)) { - if (recipe$Analysis$Variable$freq == 'monthly_mean') { - monini <- as.numeric(substr(recipe$Analysis$Time$sdate, 1, 2)) - moninf <- ftime_avg[1] - monsup <- ftime_avg[length(ftime_avg)] - nino_hcst <- Season(nino_hcst, posdim = 'time', - monini = monini, - moninf = moninf, monsup = monsup) - nino_obs <- Season(nino_obs, posdim = 'time', - monini = monini, - moninf = moninf, - monsup = monsup) - } else { - warning("'ftime_avg' only available for monthly data.") - } - } if (all(region == c(-90, -80, -10, 0))) { region_name <- "1+2" nino_name <- "nino12" @@ -136,22 +119,22 @@ compute_nino <- function(data, recipe, region, standardised = TRUE, } nino$hcst$data <- .drop_indices_dims(nino_hcst) CST_SaveExp(data = nino$hcst, - destination = file_dest, - startdates = as.vector(file_dates), - dat_dim = NULL, sdate_dim = 'syear', - ftime_dim = 'time', var_dim = NULL, - memb_dim = 'ensemble') + destination = file_dest, + startdates = as.vector(file_dates), + dat_dim = NULL, sdate_dim = 'syear', + ftime_dim = 'time', var_dim = NULL, + memb_dim = 'ensemble') res <- .drop_indices_dims(nino_obs) if (!("time" %in% names(dim(res)))) { res <- InsertDim(res, pos = 1, len = 1, name = 'time') } nino$obs$data <- res CST_SaveExp(data = nino$obs, - destination = file_dest, - startdates = as.vector(file_dates), - dat_dim = NULL, sdate_dim = 'syear', - ftime_dim = 'time', var_dim = NULL, - memb_dim = NULL) + destination = file_dest, + startdates = as.vector(file_dates), + dat_dim = NULL, sdate_dim = 'syear', + ftime_dim = 'time', var_dim = NULL, + memb_dim = NULL) nino$hcst$data <- nino_hcst nino$obs$data <- nino_obs res <- NULL diff --git a/recipes/examples/NAO_recipe.yml b/recipes/examples/NAO_recipe.yml index 6db51af3..5d4a0cd9 100644 --- a/recipes/examples/NAO_recipe.yml +++ b/recipes/examples/NAO_recipe.yml @@ -35,7 +35,7 @@ Analysis: cross_validation: no save: none Indices: - NAO: {ftime_avg: no, obsproj: TRUE, save: 'all', plot_ts: TRUE, plot_sp: yes} + NAO: {obsproj: TRUE, save: 'all', plot_ts: TRUE, plot_sp: yes} Calibration: method: raw # Mandatory, str: Calibration method. See docu. save: none -- GitLab From fd5cd488380b6f432258f0e5e8333413f6f1a8e7 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Fri, 7 Jul 2023 12:14:59 +0200 Subject: [PATCH 177/388] Remove 'browser()' call --- modules/Visualization/R/plot_most_likely_terciles_map.R | 1 - 1 file changed, 1 deletion(-) diff --git a/modules/Visualization/R/plot_most_likely_terciles_map.R b/modules/Visualization/R/plot_most_likely_terciles_map.R index ec3fb392..18667701 100644 --- a/modules/Visualization/R/plot_most_likely_terciles_map.R +++ b/modules/Visualization/R/plot_most_likely_terciles_map.R @@ -50,7 +50,6 @@ plot_most_likely_terciles <- function(recipe, # Define name of output file and titles i_var_probs <- var_probs[which(start_date == i_syear), , , , ] outfile <- paste0(outdir[[var]], "forecast_most_likely_tercile-", i_syear) - browser() toptitle <- paste0(system_name, " / ", str_to_title(var_long_name), "\n", "Most Likely Tercile / Initialization: ", i_syear) -- GitLab From 90f5abcb14882e53aae17d6d0225caa758036a7e Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Fri, 7 Jul 2023 15:28:16 +0200 Subject: [PATCH 178/388] Remove projection method from toptitle in NAO plots; remove deprecated parameter from testing recipe --- modules/Indices/R/compute_nao.R | 8 ++------ tests/recipes/recipe-seasonal_NAO.yml | 2 +- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/modules/Indices/R/compute_nao.R b/modules/Indices/R/compute_nao.R index 4be27b89..5bb76e4e 100644 --- a/modules/Indices/R/compute_nao.R +++ b/modules/Indices/R/compute_nao.R @@ -178,9 +178,7 @@ compute_nao <- function(data, recipe, obsproj, plot_ts, plot_sp, toptitle <- paste("NAO Index\n", month.abb[mes], "/", recipe$Analysis$Time$hcst_start, "-", - recipe$Analysis$Time$hcst_end, "\nMethod:", - ifelse(recipe$Analysis$Workflow$Indices$NAO$obsproj, - "Pobs", "Pmod"), "(Doblas-Reyes et al., 2003)") + recipe$Analysis$Time$hcst_end) plotfile <- paste0(recipe$Run$output_dir, "/plots/Indices/NAO_", system, "_", recipe$Analysis$Datasets$Reference$name, "_s", recipe$Analysis$Time$sdate, "_ftime", @@ -197,9 +195,7 @@ compute_nao <- function(data, recipe, obsproj, plot_ts, plot_sp, toptitle <- paste("NAO Index\n", "Lead time", fmonth, " / Start dates", recipe$Analysis$Time$hcst_start, "-", - recipe$Analysis$Time$hcst_end, "\nMethod:", - ifelse(recipe$Analysis$Workflow$Indices$NAO$obsproj, - "Pobs", "Pmod"), "(Doblas-Reyes et al., 2003)") + recipe$Analysis$Time$hcst_end) plotfile <- paste0(recipe$Run$output_dir, "/plots/Indices/NAO_", system, "_", recipe$Analysis$Datasets$Reference$name, "_ftime", diff --git a/tests/recipes/recipe-seasonal_NAO.yml b/tests/recipes/recipe-seasonal_NAO.yml index 95d5a86e..1cccf177 100644 --- a/tests/recipes/recipe-seasonal_NAO.yml +++ b/tests/recipes/recipe-seasonal_NAO.yml @@ -35,7 +35,7 @@ Analysis: cross_validation: no save: none Indices: - NAO: {ftime_avg: no, obsproj: TRUE, save: 'all', plot_ts: TRUE, plot_sp: yes} + NAO: {obsproj: TRUE, save: 'all', plot_ts: TRUE, plot_sp: yes} Calibration: method: raw # Mandatory, str: Calibration method. See docu. save: none -- GitLab From b542c78094edc7230e19cd1dec2f66fa3149bd9e Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Tue, 18 Jul 2023 12:18:20 +0200 Subject: [PATCH 179/388] Only try to save fcst if it exists, even if parameter 'save' is set to 'all' --- modules/Anomalies/Anomalies.R | 4 ++-- modules/Calibration/Calibration.R | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/Anomalies/Anomalies.R b/modules/Anomalies/Anomalies.R index 28092625..23014cbd 100644 --- a/modules/Anomalies/Anomalies.R +++ b/modules/Anomalies/Anomalies.R @@ -89,8 +89,8 @@ compute_anomalies <- function(recipe, data) { recipe$Run$output_dir <- paste0(recipe$Run$output_dir, "/outputs/Anomalies/") # Save forecast - if (recipe$Analysis$Workflow$Anomalies$save %in% - c('all', 'exp_only', 'fcst_only')) { + if ((recipe$Analysis$Workflow$Anomalies$save %in% + c('all', 'exp_only', 'fcst_only')) && !is.null(data$fcst)) { save_forecast(recipe = recipe, data_cube = data$fcst, type = 'fcst') } # Save hindcast diff --git a/modules/Calibration/Calibration.R b/modules/Calibration/Calibration.R index dedfbd85..6a8fe103 100644 --- a/modules/Calibration/Calibration.R +++ b/modules/Calibration/Calibration.R @@ -166,8 +166,8 @@ calibrate_datasets <- function(recipe, data) { ## TODO: What do we do with the full values? recipe$Run$output_dir <- paste0(recipe$Run$output_dir, "/outputs/Calibration/") - if (recipe$Analysis$Workflow$Calibration$save %in% - c('all', 'exp_only', 'fcst_only')) { + if ((recipe$Analysis$Workflow$Calibration$save %in% + c('all', 'exp_only', 'fcst_only')) && (!is.null(data$fcst))) { save_forecast(recipe = recipe, data_cube = fcst_calibrated, type = 'fcst') } if (recipe$Analysis$Workflow$Calibration$save %in% -- GitLab From 428c22b0189b531a63cf4d21189074378e9522e3 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Tue, 18 Jul 2023 13:28:49 +0200 Subject: [PATCH 180/388] Update AS recipes --- {modules => example_scripts}/test_parallel_workflow.R | 2 -- recipes/tests/recipe_autosubmit_marstest.yml | 6 ++++-- recipes/tests/recipe_multiregion.yml | 4 ++-- recipes/tests/recipe_seasonal_example.yml | 6 ++++-- recipes/tests/recipe_seasonal_two-variables.yml | 3 ++- 5 files changed, 12 insertions(+), 9 deletions(-) rename {modules => example_scripts}/test_parallel_workflow.R (90%) diff --git a/modules/test_parallel_workflow.R b/example_scripts/test_parallel_workflow.R similarity index 90% rename from modules/test_parallel_workflow.R rename to example_scripts/test_parallel_workflow.R index 30c9cb91..8cf79c25 100644 --- a/modules/test_parallel_workflow.R +++ b/example_scripts/test_parallel_workflow.R @@ -18,8 +18,6 @@ data <- compute_anomalies(recipe, data) skill_metrics <- compute_skill_metrics(recipe, data) # Compute percentiles and probability bins probabilities <- compute_probabilities(recipe, data) -# Export all data to netCDF -save_data(recipe, data, skill_metrics, probabilities) # Plot data plot_data(recipe, data, skill_metrics, probabilities, significance = T) diff --git a/recipes/tests/recipe_autosubmit_marstest.yml b/recipes/tests/recipe_autosubmit_marstest.yml index 5bf62fb9..2fe903fa 100644 --- a/recipes/tests/recipe_autosubmit_marstest.yml +++ b/recipes/tests/recipe_autosubmit_marstest.yml @@ -52,6 +52,8 @@ Analysis: save: 'all' Visualization: plots: skill_metrics + multi_panel: no + projection: robinson Indicators: index: no # ? ncores: 8 @@ -65,12 +67,12 @@ Run: Loglevel: INFO Terminal: yes filesystem: mars - output_dir: /esarchive/scratch/vagudets/repos/auto-s2s/out-logs/ + output_dir: /esarchive/scratch/vagudets/auto-s2s-outputs/ code_dir: /esarchive/scratch/vagudets/repos/auto-s2s/ autosubmit: yes # fill only if using autosubmit auto_conf: - script: /esarchive/scratch/vagudets/repos/auto-s2s/modules/test_parallel_workflow.R # path to the script to run + script: /esarchive/scratch/vagudets/repos/auto-s2s/example_scripts/test_parallel_workflow.R # path to the script to run expid: a5ta ## if left empty, create new exp? hpc_user: bsc32762 # your hpc username wallclock: 04:00 # hh:mm diff --git a/recipes/tests/recipe_multiregion.yml b/recipes/tests/recipe_multiregion.yml index 69d8621d..91139523 100644 --- a/recipes/tests/recipe_multiregion.yml +++ b/recipes/tests/recipe_multiregion.yml @@ -65,12 +65,12 @@ Run: Loglevel: INFO Terminal: yes filesystem: esarchive - output_dir: /esarchive/scratch/vagudets/repos/auto-s2s/out-logs/ + output_dir: /esarchive/scratch/vagudets/auto-s2s-outputs/ code_dir: /esarchive/scratch/vagudets/repos/auto-s2s/ autosubmit: yes # fill only if using autosubmit auto_conf: - script: /esarchive/scratch/vagudets/repos/auto-s2s/modules/test_parallel_workflow.R + script: /esarchive/scratch/vagudets/repos/auto-s2s/example_scripts/test_parallel_workflow.R expid: a5no # autosubmit experiment ID hpc_user: bsc32762 # your hpc username wallclock: 04:00 # hh:mm diff --git a/recipes/tests/recipe_seasonal_example.yml b/recipes/tests/recipe_seasonal_example.yml index f4f3a8f5..787484ea 100644 --- a/recipes/tests/recipe_seasonal_example.yml +++ b/recipes/tests/recipe_seasonal_example.yml @@ -52,6 +52,8 @@ Analysis: save: 'all' Visualization: plots: skill_metrics + multi_panel: yes + projection: cylindrical_equidistant Indicators: index: no ncores: 8 @@ -65,12 +67,12 @@ Run: Loglevel: INFO Terminal: yes filesystem: esarchive - output_dir: /esarchive/scratch/vagudets/repos/auto-s2s/out-logs/ + output_dir: /esarchive/scratch/vagudets/auto-s2s-outputs/ code_dir: /esarchive/scratch/vagudets/repos/auto-s2s/ autosubmit: yes # fill only if using autosubmit auto_conf: - script: /esarchive/scratch/vagudets/repos/auto-s2s/modules/test_parallel_workflow.R + script: /esarchive/scratch/vagudets/repos/auto-s2s/example_scripts/test_parallel_workflow.R expid: a5no # autosubmit experiment ID hpc_user: bsc32762 # your hpc username wallclock: 04:00 # hh:mm diff --git a/recipes/tests/recipe_seasonal_two-variables.yml b/recipes/tests/recipe_seasonal_two-variables.yml index 1cb5c3b2..ac13ea28 100644 --- a/recipes/tests/recipe_seasonal_two-variables.yml +++ b/recipes/tests/recipe_seasonal_two-variables.yml @@ -50,6 +50,7 @@ Analysis: save: 'all' Visualization: plots: skill_metrics, forecast_ensemble_mean, most_likely_terciles + multi_panel: yes Indicators: index: no # ? ncores: 7 @@ -62,5 +63,5 @@ Analysis: Run: Loglevel: INFO Terminal: yes - output_dir: /esarchive/scratch/vagudets/repos/auto-s2s/out-logs/ + output_dir: /esarchive/scratch/vagudets/repos/auto-s2s-outputs/ code_dir: /esarchive/scratch/vagudets/repos/auto-s2s/ -- GitLab From 7e644d55abd101abfcda6a4c83bb173a1f9149af Mon Sep 17 00:00:00 2001 From: Nadia Milders Date: Thu, 20 Jul 2023 15:33:44 +0200 Subject: [PATCH 181/388] scorecards module code --- MODULES | 1 + autosubmit/auto-scorecards.sh | 15 + autosubmit/conf_esarchive/jobs.conf | 8 + modules/Scorecards/Scorecards.R | 179 +++++++ modules/Scorecards/tmp/LoadMetrics.R | 207 ++++++++ modules/Scorecards/tmp/SCPlotScorecard.R | 444 ++++++++++++++++++ modules/Scorecards/tmp/SCTransform.R | 42 ++ modules/Scorecards/tmp/ScorecardsMulti.R | 360 ++++++++++++++ modules/Scorecards/tmp/ScorecardsSingle.R | 343 ++++++++++++++ modules/Scorecards/tmp/ScorecardsSystemDiff.R | 350 ++++++++++++++ modules/Scorecards/tmp/Utils.R | 361 ++++++++++++++ modules/Scorecards/tmp/WeightedMetrics.R | 134 ++++++ .../recipe_scorecards_atomic.yml | 69 +++ recipes/recipe_scoreacards.yml | 105 +++++ 14 files changed, 2618 insertions(+) create mode 100644 autosubmit/auto-scorecards.sh create mode 100644 modules/Scorecards/Scorecards.R create mode 100644 modules/Scorecards/tmp/LoadMetrics.R create mode 100644 modules/Scorecards/tmp/SCPlotScorecard.R create mode 100644 modules/Scorecards/tmp/SCTransform.R create mode 100644 modules/Scorecards/tmp/ScorecardsMulti.R create mode 100644 modules/Scorecards/tmp/ScorecardsSingle.R create mode 100644 modules/Scorecards/tmp/ScorecardsSystemDiff.R create mode 100644 modules/Scorecards/tmp/Utils.R create mode 100644 modules/Scorecards/tmp/WeightedMetrics.R create mode 100644 recipes/atomic_recipes/recipe_scorecards_atomic.yml create mode 100644 recipes/recipe_scoreacards.yml diff --git a/MODULES b/MODULES index ff2a2a34..48f0a52a 100644 --- a/MODULES +++ b/MODULES @@ -19,6 +19,7 @@ elif [[ $BSC_MACHINE == "nord3v2" ]]; then module load CDO/1.9.8-foss-2019b module load R/4.1.2-foss-2019b module load OpenMPI/4.0.5-GCC-8.3.0-nord3-v2 + module load Phantomjs else diff --git a/autosubmit/auto-scorecards.sh b/autosubmit/auto-scorecards.sh new file mode 100644 index 00000000..ac26e9c1 --- /dev/null +++ b/autosubmit/auto-scorecards.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +############ AUTOSUBMIT INPUTS ############ +proj_dir=%PROJDIR% +outdir=%OUTDIR% +recipe=%RECIPE% +############################### + +cd $proj_dir + +recipe=${outdir}/logs/recipes/${recipe} + +source MODULES + +Rscript /modules/Scorecards/Scorecards.R ${recipe} diff --git a/autosubmit/conf_esarchive/jobs.conf b/autosubmit/conf_esarchive/jobs.conf index 88f3565c..4767dcc1 100644 --- a/autosubmit/conf_esarchive/jobs.conf +++ b/autosubmit/conf_esarchive/jobs.conf @@ -6,3 +6,11 @@ NOTIFY_ON = PLATFORM = nord3v2 PROCESSORS = +[scorecards] +FILE = autosubmit/auto-scorecards.sh +RUNNING = ONCE +WALLCLOCK = 00:10 +PLATFORM = nord3v2 +PROCESSORS = 1 +DEPENDENCIES = verification +RECIPE = recipes/recipe_scorecards.yml diff --git a/modules/Scorecards/Scorecards.R b/modules/Scorecards/Scorecards.R new file mode 100644 index 00000000..9d4eb946 --- /dev/null +++ b/modules/Scorecards/Scorecards.R @@ -0,0 +1,179 @@ +############################################################################### +##################### SCORECARDS MODULE FOR SUNSET SUITE ###################### +############################################################################### + +##### Load source functions ##### +source('/modules/Scorecards/tmp/LoadMetrics.R') +source('/modules/Scorecards/tmp/WeightedMetrics.R') +source('/modules/Scorecards/tmp/Utils.R') +source('/modules/Scorecards/tmp/SCTransform.R') +source('/modules/Scorecards/tmp/ScorecardsSingle.R') +source('/modules/Scorecards/tmp/ScorecardsMulti.R') +source('/modules/Scorecards/tmp/ScorecardsSystemDiff.R') +source('/modules/Scorecards/tmp/SCPlotScorecard.R') + +## Define function +plot_scorecards <- function(recipe) { + + ## set parameters + input.path <- '/esarchive/scratch/nmilders/scorecards_data/to_system/cross_validation/both_cross_val/' #recipe$Run$output_dir + output.path <- recipe$Run$output_dir + + system <- recipe$Analysis$Datasets$System$name + reference <- recipe$Analysis$Datasets$Reference$name + var <- recipe$Analysis$Variables$name + start.year <- as.numeric(recipe$Analysis$Time$hcst_start) + end.year <- as.numeric(recipe$Analysis$Time$hcst_end) + forecast.months <- recipe$Analysis$Time$ftime_min : recipe$Analysis$Time$ftime_max + + start.months <- 1:12 #recipe$Analysis$Workflow$Scorecards$start_months + + regions <- recipe$Analysis$Workflow$Scorecards$regions + for (i in names(regions)){regions[[i]] <- unlist(regions[[i]])} + + metric.aggregation <- recipe$Analysis$Workflow$Scorecards$metric_aggregation + metrics.load <- unlist(strsplit(tolower(recipe$Analysis$Workflow$Skill$metric), ", | |,")) + metrics.visualize <- unlist(strsplit(tolower(recipe$Analysis$Workflow$Scorecards$metric), ", | |,")) + table.label <- recipe$Analysis$Workflow$Scorecards$table_label + fileout.label <- recipe$Analysis$Workflow$Scorecards$fileout_label + legend.white.space <- recipe$Analysis$Workflow$Scorecards$legend_white_space + col1.width <- recipe$Analysis$Workflow$Scorecards$col1_width + col2.width <- recipe$Analysis$Workflow$Scorecards$col2_width + calculate.diff <- recipe$Analysis$Workflow$Scorecards$calculate_diff + ncores <- recipe$Analysis$ncores + + ## Load data files + loaded_metrics <- LoadMetrics(system = system, + reference = reference, + var = var, + start.year = start.year, + end.year = end.year, + metrics = metrics.load, + start.months = start.months, + forecast.months = forecast.months, + input.path = input.path) + + + if('region' %in% names(dim(loaded_metrics[[1]][[1]]))){ + + ### Convert loaded metrics to array for allready aggregated data + metrics.dim <- attributes(loaded_metrics[[1]][[1]])$metrics + forecast.months.dim <- attributes(loaded_metrics[[1]][[1]])$forecast.months + start.months.dim <- attributes(loaded_metrics[[1]][[1]])$start.months + regions.dim <- regions #list('NAO' = c(lon.min = -80, lon.max = 40, lat.min = 20, lat.max = 80)) + + aggregated_metrics <- array(dim = c(system = length(loaded_metrics), + reference = length(loaded_metrics[[1]]), + metric = length(metrics.dim), + time = length(forecast.months.dim), + sdate = length(start.months.dim), + region = length(regions.dim))) + + + for (sys in 1:length(names(loaded_metrics))){ + for (ref in 1:length(names(loaded_metrics[[sys]]))){ + aggregated_metrics[sys, ref, , , , ] <- s2dv::Reorder(data = loaded_metrics[[sys]][[ref]], order = c('metric','time','sdate','region')) + } + } + + ## Add attributes + attributes(aggregated_metrics)$metrics <- metrics.load + attributes(aggregated_metrics)$start.months <- attributes(loaded_metrics[[1]][[1]])$start.months + attributes(aggregated_metrics)$forecast.months <- attributes(loaded_metrics[[1]][[1]])$forecast.months + attributes(aggregated_metrics)$regions <- regions + attributes(aggregated_metrics)$system.name <- names(loaded_metrics) + attributes(aggregated_metrics)$reference.name <- names(loaded_metrics[[1]]) + + + } else { + ## Calculate weighted mean of spatial aggregation + aggregated_metrics <- WeightedMetrics(loaded_metrics, + regions = regions, + metric.aggregation = metric.aggregation, + ncores = ncores) + }## close if + + + # if(var == 'nao'){ + # legend.white.space <- 3.75 + # col1.width <- 2 + # col2.width <- 1 + # } else{ + # legend.white.space <- col1.width <- col2.width <- NULL ## Use default values of function + # + # } + + ## Define skill scores in scorec aggragtion has been requested + + if(metric.aggregation == 'score'){ + if('rpss' %in% metrics.visualize){ + metrics.visualize[metrics.visualize == 'rpss'] <- 'rpss_score_aggr' + } + if('crpss' %in% metrics.visualize){ + metrics.visualize[metrics.visualize == 'crpss'] <- 'crpss_score_aggr' + } + } + + ## Create simple scorecard tables + ## (one system only) + ## Metrics input must be in the same order as function SC_spatial_aggregation + scorecard_single <- ScorecardsSingle(data = aggregated_metrics, + system = system, + reference = reference, + var = var, + start.year = start.year, + end.year = end.year, + start.months = start.months, + forecast.months = forecast.months, + region.names = names(regions), + metrics = metrics.visualize, + table.label = table.label, + fileout.label = fileout.label, + legend.white.space = legend.white.space, + col1.width = col1.width, + col2.width = col2.width, + output.path = output.path) + + ## Create multi system/reference scorecard tables + ## (multiple systems with one reference or one system with multiple references) + ## Metrics input must be in the same order as function SC_spatial_aggregation + if(length(system) > 1 || length(reference) > 1){ + scorecard_multi <- ScorecardsMulti(data = aggregated_metrics, + system = system, + reference = reference, + var = var, + start.year = start.year, + end.year = end.year, + start.months = start.months, + forecast.months = forecast.months, + region.names = attributes(regions)$names, + metrics = metrics.visualize, + table.label = table.label, + fileout.label = fileout.label, + output.path = output.path) + } ## close if + + + if(calculate.diff == TRUE){ + if(length(system) == 2 || length(reference) == 2){ + scorecard_diff <- ScorecardsSystemDiff(data = aggregated_metrics, + system = system, + reference = reference, + var = var, + start.year = start.year, + end.year = end.year, + start.months = start.months, + forecast.months = forecast.months, + region.names = attributes(regions)$names, + metrics = metrics.visualize, + table.label = table.label, + fileout.label = fileout.label, + legend.white.space = legend.white.space, + col1.width = col1.width, + col2.width = col2.width, + output.path = output.path) + } else {stop ("Difference scorecard can only be computed with two systems or two references.")} + } ## close if on calculate.diff + +} + diff --git a/modules/Scorecards/tmp/LoadMetrics.R b/modules/Scorecards/tmp/LoadMetrics.R new file mode 100644 index 00000000..7e68b65a --- /dev/null +++ b/modules/Scorecards/tmp/LoadMetrics.R @@ -0,0 +1,207 @@ +#' Scorecards load metrics from verification suite +#' +#'@description Scorecards function to load saved data files +#' +#'@param system A vector of character strings defining the names of the +#' system names following the archive.yml format from verification suite. +#' Accepted system names: 'ECMWF-SEAS5', 'DWD-GFCS2.1', 'CMCC-SPS3.5', +#' 'ecmwfs5','Meteo-France-System 7', 'UK-MetOffice-GloSea600', 'NCEP-CFSv2'. +#'@param reference A vector of character strings defining the names of +#' the references following the archive.yml format from verification suite +#' Pending to be test with more than one. The accepted names are: 'era5'. +#'@param var A character string following the format from +#' variable-dictionary.yml from verification suite (TO DO: multiple variables). +#' The accepted names are: 'psl', 'tas', 'sfcWind', 'prlr'. +#'@param start.year A numeric indicating the start year of the reference period +#'@param end.year A numeric indicating the end year of the reference period +#'@param start.months A vector indicating the numbers of the start months +#'@param forecast.months A vector indicating the numbers of the forecast months +#'@param input.path A character string indicating the path where metrics output +#' files from verification suite are saved (or any other compatible files) +#' +#'@return A is a list by system and reference containing an array of with +#' the following dimensions: longitude, latitude, forecast months, metrics, +#' start dates. + +#'@examples +#'\dontrun{ +#'loaded_metrics <- LoadMetrics(system = c('ECMWF-SEAS5','DWD-GFCS2.1'), +#' reference. = 'ERA5', +#' var = 'tas', +#' start.year = 1993, +#' end.year = 2016, +#' metrics = c('mean_bias', 'enscorr', 'rpss', 'crpss', 'enssprerr'), +#' start.months = sprintf("%02d", 1:12), +#' forecast.months = 1:6, +#' input.path = '/esarchive/scratch/nmilders/scorecards_data/input_data') +#'} +#'@import easyNCDF +#'@import abind +#'@export +LoadMetrics <- function(system, reference, var, start.year, end.year, + metrics, start.months, forecast.months, + inf_to_na = FALSE, + input.path) { + + # Initial checks + ## system + if (!is.character(system)) { + stop("Parameter 'system' must be a character vector with the system names.") + } + ## reference + if (!is.character(reference)) { + stop("Parameter 'reference' must be a character vector with the reference ", + "names.") + } + ## var + if (!is.character(var)) { + stop("Parameter 'var' must be a character vector with the var ", + "names.") + } + if (length(var) > 1) { + warning("Parameter 'var' must be of length one. Only the first value ", + "will be used.") + var <- var[1] + } + ## start.year + if (!is.numeric(start.year)) { + stop("Parameter 'start.year' must be a numeric value.") + } + ## end.year + if (!is.numeric(end.year)) { + stop("Parameter 'end.year' must be a numeric value.") + } + ## metrics + if (!is.character(metrics)) { + stop("Parameter 'metrics' cannot be NULL.") + } + ## start.months + if (is.character(start.months)) { + warning("Parameter 'start.months' must be a numeric vector indicating ", + "the starting months.") + start.months <- as.numeric(start.months) + } + if (!is.numeric(start.months)) { + stop("Parameter 'start.months' must be a numeric vector indicating ", + "the starting months.") + } + start.months <- sprintf("%02d", start.months) + ## Check if sdates are continuous or discrete + if (all(diff(as.numeric(start.months)) == 1)) { + consecutive_start.months <- TRUE + } else { + consecutive_start.months <- FALSE + } + ## forecast.months + if (!is.numeric(forecast.months)) { + stop("Parameter 'forecast.months' must be a numeric vector indicating ", + "the starting months.") + } + ## input.path + if (!is.character(input.path)) { + stop("Parameter 'input.path must be a character string.") + } + if (length(input.path) > 1) { + input.path <- input.path[1] + warning("Parameter 'input.path' has length greater than 1 and only the ", + "first element will be used.") + } + + ## Remove . from names + system <- gsub('.','', system, fixed = T) + reference <- gsub('.','', reference, fixed = T) + + period <- paste0(start.year, "-", end.year) + + ## Define empty list to saved data + all_metrics <- sapply(system, function(x) NULL) + ## Load data for each system + for (sys in 1:length(system)) { + ## Define empty list to saved data + by_reference <- sapply(reference, function(x) NULL) + ## Load data for each reference + for (ref in 1:length(reference)) { + ## Call function to load metrics data + met <- .Loadmetrics(input.path = input.path, # recipe$Run$output, + system = system[sys], + reference = reference[ref], + var = var, + period = period, + start.months = start.months, + forecast.months = forecast.months, + metrics = metrics) + ## Save metric data as array in reference list + by_reference[[reference[ref]]] <- met + ## Remove -Inf from crpss data if variable is precipitation + if (inf_to_na) { + by_reference[[reference]][by_reference[[reference]]==-Inf] <- NA + } + } ## close loop on reference + ## Save reference data in list of system + all_metrics[[system[sys]]] <- by_reference + } ## close loop on system + + return(all_metrics) +} ## close function + +############################################################ + +.Loadmetrics <- function(input.path, system, reference, + var, period, start.months, + forecast.months, metrics) { + + ## Load data for each start date + allfiles <- sapply(start.months, function(m) { + paste0(input.path, "/", system, "/", var, + "/scorecards_", system, "_", reference, "_", + var, "-skill_", period, "_s", m, # mod.pressure, + ".nc")}) + allfiles_exist <- sapply(allfiles, file.exists) + + # Check dims + files_exist_by_month <- seq(1:length(allfiles))[allfiles_exist] + allfiledims <- sapply(allfiles[allfiles_exist], easyNCDF::NcReadDims) + if (length(files_exist_by_month) == 0) { + stop("No files are found.") + } + + num_dims <- numeric(dim(allfiledims)[1]) + for (i in 1:dim(allfiledims)[1]) { + if (length(unique(allfiledims[i,])) > 1) { + warning(paste0("Dimensions of system ", system," with var ", var, + " don't match.")) + } + num_dims[i] <- max(allfiledims[i,]) # We take the largest dimension + } + # dims: [metric, longitude, latitude, time, smonth] + # or [metric, region, time, smonth] + + # Loop for file + m <- array(files_exist_by_month, c(sdate = length(files_exist_by_month))) + array_met_by_sdate <- apply(m, 1, function(x) { + test <- easyNCDF::NcToArray(allfiles[x], vars_to_read = metrics, unlist = T, + drop_var_dim = T) + test}) + dim(array_met_by_sdate) <- c(metric = length(metrics), allfiledims[-1,1], + sdate = length(start.months)) + + # Attributes + # Read attributes from the first existing file + if ("region" %in% rownames(allfiledims)) { + file_for_att <- ncdf4::nc_open(allfiles[allfiles_exist[1]]) + region <- ncdf4::ncatt_get(file_for_att, 'region') + ncdf4::nc_close(file_for_att) + attributes(array_met_by_sdate)$region <- region + } else { + lon <- easyNCDF::NcToArray(allfiles[allfiles_exist][1], vars_to_read = 'longitude', + unlist = T, drop_var_dim = T) + lat <- easyNCDF::NcToArray(allfiles[allfiles_exist][1], vars_to_read = 'latitude', + unlist = T, drop_var_dim = T) + attributes(array_met_by_sdate)$lon <- lon + attributes(array_met_by_sdate)$lat <- lat + } + attributes(array_met_by_sdate)$metrics <- metrics + attributes(array_met_by_sdate)$start.months <- start.months + attributes(array_met_by_sdate)$forecast.months <- forecast.months + return(array_met_by_sdate) +} diff --git a/modules/Scorecards/tmp/SCPlotScorecard.R b/modules/Scorecards/tmp/SCPlotScorecard.R new file mode 100644 index 00000000..4373057b --- /dev/null +++ b/modules/Scorecards/tmp/SCPlotScorecard.R @@ -0,0 +1,444 @@ +#'Scorecards function create simple scorecards by region (types 1 & 3) +#' +#'@description This function creates a scorecard for a single system and +#'reference combination, showing data by region and forecast month. +#' +#'@param data A multidimensional array containing spatially aggregated metrics +#' data with dimensions: metric, region, sdate and ftime. +#'@param row.dim A character string indicating the dimension name to show in the +#' rows of the plot. +#'@param subrow.dim A character string indicating the dimension name to show in +#' the sub-rows of the plot. +#'@param col.dim A character string indicating the dimension name to show in the +#' columns of the plot. +#'@param subcol.dim A character string indicating the dimension name to show in +#' the sub-columns of the plot. +#'@param legend.dim A character string indicating the dimension name to use for +#' the legend. +#'@param row.names A vector of character strings with row display names. +#'@param subrow.names A vector of character strings with sub-row display names. +#'@param col.names A vector of character strings with column display names. +#'@param subcol.names A vector of character strings with sub-column display +#' names. +#'@param row.title A character string for the title of the row names. +#'@param subrow.title A character string for the title of the sub-row names. +#'@param table.title A character string for the title of the plot. +#'@param table.subtitle A character string for the sub-title of the plot. +#'@param legend.breaks A vector of numerics or a list of vectors of numerics, +#' containing the breaks for the legends. If a vector is given as input, then +#' these breaks will be repeated for each legend.dim. A list of vectors can be +#' given as input if the legend.dims require different breaks. This parameter +#' is required even if the legend is not plotted, to define the colors in the +#' scorecard table. +#'@param plot.legend A logical value to determine if the legend is plotted. +#'@param legend.width A numeric value to define the width of the legend bars. +#'@param legend.height A numeric value to define the height of the legend bars. +#'@param palette A vector of character strings or a list of vectors of +#' character strings containing the colors to use in the legends. If a vector +#' is given as input, then these colors will be used for each legend.dim. A +#' list of vectors can be given as input if different colors are desired for +#' the legend.dims. This parameter must be included even if the the legend is +#' not plotted, to define the colors in the scorecard table. +#'@param colorunder A character string or of vector of character strings +#' defining the colors to use for data values with are inferior to the lowest +#' breaks value. This parameter will also plot a inferior triangle in the +#' legend bar. The parameter can be set to NULL if there are no inferior values. +#' If a character string is given this color will be applied to all legend.dims. +#'@param colorsup A character string or of vector of character strings +#' defining the colors to use for data values with are superior to the highest +#' breaks value. This parameter will also plot a inferior triangle in the +#' legend bar. The parameter can be set to NULL if there are no superior values. +#' If a character string is given this color will be applied to all legend.dims. +#'@param round.decimal A numeric indicating to which decimal point the data +#' is to be displayed in the scorecard table. +#'@param font.size A numeric indicating the font size on the scorecard table. +#'@param fileout A path of the location to save the scorecard plots. +#' +#'@return An image file containing the scorecard. +#'@example +#'data <- array(rnorm(1000), dim = c('sdate' = 12, 'metric' = 4, 'region' = 3, +#' 'time' = 6)) +#'row.names <- c('Tropics', 'Extra-tropical NH', 'Extra-tropical SH') +#'col.names <- c('Mean bias (K)', 'Correlation', 'RPSS','CRPSS') +#'SCPlotScorecard(data = data, row.names = row.names, col.names = col.names, +#' subcol.names = month.abb[as.numeric(1:12)], +#' row.title = 'Region', subrow.title = 'Forecast Month', +#' col.title = 'Start date', +#' table.title = "Temperature of ECMWF System 5", +#' table.subtitle = "(Ref: ERA5 1994-2016)", +#' fileout = 'test.png') +#' +#'@import kableExtra +#'@import s2dv +#'@import ClimProjDiags +#'@export +SCPlotScorecard <- function(data, row.dim = 'region', subrow.dim = 'time', + col.dim = 'metric', subcol.dim = 'sdate', + legend.dim = 'metric', row.names = NULL, + subrow.names = NULL, col.names = NULL, + subcol.names = NULL, row.title = NULL, + subrow.title = NULL, col.title = NULL, + table.title = NULL, table.subtitle = NULL, + legend.breaks = NULL, plot.legend = TRUE, + label.scale = NULL, legend.width = NULL, + legend.height = NULL, palette = NULL, + colorunder = NULL, colorsup = NULL, + round.decimal = 2, font.size = 1.1, + legend.white.space = NULL, + col1.width = NULL, col2.width = NULL, + fileout = './scorecard.png') { + # Input parameter checks + ## Check data + if (!is.array(data)) { + stop("Parameter 'data' must be a numeric array.") + } + ## Check row.dim + if (!is.character(row.dim)) { + stop("Parameter 'row.dim' must be a character string.") + } + if (!row.dim %in% names(dim(data))) { + stop("Parameter 'row.dim' is not found in 'data' dimensions.") + } + ## Check row.names + if (!is.null(row.names)) { + if (length(row.names) != as.numeric(dim(data)[row.dim])) { + stop("Parameter 'row.names' must have the same length of dimension 'row.dims'.") + } + } else { + row.names <- as.character(1:dim(data)[row.dim]) + } + ## Check subrow.dim + if (!is.character(subrow.dim)) { + stop("Parameter 'subrow.dim' must be a character string.") + } + if (!subrow.dim %in% names(dim(data))) { + stop("Parameter 'subrow.dim' is not found in 'data' dimensions.") + } + ## Check subrow.names + if (!is.null(subrow.names)) { + if (length(subrow.names) != as.numeric(dim(data)[subrow.dim])) { + stop("Parameter 'subrow.names' must have the same length of dimension 'subrow.dims'.") + } + } else { + subrow.names <- as.character(1:dim(data)[subrow.dim]) + } + ## Check col.dim + if (!is.character(col.dim)) { + stop("Parameter 'col.dim' must be a character string.") + } + if (!col.dim %in% names(dim(data))) { + stop("Parameter 'col.dim' is not found in 'data' dimensions.") + } + ## Check col.names + if (!is.null(col.names)) { + if (length(col.names) != as.numeric(dim(data)[col.dim])) { + stop("Parameter 'col.names' must have the same length of dimension 'col.dims'.") + } + } else { + col.names <- as.character(1:dim(data)[col.dim]) + } + ## Check subcol.dim + if (!is.character(subcol.dim)) { + stop("Parameter 'subcol.dim' must be a character string.") + } + if (!subcol.dim %in% names(dim(data))) { + stop("Parameter 'subcol.dim' is not found in 'data' dimensions.") + } + ## Check subcol.names + if (!is.null(subcol.names)) { + if (length(subcol.names) != as.numeric(dim(data)[subcol.dim])) { + stop("Parameter 'subcol.names' must have the same length of dimension 'subcol.dims'.") + } + } else { + subcol.names <- as.character(1:dim(data)[subcol.dim]) + } + ## Check legend.dim + if (!is.character(legend.dim)) { + stop("Parameter 'legend.dim' must be a character string.") + } + if (!legend.dim %in% names(dim(data))) { + stop("Parameter 'legend.dim' is not found in 'data' dimensions.") + } + ## Check row.title inputs + if (!is.null(row.title)) { + if (!is.character(row.title)) { + stop("Parameter 'row.title must be a character string.") + } + } else { + row.title <- "" + } + ## Check subrow.title + if (!is.null(subrow.title)) { + if (!is.character(subrow.title)) { + stop("Parameter 'subrow.title must be a character string.") + } + } else { + subrow.title <- "" + } + ## Check col.title + if (!is.null(col.title)) { + if (!is.character(col.title)) { + stop("Parameter 'col.title must be a character string.") + } + } else { + col.title <- "" + } + ## Check table.title + if (!is.null(table.title)) { + if (!is.character(table.title)) { + stop("Parameter 'table.title' must be a character string.") + } + } else { + table.title <- "" + } + ## Check table.subtitle + if (!is.null(table.subtitle)) { + if (!is.character(table.subtitle)) { + stop("Parameter 'table.subtitle' must be a character string.") + } + } else { + table.subtitle <- "" + } + # Check legend.breaks + if (is.vector(legend.breaks) && is.numeric(legend.breaks)) { + legend.breaks <- rep(list(legend.breaks), as.numeric(dim(data)[legend.dim])) + } else if (is.null(legend.breaks)) { + legend.breaks <- rep(list(seq(-1, 1, 0.2)), as.numeric(dim(data)[legend.dim])) + } else if (inherits(legend.breaks, 'list')) { + stopifnot(length(legend.breaks) == as.numeric(dim(data)[legend.dim])) + } else { + stop("Parameter 'legend.breaks' must be a numeric vector, a list or NULL.") + } + ## Check plot.legend + if (!inherits(plot.legend, 'logical')) { + stop("Parameter 'plot.legend' must be a logical value.") + } + ## Check label.scale + if (is.null(label.scale)) { + label.scale <- 1.4 + } else { + if (!is.numeric(label.scale) | length(label.scale) != 1) { + stop("Parameter 'label.scale' must be a numeric value of length 1.") + } + } + ## Check legend.width + if (is.null(legend.width)) { + legend.width <- length(subcol.names) * 46.5 + } else { + if (!is.numeric(legend.width) | length(legend.width) != 1) { + stop("Parameter 'legend.width' must be a numeric value of length 1.") + } + } + if (is.null(legend.height)) { + legend.height <- 50 + } else { + if (!is.numeric(legend.height) | length(legend.height) != 1) { + stop("Parameter 'legend.height' must be a numeric value of length 1.") + } + } + ## Check colour palette input + if (is.vector(palette)) { + palette <- rep(list(palette), as.numeric(dim(data)[legend.dim])) + } else if (is.null(palette)) { + palette <- rep(list(c('#2D004B', '#542789', '#8073AC', '#B2ABD2', '#D8DAEB', + '#FEE0B6', '#FDB863', '#E08214', '#B35806', '#7F3B08')), + as.numeric(dim(data)[legend.dim])) + } else if (inherits(palette, 'list')) { + stopifnot(length(palette) == as.numeric(dim(data)[legend.dim])) + } else { + stop("Parameter 'palette' must be a numeric vector, a list or NULL.") + } + ## Check colorunder + if (is.null(colorunder)) { + colorunder <- rep("#04040E",as.numeric(dim(data)[legend.dim])) + } else if (is.character(colorunder) && length(colorunder) == 1) { + colorunder <- rep(colorunder, as.numeric(dim(data)[legend.dim])) + } else if (is.character(colorunder) && + length(colorunder) != as.numeric(dim(data)[legend.dim])) { + stop("Parameter 'colorunder' must be a numeric vector, a list or NULL.") + } + ## Check colorsup + if (is.null(colorsup)) { + colorsup <- rep("#730C04", as.numeric(dim(data)[legend.dim])) + } else if (is.character(colorsup) && length(colorsup) == 1) { + colorsup <- rep(colorsup,as.numeric(dim(data)[legend.dim])) + } else if (is.character(colorsup) && + length(colorsup) != as.numeric(dim(data)[legend.dim])) { + stop("Parameter 'colorsup' must be a numeric vector, a list or NULL.") + } + ## Check round.decimal + if (is.null(round.decimal)) { + round.decimal <- 2 + } else if (!is.numeric(round.decimal) | length(round.decimal) != 1) { + stop("Parameter 'round.decimal' must be a numeric value of length 1.") + } + ## Check font.size + if (is.null(font.size)) { + font.size <- 1 + } else if (!is.numeric(font.size) | length(font.size) != 1) { + stop("Parameter 'font.size' must be a numeric value of length 1.") + } + ## Check legend white space + if (is.null(legend.white.space)){ + legend.white.space <- 6 + } else { + legend.white.space <- legend.white.space + } + ## Check col1.width + if (is.null(col1.width)) { + if (max(nchar(row.names)) == 1 ) { + col1.width <- max(nchar(row.names)) + } else { + col1.width <- max(nchar(row.names))/4 + } + } else if (!is.numeric(col1.width)) { + stop("Parameter 'col1.width' must be a numeric value of length 1.") + } + ## Check col2.width + if (is.null(col2.width)) { + if (max(nchar(subrow.names)) == 1 ) { + col2.width <- max(nchar(subrow.names)) + } else { + col2.width <- max(nchar(subrow.names))/4 + } + } else if (!is.numeric(col2.width)) { + stop("Parameter 'col2.width' must be a numeric value of length 1.") + } + + + # Get dimensions of inputs + n.col.names <- length(col.names) + n.subcol.names <- length(subcol.names) + n.row.names <- length(row.names) + n.subrow.names <- length(subrow.names) + + # Define table size + n.rows <- n.row.names * n.subrow.names + n.columns <- 2 + (n.col.names * n.subcol.names) + + # Column names + row.names.table <- rep("", n.rows) + for (row in 1:n.row.names) { + row.names.table[floor(n.subrow.names/2) + (row - 1) * n.subrow.names] <- row.names[row] + } + + # Define scorecard table titles + column.titles <- c(row.title, subrow.title, rep(c(subcol.names), n.col.names)) + + # Round data + data <- round(data, round.decimal) + + # Define data inside the scorecards table + for (row in 1:n.row.names) { + table_temp <- data.frame(table_column_2 = as.character(subrow.names)) + for (col in 1:n.col.names) { + table_temp <- data.frame(table_temp, + Reorder(data = Subset(x = data, along = c(col.dim, row.dim), + indices = list(col, row), drop = 'selected'), + order = c(subrow.dim, subcol.dim))) + } + if (row == 1) { + table_data <- table_temp + } else { + table_data <- rbind(table_data, table_temp) + } + } + + # All data for plotting in table + table <- data.frame(table_column_1 = row.names.table, table_data) + table_temp <- array(unlist(table[3:n.columns]), dim = c(n.rows, n.columns - 2)) + # Define colors to show in table + table_colors <- .SCTableColors(table = table_temp, n.col = n.col.names, + n.subcol = n.subcol.names, n.row = n.row.names, + n.subrow = n.subrow.names, legend.breaks = legend.breaks, + palette = palette, colorunder = colorunder, + colorsup = colorsup) + metric.color <- table_colors$metric.color + metric.text.color <- table_colors$metric.text.color + # metric.text.bold <- table_colors$metric.text.bold + + options(stringsAsFactors = FALSE) + title <- data.frame(c1 = table.title, c2 = n.columns) + subtitle <- data.frame(c1 = table.subtitle, c2 = n.columns) + header.names <- as.data.frame(data.frame(c1 = c("", col.names), + c2 = c(2, rep(n.subcol.names, n.col.names)))) + header.names2 <- as.data.frame(data.frame(c1 = c("", paste0(rep(col.title, n.col.names))), + c2 = c(2, rep(n.subcol.names, n.col.names)))) + title.space <- data.frame(c1 = "\n", c2 = n.columns) + + # Hide NA values in table + options(knitr.kable.NA = '') + + # Create HTML table + table.html.part <- list() + table.html.part[[1]] <- kbl(table, escape = F, col.names = column.titles, align = rep("c", n.columns)) %>% + kable_paper("hover", full_width = F, font_size = 14 * font.size) %>% + add_header_above(header = header.names2, font_size = 16 * font.size) %>% + add_header_above(header = title.space, font_size = 10 * font.size) %>% + add_header_above(header = header.names, font_size = 20 * font.size) %>% + add_header_above(header = title.space, font_size = 10 * font.size) %>% + add_header_above(header = subtitle, font_size = 16 * font.size, align = "left") %>% + add_header_above(header = title.space, font_size = 10 * font.size) %>% + add_header_above(header = title, font_size = 22 * font.size, align = "left") + + for (i in 1:n.col.names) { + for (j in 1:n.subcol.names) { + my.background <- metric.color[, (i - 1) * n.subcol.names + j] + my.text.color <- metric.text.color[, (i - 1) * n.subcol.names + j] + # my.bold <- metric.text.bold[(i - 1) * n.subcol.names + j] + + table.html.part[[(i - 1) * n.subcol.names + j + 1]] <- + column_spec(table.html.part[[(i - 1) * n.subcol.names + j]], + 2 + n.subcol.names * (i - 1) + j, + background = my.background[1:n.rows], + color = my.text.color[1:n.rows], + bold = T) ## strsplit(toString(bold), ', ')[[1]] + } + } + + # Define position of table borders + column.borders <- NULL + for (i in 1:n.col.names) { + column.spacing <- (n.subcol.names * i) + 2 + column.borders <- c(column.borders, column.spacing) + } + + n.last.list <- n.col.names * n.subcol.names + 1 + + table.html <- column_spec(table.html.part[[n.last.list]], 1, bold = TRUE, width_min = paste0(col1.width, 'cm')) %>% + column_spec(2, bold = TRUE, width_min = paste0(col2.width, 'cm')) %>% + column_spec(3:n.columns, width_min = "1.2cm") %>% + column_spec(c(1, 2, column.borders), border_right = "2px solid black") %>% + column_spec(1, border_left = "2px solid black") %>% + column_spec(n.columns, border_right = "2px solid black") %>% + row_spec(seq(from = 0, to = n.subrow.names * n.row.names, by = n.subrow.names), + extra_css = "border-bottom: 2px solid black", hline_after = TRUE) + + if (plot.legend == TRUE) { + # Save the scorecard (without legend) + save_kable(table.html, file = paste0(fileout, '_tmpScorecard.png'), vheight = 1) + + # White space for legend + legend.white.space <- 37.8 * legend.white.space ## converting pixels to cm + + # Create and save color bar legend + scorecard_legend <- .SCLegend(legend.breaks = legend.breaks, + palette = palette, + colorunder = colorunder, + colorsup = colorsup, + label.scale = label.scale, + legend.width = legend.width, + legend.height = legend.height, + legend.white.space = legend.white.space, + fileout = fileout) + + # Add the legends below the scorecard table + system(paste0('convert -append ', fileout, '_tmpScorecard.png ', fileout, + '_tmpScorecardLegend.png ', fileout)) + # Remove temporary scorecard table + unlink(paste0(fileout, '_tmpScorecard*.png')) + } + if (plot.legend == FALSE) { + save_kable(table.html, file = fileout) + } +} diff --git a/modules/Scorecards/tmp/SCTransform.R b/modules/Scorecards/tmp/SCTransform.R new file mode 100644 index 00000000..585e7576 --- /dev/null +++ b/modules/Scorecards/tmp/SCTransform.R @@ -0,0 +1,42 @@ +#' Scorecards spatially transform calculated means +#' +#'@description Scorecards function to spatially transform the layout of the +#'calculated metric means, to show 'Target Month' instead of 'Start Date'. +#' +#'@param data A multidimensional array of spatially aggregated data containing +#' the following dimensions; system, reference, metric, time, sdate, region. +#'@param sdate_dim A character name referring to the dimension of start date +#' in the array aggregated_metrics. +#'@param ftime_dim A character name referring to the dimension of forecast +#' time in the array aggregated_metrics. +#'@param ncores An integer indicating the number of cores to use in parallel +#' computation. It is NULL by default (1 core). +#' +#'@example +#'transformed_data <- SCTransform(data = aggregated_metrics, +#' sdate_dim = 'sdate', +#' ftime_dim = 'time') +#'@import multiApply +#'@importFrom s2dv Reorder +#'@export +SCTransform <- function(data, + sdate_dim, + ftime_dim, + ncores = NULL) { + + output <- multiApply::Apply(data = data, + target_dims = c(ftime_dim, sdate_dim), + fun = .SCTransform, + ncores = ncores)$output1 + + return(Reorder(data = output, order = names(dim(data)))) +} + +.SCTransform <- function(data) { + output <- data + n_sdates <- dim(data)[sdate_dim] + for (i in 2:dim(data)[ftime_dim]) { + output[i, ] <- data[i, c((n_sdates - i + 2):n_sdates, 1:(n_sdates - i + 1))] + } + return(output) +} diff --git a/modules/Scorecards/tmp/ScorecardsMulti.R b/modules/Scorecards/tmp/ScorecardsMulti.R new file mode 100644 index 00000000..89f1df44 --- /dev/null +++ b/modules/Scorecards/tmp/ScorecardsMulti.R @@ -0,0 +1,360 @@ +#'Function to create all multi system/reference scorecards +#' +#'@description Scorecards function to create scorecard tables for multiple systems +#' and references (types 9 to 12). +#'@param input_data is an array of spatially aggregated metrics containing the +#' following dimensions; system, reference, metric, time, sdate, region. +#'@param system a vector of character strings defining the systems following the +#' archive.yml format from verification suite +#'@param reference a vector of character strings defining the references +#' following the archive.yml format from verification suite +#'@param var a character string following the format from +#' variable-dictionary.yml from verification suite +#'@param start.year a numeric indicating the start year of the reference period +#'@param end.year a numeric indicating the end year of the reference period +#'@param start.date a vector of character strings indicating the start months +#'@param forecast.month a vector of numeric indicating the forecast months +#'@param region.names a vector of character strings containing names of the +#' regions corresponding to the input data +#'@param metrics a vector of character strings containing the metrics. +#'@param table.label a character string containing additional information to +#' include in the scorecard title +#'@param fileout.label a character string containing additional information to +#' include in the output png file when saving the scorecard. +#'@param output.path a path of the location to save the scorecard plots. +#' +#'@return +#' This function returns 4 scorecard images for each region requested, the +#' images are saved in the directory output.path. + +#'@example +#' scorecard_multi <- ScorecardsMulti(data = aggregated_metrics, +#' system.name = c('ECMWF-SEAS5','DWD-GFCS2.1'), +#' reference.name = 'ERA5', +#' var = 'tas', +#' start.year = 1993, +#' end.year = 2016, +#' start.months = 1:12, +#' forecast.months = 1:6, +#' region.names = c('Tropics', 'Extra-tropical NH', 'Extra-tropical SH') +#' metrics = c('mean_bias', 'enscorr', 'rpss','crpss', 'enssprerr'), +#' table.label = '(Interpolation = to system, Aggregation level = skill, Cross-validation = terciles)', +#' fileout.label = '_crossval-terciles_agg-skill', +#' output.path = '/esarchive/scratch/nmilders/scorecards_images/testing' +#' ) + + +ScorecardsMulti <- function(data, + system, + reference, + var, + start.year, + end.year, + start.months, + forecast.months, + region.names, + metrics, + table.label, + fileout.label, + output.path){ + + ## Checks to apply: + # first dimension in aggregated_metrics is system and second dimension is reference + # either multi-system and one reference, or multi-reference and one system + + ## Initial checks + if (is.null(table.label)){ + table.label <- "" + } + if (is.null(fileout.label)){ + fileout.label <- "" + } + + ## Make sure input_data is in correct order for using in functions: + data_order <- c('system','reference','metric','time','sdate','region') + data <- Reorder(data, data_order) + + ## Identify metrics loaded + metrics_loaded <- attributes(data)$metrics + + ## Select only the metrics to visualize from data + input_data <- Subset(data, along = 'metric', indices = match(metrics, metrics_loaded)) + attributes(input_data)$metrics <- metrics + + ## Transform data for scorecards by forecast month (types 11 & 12) + transformed_data <- SCTransform(data = input_data, + sdate_dim = 'sdate', + ftime_dim = 'time') + + ## Load configuration files + sys_dict <- read_yaml("/esarchive/scratch/nmilders/gitlab/git_clones/s2s-suite/conf/archive.yml")$esarchive + var_dict <- read_yaml("/esarchive/scratch/nmilders/gitlab/git_clones/csscorecards/inst/config/variable-dictionary.yml")$vars + + ## Get scorecards table display names from configuration files + var.name <- var_dict[[var]]$long_name + var.units <- var_dict[[var]]$units + + system.name <- NULL + reference.name <- NULL + + for(sys in 1:length(system)){ + system.name1 <- sys_dict$System[[system[sys]]]$name + system.name <- c(system.name, system.name1) + } + for(ref in 1:length(length)){ + reference.name1 <- sys_dict$Reference[[reference[ref]]]$name + reference.name <- c(reference.name, reference.name1) + } + + ## Get metric long names + metric.names.list <- .met_names(metrics, var.units) + + ## format the metric names as character instead of list + for(met in metrics){ + if(met == metrics[1]){ + metric.names <- metric.names.list[[met]] + } else { + metric.names <- c(metric.names, metric.names.list[[met]]) + } + } + + ## Define parameters depending on Multi-system or Multi-reference + if(length(system) > 1 && length(reference) == 1){ + model <- 'system' + table.model.name <- 'System' + model.name <- system.name + eval.label <- 'Ref' + eval.name <- reference.name + eval.filename <- reference + } else if(length(system) == 1 && length(reference) > 1){ + model <- 'reference' + table.model.name <- 'Reference' + model.name <- reference.name + eval.label <- 'Sys' + eval.name <- system.name + eval.filename <- system + } else {stop('Not multi system or multi reference')} + + ## Define table colors + palette <- c('#2D004B', '#542789', '#8073AC', '#B2ABD2', '#D8DAEB', '#FEE0B6', '#FDB863', '#E08214', '#B35806', '#7F3B08') + colorunder <- "#04040E" + colorsup <- "#730C04" + + ## Legend lower limit color + legend.col.inf <- .legend_col_inf(metrics, colorunder) + legend.col.inf <- legend.col.inf[metrics] + + ## Legend upper limit color + legend.col.sup <- .legend_col_sup(metrics, colorsup) + legend.col.sup <- legend.col.sup[metrics] + + ## Legend inputs + plot.legend = TRUE + label.scale = 1.4 + legend.width = 555 + legend.height = 50 + + ## Data display inputs + round.decimal = 2 + font.size = 1.1 + + legend.white.space <- col1.width <- col2.width <- NULL ## Use default values of function + + ## Loop over region + for(reg in 1:length(region.names)){ + + breaks_bias <- NULL + + ## Find position of mean bias metric to calculate breaks + if ('mean_bias' %in% metrics) { + pos_bias <- which(metrics == 'mean_bias') + if(var == 'psl'){ + data[,,pos_bias,,,] <- data[,,pos_bias,,,]/100 ## temporary + } + breaks_bias <- .SCBiasBreaks(Subset(data, along = c('metric','region'), + indices = list(pos_bias,reg))) + } + + ## Define breaks for each metric based of metric position: + legend.breaks <- .met_breaks(metrics, breaks_bias) + + ## Define scorecard titles + table.title <- paste0(var.name, ". Region: ", region.names[reg], " ", table.label) + table.subtitle <- paste0("(", eval.label, ": ", eval.name, " ", start.year, "-", end.year, ")") + + + #### Scorecard_type 9 #### + ## (no transformation or reorder) + fileout <- .Filename(model = model, eval.name = eval.filename, var = var, + start.year = start.year, end.year = end.year, scorecard.type = 9, + region = sub(" ", "-", region.names[reg]), + fileout.label = fileout.label, output.path = output.path) + if(model == 'system'){ + data_sc_9 <- Subset(input_data, c('reference','region'), list(1, reg), drop = 'selected') + } else if(model == 'reference'){ + data_sc_9 <- Subset(input_data, c('system','region'), list(1, reg), drop = 'selected') + } + SCPlotScorecard(data = data_sc_9, + row.dim = model, + subrow.dim = 'time', + col.dim = 'metric', + subcol.dim = 'sdate', + legend.dim = 'metric', + row.names = model.name, + subrow.names = forecast.months, + col.names = metric.names, + subcol.names = month.abb[as.numeric(start.months)], + table.title = table.title, + table.subtitle = table.subtitle, + row.title = table.model.name, + subrow.title = 'Forecast Month', + col.title = 'Start date', + legend.breaks = legend.breaks, + plot.legend = plot.legend, + label.scale = label.scale, + legend.width = legend.width, + legend.height = legend.height, + palette = palette, + colorunder = legend.col.inf, + colorsup = legend.col.sup, + round.decimal = round.decimal, + font.size = font.size, + legend.white.space = legend.white.space, + col1.width = 4, + col2.width = col2.width, + fileout = fileout) + + + #### Scorecard_type 10 #### + ## (reorder only) + fileout <- .Filename(model = model, eval.name = eval.filename, var = var, + start.year = start.year, end.year = end.year, scorecard.type = 10, + region = sub(" ", "-", region.names[reg]), + fileout.label = fileout.label, output.path = output.path) + new_order <- c('system', 'reference', 'metric', 'region','sdate', 'time') + if(model == 'system'){ + data_sc_10 <- Subset(Reorder(input_data, new_order), c('reference','region'), list(1, reg), drop = 'selected') + } else if(model == 'reference'){ + data_sc_10 <- Subset(Reorder(input_data, new_order), c('system','region'), list(1, reg), drop = 'selected') + } + SCPlotScorecard(data = data_sc_10, + row.dim = 'time', + subrow.dim = model, + col.dim = 'metric', + subcol.dim = 'sdate', + legend.dim = 'metric', + row.names = forecast.months, + subrow.names = model.name, + col.names = metric.names, + subcol.names = month.abb[as.numeric(start.months)], + table.title = table.title, + table.subtitle = table.subtitle, + row.title = 'Forecast month', + subrow.title = table.model.name, + col.title = 'Start date', + legend.breaks = legend.breaks, + plot.legend = plot.legend, + label.scale = label.scale, + legend.width = legend.width, + legend.height = legend.height, + palette = palette, + colorunder = legend.col.inf, + colorsup = legend.col.sup, + round.decimal = round.decimal, + font.size = font.size, + legend.white.space = legend.white.space, + col1.width = col1.width, + col2.width = 4, + fileout = fileout) + + + #### Scorecard_type 11 #### + ## (transformation only) + fileout <- .Filename(model = model, eval.name = eval.filename, var = var, + start.year = start.year, end.year = end.year, scorecard.type = 11, + region = sub(" ", "-", region.names[reg]), + fileout.label = fileout.label, output.path = output.path) + if(model == 'system'){ + data_sc_11 <- Subset(transformed_data, c('reference','region'), list(1, reg), drop = 'selected') + } else if(model == 'reference'){ + data_sc_11 <- Subset(transformed_data, c('system','region'), list(1, reg), drop = 'selected') + } + SCPlotScorecard(data = data_sc_11, + row.dim = model, + subrow.dim = 'time', + col.dim = 'metric', + subcol.dim = 'sdate', + legend.dim = 'metric', + row.names = model.name, + subrow.names = forecast.months, + col.names = metric.names, + subcol.names = month.abb[as.numeric(start.months)], + table.title = table.title, + table.subtitle = table.subtitle, + row.title = table.model.name, + subrow.title = 'Forecast Month', + col.title = 'Target month', + legend.breaks = legend.breaks, + plot.legend = plot.legend, + label.scale = label.scale, + legend.width = legend.width, + legend.height = legend.height, + palette = palette, + colorunder = legend.col.inf, + colorsup = legend.col.sup, + round.decimal = round.decimal, + font.size = font.size, + legend.white.space = legend.white.space, + col1.width = 4, + col2.width = col2.width, + fileout = fileout) + + + #### Scorecard_type 12 #### + ## (transformation and reorder) + fileout <- .Filename(model = model, eval.name = eval.filename, var = var, + start.year = start.year, end.year = end.year, scorecard.type = 12, + region = sub(" ", "-", region.names[reg]), + fileout.label = fileout.label, output.path = output.path) + new_order <- c('system', 'reference', 'metric', 'region','sdate', 'time') + if(model == 'system'){ + data_sc_12 <- Subset(Reorder(transformed_data, new_order), c('reference','region'), list(1, reg), drop = 'selected') + } else if(model == 'reference'){ + data_sc_12 <- Subset(Reorder(transformed_data, new_order), c('system','region'), list(1, reg), drop = 'selected') + } + SCPlotScorecard(data = data_sc_12, + row.dim = 'time', + subrow.dim = model, + col.dim = 'metric', + subcol.dim = 'sdate', + legend.dim = 'metric', + row.names = forecast.months, + subrow.names = model.name, + col.names = metric.names, + subcol.names = month.abb[as.numeric(start.months)], + table.title = table.title, + table.subtitle = table.subtitle, + row.title = 'Forecast Month', + subrow.title = table.model.name, + col.title = 'Target month', + legend.breaks = legend.breaks, + plot.legend = plot.legend, + label.scale = label.scale, + legend.width = legend.width, + legend.height = legend.height, + palette = palette, + colorunder = legend.col.inf, + colorsup = legend.col.sup, + round.decimal = round.decimal, + font.size = font.size, + legend.white.space = legend.white.space, + col1.width = col1.width, + col2.width = 4, + fileout = fileout) + + } ## close loop on region + + print("All multi scorecard plots created") + +} ## close function + diff --git a/modules/Scorecards/tmp/ScorecardsSingle.R b/modules/Scorecards/tmp/ScorecardsSingle.R new file mode 100644 index 00000000..56f08204 --- /dev/null +++ b/modules/Scorecards/tmp/ScorecardsSingle.R @@ -0,0 +1,343 @@ +#'Function to create all single system/reference scorecards +#' +#'@description Scorecards function to create scorecard tables for one system and +#' one reference combination (types 1 to 4). +#'@param input_data is an array of spatially aggregated metrics containing the +#' following dimensions; system, reference, metric, time, sdate, region. +#'@param system a vector of character strings defining the systems following the +#' archive.yml format from verification suite +#'@param reference a vector of character strings defining the references +#' following the archive.yml format from verification suite +#'@param var a character string following the format from +#' variable-dictionary.yml from verification suite +#'@param start.year a numeric indicating the start year of the reference period +#'@param end.year a numeric indicating the end year of the reference period +#'@param start.date a vector of character strings indicating the start months +#'@param forecast.month a vector of numeric indicating the forecast months +#'@param region.names a vector of character strings containing names of the +#' regions corresponding to the input data +#'@param metrics a vector of character strings containing the metrics. +#'@param table.label a character string containing additional information to +#' include in the scorecard title +#'@param fileout.label a character string containing additional information to +#' include in the output png file when saving the scorecard. +#'@param output.path a path of the location to save the scorecard plots +#' +#'@return +#' This function returns 4 scorecards images, saved in the directory output.path +#'@examples +#' scorecard_single <- ScorecardsSingle(data = aggregated_metrics, +#' system.name = c('ECMWF-SEAS5','DWD-GFCS2.1'), +#' reference.name = 'ERA5', +#' var = 'tas', +#' start.year = 1993, +#' end.year = 2016, +#' start.months = 1:12, +#' forecast.months = 1:6, +#' region.names = c('Tropics', 'Extra-tropical NH', 'Extra-tropical SH') +#' metrics = c('mean_bias', 'enscorr', 'rpss','crpss', 'enssprerr'), +#' table.label = '(Interpolation = to system, Aggregation level = skill, Cross-validation = terciles)', +#' fileout.label = '_crossval-terciles_agg-skill', +#' output.path = '/esarchive/scratch/nmilders/scorecards_images/test' +#' ) +#'@export +ScorecardsSingle <- function(data, system, reference, var, start.year, end.year, + start.months, forecast.months, region.names, + metrics, legend.breaks = NULL, + table.label = NULL, fileout.label = NULL, + legend.white.space = NULL, + col1.width = NULL, col2.width = NULL, + output.path){ + + ## Checks to apply: + # First dimension in aggregated_metrics is system and second dimension is reference + # To allow 1 region - if region = 1 --> only scorecards 1 & 3 need to be plotted + # If any dimension of input dat is 1, make sure dimension is still present in array + + ## Initial checks + # data + if (!is.array(data)) { + stop("Parameter 'data' must be an array with named dimensions.") + } + if (!is.array(data)) { + stop("Parameter 'data' must be an array with named dimensions.") + } + if (is.null(names(dim(data)))) { + stop("Parameter 'data' must have dimenision names.") + } + if (!all(c('system','reference','metric','time','sdate','region') %in% + names(dim(data)))) { + stop("Dimension names of 'data' must be: 'system','reference','metric', + 'time','sdate','region'.") + } + if (is.null(table.label)){ + table.label <- "" + } + if (is.null(fileout.label)){ + fileout.label <- "" + } + + ## Make sure input_data is in correct order for using in functions: + data_order <- c('system', 'reference', 'metric', 'time', 'sdate', 'region') + data <- Reorder(data, data_order) + + ## Identify metrics loaded + metrics_loaded <- attributes(data)$metrics + + ## Select only the metrics to visualize from data + input_data <- Subset(data, along = 'metric', indices = match(metrics, metrics_loaded)) + attributes(input_data)$metrics <- metrics + + ## Transform data for scorecards by forecast month (types 3 & 4) + transformed_data <- SCTransform(data = input_data, + sdate_dim = 'sdate', + ftime_dim = 'time') + + ## Load configuration files + sys_dict <- read_yaml("/esarchive/scratch/nmilders/gitlab/git_clones/s2s-suite/conf/archive.yml")$esarchive + var_dict <- read_yaml("/esarchive/scratch/nmilders/gitlab/git_clones/csscorecards/inst/config/variable-dictionary.yml")$vars + + ## Get scorecards table display names from configuration files + var.name <- var_dict[[var]]$long_name + var.units <- var_dict[[var]]$units + + ## Get metric long names + metric.names.list <- .met_names(metrics, var.units) + + ## format the metric names as character instead of list + for(met in metrics){ + if(met == metrics[1]){ + metric.names <- metric.names.list[[met]] + } else { + metric.names <- c(metric.names, metric.names.list[[met]]) + } + } + + ## Define table colors + palette <- c('#2D004B', '#542789', '#8073AC', '#B2ABD2', '#D8DAEB', '#FEE0B6', '#FDB863', '#E08214', '#B35806', '#7F3B08') + colorunder <- "#04040E" + colorsup <- "#730C04" + + ## Legend lower limit color + legend.col.inf <- .legend_col_inf(metrics, colorunder) + legend.col.inf <- legend.col.inf[metrics] + + ## Legend upper limit color + legend.col.sup <- .legend_col_sup(metrics, colorsup) + legend.col.sup <- legend.col.sup[metrics] + + ## Legend inputs + plot.legend = TRUE + label.scale = 1.4 + legend.width = 555 + legend.height = 50 + + ## Data display inputs + round.decimal = 2 + font.size = 1.1 + + ## Loop over system and reference for each scorecard plot + for (sys in 1:dim(input_data)['system']) { + for (ref in 1:dim(input_data)['reference']) { + + ## TO DO: Apply check to each scorecard function + ## check dimension 'metric' exists: + if (!("metric" %in% names(dim(input_data)))) { + dim(input_data) <- c(metric = 1, dim(input_data)) + } + + ## Find position of mean bias metric to calculate breaks + breaks_bias <- NULL + if ('mean_bias' %in% metrics){ + stopifnot(identical(names(dim(Subset(input_data, c('system', 'reference'), list(sys, ref), drop = 'selected'))), c('metric','time','sdate','region'))) + temp_data <- Subset(input_data, c('system', 'reference'), list(sys, ref), drop = 'selected') + pos_bias <- which(metrics == 'mean_bias') + if(var == 'psl'){ + temp_data[pos_bias,,,] <- temp_data[pos_bias,,,]/100 + } + breaks_bias <- .SCBiasBreaks(Subset(temp_data, along = 'metric', + indices = pos_bias)) + } + + ## Define breaks for each metric based of metric position: + legend.breaks <- .met_breaks(metrics, breaks_bias) + + ## Put breaks in same order as metrics + legend.breaks <- legend.breaks[metrics] + + ## Get scorecards table display names from configuration files + system.name <- sys_dict$System[[system[sys]]]$name + reference.name <- sys_dict$Reference[[reference[ref]]]$name + + ## Define scorecard titles + table.title <- paste0(var.name, " of ", system.name, " ", table.label) + table.subtitle <- paste0("(Ref: ", reference.name, " ", start.year, "-", end.year, ")") + + ############################################################################# + + #### Scorecard_type 1 #### + ## (no transformation or reorder) + fileout <- .Filename(system = system[sys], reference = reference[ref], var = var, + start.year = start.year, end.year = end.year, scorecard.type = 1, + fileout.label = fileout.label, output.path = output.path) + data_sc_1 <- Subset(input_data, c('system', 'reference'), list(sys, ref), drop = 'selected') + SCPlotScorecard(data = data_sc_1, + row.dim = 'region', + subrow.dim = 'time', + col.dim = 'metric', + subcol.dim = 'sdate', + legend.dim = 'metric', + row.names = region.names, + subrow.names = forecast.months, + col.names = metric.names, + subcol.names = month.abb[as.numeric(start.months)], + table.title = table.title, + table.subtitle = table.subtitle, + row.title = 'Region', + subrow.title = 'Forecast Month', + col.title = 'Start date', + legend.breaks = legend.breaks, + plot.legend = plot.legend, + label.scale = label.scale, + legend.width = legend.width, + legend.height = legend.height, + palette = palette, + colorunder = legend.col.inf, + colorsup = legend.col.sup, + round.decimal = round.decimal, + font.size = font.size, + legend.white.space = legend.white.space, + col1.width = col1.width, + col2.width = col2.width, + fileout = fileout) + + + #### Scorecard_type 2 #### + ## (reorder only) + ## Scorecard type 2 is same as type 1 for only one region, therefore is + ## only plotted if more that one region is requested + if(dim(input_data)['region'] > 1) { + fileout <- .Filename(system = system[sys], reference = reference[ref], var = var, + start.year = start.year, end.year = end.year, scorecard.type = 2, + fileout.label = fileout.label, output.path = output.path) + new_order <- c('metric', 'region', 'sdate', 'time') + data_sc_2 <- Reorder(Subset(input_data, c('system', 'reference'), list(sys, ref), drop = 'selected'), new_order) + SCPlotScorecard(data = data_sc_2, + row.dim = 'time', + subrow.dim = 'region', + col.dim = 'metric', + subcol.dim = 'sdate', + legend.dim = 'metric', + row.names = forecast.months, + subrow.names = region.names, + col.names = metric.names, + subcol.names = month.abb[as.numeric(start.months)], + table.title = table.title, + table.subtitle = table.subtitle, + row.title = 'Forecast Month', + subrow.title = 'Region', + col.title = 'Start date', + legend.breaks = legend.breaks, + plot.legend = plot.legend, + label.scale = label.scale, + legend.width = legend.width, + legend.height = legend.height, + palette = palette, + colorunder = legend.col.inf, + colorsup = legend.col.sup, + round.decimal = round.decimal, + font.size = font.size, + legend.white.space = legend.white.space, + col1.width = col1.width, + col2.width = col2.width, + fileout = fileout) + } ## close if + + + #### Scorecard_type 3 #### + ## (transformation only) + fileout <- .Filename(system = system[sys], reference = reference[ref], var = var, + start.year = start.year, end.year = end.year, scorecard.type = 3, + fileout.label = fileout.label, output.path = output.path) + data_sc_3 <- Subset(transformed_data, c('system', 'reference'), list(sys, ref), drop = 'selected') + SCPlotScorecard(data = data_sc_3, + row.dim = 'region', + subrow.dim = 'time', + col.dim = 'metric', + subcol.dim = 'sdate', + legend.dim = 'metric', + row.names = region.names, + subrow.names = forecast.months, + col.names = metric.names, + subcol.names = month.abb[as.numeric(start.months)], + table.title = table.title, + table.subtitle = table.subtitle, + row.title = 'Region', + subrow.title = 'Forecast Month', + col.title = 'Target month', + legend.breaks = legend.breaks, + plot.legend = plot.legend, + label.scale = label.scale, + legend.width = legend.width, + legend.height = legend.height, + palette = palette, + colorunder = legend.col.inf, + colorsup = legend.col.sup, + round.decimal = round.decimal, + font.size = font.size, + legend.white.space = legend.white.space, + col1.width = col1.width, + col2.width = col2.width, + fileout = fileout) + + + #### Scorecard_type 4 #### + ## (transformation and reorder) + ## Scorecard type 4 is same as type 3 for only one region, therefore is + ## only plotted if more that one region is requested + if(dim(input_data)['region'] > 1) { + fileout <- .Filename(system = system[sys], reference = reference[ref], var = var, + start.year = start.year, end.year = end.year, scorecard.type = 4, + fileout.label = fileout.label, output.path = output.path) + new_order <- c('metric', 'region', 'sdate', 'time') + data_sc_4 <- Reorder(Subset(transformed_data, c('system', 'reference'), list(sys, ref), drop = 'selected'), new_order) + SCPlotScorecard(data = data_sc_4, + row.dim = 'time', + subrow.dim = 'region', + col.dim = 'metric', + subcol.dim = 'sdate', + legend.dim = 'metric', + row.names = forecast.months, + subrow.names = region.names, + col.names = metric.names, + subcol.names = month.abb[as.numeric(start.months)], + table.title = table.title, + table.subtitle = table.subtitle, + row.title = 'Forecast Month', + subrow.title = 'Region', + col.title = 'Target month', + legend.breaks = legend.breaks, + plot.legend = plot.legend, + label.scale = label.scale, + legend.width = legend.width, + legend.height = legend.height, + palette = palette, + colorunder = legend.col.inf, + colorsup = legend.col.sup, + round.decimal = round.decimal, + font.size = font.size, + legend.white.space = legend.white.space, + col1.width = col1.width, + col2.width = col2.width, + fileout = fileout) + } ## close if + + } ## close loop on ref + } ## close loop on sys + + print("All single system scorecard plots created") + +} ## close function + + + diff --git a/modules/Scorecards/tmp/ScorecardsSystemDiff.R b/modules/Scorecards/tmp/ScorecardsSystemDiff.R new file mode 100644 index 00000000..a19b1651 --- /dev/null +++ b/modules/Scorecards/tmp/ScorecardsSystemDiff.R @@ -0,0 +1,350 @@ +#'Function to create all multi system/reference scorecards +#' +#'@description Scorecards function to create scorecard tables for multiple systems +#' and references (types 9 to 12). +#'@param input_data is an array of spatially aggregated metrics containing the +#' following dimensions; system, reference, metric, time, sdate, region. +#'@param system a vector of character strings defining the systems following the +#' archive.yml format from verification suite +#'@param reference a vector of character strings defining the references +#' following the archive.yml format from verification suite +#'@param var a character string following the format from +#' variable-dictionary.yml from verification suite +#'@param start.year a numeric indicating the start year of the reference period +#'@param end.year a numeric indicating the end year of the reference period +#'@param start.date a vector of character strings indicating the start months +#'@param forecast.month a vector of numeric indicating the forecast months +#'@param region.names a vector of character strings containing names of the +#' regions corresponding to the input data +#'@param metrics a vector of character strings containing the metrics. +#'@param table.label a character string containing additional information to +#' include in the scorecard title +#'@param fileout.label a character string containing additional information to +#' include in the output png file when saving the scorecard. +#'@param output.path a path of the location to save the scorecard plots. +#' +#'@return +#' This function returns 4 scorecard images for each region requested, the +#' images are saved in the directory output.path. + +#'@example +#' scorecard_diff <- ScorecardsDiff(data = aggregated_metrics, +#' system.name = c('ECMWF-SEAS5','DWD-GFCS2.1'), +#' reference.name = 'ERA5', +#' var = 'tas', +#' start.year = 1993, +#' end.year = 2016, +#' start.months = 1:12, +#' forecast.months = 1:6, +#' region.names = c('Tropics', 'Extra-tropical NH', 'Extra-tropical SH') +#' metrics = c('mean_bias', 'enscorr', 'rpss','crpss', 'enssprerr'), +#' table.label = '(Interpolation = to system, Aggregation level = skill, Cross-validation = terciles)', +#' fileout.label = '_crossval-terciles_agg-skill', +#' output.path = '/esarchive/scratch/nmilders/scorecards_images/testing' +#' ) + + +ScorecardsSystemDiff <- function(data, + system, + reference, + var, + start.year, + end.year, + start.months, + forecast.months, + region.names, + metrics, + table.label = NULL, + fileout.label = NULL, + legend.white.space = NULL, + col1.width = NULL, + col2.width = NULL, + output.path){ + + ## Checks to apply: + # first dimension in aggregated_metrics is system and second dimension is reference + # either multi-system and one reference, or multi-reference and one system + + ## Initial checks + if (is.null(table.label)){ + table.label <- "" + } + if (is.null(fileout.label)){ + fileout.label <- "" + } + + ## Make sure input_data is in correct order for using in functions: + data_order <- c('system','reference','metric','time','sdate','region') + data <- Reorder(data, data_order) + + ## Identify metrics loaded + metrics_loaded <- attributes(data)$metrics + + ## Select only the metrics to visualize from data + input_data <- Subset(data, along = 'metric', indices = match(metrics, metrics_loaded)) + attributes(input_data)$metrics <- metrics + + ## Calculate difference between two systems/references + if(length(system) == 2 && length(reference) == 1){ + dataset1 <- Subset(input_data, c('system', 'reference'), list(1, 1), drop = 'selected') + dataset2 <- Subset(input_data, c('system', 'reference'), list(2, 1), drop = 'selected') + } + else if(length(system) == 1 && length(reference) == 2){ + dataset1 <- Subset(input_data, c('system', 'reference'), list(1, 1), drop = 'selected') + dataset2 <- Subset(input_data, c('system', 'reference'), list(1, 2), drop = 'selected') + } + + ## Calculate difference of mean_bias from 0 for each dataset + if ('mean_bias' %in% metrics){ + pos_bias <- which(metrics == 'mean_bias') + dataset1[pos_bias,,,] <- abs(dataset1[pos_bias,,,]) + dataset2[pos_bias,,,] <- abs(dataset2[pos_bias,,,]) + } + + ## Calculate difference of enssprerr from 1 for each dataset + if ('enssprerr' %in% metrics){ + pos_enssprerr <- which(metrics == 'enssprerr') + dataset1[pos_enssprerr,,,] <- abs(1-dataset1[pos_enssprerr,,,]) + dataset2[pos_enssprerr,,,] <- abs(1-dataset2[pos_enssprerr,,,]) + } + + diff_data <- dataset1 - dataset2 + + # Transform data for scorecards by forecast month (types 3 & 4) + transformed_data <- SCTransform(data = diff_data, + sdate_dim = 'sdate', + ftime_dim = 'time') + + ## Load configuration files + sys_dict <- read_yaml("/esarchive/scratch/nmilders/gitlab/git_clones/s2s-suite/conf/archive.yml")$esarchive + var_dict <- read_yaml("/esarchive/scratch/nmilders/gitlab/git_clones/csscorecards/inst/config/variable-dictionary.yml")$vars + + ## Get scorecards table display names from configuration files + var.name <- var_dict[[var]]$long_name + var.units <- var_dict[[var]]$units + + system.name <- NULL + reference.name <- NULL + + for(sys in 1:length(system)){ + system.name1 <- sys_dict$System[[system[sys]]]$name + system.name <- c(system.name, system.name1) + } + for(ref in 1:length(reference)){ + reference.name1 <- sys_dict$Reference[[reference[ref]]]$name + reference.name <- c(reference.name, reference.name1) + } + + ## Get metric long names + metric.names.list <- .met_names(metrics, var.units) + + ## format the metric names as character instead of list + for(met in metrics){ + if(met == metrics[1]){ + metric.names <- metric.names.list[[met]] + } else { + metric.names <- c(metric.names, metric.names.list[[met]]) + } + } + + ## Define parameters depending on system compariosn or reference comparison + if(length(system) > 1 && length(reference) == 1){ + comparison <- system + model <- 'system' + table.model.name <- 'System' + model.name <- system.name + eval.label <- 'Ref' + eval.name <- reference.name + eval.filename <- reference + } else if(length(system) == 1 && length(reference) > 1){ + comparison <- reference + model <- 'reference' + table.model.name <- 'Reference' + model.name <- reference.name + eval.label <- 'Sys' + eval.name <- system.name + eval.filename <- system + } else {stop('Not multi system or multi reference')} + + ## Define table colors + palette <- c('#2D004B', '#542789', '#8073AC', '#B2ABD2', '#D8DAEB', '#FEE0B6', '#FDB863', '#E08214', '#B35806', '#7F3B08') + colorunder <- "#04040E" + colorsup <- "#730C04" + + ## Legend inputs + plot.legend = TRUE + label.scale = 1.4 + legend.width = 555 + legend.height = 50 + + ## Data display inputs + round.decimal = 2 + font.size = 1.1 + + ## Define breaks for each metric based of metric position: + legend.breaks <- c(-0.5, -0.4, -0.3, -0.2, -0.1, 0, 0.1, 0.2, 0.3, 0.4, 0.5) + + ## Define scorecard titles + table.title <- paste0(var.name, " - Difference: ", model.name[1], " - ", model.name[2], " ",table.label) + table.subtitle <- paste0("(", eval.label, ": ", eval.name, " ", start.year, "-", end.year, ")") + + #### Scorecard_type 1 #### + ## (no transformation or reorder) + + fileout <- .Filename(system = paste0("diff_",comparison[1],"_",comparison[2]), reference = eval.filename, var = var, + start.year = start.year, end.year = end.year, scorecard.type = 1, + fileout.label = fileout.label, output.path = output.path) + SCPlotScorecard(data = diff_data, + row.dim = 'region', + subrow.dim = 'time', + col.dim = 'metric', + subcol.dim = 'sdate', + legend.dim = 'metric', + row.names = region.names, + subrow.names = forecast.months, + col.names = metric.names, + subcol.names = month.abb[as.numeric(start.months)], + table.title = table.title, + table.subtitle = table.subtitle, + row.title = 'Region', + subrow.title = 'Forecast Month', + col.title = 'Start date', + legend.breaks = legend.breaks, + plot.legend = plot.legend, + label.scale = label.scale, + legend.width = legend.width, + legend.height = legend.height, + palette = palette, + colorunder = colorunder, + colorsup = colorsup, + round.decimal = round.decimal, + font.size = font.size, + legend.white.space = legend.white.space, + col1.width = col1.width, + col2.width = col2.width, + fileout = fileout) + + + #### Scorecard_type 2 #### + ## (reorder only) + ## Scorecard type 2 is same as type 1 for only one region, therefore is + ## only plotted if more that one region is requested + if(dim(input_data)['region'] > 1) { + fileout <- .Filename(system = paste0("diff_",comparison[1],"_",comparison[2]), reference = eval.filename, var = var, + start.year = start.year, end.year = end.year, scorecard.type = 2, + fileout.label = fileout.label, output.path = output.path) + new_order <- c('metric', 'region', 'sdate', 'time') + data_sc_2 <- Reorder(diff_data, new_order) + SCPlotScorecard(data = data_sc_2, + row.dim = 'time', + subrow.dim = 'region', + col.dim = 'metric', + subcol.dim = 'sdate', + legend.dim = 'metric', + row.names = forecast.months, + subrow.names = region.names, + col.names = metric.names, + subcol.names = month.abb[as.numeric(start.months)], + table.title = table.title, + table.subtitle = table.subtitle, + row.title = 'Forecast Month', + subrow.title = 'Region', + col.title = 'Start date', + legend.breaks = legend.breaks, + plot.legend = plot.legend, + label.scale = label.scale, + legend.width = legend.width, + legend.height = legend.height, + palette = palette, + colorunder = colorunder, + colorsup = colorsup, + round.decimal = round.decimal, + font.size = font.size, + legend.white.space = legend.white.space, + col1.width = col1.width, + col2.width = col2.width, + fileout = fileout) + } ## close if + + + #### Scorecard_type 3 #### + ## (transformation only) + fileout <- .Filename(system = paste0("diff_",comparison[1],"_",comparison[2]), reference = eval.filename, var = var, + start.year = start.year, end.year = end.year, scorecard.type = 3, + fileout.label = fileout.label, output.path = output.path) + SCPlotScorecard(data = transformed_data, + row.dim = 'region', + subrow.dim = 'time', + col.dim = 'metric', + subcol.dim = 'sdate', + legend.dim = 'metric', + row.names = region.names, + subrow.names = forecast.months, + col.names = metric.names, + subcol.names = month.abb[as.numeric(start.months)], + table.title = table.title, + table.subtitle = table.subtitle, + row.title = 'Region', + subrow.title = 'Forecast Month', + col.title = 'Target month', + legend.breaks = legend.breaks, + plot.legend = plot.legend, + label.scale = label.scale, + legend.width = legend.width, + legend.height = legend.height, + palette = palette, + colorunder = colorunder, + colorsup = colorsup, + round.decimal = round.decimal, + font.size = font.size, + legend.white.space = legend.white.space, + col1.width = col1.width, + col2.width = col2.width, + fileout = fileout) + + + #### Scorecard_type 4 #### + ## (transformation and reorder) + ## Scorecard type 4 is same as type 3 for only one region, therefore is + ## only plotted if more that one region is requested + if(dim(input_data)['region'] > 1) { + fileout <- .Filename(system = paste0("diff_",comparison[1],"_",comparison[2]), reference = eval.filename, var = var, + start.year = start.year, end.year = end.year, scorecard.type = 4, + fileout.label = fileout.label, output.path = output.path) + new_order <- c('metric', 'region', 'sdate', 'time') + data_sc_4 <- Reorder(transformed_data, new_order) + SCPlotScorecard(data = data_sc_4, + row.dim = 'time', + subrow.dim = 'region', + col.dim = 'metric', + subcol.dim = 'sdate', + legend.dim = 'metric', + row.names = forecast.months, + subrow.names = region.names, + col.names = metric.names, + subcol.names = month.abb[as.numeric(start.months)], + table.title = table.title, + table.subtitle = table.subtitle, + row.title = 'Forecast Month', + subrow.title = 'Region', + col.title = 'Target month', + legend.breaks = legend.breaks, + plot.legend = plot.legend, + label.scale = label.scale, + legend.width = legend.width, + legend.height = legend.height, + palette = palette, + colorunder = colorunder, + colorsup = colorsup, + round.decimal = round.decimal, + font.size = font.size, + legend.white.space = legend.white.space, + col1.width = col1.width, + col2.width = col2.width, + fileout = fileout) + } ## close if + +print("All system difference scorecard plots created") + +} ## close function + diff --git a/modules/Scorecards/tmp/Utils.R b/modules/Scorecards/tmp/Utils.R new file mode 100644 index 00000000..6ba49e8c --- /dev/null +++ b/modules/Scorecards/tmp/Utils.R @@ -0,0 +1,361 @@ +############### FUNCTIONS FOR SCORECARDS ################ + + +## Define metric names + +.met_names <- function(metrics, var.units) { # metrics is a object with the names of the metrics to be displayed + result <- list() + if ('mean_bias' %in% metrics) { + result <- append(result, list('mean_bias' = paste0('Mean bias (', var.units,')'))) + } + if ('enscorr' %in% metrics) { + result <- append(result, list('enscorr' = 'Correlation')) + } + if ('rps' %in% metrics ) { + result <- append(result, list('rps' = 'RPS')) + } + if ('frps' %in% metrics ) { + result <- append(result, list('frps' = 'Fair RPS')) + } + if ('rpss' %in% metrics) { + result <- append(result, list('rpss' = 'RPSS')) + } + if ('rpss_score_aggr' %in% metrics) { + result <- append(result, list('rpss_score_aggr' = 'RPSS')) + } + if ('frpss' %in% metrics) { + result <- append(result, list('frpss' = 'Fair RPSS')) + } + if ('crps' %in% metrics) { + result <- append(result, list('crps' = 'CRPS')) + } + if ('crpss' %in% metrics) { + result <- append(result, list('crpss' = 'CRPSS')) + } + if ('crpss_score_aggr' %in% metrics) { + result <- append(result, list('crpss_score_aggr' = 'CRPSS')) + } + if ('bss10' %in% metrics) { + result <- append(result, list('bss10' = 'Brier skill score 10%')) + } + if ('bss90' %in% metrics) { + result <- append(result, list('bss90' = 'Brier skill score 90%')) + } + if ('enssprerr' %in% metrics ) { + result <- append(result, list('enssprerr' = 'Spread-to-error ratio')) + } + if ('rmsss' %in% metrics ) { + result <- append(result, list('rmsss' = 'RMSSS')) + } + return(result) +} + + + +## Define metrics breaks for each input metric + +.met_breaks <- function(metrics, breaks_bias) { # metrics is a object with the names of the metrics to be displayed + result <- list() + if ('mean_bias' %in% metrics) { + result <- append(result, list('mean_bias' = breaks_bias)) + } + if ('enscorr' %in% metrics) { + result <- append(result, list('enscorr' = c(-1, -0.8, -0.6, -0.4, -0.2, 0, 0.2, 0.4, 0.6, 0.8, 1))) + } + if ('rps' %in% metrics ) { + result <- append(result, list('rps' = c(0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.8, 1))) + } + if ('frps' %in% metrics ) { + result <- append(result, list('frps' = c(-0.5, -0.4, -0.3, -0.2, -0.1, 0, 0.1, 0.2, 0.3, 0.4, 0.5))) + } + if ('rpss' %in% metrics) { + result <- append(result, list('rpss' = c(-0.5, -0.4, -0.3, -0.2, -0.1, 0, 0.1, 0.2, 0.3, 0.4, 0.5))) + } + if ('rpss_score_aggr' %in% metrics) { + result <- append(result, list('rpss_score_aggr' = c(-0.5, -0.4, -0.3, -0.2, -0.1, 0, 0.1, 0.2, 0.3, 0.4, 0.5))) + } + if ('frpss' %in% metrics) { + result <- append(result, list('frpss' = c(-0.5, -0.4, -0.3, -0.2, -0.1, 0, 0.1, 0.2, 0.3, 0.4, 0.5))) + } + if ('crps' %in% metrics) { + result <- append(result, list('crps' = c(-0.5, -0.4, -0.3, -0.2, -0.1, 0, 0.1, 0.2, 0.3, 0.4, 0.5))) + } + if ('crpss' %in% metrics) { + result <- append(result, list('crpss' = c(-0.5, -0.4, -0.3, -0.2, -0.1, 0, 0.1, 0.2, 0.3, 0.4, 0.5))) + } + if ('crpss_score_aggr' %in% metrics) { + result <- append(result, list('crpss_score_aggr' = c(-0.5, -0.4, -0.3, -0.2, -0.1, 0, 0.1, 0.2, 0.3, 0.4, 0.5))) + } + if ('bss10' %in% metrics) { + result <- append(result, list('bss10' = c(-0.5, -0.4, -0.3, -0.2, -0.1, 0, 0.1, 0.2, 0.3, 0.4, 0.5))) + } + if ('bss90' %in% metrics) { + result <- append(result, list('bss90' = c(-0.5, -0.4, -0.3, -0.2, -0.1, 0, 0.1, 0.2, 0.3, 0.4, 0.5))) + } + if ('enssprerr' %in% metrics ) { + result <- append(result, list('enssprerr' = c(0, 0.6, 0.7, 0.8, 0.9, 1, 1.2, 1.4, 1.6, 1.8, 2))) + } + if ('rmsss' %in% metrics ) { + result <- append(result, list('rmsss' = c(-0.5, -0.4, -0.3, -0.2, -0.1, 0, 0.1, 0.2, 0.3, 0.4, 0.5))) + } + return(result) +} + +## Define legend lower limit color + +.legend_col_inf <- function(metrics, colorunder) { + result <- list() + if ('mean_bias' %in% metrics) { + result <- append(result, list('mean_bias' = colorunder)) + } + if ('enscorr' %in% metrics) { + result <- append(result, list('enscorr' = NULL)) + } + if ('rps' %in% metrics ) { + result <- append(result, list('rps' = NULL)) + } + if ('frps' %in% metrics ) { + result <- append(result, list('frps' = NULL)) + } + if ('rpss' %in% metrics) { + result <- append(result, list('rpss' = colorunder)) + } + if ('rpss_score_aggr' %in% metrics) { + result <- append(result, list('rpss_score_aggr' = colorunder)) + } + if ('frpss' %in% metrics) { + result <- append(result, list('frpss' = colorunder)) + } + if ('crps' %in% metrics) { + result <- append(result, list('crps' = NULL)) + } + if ('crpss' %in% metrics) { + result <- append(result, list('crpss' = colorunder)) + } + if ('crpss_score_aggr' %in% metrics) { + result <- append(result, list('crpss_score_aggr' = colorunder)) + } + if ('bss10' %in% metrics) { + result <- append(result, list('bss10' = colorunder)) + } + if ('bss90' %in% metrics) { + result <- append(result, list('bss90' = colorunder)) + } + if ('enssprerr' %in% metrics ) { + result <- append(result, list('enssprerr' = NULL)) + } + if ('rmsss' %in% metrics ) { + result <- append(result, list('rmsss' = colorunder)) + } + return(result) +} + + +## Define legend upper limit color + +.legend_col_sup <- function(metrics, colorsup) { + result <- list() + if ('mean_bias' %in% metrics) { + result <- append(result, list('mean_bias' = colorsup)) + } + if ('enscorr' %in% metrics) { + result <- append(result, list('enscorr' = NULL)) + } + if ('rps' %in% metrics ) { + result <- append(result, list('rps' = NULL)) + } + if ('frps' %in% metrics ) { + result <- append(result, list('frps' = NULL)) + } + if ('rpss' %in% metrics) { + result <- append(result, list('rpss' = colorsup)) + } + if ('rpss_score_aggr' %in% metrics) { + result <- append(result, list('rpss_score_aggr' = colorsup)) + } + if ('frpss' %in% metrics) { + result <- append(result, list('frpss' = colorsup)) + } + if ('crps' %in% metrics) { + result <- append(result, list('crps' = colorsup)) + } + if ('crpss' %in% metrics) { + result <- append(result, list('crpss' = colorsup)) + } + if ('crpss_score_aggr' %in% metrics) { + result <- append(result, list('crpss_score_aggr' = colorsup)) + } + if ('bss10' %in% metrics) { + result <- append(result, list('bss10' = colorsup)) + } + if ('bss90' %in% metrics) { + result <- append(result, list('bss90' = colorsup)) + } + if ('enssprerr' %in% metrics ) { + result <- append(result, list('enssprerr' = colorsup)) + } + if ('rmsss' %in% metrics ) { + result <- append(result, list('rmsss' = colorsup)) + } + return(result) +} + + + + +## Output file name to save scorecard +.Filename <- function(system = NULL, reference = NULL, model = NULL, eval.name = NULL, + var = NULL, start.year = NULL, end.year = NULL, scorecard.type = NULL, + region = NULL, fileout.label = NULL, output.path = NULL) { + + ## Remove . from names + system <- gsub('.','', system, fixed = T) + reference <- gsub('.','', reference, fixed = T) + + period <- paste0(start.year, "-", end.year) + + if (scorecard.type == 1 || scorecard.type == 2 || scorecard.type == 3 || scorecard.type == 4 ) { + scorecard_save_path <- paste0(output.path, + "/scorecard-", scorecard.type, "_", system, "_", + reference, "_", var, "_", period, + fileout.label, ".png") + } else { + scorecard_save_path <- paste0(output.path, + "/scorecard-", scorecard.type, "_multi-", + tolower(model), "_", eval.name, "_", + var, "_", period, "_", region, + fileout.label, ".png") + } + + return(scorecard_save_path) +} + +# Scorecards function to assign background color of table cells, +# color of text in table and to bold the text. +# +# It will return a list with 2 arrays: +# (1) metric.color, A 2-dimensional array with character strings containing the +# color codes for each cell background. +# (2) metric.text.color, A 2-dimensional array with character strings +# containing the color codes for each cell text. +.SCTableColors <- function(table, n.col, n.subcol, n.row, n.subrow, + legend.breaks, palette, colorunder, colorsup) { + # Define rows and columns + n.rows <- n.row * n.subrow + n.columns <- n.col * n.subcol + + ## Set table background colors + metric.color <- array(colorunder, c(n.row * n.subrow, n.columns)) + metric.text.color <- array("#2A2A2A", c(n.row * n.subrow , n.columns)) + # metric.text.bold <- array(TRUE, c(n.row * n.subrow , n.columns - 2)) ## Setting all values to bold + + ## Define cell and text colors to show in table + for (i in 1:n.col) { + metric.int <- legend.breaks[[i]] + for (rr in 1:n.rows) { + for (j in 1:n.subcol) { + for (pp in 1:(length(metric.int) - 1)) { + if (is.nan(table[rr,((i - 1) * n.subcol + j)])) { + metric.color[rr,((i - 1) * n.subcol + j)] <- "gray" + } else { + if (table[rr,((i - 1) * n.subcol + j)] >= + metric.int[pp] && table[rr,((i - 1) * n.subcol + j)] <= + metric.int[pp+1]) { + metric.color[rr,((i - 1) * n.subcol + j)] <- palette[[i]][pp] #palette[pp] + } + if (table[rr,((i - 1) * n.subcol + j)] < metric.int[1]) { + metric.color[rr,((i - 1) * n.subcol + j)] <- colorunder[i] + } + if (table[rr,((i - 1) * n.subcol + j)] >= + metric.int[length(metric.int)]) { + metric.color[rr,((i - 1) * n.subcol + j)] <- colorsup[i] + } + } + ## color text in white and bold if background is white or dark blue or dark red: + if (is.nan(table[rr,((i - 1) * n.subcol + j)]) || + (!is.nan(table[rr,((i - 1) * n.subcol + j)]) && pp == 1 && + table[rr,((i - 1) * n.subcol + j)] < metric.int[2]) || + (!is.nan(table[rr,((i - 1) * n.subcol + j)]) && pp == 2 && + table[rr,((i - 1) * n.subcol + j)] < metric.int[3]) || + (!is.nan(table[rr,((i - 1) * n.subcol + j)]) && pp == (length(metric.int) - 1) && + table[rr,((i - 1) * n.subcol + j)] >= metric.int[length(metric.int) - 1]) || + (!is.nan(table[rr,((i - 1) * n.subcol + j)]) && pp == (length(metric.int) - 2) && + table[rr,((i - 1) * n.subcol + j)] >= metric.int[length(metric.int) - 2])) { + metric.text.color[rr,((i - 1) * n.subcol + j)] <- "white" + #metric.text.bold[rr,((i - 1) * n.subcol + j)] <- TRUE + } + } + } + } + } + + return(list(metric.color = metric.color, + metric.text.color = metric.text.color)) + +} + +# Scorecards function to create the color bar legends for the required metrics +# and paste them below the scorecard table +.SCLegend <- function(legend.breaks, palette, colorunder, colorsup, + label.scale, legend.width, legend.height, + legend.white.space, fileout) { + + ## Create color bar legends for each metric + for (i in 1:length(palette)) { + png(filename = paste0(fileout, '_tmpLegend', i, '.png'), width = legend.width, + height = legend.height) + ColorBar(brks = legend.breaks[[i]], cols = palette[[i]], vertical = FALSE, + label_scale = label.scale, col_inf = colorunder[[i]], + col_sup = colorsup[[i]]) + dev.off() + if (i == 1) { + ## Add white space to the left of the first color bar legend + system(paste0('convert ', fileout, '_tmpLegend1.png -background white -splice ', + legend.white.space, 'x0 ', fileout, '_tmpScorecardLegend.png')) + } else { + system(paste0('convert +append ', fileout, '_tmpScorecardLegend.png ', + fileout, '_tmpLegend', i, '.png ', fileout, + '_tmpScorecardLegend.png')) + } + } + unlink(paste0(fileout,'_tmpLegend*.png')) +} + +# Function to calculate color bar breaks for bias metric +.SCBiasBreaks <- function(data){ + + bias.minmax_max <- quantile(data, 0.98, na.rm = TRUE) + bias.minmax_min <- quantile(data, 0.02, na.rm = TRUE) + bias.max <- max(abs(bias.minmax_min), abs(bias.minmax_max)) + + ## one point more than the colors below (the intervals) + bias.int <- bias.max * c(-1, -0.8, -0.6, -0.4, -0.2, 0, 0.2, 0.4, 0.6, 0.8, 1) + + ## round to 2 significance figures + bias.int <- signif(bias.int, digits = 2) + + return(bias.int) +} + +# Function to calculate color bar breaks for CRPS metric +.SCCrpsBreaks <- function(data){ + + crps.max <- quantile(data, 0.98, na.rm = TRUE) + + crps.int <- crps.max * c(0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1) + + ## round to 2 significance figures + crps.int <- signif(crps.int, digits = 2) + + return(crps.int) +} + +# Auxiliary function to get the names of the longitude coordinate +.KnownLonNames <- function() { + known_lon_names <- c('lon', 'lons', 'longitude', 'x', 'i', 'nav_lon') +} + +# Auxiliary function to get the names of the latitude coordinate +.KnownLatNames <- function() { + known_lat_names <- c('lat', 'lats', 'latitude', 'y', 'j', 'nav_lat') +} diff --git a/modules/Scorecards/tmp/WeightedMetrics.R b/modules/Scorecards/tmp/WeightedMetrics.R new file mode 100644 index 00000000..aea23c56 --- /dev/null +++ b/modules/Scorecards/tmp/WeightedMetrics.R @@ -0,0 +1,134 @@ +#' Scorecards spatial aggregation of loaded metrics +#' +#'@description Scorecards function to perform the spatial aggregation of the +#' loaded metrics for the specified regions. +#' +#'@param loaded_metrics is a list of arrays containing the metrics loaded by the +#' function SC_load_metrics. +#'@param region is a named list of vectors containing the desired regions to +#' analyze. For each region the following should be specified in this order: +#' lon_min, lon_max, lat_min, lat_max. +#'@param metric.aggregation a character indicating whether the skill score RPS +#' and CRPSS are calculated from aggregated scores or aggregated skill score +#' directly, either 'score' or 'skill' respectively +#'@param ncores is the number of cores to use for the calculation. +#' +#'@return An array with the following dimensions: system, reference, metrics, +#' time, sdate, region. +#' +#'@examples +#'regions <- list('global' = c(lon.min = 0, lon.max = 360, lat.min = -90, lat.max = 90), +#' 'europe' = c(lon.min = -10, lon.max = 40, lat.min = 30, lat.max = 70)) +#'aggregated_metrics <- WeightedMetrics(loaded_metrics, +#' regions = regions, +#' metric.aggregation = 'skill', +#' ncores = 4) +#'@import multiApply +#'@importFrom ClimProjDiags WeightedMean +#'@importFrom s2dv Reorder +#'@export +WeightedMetrics <- function(loaded_metrics, regions, metric.aggregation, + ncores = NULL, na.rm = TRUE) { + ## Initial checks + # loaded_metrics + if (any(sapply(loaded_metrics, function(x) { + sapply(x, function(y) {is.null(dim(y))}) + }))) { + stop(paste0("Parameter 'loaded_metrics' must be a list of lists of arrays ", + "with named dimensions.")) + } + # regions + if (!all(sapply(regions, is.numeric))) { + stop(paste0("Parameter 'regions' must be a named list of vectors ", + "containing the desired regions to analyze.")) + } + # metric.aggregation + if (!is.character(metric.aggregation)) { + stop("Parameter 'metric.aggregation' must be a character indicating.") + } + # ncores + if (!is.numeric(ncores)) { + stop("Parameter 'ncores' must be an integer.") + } + + ## Get metric names + ## TO DO: check all metric are in the same order for all sys + metrics <- attributes(loaded_metrics[[1]][[1]])$metrics + forecast.months <- attributes(loaded_metrics[[1]][[1]])$forecast.months + start.months <- attributes(loaded_metrics[[1]][[1]])$start.months + + all_metric_means <- array(dim = c(metric = length(metrics), + time = length(forecast.months), + sdate = length(start.months), + region = length(regions), + reference = length(loaded_metrics[[1]]), + system = length(loaded_metrics))) + + ## Loop over system + for (sys in 1:length(loaded_metrics)) { + ## Loop over reference + for (ref in 1:length(loaded_metrics[[sys]])) { + dimnames <- names(dim(loaded_metrics[[sys]][[ref]])) + lon_dim_name <- dimnames[which(dimnames %in% .KnownLonNames())] + lat_dim_name <- dimnames[which(dimnames %in% .KnownLatNames())] + ## Get latitude and longitude from attributes of loaded metrics + ## Loop over region + for (reg in 1:length(regions)) { + ## Calculate weighted means for defined regions for each system and reference + weighted.mean <- WeightedMean(data = loaded_metrics[[sys]][[ref]], + lon = as.vector(attributes(loaded_metrics[[sys]][[ref]])$lon), + lat = as.vector(attributes(loaded_metrics[[sys]][[ref]])$lat), + region = regions[[reg]], + londim = lon_dim_name, + latdim = lat_dim_name, + na.rm = na.rm, + ncores = ncores) + all_metric_means[, , , reg, ref, sys] <- weighted.mean + } ## close loop on region + } ## close loop on reference + } ## close loop on system + + ## skill aggregation: + if (metric.aggregation == 'score') { + if (all(c("rps", "rps_clim") %in% metrics)) { + ## Calculate RPSS from aggregated RPS and RPS_clim + all_metric_means <- multiApply::Apply(data = all_metric_means, + target_dims = 'metric', + fun = function(x, met) { + res <- 1 - x[which(met == 'rps')] / x[which(met == 'rps_clim')] + c(x, res)}, met = metrics, + output_dims = 'metric', + ncores = ncores)$output1 + ## Define name of newly calculated RPSS metric + metrics <- c(metrics, "rpss_score_aggr") + } + if (all(c("crps", "crps_clim") %in% metrics)) { + ## Calculate CRPSS from aggragated CRPS and CRPS_clim + all_metric_means <- multiApply::Apply(data = all_metric_means, + target_dims = 'metric', + fun = function(x, met) { + res <- 1 - x[which(met == 'crps')] / x[which(met == 'crps_clim')] + c(x, res)}, + met = metrics, + output_dims = 'metric', + ncores = ncores)$output1 + ## Define name of newly calculated CRPSS metric + metrics <- c(metrics, "crpss_score_aggr") + } + ## Add warning in case metric.aggregation == 'score' but 1 of the metrics from each pair is missing + } + ## reorder dimensions in array + all_metric_means <- s2dv::Reorder(all_metric_means, c('system','reference','metric','time','sdate','region')) + + ## Add attributes + attributes(all_metric_means)$metrics <- metrics + attributes(all_metric_means)$start.months <- attributes(loaded_metrics[[1]][[1]])$start.months + attributes(all_metric_means)$forecast.months <- attributes(loaded_metrics[[1]][[1]])$forecast.months + attributes(all_metric_means)$regions <- regions + attributes(all_metric_means)$system.name <- names(loaded_metrics) + attributes(all_metric_means)$reference.name <- names(loaded_metrics[[1]]) + + return(all_metric_means) + +} ## close function + diff --git a/recipes/atomic_recipes/recipe_scorecards_atomic.yml b/recipes/atomic_recipes/recipe_scorecards_atomic.yml new file mode 100644 index 00000000..fc88af22 --- /dev/null +++ b/recipes/atomic_recipes/recipe_scorecards_atomic.yml @@ -0,0 +1,69 @@ +Description: + Author: nmilders + Info: scorecards data + +Analysis: + Horizon: seasonal # Mandatory, str: either subseasonal, seasonal, or decadal + Variables: + name: tas # Mandatory, str: tas prlr psl sfcWind + freq: monthly_mean # Mandatory, str: either monthly_mean or daily_mean + Datasets: + System: + name: ECMWF-SEAS5 # Mandatory ECMWF-SEAS5, CMCC-SPS3.5, DWD-GCFS2.1 + Multimodel: no # Mandatory, bool: Either yes/true or no/false + Reference: + name: ERA5 # Mandatory, str: Reference codename. See docu. + Time: + sdate: '0101' ## MMDD + fcst_year: # Optional, int: Forecast year 'YYYY' + hcst_start: '1993' # Mandatory, int: Hindcast start year 'YYYY' + hcst_end: '2016' # Mandatory, int: Hindcast end year 'YYYY' + ftime_min: 1 # Mandatory, int: First leadtime time step in months + ftime_max: 6 # Mandatory, int: Last leadtime time step in months + Region: + latmin: -90 # Mandatory, int: minimum latitude + latmax: 90 # Mandatory, int: maximum latitude + lonmin: 0 # Mandatory, int: minimum longitude + lonmax: 359.9 # Mandatory, int: maximum longitude + Regrid: + method: bilinear # conservative for prlr, bilinear for tas, psl, sfcWind + type: to_system + Workflow: + Calibration: + method: raw # Mandatory, str: Calibration method. See docu. + save: 'none' + Anomalies: + compute: yes + cross_validation: yes + save: 'none' + Skill: + metric: mean_bias EnsCorr rps rpss crps crpss EnsSprErr # str: Skill metric or list of skill metrics. See docu. + cross_validation: yes + save: 'all' + Probabilities: + percentiles: [[1/3, 2/3]] # frac: Quantile thresholds. + save: 'none' + Indicators: + index: no + Scorecards: + regions: + Extra-tropical NH: {lon.min: 0, lon.max: 360, lat.min: 30, lat.max: 90} + Tropics: {lon.min: 0, lon.max: 360, lat.min: -30, lat.max: 30} + Extra-tropical SH : {lon.min: 0, lon.max: 360, lat.min: -30, lat.max: -90} + start_months: NULL + metric: mean_bias enscorr rpss crpss enssprerr + metric_aggregation: 'score' + table_label: NULL + fileout_label: NULL + col1_width: NULL + col2_width: NULL + calculate_diff: FALSE + #output_path: /esarchive/scratch/nmilders/scorecards_images/testing + ncores: 7 # Optional, int: number of cores, defaults to 1 + remove_NAs: # Optional, bool: Whether NAs are removed, defaults to FALSE + Output_format: Scorecards #S2S4E +Run: + Loglevel: INFO + Terminal: yes + output_dir: /esarchive/scratch/nmilders/scorecards_data/to_system/cross_validation/both_cross_val/ + code_dir: /esarchive/scratch/nmilders/gitlab/git_clones/s2s-suite/ diff --git a/recipes/recipe_scoreacards.yml b/recipes/recipe_scoreacards.yml new file mode 100644 index 00000000..a50fd572 --- /dev/null +++ b/recipes/recipe_scoreacards.yml @@ -0,0 +1,105 @@ +################################################################################ +## RECIPE DESCRIPTION +################################################################################ + +Description: + Author: V. Agudetse + Info: Test for recipe splitting + +################################################################################ +## ANALYSIS CONFIGURATION +################################################################################ + +Analysis: + Horizon: Seasonal + Variables: # ECVs and Indicators? + - {name: tas, freq: monthly_mean} + Datasets: + System: # multiple systems for single model, split if Multimodel = F + - {name: ECMWF-SEAS5} + Multimodel: False # single option + Reference: + - {name: ERA5} # multiple references for single model? + Time: + sdate: # list, split + - '0101' + - '0201' + - '0301' + - '0401' + - '0501' + - '0601' + - '0701' + - '0801' + - '0901' + - '1001' + - '1101' + - '1201' + #fcst_year: '2020' # list, don't split, handled internally + hcst_start: '1993' # single option + hcst_end: '2016' # single option + ftime_min: 1 # single option + ftime_max: 6 # single option + Region: # multiple lists, split? Add region name if length(Region) > 1 + - {name: "global", latmin: -90, latmax: 90, lonmin: 0, lonmax: 359.9} + Regrid: + method: bilinear ## TODO: allow multiple methods? + type: to_system + Workflow: + Anomalies: + compute: yes + cross_validation: yes + save: 'none' + Calibration: + method: raw ## TODO: list, split? + save: 'none' + Skill: + metric: mean_bias EnsCorr rps rpss crps crpss EnsSprErr # list, don't split + cross_validation: yes + save: 'all' + Probabilities: + percentiles: [[1/3, 2/3]] # list, don't split + save: 'none' + Visualization: + plots: skill_metrics + Indicators: + index: no # ? + # Scorecards: + # regions: + # Extra-tropical NH: {lon.min: 0, lon.max: 360, lat.min: 30, lat.max: 90} + # Tropics: {lon.min: 0, lon.max: 360, lat.min: -30, lat.max: 30} + # Extra-tropical SH : {lon.min: 0, lon.max: 360, lat.min: -30, lat.max: -90} + # start_months: NULL + # metric: mean_bias enscorr rpss crpss enssprerr + # metric_aggregation: 'score' + # table_label: NULL + # fileout_label: NULL + # col1_width: NULL + # col2_width: NULL + # calculate_diff: FALSE + # #output_path: /esarchive/scratch/nmilders/scorecards_images/testing + ncores: 7 + remove_NAs: no # bool, don't split + Output_format: Scorecards # string, don't split + +################################################################################ +## Run CONFIGURATION +################################################################################ +Run: + Loglevel: INFO + Terminal: yes + output_dir: /esarchive/scratch/nmilders/scorecards_data/test/ + code_dir: /esarchive/scratch/nmilders/gitlab/git_clones/s2s-suite/ + autosubmit: yes + # fill only if using autosubmit + auto_conf: + script: /esarchive/scratch/nmilders/gitlab/git_clones/s2s-suite/execute_scorecards_data_loading.R # replace with the path to your script + expid: a6a3 # replace with your EXPID + hpc_user: bsc32878 # replace with your hpc username + wallclock: 03:00 # hh:mm + processors_per_job: 8 + platform: nord3v2 + email_notifications: yes # enable/disable email notifications. Change it if you want to. + email_address: nadia.milders@bsc.es # replace with your email address + notify_completed: yes # notify me by email when a job finishes + notify_failed: yes # notify me by email when a job fails + -- GitLab From ab85d26f66b8f646ab2e98b9fbab2fc0b02b8ceb Mon Sep 17 00:00:00 2001 From: nperez Date: Fri, 21 Jul 2023 16:19:24 +0200 Subject: [PATCH 182/388] Plot Mostlikely adjusted cols and brks --- conf/archive.yml | 2 +- exec_ecvs_seasonal_oper.R | 35 ++ modules/Units/Units.R | 10 + .../R/plot_most_likely_terciles_map.R | 18 +- .../R/tmp/GradientCatsColorBar.R | 91 ++++ modules/Visualization/R/tmp/PlotCombinedMap.R | 445 ++++++++++++++++++ .../R/tmp/PlotMostLikelyQuantileMap.R | 223 +++++++++ modules/Visualization/R/tmp/PlotRobinson.R | 30 +- recipe_ecvs_seasonal_oper.yml | 73 +++ recipe_prlr_seasonal_oper.yml | 61 +++ recipe_tas_seasonal_oper.yml | 61 +++ 11 files changed, 1043 insertions(+), 6 deletions(-) create mode 100644 exec_ecvs_seasonal_oper.R create mode 100644 modules/Units/Units.R create mode 100644 modules/Visualization/R/tmp/GradientCatsColorBar.R create mode 100644 modules/Visualization/R/tmp/PlotCombinedMap.R create mode 100644 modules/Visualization/R/tmp/PlotMostLikelyQuantileMap.R create mode 100644 recipe_ecvs_seasonal_oper.yml create mode 100644 recipe_prlr_seasonal_oper.yml create mode 100644 recipe_tas_seasonal_oper.yml diff --git a/conf/archive.yml b/conf/archive.yml index a0caf86a..a347dc40 100644 --- a/conf/archive.yml +++ b/conf/archive.yml @@ -187,7 +187,7 @@ esarchive: src: "recon/ecmwf/cerra/" daily_mean: {"hur":"_f3h-r2631x1113/", "ps":"_f3h-r2631x1113/", "sfcWind":"_f3h-r2631x1113/", "tas":"_f3h-r2631x1113/", "winddir":"_f3h-r2631x1113/"} - monthly_mean: {"hur":"_f3h-r2631x1113/", "ps":"_f3h-r2631x1113/", "sfcWind":"_f3h-r2631x1113/", + monthly_mean: {"hurs":"_f3h-r2631x1113/", "ps":"_f3h-r2631x1113/", "sfcWind":"_f3h-r2631x1113/", "tas":"_f3h-r2631x1113/", "winddir":"_f3h-r2631x1113/","tasmin":"_f24h-r2631x1113/","tasmax":"_f24h-r2631x1113/"} calendar: "proleptic_gregorian" reference_grid: "/esarchive/recon/ecmwf/cerra/monthly_mean/tas_f3h-r2631x1113/tas_200506.nc" diff --git a/exec_ecvs_seasonal_oper.R b/exec_ecvs_seasonal_oper.R new file mode 100644 index 00000000..18f2e493 --- /dev/null +++ b/exec_ecvs_seasonal_oper.R @@ -0,0 +1,35 @@ +rm(list=ls()) +gc() +setwd("/esarchive/scratch/nperez/git/auto-s2s") + +source("modules/Loading/Loading.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("tools/prepare_outputs.R") + +# Read recipe +args = commandArgs(trailingOnly = TRUE) +recipe_file <- args[1] +recipe <- read_atomic_recipe(recipe_file) +## to test a single recipe: +#recipe_file <- "recipe_ecvs_seasonal_oper.yml" +#recipe <- prepare_outputs(recipe_file) + +# Load datasets +data <- load_datasets(recipe) +# Calibrate datasets +data <- calibrate_datasets(recipe, data) +# Compute skill metrics +skill_metrics <- compute_skill_metrics(recipe, data) +# Compute percentiles and probability bins +probabilities <- compute_probabilities(recipe, data) +# Export all data to netCDF +## TODO: Fix plotting +# save_data(recipe, data, skill_metrics, probabilities) +# Plot data +plot_data(recipe, data, skill_metrics, probabilities, significance = T) + + diff --git a/modules/Units/Units.R b/modules/Units/Units.R new file mode 100644 index 00000000..acf42bcf --- /dev/null +++ b/modules/Units/Units.R @@ -0,0 +1,10 @@ +# This function aims to convert units +## +Units <- function(recipe, data) { + # from recipe read the user defined units + # from data the original units + # deaccumulate option for CDS accumulated variables? + ## Do we need to convert other than ECVs? + user_units <- recipe$Analysis$Variables$units + orig_units <- data$hcst$data$attrs$Variables$ +} diff --git a/modules/Visualization/R/plot_most_likely_terciles_map.R b/modules/Visualization/R/plot_most_likely_terciles_map.R index ec3fb392..7f31e353 100644 --- a/modules/Visualization/R/plot_most_likely_terciles_map.R +++ b/modules/Visualization/R/plot_most_likely_terciles_map.R @@ -3,6 +3,18 @@ plot_most_likely_terciles <- function(recipe, fcst, probabilities, outdir) { + source("modules/Visualization/R/tmp/PlotMostLikelyQuantileMap.R") + source("modules/Visualization/R/tmp/PlotCombinedMap.R") + source("modules/Visualization/R/tmp/GradientCatsColorBar.R") + if (recipe$Analysis$Variables$name %in% c('prlr')) { # add other + cols <- list(c("#FFAB38", "darkorange1"), + c("#b5b5b5", "black"), + c("#41CBC9", "deepskyblue3")) + } else { + cols <- list(c("#33BFD1", "deepskyblue3"), + c("#b5b5b5", "black"), + c("#FF764D", "indianred3")) + } ## TODO: Add 'anomaly' to plot title # Abort if frequency is daily @@ -50,7 +62,6 @@ plot_most_likely_terciles <- function(recipe, # Define name of output file and titles i_var_probs <- var_probs[which(start_date == i_syear), , , , ] outfile <- paste0(outdir[[var]], "forecast_most_likely_tercile-", i_syear) - browser() toptitle <- paste0(system_name, " / ", str_to_title(var_long_name), "\n", "Most Likely Tercile / Initialization: ", i_syear) @@ -95,13 +106,16 @@ plot_most_likely_terciles <- function(recipe, str_to_title(var_long_name), "\n", "Most Likely Tercile / ", months[i], " ", years[i], - " (Init.: ", i_syear, ")") + " / Start date: ", + format(as.Date(i_syear, format="%Y%m%d"), + "%d-%m-%Y")) # Plot fileout <- paste0(outfile, "_ft", forecast_time, ".png") PlotMostLikelyQuantileMap(cat_dim = 'bin', probs = i_var_probs[i, , , ], lon = longitude, lat = latitude, coast_width = 1.5, + cols = cols, title_scale = 1, legend_scale = 0.8, cex_bar_titles = 0.9, diff --git a/modules/Visualization/R/tmp/GradientCatsColorBar.R b/modules/Visualization/R/tmp/GradientCatsColorBar.R new file mode 100644 index 00000000..4cdeb0af --- /dev/null +++ b/modules/Visualization/R/tmp/GradientCatsColorBar.R @@ -0,0 +1,91 @@ +#Draws Color Bars for Categories +#A wrapper of s2dv::ColorBar to generate multiple color bars for different +#categories, and each category has different color set. +GradientCatsColorBar <- function(nmap, brks = NULL, cols = NULL, vertical = TRUE, subsampleg = NULL, + bar_limits, var_limits = NULL, + triangle_ends = NULL, plot = TRUE, + draw_separators = FALSE, + bar_titles = NULL, title_scale = 1, label_scale = 1, extra_margin = rep(0, 4), + ...) { + # bar_limits + if (!is.numeric(bar_limits) || length(bar_limits) != 2) { + stop("Parameter 'bar_limits' must be a numeric vector of length 2.") + } + + # Check brks + if (is.null(brks) || (is.numeric(brks) && length(brks) == 1)) { + num_brks <- 5 + if (is.numeric(brks)) { + num_brks <- brks + } + brks <- seq(from = bar_limits[1], to = bar_limits[2], length.out = num_brks) + } + if (!is.numeric(brks)) { + stop("Parameter 'brks' must be a numeric vector.") + } + # Check cols + col_sets <- list(c("#A1D99B", "#74C476", "#41AB5D", "#238B45"), + c("#6BAED6FF", "#4292C6FF", "#2171B5FF", "#08519CFF"), + c("#FFEDA0FF", "#FED976FF", "#FEB24CFF", "#FD8D3CFF"), + c("#FC4E2AFF", "#E31A1CFF", "#BD0026FF", "#800026FF"), + c("#FCC5C0", "#FA9FB5", "#F768A1", "#DD3497")) + if (is.null(cols)) { + if (length(col_sets) >= nmap) { + chosen_sets <- 1:nmap + chosen_sets <- chosen_sets + floor((length(col_sets) - length(chosen_sets)) / 2) + } else { + chosen_sets <- array(1:length(col_sets), nmap) + } + cols <- col_sets[chosen_sets] + } else { + if (!is.list(cols)) { + stop("Parameter 'cols' must be a list of character vectors.") + } + if (!all(sapply(cols, is.character))) { + stop("Parameter 'cols' must be a list of character vectors.") + } + if (length(cols) != nmap) { + stop("Parameter 'cols' must be a list of the same length as the number of ", + "maps in 'maps'.") + } + } + for (i in 1:length(cols)) { + if (length(cols[[i]]) != (length(brks) - 1)) { + cols[[i]] <- grDevices::colorRampPalette(cols[[i]])(length(brks) - 1) + } + } + + # Check bar_titles + if (is.null(bar_titles)) { + if (nmap == 3) { + bar_titles <- c("Below normal (%)", "Normal (%)", "Above normal (%)") + } else if (nmap == 5) { + bar_titles <- c("Low (%)", "Below normal (%)", + "Normal (%)", "Above normal (%)", "High (%)") + } else { + bar_titles <- paste0("Cat. ", 1:nmap, " (%)") + } + } + + if (plot) { +brks <- brks[-length(brks)] + for (k in 1:nmap) { +triangle_ends <- c(F,T) +col_sup <- cols[[k]][length(cols[[k]])] +cols[[k]] <- cols[[k]][-length(cols[[k]])] + s2dv::ColorBar(brks = brks, cols = cols[[k]], vertical = FALSE, + subsampleg = subsampleg, +# bar_limits = bar_limits, var_limits = var_limits, + triangle_ends = triangle_ends, plot = TRUE, + col_sup = col_sup, + draw_separators = draw_separators, + title = bar_titles[[k]], title_scale = title_scale, + label_scale = label_scale, extra_margin = extra_margin) + } + } else { + #TODO: col_inf and col_sup + return(list(brks = brks, cols = cols)) + } + +} + diff --git a/modules/Visualization/R/tmp/PlotCombinedMap.R b/modules/Visualization/R/tmp/PlotCombinedMap.R new file mode 100644 index 00000000..4575f897 --- /dev/null +++ b/modules/Visualization/R/tmp/PlotCombinedMap.R @@ -0,0 +1,445 @@ +#'Plot Multiple Lon-Lat Variables In a Single Map According to a Decision Function +#' +#'@description Plot a number a two dimensional matrices with (longitude, +#'latitude) dimensions on a single map with the cylindrical equidistant +#'latitude and longitude projection. +#' +#'@author Nicolau Manubens, \email{nicolau.manubens@bsc.es} +#'@author Veronica Torralba, \email{veronica.torralba@bsc.es} +#' +#'@param maps List of matrices to plot, each with (longitude, latitude) +#' dimensions, or 3-dimensional array with the dimensions (longitude, latitude, +#' map). Dimension names are required. +#'@param lon Vector of longitudes. Must match the length of the corresponding +#' dimension in 'maps'. +#'@param lat Vector of latitudes. Must match the length of the corresponding +#' dimension in 'maps'. +#'@param map_select_fun Function that selects, for each grid point, which value +#' to take among all the provided maps. This function receives as input a +#' vector of values for a same grid point for all the provided maps, and must +#' return a single selected value (not its index!) or NA. For example, the +#' \code{min} and \code{max} functions are accepted. +#'@param display_range Range of values to be displayed for all the maps. This +#' must be a numeric vector c(range min, range max). The values in the +#' parameter 'maps' can go beyond the limits specified in this range. If the +#' selected value for a given grid point (according to 'map_select_fun') falls +#' outside the range, it will be coloured with 'col_unknown_map'. +#'@param map_dim Optional name for the dimension of 'maps' along which the +#' multiple maps are arranged. Only applies when 'maps' is provided as a +#' 3-dimensional array. Takes the value 'map' by default. +#'@param brks Colour levels to be sent to PlotEquiMap. This parameter is +#' optional and adjusted automatically by the function. +#'@param cols List of vectors of colours to be sent to PlotEquiMap for the +#' colour bar of each map. This parameter is optional and adjusted +#' automatically by the function (up to 5 maps). The colours provided for each +#' colour bar will be automatically interpolated to match the number of breaks. +#' Each item in this list can be named, and the name will be used as title for +#' the corresponding colour bar (equivalent to the parameter 'bar_titles'). +#'@param col_unknown_map Colour to use to paint the grid cells for which a map +#' is not possible to be chosen according to 'map_select_fun' or for those +#' values that go beyond 'display_range'. Takes the value 'white' by default. +#'@param mask Optional numeric array with dimensions (latitude, longitude), with +#' values in the range [0, 1], indicating the opacity of the mask over each +#' grid point. Cells with a 0 will result in no mask, whereas cells with a 1 +#' will result in a totally opaque superimposed pixel coloured in 'col_mask'. +#'@param col_mask Colour to be used for the superimposed mask (if specified in +#' 'mask'). Takes the value 'grey' by default. +#'@param dots Array of same dimensions as 'var' or with dimensions +#' c(n, dim(var)), where n is the number of dot/symbol layers to add to the +#' plot. A value of TRUE at a grid cell will draw a dot/symbol on the +#' corresponding square of the plot. By default all layers provided in 'dots' +#' are plotted with dots, but a symbol can be specified for each of the +#' layers via the parameter 'dot_symbol'. +#'@param bar_titles Optional vector of character strings providing the titles to +#' be shown on top of each of the colour bars. +#'@param legend_scale Scale factor for the size of the colour bar labels. Takes +#' 1 by default. +#'@param cex_bar_titles Scale factor for the sizes of the bar titles. Takes 1.5 +#' by default. +#'@param plot_margin Numeric vector of length 4 for the margin sizes in the +#' following order: bottom, left, top, and right. If not specified, use the +#' default of par("mar"), c(5.1, 4.1, 4.1, 2.1). Used as 'margin_scale' in +#' s2dv::PlotEquiMap. +#'@param fileout File where to save the plot. If not specified (default) a +#' graphics device will pop up. Extensions allowed: eps/ps, jpeg, png, pdf, bmp +#' and tiff +#'@param width File width, in the units specified in the parameter size_units +#' (inches by default). Takes 8 by default. +#'@param height File height, in the units specified in the parameter size_units +#' (inches by default). Takes 5 by default. +#'@param size_units Units of the size of the device (file or window) to plot in. +#' Inches ('in') by default. See ?Devices and the creator function of the +#' corresponding device. +#'@param res Resolution of the device (file or window) to plot in. See ?Devices +#' and the creator function of the corresponding device. +#'@param drawleg Where to draw the common colour bar. Can take values TRUE, +#' FALSE or:\cr +#' 'up', 'u', 'U', 'top', 't', 'T', 'north', 'n', 'N'\cr +#' 'down', 'd', 'D', 'bottom', 'b', 'B', 'south', 's', 'S' (default)\cr +#' 'right', 'r', 'R', 'east', 'e', 'E'\cr +#' 'left', 'l', 'L', 'west', 'w', 'W' +#'@param ... Additional parameters to be passed on to \code{PlotEquiMap}. +#' +#'@examples +#'# Simple example +#'x <- array(1:(20 * 10), dim = c(lat = 10, lon = 20)) / 200 +#'a <- x * 0.6 +#'b <- (1 - x) * 0.6 +#'c <- 1 - (a + b) +#'lons <- seq(0, 359.5, length = 20) +#'lats <- seq(-89.5, 89.5, length = 10) +#'\dontrun{ +#'PlotCombinedMap(list(a, b, c), lons, lats, +#' toptitle = 'Maximum map', +#' map_select_fun = max, +#' display_range = c(0, 1), +#' bar_titles = paste('% of belonging to', c('a', 'b', 'c')), +#' brks = 20, width = 12, height = 10) +#'} +#' +#'Lon <- c(0:40, 350:359) +#'Lat <- 51:26 +#'data <- rnorm(51 * 26 * 3) +#'dim(data) <- c(map = 3, lon = 51, lat = 26) +#'mask <- sample(c(0,1), replace = TRUE, size = 51 * 26) +#'dim(mask) <- c(lat = 26, lon = 51) +#'\dontrun{ +#'PlotCombinedMap(data, lon = Lon, lat = Lat, map_select_fun = max, +#' display_range = range(data), mask = mask, +#' width = 14, height = 10) +#'} +#' +#'@seealso \code{PlotCombinedMap} and \code{PlotEquiMap} +#' +#'@importFrom s2dv PlotEquiMap ColorBar +#'@importFrom maps map +#'@importFrom graphics box image layout mtext par plot.new +#'@importFrom grDevices adjustcolor bmp colorRampPalette dev.cur dev.new dev.off +#' hcl jpeg pdf png postscript svg tiff +#'@export +PlotCombinedMap <- function(maps, lon, lat, + map_select_fun, display_range, + map_dim = 'map', + brks = NULL, cols = NULL, + col_unknown_map = 'white', + mask = NULL, col_mask = 'grey', + dots = NULL, + bar_titles = NULL, legend_scale = 1, + cex_bar_titles = 1.5, + plot_margin = NULL, + fileout = NULL, width = 8, height = 5, + size_units = 'in', res = 100, drawleg = T, + ...) { + args <- list(...) + # If there is any filenames to store the graphics, process them + # to select the right device + if (!is.null(fileout)) { + .SelectDevice <- utils::getFromNamespace(".SelectDevice", "s2dv") + deviceInfo <- .SelectDevice(fileout = fileout, width = width, height = height, + units = size_units, res = res) + saveToFile <- deviceInfo$fun + fileout <- deviceInfo$files + } + + # Check probs + error <- FALSE + # Change list into an array + if (is.list(maps)) { + if (length(maps) < 1) { + stop("Parameter 'maps' must be of length >= 1 if provided as a list.") + } + check_fun <- function(x) { + is.numeric(x) && (length(dim(x)) == 2) + } + if (!all(sapply(maps, check_fun))) { + error <- TRUE + } + ref_dims <- dim(maps[[1]]) + equal_dims <- all(sapply(maps, function(x) identical(dim(x), ref_dims))) + if (!equal_dims) { + stop("All arrays in parameter 'maps' must have the same dimension ", + "sizes and names when 'maps' is provided as a list of arrays.") + } + num_maps <- length(maps) + maps <- unlist(maps) + dim(maps) <- c(ref_dims, map = num_maps) + map_dim <- 'map' + } + if (!is.numeric(maps)) { + error <- TRUE + } + if (is.null(dim(maps))) { + error <- TRUE + } + if (length(dim(maps)) != 3) { + error <- TRUE + } + if (error) { + stop("Parameter 'maps' must be either a numeric array with 3 dimensions ", + " or a list of numeric arrays of the same size with the 'lon' and ", + "'lat' dimensions.") + } + dimnames <- names(dim(maps)) + + # Check map_dim + if (is.character(map_dim)) { + if (is.null(dimnames)) { + stop("Specified a dimension name in 'map_dim' but no dimension names provided ", + "in 'maps'.") + } + map_dim <- which(dimnames == map_dim) + if (length(map_dim) < 1) { + stop("Dimension 'map_dim' not found in 'maps'.") + } else { + map_dim <- map_dim[1] + } + } else if (!is.numeric(map_dim)) { + stop("Parameter 'map_dim' must be either a numeric value or a ", + "dimension name.") + } + if (length(map_dim) != 1) { + stop("Parameter 'map_dim' must be of length 1.") + } + map_dim <- round(map_dim) + + # Work out lon_dim and lat_dim + lon_dim <- NULL + if (!is.null(dimnames)) { + lon_dim <- which(dimnames %in% c('lon', 'longitude'))[1] + } + if (length(lon_dim) < 1) { + lon_dim <- (1:3)[-map_dim][1] + } + lon_dim <- round(lon_dim) + + lat_dim <- NULL + if (!is.null(dimnames)) { + lat_dim <- which(dimnames %in% c('lat', 'latitude'))[1] + } + if (length(lat_dim) < 1) { + lat_dim <- (1:3)[-map_dim][2] + } + lat_dim <- round(lat_dim) + + # Check lon + if (!is.numeric(lon)) { + stop("Parameter 'lon' must be a numeric vector.") + } + if (length(lon) != dim(maps)[lon_dim]) { + stop("Parameter 'lon' does not match the longitude dimension in 'maps'.") + } + + # Check lat + if (!is.numeric(lat)) { + stop("Parameter 'lat' must be a numeric vector.") + } + if (length(lat) != dim(maps)[lat_dim]) { + stop("Parameter 'lat' does not match the longitude dimension in 'maps'.") + } + + # Check map_select_fun + if (is.numeric(map_select_fun)) { + if (length(dim(map_select_fun)) != 2) { + stop("Parameter 'map_select_fun' must be an array with dimensions ", + "'lon' and 'lat' if provided as an array.") + } + if (!identical(dim(map_select_fun), dim(maps)[-map_dim])) { + stop("The dimensions 'lon' and 'lat' in the 'map_select_fun' array must ", + "have the same size, name and order as in the 'maps' parameter.") + } + } + if (!is.function(map_select_fun)) { + stop("The parameter 'map_select_fun' must be a function or a numeric array.") + } + + # Generate the desired brks and cols. Only nmap, brks, cols, bar_limits, and + # bar_titles matter here because plot = F. + colorbar <- GradientCatsColorBar(nmap = dim(maps)[map_dim], + brks = brks, cols = cols, vertical = FALSE, + subsampleg = NULL, bar_limits = display_range, var_limits = NULL, + triangle_ends = NULL, plot = FALSE, draw_separators = TRUE, + bar_titles = bar_titles, title_scale = cex_bar_titles, label_scale = legend_scale * 1.5, + extra_margin = c(2, 0, 2, 0)) + + # Check legend_scale + if (!is.numeric(legend_scale)) { + stop("Parameter 'legend_scale' must be numeric.") + } + + # Check col_unknown_map + if (!is.character(col_unknown_map)) { + stop("Parameter 'col_unknown_map' must be a character string.") + } + + # Check col_mask + if (!is.character(col_mask)) { + stop("Parameter 'col_mask' must be a character string.") + } + + # Check mask + if (!is.null(mask)) { + if (!is.numeric(mask)) { + stop("Parameter 'mask' must be numeric.") + } + if (length(dim(mask)) != 2) { + stop("Parameter 'mask' must have two dimensions.") + } + if ((dim(mask)[1] != dim(maps)[lat_dim]) || + (dim(mask)[2] != dim(maps)[lon_dim])) { + stop("Parameter 'mask' must have dimensions c(lat, lon).") + } + } + # Check dots + if (!is.null(dots)) { + if (length(dim(dots)) != 2) { + stop("Parameter 'mask' must have two dimensions.") + } + if ((dim(dots)[1] != dim(maps)[lat_dim]) || + (dim(dots)[2] != dim(maps)[lon_dim])) { + stop("Parameter 'mask' must have dimensions c(lat, lon).") + } + } + + #---------------------- + # Identify the most likely map + #---------------------- + brks_norm <- seq(0, 1, length.out = length(colorbar$brks)) + if (is.function(map_select_fun)) { + range_width <- display_range[2] - display_range[1] + ml_map <- apply(maps, c(lat_dim, lon_dim), function(x) { + if (any(is.na(x))) { + res <- NA + } else { + res <- which(x == map_select_fun(x)) + if (length(res) > 0) { + res <- res[1] + if (map_select_fun(x) < display_range[1] || + map_select_fun(x) > display_range[2]) { + res <- -0.5 + } else { + res <- res + (map_select_fun(x) - display_range[1]) / range_width + if (map_select_fun(x) == display_range[1]) { + res <- res + brks_norm[2] / (length(brks_norm) * 2) + } + } + } else { + res <- -0.5 + } + } + res + }) + } else { + stop("Providing 'map_select_fun' as array not implemented yet.") + ml_map <- map_select_fun + } + nmap <- dim(maps)[map_dim] + nlat <- length(lat) + nlon <- length(lon) + + #---------------------- + # Set latitudes from minimum to maximum + #---------------------- + if (lat[1] > lat[nlat]){ + lat <- lat[nlat:1] + indices <- list(nlat:1, TRUE) + ml_map <- do.call("[", c(list(x = ml_map), indices)) + if (!is.null(mask)){ + mask <- mask[nlat:1, ] + } + if (!is.null(dots)){ + dots <- dots[nlat:1,] + } + } + + #---------------------- + # Set layout and parameters + #---------------------- + # Open connection to graphical device + if (!is.null(fileout)) { + saveToFile(fileout) + } else if (names(dev.cur()) == 'null device') { + dev.new(units = size_units, res = res, width = width, height = height) + } + #NOTE: I think plot.new() is not necessary in any case. +# plot.new() + #TODO: Don't hardcoded. Let users decide. + par(font.main = 1) + # If colorbars need to be plotted, re-define layout. + if (drawleg) { + layout(matrix(c(rep(1, nmap),2:(nmap + 1)), 2, nmap, byrow = TRUE), heights = c(6, 1.5)) + } + + #---------------------- + # Set colors and breaks and then PlotEquiMap + #---------------------- + tcols <- c(col_unknown_map, colorbar$cols[[1]]) + for (k in 2:nmap) { + tcols <- append(tcols, c(col_unknown_map, colorbar$cols[[k]])) + } + tbrks <- c(-1, brks_norm + rep(1:nmap, each = length(brks_norm))) + + if (is.null(plot_margin)) { + plot_margin <- c(5, 4, 4, 2) + 0.1 # default of par()$mar + } + + PlotEquiMap(var = ml_map, lon = lon, lat = lat, + brks = tbrks, cols = tcols, drawleg = FALSE, + filled.continents = FALSE, dots = dots, margin_scale = plot_margin, ...) + + #---------------------- + # Add overplot on top + #---------------------- + if (!is.null(mask)) { + dims_mask <- dim(mask) + latb <- sort(lat, index.return = TRUE) + dlon <- lon[2:dims_mask[2]] - lon[1:(dims_mask[2] - 1)] + wher <- which(dlon > (mean(dlon) + 1)) + if (length(wher) > 0) { + lon[(wher + 1):dims_mask[2]] <- lon[(wher + 1):dims_mask[2]] - 360 + } + lonb <- sort(lon, index.return = TRUE) + + cols_mask <- sapply(seq(from = 0, to = 1, length.out = 10), + function(x) adjustcolor(col_mask, alpha.f = x)) + image(lonb$x, latb$x, t(mask)[lonb$ix, latb$ix], + axes = FALSE, col = cols_mask, + breaks = seq(from = 0, to = 1, by = 0.1), + xlab='', ylab='', add = TRUE, xpd = TRUE) + if (!exists('coast_color')) { + coast_color <- 'black' + } + if (min(lon) < 0) { + map('world', interior = FALSE, add = TRUE, lwd = 1, col = coast_color) # Low resolution world map (lon -180 to 180). + } else { + map('world2', interior = FALSE, add = TRUE, lwd = 1, col = coast_color) # Low resolution world map (lon 0 to 360). + } + box() + } + + #---------------------- + # Add colorbars + #---------------------- + if ('toptitle' %in% names(args)) { + size_title <- 1 + if ('title_scale' %in% names(args)) { + size_title <- args[['title_scale']] + } + old_mar <- par('mar') + old_mar[3] <- old_mar[3] - (2 * size_title + 1) + par(mar = old_mar) + } + + if (drawleg) { + GradientCatsColorBar(nmap = dim(maps)[map_dim], + brks = colorbar$brks, cols = colorbar$cols, vertical = FALSE, + subsampleg = NULL, bar_limits = display_range, var_limits = NULL, + triangle_ends = NULL, plot = TRUE, draw_separators = TRUE, + bar_titles = bar_titles, title_scale = cex_bar_titles, label_scale = legend_scale * 1.5, + extra_margin = c(2, 0, 2, 0)) + } + + # If the graphic was saved to file, close the connection with the device + if (!is.null(fileout)) dev.off() +} + + diff --git a/modules/Visualization/R/tmp/PlotMostLikelyQuantileMap.R b/modules/Visualization/R/tmp/PlotMostLikelyQuantileMap.R new file mode 100644 index 00000000..a81515e9 --- /dev/null +++ b/modules/Visualization/R/tmp/PlotMostLikelyQuantileMap.R @@ -0,0 +1,223 @@ +#'Plot Maps of Most Likely Quantiles +#' +#'@author Veronica Torralba, \email{veronica.torralba@bsc.es}, Nicolau Manubens, +#'\email{nicolau.manubens@bsc.es} +#'@description This function receives as main input (via the parameter +#'\code{probs}) a collection of longitude-latitude maps, each containing the +#'probabilities (from 0 to 1) of the different grid cells of belonging to a +#'category. As many categories as maps provided as inputs are understood to +#'exist. The maps of probabilities must be provided on a common rectangular +#'regular grid, and a vector with the longitudes and a vector with the latitudes +#'of the grid must be provided. The input maps can be provided in two forms, +#'either as a list of multiple two-dimensional arrays (one for each category) or +#'as a three-dimensional array, where one of the dimensions corresponds to the +#'different categories. +#' +#'@param probs A list of bi-dimensional arrays with the named dimensions +#' 'latitude' (or 'lat') and 'longitude' (or 'lon'), with equal size and in the +#' same order, or a single tri-dimensional array with an additional dimension +#' (e.g. 'bin') for the different categories. The arrays must contain +#' probability values between 0 and 1, and the probabilities for all categories +#' of a grid cell should not exceed 1 when added. +#'@param lon A numeric vector with the longitudes of the map grid, in the same +#' order as the values along the corresponding dimension in \code{probs}. +#'@param lat A numeric vector with the latitudes of the map grid, in the same +#' order as the values along the corresponding dimension in \code{probs}. +#'@param cat_dim The name of the dimension along which the different categories +#' are stored in \code{probs}. This only applies if \code{probs} is provided in +#' the form of 3-dimensional array. The default expected name is 'bin'. +#'@param bar_titles Vector of character strings with the names to be drawn on +#' top of the color bar for each of the categories. As many titles as +#' categories provided in \code{probs} must be provided. +#'@param col_unknown_cat Character string with a colour representation of the +#' colour to be used to paint the cells for which no category can be clearly +#' assigned. Takes the value 'white' by default. +#'@param drawleg Where to draw the common colour bar. Can take values TRUE, +#' FALSE or:\cr +#' 'up', 'u', 'U', 'top', 't', 'T', 'north', 'n', 'N'\cr +#' 'down', 'd', 'D', 'bottom', 'b', 'B', 'south', 's', 'S' (default)\cr +#' 'right', 'r', 'R', 'east', 'e', 'E'\cr +#' 'left', 'l', 'L', 'west', 'w', 'W' +#'@param ... Additional parameters to be sent to \code{PlotCombinedMap} and +#' \code{PlotEquiMap}. +#'@seealso \code{PlotCombinedMap} and \code{PlotEquiMap} +#'@examples +#'# Simple example +#'x <- array(1:(20 * 10), dim = c(lat = 10, lon = 20)) / 200 +#'a <- x * 0.6 +#'b <- (1 - x) * 0.6 +#'c <- 1 - (a + b) +#'lons <- seq(0, 359.5, length = 20) +#'lats <- seq(-89.5, 89.5, length = 10) +#'\dontrun{ +#'PlotMostLikelyQuantileMap(list(a, b, c), lons, lats, +#' toptitle = 'Most likely tercile map', +#' bar_titles = paste('% of belonging to', c('a', 'b', 'c')), +#' brks = 20, width = 10, height = 8) +#'} +#' +#'# More complex example +#'n_lons <- 40 +#'n_lats <- 20 +#'n_timesteps <- 100 +#'n_bins <- 4 +#' +#'# 1. Generation of sample data +#'lons <- seq(0, 359.5, length = n_lons) +#'lats <- seq(-89.5, 89.5, length = n_lats) +#' +#'# This function builds a 3-D gaussian at a specified point in the map. +#'make_gaussian <- function(lon, sd_lon, lat, sd_lat) { +#' w <- outer(lons, lats, function(x, y) dnorm(x, lon, sd_lon) * dnorm(y, lat, sd_lat)) +#' min_w <- min(w) +#' w <- w - min_w +#' w <- w / max(w) +#' w <- t(w) +#' names(dim(w)) <- c('lat', 'lon') +#' w +#'} +#' +#'# This function generates random time series (with values ranging 1 to 5) +#'# according to 2 input weights. +#'gen_data <- function(w1, w2, n) { +#' r <- sample(1:5, n, +#' prob = c(.05, .9 * w1, .05, .05, .9 * w2), +#' replace = TRUE) +#' r <- r + runif(n, -0.5, 0.5) +#' dim(r) <- c(time = n) +#' r +#'} +#' +#'# We build two 3-D gaussians. +#'w1 <- make_gaussian(120, 80, 20, 30) +#'w2 <- make_gaussian(260, 60, -10, 40) +#' +#'# We generate sample data (with dimensions time, lat, lon) according +#'# to the generated gaussians +#'sample_data <- multiApply::Apply(list(w1, w2), NULL, +#' gen_data, n = n_timesteps)$output1 +#' +#'# 2. Binning sample data +#'prob_thresholds <- 1:n_bins / n_bins +#'prob_thresholds <- prob_thresholds[1:(n_bins - 1)] +#'thresholds <- quantile(sample_data, prob_thresholds) +#' +#'binning <- function(x, thresholds) { +#' n_samples <- length(x) +#' n_bins <- length(thresholds) + 1 +#' +#' thresholds <- c(thresholds, max(x)) +#' result <- 1:n_bins +#' lower_threshold <- min(x) - 1 +#' for (i in 1:n_bins) { +#' result[i] <- sum(x > lower_threshold & x <= thresholds[i]) / n_samples +#' lower_threshold <- thresholds[i] +#' } +#' +#' dim(result) <- c(bin = n_bins) +#' result +#'} +#' +#'bins <- multiApply::Apply(sample_data, 'time', binning, thresholds)$output1 +#' +#'# 3. Plotting most likely quantile/bin +#'\dontrun{ +#'PlotMostLikelyQuantileMap(bins, lons, lats, +#' toptitle = 'Most likely quantile map', +#' bar_titles = paste('% of belonging to', letters[1:n_bins]), +#' mask = 1 - (w1 + w2 / max(c(w1, w2))), +#' brks = 20, width = 10, height = 8) +#'} +#'@importFrom maps map +#'@importFrom graphics box image layout mtext par plot.new +#'@importFrom grDevices adjustcolor bmp colorRampPalette dev.cur dev.new dev.off hcl jpeg pdf png postscript svg tiff +#'@export +PlotMostLikelyQuantileMap <- function(probs, lon, lat, cat_dim = 'bin', + bar_titles = NULL, + col_unknown_cat = 'white', drawleg = T, + ...) { + # Check probs + error <- FALSE + if (is.list(probs)) { + if (length(probs) < 1) { + stop("Parameter 'probs' must be of length >= 1 if provided as a list.") + } + check_fun <- function(x) { + is.numeric(x) && (length(dim(x)) == 2) + } + if (!all(sapply(probs, check_fun))) { + error <- TRUE + } + ref_dims <- dim(probs[[1]]) + equal_dims <- all(sapply(probs, function(x) identical(dim(x), ref_dims))) + if (!equal_dims) { + stop("All arrays in parameter 'probs' must have the same dimension ", + "sizes and names when 'probs' is provided as a list of arrays.") + } + num_probs <- length(probs) + probs <- unlist(probs) + dim(probs) <- c(ref_dims, map = num_probs) + cat_dim <- 'map' + } + if (!is.numeric(probs)) { + error <- TRUE + } + if (is.null(dim(probs))) { + error <- TRUE + } + if (length(dim(probs)) != 3) { + error <- TRUE + } + if (error) { + stop("Parameter 'probs' must be either a numeric array with 3 dimensions ", + " or a list of numeric arrays of the same size with the 'lon' and ", + "'lat' dimensions.") + } + dimnames <- names(dim(probs)) + + # Check cat_dim + if (is.character(cat_dim)) { + if (is.null(dimnames)) { + stop("Specified a dimension name in 'cat_dim' but no dimension names provided ", + "in 'probs'.") + } + cat_dim <- which(dimnames == cat_dim) + if (length(cat_dim) < 1) { + stop("Dimension 'cat_dim' not found in 'probs'.") + } + cat_dim <- cat_dim[1] + } else if (!is.numeric(cat_dim)) { + stop("Parameter 'cat_dim' must be either a numeric value or a ", + "dimension name.") + } + if (length(cat_dim) != 1) { + stop("Parameter 'cat_dim' must be of length 1.") + } + cat_dim <- round(cat_dim) + nprobs <- dim(probs)[cat_dim] + + # Check bar_titles + if (is.null(bar_titles)) { + if (nprobs == 3) { + bar_titles <- c("Below normal (%)", "Normal (%)", "Above normal (%)") + } else if (nprobs == 5) { + bar_titles <- c("Low (%)", "Below normal (%)", + "Normal (%)", "Above normal (%)", "High (%)") + } else { + bar_titles <- paste0("Cat. ", 1:nprobs, " (%)") + } + } + + minimum_value <- ceiling(1 / nprobs * 10 * 1.1) * 10 + + # By now, the PlotCombinedMap function is included below in this file. + # In the future, PlotCombinedMap will be part of s2dverification and will + # be properly imported. + PlotCombinedMap(probs * 100, lon, lat, map_select_fun = max, + display_range = c(minimum_value, 100), + map_dim = cat_dim, + bar_titles = bar_titles, + col_unknown_map = col_unknown_cat, + drawleg = drawleg, ...) +} + diff --git a/modules/Visualization/R/tmp/PlotRobinson.R b/modules/Visualization/R/tmp/PlotRobinson.R index 6a3412f5..d8210258 100644 --- a/modules/Visualization/R/tmp/PlotRobinson.R +++ b/modules/Visualization/R/tmp/PlotRobinson.R @@ -314,8 +314,19 @@ PlotRobinson <- function(data, lon, lat, lon_dim = NULL, lat_dim = NULL, col_inf_image <- ifelse(is.null(col_inf), colNA, col_inf) col_sup_image <- ifelse(is.null(col_sup), colNA, col_sup) cols_ggplot <- c(col_inf_image, cols, col_sup_image) - # Add brks to triangles - brks_ggplot <- c(min(data, na.rm = T), brks, max(data, na.rm = T)) + + # Add triangles to brks + brks_ggplot <- brks + if (max(data, na.rm = T) > tail(brks, 1)) { + brks_ggplot <- c(brks_ggplot, max(data, na.rm = T)) + } else { + brks_ggplot <- c(brks_ggplot, tail(brks, 1) + diff(tail(brks, 2))) + } + if (min(data, na.rm = T) < brks[1]) { + brks_ggplot <- c(min(data, na.rm = T), brks_ggplot) + } else { + brks_ggplot <- c(brks[1] - diff(brks[1:2]), brks_ggplot) + } } else { # ggplot2 legend brks_ggplot <- brks @@ -328,8 +339,15 @@ PlotRobinson <- function(data, lon, lat, lon_dim = NULL, lat_dim = NULL, data_df <- lonlat_df %>% dplyr::mutate(dat = as.vector(data)) + lonlat_df_ori <- NULL # Remove the points where mask = FALSE if (!is.null(mask)) { + # Save original lonlat_df to plot with expected region + lonlat_df_ori <- st_as_sf(lonlat_df, coords = c("lon", "lat"), crs = original_proj) + lonlat_df_ori <- st_transform(lonlat_df_ori, crs = target_proj) + lonlat_df_ori <- as.data.frame(st_coordinates(lonlat_df_ori)) + names(lonlat_df_ori) <- c('long', 'lat') + if (sort_lat) { mask <- ClimProjDiags::Subset(mask, along = lat_dim, indices = seq(length(lat), 1, -1)) } @@ -436,12 +454,18 @@ PlotRobinson <- function(data, lon, lat, lon_dim = NULL, lat_dim = NULL, #size = (sort(rep(as.vector(lat), length(lon))) / max(lat)) * point_size) + size = point_size) } + + if (is.null(lonlat_df_ori)) { + coord_sf_lim <- c(range(data_df$long), range(data_df$lat)) + } else { + coord_sf_lim <- c(range(lonlat_df_ori$long), range(lonlat_df_ori$lat)) + } res_p <- res_p + geom_sf(data = coastlines, colour ='black', size = coastlines_width) + # Remove background grid and lat/lon label; add white background theme_void() + theme(plot.background = element_rect(fill = 'white', colour = 'white')) + # crop the projection - coord_sf(xlim = range(data_df$long), ylim = range(data_df$lat), + coord_sf(xlim = coord_sf_lim[1:2], ylim = coord_sf_lim[3:4], expand = TRUE, datum = target_proj) if (!is.null(dots)) { diff --git a/recipe_ecvs_seasonal_oper.yml b/recipe_ecvs_seasonal_oper.yml new file mode 100644 index 00000000..d47fd159 --- /dev/null +++ b/recipe_ecvs_seasonal_oper.yml @@ -0,0 +1,73 @@ +Description: + Author: nperez + Info: ECVs Oper ESS ECMWF SEAS5 Seasonal Forecast recipe (monthly mean, tas) + +Analysis: + Horizon: seasonal # Mandatory, str: either subseasonal, seasonal, or decadal + Variables: + - {name: tas, freq: monthly_mean} + - {name: prlr, freq: monthly_mean} + Datasets: + System: + - {name: ECMWF-SEAS5.1} # system21_m1 system35c3s + Multimodel: no # Mandatory, bool: Either yes/true or no/false + Reference: + - {name: ERA5} # Mandatory, str: Reference codename. See docu. + Time: + sdate: '0701' ## MMDD + fcst_year: '2023' # Optional, int: Forecast year 'YYYY' + hcst_start: '1993' # Mandatory, int: Hindcast start year 'YYYY' + hcst_end: '2016' # Mandatory, int: Hindcast end year 'YYYY' + ftime_min: 1 # Mandatory, int: First leadtime time step in months + ftime_max: 6 # Mandatory, int: Last leadtime time step in months + Region: + - {name: "UE", latmin: 20, latmax: 80, lonmin: -20, lonmax: 40} + Regrid: + method: bilinear # Mandatory, str: Interpolation method. See docu. + type: "to_system" + #type: /esarchive/scratch/nmilders/gitlab/git_clones/auto-s2s/conf/grid_description.txt #'r360x180' # Mandatory, str: to_system, to_reference, or CDO-accepted grid. + Workflow: + Anomalies: + compute: no + cross_validation: no + save: none + Calibration: + method: evmos # Mandatory, str: Calibration method. See docu. + cross_validation: yes + save: none + Skill: + metric: mean_bias EnsCorr rpss crpss bss10 bss90 + save: 'all' + cross_validation: yes + Probabilities: + percentiles: [[1/3, 2/3], [1/10, 9/10]] # frac: Quantile thresholds. + save: 'all' + Indicators: + index: no + Visualization: + plots: skill_metrics forecast_ensemble_mean most_likely_terciles + multi_panel: no + projection: lambert_europe + ncores: 4 # Optional, int: number of cores, defaults to 1 + remove_NAs: # Optional, bool: Whether NAs are removed, defaults to FALSE + Output_format: scorecards + logo: yes +Run: + Loglevel: INFO + Terminal: yes + filesystem: esarchive + output_dir: /esarchive/scratch/nperez/cs_oper/seasonal/ # replace with the directory where you want to save the outputs + code_dir: /esarchive/scratch/nperez/git/auto-s2s/ # replace with the directory where your code is + autosubmit: yes + # fill only if using autosubmit + auto_conf: + script: /esarchive/scratch/nperez/git/auto-s2s/exec_ecvs_seasonal_oper.R # replace with the path to your script + expid: a68v # replace with your EXPID + hpc_user: bsc32339 # replace with your hpc username + wallclock: 02:00 # hh:mm + processors_per_job: 4 + platform: nord3v2 + email_notifications: yes # enable/disable email notifications. Change it if you want to. + email_address: nuria.perez@bsc.es # replace with your email address + notify_completed: yes # notify me by email when a job finishes + notify_failed: yes # notify me by email when a job fails diff --git a/recipe_prlr_seasonal_oper.yml b/recipe_prlr_seasonal_oper.yml new file mode 100644 index 00000000..30bcd71b --- /dev/null +++ b/recipe_prlr_seasonal_oper.yml @@ -0,0 +1,61 @@ +Description: + Author: nperez + Info: ECVs Oper ESS ECMWF SEAS5 Seasonal Forecast recipe (monthly mean, tas) + +Analysis: + Horizon: seasonal # Mandatory, str: either subseasonal, seasonal, or decadal + Variables: + name: prlr + freq: monthly_mean + Datasets: + System: + name: ECMWF-SEAS5.1 # Mandatory, str: system5c3s system21_m1 system35c3s + Multimodel: no # Mandatory, bool: Either yes/true or no/false + Reference: + name: ERA5 # Mandatory, str: Reference codename. See docu. + Time: + sdate: '0701' ## MMDD + fcst_year: '2023' # Optional, int: Forecast year 'YYYY' + hcst_start: '1993' # Mandatory, int: Hindcast start year 'YYYY' + hcst_end: '2016' # Mandatory, int: Hindcast end year 'YYYY' + ftime_min: 1 # Mandatory, int: First leadtime time step in months + ftime_max: 6 # Mandatory, int: Last leadtime time step in months + Region: + latmin: 20 # Mandatory, int: minimum latitude + latmax: 80 # Mandatory, int: maximum latitude + lonmin: -20 # Mandatory, int: minimum longitude + lonmax: 40 # Mandatory, int: maximum longitude + Regrid: + method: bilinear # Mandatory, str: Interpolation method. See docu. + type: "to_system" + #type: /esarchive/scratch/nmilders/gitlab/git_clones/auto-s2s/conf/grid_description.txt #'r360x180' # Mandatory, str: to_system, to_reference, or CDO-accepted grid. + Workflow: + Anomalies: + compute: no + cross_validation: no + save: none + Calibration: + method: evmos # Mandatory, str: Calibration method. See docu. + cross_validation: yes + save: none + Skill: + metric: mean_bias EnsCorr rpss crpss bss10 bss90 + save: 'all' + cross_validation: yes + Probabilities: + percentiles: [[1/3, 2/3], [1/10, 9/10]] # frac: Quantile thresholds. + save: 'all' + Indicators: + index: no + Visualization: + plots: skill_metrics forecast_ensemble_mean most_likely_terciles + multi_panel: no + ncores: 4 # Optional, int: number of cores, defaults to 1 + remove_NAs: # Optional, bool: Whether NAs are removed, defaults to FALSE + Output_format: scorecards + logo: yes +Run: + Loglevel: INFO + Terminal: TRUE + output_dir: /esarchive/scratch/nperez/cs_oper/ + code_dir: /esarchive/scratch/nperez/git/s2s-suite/ diff --git a/recipe_tas_seasonal_oper.yml b/recipe_tas_seasonal_oper.yml new file mode 100644 index 00000000..0cfd9362 --- /dev/null +++ b/recipe_tas_seasonal_oper.yml @@ -0,0 +1,61 @@ +Description: + Author: nperez + Info: ECVs Oper ESS ECMWF SEAS5 Seasonal Forecast recipe (monthly mean, tas) + +Analysis: + Horizon: seasonal # Mandatory, str: either subseasonal, seasonal, or decadal + Variables: + name: tas + freq: monthly_mean + Datasets: + System: + name: ECMWF-SEAS5.1 # Mandatory, str: system5c3s system21_m1 system35c3s + Multimodel: no # Mandatory, bool: Either yes/true or no/false + Reference: + name: ERA5 # Mandatory, str: Reference codename. See docu. + Time: + sdate: '0601' ## MMDD + fcst_year: '2023' # Optional, int: Forecast year 'YYYY' + hcst_start: '1993' # Mandatory, int: Hindcast start year 'YYYY' + hcst_end: '2016' # Mandatory, int: Hindcast end year 'YYYY' + ftime_min: 1 # Mandatory, int: First leadtime time step in months + ftime_max: 6 # Mandatory, int: Last leadtime time step in months + Region: + latmin: 20 # Mandatory, int: minimum latitude + latmax: 80 # Mandatory, int: maximum latitude + lonmin: -20 # Mandatory, int: minimum longitude + lonmax: 40 # Mandatory, int: maximum longitude + Regrid: + method: bilinear # Mandatory, str: Interpolation method. See docu. + type: "to_system" + #type: /esarchive/scratch/nmilders/gitlab/git_clones/auto-s2s/conf/grid_description.txt #'r360x180' # Mandatory, str: to_system, to_reference, or CDO-accepted grid. + Workflow: + Anomalies: + compute: no + cross_validation: no + save: none + Calibration: + method: evmos # Mandatory, str: Calibration method. See docu. + cross_validation: yes + save: none + Skill: + metric: mean_bias EnsCorr rpss crpss bss10 bss90 + save: 'all' + cross_validation: yes + Probabilities: + percentiles: [[1/3, 2/3], [1/10, 9/10]] # frac: Quantile thresholds. + save: 'all' + Indicators: + index: no + Visualization: + plots: skill_metrics forecast_ensemble_mean most_likely_terciles + multi_panel: no + ncores: 4 # Optional, int: number of cores, defaults to 1 + remove_NAs: # Optional, bool: Whether NAs are removed, defaults to FALSE + Output_format: scorecards + logo: yes +Run: + Loglevel: INFO + Terminal: TRUE + output_dir: /esarchive/scratch/nperez/cs_oper/ + code_dir: /esarchive/scratch/nperez/git/s2s-suite/ -- GitLab From 920d3dc4243e37f7adbb09327f02c59cba58dbd6 Mon Sep 17 00:00:00 2001 From: nperez Date: Mon, 24 Jul 2023 12:35:24 +0200 Subject: [PATCH 183/388] RPSS filter --- .../R/plot_most_likely_terciles_map.R | 20 +++++++++++++- modules/Visualization/Visualization.R | 27 +++++++++++++++++-- recipe_tas_seasonal_oper.yml | 1 + 3 files changed, 45 insertions(+), 3 deletions(-) diff --git a/modules/Visualization/R/plot_most_likely_terciles_map.R b/modules/Visualization/R/plot_most_likely_terciles_map.R index 7f31e353..0901d2e0 100644 --- a/modules/Visualization/R/plot_most_likely_terciles_map.R +++ b/modules/Visualization/R/plot_most_likely_terciles_map.R @@ -1,7 +1,8 @@ ## TODO: Change name plot_most_likely_terciles <- function(recipe, fcst, - probabilities, + probabilities, + mask, outdir) { source("modules/Visualization/R/tmp/PlotMostLikelyQuantileMap.R") source("modules/Visualization/R/tmp/PlotCombinedMap.R") @@ -62,6 +63,14 @@ plot_most_likely_terciles <- function(recipe, # Define name of output file and titles i_var_probs <- var_probs[which(start_date == i_syear), , , , ] outfile <- paste0(outdir[[var]], "forecast_most_likely_tercile-", i_syear) + if (!is.null(mask)) { + outfile <- paste0(outfile, "_rpssmask") + mask <- drop(mask) + dim_mask <- dim(mask) + mask <- as.numeric(mask <= 0) + dim(mask) <- dim_mask + + } toptitle <- paste0(system_name, " / ", str_to_title(var_long_name), "\n", "Most Likely Tercile / Initialization: ", i_syear) @@ -78,6 +87,7 @@ plot_most_likely_terciles <- function(recipe, PlotLayout(PlotMostLikelyQuantileMap, c('bin', 'longitude', 'latitude'), cat_dim = 'bin', i_var_probs, longitude, latitude, + mask = mask, coast_width = 1.5, title_scale = 0.6, title_margin_scale = 0.7, @@ -101,6 +111,12 @@ plot_most_likely_terciles <- function(recipe, forecast_time <- forecast_time + 12 } forecast_time <- sprintf("%02d", forecast_time) + # Get mask subset + if (!is.null(mask)) { + mask_i <- Subset(mask, along = 'time', indices = i, drop = TRUE) + } else { + mask_i <- NULL + } # Define plot title toptitle <- paste0(system_name, " / ", str_to_title(var_long_name), @@ -115,6 +131,8 @@ plot_most_likely_terciles <- function(recipe, probs = i_var_probs[i, , , ], lon = longitude, lat = latitude, coast_width = 1.5, + mask = mask_i, + col_mask = 'antiquewhite', cols = cols, title_scale = 1, legend_scale = 0.8, diff --git a/modules/Visualization/Visualization.R b/modules/Visualization/Visualization.R index 03a4d5a2..94bfd619 100644 --- a/modules/Visualization/Visualization.R +++ b/modules/Visualization/Visualization.R @@ -66,8 +66,31 @@ plot_data <- function(recipe, # Plot Most Likely Terciles if ("most_likely_terciles" %in% plots) { if ((!is.null(probabilities)) && (!is.null(data$fcst))) { - plot_most_likely_terciles(recipe, data$fcst, - probabilities, outdir) +# mask: yes/no/both + if (recipe$Analysis$Workflow$Visualization$mask_terciles %in% + c('both', 'no')) { + plot_most_likely_terciles(recipe, data$fcst, + probabilities, mask = NULL, + outdir) + } + if (recipe$Analysis$Workflow$Visualization$mask_terciles %in% + c('both', 'yes')) { + if (!is.null(skill_metrics)) { + if ('rpss' %in% names(skill_metrics)) { + plot_most_likely_terciles(recipe, data$fcst, + probabilities, mask = skill_metrics$rpss, + outdir) + } else { + error(recipe$Run$logger, + paste0("For the most likely terciles plot, rpss metrics ", + "need to be provided to be masked")) + } + } else { + error(recipe$Run$logger, + paste0("For the most likely terciles plot, skill_metrics ", + "need to be provided to be masked")) + } + } } else { error(recipe$Run$logger, paste0("For the most likely terciles plot, both the fcst and the ", diff --git a/recipe_tas_seasonal_oper.yml b/recipe_tas_seasonal_oper.yml index 0cfd9362..75918265 100644 --- a/recipe_tas_seasonal_oper.yml +++ b/recipe_tas_seasonal_oper.yml @@ -50,6 +50,7 @@ Analysis: Visualization: plots: skill_metrics forecast_ensemble_mean most_likely_terciles multi_panel: no + mask_terciles: both ncores: 4 # Optional, int: number of cores, defaults to 1 remove_NAs: # Optional, bool: Whether NAs are removed, defaults to FALSE Output_format: scorecards -- GitLab From 81b11d3cb3a88e3c7187d6459a559ae72113db51 Mon Sep 17 00:00:00 2001 From: nperez Date: Tue, 25 Jul 2023 10:37:22 +0200 Subject: [PATCH 184/388] remove units --- modules/Units/Units.R | 10 ---------- 1 file changed, 10 deletions(-) delete mode 100644 modules/Units/Units.R diff --git a/modules/Units/Units.R b/modules/Units/Units.R deleted file mode 100644 index acf42bcf..00000000 --- a/modules/Units/Units.R +++ /dev/null @@ -1,10 +0,0 @@ -# This function aims to convert units -## -Units <- function(recipe, data) { - # from recipe read the user defined units - # from data the original units - # deaccumulate option for CDS accumulated variables? - ## Do we need to convert other than ECVs? - user_units <- recipe$Analysis$Variables$units - orig_units <- data$hcst$data$attrs$Variables$ -} -- GitLab From de0ae0a1dc6d5e6877d6ad8c8b71ea5cd92aab9a Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Tue, 25 Jul 2023 16:12:37 +0200 Subject: [PATCH 185/388] Set recipe name in autosubmit conf and set output directory in Scorecards script --- autosubmit/auto-scorecards.sh | 2 +- modules/Scorecards/Scorecards.R | 4 ++++ tools/prepare_outputs.R | 1 - tools/write_autosubmit_conf.R | 1 + 4 files changed, 6 insertions(+), 2 deletions(-) diff --git a/autosubmit/auto-scorecards.sh b/autosubmit/auto-scorecards.sh index 1456a9b0..a1033a46 100644 --- a/autosubmit/auto-scorecards.sh +++ b/autosubmit/auto-scorecards.sh @@ -12,4 +12,4 @@ recipe=${outdir}/logs/recipes/${recipe} source MODULES -Rscript modules/Scorecards/Scorecards.R ${recipe} +Rscript modules/Scorecards/Scorecards.R ${recipe} ${outdir} diff --git a/modules/Scorecards/Scorecards.R b/modules/Scorecards/Scorecards.R index e677d403..0a46f75f 100644 --- a/modules/Scorecards/Scorecards.R +++ b/modules/Scorecards/Scorecards.R @@ -3,7 +3,11 @@ source('modules/Scorecards/R/plot_scorecards.R') args = commandArgs(trailingOnly = TRUE) recipe_file <- args[1] +output_dir <- args[2] + +# Read recipe and set outdir recipe <- read_yaml(recipe_file) +recipe$Run$output_dir <- output_dir recipe$Analysis$Datasets$System <- recipe$Analysis$Datasets$System[[1]] recipe$Analysis$Datasets$Reference <- recipe$Analysis$Datasets$Reference[[1]] recipe$Analysis$Variables <- recipe$Analysis$Variables[[1]] diff --git a/tools/prepare_outputs.R b/tools/prepare_outputs.R index f54325ec..a3cc9b56 100644 --- a/tools/prepare_outputs.R +++ b/tools/prepare_outputs.R @@ -31,7 +31,6 @@ prepare_outputs <- function(recipe_file, recipe$recipe_path <- recipe_file recipe$name <- tools::file_path_sans_ext(basename(recipe_file)) - output_dir = recipe$Run$output_dir # Create output folders if (!uniqueID) { diff --git a/tools/write_autosubmit_conf.R b/tools/write_autosubmit_conf.R index a425566d..f0e1088a 100644 --- a/tools/write_autosubmit_conf.R +++ b/tools/write_autosubmit_conf.R @@ -71,6 +71,7 @@ write_autosubmit_conf <- function(recipe, nchunks) { ## modules? Info that goes on script, e.g. output directory conf$common$OUTDIR <- recipe$Run$output_dir conf$common$SCRIPT <- recipe$Run$auto_conf$script + conf$common$RECIPE <- paste0(recipe$name, ".yml") } # Write config file inside autosubmit dir ## TODO: Change write.type depending on autosubmit version -- GitLab From bec21f067a29a9922e7aa63a3b1a78a1385f440d Mon Sep 17 00:00:00 2001 From: vagudets Date: Tue, 25 Jul 2023 16:21:15 +0200 Subject: [PATCH 186/388] Add Mean Square Error and Mean Square Skill Score --- modules/Skill/R/tmp/MSE.R | 311 +++++++++++++ modules/Skill/R/tmp/MSSS.R | 435 +++++++++++++++++++ modules/Skill/Skill.R | 26 ++ modules/Visualization/R/plot_skill_metrics.R | 2 +- 4 files changed, 773 insertions(+), 1 deletion(-) create mode 100644 modules/Skill/R/tmp/MSE.R create mode 100644 modules/Skill/R/tmp/MSSS.R diff --git a/modules/Skill/R/tmp/MSE.R b/modules/Skill/R/tmp/MSE.R new file mode 100644 index 00000000..97e4e828 --- /dev/null +++ b/modules/Skill/R/tmp/MSE.R @@ -0,0 +1,311 @@ +#'Compute mean square error +#' +#'Compute the mean square error for an array of forecasts and an array of +#'observations. The MSEs are computed along time_dim, the dimension which +#'corresponds to the start date dimension. If comp_dim is given, the MSEs are +#'computed only if obs along the comp_dim dimension are complete between +#'limits[1] and limits[2], i.e. there are no NAs between limits[1] and +#'limits[2]. This option can be activated if the user wants to account only +#'for the forecasts for which the corresponding observations are available at +#'all leadtimes.\cr +#'The confidence interval is computed by the chi2 distribution.\cr +#' +#'@param exp A named numeric array of experimental data, with at least #' 'time_dim' dimension. It can also be a vector with the same length as 'obs'. +#'@param obs A named numeric array of observational data, same dimensions as +#' parameter 'exp' except along 'dat_dim' and 'memb_dim'. It can also be a +#' vector with the same length as 'exp'. +#'@param time_dim A character string indicating the name of dimension along +#' which the correlations are computed. The default value is 'sdate'. +#'@param memb_dim A character string indicating the name of the member dimension +#' to compute the ensemble mean; it should be set to NULL if the input data are +#' already the ensemble mean. The default value is NULL. +#'@param dat_dim A character string indicating the name of dataset or member +#' (nobs/nexp) dimension. The datasets of exp and obs will be paired and +#' computed MSE for each pair. The default value is NULL. +#'@param comp_dim A character string indicating the name of dimension along which +#' obs is taken into account only if it is complete. The default value +#' is NULL. +#'@param limits A vector of two integers indicating the range along comp_dim to +#' be completed. The default value is c(1, length(comp_dim dimension)). +#'@param conf A logical value indicating whether to retrieve the confidence +#' intervals or not. The default value is TRUE. +#'@param alpha A numeric indicating the significance level for the statistical +#' significance test. The default value is 0.05. +#'@param ncores An integer indicating the number of cores to use for parallel +#' computation. The default value is NULL. +#' +#'@return +#'A list containing the numeric arrays with dimension:\cr +#' c(nexp, nobs, all other dimensions of exp except time_dim).\cr +#'nexp is the number of experiment (i.e., dat_dim in exp), and nobs is the +#'number of observation (i.e., dat_dim in obs).\cr +#'\item{$mse}{ +#' The mean square error. +#'} +#'\item{$conf.lower}{ +#' The lower confidence interval. Only present if \code{conf = TRUE}. +#'} +#'\item{$conf.upper}{ +#' The upper confidence interval. Only present if \code{conf = TRUE}. +#'} +#' +#'@examples +#'# Load sample data as in Load() example: +#'example(Load) +#'clim <- Clim(sampleData$mod, sampleData$obs) +#'ano_exp <- Ano(sampleData$mod, clim$clim_exp) +#'ano_obs <- Ano(sampleData$obs, clim$clim_obs) +#'smooth_ano_exp <- Smoothing(ano_exp, runmeanlen = 12, time_dim = 'ftime') +#'smooth_ano_obs <- Smoothing(ano_obs, runmeanlen = 12, time_dim = 'ftime') +#'res <- MSE(smooth_ano_exp, smooth_ano_obs, memb_dim = 'member', +#' comp_dim = 'ftime', limits = c(7, 54)) +#' +#'# Synthetic data: +#'exp1 <- array(rnorm(120), dim = c(dat = 3, sdate = 10, ftime = 4)) +#'obs1 <- array(rnorm(80), dim = c(dat = 2, sdate = 10, ftime = 4)) +#'na <- floor(runif(10, min = 1, max = 80)) +#'obs1[na] <- NA +#'res1 <- MSE(exp1, obs1, comp_dim = 'ftime', dat_dim = 'dat') +#' +#'exp2 <- array(rnorm(20), dim = c(sdate = 5, member = 4)) +#'obs2 <- array(rnorm(10), dim = c(sdate = 5, member = 2)) +#'res2 <- MSE(exp3, obs3, memb_dim = 'member') +#' +#'@import multiApply +#'@importFrom ClimProjDiags Subset +#'@importFrom stats qchisq +#'@export +MSE <- function(exp, obs, time_dim = 'sdate', dat_dim = NULL, memb_dim = NULL, + comp_dim = NULL, limits = NULL, conf = TRUE, alpha = 0.05, ncores = NULL) { + + # Check inputs + ## exp and obs (1) + if (is.null(exp) | is.null(obs)) { + stop("Parameter 'exp' and 'obs' cannot be NULL.") + } + if (!is.numeric(exp) | !is.numeric(obs)) { + stop("Parameter 'exp' and 'obs' must be a numeric array.") + } + if (is.null(dim(exp)) & is.null(dim(obs))) { #is vector + if (length(exp) == length(obs)) { + exp <- array(exp, dim = c(length(exp))) + names(dim(exp)) <- c(time_dim) + obs <- array(obs, dim = c(length(obs))) + names(dim(obs)) <- c(time_dim) + } else { + stop(paste0("Parameter 'exp' and 'obs' must be array with as least two ", + "dimensions time_dim and dat_dim, or vector of same length.")) + } + } else if (is.null(dim(exp)) | is.null(dim(obs))) { + stop(paste0("Parameter 'exp' and 'obs' must be array with as least two ", + "dimensions time_dim and dat_dim, or vector of same length.")) + } + if(any(is.null(names(dim(exp))))| any(nchar(names(dim(exp))) == 0) | + any(is.null(names(dim(obs))))| any(nchar(names(dim(obs))) == 0)) { + stop("Parameter 'exp' and 'obs' must have dimension names.") + } + ## time_dim + if (!is.character(time_dim) | length(time_dim) > 1) { + stop("Parameter 'time_dim' must be a character string.") + } + if (!time_dim %in% names(dim(exp)) | !time_dim %in% names(dim(obs))) { + stop("Parameter 'time_dim' is not found in 'exp' or 'obs' dimension.") + } + ## memb_dim + if (!is.null(memb_dim)) { + if (!is.character(memb_dim) | length(memb_dim) > 1) { + stop("Parameter 'memb_dim' must be a character string.") + } + if (!memb_dim %in% names(dim(exp)) & !memb_dim %in% names(dim(obs))) { + stop("Parameter 'memb_dim' is not found in 'exp' dimension.") + } + } + ## dat_dim + if (!is.null(dat_dim)) { + if (!is.character(dat_dim) | length(dat_dim) > 1) { + stop("Parameter 'dat_dim' must be a character string or NULL.") + } + if (!dat_dim %in% names(dim(exp)) | !dat_dim %in% names(dim(obs))) { + stop("Parameter 'dat_dim' is not found in 'exp' or 'obs' dimension.", + "Set it as NULL if there is no dataset dimension.") + } + } + ## comp_dim + if (!is.null(comp_dim)) { + if (!is.character(comp_dim) | length(comp_dim) > 1) { + stop("Parameter 'comp_dim' must be a character string.") + } + if (!comp_dim %in% names(dim(exp)) | !comp_dim %in% names(dim(obs))) { + stop("Parameter 'comp_dim' is not found in 'exp' or 'obs' dimension.") + } + } + ## limits + if (!is.null(limits)) { + if (is.null(comp_dim)) { + stop("Paramter 'comp_dim' cannot be NULL if 'limits' is assigned.") + } + if (!is.numeric(limits) | any(limits %% 1 != 0) | any(limits < 0) | + length(limits) != 2 | any(limits > dim(exp)[comp_dim])) { + stop(paste0("Parameter 'limits' must be a vector of two positive ", + "integers smaller than the length of paramter 'comp_dim'.")) + } + } + ## conf + if (!is.logical(conf) | length(conf) > 1) { + stop("Parameter 'conf' must be one logical value.") + } + ## alpha + if (!is.numeric(alpha) | alpha < 0 | alpha > 1 | length(alpha) > 1) { + stop("Parameter 'alpha' must be a numeric number between 0 and 1.") + } + ## ncores + if (!is.null(ncores)) { + if (!is.numeric(ncores) | ncores %% 1 != 0 | ncores <= 0 | + length(ncores) > 1) { + stop("Parameter 'ncores' must be a positive integer.") + } + } + ## exp and obs (2) + name_exp <- sort(names(dim(exp))) + name_obs <- sort(names(dim(obs))) + if (!is.null(memb_dim)) { + if (memb_dim %in% name_exp) { + name_exp <- name_exp[-which(name_exp == memb_dim)] + } + if (memb_dim %in% name_obs) { + name_obs <- name_obs[-which(name_obs == memb_dim)] + } + } + if (!is.null(dat_dim)) { + name_exp <- name_exp[-which(name_exp == dat_dim)] + name_obs <- name_obs[-which(name_obs == dat_dim)] + } + if (!all(name_exp == name_obs)) { + stop("Parameter 'exp' and 'obs' must have the same dimension names.") + } + if (!all(dim(exp)[name_exp] == dim(obs)[name_obs])) { + stop(paste0("Parameter 'exp' and 'obs' must have same length of ", + "all dimensions except 'dat_dim' and 'memb_dim'.")) + } + if (dim(exp)[time_dim] < 2) { + stop("The length of time_dim must be at least 2 to compute MSE.") + } + + ############################### + ## Ensemble mean + if (!is.null(memb_dim)) { + if (memb_dim %in% names(dim(exp))) { + exp <- MeanDims(exp, memb_dim, na.rm = T) + } + if (memb_dim %in% names(dim(obs))) { + obs <- MeanDims(obs, memb_dim, na.rm = T) + } + } + + ############################### + # Sort dimension + name_exp <- names(dim(exp)) + name_obs <- names(dim(obs)) + order_obs <- match(name_exp, name_obs) + obs <- Reorder(obs, order_obs) + + ############################### + # Calculate MSE + + # Remove data along comp_dim dim if there is at least one NA between limits + if (!is.null(comp_dim)) { + if (is.null(limits)) { + limits <- c(1, dim(obs)[comp_dim]) + } + pos <- which(names(dim(obs)) == comp_dim) + obs_sub <- Subset(obs, pos, list(limits[1]:limits[2])) + outrows <- is.na(MeanDims(obs_sub, pos, na.rm = FALSE)) + outrows <- InsertDim(outrows, pos, dim(obs)[comp_dim]) + obs[which(outrows)] <- NA + } + + res <- Apply(list(exp, obs), + target_dims = list(c(time_dim, dat_dim), + c(time_dim, dat_dim)), + fun = .MSE, + time_dim = time_dim, dat_dim = dat_dim, + conf = conf, alpha = alpha, + ncores = ncores) + return(res) +} + +.MSE <- function(exp, obs, time_dim = 'sdate', dat_dim = NULL, conf = TRUE, alpha = 0.05) { + + if (is.null(dat_dim)) { + # exp: [sdate] + # obs: [sdate] + nexp <- 1 + nobs <- 1 + ini_dims <- dim(exp) + dim(exp) <- c(ini_dims, dat_dim = 1) + dim(obs) <- c(ini_dims, dat_dim = 1) + } else { + # exp: [sdate, dat_exp] + # obs: [sdate, dat_obs] + nexp <- as.numeric(dim(exp)[2]) + nobs <- as.numeric(dim(obs)[2]) + } + + dif <- array(dim = c(dim(exp)[1], nexp = nexp, nobs = nobs)) + chi <- array(dim = c(nexp = nexp, nobs = nobs)) + + if (conf) { + conflow <- alpha / 2 + confhigh <- 1 - conflow + conf.lower <- array(dim = c(nexp = nexp, nobs = nobs)) + conf.upper <- array(dim = c(nexp = nexp, nobs = nobs)) + } + + # dif + for (i in 1:nobs) { + dif[, , i] <- sapply(1:nexp, function(x) {exp[, x] - obs[, i]}) + } + + mse <- colMeans(dif^2, na.rm = TRUE) # array(dim = c(nexp, nobs)) + + if (conf) { + #count effective sample along sdate. eno: c(nexp, nobs) +# eno <- Eno(dif, time_dim) # slower than for loop below? + eno <- array(dim = c(nexp = nexp, nobs = nobs)) + for (n_obs in 1:nobs) { + for (n_exp in 1:nexp) { + eno[n_exp, n_obs] <- .Eno(dif[, n_exp, n_obs], na.action = na.pass) + } + } + + # conf.lower + chi <- sapply(1:nobs, function(i) { + qchisq(confhigh, eno[, i] - 1) + }) + conf.lower <- (eno * mse ** 2 / chi) ** 0.5 + + # conf.upper + chi <- sapply(1:nobs, function(i) { + qchisq(conflow, eno[, i] - 1) + }) + conf.upper <- (eno * mse ** 2 / chi) ** 0.5 + } + + ################################### + # Remove nexp and nobs if dat_dim = NULL + if (is.null(dat_dim)) { + dim(mse) <- NULL + if (conf) { + dim(conf.lower) <- NULL + dim(conf.upper) <- NULL + } + } + + ################################### + + res <- list(mse = mse) + if (conf) res <- c(res, list(conf.lower = conf.lower, conf.upper = conf.upper)) + + return(res) + +} diff --git a/modules/Skill/R/tmp/MSSS.R b/modules/Skill/R/tmp/MSSS.R new file mode 100644 index 00000000..a11c50c8 --- /dev/null +++ b/modules/Skill/R/tmp/MSSS.R @@ -0,0 +1,435 @@ +#'Compute mean square error skill score +#' +#'Compute the mean square error skill score (MSSS) between an array of forecast +#''exp' and an array of observation 'obs'. The two arrays should have the same +#'dimensions except along 'dat_dim' and 'memb_dim'. The MSSSs are computed along +#''time_dim', the dimension which corresponds to the start date dimension. +#'MSSS computes the mean square error skill score of each exp in 1:nexp +#'against each obs in 1:nobs which gives nexp * nobs MSSS for each grid point +#'of the array.\cr +#'The p-value and significance test are optionally provided by an one-sided +#'Fisher test or Random Walk test.\cr +#' +#'@param exp A named numeric array of experimental data which contains at least +#' time dimension (time_dim). It can also be a vector with the same length as +#' 'obs', then the vector will automatically be 'time_dim'. +#'@param obs A named numeric array of observational data which contains at least +#' time dimension (time_dim). The dimensions should be the same as parameter +#' 'exp' except the length of 'dat_dim' and 'memb_dim' dimension. It can also +#' be a vector with the same length as 'exp', then the vector will +#' automatically be 'time_dim'. +#'@param ref A named numerical array of the reference forecast data with at +#' least time dimension, or 0 (typical climatological forecast) or 1 +#' (normalized climatological forecast). If it is an array, the dimensions must +#' be the same as 'exp' except 'memb_dim' and 'dat_dim'. If there is only one +#' reference dataset, it should not have dataset dimension. If there is +#' corresponding reference for each experiment, the dataset dimension must +#' have the same length as in 'exp'. If 'ref' is NULL, the typical +#' climatological forecast is used as reference forecast (equivalent to 0.) +#' The default value is NULL. +#'@param dat_dim A character string indicating the name of dataset (nobs/nexp) +#' dimension. The default value is NULL. +#'@param time_dim A character string indicating the name of dimension along +#' which the MSSS are computed. The default value is 'sdate'. +#'@param memb_dim A character string indicating the name of the member dimension +#' to compute the ensemble mean; it should be set to NULL if the data are +#' already the ensemble mean. The default value is NULL. +#'@param pval A logical value indicating whether to compute or not the p-value +#' of the test Ho: MSSS = 0. The default value is TRUE. +#'@param sign A logical value indicating whether to compute or not the +#' statistical significance of the test Ho: MSSS = 0. The default value is +#' FALSE. +#'@param alpha A numeric of the significance level to be used in the +#' statistical significance test. The default value is 0.05. +#'@param sig_method A character string indicating the significance method. The +#' options are "one-sided Fisher" (default) and "Random Walk". +#'@param sig_method.type A character string indicating the test type of the +#' significance method. Check \code{RandomWalkTest()} parameter +#' \code{test.type} for details if parameter "sig_method" is "Random Walk". The +#' default is NULL (since "one-sided Fisher" doesn't have different test +#' types.) +#'@param ncores An integer indicating the number of cores to use for parallel +#' computation. The default value is NULL. +#' +#'@return +#'A list containing the numeric arrays with dimension:\cr +#' c(nexp, nobs, all other dimensions of exp except time_dim).\cr +#'nexp is the number of experiment (i.e., dat_dim in exp), and nobs is the +#'number of observation (i.e., dat_dim in obs). If dat_dim is NULL, nexp and +#'nobs are omitted.\cr +#'\item{$msss}{ +#' A numerical array of the mean square error skill score. +#'} +#'\item{$p.val}{ +#' A numerical array of the p-value with the same dimensions as $msss. +#' Only present if \code{pval = TRUE}. +#'} +#'\item{sign}{ +#' A logical array of the statistical significance of the MSSS with the same +#' dimensions as $msss. Only present if \code{sign = TRUE}. +#'} +#' +#'@examples +#'# Load sample data as in Load() example: +#'example(Load) +#'clim <- Clim(sampleData$mod, sampleData$obs) +#'ano_exp <- Ano(sampleData$mod, clim$clim_exp) +#'ano_obs <- Ano(sampleData$obs, clim$clim_obs) +#'rmsss <- MSSS(ano_exp, ano_obs, dat_dim = 'dataset', memb_dim = 'member') +#' +#'# Synthetic data: +#'exp <- array(rnorm(30), dim = c(dataset = 2, time = 3, memb = 5)) +#'obs <- array(rnorm(15), dim = c(time = 3, dataset = 1)) +#'res <- MSSS(exp, obs, time_dim = 'time', dat_dim = 'dataset', memb_dim = 'memb') +#' +#'@rdname MSSS +#'@import multiApply +#'@importFrom stats pf +#'@export +MSSS <- function(exp, obs, ref = NULL, time_dim = 'sdate', dat_dim = NULL, + memb_dim = NULL, pval = TRUE, sign = FALSE, alpha = 0.05, + sig_method = 'one-sided Fisher', sig_method.type = NULL, ncores = NULL) { + + # Check inputs + ## exp, obs, and ref (1) + if (is.null(exp) | is.null(obs)) { + stop("Parameter 'exp' and 'obs' cannot be NULL.") + } + if (!is.numeric(exp) | !is.numeric(obs)) { + stop("Parameter 'exp' and 'obs' must be a numeric array.") + } + if (is.null(dim(exp)) & is.null(dim(obs))) { #is vector + if (length(exp) == length(obs)) { + exp <- array(exp, dim = c(length(exp))) + names(dim(exp)) <- c(time_dim) + obs <- array(obs, dim = c(length(obs))) + names(dim(obs)) <- c(time_dim) + } else { + stop(paste0("Parameter 'exp' and 'obs' must be array with as least two ", + "dimensions time_dim and dat_dim, or vector of same length.")) + } + } else if (is.null(dim(exp)) | is.null(dim(obs))) { + stop(paste0("Parameter 'exp' and 'obs' must be array with as least two ", + "dimensions time_dim and dat_dim, or vector of same length.")) + } + if (any(is.null(names(dim(exp))))| any(nchar(names(dim(exp))) == 0) | + any(is.null(names(dim(obs))))| any(nchar(names(dim(obs))) == 0)) { + stop("Parameter 'exp' and 'obs' must have dimension names.") + } + if (!is.null(ref)) { + if (!is.numeric(ref)) { + stop("Parameter 'ref' must be numeric.") + } + if (is.array(ref)) { + if (any(is.null(names(dim(ref))))| any(nchar(names(dim(ref))) == 0)) { + stop("Parameter 'ref' must have dimension names.") + } + } else if (length(ref) != 1 | any(!ref %in% c(0, 1))) { + stop("Parameter 'ref' must be a numeric array or number 0 or 1.") + } + } else { + ref <- 0 + } + if (!is.array(ref)) { # 0 or 1 + ref <- array(data = ref, dim = dim(exp)) + } + + ## time_dim + if (!is.character(time_dim) | length(time_dim) > 1) { + stop("Parameter 'time_dim' must be a character string.") + } + if (!time_dim %in% names(dim(exp)) | !time_dim %in% names(dim(obs))) { + stop("Parameter 'time_dim' is not found in 'exp' or 'obs' dimension.") + } + ## dat_dim + if (!is.null(dat_dim)) { + if (!is.character(dat_dim) | length(dat_dim) > 1) { + stop("Parameter 'dat_dim' must be a character string or NULL.") + } + if (!dat_dim %in% names(dim(exp)) | !dat_dim %in% names(dim(obs))) { + stop("Parameter 'dat_dim' is not found in 'exp' or 'obs' dimension.", + " Set it as NULL if there is no dataset dimension.") + } + } + ## memb_dim + if (!is.null(memb_dim)) { + if (!is.character(memb_dim) | length(memb_dim) > 1) { + stop("Parameter 'memb_dim' must be a character string.") + } + if (!memb_dim %in% names(dim(exp))) { + stop("Parameter 'memb_dim' is not found in 'exp' dimension.") + } + } + ## pval + if (!is.logical(pval) | length(pval) > 1) { + stop("Parameter 'pval' must be one logical value.") + } + ## sign + if (!is.logical(sign) | length(sign) > 1) { + stop("Parameter 'sign' must be one logical value.") + } + ## alpha + if (!is.numeric(alpha) | length(alpha) > 1) { + stop("Parameter 'alpha' must be one numeric value.") + } + ## sig_method + if (length(sig_method) != 1 | !any(sig_method %in% c('one-sided Fisher', 'Random Walk'))) { + stop("Parameter 'sig_method' must be one of 'one-sided Fisher' or 'Random Walk'.") + } + ## sig_method.type + if (sig_method == 'Random Walk') { + if (is.null(sig_method.type)) { + .warning("Parameter 'sig_method.type' must be specified if 'sig_method' is ", + "Random Walk. Assign it as 'two.sided'.") + sig_method.type <- "two.sided" + } + if (!any(sig_method.type %in% c('two.sided.approx', 'two.sided', 'greater', 'less'))) { + stop("Parameter 'sig_method.type' must be a method accepted by RandomWalkTest() parameter 'test.type'.") + } + if (sig_method.type == 'two.sided.approx' & pval == T) { + .warning("p-value cannot be calculated by Random Walk 'two.sided.approx' method.") + pval <- FALSE + if (alpha != 0.05) { + .warning("DelSole and Tippett (2016) aproximation is valid for alpha ", + "= 0.05 only. Returning the significance at the 0.05 significance level.") + alpha <- 0.05 + } + } + } + ## ncores + if (!is.null(ncores)) { + if (!is.numeric(ncores) | ncores %% 1 != 0 | ncores <= 0 | length(ncores) > 1) { + stop("Parameter 'ncores' must be a positive integer.") + } + } + ## exp, obs, and ref (2) + name_exp <- sort(names(dim(exp))) + name_obs <- sort(names(dim(obs))) + if (!is.null(memb_dim)) { + if (memb_dim %in% name_exp) { + name_exp <- name_exp[-which(name_exp == memb_dim)] + } + if (memb_dim %in% name_obs) { + name_obs <- name_obs[-which(name_obs == memb_dim)] + } + } + if (!is.null(dat_dim)) { + name_exp <- name_exp[-which(name_exp == dat_dim)] + name_obs <- name_obs[-which(name_obs == dat_dim)] + } + if (!all(name_exp == name_obs)) { + stop("Parameter 'exp' and 'obs' must have the same dimension names.") + } + if (!all(dim(exp)[name_exp] == dim(obs)[name_obs])) { + stop(paste0("Parameter 'exp' and 'obs' must have same length of ", + "all dimensions except 'dat_dim' and 'memb_dim'.")) + } + + name_ref <- sort(names(dim(ref))) + if (!is.null(memb_dim) && memb_dim %in% name_ref) { + name_ref <- name_ref[-which(name_ref == memb_dim)] + } + if (!is.null(dat_dim)) { + if (dat_dim %in% name_ref) { + if (!identical(dim(exp)[dat_dim], dim(ref)[dat_dim])) { + stop(paste0("If parameter 'ref' has dataset dimension, it must be ", + "equal to dataset dimension of 'exp'.")) + } + name_ref <- name_ref[-which(name_ref == dat_dim)] + } + } + if (!identical(length(name_exp), length(name_ref)) | + !identical(dim(exp)[name_exp], dim(ref)[name_ref])) { + stop(paste0("Parameter 'exp' and 'ref' must have the same length of ", + "all dimensions except 'memb_dim' and 'dat_dim' if there is ", + "only one reference dataset.")) + } + + if (dim(exp)[time_dim] <= 2) { + stop("The length of time_dim must be more than 2 to compute MSSS.") + } + + ############################### + # # Sort dimension + # name_exp <- names(dim(exp)) + # name_obs <- names(dim(obs)) + # order_obs <- match(name_exp, name_obs) + # obs <- Reorder(obs, order_obs) + + ############################### + ## Ensemble mean + if (!is.null(memb_dim)) { + if (memb_dim %in% names(dim(exp))) { + exp <- MeanDims(exp, memb_dim, na.rm = T) + } + if (memb_dim %in% names(dim(obs))) { + obs <- MeanDims(obs, memb_dim, na.rm = T) + } + if (memb_dim %in% names(dim(ref))) { + ref <- MeanDims(ref, memb_dim, na.rm = T) + } + } + + ############################### + # Calculate MSSS + + data <- list(exp = exp, obs = obs, ref = ref) + if (!is.null(dat_dim)) { + if (dat_dim %in% names(dim(ref))) { + target_dims <- list(exp = c(time_dim, dat_dim), + obs = c(time_dim, dat_dim), + ref = c(time_dim, dat_dim)) + } else { + target_dims <- list(exp = c(time_dim, dat_dim), + obs = c(time_dim, dat_dim), + ref = c(time_dim)) + } + } else { + target_dims <- list(exp = time_dim, obs = time_dim, ref = time_dim) + } + + res <- Apply(data, + target_dims = target_dims, + fun = .MSSS, + time_dim = time_dim, dat_dim = dat_dim, + pval = pval, sign = sign, alpha = alpha, + sig_method = sig_method, sig_method.type = sig_method.type, + ncores = ncores) + + return(res) +} + +.MSSS <- function(exp, obs, ref = NULL, time_dim = 'sdate', dat_dim = NULL, pval = TRUE, + sign = FALSE, alpha = 0.05, sig_method = 'one-sided Fisher', + sig_method.type = NULL) { + # exp: [sdate, (dat)] + # obs: [sdate, (dat)] + # ref: [sdate, (dat)] or NULL + + if (is.null(ref)) { + ref <- array(data = 0, dim = dim(obs)) + } else if (identical(ref, 0) | identical(ref, 1)) { + ref <- array(ref, dim = dim(exp)) + } + + if (is.null(dat_dim)) { + # exp: [sdate] + # obs: [sdate] + nexp <- 1 + nobs <- 1 + nref <- 1 + # Add dat dim back temporarily + dim(exp) <- c(dim(exp), dat = 1) + dim(obs) <- c(dim(obs), dat = 1) + dim(ref) <- c(dim(ref), dat = 1) + + } else { + # exp: [sdate, dat_exp] + # obs: [sdate, dat_obs] + nexp <- as.numeric(dim(exp)[2]) + nobs <- as.numeric(dim(obs)[2]) + if (dat_dim %in% names(dim(ref))) { + nref <- as.numeric(dim(ref)[2]) + } else { + dim(ref) <- c(dim(ref), dat = 1) + nref <- 1 + } + } + + nsdate <- as.numeric(dim(exp)[1]) + + # MSE of forecast + dif1 <- array(dim = c(nsdate, nexp, nobs)) + names(dim(dif1)) <- c(time_dim, 'nexp', 'nobs') + + for (i in 1:nobs) { + dif1[, , i] <- sapply(1:nexp, function(x) {exp[, x] - obs[, i]}) + } + + mse_exp <- colMeans(dif1^2, na.rm = TRUE) # [nexp, nobs] + + # MSE of reference + dif2 <- array(dim = c(nsdate, nref, nobs)) + names(dim(dif2)) <- c(time_dim, 'nexp', 'nobs') + for (i in 1:nobs) { + dif2[, , i] <- sapply(1:nref, function(x) {ref[, x] - obs[, i]}) + } + mse_ref <- colMeans(dif2^2, na.rm = TRUE) # [nref, nobs] + if (nexp != nref) { + # expand mse_ref to nexp (nref is 1) + mse_ref <- array(mse_ref, dim = c(nobs = nobs, nexp = nexp)) + mse_ref <- Reorder(mse_ref, c(2, 1)) + } + + msss <- 1 - mse_exp / mse_ref + + ################################################# + + if (sig_method == 'one-sided Fisher') { + p_val <- array(dim = c(nexp = nexp, nobs = nobs)) + ## pval and sign + if (pval || sign) { + eno1 <- Eno(dif1, time_dim) + if (is.null(ref)) { + eno2 <- Eno(obs, time_dim) + eno2 <- array(eno2, dim = c(nobs = nobs, nexp = nexp)) + eno2 <- Reorder(eno2, c(2, 1)) + } else { + eno2 <- Eno(dif2, time_dim) + if (nref != nexp) { + eno2 <- array(eno2, dim = c(nobs = nobs, nexp = nexp)) + eno2 <- Reorder(eno2, c(2, 1)) + } + } + + F.stat <- (eno2 * mse_ref^2 / (eno2 - 1)) / ((eno1 * mse_exp^2 / (eno1- 1))) + tmp <- !is.na(eno1) & !is.na(eno2) & eno1 > 2 & eno2 > 2 + p_val <- 1 - pf(F.stat, eno1 - 1, eno2 - 1) + if (sign) signif <- p_val <= alpha + # If there isn't enough valid data, return NA + p_val[which(!tmp)] <- NA + if (sign) signif[which(!tmp)] <- NA + + # change not enough valid data msss to NA + msss[which(!tmp)] <- NA + } + + } else if (sig_method == "Random Walk") { + + if (sign) signif <- array(dim = c(nexp = nexp, nobs = nobs)) + if (pval) p_val <- array(dim = c(nexp = nexp, nobs = nobs)) + + for (i in 1:nexp) { + for (j in 1:nobs) { + error_exp <- array(data = abs(exp[, i] - obs[, j]), dim = c(time = nsdate)) + if (nref == nexp) { + error_ref <- array(data = abs(ref[, i] - obs[, j]), dim = c(time = nsdate)) + } else { + # nref = 1 + error_ref <- array(data = abs(ref - obs[, j]), dim = c(time = nsdate)) + } + aux <- .RandomWalkTest(skill_A = error_exp, skill_B = error_ref, + test.type = sig_method.type, + pval = pval, sign = sign, alpha = alpha) + if (sign) signif[i, j] <- aux$sign + if (pval) p_val[i, j] <- aux$p.val + } + } + } + + ################################### + # Remove extra dimensions if dat_dim = NULL + if (is.null(dat_dim)) { + dim(msss) <- NULL + if (pval) dim(p_val) <- NULL + if (sign) dim(signif) <- NULL + } + ################################### + + # output + res <- list(msss = msss) + if (pval) res <- c(res, list(p.val = p_val)) + if (sign) res <- c(res, list(sign = signif)) + + return(res) +} diff --git a/modules/Skill/Skill.R b/modules/Skill/Skill.R index ecb89224..a6ae6d48 100644 --- a/modules/Skill/Skill.R +++ b/modules/Skill/Skill.R @@ -16,8 +16,11 @@ source("modules/Skill/R/tmp/RPS.R") source("modules/Skill/R/tmp/RPSS.R") source("modules/Skill/R/tmp/GetProbs.R") source("modules/Skill/R/tmp/RandomWalkTest.R") +source("modules/Skill/R/tmp/MSE.R") +source("modules/Skill/R/tmp/MSSS.R") source("modules/Skill/R/RPS_clim.R") source("modules/Skill/R/CRPS_clim.R") + ## TODO: Implement this in the future ## Which parameter are required? # if (!("obs" %in% ls()) || is.null(obs)) { @@ -274,6 +277,29 @@ compute_skill_metrics <- function(recipe, data, agg = 'global') { .drop_dims(x)}) skill_metrics[[ metric ]] <- skill$rmsss skill_metrics[[ paste0(metric, "_significance") ]] <- skill$sign + } else if (metric == 'mse') { + skill <- MSE(data$hcst$data, data$obs$data, + time_dim = time_dim, + memb_dim = memb_dim, + dat_dim = 'dat', + comp_dim = NULL, + conf = FALSE, + ncores = ncores) + skill <- lapply(skill, function(x) { + .drop_dims(x)}) + skill_metrics[[ metric ]] <- skill$mse + skill_metrics[[ paste0(metric, "_significance") ]] <- skill$sign + } else if (metric == 'msss') { + skill <- MSSS(data$hcst$data, data$obs$data, + time_dim = time_dim, + memb_dim = memb_dim, + dat_dim = 'dat', + sign = TRUE, + ncores = ncores) + skill <- lapply(skill, function(x) { + .drop_dims(x)}) + skill_metrics[[ metric ]] <- skill$msss + skill_metrics[[ paste0(metric, "_significance") ]] <- skill$sign } else if (metric == 'enssprerr') { # Remove ensemble dim from obs to avoid veriApply warning obs_noensdim <- ClimProjDiags::Subset(data$obs$data, "ensemble", 1, diff --git a/modules/Visualization/R/plot_skill_metrics.R b/modules/Visualization/R/plot_skill_metrics.R index 59f487c2..9744ad1c 100644 --- a/modules/Visualization/R/plot_skill_metrics.R +++ b/modules/Visualization/R/plot_skill_metrics.R @@ -48,7 +48,7 @@ plot_skill_metrics <- function(recipe, data_cube, skill_metrics, # Group different metrics by type skill_scores <- c("rpss", "bss90", "bss10", "frpss", "crpss", "mean_bias_ss", "enscorr", "rpss_specs", "bss90_specs", "bss10_specs", - "enscorr_specs", "rmsss") + "enscorr_specs", "rmsss", "msss") scores <- c("rps", "frps", "crps", "frps_specs") # Loop over variables and assign colorbar and plot parameters to each metric for (var in 1:data_cube$dims[['var']]) { -- GitLab From d36d70657e363e53bfdf2c3620e572033912a9de Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Tue, 25 Jul 2023 16:28:28 +0200 Subject: [PATCH 187/388] Consider MSE and MSSS --- modules/Visualization/R/plot_skill_metrics.R | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/Visualization/R/plot_skill_metrics.R b/modules/Visualization/R/plot_skill_metrics.R index 9744ad1c..76dae774 100644 --- a/modules/Visualization/R/plot_skill_metrics.R +++ b/modules/Visualization/R/plot_skill_metrics.R @@ -49,7 +49,7 @@ plot_skill_metrics <- function(recipe, data_cube, skill_metrics, skill_scores <- c("rpss", "bss90", "bss10", "frpss", "crpss", "mean_bias_ss", "enscorr", "rpss_specs", "bss90_specs", "bss10_specs", "enscorr_specs", "rmsss", "msss") - scores <- c("rps", "frps", "crps", "frps_specs") + scores <- c("rps", "frps", "crps", "frps_specs", "mse") # Loop over variables and assign colorbar and plot parameters to each metric for (var in 1:data_cube$dims[['var']]) { var_skill <- lapply(skill_metrics, function(x) { @@ -61,7 +61,7 @@ plot_skill_metrics <- function(recipe, data_cube, skill_metrics, # Define plot characteristics and metric name to display in plot if (name %in% c("rpss", "bss90", "bss10", "frpss", "crpss", "rpss_specs", "bss90_specs", "bss10_specs", - "rmsss")) { + "rmsss", "msss")) { display_name <- toupper(strsplit(name, "_")[[1]][1]) skill <- var_skill[[name]] brks <- seq(-1, 1, by = 0.2) @@ -100,7 +100,7 @@ plot_skill_metrics <- function(recipe, data_cube, skill_metrics, cols <- colorbar[1:length(colorbar) - 1] col_inf <- NULL col_sup <- colorbar[length(colorbar)] - } else if (name == "mean_bias") { + } else if (name %in% "mean_bias") { skill <- var_skill[[name]] display_name <- "Mean Bias" max_value <- max(abs(quantile(skill, 0.02, na.rm = T)), -- GitLab From ec74ec58b1b3f22120c0700389ff918a4a652074 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pierre-Antoine=20Bretonni=C3=A8re?= Date: Tue, 25 Jul 2023 21:28:50 +0200 Subject: [PATCH 188/388] environment no autosubmit --- .../environment-cerise-localgribr.yml | 642 ++++++++---------- 1 file changed, 295 insertions(+), 347 deletions(-) diff --git a/conda_installation/environment-cerise-localgribr.yml b/conda_installation/environment-cerise-localgribr.yml index 20808ef8..08c74f3d 100644 --- a/conda_installation/environment-cerise-localgribr.yml +++ b/conda_installation/environment-cerise-localgribr.yml @@ -1,398 +1,346 @@ -name: condaCerise +name: ceriseNoAS channels: - - r - conda-forge - defaults dependencies: - _libgcc_mutex=0.1=conda_forge - - _openmp_mutex=4.5=2_gnu + - _openmp_mutex=4.5=2_kmp_llvm - _r-mutex=1.0.0=anacondar_1 - - alsa-lib=1.2.8=h166bdaf_0 - - atk-1.0=2.36.0=ha1a6a79_0 - - attr=2.5.1=h166bdaf_1 + - _sysroot_linux-64_curr_repodata_hack=3=haa98f57_10 + - atk-1.0=2.38.0=hd4edc92_1 + - aws-c-auth=0.7.0=hf8751d9_2 + - aws-c-cal=0.6.0=h93469e0_0 + - aws-c-common=0.8.23=hd590300_0 + - aws-c-compression=0.2.17=h862ab75_1 + - aws-c-event-stream=0.3.1=h9599702_1 + - aws-c-http=0.7.11=hbe98c3e_0 + - aws-c-io=0.13.28=h3870b5a_0 + - aws-c-mqtt=0.8.14=h2e270ba_2 + - aws-c-s3=0.3.13=heb0bb06_2 + - aws-c-sdkutils=0.1.11=h862ab75_1 + - aws-checksums=0.1.16=h862ab75_1 + - aws-crt-cpp=0.20.3=he9c0e7f_4 + - aws-sdk-cpp=1.10.57=hbc2ea52_17 - binutils_impl_linux-64=2.40=hf600244_0 - - brotli=1.0.9=h5eee18b_7 - - brotli-bin=1.0.9=h5eee18b_7 - - brotlipy=0.7.0=py37h27cfd23_1003 + - blas=2.116=openblas + - blas-devel=3.9.0=16_linux64_openblas + - blosc=1.21.4=h0f2a231_0 + - boost-cpp=1.78.0=h6582d0a_3 - bwidget=1.9.11=1 - bzip2=1.0.8=h7b6447c_0 - c-ares=1.19.0=h5eee18b_0 - - ca-certificates=2023.01.10=h06a4308_0 - - cairo=1.16.0=ha61ee94_1014 - - cdo=2.1.1=h4f55462_2 - - certifi=2022.12.7=py37h06a4308_0 - - cffi=1.15.1=py37h5eee18b_3 - - conda=4.14.0=py37h89c1867_0 - - conda-package-handling=2.0.2=py37h06a4308_0 - - conda-package-streaming=0.7.0=py37h06a4308_0 - - cov-core=1.15.0=py_1 - - curl=7.88.1=hdc1c0ab_1 - - cycler=0.11.0=pyhd3eb1b0_0 - - dbus=1.13.18=hb2f20db_0 - - eccodes=2.29.0=h7986f14_1 - - expat=2.5.0=h27087fc_0 + - ca-certificates=2023.7.22=hbcca054_0 + - cairo=1.16.0=hb05425b_5 + - cfitsio=4.2.0=hd9d235c_0 + - curl=8.2.0=hca28451_0 + - eccodes=2.31.0=h73bf81c_0 + - expat=2.5.0=hcb278e6_1 - fftw=3.3.10=nompi_hf0379b8_106 - - findlibs=0.0.2=pyhd8ed1ab_0 - - flit-core=3.6.0=pyhd3eb1b0_0 - - font-ttf-dejavu-sans-mono=2.37=hd3eb1b0_0 - - font-ttf-inconsolata=2.001=hcb22688_0 - - font-ttf-source-code-pro=2.030=hd3eb1b0_0 - - font-ttf-ubuntu=0.83=h8b1ccd4_0 + - font-ttf-dejavu-sans-mono=2.37=hab24e00_0 + - font-ttf-inconsolata=3.000=h77eed37_0 + - font-ttf-source-code-pro=2.038=h77eed37_0 + - font-ttf-ubuntu=0.83=hab24e00_0 - fontconfig=2.14.2=h14ed4e7_0 - - fonts-anaconda=1=h8fa9717_0 - - fonts-conda-ecosystem=1=hd3eb1b0_0 - - fonttools=4.25.0=pyhd3eb1b0_0 - - freeglut=3.2.2=h9c3ff4c_1 + - fonts-conda-ecosystem=1=0 + - fonts-conda-forge=1=0 + - freeglut=3.2.2=hac7e632_2 - freetype=2.12.1=h4a9f257_0 + - freexl=1.0.6=h166bdaf_1 - fribidi=1.0.10=h7b6447c_0 - - gcc_impl_linux-64=12.2.0=hcc96c02_19 - - gdk-pixbuf=2.42.10=h5eee18b_0 + - gcc_impl_linux-64=13.1.0=hc4be1a9_0 + - gdk-pixbuf=2.42.10=h6b639ba_2 + - geos=3.11.2=hcb278e6_0 + - geotiff=1.7.1=h22adcc9_11 - gettext=0.21.1=h27087fc_0 - - gfortran_impl_linux-64=12.2.0=h55be85b_19 - - giflib=5.2.1=h5eee18b_3 - - glib=2.74.1=h6239696_1 - - glib-tools=2.74.1=h6239696_1 - - gobject-introspection=1.72.0=py37hbb6d50b_1 + - gfortran_impl_linux-64=13.1.0=hd511a9b_0 + - ghostscript=9.54.0=h27087fc_2 + - giflib=5.2.1=h0b41bf4_3 + - glib=2.76.4=hfc55251_0 + - glib-tools=2.76.4=hfc55251_0 - graphite2=1.3.14=h295c915_1 - - graphviz=7.1.0=h2e5815a_0 - - gsl=2.7.1=h6e86dc7_1 - - gst-plugins-base=1.22.0=h4243ec0_2 - - gstreamer=1.22.0=h25f0c4b_2 - - gstreamer-orc=0.4.33=h166bdaf_0 - - gtk2=2.24.33=h73c1081_2 - - gts=0.7.6=hb67d8dd_3 - - gxx_impl_linux-64=12.2.0=hcc96c02_19 - - harfbuzz=6.0.0=h8e241bc_0 - - hdf4=4.2.15=h9772cbc_5 - - hdf5=1.12.2=nompi_h4df4325_101 - - icu=70.1=h27087fc_0 - - idna=3.4=py37h06a4308_0 - - jack=1.9.22=h11f4161_0 - - jasper=4.0.0=h0ff4b12_0 - - jpeg=9e=h5eee18b_1 - - kernel-headers_linux-64=2.6.32=he073ed8_15 + - graphviz=8.1.0=h28d9a01_0 + - gsl=2.7=he838d99_0 + - gtk2=2.24.33=h90689f9_2 + - gts=0.7.6=h977cf35_4 + - gxx_impl_linux-64=13.1.0=hc4be1a9_0 + - harfbuzz=7.3.0=hdb3a94d_0 + - hdf4=4.2.15=h501b40f_6 + - hdf5=1.14.1=nompi_h4f84152_100 + - icu=72.1=hcb278e6_0 + - imagemagick=7.1.1_14=pl5321hf48ede7_0 + - jasper=4.0.0=h32699f2_1 + - jbig=2.1=h7f98852_2003 + - json-c=0.16=hc379101_0 + - kealib=1.5.1=h3e6883b_4 + - kernel-headers_linux-64=2.6.32=he073ed8_16 - keyutils=1.6.1=h166bdaf_0 - - kiwisolver=1.4.4=py37h6a678d5_0 - - krb5=1.20.1=h81ceb04_0 - - lame=3.100=h7b6447c_0 - - lcms2=2.12=h3be6417_0 + - krb5=1.21.1=h659d440_0 + - lcms2=2.15=haa2dc70_1 - ld_impl_linux-64=2.40=h41732ed_0 - - lerc=3.0=h295c915_0 + - lerc=4.0.0=h27087fc_0 - libaec=1.0.6=hcb278e6_1 - libblas=3.9.0=16_linux64_openblas - - libbrotlicommon=1.0.9=h5eee18b_7 - - libbrotlidec=1.0.9=h5eee18b_7 - - libbrotlienc=1.0.9=h5eee18b_7 - - libcap=2.66=ha37c62d_0 - libcblas=3.9.0=16_linux64_openblas - - libclang=15.0.7=default_had23c3d_1 - - libclang13=15.0.7=default_h3e3d535_1 - - libcups=2.3.3=h36d4200_3 - - libcurl=7.88.1=hdc1c0ab_1 - - libdb=6.2.32=h6a678d5_1 - - libdeflate=1.17=h5eee18b_0 + - libcurl=8.2.0=hca28451_0 + - libdeflate=1.18=h0b41bf4_0 - libedit=3.1.20221030=h5eee18b_0 - libev=4.33=h7f8727e_1 - - libevent=2.1.10=h28343ad_4 + - libexpat=2.5.0=hcb278e6_1 - libffi=3.4.4=h6a678d5_0 - - libflac=1.4.2=h27087fc_0 - - libgcc-devel_linux-64=12.2.0=h3b97bd3_19 - - libgcc-ng=12.2.0=h65d4601_19 - - libgcrypt=1.10.1=h166bdaf_0 - - libgd=2.3.3=h695aa2c_1 - - libgfortran-ng=12.2.0=h69a702a_19 - - libgfortran5=12.2.0=h337968e_19 - - libglib=2.74.1=h606061b_1 - - libglu=9.0.0=hf484d3e_1 - - libgomp=12.2.0=h65d4601_19 - - libgpg-error=1.46=h620e276_0 + - libgcc-devel_linux-64=13.1.0=he3cc6c4_0 + - libgcc-ng=13.1.0=he5830b7_0 + - libgd=2.3.3=hfa28ad5_6 + - libgdal=3.6.4=hd54c316_5 + - libgfortran-ng=13.1.0=h69a702a_0 + - libgfortran5=13.1.0=h15d22d2_0 + - libglib=2.76.4=hebfc3b9_0 + - libglu=9.0.0=hac7e632_1002 + - libgomp=13.1.0=he5830b7_0 - libiconv=1.17=h166bdaf_0 + - libjpeg-turbo=2.1.5.1=h0b41bf4_0 + - libkml=1.3.0=h37653c0_1015 - liblapack=3.9.0=16_linux64_openblas - - libllvm15=15.0.7=hadd5161_1 - - libnetcdf=4.9.1=nompi_h34a3ff0_101 - - libnghttp2=1.52.0=h61bc06f_0 - - libnsl=2.0.0=h5eee18b_0 - - libogg=1.3.5=h27cfd23_1 - - libopenblas=0.3.21=h043d6bf_0 - - libopus=1.3.1=h7b6447c_0 + - liblapacke=3.9.0=16_linux64_openblas + - libnetcdf=4.9.2=nompi_h7e745eb_109 + - libnghttp2=1.52.0=h2d74bed_1 + - libnsl=2.0.0=h7f98852_0 + - libopenblas=0.3.21=pthreads_h78a6416_3 - libpng=1.6.39=h5eee18b_0 - - libpq=15.2=hb675445_0 - - librsvg=2.54.4=h7abd40a_0 - - libsanitizer=12.2.0=h46fd767_19 - - libsndfile=1.2.0=hb75c966_0 - - libsodium=1.0.18=h7b6447c_0 - - libsqlite=3.40.0=h753d276_0 - - libssh2=1.10.0=hf14f497_3 - - libstdcxx-devel_linux-64=12.2.0=h3b97bd3_19 - - libstdcxx-ng=12.2.0=h46fd767_19 - - libsystemd0=252=h2a991cd_0 - - libtiff=4.5.0=h6a678d5_2 + - libpq=15.3=hfc447b1_2 + - librsvg=2.56.1=h98fae49_0 + - librttopo=1.1.0=h0d5128d_13 + - libsanitizer=13.1.0=hfd8a6a1_0 + - libspatialite=5.0.1=hca56755_27 + - libsqlite=3.42.0=h2797004_0 + - libssh2=1.11.0=h0841786_0 + - libstdcxx-devel_linux-64=13.1.0=he3cc6c4_0 + - libstdcxx-ng=13.1.0=hfd8a6a1_0 + - libtiff=4.5.1=h8b53f26_0 - libtool=2.4.7=h27087fc_0 - - libudev1=253=h0b41bf4_0 - - libuuid=2.32.1=h7f98852_1000 - - libvorbis=1.3.7=h7b6447c_0 - - libwebp=1.2.4=h11a3e52_1 - - libwebp-base=1.2.4=h5eee18b_1 - - libxcb=1.13=h1bed415_1 - - libxkbcommon=1.5.0=h79f4944_1 - - libxml2=2.10.3=hca2bb57_4 + - libuuid=2.38.1=h0b41bf4_0 + - libwebp=1.3.1=hbf2b3c1_0 + - libwebp-base=1.3.1=hd590300_0 + - libxcb=1.15=h7f8727e_0 + - libxml2=2.11.4=h0d562d8_0 - libzip=1.9.2=hc929e4a_1 - - libzlib=1.2.13=h166bdaf_4 + - libzlib=1.2.13=hd590300_5 + - llvm-openmp=16.0.6=h4dfa4b3_0 - lz4-c=1.9.4=h6a678d5_0 - - magics=4.13.0=h37abd2f_1 - - magics-python=1.5.8=pyhd8ed1ab_1 - make=4.2.1=h1bed415_1 - - matplotlib=3.5.3=py37h89c1867_2 - - matplotlib-base=3.5.3=py37hf590b9c_0 - - mock=5.0.1=pyhd8ed1ab_0 - - mpg123=1.31.3=hcb278e6_0 - - munkres=1.1.4=py_0 - - mysql-common=8.0.32=ha901b37_0 - - mysql-libs=8.0.32=hd7da12d_0 - ncurses=6.4=h6a678d5_0 - - ninja=1.10.2=h06a4308_5 - - ninja-base=1.10.2=hd09550d_5 - - nose=1.3.7=py_1006 - - nose-cov=1.6=py_1 - - nspr=4.35=h6a678d5_0 + - nspr=4.35=h27087fc_0 - nss=3.89=he45b914_0 - - numpy=1.21.6=py37h976b520_0 + - openblas=0.3.21=pthreads_h320a7e8_3 + - openjpeg=2.5.0=hfec8fc6_2 - openssl=3.1.1=hd590300_1 - - packaging=22.0=py37h06a4308_0 - - pandoc=2.12=h06a4308_3 - - pango=1.50.14=hd33c08f_0 - - paramiko=3.1.0=pyhd8ed1ab_0 + - pandoc=2.19.2=h32600fe_2 + - pango=1.50.14=heaa33ce_1 + - pcre=8.45=h295c915_0 - pcre2=10.40=hc3806b6_0 + - perl=5.32.1=4_hd590300_perl5 - phantomjs=2.1.1=1 - - pillow=9.4.0=py37h6a678d5_0 - - pip=23.0.1=pyhd8ed1ab_0 + - pip=23.1.2=py311h06a4308_0 - pixman=0.40.0=h7f8727e_1 - - ply=3.11=py37_0 - - proj=9.1.1=h8ffa02c_2 - - pulseaudio=16.1=ha8d29e2_1 - - pycosat=0.6.4=py37h5eee18b_0 - - pycparser=2.21=pyhd3eb1b0_0 - - pynacl=1.5.0=py37h5eee18b_0 - - pyopenssl=23.0.0=py37h06a4308_0 - - pyparsing=3.0.9=pyhd8ed1ab_0 - - pyqt=5.15.7=py37hf30b843_1 - - pyqt5-sip=12.11.0=py37hd23a5d3_1 - - pysocks=1.7.1=py37_1 - - python=3.7.12=hf930737_100_cpython - - python-dateutil=2.8.2=pyhd8ed1ab_0 - - python_abi=3.7=3_cp37m - - qt-main=5.15.8=h5d23da1_6 - - r-abind=1.4_5=r42hc72bb7e_1004 - - r-askpass=1.1=r42h06615bd_3 - - r-assertthat=0.2.1=r42hc72bb7e_3 - - r-base=4.2.3=ha7d60f8_0 - - r-base64enc=0.1_3=r42h06615bd_1005 - - r-bigmemory=4.6.1=r42h7525677_1 - - r-bigmemory.sri=0.1.6=r42hc72bb7e_0 - - r-brio=1.1.3=r42h76d94ec_0 - - r-bslib=0.4.2=r42hc72bb7e_0 - - r-cachem=1.0.7=r42h133d619_0 - - r-callr=3.7.0=r42h6115d3f_0 - - r-cli=3.6.0=r42h38f115c_0 - - r-climdex.pcic=1.1_11=r42h7525677_1 - - r-climprojdiags=0.3.0=r42hc72bb7e_0 - - r-clock=0.6.1=r42h7525677_1 - - r-codetools=0.2_19=r42hc72bb7e_0 - - r-colorspace=2.1_0=r42h133d619_0 - - r-commonmark=1.9.0=r42h133d619_0 - - r-configr=0.3.5=r42hc72bb7e_0 - - r-cpp11=0.4.3=r42hc72bb7e_0 - - r-crayon=1.5.2=r42hc72bb7e_1 - - r-curl=4.3.3=r42h06615bd_1 - - r-desc=1.4.1=r42h6115d3f_0 - - r-diffobj=0.3.5=r42h76d94ec_0 - - r-digest=0.6.31=r42h38f115c_0 - - r-doparallel=1.0.17=r42hc72bb7e_1 - - r-dotcall64=1.0_2=r42hac0b197_1 - - r-easyncdf=0.1.1=r42hc72bb7e_1 - - r-easyverification=0.4.4=r42h7525677_2 - - r-ellipsis=0.3.2=r42h06615bd_1 - - r-evaluate=0.15=r42h6115d3f_0 - - r-fansi=1.0.4=r42h133d619_0 - - r-farver=2.1.1=r42h7525677_1 - - r-fastmap=1.1.1=r42h38f115c_0 - - r-fields=14.1=r42hac0b197_1 - - r-fontawesome=0.5.1=r42hc72bb7e_0 - - r-foreach=1.5.2=r42hc72bb7e_1 - - r-formattable=0.2.1=r42ha770c72_1 - - r-fs=1.6.1=r42h38f115c_0 - - r-future=1.32.0=r42hc72bb7e_0 - - r-generics=0.1.2=r42h142f84f_0 - - r-geomap=2.5_0=r42h06615bd_1 - - r-geomapdata=2.0_0=r42hc72bb7e_1 - - r-ggplot2=3.4.1=r42hc72bb7e_0 - - r-globals=0.16.2=r42hc72bb7e_0 - - r-glue=1.6.2=r42h06615bd_1 - - r-gridextra=2.3=r42hc72bb7e_1004 - - r-gtable=0.3.3=r42hc72bb7e_0 - - r-highr=0.10=r42hc72bb7e_0 - - r-htmltools=0.5.5=r42h38f115c_0 - - r-htmlwidgets=1.6.2=r42hc72bb7e_0 - - r-httpuv=1.6.9=r42h38f115c_0 - - r-httr=1.4.6=r42hc72bb7e_0 - - r-ini=0.3.1=r42hc72bb7e_1004 - - r-isoband=0.2.7=r42h38f115c_1 - - r-iterators=1.0.14=r42hc72bb7e_1 - - r-jquerylib=0.1.4=r42hc72bb7e_1 - - r-jsonlite=1.8.0=r42h76d94ec_0 - - r-kableextra=1.3.4=r42hc72bb7e_1 - - r-knitr=1.43=r42hc72bb7e_0 - - r-labeling=0.4.2=r42hc72bb7e_2 - - r-later=1.3.0=r42h7525677_1 - - r-lattice=0.20_45=r42h06615bd_1 - - r-lifecycle=1.0.3=r42hc72bb7e_1 - - r-listenv=0.9.0=r42hc72bb7e_0 - - r-lobstr=1.1.2=r42h38f115c_2 - - r-log4r=0.4.3=r42h06615bd_0 + - pkg-config=0.29.2=h36c2ea0_1008 + - poppler=23.05.0=hd18248d_1 + - poppler-data=0.4.12=hd8ed1ab_0 + - postgresql=15.3=h8972f4a_2 + - proj=9.2.1=ha643af7_0 + - python=3.11.4=hab00c5b_0_cpython + - r-abind=1.4_5=r42hc72bb7e_1005 + - r-askpass=1.1=r42h57805ef_4 + - r-assertthat=0.2.1=r42hc72bb7e_4 + - r-backports=1.4.1=r42h57805ef_2 + - r-base=4.2.3=hb1b9b86_6 + - r-base64enc=0.1_3=r42h57805ef_1006 + - r-bigmemory=4.6.1=r42ha503ecb_2 + - r-bigmemory.sri=0.1.6=r42hc72bb7e_1 + - r-brio=1.1.3=r42h57805ef_2 + - r-bslib=0.3.1=r42h6115d3f_0 + - r-cachem=1.0.8=r42h57805ef_1 + - r-callr=3.7.3=r42hc72bb7e_1 + - r-class=7.3_22=r42h57805ef_1 + - r-classint=0.4_9=r42h61816a4_1 + - r-cli=3.6.1=r42ha503ecb_1 + - r-climdex.pcic=1.1_11=r42ha503ecb_2 + - r-climprojdiags=0.3.2=r42hc72bb7e_1 + - r-clock=0.7.0=r42ha503ecb_1 + - r-codetools=0.2_19=r42hc72bb7e_1 + - r-colorspace=2.1_0=r42h57805ef_1 + - r-commonmark=1.9.0=r42h57805ef_1 + - r-configr=0.3.5=r42hc72bb7e_1 + - r-cowplot=1.1.1=r42hc72bb7e_2 + - r-cpp11=0.4.5=r42hc72bb7e_0 + - r-crayon=1.5.2=r42hc72bb7e_2 + - r-curl=5.0.1=r42hf9611b0_0 + - r-dbi=1.1.3=r42hc72bb7e_2 + - r-desc=1.4.2=r42hc72bb7e_2 + - r-diffobj=0.3.5=r42h57805ef_2 + - r-digest=0.6.33=r42ha503ecb_0 + - r-docopt=0.7.1=r42hc72bb7e_3 + - r-doparallel=1.0.17=r42hc72bb7e_2 + - r-dotcall64=1.0_2=r42h61816a4_2 + - r-e1071=1.7_13=r42ha503ecb_1 + - r-easyncdf=0.1.2=r42hc72bb7e_1 + - r-easyverification=0.4.4=r42ha503ecb_3 + - r-ellipsis=0.3.2=r42h57805ef_2 + - r-evaluate=0.21=r42hc72bb7e_1 + - r-fansi=1.0.4=r42h57805ef_1 + - r-farver=2.1.1=r42ha503ecb_2 + - r-fastmap=1.1.1=r42ha503ecb_1 + - r-fields=14.1=r42h61816a4_2 + - r-fnn=1.1.3.2=r42ha503ecb_1 + - r-fontawesome=0.5.1=r42hc72bb7e_1 + - r-foreach=1.5.2=r42hc72bb7e_2 + - r-formattable=0.2.1=r42ha770c72_2 + - r-fs=1.6.3=r42ha503ecb_0 + - r-future=1.33.0=r42hc72bb7e_0 + - r-generics=0.1.3=r42hc72bb7e_2 + - r-geomap=2.5_0=r42h57805ef_2 + - r-geomapdata=2.0_0=r42hc72bb7e_2 + - r-ggplot2=3.4.2=r42hc72bb7e_1 + - r-globals=0.16.2=r42hc72bb7e_1 + - r-glue=1.6.2=r42h57805ef_2 + - r-gribr=1.2.6=r42hd590300_0 + - r-gridextra=2.3=r42hc72bb7e_1005 + - r-gtable=0.3.3=r42hc72bb7e_1 + - r-highr=0.10=r42hc72bb7e_1 + - r-htmltools=0.5.5=r42ha503ecb_1 + - r-htmlwidgets=1.6.2=r42hc72bb7e_1 + - r-httpuv=1.6.11=r42ha503ecb_1 + - r-httr=1.4.6=r42hc72bb7e_1 + - r-ini=0.3.1=r42hc72bb7e_1005 + - r-isoband=0.2.7=r42ha503ecb_2 + - r-iterators=1.0.14=r42hc72bb7e_2 + - r-jquerylib=0.1.4=r42hc72bb7e_2 + - r-jsonlite=1.8.7=r42h57805ef_0 + - r-kableextra=1.3.4=r42hc72bb7e_2 + - r-kernsmooth=2.23_22=r42h13b3f57_0 + - r-knitr=1.43=r42hc72bb7e_1 + - r-labeling=0.4.2=r42hc72bb7e_3 + - r-later=1.3.1=r42ha503ecb_1 + - r-lattice=0.21_8=r42h57805ef_1 + - r-lifecycle=1.0.3=r42hc72bb7e_2 + - r-listenv=0.9.0=r42hc72bb7e_1 + - r-lobstr=1.1.2=r42ha503ecb_3 + - r-log4r=0.4.3=r42h57805ef_1 - r-lubridate=1.8.0=r42h884c59f_0 - - r-magrittr=2.0.3=r42h06615bd_1 - - r-mapproj=1.2.11=r42h133d619_0 - - r-maps=3.4.1=r42h06615bd_1 - - r-mass=7.3_58.3=r42h133d619_0 - - r-matrix=1.5_3=r42h5f7b363_0 - - r-mba=0.1_0=r42h7525677_0 - - r-memoise=2.0.1=r42hc72bb7e_1 - - r-mgcv=1.8_42=r42he1ae0d6_0 - - r-mime=0.12=r42h06615bd_1 - - r-multiapply=2.1.3=r42hc72bb7e_1 - - r-munsell=0.5.0=r42hc72bb7e_1005 - - r-nbclust=3.0.1=r42hc72bb7e_1 - - r-ncdf4=1.21=r42h93dc0a4_1 - - r-nlme=3.1_162=r42hac0b197_0 - - r-openssl=2.0.6=r42habfbb5e_0 - - r-parallelly=1.34.0=r42hc72bb7e_0 - - r-pbapply=1.7_0=r42hc72bb7e_0 - - r-pcict=0.5_4.4=r42h133d619_0 - - r-pillar=1.8.1=r42hc72bb7e_1 - - r-pkgconfig=2.0.3=r42hc72bb7e_2 - - r-pkgload=1.2.4=r42h142f84f_0 - - r-plyr=1.8.8=r42h7525677_0 - - r-praise=1.0.0=r42h6115d3f_4 - - r-prettyunits=1.1.1=r42hc72bb7e_2 - - r-processx=3.5.3=r42h76d94ec_0 - - r-proj4=1.0_12=r42h66e2efa_1 - - r-promises=1.2.0.1=r42h7525677_1 - - r-pryr=0.1.6=r42h38f115c_0 - - r-ps=1.7.0=r42h76d94ec_0 - - r-r6=2.5.1=r42hc72bb7e_1 - - r-rappdirs=0.3.3=r42h06615bd_1 - - r-rcolorbrewer=1.1_3=r42h785f33e_1 - - r-rcpp=1.0.10=r42h38f115c_0 - - r-rcpparmadillo=0.11.4.4.0=r42h358215d_0 - - r-rcpptoml=0.1.7=r42h7525677_2 - - r-rematch2=2.1.2=r42h142f84f_0 - - r-rlang=1.1.0=r42h38f115c_0 - - r-rmarkdown=2.21=r42hc72bb7e_0 - - r-rpmg=2.2_3=r42hc72bb7e_2 - - r-rprojroot=2.0.3=r42h6115d3f_0 - - r-rstudioapi=0.13=r42h6115d3f_0 - - r-rvest=1.0.3=r42hc72bb7e_1 - - r-s2dv=1.4.0=r42hc72bb7e_0 - - r-s2dverification=2.10.3=r42hc72bb7e_1 - - r-sass=0.4.5=r42h38f115c_0 - - r-scales=1.2.1=r42hc72bb7e_1 - - r-selectr=0.4_2=r42hc72bb7e_2 - - r-shiny=1.7.4=r42h785f33e_0 - - r-sourcetools=0.1.7_1=r42h38f115c_0 - - r-sp=1.6_0=r42h133d619_0 - - r-spam=2.9_1=r42hb20cf53_1 + - r-magick=2.7.4=r42ha503ecb_1 + - r-magrittr=2.0.3=r42h57805ef_2 + - r-mapproj=1.2.11=r42h57805ef_1 + - r-maps=3.4.1=r42h57805ef_2 + - r-mass=7.3_60=r42h57805ef_1 + - r-matrix=1.6_0=r42h316c678_0 + - r-mba=0.1_0=r42ha503ecb_1 + - r-memuse=4.2_3=r42h57805ef_1 + - r-mgcv=1.9_0=r42h316c678_0 + - r-mime=0.12=r42h57805ef_2 + - r-multiapply=2.1.4=r42hc72bb7e_1 + - r-munsell=0.5.0=r42hc72bb7e_1006 + - r-nbclust=3.0.1=r42hc72bb7e_2 + - r-ncdf4=1.21=r42hdc3962f_5 + - r-nlme=3.1_162=r42h61816a4_1 + - r-nnet=7.3_19=r42h57805ef_1 + - r-openssl=2.0.6=r42hb353fa6_1 + - r-parallelly=1.36.0=r42hc72bb7e_1 + - r-pbapply=1.7_2=r42hc72bb7e_0 + - r-pcict=0.5_4.4=r42h57805ef_1 + - r-pillar=1.9.0=r42hc72bb7e_1 + - r-pkgconfig=2.0.3=r42hc72bb7e_3 + - r-pkgload=1.3.2.1=r42hc72bb7e_0 + - r-plyr=1.8.8=r42ha503ecb_1 + - r-praise=1.0.0=r42hc72bb7e_1007 + - r-prettyunits=1.1.1=r42hc72bb7e_3 + - r-processx=3.8.2=r42h57805ef_0 + - r-proj=0.4.0=r42h57805ef_2 + - r-proj4=1.0_12=r42he1907f6_4 + - r-promises=1.2.0.1=r42ha503ecb_2 + - r-proxy=0.4_27=r42h57805ef_2 + - r-pryr=0.1.6=r42ha503ecb_1 + - r-ps=1.7.5=r42h57805ef_1 + - r-r6=2.5.1=r42hc72bb7e_2 + - r-rappdirs=0.3.3=r42h57805ef_2 + - r-rcolorbrewer=1.1_3=r42h785f33e_2 + - r-rcpp=1.0.11=r42h7df8631_0 + - r-rcpparmadillo=0.12.4.1.0=r42h08d816e_0 + - r-rcpptoml=0.2.2=r42ha503ecb_1 + - r-rematch2=2.1.2=r42hc72bb7e_3 + - r-rlang=1.1.1=r42ha503ecb_1 + - r-rmarkdown=2.14=r42h6115d3f_0 + - r-rnaturalearth=0.3.3=r42hc72bb7e_1 + - r-rpmg=2.2_3=r42hc72bb7e_3 + - r-rprojroot=2.0.3=r42hc72bb7e_1 + - r-rstudioapi=0.15.0=r42hc72bb7e_0 + - r-rvest=1.0.3=r42hc72bb7e_2 + - r-s2=1.1.4=r42h5eac2b3_1 + - r-s2dv=1.4.1=r42hc72bb7e_1 + - r-s2dverification=2.10.3=r42hc72bb7e_2 + - r-sass=0.4.7=r42ha503ecb_0 + - r-scales=1.2.1=r42hc72bb7e_2 + - r-selectr=0.4_2=r42hc72bb7e_3 + - r-sf=1.0_7=r42h6a678d5_2 + - r-shiny=1.7.4.1=r42h785f33e_0 + - r-sourcetools=0.1.7_1=r42ha503ecb_1 + - r-sp=1.6_1=r42h57805ef_1 + - r-spam=2.9_1=r42hd9ac46e_2 - r-specsverification=0.5_3=r42h7525677_2 - - r-splancs=2.01_43=r42h8da6f51_1 - - r-startr=2.2.1=r42hc72bb7e_0 - - r-stringi=1.7.12=r42h1ae9187_0 - - r-stringr=1.5.0=r42h785f33e_0 - - r-svglite=2.1.1=r42he8f5e61_0 - - r-sys=3.4.2=r42h57805ef_0 - - r-systemfonts=1.0.4=r42h0ff29ef_1 - - r-testthat=3.1.4=r42h884c59f_0 - - r-tibble=3.2.1=r42h133d619_1 - - r-tinytex=0.45=r42hc72bb7e_0 - - r-tzdb=0.3.0=r42h7525677_1 - - r-utf8=1.2.3=r42h133d619_0 - - r-uuid=1.1_0=r42h06615bd_1 - - r-vctrs=0.6.0=r42h38f115c_0 - - r-viridis=0.6.2=r42hc72bb7e_1 - - r-viridislite=0.4.1=r42hc72bb7e_1 - - r-waldo=0.4.0=r42h6115d3f_0 - - r-webshot=0.5.4=r42hc72bb7e_1 - - r-withr=2.5.0=r42hc72bb7e_1 - - r-xfun=0.39=r42ha503ecb_0 - - r-xml2=1.3.3=r42h884c59f_0 - - r-xtable=1.8_4=r42hc72bb7e_4 - - r-yaml=2.3.7=r42h133d619_0 + - r-splancs=2.01_43=r42h61816a4_2 + - r-startr=2.2.3=r42hc72bb7e_1 + - r-stringi=1.7.12=r42hc0c3e09_2 + - r-stringr=1.5.0=r42h785f33e_1 + - r-svglite=2.1.1=r42h329214f_1 + - r-sys=3.4.2=r42h57805ef_1 + - r-systemfonts=1.0.4=r42haf97adc_2 + - r-terra=1.5_21=r42h884c59f_2 + - r-testthat=3.1.10=r42ha503ecb_0 + - r-tibble=3.2.1=r42h57805ef_2 + - r-tinytex=0.45=r42hc72bb7e_1 + - r-tzdb=0.4.0=r42ha503ecb_1 + - r-units=0.8_2=r42ha503ecb_1 + - r-utf8=1.2.3=r42h57805ef_1 + - r-uuid=1.1_0=r42h57805ef_2 + - r-vctrs=0.6.3=r42ha503ecb_0 + - r-viridis=0.6.4=r42hc72bb7e_0 + - r-viridislite=0.4.2=r42hc72bb7e_1 + - r-waldo=0.5.1=r42hc72bb7e_1 + - r-webshot=0.5.5=r42hc72bb7e_0 + - r-withr=2.5.0=r42hc72bb7e_2 + - r-wk=0.7.3=r42ha503ecb_1 + - r-xfun=0.39=r42ha503ecb_1 + - r-xml2=1.3.5=r42h1ad5fc0_0 + - r-xtable=1.8_4=r42hc72bb7e_5 + - r-yaml=2.3.5=r42h76d94ec_0 - readline=8.2=h5eee18b_0 - - requests=2.28.1=py37h06a4308_0 - - ruamel_yaml=0.15.100=py37h27cfd23_0 - - sed=4.8=h7b6447c_0 - - simplejson=3.17.6=py37h7f8727e_0 - - sip=6.7.2=py37hd23a5d3_0 - - six=1.16.0=pyhd3eb1b0_1 - - sqlite=3.40.0=h4ff8645_0 - - sysroot_linux-64=2.12=he073ed8_15 + - s2n=1.3.46=h06160fa_0 + - sed=4.8=he412f7d_0 + - setuptools=67.8.0=py311h06a4308_0 + - snappy=1.1.10=h9fff704_0 + - sqlite=3.41.2=h5eee18b_0 + - sysroot_linux-64=2.12=he073ed8_16 + - tiledb=2.13.2=hd532e3d_0 - tk=8.6.12=h1ccaba5_0 - tktable=2.10=h14c3975_0 - - toml=0.10.2=pyhd3eb1b0_0 - - toolz=0.12.0=py37h06a4308_0 - - tornado=6.2=py37h5eee18b_0 - - typing_extensions=4.4.0=py37h06a4308_0 - - udunits2=2.2.25=hd30922c_1 - - urllib3=1.26.14=py37h06a4308_0 - - wheel=0.38.4=py37h06a4308_0 - - xcb-util=0.4.0=h166bdaf_0 - - xcb-util-image=0.4.0=h166bdaf_0 - - xcb-util-keysyms=0.4.0=h166bdaf_0 - - xcb-util-renderutil=0.3.9=h166bdaf_0 - - xcb-util-wm=0.4.1=h166bdaf_0 - - xkeyboard-config=2.38=h0b41bf4_0 + - tzcode=2023c=h0b41bf4_0 + - tzdata=2023c=h04d1e81_0 + - udunits2=2.2.28=hc3e0081_0 + - wheel=0.38.4=py311h06a4308_0 + - xerces-c=3.2.4=h8d71039_2 - xorg-fixesproto=5.0=h7f98852_1002 - xorg-inputproto=2.3.2=h7f98852_1002 - xorg-kbproto=1.0.7=h7f98852_1002 - - xorg-libice=1.0.10=h7f98852_0 - - xorg-libsm=1.2.3=hd9c2040_1000 - - xorg-libx11=1.8.4=h0b41bf4_0 - - xorg-libxau=1.0.9=h7f98852_0 + - xorg-libice=1.1.1=hd590300_0 + - xorg-libsm=1.2.4=h7391055_0 + - xorg-libx11=1.8.6=h8ee46fc_0 + - xorg-libxau=1.0.11=hd590300_0 - xorg-libxext=1.3.4=h0b41bf4_2 - xorg-libxfixes=5.0.3=h7f98852_1004 - xorg-libxi=1.7.10=h7f98852_0 - - xorg-libxrender=0.9.10=h7f98852_1003 - - xorg-libxt=1.2.1=h7f98852_2 + - xorg-libxrender=0.9.11=hd590300_0 + - xorg-libxt=1.3.0=hd590300_1 - xorg-renderproto=0.11.1=h7f98852_1002 - xorg-xextproto=7.3.0=h0b41bf4_1003 - - xorg-xproto=7.0.31=h27cfd23_1007 - - xz=5.2.10=h5eee18b_1 - - yaml=0.2.5=h7b6447c_0 - - zlib=1.2.13=h166bdaf_4 - - zstandard=0.19.0=py37h5eee18b_0 + - xorg-xproto=7.0.31=h7f98852_1007 + - xz=5.4.2=h5eee18b_0 + - zlib=1.2.13=hd590300_5 - zstd=1.5.5=hc292b87_0 - - pip: - - argparse==1.4.0 - - attrs==22.2.0 - - autosubmit==4.0.73 - - autosubmitconfigparser==1.0.21 - - bcrypt==4.0.1 - - bscearth-utils==0.5.2 - - charset-normalizer==3.1.0 - - configobj==5.0.8 - - coverage==7.2.2 - - cryptography==39.0.2 - - exceptiongroup==1.1.1 - - importlib-metadata==6.1.0 - - iniconfig==2.0.0 - - networkx==2.6.3 - - pluggy==1.0.0 - - portalocker==2.7.0 - - py3dotplus==1.1.0 - - pygments==2.14.0 - - pytest==7.2.2 - - pythondialog==3.5.3 - - ruamel-yaml==0.17.21 - - ruamel-yaml-clib==0.2.7 - - setuptools==67.6.0 - - xlib==0.21 - - zipp==3.15.0 -prefix: /esarchive/scratch/pbretonn/conda-cerise/conda/envs/condaCerise +prefix: /home/Earth/pbretonn/miniconda3/envs/ceriseNoAS -- GitLab From a096a972329b981d1d1f99980f37af8413ed8173 Mon Sep 17 00:00:00 2001 From: nperez Date: Wed, 26 Jul 2023 12:39:31 +0200 Subject: [PATCH 189/388] add dots for rpss tercile map --- .../R/plot_most_likely_terciles_map.R | 31 +++++++++++++++--- modules/Visualization/Visualization.R | 32 +++++++++++++++++-- recipe_prlr_seasonal_oper.yml | 1 + 3 files changed, 57 insertions(+), 7 deletions(-) diff --git a/modules/Visualization/R/plot_most_likely_terciles_map.R b/modules/Visualization/R/plot_most_likely_terciles_map.R index 0901d2e0..bcf47f9f 100644 --- a/modules/Visualization/R/plot_most_likely_terciles_map.R +++ b/modules/Visualization/R/plot_most_likely_terciles_map.R @@ -2,19 +2,24 @@ plot_most_likely_terciles <- function(recipe, fcst, probabilities, - mask, + mask, + dots, outdir) { source("modules/Visualization/R/tmp/PlotMostLikelyQuantileMap.R") source("modules/Visualization/R/tmp/PlotCombinedMap.R") source("modules/Visualization/R/tmp/GradientCatsColorBar.R") if (recipe$Analysis$Variables$name %in% c('prlr')) { # add other - cols <- list(c("#FFAB38", "darkorange1"), + cols <- list(c("#FFC473", #FFAB38", + "darkorange1"), c("#b5b5b5", "black"), - c("#41CBC9", "deepskyblue3")) + c("#A0E5E4",#41CBC9", + "deepskyblue3")) } else { - cols <- list(c("#33BFD1", "deepskyblue3"), + cols <- list(c("#A0E5E4",#33BFD1", + "deepskyblue3"), c("#b5b5b5", "black"), - c("#FF764D", "indianred3")) + c("#FFB19A", #FF764D", + "indianred3")) } ## TODO: Add 'anomaly' to plot title @@ -70,6 +75,14 @@ plot_most_likely_terciles <- function(recipe, mask <- as.numeric(mask <= 0) dim(mask) <- dim_mask + } + if (!is.null(dots)) { + outfile <- paste0(outfile, "_rpssdots") + dots <- drop(dots) + dim_dots <- dim(dots) + dots <- as.numeric(dots <= 0) + dim(dots) <- dim_dots + } toptitle <- paste0(system_name, " / ", str_to_title(var_long_name), "\n", "Most Likely Tercile / Initialization: ", @@ -88,6 +101,7 @@ plot_most_likely_terciles <- function(recipe, cat_dim = 'bin', i_var_probs, longitude, latitude, mask = mask, + dots = dots, coast_width = 1.5, title_scale = 0.6, title_margin_scale = 0.7, @@ -117,6 +131,12 @@ plot_most_likely_terciles <- function(recipe, } else { mask_i <- NULL } + # Get dots subset + if (!is.null(dots)) { + dots_i <- Subset(dots, along = 'time', indices = i, drop = TRUE) + } else { + dots_i <- NULL + } # Define plot title toptitle <- paste0(system_name, " / ", str_to_title(var_long_name), @@ -132,6 +152,7 @@ plot_most_likely_terciles <- function(recipe, lon = longitude, lat = latitude, coast_width = 1.5, mask = mask_i, + dots = dots_i, col_mask = 'antiquewhite', cols = cols, title_scale = 1, diff --git a/modules/Visualization/Visualization.R b/modules/Visualization/Visualization.R index 94bfd619..f390ee04 100644 --- a/modules/Visualization/Visualization.R +++ b/modules/Visualization/Visualization.R @@ -67,10 +67,19 @@ plot_data <- function(recipe, if ("most_likely_terciles" %in% plots) { if ((!is.null(probabilities)) && (!is.null(data$fcst))) { # mask: yes/no/both +browser() + if (is.null(recipe$Analysis$Workflow$Visualization$mask_terciles)) { + recipe$Analysis$Workflow$Visualization$mask_terciles <- 'no' + } + if (is.null(recipe$Analysis$Workflow$Visualization$dots)) { + recipe$Analysis$Workflow$Visualization$dots <- 'no' + } if (recipe$Analysis$Workflow$Visualization$mask_terciles %in% - c('both', 'no')) { + c('both', 'no') | + recipe$Analysis$Workflow$Visualization$dots %in% c('both', 'no')) { plot_most_likely_terciles(recipe, data$fcst, probabilities, mask = NULL, + dots = NULL, outdir) } if (recipe$Analysis$Workflow$Visualization$mask_terciles %in% @@ -79,7 +88,7 @@ plot_data <- function(recipe, if ('rpss' %in% names(skill_metrics)) { plot_most_likely_terciles(recipe, data$fcst, probabilities, mask = skill_metrics$rpss, - outdir) + dots = NULL, outdir) } else { error(recipe$Run$logger, paste0("For the most likely terciles plot, rpss metrics ", @@ -91,6 +100,25 @@ plot_data <- function(recipe, "need to be provided to be masked")) } } + if (recipe$Analysis$Workflow$Visualization$dots %in% c('both', 'yes')) { + if (!is.null(skill_metrics)) { + if ('rpss' %in% names(skill_metrics)) { + plot_most_likely_terciles(recipe, data$fcst, + probabilities, mask = NULL, + dots = skill_metrics$rpss, + outdir) + } else { + error(recipe$Run$logger, + paste0("For the most likely terciles plot, rpss metrics ", + "need to be provided to be dots")) + } + } else { + error(recipe$Run$logger, + paste0("For the most likely terciles plot, skill_metrics ", + "need to be provided to be dots")) + } + + } } else { error(recipe$Run$logger, paste0("For the most likely terciles plot, both the fcst and the ", diff --git a/recipe_prlr_seasonal_oper.yml b/recipe_prlr_seasonal_oper.yml index 30bcd71b..fb6d1a1c 100644 --- a/recipe_prlr_seasonal_oper.yml +++ b/recipe_prlr_seasonal_oper.yml @@ -50,6 +50,7 @@ Analysis: Visualization: plots: skill_metrics forecast_ensemble_mean most_likely_terciles multi_panel: no + dots: both ncores: 4 # Optional, int: number of cores, defaults to 1 remove_NAs: # Optional, bool: Whether NAs are removed, defaults to FALSE Output_format: scorecards -- GitLab From deaaf1d1fdf8f7a0869d3adfe8e435c19cf15d43 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Wed, 26 Jul 2023 16:16:00 +0200 Subject: [PATCH 190/388] Add libraries, change scorecards input dir --- modules/Scorecards/R/plot_scorecards.R | 18 +++++++++--------- tools/libs.R | 6 +++++- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/modules/Scorecards/R/plot_scorecards.R b/modules/Scorecards/R/plot_scorecards.R index ac1e4c14..a6e0483b 100644 --- a/modules/Scorecards/R/plot_scorecards.R +++ b/modules/Scorecards/R/plot_scorecards.R @@ -3,21 +3,21 @@ ############################################################################### ##### Load source functions ##### -source('/modules/Scorecards/tmp/LoadMetrics.R') -source('/modules/Scorecards/tmp/WeightedMetrics.R') -source('/modules/Scorecards/tmp/Utils.R') -source('/modules/Scorecards/tmp/SCTransform.R') -source('/modules/Scorecards/tmp/ScorecardsSingle.R') -source('/modules/Scorecards/tmp/ScorecardsMulti.R') -source('/modules/Scorecards/tmp/ScorecardsSystemDiff.R') -source('/modules/Scorecards/tmp/SCPlotScorecard.R') +source('modules/Scorecards/tmp/LoadMetrics.R') +source('modules/Scorecards/tmp/WeightedMetrics.R') +source('modules/Scorecards/tmp/Utils.R') +source('modules/Scorecards/tmp/SCTransform.R') +source('modules/Scorecards/tmp/ScorecardsSingle.R') +source('modules/Scorecards/tmp/ScorecardsMulti.R') +source('modules/Scorecards/tmp/ScorecardsSystemDiff.R') +source('modules/Scorecards/tmp/SCPlotScorecard.R') ## Define function plot_scorecards <- function(recipe) { ## set parameters # input.path <- '/esarchive/scratch/nmilders/scorecards_data/to_system/cross_validation/both_cross_val/' #recipe$Run$output_dir - input.path <- recipe$Run$output_dir + input.path <- paste0(recipe$Run$output_dir, "/outputs/Skill/") output.path <- recipe$Run$output_dir system <- recipe$Analysis$Datasets$System$name diff --git a/tools/libs.R b/tools/libs.R index a67f9549..326a2689 100644 --- a/tools/libs.R +++ b/tools/libs.R @@ -18,7 +18,11 @@ library(ggplot2) library(rnaturalearth) library(cowplot) library(stringr) -library(pryr) # To check mem usage. +library(pryr) +library(ncdf4) +library(formattable) ## to plot horizontal color bars - used ?? +library(kableExtra) +# To check mem usage. # Functions ## To be removed when new package is done by library(CSOperational) -- GitLab From ef8df994b9caff53bfb8888b81104bac4ff604b4 Mon Sep 17 00:00:00 2001 From: Nadia Milders Date: Thu, 27 Jul 2023 11:50:46 +0200 Subject: [PATCH 191/388] included rps_clim and crps_clim in metrics --- modules/Scorecards/R/plot_scorecards.R | 347 +++++++++++++------------ 1 file changed, 185 insertions(+), 162 deletions(-) diff --git a/modules/Scorecards/R/plot_scorecards.R b/modules/Scorecards/R/plot_scorecards.R index ac1e4c14..1ceb0124 100644 --- a/modules/Scorecards/R/plot_scorecards.R +++ b/modules/Scorecards/R/plot_scorecards.R @@ -3,178 +3,201 @@ ############################################################################### ##### Load source functions ##### -source('/modules/Scorecards/tmp/LoadMetrics.R') -source('/modules/Scorecards/tmp/WeightedMetrics.R') -source('/modules/Scorecards/tmp/Utils.R') -source('/modules/Scorecards/tmp/SCTransform.R') -source('/modules/Scorecards/tmp/ScorecardsSingle.R') -source('/modules/Scorecards/tmp/ScorecardsMulti.R') -source('/modules/Scorecards/tmp/ScorecardsSystemDiff.R') -source('/modules/Scorecards/tmp/SCPlotScorecard.R') +source('./modules/Scorecards/tmp/LoadMetrics.R') +source('./modules/Scorecards/tmp/WeightedMetrics.R') +source('./modules/Scorecards/tmp/Utils.R') +source('./modules/Scorecards/tmp/SCTransform.R') +source('./modules/Scorecards/tmp/ScorecardsSingle.R') +source('./modules/Scorecards/tmp/ScorecardsMulti.R') +source('./modules/Scorecards/tmp/ScorecardsSystemDiff.R') +source('./modules/Scorecards/tmp/SCPlotScorecard.R') ## Define function plot_scorecards <- function(recipe) { - - ## set parameters - # input.path <- '/esarchive/scratch/nmilders/scorecards_data/to_system/cross_validation/both_cross_val/' #recipe$Run$output_dir - input.path <- recipe$Run$output_dir - output.path <- recipe$Run$output_dir - - system <- recipe$Analysis$Datasets$System$name - reference <- recipe$Analysis$Datasets$Reference$name - var <- recipe$Analysis$Variables$name - start.year <- as.numeric(recipe$Analysis$Time$hcst_start) - end.year <- as.numeric(recipe$Analysis$Time$hcst_end) - forecast.months <- recipe$Analysis$Time$ftime_min : recipe$Analysis$Time$ftime_max - - start.months <- 1:12 #recipe$Analysis$Workflow$Scorecards$start_months - - regions <- recipe$Analysis$Workflow$Scorecards$regions - for (i in names(regions)){regions[[i]] <- unlist(regions[[i]])} - - metric.aggregation <- recipe$Analysis$Workflow$Scorecards$metric_aggregation - metrics.load <- unlist(strsplit(tolower(recipe$Analysis$Workflow$Skill$metric), ", | |,")) - metrics.visualize <- unlist(strsplit(tolower(recipe$Analysis$Workflow$Scorecards$metric), ", | |,")) - table.label <- recipe$Analysis$Workflow$Scorecards$table_label - fileout.label <- recipe$Analysis$Workflow$Scorecards$fileout_label - legend.white.space <- recipe$Analysis$Workflow$Scorecards$legend_white_space - col1.width <- recipe$Analysis$Workflow$Scorecards$col1_width - col2.width <- recipe$Analysis$Workflow$Scorecards$col2_width - calculate.diff <- recipe$Analysis$Workflow$Scorecards$calculate_diff - ncores <- recipe$Analysis$ncores - - ## Load data files - loaded_metrics <- LoadMetrics(system = system, - reference = reference, - var = var, - start.year = start.year, - end.year = end.year, - metrics = metrics.load, - start.months = start.months, - forecast.months = forecast.months, - input.path = input.path) - + + ## set parameters + input.path <- recipe$Run$output_dir + output.path <- recipe$Run$output_dir + + system <- recipe$Analysis$Datasets$System$name + reference <- recipe$Analysis$Datasets$Reference$name + var <- recipe$Analysis$Variables$name + start.year <- as.numeric(recipe$Analysis$Time$hcst_start) + end.year <- as.numeric(recipe$Analysis$Time$hcst_end) + forecast.months <- recipe$Analysis$Time$ftime_min : recipe$Analysis$Time$ftime_max + + start.months <- 1:12 #recipe$Analysis$Workflow$Scorecards$start_months + + regions <- recipe$Analysis$Workflow$Scorecards$regions + for (i in names(regions)){regions[[i]] <- unlist(regions[[i]])} + + metric.aggregation <- recipe$Analysis$Workflow$Scorecards$metric_aggregation + metrics.load <- unlist(strsplit(tolower(recipe$Analysis$Workflow$Skill$metric), ", | |,")) + + ## Define skill scores in score aggregation has been requested + + if(metric.aggregation == 'score'){ + if('rps' %in% metrics.load){ + metrics.load <- c(metrics.load, 'rps_clim') + } + if('crps' %in% metrics.load){ + metrics.load <- c(metrics.load, 'crps_clim') + } + } + + metrics.visualize <- unlist(strsplit(tolower(recipe$Analysis$Workflow$Scorecards$metric), ", | |,")) + + ## Define skill scores in score aggregation has been requested + + if(metric.aggregation == 'score'){ + if('rpss' %in% metrics.visualize){ + metrics.visualize[metrics.visualize == 'rpss'] <- 'rpss_score_aggr' + } + if('crpss' %in% metrics.visualize){ + metrics.visualize[metrics.visualize == 'crpss'] <- 'crpss_score_aggr' + } + } + + table.label <- recipe$Analysis$Workflow$Scorecards$table_label + fileout.label <- recipe$Analysis$Workflow$Scorecards$fileout_label + legend.white.space <- recipe$Analysis$Workflow$Scorecards$legend_white_space + col1.width <- recipe$Analysis$Workflow$Scorecards$col1_width + col2.width <- recipe$Analysis$Workflow$Scorecards$col2_width + calculate.diff <- recipe$Analysis$Workflow$Scorecards$calculate_diff + ncores <- recipe$Analysis$ncores + + ## Load data files + loaded_metrics <- LoadMetrics(system = system, + reference = reference, + var = var, + start.year = start.year, + end.year = end.year, + metrics = metrics.load, + start.months = start.months, + forecast.months = forecast.months, + input.path = input.path) + + + if('region' %in% names(dim(loaded_metrics[[1]][[1]]))){ - if('region' %in% names(dim(loaded_metrics[[1]][[1]]))){ - - ### Convert loaded metrics to array for allready aggregated data - metrics.dim <- attributes(loaded_metrics[[1]][[1]])$metrics - forecast.months.dim <- attributes(loaded_metrics[[1]][[1]])$forecast.months - start.months.dim <- attributes(loaded_metrics[[1]][[1]])$start.months - regions.dim <- regions #list('NAO' = c(lon.min = -80, lon.max = 40, lat.min = 20, lat.max = 80)) - - aggregated_metrics <- array(dim = c(system = length(loaded_metrics), - reference = length(loaded_metrics[[1]]), - metric = length(metrics.dim), - time = length(forecast.months.dim), - sdate = length(start.months.dim), - region = length(regions.dim))) - - - for (sys in 1:length(names(loaded_metrics))){ - for (ref in 1:length(names(loaded_metrics[[sys]]))){ - aggregated_metrics[sys, ref, , , , ] <- s2dv::Reorder(data = loaded_metrics[[sys]][[ref]], order = c('metric','time','sdate','region')) - } - } - - ## Add attributes - attributes(aggregated_metrics)$metrics <- metrics.load - attributes(aggregated_metrics)$start.months <- attributes(loaded_metrics[[1]][[1]])$start.months - attributes(aggregated_metrics)$forecast.months <- attributes(loaded_metrics[[1]][[1]])$forecast.months - attributes(aggregated_metrics)$regions <- regions - attributes(aggregated_metrics)$system.name <- names(loaded_metrics) - attributes(aggregated_metrics)$reference.name <- names(loaded_metrics[[1]]) - - - } else { - ## Calculate weighted mean of spatial aggregation - aggregated_metrics <- WeightedMetrics(loaded_metrics, - regions = regions, - metric.aggregation = metric.aggregation, - ncores = ncores) - }## close if + ### Convert loaded metrics to array for allready aggregated data + metrics.dim <- attributes(loaded_metrics[[1]][[1]])$metrics + forecast.months.dim <- attributes(loaded_metrics[[1]][[1]])$forecast.months + start.months.dim <- attributes(loaded_metrics[[1]][[1]])$start.months + regions.dim <- regions #list('NAO' = c(lon.min = -80, lon.max = 40, lat.min = 20, lat.max = 80)) - - # if(var == 'nao'){ - # legend.white.space <- 3.75 - # col1.width <- 2 - # col2.width <- 1 - # } else{ - # legend.white.space <- col1.width <- col2.width <- NULL ## Use default values of function - # - # } + aggregated_metrics <- array(dim = c(system = length(loaded_metrics), + reference = length(loaded_metrics[[1]]), + metric = length(metrics.dim), + time = length(forecast.months.dim), + sdate = length(start.months.dim), + region = length(regions.dim))) - ## Define skill scores in scorec aggragtion has been requested - if(metric.aggregation == 'score'){ - if('rpss' %in% metrics.visualize){ - metrics.visualize[metrics.visualize == 'rpss'] <- 'rpss_score_aggr' - } - if('crpss' %in% metrics.visualize){ - metrics.visualize[metrics.visualize == 'crpss'] <- 'crpss_score_aggr' + for (sys in 1:length(names(loaded_metrics))){ + for (ref in 1:length(names(loaded_metrics[[sys]]))){ + aggregated_metrics[sys, ref, , , , ] <- s2dv::Reorder(data = loaded_metrics[[sys]][[ref]], order = c('metric','time','sdate','region')) } } - ## Create simple scorecard tables - ## (one system only) - ## Metrics input must be in the same order as function SC_spatial_aggregation - scorecard_single <- ScorecardsSingle(data = aggregated_metrics, - system = system, - reference = reference, - var = var, - start.year = start.year, - end.year = end.year, - start.months = start.months, - forecast.months = forecast.months, - region.names = names(regions), - metrics = metrics.visualize, - table.label = table.label, - fileout.label = fileout.label, - legend.white.space = legend.white.space, - col1.width = col1.width, - col2.width = col2.width, - output.path = output.path) - - ## Create multi system/reference scorecard tables - ## (multiple systems with one reference or one system with multiple references) - ## Metrics input must be in the same order as function SC_spatial_aggregation - if(length(system) > 1 || length(reference) > 1){ - scorecard_multi <- ScorecardsMulti(data = aggregated_metrics, - system = system, - reference = reference, - var = var, - start.year = start.year, - end.year = end.year, - start.months = start.months, - forecast.months = forecast.months, - region.names = attributes(regions)$names, - metrics = metrics.visualize, - table.label = table.label, - fileout.label = fileout.label, - output.path = output.path) - } ## close if + ## Add attributes + attributes(aggregated_metrics)$metrics <- metrics.load + attributes(aggregated_metrics)$start.months <- attributes(loaded_metrics[[1]][[1]])$start.months + attributes(aggregated_metrics)$forecast.months <- attributes(loaded_metrics[[1]][[1]])$forecast.months + attributes(aggregated_metrics)$regions <- regions + attributes(aggregated_metrics)$system.name <- names(loaded_metrics) + attributes(aggregated_metrics)$reference.name <- names(loaded_metrics[[1]]) - if(calculate.diff == TRUE){ - if(length(system) == 2 || length(reference) == 2){ - scorecard_diff <- ScorecardsSystemDiff(data = aggregated_metrics, - system = system, - reference = reference, - var = var, - start.year = start.year, - end.year = end.year, - start.months = start.months, - forecast.months = forecast.months, - region.names = attributes(regions)$names, - metrics = metrics.visualize, - table.label = table.label, - fileout.label = fileout.label, - legend.white.space = legend.white.space, - col1.width = col1.width, - col2.width = col2.width, - output.path = output.path) - } else {stop ("Difference scorecard can only be computed with two systems or two references.")} - } ## close if on calculate.diff - + } else { + ## Calculate weighted mean of spatial aggregation + aggregated_metrics <- WeightedMetrics(loaded_metrics, + regions = regions, + metric.aggregation = metric.aggregation, + ncores = ncores) + }## close if + + + # if(var == 'nao'){ + # legend.white.space <- 3.75 + # col1.width <- 2 + # col2.width <- 1 + # } else{ + # legend.white.space <- col1.width <- col2.width <- NULL ## Use default values of function + # + # } + + ## Define skill scores in score aggregation has been requested + + if(metric.aggregation == 'score'){ + if('rpss' %in% metrics.visualize){ + metrics.visualize[metrics.visualize == 'rpss'] <- 'rpss_score_aggr' + } + if('crpss' %in% metrics.visualize){ + metrics.visualize[metrics.visualize == 'crpss'] <- 'crpss_score_aggr' + } + } + + ## Create simple scorecard tables + ## (one system only) + ## Metrics input must be in the same order as function SC_spatial_aggregation + scorecard_single <- ScorecardsSingle(data = aggregated_metrics, + system = system, + reference = reference, + var = var, + start.year = start.year, + end.year = end.year, + start.months = start.months, + forecast.months = forecast.months, + region.names = names(regions), + metrics = metrics.visualize, + table.label = table.label, + fileout.label = fileout.label, + legend.white.space = legend.white.space, + col1.width = col1.width, + col2.width = col2.width, + output.path = output.path) + + ## Create multi system/reference scorecard tables + ## (multiple systems with one reference or one system with multiple references) + ## Metrics input must be in the same order as function SC_spatial_aggregation + if(length(system) > 1 || length(reference) > 1){ + scorecard_multi <- ScorecardsMulti(data = aggregated_metrics, + system = system, + reference = reference, + var = var, + start.year = start.year, + end.year = end.year, + start.months = start.months, + forecast.months = forecast.months, + region.names = attributes(regions)$names, + metrics = metrics.visualize, + table.label = table.label, + fileout.label = fileout.label, + output.path = output.path) + } ## close if + + + if(calculate.diff == TRUE){ + if(length(system) == 2 || length(reference) == 2){ + scorecard_diff <- ScorecardsSystemDiff(data = aggregated_metrics, + system = system, + reference = reference, + var = var, + start.year = start.year, + end.year = end.year, + start.months = start.months, + forecast.months = forecast.months, + region.names = attributes(regions)$names, + metrics = metrics.visualize, + table.label = table.label, + fileout.label = fileout.label, + legend.white.space = legend.white.space, + col1.width = col1.width, + col2.width = col2.width, + output.path = output.path) + } else {stop ("Difference scorecard can only be computed with two systems or two references.")} + } ## close if on calculate.diff + } - + -- GitLab From fa3a6151339f90d0a16609ee9d1c7e6a936002e5 Mon Sep 17 00:00:00 2001 From: Nadia Milders Date: Thu, 27 Jul 2023 13:36:22 +0200 Subject: [PATCH 192/388] cleaned code --- modules/Scorecards/R/plot_scorecards.R | 23 +---------------------- 1 file changed, 1 insertion(+), 22 deletions(-) diff --git a/modules/Scorecards/R/plot_scorecards.R b/modules/Scorecards/R/plot_scorecards.R index 1ceb0124..29470ef6 100644 --- a/modules/Scorecards/R/plot_scorecards.R +++ b/modules/Scorecards/R/plot_scorecards.R @@ -116,28 +116,7 @@ plot_scorecards <- function(recipe) { metric.aggregation = metric.aggregation, ncores = ncores) }## close if - - - # if(var == 'nao'){ - # legend.white.space <- 3.75 - # col1.width <- 2 - # col2.width <- 1 - # } else{ - # legend.white.space <- col1.width <- col2.width <- NULL ## Use default values of function - # - # } - - ## Define skill scores in score aggregation has been requested - - if(metric.aggregation == 'score'){ - if('rpss' %in% metrics.visualize){ - metrics.visualize[metrics.visualize == 'rpss'] <- 'rpss_score_aggr' - } - if('crpss' %in% metrics.visualize){ - metrics.visualize[metrics.visualize == 'crpss'] <- 'crpss_score_aggr' - } - } - + ## Create simple scorecard tables ## (one system only) ## Metrics input must be in the same order as function SC_spatial_aggregation -- GitLab From 42b277b87e1348f2ad42dd1b437fed764ba141b2 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Fri, 28 Jul 2023 15:07:57 +0200 Subject: [PATCH 193/388] Fix wrong line, add creating of /plots/Scorecards dir --- modules/Scorecards/R/plot_scorecards.R | 4 ++-- modules/Scorecards/execute_scorecards.R | 17 +++++++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) create mode 100644 modules/Scorecards/execute_scorecards.R diff --git a/modules/Scorecards/R/plot_scorecards.R b/modules/Scorecards/R/plot_scorecards.R index 50e23bf8..c89868a5 100644 --- a/modules/Scorecards/R/plot_scorecards.R +++ b/modules/Scorecards/R/plot_scorecards.R @@ -18,7 +18,8 @@ plot_scorecards <- function(recipe) { ## set parameters input.path <- paste0(recipe$Run$output_dir, "/outputs/Skill/") - output.path <- recipe$Run$output_dir + output.path <- paste0(recipe$Run$output_dir, "/plots/Scorecards/") + dir.create(output.path, recursive = T, showWarnings = F) system <- recipe$Analysis$Datasets$System$name reference <- recipe$Analysis$Datasets$Reference$name @@ -80,7 +81,6 @@ plot_scorecards <- function(recipe) { if('region' %in% names(dim(loaded_metrics[[1]][[1]]))){ ->>>>>>> fa3a6151339f90d0a16609ee9d1c7e6a936002e5 ### Convert loaded metrics to array for allready aggregated data metrics.dim <- attributes(loaded_metrics[[1]][[1]])$metrics diff --git a/modules/Scorecards/execute_scorecards.R b/modules/Scorecards/execute_scorecards.R new file mode 100644 index 00000000..b71d7f4f --- /dev/null +++ b/modules/Scorecards/execute_scorecards.R @@ -0,0 +1,17 @@ +source('tools/libs.R') +source('modules/Scorecards/R/plot_scorecards.R') + +args = commandArgs(trailingOnly = TRUE) +recipe_file <- args[1] +output_dir <- args[2] + +## TODO: Replace with function +# Read recipe and set outdir +recipe <- read_yaml(recipe_file) +recipe$Run$output_dir <- output_dir +recipe$Analysis$Datasets$System <- recipe$Analysis$Datasets$System[[1]] +recipe$Analysis$Datasets$Reference <- recipe$Analysis$Datasets$Reference[[1]] +recipe$Analysis$Variables <- recipe$Analysis$Variables[[1]] + +# Plot Scorecards +plot_scorecards(recipe) -- GitLab From 009dd249e4beaf215d6a9185677b5d966f8f0ee3 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Fri, 28 Jul 2023 15:38:50 +0200 Subject: [PATCH 194/388] Only run Scorecards job if Scorecards section is in the recipe --- tools/write_autosubmit_conf.R | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tools/write_autosubmit_conf.R b/tools/write_autosubmit_conf.R index f0e1088a..bcf2cfee 100644 --- a/tools/write_autosubmit_conf.R +++ b/tools/write_autosubmit_conf.R @@ -51,6 +51,9 @@ write_autosubmit_conf <- function(recipe, nchunks) { "FAILED") } jobs$verification$PROCESSORS <- recipe$Run$auto_conf$processors_per_job # ncores? + if (!("Scorecards" %in% names(recipe$Analysis$Workflow))) { + jobs$scorecards <- NULL + } # Return to original list if (auto_specs$auto_version == "4.0.0") { conf$JOBS <- jobs -- GitLab From d672b32886cf3db9d0327709d3a430657ea1641c Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Fri, 28 Jul 2023 15:39:22 +0200 Subject: [PATCH 195/388] Reorganize functions and scripts --- autosubmit/auto-scorecards.sh | 2 +- autosubmit/conf_esarchive/jobs.conf | 2 +- modules/Scorecards/Scorecards.R | 198 ++++++++++++++++++++++-- modules/Scorecards/execute_scorecards.R | 3 +- 4 files changed, 189 insertions(+), 16 deletions(-) diff --git a/autosubmit/auto-scorecards.sh b/autosubmit/auto-scorecards.sh index a1033a46..4b527372 100644 --- a/autosubmit/auto-scorecards.sh +++ b/autosubmit/auto-scorecards.sh @@ -12,4 +12,4 @@ recipe=${outdir}/logs/recipes/${recipe} source MODULES -Rscript modules/Scorecards/Scorecards.R ${recipe} ${outdir} +Rscript modules/Scorecards/execute_scorecards.R ${recipe} ${outdir} diff --git a/autosubmit/conf_esarchive/jobs.conf b/autosubmit/conf_esarchive/jobs.conf index f9d26634..c99236dd 100644 --- a/autosubmit/conf_esarchive/jobs.conf +++ b/autosubmit/conf_esarchive/jobs.conf @@ -9,6 +9,6 @@ PROCESSORS = [scorecards] FILE = autosubmit/auto-scorecards.sh WALLCLOCK = 00:10 -PLATFORM = nord3v2 +PLATFORM = nord3v2 ## Change?? PROCESSORS = 1 DEPENDENCIES = verification diff --git a/modules/Scorecards/Scorecards.R b/modules/Scorecards/Scorecards.R index 0a46f75f..6086ecb2 100644 --- a/modules/Scorecards/Scorecards.R +++ b/modules/Scorecards/Scorecards.R @@ -1,13 +1,185 @@ -source('tools/libs.R') -source('modules/Scorecards/R/plot_scorecards.R') - -args = commandArgs(trailingOnly = TRUE) -recipe_file <- args[1] -output_dir <- args[2] - -# Read recipe and set outdir -recipe <- read_yaml(recipe_file) -recipe$Run$output_dir <- output_dir -recipe$Analysis$Datasets$System <- recipe$Analysis$Datasets$System[[1]] -recipe$Analysis$Datasets$Reference <- recipe$Analysis$Datasets$Reference[[1]] -recipe$Analysis$Variables <- recipe$Analysis$Variables[[1]] +############################################################################### +##################### SCORECARDS MODULE FOR SUNSET SUITE ###################### +############################################################################### + +##### Load source functions ##### +source('modules/Scorecards/tmp/LoadMetrics.R') +source('modules/Scorecards/tmp/WeightedMetrics.R') +source('modules/Scorecards/tmp/Utils.R') +source('modules/Scorecards/tmp/SCTransform.R') +source('modules/Scorecards/tmp/ScorecardsSingle.R') +source('modules/Scorecards/tmp/ScorecardsMulti.R') +source('modules/Scorecards/tmp/ScorecardsSystemDiff.R') +source('modules/Scorecards/tmp/SCPlotScorecard.R') + + +## TODO: Change function name to 'Scorecards'? +## Define function +plot_scorecards <- function(recipe) { + + ## set parameters + input.path <- paste0(recipe$Run$output_dir, "/outputs/Skill/") + output.path <- paste0(recipe$Run$output_dir, "/plots/Scorecards/") + dir.create(output.path, recursive = T, showWarnings = F) + + system <- recipe$Analysis$Datasets$System$name + reference <- recipe$Analysis$Datasets$Reference$name + var <- recipe$Analysis$Variables$name + start.year <- as.numeric(recipe$Analysis$Time$hcst_start) + end.year <- as.numeric(recipe$Analysis$Time$hcst_end) + forecast.months <- recipe$Analysis$Time$ftime_min : recipe$Analysis$Time$ftime_max + + start.months <- 1:12 #recipe$Analysis$Workflow$Scorecards$start_months + + regions <- recipe$Analysis$Workflow$Scorecards$regions + for (i in names(regions)){regions[[i]] <- unlist(regions[[i]])} + + metric.aggregation <- recipe$Analysis$Workflow$Scorecards$metric_aggregation + metrics.load <- unlist(strsplit(tolower(recipe$Analysis$Workflow$Skill$metric), ", | |,")) + + ## Define skill scores in score aggregation has been requested + + if(metric.aggregation == 'score'){ + if('rps' %in% metrics.load){ + metrics.load <- c(metrics.load, 'rps_clim') + } + if('crps' %in% metrics.load){ + metrics.load <- c(metrics.load, 'crps_clim') + } + } + + metrics.visualize <- unlist(strsplit(tolower(recipe$Analysis$Workflow$Scorecards$metric), ", | |,")) + + ## Define skill scores in score aggregation has been requested + + if(metric.aggregation == 'score'){ + if('rpss' %in% metrics.visualize){ + metrics.visualize[metrics.visualize == 'rpss'] <- 'rpss_score_aggr' + } + if('crpss' %in% metrics.visualize){ + metrics.visualize[metrics.visualize == 'crpss'] <- 'crpss_score_aggr' + } + } + + table.label <- recipe$Analysis$Workflow$Scorecards$table_label + fileout.label <- recipe$Analysis$Workflow$Scorecards$fileout_label + legend.white.space <- recipe$Analysis$Workflow$Scorecards$legend_white_space + col1.width <- recipe$Analysis$Workflow$Scorecards$col1_width + col2.width <- recipe$Analysis$Workflow$Scorecards$col2_width + calculate.diff <- recipe$Analysis$Workflow$Scorecards$calculate_diff + ncores <- recipe$Analysis$ncores + + ## Load data files + loaded_metrics <- LoadMetrics(system = system, + reference = reference, + var = var, + start.year = start.year, + end.year = end.year, + metrics = metrics.load, + start.months = start.months, + forecast.months = forecast.months, + input.path = input.path) + + + if('region' %in% names(dim(loaded_metrics[[1]][[1]]))){ + + ### Convert loaded metrics to array for allready aggregated data + metrics.dim <- attributes(loaded_metrics[[1]][[1]])$metrics + forecast.months.dim <- attributes(loaded_metrics[[1]][[1]])$forecast.months + start.months.dim <- attributes(loaded_metrics[[1]][[1]])$start.months + regions.dim <- regions #list('NAO' = c(lon.min = -80, lon.max = 40, lat.min = 20, lat.max = 80)) + + aggregated_metrics <- array(dim = c(system = length(loaded_metrics), + reference = length(loaded_metrics[[1]]), + metric = length(metrics.dim), + time = length(forecast.months.dim), + sdate = length(start.months.dim), + region = length(regions.dim))) + + + for (sys in 1:length(names(loaded_metrics))){ + for (ref in 1:length(names(loaded_metrics[[sys]]))){ + aggregated_metrics[sys, ref, , , , ] <- s2dv::Reorder(data = loaded_metrics[[sys]][[ref]], order = c('metric','time','sdate','region')) + } + } + + ## Add attributes + attributes(aggregated_metrics)$metrics <- metrics.load + attributes(aggregated_metrics)$start.months <- attributes(loaded_metrics[[1]][[1]])$start.months + attributes(aggregated_metrics)$forecast.months <- attributes(loaded_metrics[[1]][[1]])$forecast.months + attributes(aggregated_metrics)$regions <- regions + attributes(aggregated_metrics)$system.name <- names(loaded_metrics) + attributes(aggregated_metrics)$reference.name <- names(loaded_metrics[[1]]) + + + } else { + ## Calculate weighted mean of spatial aggregation + aggregated_metrics <- WeightedMetrics(loaded_metrics, + regions = regions, + metric.aggregation = metric.aggregation, + ncores = ncores) + }## close if + + ## Create simple scorecard tables + ## (one system only) + ## Metrics input must be in the same order as function SC_spatial_aggregation + scorecard_single <- ScorecardsSingle(data = aggregated_metrics, + system = system, + reference = reference, + var = var, + start.year = start.year, + end.year = end.year, + start.months = start.months, + forecast.months = forecast.months, + region.names = names(regions), + metrics = metrics.visualize, + table.label = table.label, + fileout.label = fileout.label, + legend.white.space = legend.white.space, + col1.width = col1.width, + col2.width = col2.width, + output.path = output.path) + + ## Create multi system/reference scorecard tables + ## (multiple systems with one reference or one system with multiple references) + ## Metrics input must be in the same order as function SC_spatial_aggregation + if(length(system) > 1 || length(reference) > 1){ + scorecard_multi <- ScorecardsMulti(data = aggregated_metrics, + system = system, + reference = reference, + var = var, + start.year = start.year, + end.year = end.year, + start.months = start.months, + forecast.months = forecast.months, + region.names = attributes(regions)$names, + metrics = metrics.visualize, + table.label = table.label, + fileout.label = fileout.label, + output.path = output.path) + } ## close if + + + if(calculate.diff == TRUE){ + if(length(system) == 2 || length(reference) == 2){ + scorecard_diff <- ScorecardsSystemDiff(data = aggregated_metrics, + system = system, + reference = reference, + var = var, + start.year = start.year, + end.year = end.year, + start.months = start.months, + forecast.months = forecast.months, + region.names = attributes(regions)$names, + metrics = metrics.visualize, + table.label = table.label, + fileout.label = fileout.label, + legend.white.space = legend.white.space, + col1.width = col1.width, + col2.width = col2.width, + output.path = output.path) + } else {stop ("Difference scorecard can only be computed with two systems or two references.")} + } ## close if on calculate.diff + +} + diff --git a/modules/Scorecards/execute_scorecards.R b/modules/Scorecards/execute_scorecards.R index b71d7f4f..95bf4bb9 100644 --- a/modules/Scorecards/execute_scorecards.R +++ b/modules/Scorecards/execute_scorecards.R @@ -1,5 +1,5 @@ source('tools/libs.R') -source('modules/Scorecards/R/plot_scorecards.R') +source('modules/Scorecards/Scorecards.R') args = commandArgs(trailingOnly = TRUE) recipe_file <- args[1] @@ -15,3 +15,4 @@ recipe$Analysis$Variables <- recipe$Analysis$Variables[[1]] # Plot Scorecards plot_scorecards(recipe) +print("##### SCORECARDS SAVED TO THE OUTPUT DIRECTORY #####") -- GitLab From c1a73fd3e7d7f883a48a635301b93252beb15083 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Fri, 28 Jul 2023 15:39:49 +0200 Subject: [PATCH 196/388] Uncomment scorecards --- recipes/recipe_scorecards.yml | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/recipes/recipe_scorecards.yml b/recipes/recipe_scorecards.yml index a50fd572..88b63b6e 100644 --- a/recipes/recipe_scorecards.yml +++ b/recipes/recipe_scorecards.yml @@ -63,20 +63,20 @@ Analysis: plots: skill_metrics Indicators: index: no # ? - # Scorecards: - # regions: - # Extra-tropical NH: {lon.min: 0, lon.max: 360, lat.min: 30, lat.max: 90} - # Tropics: {lon.min: 0, lon.max: 360, lat.min: -30, lat.max: 30} - # Extra-tropical SH : {lon.min: 0, lon.max: 360, lat.min: -30, lat.max: -90} - # start_months: NULL - # metric: mean_bias enscorr rpss crpss enssprerr - # metric_aggregation: 'score' - # table_label: NULL - # fileout_label: NULL - # col1_width: NULL - # col2_width: NULL - # calculate_diff: FALSE - # #output_path: /esarchive/scratch/nmilders/scorecards_images/testing + Scorecards: + regions: + Extra-tropical NH: {lon.min: 0, lon.max: 360, lat.min: 30, lat.max: 90} + Tropics: {lon.min: 0, lon.max: 360, lat.min: -30, lat.max: 30} + Extra-tropical SH : {lon.min: 0, lon.max: 360, lat.min: -30, lat.max: -90} + start_months: NULL + metric: mean_bias enscorr rpss crpss enssprerr + metric_aggregation: 'score' + table_label: NULL + fileout_label: NULL + col1_width: NULL + col2_width: NULL + calculate_diff: FALSE + #output_path: /esarchive/scratch/nmilders/scorecards_images/testing ncores: 7 remove_NAs: no # bool, don't split Output_format: Scorecards # string, don't split -- GitLab From e8aaefad33dcf5e6c6fc74407a9859d86597dfbb Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Fri, 28 Jul 2023 17:18:23 +0200 Subject: [PATCH 197/388] Revise checks and logic (WIP) --- modules/Visualization/Visualization.R | 82 +++++++++++++-------------- tools/check_recipe.R | 25 +++++++- 2 files changed, 61 insertions(+), 46 deletions(-) diff --git a/modules/Visualization/Visualization.R b/modules/Visualization/Visualization.R index f390ee04..ea561f48 100644 --- a/modules/Visualization/Visualization.R +++ b/modules/Visualization/Visualization.R @@ -66,58 +66,53 @@ plot_data <- function(recipe, # Plot Most Likely Terciles if ("most_likely_terciles" %in% plots) { if ((!is.null(probabilities)) && (!is.null(data$fcst))) { -# mask: yes/no/both -browser() - if (is.null(recipe$Analysis$Workflow$Visualization$mask_terciles)) { - recipe$Analysis$Workflow$Visualization$mask_terciles <- 'no' - } - if (is.null(recipe$Analysis$Workflow$Visualization$dots)) { - recipe$Analysis$Workflow$Visualization$dots <- 'no' - } - if (recipe$Analysis$Workflow$Visualization$mask_terciles %in% - c('both', 'no') | - recipe$Analysis$Workflow$Visualization$dots %in% c('both', 'no')) { + # Plots without masked terciles/dots + if ((recipe$Analysis$Workflow$Visualization$mask_terciles + %in% c('both', FALSE)) || + (recipe$Analysis$Workflow$Visualization$dots + %in% c('both', FALSE))) { plot_most_likely_terciles(recipe, data$fcst, - probabilities, mask = NULL, + probabilities, + mask = NULL, dots = NULL, outdir) } + # Plots with masked terciles if (recipe$Analysis$Workflow$Visualization$mask_terciles %in% - c('both', 'yes')) { - if (!is.null(skill_metrics)) { - if ('rpss' %in% names(skill_metrics)) { - plot_most_likely_terciles(recipe, data$fcst, - probabilities, mask = skill_metrics$rpss, - dots = NULL, outdir) - } else { - error(recipe$Run$logger, - paste0("For the most likely terciles plot, rpss metrics ", - "need to be provided to be masked")) - } + c('both', TRUE)) { + if (is.null(skill_metrics)) { + error(recipe$Run$logger, + paste0("For the most likely terciles plot, skill_metrics ", + "need to be provided to be masked.")) + } else if (!('rpss' %in% names(skill_metrics))) { + error(recipe$Run$logger, + paste0("For the most likely terciles plot, rpss metric ", + "need to be provided to be masked")) } else { - error(recipe$Run$logger, - paste0("For the most likely terciles plot, skill_metrics ", - "need to be provided to be masked")) - } + plot_most_likely_terciles(recipe, data$fcst, + probabilities, + mask = skill_metrics$rpss, + dots = NULL, + outdir) + } } - if (recipe$Analysis$Workflow$Visualization$dots %in% c('both', 'yes')) { - if (!is.null(skill_metrics)) { - if ('rpss' %in% names(skill_metrics)) { - plot_most_likely_terciles(recipe, data$fcst, - probabilities, mask = NULL, - dots = skill_metrics$rpss, - outdir) - } else { - error(recipe$Run$logger, - paste0("For the most likely terciles plot, rpss metrics ", - "need to be provided to be dots")) - } + # Plots with dotted terciles + if (recipe$Analysis$Workflow$Visualization$dots %in% c('both', TRUE)) { + if (is.null(skill_metrics)) { + error(recipe$Run$logger, + paste0("For the most likely terciles plot, skill_metrics ", + "need to be provided for the dots")) + } else if (!('rpss' %in% names(skill_metrics))) { + error(recipe$Run$logger, + paste0("For the most likely terciles plot, rpss metric ", + "needs to be provided for the dots")) } else { - error(recipe$Run$logger, - paste0("For the most likely terciles plot, skill_metrics ", - "need to be provided to be dots")) + plot_most_likely_terciles(recipe, data$fcst, + probabilities, + mask = NULL, + dots = skill_metrics$rpss, + outdir) } - } } else { error(recipe$Run$logger, @@ -126,4 +121,3 @@ browser() } } } - diff --git a/tools/check_recipe.R b/tools/check_recipe.R index c1053534..9e203716 100644 --- a/tools/check_recipe.R +++ b/tools/check_recipe.R @@ -403,8 +403,8 @@ check_recipe <- function(recipe) { if ((is.null(recipe$Analysis$Workflow$Visualization$multi_panel)) || (!is.logical(recipe$Analysis$Workflow$Visualization$multi_panel))) { error(recipe$Run$logger, - paste0("The 'multi_panel' element must be defined under ", - "Visualization, the options are 'yes' or 'no'.")) + paste0("The 'multi_panel' element is not defined under ", + "Visualization, setting it to 'no' by default.")) error_status <- T } # Check projection @@ -416,6 +416,27 @@ check_recipe <- function(recipe) { recipe$Analysis$Workflow$Visualization$projection <- "cylindrical_equidistant" } ## TODO: Add significance? + if ("most_likely_terciles" %in% plots) { + if (is.null(recipe$Analysis$Workflow$Visualization$mask_terciles)) { + warn(recipe$Run$logger, + paste0("Visualization:mask_terciles not set, setting it to", + "default value: 'no/False'.")) + recipe$Analysis$Workflow$Visualization$mask_terciles <- FALSE # 'no' + } else if ((!recipe$Analysis$Workflow$Visualization$mask_terciles) %in% + c(TRUE, FALSE, "both")) { + error(recipe$Run$logger, + paste0("Parameter Visualization:mask_terciles must be one of: ", + "yes/no, 'both'")) + error_status <- T + } + if (is.null(recipe$Analysis$Workflow$Visualization$dots)) { + recipe$Analysis$Workflow$Visualization$dots <- FALSE + warn(recipe$Run$logger, + paste0("Visualization:dots not set, setting it to default value:", + " 'no/False'.")) + recipe$Analysis$Workflow$Visualization$dots <- FALSE + } + } } # --------------------------------------------------------------------- -- GitLab From 2157419a88fd11831468a7e382e43e92953da4a6 Mon Sep 17 00:00:00 2001 From: nperez Date: Fri, 28 Jul 2023 17:40:43 +0200 Subject: [PATCH 198/388] First approach --- modules/Units/R/transform_units_preasure.R | 2 + .../Units/R/transform_units_precipitation.R | 18 ++++++++ modules/Units/R/transform_units_temperature.R | 10 +++++ modules/Units/R/units_transform.R | 25 +++++++++++ modules/Units/Units.R | 45 +++++++++++++++++++ 5 files changed, 100 insertions(+) create mode 100644 modules/Units/R/transform_units_preasure.R create mode 100644 modules/Units/R/transform_units_precipitation.R create mode 100644 modules/Units/R/transform_units_temperature.R create mode 100644 modules/Units/R/units_transform.R create mode 100644 modules/Units/Units.R diff --git a/modules/Units/R/transform_units_preasure.R b/modules/Units/R/transform_units_preasure.R new file mode 100644 index 00000000..30694114 --- /dev/null +++ b/modules/Units/R/transform_units_preasure.R @@ -0,0 +1,2 @@ +transform_units_preasure <- function(data, data, original_units, new_units){ +} diff --git a/modules/Units/R/transform_units_precipitation.R b/modules/Units/R/transform_units_precipitation.R new file mode 100644 index 00000000..81e900b0 --- /dev/null +++ b/modules/Units/R/transform_units_precipitation.R @@ -0,0 +1,18 @@ +transform_units_precipitation <- function(data, original_units, new_units){ + if (!substr(original_units, 1, 2) == substr(new_units, 1, 2)){ + if (substr(original_units, 1, 2) == 'mm' & (substr(new_units, 1, 2) == 'm ' | substr(new_units, 1, 2) == 'm/')){ + data <- data / 1000 + } else if ((substr(original_units, 1, 2) == 'm ' | substr(original_units, 1, 2) == 'm/') & substr(new_units, 1, 2) == 'mm'){ + data <- data * 1000 + } else {stop(paste0("not prepared to transform from ", original_units, " to ", new_units))} + } + if (('s' %in% strsplit(original_units, " |/|per") | 'second' %in% strsplit(original_units, " |/|per")) & 'month' %in% strsplit(new_units, " |/|per")){ + data <- data * 3600 * 24 * 365.25/12 + } else if ('day' %in% strsplit(original_units, " |/|per")[[1]] & 'month' %in% strsplit(new_units, " |/|per")[[1]]){ + data <- data * 365.25/12 + } else {stop(paste0("not prepared to transform from ", original_units, " to ", new_units))} + + return(data) +} + + diff --git a/modules/Units/R/transform_units_temperature.R b/modules/Units/R/transform_units_temperature.R new file mode 100644 index 00000000..859ae479 --- /dev/null +++ b/modules/Units/R/transform_units_temperature.R @@ -0,0 +1,10 @@ +transform_units_temperature <- function(data, original_units, new_units){ + if (original_units == 'C' & new_units == 'K'){ + data <- data + 273.15 + } + if (original_units == 'K' & new_units == 'C'){ + data <- data - 273.15 + } + return(data) +} + diff --git a/modules/Units/R/units_transform.R b/modules/Units/R/units_transform.R new file mode 100644 index 00000000..088d3d0b --- /dev/null +++ b/modules/Units/R/units_transform.R @@ -0,0 +1,25 @@ +# data is a s2dv_cube object +# units as character +units_transform <- function(data, orig_units, user_units) { + if (orig_units %in% c("C", "k")) { + if (user_units %in% c("C", "k")) { + trans <- transform_units_temperature(data, orig_units, user_units) + } else { + stop("Transformation temperature units not available.") + } if else (orig_units %in% c("ms-1", "kgm-2s-1", "mm", "m")) { + if (user_units %in% c("ms-1", "kgm-2s-1", "mm", "m")) { + trans <- transform_units_precipitation(data, orig_units, user_units) + } else { + stop("Transformation precipitation units not available.") + } + } if else (orig_units %in% c("pa", "hpa", "mb")) { + if (user_units %in% c("ms-1", "kgm-2s-1", "mm", "m")) { + trans <- transform_units_pressure(data, orig_units, user_units) + } else { + stop("Transformation precipitation units not available.") + } + } else { + stop("Transformation unknown.") + } +} + diff --git a/modules/Units/Units.R b/modules/Units/Units.R new file mode 100644 index 00000000..15a7e628 --- /dev/null +++ b/modules/Units/Units.R @@ -0,0 +1,45 @@ +# This function aims to convert units +## +source("modules/R/units_transform.R") +source("modules/R/transform_units_temperature.R") +source("modules/R/transform_units_precipitation.R") +source("modules/R/transform_units_preasure.R") +Units <- function(recipe, data) { + # from recipe read the user defined units + # from data the original units + # deaccumulate option for CDS accumulated variables? + ## Do we need to convert other than ECVs? + user_units <- recipe$Analysis$Variables$units + var_names <- lapply(data, function(x) {x$attrs$Variable$varName}) + orig_units <- lapply(1:length(data), function(x) { + data[[x]]$attrs$Variable$metadata[[var_names[[x]]]]$units}) + # remove spaces, "**", "*" and "per" from units + user_units <- tolower(user_units) + user_units <- gsub(" ", "", user_units) + user_units <- gsub("**", "", user_units) + user_units <- gsub("*", "", user_units) + orig_units <- lapply(orig_units, function(x) { + x <- tolower(x) + x <- gsub(" ", "", x) + x <- gsub("**", "", x) + x <- gsub("*", "", x)}) + # if "/" appears substitute by -1 in at the end of next unit. How to know? + + if (all(orig_units == user_units)) { + # no transformation needed + res <- data + } else { + obj2trans <- which(orig_units != user_units) + res <- lapply(1:length(data), function(x) { + if (x %in% obj2trans) { + result <- units_transform(data[x], + orig_units = orig_units[x], + user_units = user_units) + } else { + result <- data[x] + } + return(result) + }) + } + return(res) +} -- GitLab From 581782a9e34a783f9b0e3a13c866bc5e7ae04227 Mon Sep 17 00:00:00 2001 From: nperez Date: Fri, 28 Jul 2023 17:41:25 +0200 Subject: [PATCH 199/388] example --- exec_units.R | 40 ++++++++++++++++++++++ recipe_tas_seasonal_units.yml | 63 +++++++++++++++++++++++++++++++++++ 2 files changed, 103 insertions(+) create mode 100644 exec_units.R create mode 100644 recipe_tas_seasonal_units.yml diff --git a/exec_units.R b/exec_units.R new file mode 100644 index 00000000..bc242e78 --- /dev/null +++ b/exec_units.R @@ -0,0 +1,40 @@ +rm(list=ls()) +gc() +setwd("/esarchive/scratch/nperez/git/auto-s2s") + +source("modules/Loading/Loading.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("tools/prepare_outputs.R") + +# Read recipe +#args = commandArgs(trailingOnly = TRUE) +#recipe_file <- args[1] +#recipe <- read_atomic_recipe(recipe_file) +## to test a single recipe: +recipe_file <- "recipe_tas_seasonal_units.yml" +recipe <- prepare_outputs(recipe_file) + +# Load datasets +data <- load_datasets(recipe) +# Units transformation +source("modules/Units/Units.R") +test <- Units(recipe, data) +# Calibrate datasets +data <- calibrate_datasets(recipe, data) +# Compute skill metrics +skill_metrics <- compute_skill_metrics(recipe, data) +# Compute percentiles and probability bins +probabilities <- compute_probabilities(recipe, data) +# Export all data to netCDF +## TODO: Fix plotting +# save_data(recipe, data, skill_metrics, probabilities) +# Plot data +plot_data(recipe, data, skill_metrics, probabilities, significance = T) + + + + diff --git a/recipe_tas_seasonal_units.yml b/recipe_tas_seasonal_units.yml new file mode 100644 index 00000000..4c1eccc1 --- /dev/null +++ b/recipe_tas_seasonal_units.yml @@ -0,0 +1,63 @@ +Description: + Author: nperez + Info: ECVs Oper ESS ECMWF SEAS5 Seasonal Forecast recipe (monthly mean, tas) + +Analysis: + Horizon: seasonal # Mandatory, str: either subseasonal, seasonal, or decadal + Variables: + name: tas + freq: monthly_mean + units: C + Datasets: + System: + name: ECMWF-SEAS5.1 # Mandatory, str: system5c3s system21_m1 system35c3s + Multimodel: no # Mandatory, bool: Either yes/true or no/false + Reference: + name: ERA5 # Mandatory, str: Reference codename. See docu. + Time: + sdate: '0601' ## MMDD + fcst_year: '2023' # Optional, int: Forecast year 'YYYY' + hcst_start: '20133' # Mandatory, int: Hindcast start year 'YYYY' + hcst_end: '2016' # Mandatory, int: Hindcast end year 'YYYY' + ftime_min: 1 # Mandatory, int: First leadtime time step in months + ftime_max: 6 # Mandatory, int: Last leadtime time step in months + Region: + latmin: 20 # Mandatory, int: minimum latitude + latmax: 80 # Mandatory, int: maximum latitude + lonmin: -20 # Mandatory, int: minimum longitude + lonmax: 40 # Mandatory, int: maximum longitude + Regrid: + method: bilinear # Mandatory, str: Interpolation method. See docu. + type: "to_system" + #type: /esarchive/scratch/nmilders/gitlab/git_clones/auto-s2s/conf/grid_description.txt #'r360x180' # Mandatory, str: to_system, to_reference, or CDO-accepted grid. + Workflow: + Anomalies: + compute: no + cross_validation: no + save: none + Calibration: + method: evmos # Mandatory, str: Calibration method. See docu. + cross_validation: yes + save: none + Skill: + metric: mean_bias EnsCorr rpss crpss bss10 bss90 + save: 'all' + cross_validation: yes + Probabilities: + percentiles: [[1/3, 2/3], [1/10, 9/10]] # frac: Quantile thresholds. + save: 'all' + Indicators: + index: no + Visualization: + plots: skill_metrics forecast_ensemble_mean most_likely_terciles + multi_panel: no + mask_terciles: both + ncores: 4 # Optional, int: number of cores, defaults to 1 + remove_NAs: # Optional, bool: Whether NAs are removed, defaults to FALSE + Output_format: scorecards + logo: yes +Run: + Loglevel: INFO + Terminal: TRUE + output_dir: /esarchive/scratch/nperez/cs_oper/ + code_dir: /esarchive/scratch/nperez/git/s2s-suite/ -- GitLab From 6adce342c76835c12817e2e7a6322734a7881a1f Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Mon, 31 Jul 2023 10:01:57 +0200 Subject: [PATCH 200/388] Reorganize logic --- modules/Visualization/Visualization.R | 7 +++++++ tools/check_recipe.R | 28 +++++++++++++-------------- 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/modules/Visualization/Visualization.R b/modules/Visualization/Visualization.R index ea561f48..d3a35ddf 100644 --- a/modules/Visualization/Visualization.R +++ b/modules/Visualization/Visualization.R @@ -66,6 +66,13 @@ plot_data <- function(recipe, # Plot Most Likely Terciles if ("most_likely_terciles" %in% plots) { if ((!is.null(probabilities)) && (!is.null(data$fcst))) { + # Assign default parameters + if (is.null(recipe$Analysis$Workflow$Visualization$mask_terciles)) { + recipe$Analysis$Workflow$Visualization$mask_terciles <- FALSE + } + if (is.null(recipe$Analysis$Workflow$Visualization$dots)) { + recipe$Analysis$Workflow$Visualization$dots <- FALSE + } # Plots without masked terciles/dots if ((recipe$Analysis$Workflow$Visualization$mask_terciles %in% c('both', FALSE)) || diff --git a/tools/check_recipe.R b/tools/check_recipe.R index 9e203716..29131edc 100644 --- a/tools/check_recipe.R +++ b/tools/check_recipe.R @@ -400,11 +400,12 @@ check_recipe <- function(recipe) { } } # Check multi_panel option + ## TODO: Multi-panel if ((is.null(recipe$Analysis$Workflow$Visualization$multi_panel)) || (!is.logical(recipe$Analysis$Workflow$Visualization$multi_panel))) { error(recipe$Run$logger, paste0("The 'multi_panel' element is not defined under ", - "Visualization, setting it to 'no' by default.")) + "Visualization.")) error_status <- T } # Check projection @@ -412,29 +413,29 @@ check_recipe <- function(recipe) { warn(recipe$Run$logger, paste0("No projection has been specified for the plots, the ", "default projection is cylindrical equidistant.")) - ## TODO: This will not work - recipe$Analysis$Workflow$Visualization$projection <- "cylindrical_equidistant" } ## TODO: Add significance? if ("most_likely_terciles" %in% plots) { if (is.null(recipe$Analysis$Workflow$Visualization$mask_terciles)) { warn(recipe$Run$logger, - paste0("Visualization:mask_terciles not set, setting it to", - "default value: 'no/False'.")) - recipe$Analysis$Workflow$Visualization$mask_terciles <- FALSE # 'no' - } else if ((!recipe$Analysis$Workflow$Visualization$mask_terciles) %in% - c(TRUE, FALSE, "both")) { + paste0("Visualization:mask_terciles not set for tercile plots,", + " the default setting is: 'no/False'.")) + } else if (!(recipe$Analysis$Workflow$Visualization$mask_terciles %in% + c(TRUE, FALSE, "both"))) { error(recipe$Run$logger, paste0("Parameter Visualization:mask_terciles must be one of: ", - "yes/no, 'both'")) + "yes/True, no/False, 'both'")) error_status <- T } if (is.null(recipe$Analysis$Workflow$Visualization$dots)) { - recipe$Analysis$Workflow$Visualization$dots <- FALSE warn(recipe$Run$logger, - paste0("Visualization:dots not set, setting it to default value:", - " 'no/False'.")) - recipe$Analysis$Workflow$Visualization$dots <- FALSE + paste0("Visualization:dots not set for tercile plots, the default", + " setting is: 'no/False'.")) + } else if (!(recipe$Analysis$Workflow$Visualization$dots %in% + c(TRUE, FALSE, "both"))) { + error(recipe$Run$logger, + paste0("Parameter Visualization:plots must be one of: ", + "yes/True, no/False, 'both'")) } } } @@ -571,6 +572,5 @@ check_recipe <- function(recipe) { " startup.log file.") } else { info(recipe$Run$logger, "##### RECIPE CHECK SUCCESSFULL #####") - # return(append(nverifications, fcst.sdate)) } } -- GitLab From 06cabfbb2ccd7a8d94b8aa8c730f8cb53d2b3e5b Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Mon, 31 Jul 2023 11:25:14 +0200 Subject: [PATCH 201/388] Set multi_panel default to False --- modules/Visualization/Visualization.R | 5 ++++- tools/check_recipe.R | 13 ++++++++----- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/modules/Visualization/Visualization.R b/modules/Visualization/Visualization.R index d3a35ddf..5fb3b946 100644 --- a/modules/Visualization/Visualization.R +++ b/modules/Visualization/Visualization.R @@ -39,7 +39,10 @@ plot_data <- function(recipe, so there is no data that can be plotted.") stop() } - + # Set default single-panel plots if not specified + if (is.null(recipe$Analysis$Workflow$Visualization$multi_panel)) { + recipe$Analysis$Workflow$Visualization$multi_panel <- FALSE + } # Plot skill metrics if ("skill_metrics" %in% plots) { if (!is.null(skill_metrics)) { diff --git a/tools/check_recipe.R b/tools/check_recipe.R index 29131edc..cfac94e3 100644 --- a/tools/check_recipe.R +++ b/tools/check_recipe.R @@ -401,17 +401,20 @@ check_recipe <- function(recipe) { } # Check multi_panel option ## TODO: Multi-panel - if ((is.null(recipe$Analysis$Workflow$Visualization$multi_panel)) || - (!is.logical(recipe$Analysis$Workflow$Visualization$multi_panel))) { + if (is.null(recipe$Analysis$Workflow$Visualization$multi_panel)) { + warn(recipe$Run$logger, + paste0("Visualization:multi_panel not specified for the plots, the", + " default is 'no/False'.")) + } else if (!is.logical(recipe$Analysis$Workflow$Visualization$multi_panel)) { error(recipe$Run$logger, - paste0("The 'multi_panel' element is not defined under ", - "Visualization.")) + paste0("Parameter 'Visualization:multi_panel' must be a logical ", + "value: either 'yes/True' or 'no/False'")) error_status <- T } # Check projection if (is.null(recipe$Analysis$Workflow$Visualization$projection)) { warn(recipe$Run$logger, - paste0("No projection has been specified for the plots, the ", + paste0("Visualization:projection not specified for the plots, the ", "default projection is cylindrical equidistant.")) } ## TODO: Add significance? -- GitLab From 4248c47198a9fc30bd90b7722a720e4046a58657 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Mon, 31 Jul 2023 12:32:40 +0200 Subject: [PATCH 202/388] Adapt changes in most_likely_terciles to multivariable case --- .../R/plot_most_likely_terciles_map.R | 66 +++++++++++-------- .../atomic_recipes/recipe_test_multivar.yml | 6 ++ 2 files changed, 43 insertions(+), 29 deletions(-) diff --git a/modules/Visualization/R/plot_most_likely_terciles_map.R b/modules/Visualization/R/plot_most_likely_terciles_map.R index bcf47f9f..4952a90e 100644 --- a/modules/Visualization/R/plot_most_likely_terciles_map.R +++ b/modules/Visualization/R/plot_most_likely_terciles_map.R @@ -1,3 +1,8 @@ +source("modules/Visualization/R/tmp/PlotMostLikelyQuantileMap.R") +source("modules/Visualization/R/tmp/PlotCombinedMap.R") +source("modules/Visualization/R/tmp/GradientCatsColorBar.R") + + ## TODO: Change name plot_most_likely_terciles <- function(recipe, fcst, @@ -5,22 +10,6 @@ plot_most_likely_terciles <- function(recipe, mask, dots, outdir) { - source("modules/Visualization/R/tmp/PlotMostLikelyQuantileMap.R") - source("modules/Visualization/R/tmp/PlotCombinedMap.R") - source("modules/Visualization/R/tmp/GradientCatsColorBar.R") - if (recipe$Analysis$Variables$name %in% c('prlr')) { # add other - cols <- list(c("#FFC473", #FFAB38", - "darkorange1"), - c("#b5b5b5", "black"), - c("#A0E5E4",#41CBC9", - "deepskyblue3")) - } else { - cols <- list(c("#A0E5E4",#33BFD1", - "deepskyblue3"), - c("#b5b5b5", "black"), - c("#FFB19A", #FF764D", - "indianred3")) - } ## TODO: Add 'anomaly' to plot title # Abort if frequency is daily @@ -57,32 +46,51 @@ plot_most_likely_terciles <- function(recipe, for (var in 1:fcst$dims[['var']]) { variable <- fcst$attrs$Variable$varName[[var]] var_long_name <- fcst$attrs$Variable$metadata[[variable]]$long_name + # Choose colors depending on the variable + if (variable %in% c('prlr')) { ## add others + cols <- list(c("#FFC473", #FFAB38", + "darkorange1"), + c("#b5b5b5", "black"), + c("#A0E5E4",#41CBC9", + "deepskyblue3")) + } else { + cols <- list(c("#A0E5E4",#33BFD1", + "deepskyblue3"), + c("#b5b5b5", "black"), + c("#FFB19A", #FF764D", + "indianred3")) + } var_probs <- ClimProjDiags::Subset(probs_fcst, along = c("var"), indices = var, drop = 'selected') - var_probs <- Reorder(var_probs, c("syear", "time", "bin", "longitude", "latitude")) for (i_syear in start_date) { # Define name of output file and titles i_var_probs <- var_probs[which(start_date == i_syear), , , , ] outfile <- paste0(outdir[[var]], "forecast_most_likely_tercile-", i_syear) + # Mask if (!is.null(mask)) { outfile <- paste0(outfile, "_rpssmask") - mask <- drop(mask) - dim_mask <- dim(mask) - mask <- as.numeric(mask <= 0) - dim(mask) <- dim_mask - + var_mask <- ClimProjDiags::Subset(mask, + along = c("var"), + indices = var, + drop = 'selected') + dim_mask <- dim(var_mask) + var_mask <- as.numeric(var_mask <= 0) + dim(var_mask) <- dim_mask } + # Dots if (!is.null(dots)) { outfile <- paste0(outfile, "_rpssdots") - dots <- drop(dots) - dim_dots <- dim(dots) - dots <- as.numeric(dots <= 0) - dim(dots) <- dim_dots - + var_dots <- ClimProjDiags::Subset(dots, + along = c("var"), + indices = var, + drop = 'selected') + dim_dots <- dim(var_dots) + var_dots <- as.numeric(var_dots <= 0) + dim(var_dots) <- dim_dots } toptitle <- paste0(system_name, " / ", str_to_title(var_long_name), "\n", "Most Likely Tercile / Initialization: ", @@ -127,13 +135,13 @@ plot_most_likely_terciles <- function(recipe, forecast_time <- sprintf("%02d", forecast_time) # Get mask subset if (!is.null(mask)) { - mask_i <- Subset(mask, along = 'time', indices = i, drop = TRUE) + mask_i <- Subset(var_mask, along = 'time', indices = i, drop = TRUE) } else { mask_i <- NULL } # Get dots subset if (!is.null(dots)) { - dots_i <- Subset(dots, along = 'time', indices = i, drop = TRUE) + dots_i <- Subset(var_dots, along = 'time', indices = i, drop = TRUE) } else { dots_i <- NULL } diff --git a/recipes/atomic_recipes/recipe_test_multivar.yml b/recipes/atomic_recipes/recipe_test_multivar.yml index 94e41223..8eb3e962 100644 --- a/recipes/atomic_recipes/recipe_test_multivar.yml +++ b/recipes/atomic_recipes/recipe_test_multivar.yml @@ -41,6 +41,12 @@ Analysis: Probabilities: percentiles: [[1/3, 2/3], [1/10, 9/10]] save: 'all' + Visualization: + plots: most_likely_terciles + multi_panel: no + projection: cylindrical_equidistant + dots: both + mask_terciles: both Indicators: index: no ncores: 7 -- GitLab From 759a0ea7c29f89850cc3c9f20547d498b5e66d70 Mon Sep 17 00:00:00 2001 From: nperez Date: Mon, 31 Jul 2023 13:25:06 +0200 Subject: [PATCH 203/388] ongoing precipitation units --- exec_units.R | 4 +- modules/Loading/Loading.R | 40 ++++++------ modules/Units/R/transform_units_preasure.R | 3 +- .../Units/R/transform_units_precipitation.R | 62 ++++++++++++++---- modules/Units/R/transform_units_temperature.R | 15 +++-- modules/Units/R/units_transform.R | 22 ++++--- modules/Units/Units.R | 26 ++++---- recipe_prlr_seasonal_units.yml | 63 +++++++++++++++++++ recipe_tas_seasonal_units.yml | 10 +-- 9 files changed, 179 insertions(+), 66 deletions(-) create mode 100644 recipe_prlr_seasonal_units.yml diff --git a/exec_units.R b/exec_units.R index bc242e78..09d6e711 100644 --- a/exec_units.R +++ b/exec_units.R @@ -15,7 +15,9 @@ source("tools/prepare_outputs.R") #recipe_file <- args[1] #recipe <- read_atomic_recipe(recipe_file) ## to test a single recipe: -recipe_file <- "recipe_tas_seasonal_units.yml" + # recipe_file <- "recipe_tas_seasonal_units.yml" + # recipe_file <- "recipe_prlr_seasonal_units.yml" + recipe <- prepare_outputs(recipe_file) # Load datasets diff --git a/modules/Loading/Loading.R b/modules/Loading/Loading.R index d945d5af..8cc46dc7 100644 --- a/modules/Loading/Loading.R +++ b/modules/Loading/Loading.R @@ -365,26 +365,26 @@ load_datasets <- function(recipe) { # Convert prlr from m/s to mm/day ## TODO: Make a unit conversion function - if (variable[[var_idx]] == "prlr") { - # Verify that the units are m/s and the same in obs and hcst - if (((obs$attrs$Variable$metadata[[var_name]]$units == "m s-1") || - (obs$attrs$Variable$metadata[[var_name]]$units == "m s**-1")) && - ((hcst$attrs$Variable$metadata[[var_name]]$units == "m s-1") || - (hcst$attrs$Variable$metadata[[var_name]]$units == "m s**-1"))) { - info(recipe$Run$logger, "Converting precipitation from m/s to mm/day.") - obs$data[, var_idx, , , , , , , ] <- - obs$data[, var_idx, , , , , , , ]*86400*1000 - obs$attrs$Variable$metadata[[var_name]]$units <- "mm/day" - hcst$data[, var_idx, , , , , , , ] <- - hcst$data[, var_idx, , , , , , , ]*86400*1000 - hcst$attrs$Variable$metadata[[var_name]]$units <- "mm/day" - if (!is.null(fcst)) { - fcst$data[, var_idx, , , , , , , ] <- - fcst$data[, var_idx, , , , , , , ]*86400*1000 - fcst$attrs$Variable$metadata[[var_name]]$units <- "mm/day" - } - } - } +# if (variable[[var_idx]] == "prlr") { +# # Verify that the units are m/s and the same in obs and hcst +# if (((obs$attrs$Variable$metadata[[var_name]]$units == "m s-1") || +# (obs$attrs$Variable$metadata[[var_name]]$units == "m s**-1")) && +# ((hcst$attrs$Variable$metadata[[var_name]]$units == "m s-1") || +# (hcst$attrs$Variable$metadata[[var_name]]$units == "m s**-1"))) { +# info(recipe$Run$logger, "Converting precipitation from m/s to mm/day.") +# obs$data[, var_idx, , , , , , , ] <- +# obs$data[, var_idx, , , , , , , ]*86400*1000 +# obs$attrs$Variable$metadata[[var_name]]$units <- "mm/day" +# hcst$data[, var_idx, , , , , , , ] <- +# hcst$data[, var_idx, , , , , , , ]*86400*1000 +# hcst$attrs$Variable$metadata[[var_name]]$units <- "mm/day" +# if (!is.null(fcst)) { +# fcst$data[, var_idx, , , , , , , ] <- +# fcst$data[, var_idx, , , , , , , ]*86400*1000 +# fcst$attrs$Variable$metadata[[var_name]]$units <- "mm/day" +# } +# } +# } } # Compute anomalies if requested # Print a summary of the loaded data for the user, for each object diff --git a/modules/Units/R/transform_units_preasure.R b/modules/Units/R/transform_units_preasure.R index 30694114..01ca271f 100644 --- a/modules/Units/R/transform_units_preasure.R +++ b/modules/Units/R/transform_units_preasure.R @@ -1,2 +1,3 @@ -transform_units_preasure <- function(data, data, original_units, new_units){ +transform_units_preasure <- function(data, original_units, new_units) { + } diff --git a/modules/Units/R/transform_units_precipitation.R b/modules/Units/R/transform_units_precipitation.R index 81e900b0..56df5266 100644 --- a/modules/Units/R/transform_units_precipitation.R +++ b/modules/Units/R/transform_units_precipitation.R @@ -1,18 +1,54 @@ -transform_units_precipitation <- function(data, original_units, new_units){ - if (!substr(original_units, 1, 2) == substr(new_units, 1, 2)){ - if (substr(original_units, 1, 2) == 'mm' & (substr(new_units, 1, 2) == 'm ' | substr(new_units, 1, 2) == 'm/')){ - data <- data / 1000 - } else if ((substr(original_units, 1, 2) == 'm ' | substr(original_units, 1, 2) == 'm/') & substr(new_units, 1, 2) == 'mm'){ - data <- data * 1000 - } else {stop(paste0("not prepared to transform from ", original_units, " to ", new_units))} +transform_units_precipitation <- function(data, original_units, new_units, + var_name) { + if (original_units == "ms-1") { + if (new_units == "mm") { + data[[1]]$data <- data[[1]]$data * 3600 * 24 * 1000 + data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'mm' + } else if (new_units == "m") { + data[[1]]$data <- data[[1]]$data * 3600 * 24 + data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'm' + } else if (new_units == "kgm-2s-1") { + data[[1]]$data <- data[[1]]$data * 1000 + data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'kg m-2 s-1' + } else { + stop(paste("Unknown transformation from", original_units, "to", + new_units)) } - if (('s' %in% strsplit(original_units, " |/|per") | 'second' %in% strsplit(original_units, " |/|per")) & 'month' %in% strsplit(new_units, " |/|per")){ - data <- data * 3600 * 24 * 365.25/12 - } else if ('day' %in% strsplit(original_units, " |/|per")[[1]] & 'month' %in% strsplit(new_units, " |/|per")[[1]]){ - data <- data * 365.25/12 - } else {stop(paste0("not prepared to transform from ", original_units, " to ", new_units))} + } else if (original_units == "mm") { + if (new_units == "ms-1") { + data[[1]]$data <- data[[1]]$data / (3600 * 24 * 1000) + data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'm s-1' + } else if (new_units == "m") { + data[[1]]$data <- data[[1]]$data / 1000 + data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'mm' + } else if (new_units == "kgm-2s-1") { +# data[[1]]$data <- data[[1]]$data / (3600 * 24 * 1000) + data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'kg m-2 s-1' + } else { + stop(paste("Unknown transformation from", original_units, "to", + new_units)) + } + } else if (original_units == "m") { + if (new_units == "ms-1") { + } else if (new_units == "mm") { + } else if (new_units == "kgm-2s-1") { + } else { + stop(paste("Unknown transformation from", original_units, "to", + new_units)) + } + } else if (original_units == "kgm-2s-1") { + if (new_units == "ms-1") { + } else if (new_units == "mm") { + } else if (new_units == "kgm-2s-1") { + } else { + stop(paste("Unknown transformation from", original_units, "to", + new_units)) + } + } else { + stop("Unknown precipitation units transformation") + } - return(data) + return(data) } diff --git a/modules/Units/R/transform_units_temperature.R b/modules/Units/R/transform_units_temperature.R index 859ae479..09496b0f 100644 --- a/modules/Units/R/transform_units_temperature.R +++ b/modules/Units/R/transform_units_temperature.R @@ -1,10 +1,13 @@ -transform_units_temperature <- function(data, original_units, new_units){ - if (original_units == 'C' & new_units == 'K'){ - data <- data + 273.15 +transform_units_temperature <- function(data, original_units, new_units, + var_name) { + if (original_units == 'c' & new_units == 'k') { + data[[1]]$data <- data[[1]]$data + 273.15 + data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'K' } - if (original_units == 'K' & new_units == 'C'){ - data <- data - 273.15 + if (original_units == 'k' & new_units == 'c') { + data[[1]]$data <- data[[1]]$data - 273.15 + data[[1]]$attrs$Variable$metadata[[var_name]]$units <- "C" + } return(data) } - diff --git a/modules/Units/R/units_transform.R b/modules/Units/R/units_transform.R index 088d3d0b..8cecdb6d 100644 --- a/modules/Units/R/units_transform.R +++ b/modules/Units/R/units_transform.R @@ -1,25 +1,31 @@ # data is a s2dv_cube object # units as character -units_transform <- function(data, orig_units, user_units) { - if (orig_units %in% c("C", "k")) { - if (user_units %in% c("C", "k")) { - trans <- transform_units_temperature(data, orig_units, user_units) +units_transform <- function(data, orig_units, user_units, var_name) { + var_name <- unlist(var_name) + if (orig_units %in% c("c", "k")) { + if (user_units %in% c("c", "k")) { + trans <- transform_units_temperature(data, orig_units, user_units, + var_name) } else { stop("Transformation temperature units not available.") - } if else (orig_units %in% c("ms-1", "kgm-2s-1", "mm", "m")) { + } + } else if (orig_units %in% c("ms-1", "kgm-2s-1", "mm", "m")) { if (user_units %in% c("ms-1", "kgm-2s-1", "mm", "m")) { - trans <- transform_units_precipitation(data, orig_units, user_units) + trans <- transform_units_precipitation(data, orig_units, user_units, + var_name) } else { stop("Transformation precipitation units not available.") } - } if else (orig_units %in% c("pa", "hpa", "mb")) { + } else if (orig_units %in% c("pa", "hpa", "mb")) { if (user_units %in% c("ms-1", "kgm-2s-1", "mm", "m")) { - trans <- transform_units_pressure(data, orig_units, user_units) + trans <- transform_units_pressure(data, orig_units, user_units, + var_name) } else { stop("Transformation precipitation units not available.") } } else { stop("Transformation unknown.") } + return(trans) } diff --git a/modules/Units/Units.R b/modules/Units/Units.R index 15a7e628..d4e057cf 100644 --- a/modules/Units/Units.R +++ b/modules/Units/Units.R @@ -1,9 +1,9 @@ # This function aims to convert units ## -source("modules/R/units_transform.R") -source("modules/R/transform_units_temperature.R") -source("modules/R/transform_units_precipitation.R") -source("modules/R/transform_units_preasure.R") +source("modules/Units/R/units_transform.R") +source("modules/Units/R/transform_units_temperature.R") +source("modules/Units/R/transform_units_precipitation.R") +source("modules/Units/R/transform_units_preasure.R") Units <- function(recipe, data) { # from recipe read the user defined units # from data the original units @@ -16,30 +16,32 @@ Units <- function(recipe, data) { # remove spaces, "**", "*" and "per" from units user_units <- tolower(user_units) user_units <- gsub(" ", "", user_units) - user_units <- gsub("**", "", user_units) - user_units <- gsub("*", "", user_units) + user_units <- gsub("\\**", "", user_units) + user_units <- gsub("\\*", "", user_units) orig_units <- lapply(orig_units, function(x) { x <- tolower(x) x <- gsub(" ", "", x) - x <- gsub("**", "", x) - x <- gsub("*", "", x)}) + x <- gsub("\\**", "", x) + x <- gsub("\\*", "", x)}) # if "/" appears substitute by -1 in at the end of next unit. How to know? - +browser() if (all(orig_units == user_units)) { # no transformation needed res <- data - } else { + } else { obj2trans <- which(orig_units != user_units) res <- lapply(1:length(data), function(x) { if (x %in% obj2trans) { result <- units_transform(data[x], - orig_units = orig_units[x], - user_units = user_units) + orig_units = orig_units[[x]], + user_units = user_units, + var_names[x]) } else { result <- data[x] } return(result) }) + } return(res) } diff --git a/recipe_prlr_seasonal_units.yml b/recipe_prlr_seasonal_units.yml new file mode 100644 index 00000000..ee68ad39 --- /dev/null +++ b/recipe_prlr_seasonal_units.yml @@ -0,0 +1,63 @@ +Description: + Author: nperez + Info: ECVs Oper ESS ECMWF SEAS5 Seasonal Forecast recipe (monthly mean, tas) + +Analysis: + Horizon: seasonal # Mandatory, str: either subseasonal, seasonal, or decadal + Variables: + name: prlr + freq: monthly_mean + units: mm + Datasets: + System: + name: ECMWF-SEAS5.1 # Mandatory, str: system5c3s system21_m1 system35c3s + Multimodel: no # Mandatory, bool: Either yes/true or no/false + Reference: + name: ERA5 # Mandatory, str: Reference codename. See docu. + Time: + sdate: '0601' ## MMDD + fcst_year: '2023' # Optional, int: Forecast year 'YYYY' + hcst_start: '2014' # Mandatory, int: Hindcast start year 'YYYY' + hcst_end: '2016' # Mandatory, int: Hindcast end year 'YYYY' + ftime_min: 1 # Mandatory, int: First leadtime time step in months + ftime_max: 6 # Mandatory, int: Last leadtime time step in months + Region: + latmin: 30 # Mandatory, int: minimum latitude + latmax: 50 # Mandatory, int: maximum latitude + lonmin: -10 # Mandatory, int: minimum longitude + lonmax: 10 # Mandatory, int: maximum longitude + Regrid: + method: bilinear # Mandatory, str: Interpolation method. See docu. + type: "to_system" + #type: /esarchive/scratch/nmilders/gitlab/git_clones/auto-s2s/conf/grid_description.txt #'r360x180' # Mandatory, str: to_system, to_reference, or CDO-accepted grid. + Workflow: + Anomalies: + compute: no + cross_validation: no + save: none + Calibration: + method: evmos # Mandatory, str: Calibration method. See docu. + cross_validation: yes + save: none + Skill: + metric: mean_bias EnsCorr rpss crpss bss10 bss90 + save: 'all' + cross_validation: yes + Probabilities: + percentiles: [[1/3, 2/3], [1/10, 9/10]] # frac: Quantile thresholds. + save: 'all' + Indicators: + index: no + Visualization: + plots: skill_metrics forecast_ensemble_mean most_likely_terciles + multi_panel: no + mask_terciles: both + ncores: 4 # Optional, int: number of cores, defaults to 1 + remove_NAs: # Optional, bool: Whether NAs are removed, defaults to FALSE + Output_format: scorecards + logo: yes +Run: + Loglevel: INFO + Terminal: TRUE + output_dir: /esarchive/scratch/nperez/cs_oper/ + code_dir: /esarchive/scratch/nperez/git/s2s-suite/ diff --git a/recipe_tas_seasonal_units.yml b/recipe_tas_seasonal_units.yml index 4c1eccc1..c217b9fd 100644 --- a/recipe_tas_seasonal_units.yml +++ b/recipe_tas_seasonal_units.yml @@ -17,15 +17,15 @@ Analysis: Time: sdate: '0601' ## MMDD fcst_year: '2023' # Optional, int: Forecast year 'YYYY' - hcst_start: '20133' # Mandatory, int: Hindcast start year 'YYYY' + hcst_start: '2014' # Mandatory, int: Hindcast start year 'YYYY' hcst_end: '2016' # Mandatory, int: Hindcast end year 'YYYY' ftime_min: 1 # Mandatory, int: First leadtime time step in months ftime_max: 6 # Mandatory, int: Last leadtime time step in months Region: - latmin: 20 # Mandatory, int: minimum latitude - latmax: 80 # Mandatory, int: maximum latitude - lonmin: -20 # Mandatory, int: minimum longitude - lonmax: 40 # Mandatory, int: maximum longitude + latmin: 30 # Mandatory, int: minimum latitude + latmax: 50 # Mandatory, int: maximum latitude + lonmin: -10 # Mandatory, int: minimum longitude + lonmax: 10 # Mandatory, int: maximum longitude Regrid: method: bilinear # Mandatory, str: Interpolation method. See docu. type: "to_system" -- GitLab From e4636673160e3aeedfb42815944e5de529da3964 Mon Sep 17 00:00:00 2001 From: vagudets Date: Thu, 3 Aug 2023 10:36:10 +0200 Subject: [PATCH 204/388] Add 'execute' parameter to scorecards --- recipes/recipe_scorecards.yml | 2 +- recipes/recipe_scorecards_vic.yml | 1 + tools/write_autosubmit_conf.R | 5 ++++- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/recipes/recipe_scorecards.yml b/recipes/recipe_scorecards.yml index 88b63b6e..434426d0 100644 --- a/recipes/recipe_scorecards.yml +++ b/recipes/recipe_scorecards.yml @@ -64,6 +64,7 @@ Analysis: Indicators: index: no # ? Scorecards: + execute: yes # yes/no regions: Extra-tropical NH: {lon.min: 0, lon.max: 360, lat.min: 30, lat.max: 90} Tropics: {lon.min: 0, lon.max: 360, lat.min: -30, lat.max: 30} @@ -76,7 +77,6 @@ Analysis: col1_width: NULL col2_width: NULL calculate_diff: FALSE - #output_path: /esarchive/scratch/nmilders/scorecards_images/testing ncores: 7 remove_NAs: no # bool, don't split Output_format: Scorecards # string, don't split diff --git a/recipes/recipe_scorecards_vic.yml b/recipes/recipe_scorecards_vic.yml index 8ff72168..9abd5193 100644 --- a/recipes/recipe_scorecards_vic.yml +++ b/recipes/recipe_scorecards_vic.yml @@ -64,6 +64,7 @@ Analysis: Indicators: index: no # ? Scorecards: + execute: yes # yes/no regions: Extra-tropical NH: {lon.min: 0, lon.max: 360, lat.min: 30, lat.max: 90} Tropics: {lon.min: 0, lon.max: 360, lat.min: -30, lat.max: 30} diff --git a/tools/write_autosubmit_conf.R b/tools/write_autosubmit_conf.R index bcf2cfee..bfc708bc 100644 --- a/tools/write_autosubmit_conf.R +++ b/tools/write_autosubmit_conf.R @@ -51,7 +51,10 @@ write_autosubmit_conf <- function(recipe, nchunks) { "FAILED") } jobs$verification$PROCESSORS <- recipe$Run$auto_conf$processors_per_job # ncores? - if (!("Scorecards" %in% names(recipe$Analysis$Workflow))) { + # Only include Scorecards job if section exists in the recipe and + # is set to 'execute: True' + if (!("Scorecards" %in% names(recipe$Analysis$Workflow)) || + (!recipe$Analysis$Workflow$Scorecards$execute)) { jobs$scorecards <- NULL } # Return to original list -- GitLab From 7df27415f8884b518e63ec6e1f834c6a76361cba Mon Sep 17 00:00:00 2001 From: nperez Date: Thu, 3 Aug 2023 13:06:08 +0200 Subject: [PATCH 205/388] Monthly precipitation --- modules/Units/R/transform_units_precipitation.R | 11 ++++++++++- modules/Units/Units.R | 16 +++++++++++----- recipe_prlr_seasonal_units.yml | 2 +- 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/modules/Units/R/transform_units_precipitation.R b/modules/Units/R/transform_units_precipitation.R index 56df5266..f57deca9 100644 --- a/modules/Units/R/transform_units_precipitation.R +++ b/modules/Units/R/transform_units_precipitation.R @@ -1,5 +1,6 @@ transform_units_precipitation <- function(data, original_units, new_units, var_name) { +browser() if (original_units == "ms-1") { if (new_units == "mm") { data[[1]]$data <- data[[1]]$data * 3600 * 24 * 1000 @@ -47,7 +48,15 @@ transform_units_precipitation <- function(data, original_units, new_units, } else { stop("Unknown precipitation units transformation") } - + # If monthly data compute the total monthly accumlated + if (recipe$Analysis$Variable$freq == "monthly_mean") { # could it not be mean? + data[[1]] <- Apply(list(data[[1]]$data, data[[1]]$attrs$Dates), + target_dim = 'time', fun = function(x, y) { + date <- as.Date(y, "%Y-%m-%d") + num_days <- lubridate::days_in_month(date) + res <- x * num_days + })$output1 + } return(data) } diff --git a/modules/Units/Units.R b/modules/Units/Units.R index d4e057cf..212c66f0 100644 --- a/modules/Units/Units.R +++ b/modules/Units/Units.R @@ -9,10 +9,14 @@ Units <- function(recipe, data) { # from data the original units # deaccumulate option for CDS accumulated variables? ## Do we need to convert other than ECVs? - user_units <- recipe$Analysis$Variables$units var_names <- lapply(data, function(x) {x$attrs$Variable$varName}) orig_units <- lapply(1:length(data), function(x) { data[[x]]$attrs$Variable$metadata[[var_names[[x]]]]$units}) + if (is.null(recipe$Analysis$Variables$units)) { + user_units <- orig_units[[which(!is.null(orig_units))[1]]] + } else { + user_units <- recipe$Analysis$Variables$units + } # remove spaces, "**", "*" and "per" from units user_units <- tolower(user_units) user_units <- gsub(" ", "", user_units) @@ -22,15 +26,17 @@ Units <- function(recipe, data) { x <- tolower(x) x <- gsub(" ", "", x) x <- gsub("\\**", "", x) - x <- gsub("\\*", "", x)}) + x <- gsub("\\*", "", x) + x <- unlist(ifelse(length(x)==0, user_units, x)) #when fcst is NULL + }) # if "/" appears substitute by -1 in at the end of next unit. How to know? -browser() + if (all(orig_units == user_units)) { # no transformation needed res <- data } else { obj2trans <- which(orig_units != user_units) - res <- lapply(1:length(data), function(x) { + res <- sapply(1:length(data), function(x) { if (x %in% obj2trans) { result <- units_transform(data[x], orig_units = orig_units[[x]], @@ -40,7 +46,7 @@ browser() result <- data[x] } return(result) - }) + }, simplify = TRUE) # instead of lapply to get the named list directly } return(res) diff --git a/recipe_prlr_seasonal_units.yml b/recipe_prlr_seasonal_units.yml index ee68ad39..e03428ac 100644 --- a/recipe_prlr_seasonal_units.yml +++ b/recipe_prlr_seasonal_units.yml @@ -16,7 +16,7 @@ Analysis: name: ERA5 # Mandatory, str: Reference codename. See docu. Time: sdate: '0601' ## MMDD - fcst_year: '2023' # Optional, int: Forecast year 'YYYY' + fcst_year: # Optional, int: Forecast year 'YYYY' hcst_start: '2014' # Mandatory, int: Hindcast start year 'YYYY' hcst_end: '2016' # Mandatory, int: Hindcast end year 'YYYY' ftime_min: 1 # Mandatory, int: First leadtime time step in months -- GitLab From 054af4f4c5aee0f20ff2ba2184bfa6f4c1c59d96 Mon Sep 17 00:00:00 2001 From: nperez Date: Thu, 3 Aug 2023 13:53:39 +0200 Subject: [PATCH 206/388] review transform ppt --- .../Units/R/transform_units_precipitation.R | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/modules/Units/R/transform_units_precipitation.R b/modules/Units/R/transform_units_precipitation.R index f57deca9..00938ffd 100644 --- a/modules/Units/R/transform_units_precipitation.R +++ b/modules/Units/R/transform_units_precipitation.R @@ -1,6 +1,7 @@ transform_units_precipitation <- function(data, original_units, new_units, var_name) { browser() + if (original_units == "ms-1") { if (new_units == "mm") { data[[1]]$data <- data[[1]]$data * 3600 * 24 * 1000 @@ -21,9 +22,9 @@ browser() data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'm s-1' } else if (new_units == "m") { data[[1]]$data <- data[[1]]$data / 1000 - data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'mm' + data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'm' } else if (new_units == "kgm-2s-1") { -# data[[1]]$data <- data[[1]]$data / (3600 * 24 * 1000) + data[[1]]$data <- data[[1]]$data / (3600 * 24 ) data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'kg m-2 s-1' } else { stop(paste("Unknown transformation from", original_units, "to", @@ -31,16 +32,28 @@ browser() } } else if (original_units == "m") { if (new_units == "ms-1") { + data[[1]]$data <- data[[1]]$data / (3600 * 24) + data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'm s-1' } else if (new_units == "mm") { + data[[1]]$data <- data[[1]]$data * 1000 + data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'mm' } else if (new_units == "kgm-2s-1") { + data[[1]]$data <- data[[1]]$data * 1000 / (3600 * 24) + data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'kg m-2 s-1' } else { stop(paste("Unknown transformation from", original_units, "to", new_units)) } } else if (original_units == "kgm-2s-1") { if (new_units == "ms-1") { + data[[1]]$data <- data[[1]]$data / 1000 + data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'm s-1' } else if (new_units == "mm") { - } else if (new_units == "kgm-2s-1") { + data[[1]]$data <- data[[1]]$data * 3600 * 24 + data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'mm' + } else if (new_units == "m") { + data[[1]]$data <- data[[1]]$data * 3600 * 24 / 1000 + data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'm' } else { stop(paste("Unknown transformation from", original_units, "to", new_units)) -- GitLab From f0f2eff7d6fb35be7a7d19ba3fe3d302a7af080e Mon Sep 17 00:00:00 2001 From: nperez Date: Thu, 3 Aug 2023 14:08:41 +0200 Subject: [PATCH 207/388] pressure transform --- modules/Units/R/transform_units_preasure.R | 3 --- modules/Units/R/transform_units_pressure.R | 27 ++++++++++++++++++++++ modules/Units/R/units_transform.R | 2 +- modules/Units/Units.R | 3 ++- 4 files changed, 30 insertions(+), 5 deletions(-) delete mode 100644 modules/Units/R/transform_units_preasure.R create mode 100644 modules/Units/R/transform_units_pressure.R diff --git a/modules/Units/R/transform_units_preasure.R b/modules/Units/R/transform_units_preasure.R deleted file mode 100644 index 01ca271f..00000000 --- a/modules/Units/R/transform_units_preasure.R +++ /dev/null @@ -1,3 +0,0 @@ -transform_units_preasure <- function(data, original_units, new_units) { - -} diff --git a/modules/Units/R/transform_units_pressure.R b/modules/Units/R/transform_units_pressure.R new file mode 100644 index 00000000..6ebd39ae --- /dev/null +++ b/modules/Units/R/transform_units_pressure.R @@ -0,0 +1,27 @@ +transform_units_pressure <- function(data, original_units, new_units, var_name) { + + if (original_units == 'pa') { + if (new_units == 'hpa') { + data[[1]]$data <- data[[1]]$data /100 + data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'hPa' + } else if (new_units == 'mb') { + data[[1]]$data <- data[[1]]$data /100 + data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'mb' + } + } else if (original_units == 'hpa') { + if (new_units == 'pa') { + data[[1]]$data <- data[[1]]$data * 100 + data[[1]]$attrs$Variable$metadata[[var_name]]$units <- "Pa" + } else if (new_units == "mb") { + data[[1]]$attrs$Variable$metadata[[var_name]]$units <- "mb" + } + } else if (original_units == "mb") { + if (new_units == 'pa') { + data[[1]]$data <- data[[1]]$data * 100 + data[[1]]$attrs$Variable$metadata[[var_name]]$units <- "Pa" + } else if (new_units == "hPa") { + data[[1]]$attrs$Variable$metadata[[var_name]]$units <- "hPa" + } + } + return(data) +} diff --git a/modules/Units/R/units_transform.R b/modules/Units/R/units_transform.R index 8cecdb6d..10ab15cc 100644 --- a/modules/Units/R/units_transform.R +++ b/modules/Units/R/units_transform.R @@ -17,7 +17,7 @@ units_transform <- function(data, orig_units, user_units, var_name) { stop("Transformation precipitation units not available.") } } else if (orig_units %in% c("pa", "hpa", "mb")) { - if (user_units %in% c("ms-1", "kgm-2s-1", "mm", "m")) { + if (user_units %in% c("pa", "hpa", "mb")) { trans <- transform_units_pressure(data, orig_units, user_units, var_name) } else { diff --git a/modules/Units/Units.R b/modules/Units/Units.R index 212c66f0..b6afb44b 100644 --- a/modules/Units/Units.R +++ b/modules/Units/Units.R @@ -3,7 +3,7 @@ source("modules/Units/R/units_transform.R") source("modules/Units/R/transform_units_temperature.R") source("modules/Units/R/transform_units_precipitation.R") -source("modules/Units/R/transform_units_preasure.R") +source("modules/Units/R/transform_units_pressure.R") Units <- function(recipe, data) { # from recipe read the user defined units # from data the original units @@ -51,3 +51,4 @@ Units <- function(recipe, data) { } return(res) } + -- GitLab From 26ee8979926a83955500a47d394382b0601e2090 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Thu, 3 Aug 2023 15:02:37 +0200 Subject: [PATCH 208/388] Test sbatch script --- launch.sh | 46 +++++++++++++++++++++++ recipes/tests/recipe_seasonal_example.yml | 2 +- run_parallel_workflow.sh | 14 +++++++ 3 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 launch.sh create mode 100644 run_parallel_workflow.sh diff --git a/launch.sh b/launch.sh new file mode 100644 index 00000000..d837a369 --- /dev/null +++ b/launch.sh @@ -0,0 +1,46 @@ +#!/bin/bash + +# set -vx + +# Usage statement +if [[ ( $@ == "--help") || $@ == "-h" ]]; then + echo "Usage: $0 " + exit 0 +fi + +# Check recipe and script +recipe=$1 +script=$2 +# recipe=recipes/tests/recipe_seasonal_example.yml +# script=modules/test_parallel_workflow.R + +if [ ! -f "$recipe" ]; then + echo "Could not file recipe file: $recipe" + exit 0 +fi + +if [ ! -f "$script" ]; then + echo "Could not find script file $script" + exit 0 +fi + +# Define tmp file to store necessary information +tmpfile=$(mktemp /tmp/test_split.XXXXXX) + +# Create outdir and split recipes +source MODULES +Rscript split.R ${recipe} | tee $tmpfile +outdir=$( tail -n 1 $tmpfile | sed 's/"//g' ) +outdir=($outdir) + +rm $tmpfile + +# Create directory for slurm output +logdir=/esarchive/scratch/$(whoami)/tmp/auto-s2s-logs +mkdir -p $logdir +echo "Slurm job logs will be stored in $logdir" + +# Launch one job per atomic recipe +for atomic_recipe in ${outdir[1]}/logs/recipes/atomic_recipe_??.yml; do + sbatch run_parallel_workflow.sh ${script} ${atomic_recipe} +done diff --git a/recipes/tests/recipe_seasonal_example.yml b/recipes/tests/recipe_seasonal_example.yml index cb941f84..77912f1d 100644 --- a/recipes/tests/recipe_seasonal_example.yml +++ b/recipes/tests/recipe_seasonal_example.yml @@ -61,7 +61,7 @@ Run: filesystem: esarchive output_dir: /esarchive/scratch/vagudets/repos/auto-s2s/out-logs/ code_dir: /esarchive/scratch/vagudets/repos/auto-s2s/ - autosubmit: yes + autosubmit: no # fill only if using autosubmit auto_conf: script: /esarchive/scratch/vagudets/repos/auto-s2s/modules/test_parallel_workflow.R diff --git a/run_parallel_workflow.sh b/run_parallel_workflow.sh new file mode 100644 index 00000000..50ad070d --- /dev/null +++ b/run_parallel_workflow.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +#SBATCH -n 1 +#SBATCH -t 04:00:00 +#SBATCH -J med +#SBATCH -e /esarchive/scratch/%u/tmp/auto-s2s-logs/run-%j.err +#SBATCH -o /esarchive/scratch/%u/tmp/auto-s2s-logs/run-%j.out + +script=$1 +atomic_recipe=$2 + +source MODULES + +Rscript ${script} ${atomic_recipe} -- GitLab From 3c4ff96d709bc933523f425b2b4a603a2429b039 Mon Sep 17 00:00:00 2001 From: nperez Date: Thu, 3 Aug 2023 15:55:06 +0200 Subject: [PATCH 209/388] deaccumulate function --- modules/Units/R/deaccumulate.R | 6 ++++++ modules/Units/R/transform_units_precipitation.R | 6 ++---- modules/Units/R/units_transform.R | 4 ++-- modules/Units/Units.R | 3 ++- 4 files changed, 12 insertions(+), 7 deletions(-) create mode 100644 modules/Units/R/deaccumulate.R diff --git a/modules/Units/R/deaccumulate.R b/modules/Units/R/deaccumulate.R new file mode 100644 index 00000000..474b7382 --- /dev/null +++ b/modules/Units/R/deaccumulate.R @@ -0,0 +1,6 @@ +deaccumulate <- function(data) { + data[[1]]$data <- Apply(list(data[[1]]$data), target_dim = 'time', + fun = function(x) { + c(x[1], diff(x)) + })$output1 +} diff --git a/modules/Units/R/transform_units_precipitation.R b/modules/Units/R/transform_units_precipitation.R index 00938ffd..9de12c41 100644 --- a/modules/Units/R/transform_units_precipitation.R +++ b/modules/Units/R/transform_units_precipitation.R @@ -1,7 +1,5 @@ transform_units_precipitation <- function(data, original_units, new_units, - var_name) { -browser() - + var_name, freq) { if (original_units == "ms-1") { if (new_units == "mm") { data[[1]]$data <- data[[1]]$data * 3600 * 24 * 1000 @@ -62,7 +60,7 @@ browser() stop("Unknown precipitation units transformation") } # If monthly data compute the total monthly accumlated - if (recipe$Analysis$Variable$freq == "monthly_mean") { # could it not be mean? + if (freq == "monthly_mean") { # could it not be mean? data[[1]] <- Apply(list(data[[1]]$data, data[[1]]$attrs$Dates), target_dim = 'time', fun = function(x, y) { date <- as.Date(y, "%Y-%m-%d") diff --git a/modules/Units/R/units_transform.R b/modules/Units/R/units_transform.R index 10ab15cc..01008524 100644 --- a/modules/Units/R/units_transform.R +++ b/modules/Units/R/units_transform.R @@ -1,6 +1,6 @@ # data is a s2dv_cube object # units as character -units_transform <- function(data, orig_units, user_units, var_name) { +units_transform <- function(data, orig_units, user_units, var_name, freq) { var_name <- unlist(var_name) if (orig_units %in% c("c", "k")) { if (user_units %in% c("c", "k")) { @@ -12,7 +12,7 @@ units_transform <- function(data, orig_units, user_units, var_name) { } else if (orig_units %in% c("ms-1", "kgm-2s-1", "mm", "m")) { if (user_units %in% c("ms-1", "kgm-2s-1", "mm", "m")) { trans <- transform_units_precipitation(data, orig_units, user_units, - var_name) + var_name, freq) } else { stop("Transformation precipitation units not available.") } diff --git a/modules/Units/Units.R b/modules/Units/Units.R index b6afb44b..bd9f9045 100644 --- a/modules/Units/Units.R +++ b/modules/Units/Units.R @@ -10,6 +10,7 @@ Units <- function(recipe, data) { # deaccumulate option for CDS accumulated variables? ## Do we need to convert other than ECVs? var_names <- lapply(data, function(x) {x$attrs$Variable$varName}) + freq <- recipe$Analysis$Variable$freq orig_units <- lapply(1:length(data), function(x) { data[[x]]$attrs$Variable$metadata[[var_names[[x]]]]$units}) if (is.null(recipe$Analysis$Variables$units)) { @@ -41,7 +42,7 @@ Units <- function(recipe, data) { result <- units_transform(data[x], orig_units = orig_units[[x]], user_units = user_units, - var_names[x]) + var_names[x], freq = freq) } else { result <- data[x] } -- GitLab From 297132c608007dc01b2902dd08c4d4bee9d9ff19 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Thu, 3 Aug 2023 16:06:53 +0200 Subject: [PATCH 210/388] Update bash scripts --- .../slurm_templates/run_parallel_workflow.sh | 22 +++++++++++++++++++ launch.sh | 2 +- recipes/tests/recipe_seasonal_example.yml | 4 ++-- run_parallel_workflow.sh | 12 ++++++++-- 4 files changed, 35 insertions(+), 5 deletions(-) create mode 100644 example_scripts/slurm_templates/run_parallel_workflow.sh diff --git a/example_scripts/slurm_templates/run_parallel_workflow.sh b/example_scripts/slurm_templates/run_parallel_workflow.sh new file mode 100644 index 00000000..4d598c9e --- /dev/null +++ b/example_scripts/slurm_templates/run_parallel_workflow.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +#SBATCH -n 12 +#SBATCH -t 04:00:00 +#SBATCH -J SUNSET +#SBATCH -C medmem +#SBATCH -e /esarchive/scratch/%u/tmp/auto-s2s-logs/run-%j.err +#SBATCH -o /esarchive/scratch/%u/tmp/auto-s2s-logs/run-%j.out + +# Slurm directive description: +# -n: number of cores +# -t: wallclock +# -J: job name +# -C: constraint (e.g. "medmem" for the medium memory nodes) +# -e, -o: .err and .out file paths + +script=$1 +atomic_recipe=$2 + +source MODULES + +Rscript ${script} ${atomic_recipe} diff --git a/launch.sh b/launch.sh index d837a369..e3abd64f 100644 --- a/launch.sh +++ b/launch.sh @@ -42,5 +42,5 @@ echo "Slurm job logs will be stored in $logdir" # Launch one job per atomic recipe for atomic_recipe in ${outdir[1]}/logs/recipes/atomic_recipe_??.yml; do - sbatch run_parallel_workflow.sh ${script} ${atomic_recipe} + sbatch example_scripts/slurm_templates/run_parallel_workflow.sh ${script} ${atomic_recipe} done diff --git a/recipes/tests/recipe_seasonal_example.yml b/recipes/tests/recipe_seasonal_example.yml index 85b33eba..33662383 100644 --- a/recipes/tests/recipe_seasonal_example.yml +++ b/recipes/tests/recipe_seasonal_example.yml @@ -30,7 +30,7 @@ Analysis: hcst_start: '2000' hcst_end: '2016' ftime_min: 1 - ftime_max: 6 + ftime_max: 3 Region: - {latmin: -10, latmax: 10, lonmin: -10, lonmax: 10} Regrid: @@ -56,7 +56,7 @@ Analysis: projection: cylindrical_equidistant Indicators: index: no - ncores: 8 + ncores: 10 remove_NAs: yes Output_format: S2S4E diff --git a/run_parallel_workflow.sh b/run_parallel_workflow.sh index 50ad070d..4d598c9e 100644 --- a/run_parallel_workflow.sh +++ b/run_parallel_workflow.sh @@ -1,11 +1,19 @@ #!/bin/bash -#SBATCH -n 1 +#SBATCH -n 12 #SBATCH -t 04:00:00 -#SBATCH -J med +#SBATCH -J SUNSET +#SBATCH -C medmem #SBATCH -e /esarchive/scratch/%u/tmp/auto-s2s-logs/run-%j.err #SBATCH -o /esarchive/scratch/%u/tmp/auto-s2s-logs/run-%j.out +# Slurm directive description: +# -n: number of cores +# -t: wallclock +# -J: job name +# -C: constraint (e.g. "medmem" for the medium memory nodes) +# -e, -o: .err and .out file paths + script=$1 atomic_recipe=$2 -- GitLab From 3709217c793f055d8be600d7a2bfabad41733a0f Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Fri, 4 Aug 2023 10:14:34 +0200 Subject: [PATCH 211/388] Add a TODO --- split.R | 1 + 1 file changed, 1 insertion(+) diff --git a/split.R b/split.R index 6976b8a8..2cc0db7f 100755 --- a/split.R +++ b/split.R @@ -34,5 +34,6 @@ run_parameters <- divide_recipe(recipe) if (recipe$Run$autosubmit) { write_autosubmit_conf(recipe, run_parameters$n_atomic_recipes) } else { + ## TODO: Return code dir to set it as working directory run_parameters$outdir } -- GitLab From a160b7b833cc05fa33c91a0303f282f3864ff30d Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Fri, 4 Aug 2023 17:01:51 +0200 Subject: [PATCH 212/388] Remove recipes and script --- exec_ecvs_seasonal_oper.R | 35 ----------------- recipe_ecvs_seasonal_oper.yml | 73 ----------------------------------- recipe_prlr_seasonal_oper.yml | 62 ----------------------------- recipe_tas_seasonal_oper.yml | 62 ----------------------------- 4 files changed, 232 deletions(-) delete mode 100644 exec_ecvs_seasonal_oper.R delete mode 100644 recipe_ecvs_seasonal_oper.yml delete mode 100644 recipe_prlr_seasonal_oper.yml delete mode 100644 recipe_tas_seasonal_oper.yml diff --git a/exec_ecvs_seasonal_oper.R b/exec_ecvs_seasonal_oper.R deleted file mode 100644 index 18f2e493..00000000 --- a/exec_ecvs_seasonal_oper.R +++ /dev/null @@ -1,35 +0,0 @@ -rm(list=ls()) -gc() -setwd("/esarchive/scratch/nperez/git/auto-s2s") - -source("modules/Loading/Loading.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("tools/prepare_outputs.R") - -# Read recipe -args = commandArgs(trailingOnly = TRUE) -recipe_file <- args[1] -recipe <- read_atomic_recipe(recipe_file) -## to test a single recipe: -#recipe_file <- "recipe_ecvs_seasonal_oper.yml" -#recipe <- prepare_outputs(recipe_file) - -# Load datasets -data <- load_datasets(recipe) -# Calibrate datasets -data <- calibrate_datasets(recipe, data) -# Compute skill metrics -skill_metrics <- compute_skill_metrics(recipe, data) -# Compute percentiles and probability bins -probabilities <- compute_probabilities(recipe, data) -# Export all data to netCDF -## TODO: Fix plotting -# save_data(recipe, data, skill_metrics, probabilities) -# Plot data -plot_data(recipe, data, skill_metrics, probabilities, significance = T) - - diff --git a/recipe_ecvs_seasonal_oper.yml b/recipe_ecvs_seasonal_oper.yml deleted file mode 100644 index d47fd159..00000000 --- a/recipe_ecvs_seasonal_oper.yml +++ /dev/null @@ -1,73 +0,0 @@ -Description: - Author: nperez - Info: ECVs Oper ESS ECMWF SEAS5 Seasonal Forecast recipe (monthly mean, tas) - -Analysis: - Horizon: seasonal # Mandatory, str: either subseasonal, seasonal, or decadal - Variables: - - {name: tas, freq: monthly_mean} - - {name: prlr, freq: monthly_mean} - Datasets: - System: - - {name: ECMWF-SEAS5.1} # system21_m1 system35c3s - Multimodel: no # Mandatory, bool: Either yes/true or no/false - Reference: - - {name: ERA5} # Mandatory, str: Reference codename. See docu. - Time: - sdate: '0701' ## MMDD - fcst_year: '2023' # Optional, int: Forecast year 'YYYY' - hcst_start: '1993' # Mandatory, int: Hindcast start year 'YYYY' - hcst_end: '2016' # Mandatory, int: Hindcast end year 'YYYY' - ftime_min: 1 # Mandatory, int: First leadtime time step in months - ftime_max: 6 # Mandatory, int: Last leadtime time step in months - Region: - - {name: "UE", latmin: 20, latmax: 80, lonmin: -20, lonmax: 40} - Regrid: - method: bilinear # Mandatory, str: Interpolation method. See docu. - type: "to_system" - #type: /esarchive/scratch/nmilders/gitlab/git_clones/auto-s2s/conf/grid_description.txt #'r360x180' # Mandatory, str: to_system, to_reference, or CDO-accepted grid. - Workflow: - Anomalies: - compute: no - cross_validation: no - save: none - Calibration: - method: evmos # Mandatory, str: Calibration method. See docu. - cross_validation: yes - save: none - Skill: - metric: mean_bias EnsCorr rpss crpss bss10 bss90 - save: 'all' - cross_validation: yes - Probabilities: - percentiles: [[1/3, 2/3], [1/10, 9/10]] # frac: Quantile thresholds. - save: 'all' - Indicators: - index: no - Visualization: - plots: skill_metrics forecast_ensemble_mean most_likely_terciles - multi_panel: no - projection: lambert_europe - ncores: 4 # Optional, int: number of cores, defaults to 1 - remove_NAs: # Optional, bool: Whether NAs are removed, defaults to FALSE - Output_format: scorecards - logo: yes -Run: - Loglevel: INFO - Terminal: yes - filesystem: esarchive - output_dir: /esarchive/scratch/nperez/cs_oper/seasonal/ # replace with the directory where you want to save the outputs - code_dir: /esarchive/scratch/nperez/git/auto-s2s/ # replace with the directory where your code is - autosubmit: yes - # fill only if using autosubmit - auto_conf: - script: /esarchive/scratch/nperez/git/auto-s2s/exec_ecvs_seasonal_oper.R # replace with the path to your script - expid: a68v # replace with your EXPID - hpc_user: bsc32339 # replace with your hpc username - wallclock: 02:00 # hh:mm - processors_per_job: 4 - platform: nord3v2 - email_notifications: yes # enable/disable email notifications. Change it if you want to. - email_address: nuria.perez@bsc.es # replace with your email address - notify_completed: yes # notify me by email when a job finishes - notify_failed: yes # notify me by email when a job fails diff --git a/recipe_prlr_seasonal_oper.yml b/recipe_prlr_seasonal_oper.yml deleted file mode 100644 index fb6d1a1c..00000000 --- a/recipe_prlr_seasonal_oper.yml +++ /dev/null @@ -1,62 +0,0 @@ -Description: - Author: nperez - Info: ECVs Oper ESS ECMWF SEAS5 Seasonal Forecast recipe (monthly mean, tas) - -Analysis: - Horizon: seasonal # Mandatory, str: either subseasonal, seasonal, or decadal - Variables: - name: prlr - freq: monthly_mean - Datasets: - System: - name: ECMWF-SEAS5.1 # Mandatory, str: system5c3s system21_m1 system35c3s - Multimodel: no # Mandatory, bool: Either yes/true or no/false - Reference: - name: ERA5 # Mandatory, str: Reference codename. See docu. - Time: - sdate: '0701' ## MMDD - fcst_year: '2023' # Optional, int: Forecast year 'YYYY' - hcst_start: '1993' # Mandatory, int: Hindcast start year 'YYYY' - hcst_end: '2016' # Mandatory, int: Hindcast end year 'YYYY' - ftime_min: 1 # Mandatory, int: First leadtime time step in months - ftime_max: 6 # Mandatory, int: Last leadtime time step in months - Region: - latmin: 20 # Mandatory, int: minimum latitude - latmax: 80 # Mandatory, int: maximum latitude - lonmin: -20 # Mandatory, int: minimum longitude - lonmax: 40 # Mandatory, int: maximum longitude - Regrid: - method: bilinear # Mandatory, str: Interpolation method. See docu. - type: "to_system" - #type: /esarchive/scratch/nmilders/gitlab/git_clones/auto-s2s/conf/grid_description.txt #'r360x180' # Mandatory, str: to_system, to_reference, or CDO-accepted grid. - Workflow: - Anomalies: - compute: no - cross_validation: no - save: none - Calibration: - method: evmos # Mandatory, str: Calibration method. See docu. - cross_validation: yes - save: none - Skill: - metric: mean_bias EnsCorr rpss crpss bss10 bss90 - save: 'all' - cross_validation: yes - Probabilities: - percentiles: [[1/3, 2/3], [1/10, 9/10]] # frac: Quantile thresholds. - save: 'all' - Indicators: - index: no - Visualization: - plots: skill_metrics forecast_ensemble_mean most_likely_terciles - multi_panel: no - dots: both - ncores: 4 # Optional, int: number of cores, defaults to 1 - remove_NAs: # Optional, bool: Whether NAs are removed, defaults to FALSE - Output_format: scorecards - logo: yes -Run: - Loglevel: INFO - Terminal: TRUE - output_dir: /esarchive/scratch/nperez/cs_oper/ - code_dir: /esarchive/scratch/nperez/git/s2s-suite/ diff --git a/recipe_tas_seasonal_oper.yml b/recipe_tas_seasonal_oper.yml deleted file mode 100644 index 75918265..00000000 --- a/recipe_tas_seasonal_oper.yml +++ /dev/null @@ -1,62 +0,0 @@ -Description: - Author: nperez - Info: ECVs Oper ESS ECMWF SEAS5 Seasonal Forecast recipe (monthly mean, tas) - -Analysis: - Horizon: seasonal # Mandatory, str: either subseasonal, seasonal, or decadal - Variables: - name: tas - freq: monthly_mean - Datasets: - System: - name: ECMWF-SEAS5.1 # Mandatory, str: system5c3s system21_m1 system35c3s - Multimodel: no # Mandatory, bool: Either yes/true or no/false - Reference: - name: ERA5 # Mandatory, str: Reference codename. See docu. - Time: - sdate: '0601' ## MMDD - fcst_year: '2023' # Optional, int: Forecast year 'YYYY' - hcst_start: '1993' # Mandatory, int: Hindcast start year 'YYYY' - hcst_end: '2016' # Mandatory, int: Hindcast end year 'YYYY' - ftime_min: 1 # Mandatory, int: First leadtime time step in months - ftime_max: 6 # Mandatory, int: Last leadtime time step in months - Region: - latmin: 20 # Mandatory, int: minimum latitude - latmax: 80 # Mandatory, int: maximum latitude - lonmin: -20 # Mandatory, int: minimum longitude - lonmax: 40 # Mandatory, int: maximum longitude - Regrid: - method: bilinear # Mandatory, str: Interpolation method. See docu. - type: "to_system" - #type: /esarchive/scratch/nmilders/gitlab/git_clones/auto-s2s/conf/grid_description.txt #'r360x180' # Mandatory, str: to_system, to_reference, or CDO-accepted grid. - Workflow: - Anomalies: - compute: no - cross_validation: no - save: none - Calibration: - method: evmos # Mandatory, str: Calibration method. See docu. - cross_validation: yes - save: none - Skill: - metric: mean_bias EnsCorr rpss crpss bss10 bss90 - save: 'all' - cross_validation: yes - Probabilities: - percentiles: [[1/3, 2/3], [1/10, 9/10]] # frac: Quantile thresholds. - save: 'all' - Indicators: - index: no - Visualization: - plots: skill_metrics forecast_ensemble_mean most_likely_terciles - multi_panel: no - mask_terciles: both - ncores: 4 # Optional, int: number of cores, defaults to 1 - remove_NAs: # Optional, bool: Whether NAs are removed, defaults to FALSE - Output_format: scorecards - logo: yes -Run: - Loglevel: INFO - Terminal: TRUE - output_dir: /esarchive/scratch/nperez/cs_oper/ - code_dir: /esarchive/scratch/nperez/git/s2s-suite/ -- GitLab From e3e77ecd9309c2788c5d535c44d7c64bf40f32b0 Mon Sep 17 00:00:00 2001 From: nperez Date: Fri, 4 Aug 2023 17:07:42 +0200 Subject: [PATCH 213/388] first attempt region plot size --- modules/Visualization/R/plot_skill_metrics.R | 6 ++++-- modules/Visualization/output_size.yml | 12 ++++++++++++ recipe_ecvs_seasonal_oper.yml | 2 +- 3 files changed, 17 insertions(+), 3 deletions(-) create mode 100644 modules/Visualization/output_size.yml diff --git a/modules/Visualization/R/plot_skill_metrics.R b/modules/Visualization/R/plot_skill_metrics.R index 76dae774..2957f6f4 100644 --- a/modules/Visualization/R/plot_skill_metrics.R +++ b/modules/Visualization/R/plot_skill_metrics.R @@ -169,7 +169,9 @@ plot_skill_metrics <- function(recipe, data_cube, skill_metrics, bar_extra_margin = rep(0.9, 4), extra_margin = rep(1, 4), bar_label_scale = 1.5, - axes_label_scale = 1.3) + axes_label_scale = 1.3, + width = 7,#default i + height = 5) ) } else { # Define function and parameters depending on projection @@ -181,7 +183,7 @@ plot_skill_metrics <- function(recipe, data_cube, skill_metrics, filled.continents = F, brks = brks, cols = cols, col_inf = col_inf, col_sup = col_sup, bar_label_digits = 3, bar_label_scale = 1.5, - axes_label_scale = 1) + axes_label_scale = 1, width = 7, hight = 5) } else { fun <- PlotRobinson common_projections <- c("robinson", "stereographic", "lambert_europe") diff --git a/modules/Visualization/output_size.yml b/modules/Visualization/output_size.yml new file mode 100644 index 00000000..0ed855a3 --- /dev/null +++ b/modules/Visualization/output_size.yml @@ -0,0 +1,12 @@ +region: #units inches + EU: #latmin: 20, latmax: 80, lonmin: -20, lonmax: 40 + PlotEquiMap: + skill_metrics: {width: 6, height: 6} + forecast_ensemble_mean: {width: 6, height: 6} + most_likely_terciles: {width: 7, height: 5} + Projection: + skill_metrics: {width: 8, height: 5} + NA-EU: #Norht Atlantic European region + Mediterranean: + Global: +#... diff --git a/recipe_ecvs_seasonal_oper.yml b/recipe_ecvs_seasonal_oper.yml index d47fd159..f6a7bbe7 100644 --- a/recipe_ecvs_seasonal_oper.yml +++ b/recipe_ecvs_seasonal_oper.yml @@ -47,7 +47,7 @@ Analysis: Visualization: plots: skill_metrics forecast_ensemble_mean most_likely_terciles multi_panel: no - projection: lambert_europe + dots: both ncores: 4 # Optional, int: number of cores, defaults to 1 remove_NAs: # Optional, bool: Whether NAs are removed, defaults to FALSE Output_format: scorecards -- GitLab From d918d658dfb33c47c9c6e5e3bac8c92c00e710ba Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Fri, 4 Aug 2023 17:17:04 +0200 Subject: [PATCH 214/388] Add setting of working directory to launch_SUNSET.sh and modify slurm log output to make it portable --- .../slurm_templates/run_parallel_workflow.sh | 6 +-- launch.sh | 46 ---------------- launch_SUNSET.sh | 52 +++++++++++++++++++ split.R | 12 +++-- 4 files changed, 63 insertions(+), 53 deletions(-) delete mode 100644 launch.sh create mode 100644 launch_SUNSET.sh diff --git a/example_scripts/slurm_templates/run_parallel_workflow.sh b/example_scripts/slurm_templates/run_parallel_workflow.sh index 4d598c9e..7364ee9e 100644 --- a/example_scripts/slurm_templates/run_parallel_workflow.sh +++ b/example_scripts/slurm_templates/run_parallel_workflow.sh @@ -1,11 +1,9 @@ #!/bin/bash #SBATCH -n 12 -#SBATCH -t 04:00:00 +#SBATCH -t 10:00:00 #SBATCH -J SUNSET #SBATCH -C medmem -#SBATCH -e /esarchive/scratch/%u/tmp/auto-s2s-logs/run-%j.err -#SBATCH -o /esarchive/scratch/%u/tmp/auto-s2s-logs/run-%j.out # Slurm directive description: # -n: number of cores @@ -14,6 +12,8 @@ # -C: constraint (e.g. "medmem" for the medium memory nodes) # -e, -o: .err and .out file paths +set -vx + script=$1 atomic_recipe=$2 diff --git a/launch.sh b/launch.sh deleted file mode 100644 index e3abd64f..00000000 --- a/launch.sh +++ /dev/null @@ -1,46 +0,0 @@ -#!/bin/bash - -# set -vx - -# Usage statement -if [[ ( $@ == "--help") || $@ == "-h" ]]; then - echo "Usage: $0 " - exit 0 -fi - -# Check recipe and script -recipe=$1 -script=$2 -# recipe=recipes/tests/recipe_seasonal_example.yml -# script=modules/test_parallel_workflow.R - -if [ ! -f "$recipe" ]; then - echo "Could not file recipe file: $recipe" - exit 0 -fi - -if [ ! -f "$script" ]; then - echo "Could not find script file $script" - exit 0 -fi - -# Define tmp file to store necessary information -tmpfile=$(mktemp /tmp/test_split.XXXXXX) - -# Create outdir and split recipes -source MODULES -Rscript split.R ${recipe} | tee $tmpfile -outdir=$( tail -n 1 $tmpfile | sed 's/"//g' ) -outdir=($outdir) - -rm $tmpfile - -# Create directory for slurm output -logdir=/esarchive/scratch/$(whoami)/tmp/auto-s2s-logs -mkdir -p $logdir -echo "Slurm job logs will be stored in $logdir" - -# Launch one job per atomic recipe -for atomic_recipe in ${outdir[1]}/logs/recipes/atomic_recipe_??.yml; do - sbatch example_scripts/slurm_templates/run_parallel_workflow.sh ${script} ${atomic_recipe} -done diff --git a/launch_SUNSET.sh b/launch_SUNSET.sh new file mode 100644 index 00000000..56367010 --- /dev/null +++ b/launch_SUNSET.sh @@ -0,0 +1,52 @@ +#!/bin/bash + +# Usage statement +if [[ ( $@ == "--help") || $@ == "-h" ]]; then + echo "Usage: $0 " + exit 0 +fi + +# Check recipe and script +recipe=$1 +script=$2 +# recipe=recipes/tests/recipe_seasonal_example.yml +# script=modules/test_parallel_workflow.R + +if [ ! -f "$recipe" ]; then + echo "Could not file recipe file: $recipe" + exit 0 +fi + +if [ ! -f "$script" ]; then + echo "Could not find script file: $script" + exit 0 +fi + +# Define tmp file to store necessary information +tmpfile=$(mktemp ${TMPDIR-/tmp}/SUNSET.XXXXXX) + +# Create outdir and split recipes +source MODULES +Rscript split.R ${recipe} --tmpfile $tmpfile +codedir=$( head -1 $tmpfile | tail -1 ) +outdir=$( head -2 $tmpfile | tail -1 ) + +rm $tmpfile + +# Create directory for slurm output +# logdir=${TMPDIR-/tmp}/SUNSET_slurm_logs_$(whoami)/ +logdir=${codedir}/out-logs/slurm_logs/ +mkdir -p $logdir +echo "Slurm job logs will be stored in $logdir" + +# Launch one job per atomic recipe +cd $codedir +job_number=0 +for atomic_recipe in ${outdir}/logs/recipes/atomic_recipe_??.yml; do + # sbatch example_scripts/slurm_templates/run_parallel_workflow.sh ${script} ${atomic_recipe} + job_number=$(($job_number + 1)) + job_name=$(basename $outdir)_$(printf %02d $job_number) + outfile=${logdir}/run-${job_name}.out + errfile=${logdir}/run-${job_name}.err + sbatch --output=$outfile --error=$errfile example_scripts/slurm_templates/run_parallel_workflow.sh ${script} ${atomic_recipe} +done diff --git a/split.R b/split.R index 2cc0db7f..5b42d986 100755 --- a/split.R +++ b/split.R @@ -9,11 +9,12 @@ configuration is also written in the folder of the specified experiment. Instructions on how to run the experiment will appear in the terminal. Usage: - split.R [--disable_unique_ID] + split.R [--disable_unique_ID] [--tmpfile=] Options: -h --help Show usage. --disable_unique_ID Do not add a unique ID to the output folder name. + --tmpfile= Temporary file to store output and code directories. Handled by launch.sh. Arguments: recipe path to the recipe." @@ -31,9 +32,12 @@ recipe <- prepare_outputs(recipe_file = arguments$recipe, ## TODO: Add autosubmit yes/no to the parameters? run_parameters <- divide_recipe(recipe) + if (recipe$Run$autosubmit) { write_autosubmit_conf(recipe, run_parameters$n_atomic_recipes) -} else { - ## TODO: Return code dir to set it as working directory - run_parameters$outdir +} else if (!is.null(arguments$tmpfile)) { + sink(arguments$tmpfile, append = FALSE) + cat(paste0(recipe$Run$code_dir, "\n")) + cat(paste0(run_parameters$outdir, "\n")) + sink() } -- GitLab From b8dd727847731afd46e47395bda5642c5d1a4f9d Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Fri, 4 Aug 2023 17:23:57 +0200 Subject: [PATCH 215/388] remove script --- run_parallel_workflow.sh | 22 ---------------------- 1 file changed, 22 deletions(-) delete mode 100644 run_parallel_workflow.sh diff --git a/run_parallel_workflow.sh b/run_parallel_workflow.sh deleted file mode 100644 index 4d598c9e..00000000 --- a/run_parallel_workflow.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/bash - -#SBATCH -n 12 -#SBATCH -t 04:00:00 -#SBATCH -J SUNSET -#SBATCH -C medmem -#SBATCH -e /esarchive/scratch/%u/tmp/auto-s2s-logs/run-%j.err -#SBATCH -o /esarchive/scratch/%u/tmp/auto-s2s-logs/run-%j.out - -# Slurm directive description: -# -n: number of cores -# -t: wallclock -# -J: job name -# -C: constraint (e.g. "medmem" for the medium memory nodes) -# -e, -o: .err and .out file paths - -script=$1 -atomic_recipe=$2 - -source MODULES - -Rscript ${script} ${atomic_recipe} -- GitLab From 39ef6faf373ecbd64eb45e12e804f62f28141b6f Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Fri, 4 Aug 2023 17:40:16 +0200 Subject: [PATCH 216/388] Move script --- .../slurm_templates/run_parallel_workflow.sh | 5 ++--- launch_SUNSET.sh | 3 +-- 2 files changed, 3 insertions(+), 5 deletions(-) rename {example_scripts => conf}/slurm_templates/run_parallel_workflow.sh (80%) diff --git a/example_scripts/slurm_templates/run_parallel_workflow.sh b/conf/slurm_templates/run_parallel_workflow.sh similarity index 80% rename from example_scripts/slurm_templates/run_parallel_workflow.sh rename to conf/slurm_templates/run_parallel_workflow.sh index 7364ee9e..530b32d4 100644 --- a/example_scripts/slurm_templates/run_parallel_workflow.sh +++ b/conf/slurm_templates/run_parallel_workflow.sh @@ -1,7 +1,7 @@ #!/bin/bash -#SBATCH -n 12 -#SBATCH -t 10:00:00 +#SBATCH -n 8 +#SBATCH -t 01:00:00 #SBATCH -J SUNSET #SBATCH -C medmem @@ -10,7 +10,6 @@ # -t: wallclock # -J: job name # -C: constraint (e.g. "medmem" for the medium memory nodes) -# -e, -o: .err and .out file paths set -vx diff --git a/launch_SUNSET.sh b/launch_SUNSET.sh index 56367010..febac36e 100644 --- a/launch_SUNSET.sh +++ b/launch_SUNSET.sh @@ -43,10 +43,9 @@ echo "Slurm job logs will be stored in $logdir" cd $codedir job_number=0 for atomic_recipe in ${outdir}/logs/recipes/atomic_recipe_??.yml; do - # sbatch example_scripts/slurm_templates/run_parallel_workflow.sh ${script} ${atomic_recipe} job_number=$(($job_number + 1)) job_name=$(basename $outdir)_$(printf %02d $job_number) outfile=${logdir}/run-${job_name}.out errfile=${logdir}/run-${job_name}.err - sbatch --output=$outfile --error=$errfile example_scripts/slurm_templates/run_parallel_workflow.sh ${script} ${atomic_recipe} + sbatch --output=$outfile --error=$errfile conf/slurm_templates/run_parallel_workflow.sh ${script} ${atomic_recipe} done -- GitLab From d45152fc4d0ad8bf697d2399b152c20845cc9e9e Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Mon, 7 Aug 2023 11:38:08 +0200 Subject: [PATCH 217/388] Add wallclock time and custom directives as args for launch_SUNSET.sh --- conf/slurm_templates/run_parallel_workflow.sh | 6 +- launch_SUNSET.sh | 68 ++++++++++++++++--- 2 files changed, 60 insertions(+), 14 deletions(-) diff --git a/conf/slurm_templates/run_parallel_workflow.sh b/conf/slurm_templates/run_parallel_workflow.sh index 530b32d4..d821d158 100644 --- a/conf/slurm_templates/run_parallel_workflow.sh +++ b/conf/slurm_templates/run_parallel_workflow.sh @@ -1,15 +1,11 @@ #!/bin/bash #SBATCH -n 8 -#SBATCH -t 01:00:00 -#SBATCH -J SUNSET -#SBATCH -C medmem +#SBATCH -J SUNSET_verification # Slurm directive description: # -n: number of cores -# -t: wallclock # -J: job name -# -C: constraint (e.g. "medmem" for the medium memory nodes) set -vx diff --git a/launch_SUNSET.sh b/launch_SUNSET.sh index febac36e..eefb33cf 100644 --- a/launch_SUNSET.sh +++ b/launch_SUNSET.sh @@ -2,24 +2,71 @@ # Usage statement if [[ ( $@ == "--help") || $@ == "-h" ]]; then - echo "Usage: $0 " + echo "Usage: $0 --wallclock= --custom_directives=" exit 0 fi -# Check recipe and script +function usage +{ + echo "Usage: $0 --wallclock= --custom_directives=" + echo " " + echo " : Path to the SUNSET recipe." + echo " " + echo " : Path to the user-defined script." + echo " " + echo " --wallclock=: Maximum execution time for the jobs." + echo " Default is 02:00:00." + echo " " + echo " --custom_directives=: Custom directives sbatch." + echo " E.g. '--constraint=medmem'." +} + + +# Assign arguments recipe=$1 script=$2 # recipe=recipes/tests/recipe_seasonal_example.yml # script=modules/test_parallel_workflow.R +for i in "$@"; do + case $i in + --wallclock*) + export wallclock=`echo $1 | sed -e 's/^[^=]*=//g'` + shift + ;; + --custom_directives*) + export custom_directives=`echo $1 | sed -e 's/^[^=]*=//g'` + shift + ;; + -h|--help) + usage + exit 0 + shift + ;; + *) + shift + ;; + esac +done +# Check recipe if [ ! -f "$recipe" ]; then - echo "Could not file recipe file: $recipe" - exit 0 + echo "Could not find the recipe file: $recipe" + usage + exit 1 fi - +# Check script if [ ! -f "$script" ]; then - echo "Could not find script file: $script" - exit 0 + echo "Could not find the script file: $script" + usage + exit 1 +fi +# Assign default wallclock time if not specified +if [ -z "$wallclock" ]; then + wallclock="02:00:00" +fi +# Assign empty custom directives if not specified +if [ -z "$custom_directives" ]; then + custom_directives="" fi # Define tmp file to store necessary information @@ -28,13 +75,14 @@ tmpfile=$(mktemp ${TMPDIR-/tmp}/SUNSET.XXXXXX) # Create outdir and split recipes source MODULES Rscript split.R ${recipe} --tmpfile $tmpfile +# Retrieve working directory codedir=$( head -1 $tmpfile | tail -1 ) +# Retrieve output directory outdir=$( head -2 $tmpfile | tail -1 ) rm $tmpfile # Create directory for slurm output -# logdir=${TMPDIR-/tmp}/SUNSET_slurm_logs_$(whoami)/ logdir=${codedir}/out-logs/slurm_logs/ mkdir -p $logdir echo "Slurm job logs will be stored in $logdir" @@ -47,5 +95,7 @@ for atomic_recipe in ${outdir}/logs/recipes/atomic_recipe_??.yml; do job_name=$(basename $outdir)_$(printf %02d $job_number) outfile=${logdir}/run-${job_name}.out errfile=${logdir}/run-${job_name}.err - sbatch --output=$outfile --error=$errfile conf/slurm_templates/run_parallel_workflow.sh ${script} ${atomic_recipe} + sbatch --output=$outfile --error=$errfile --time=$wallclock $custom_directives conf/slurm_templates/run_parallel_workflow.sh ${script} ${atomic_recipe} done + +## TODO: Retrieve jobids and list them as dependencies for scorecards job? -- GitLab From 5dff81461b61cd3c0664daab824dd9e7f1a168af Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Thu, 10 Aug 2023 11:50:11 +0200 Subject: [PATCH 218/388] Add bug report template --- .gitlab/issue_templates/bug_template.md | 29 +++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 .gitlab/issue_templates/bug_template.md diff --git a/.gitlab/issue_templates/bug_template.md b/.gitlab/issue_templates/bug_template.md new file mode 100644 index 00000000..f4a8b035 --- /dev/null +++ b/.gitlab/issue_templates/bug_template.md @@ -0,0 +1,29 @@ +(This is a template to report errors and bugs. Please replace the text in [brackets] with the corresponding information about the bug. If any field is not relevant, briefly state why. ) + +Hi @vagudets, + +#### Expected Behavior +[Briefly explain what you were trying to do and what you wanted/expected to happen.] + +#### Current Behavior +[Explain what actually happened. If you got any error messages, paste them here. Remember to use code blocks to format the messages correctly, so that they are easy to read.] + +#### Possible Solutions? +[If you have an idea of what could be causing the bug, how to solve it, or an example with code that gets the expected behavior, write it here.] + +#### Steps To Reproduce +- Recipe: +[The path to the recipe you were using.] + +- Script: +[The script you were using. Paste it in a code block or include a link. If the script is long or has a lot of steps, please reduce it to the minimal code necessary to reproduce the problem, and open a new R session to test that you can run it and the error is the same before you open the issue.] + +- Branch/SUNSET Version: +[The name of the branch you are using. If the branch is only in your local copy of the repository, please make sure that you include the path.] + +- Environment: +[Where and how you were running SUNSET. On your Workstation, Nord3v2, an external HPC machine? Were you using the modules or the conda environment?] + +#### Other Relevant Information +[Feel free to include screenshots (if the bug is related to plots), paths to output files, small examples, or any other context or information that might seem relevant.] + -- GitLab From 74b1ff54e8f9a9e2939cbf3cd3b8ea8d045bc1cc Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Thu, 10 Aug 2023 11:57:51 +0200 Subject: [PATCH 219/388] Add code block example --- .gitlab/issue_templates/bug_template.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.gitlab/issue_templates/bug_template.md b/.gitlab/issue_templates/bug_template.md index f4a8b035..dee99dd3 100644 --- a/.gitlab/issue_templates/bug_template.md +++ b/.gitlab/issue_templates/bug_template.md @@ -8,6 +8,12 @@ Hi @vagudets, #### Current Behavior [Explain what actually happened. If you got any error messages, paste them here. Remember to use code blocks to format the messages correctly, so that they are easy to read.] +``` +Example: +[ERROR!]: Something went really wrong! +This is the error message that showed up on the terminal. +``` + #### Possible Solutions? [If you have an idea of what could be causing the bug, how to solve it, or an example with code that gets the expected behavior, write it here.] -- GitLab From 50727e742f65548e49a364f376d8b10a5a3747af Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Thu, 10 Aug 2023 11:58:17 +0200 Subject: [PATCH 220/388] Make bug template the default --- .gitlab/issue_templates/{bug_template.md => default.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .gitlab/issue_templates/{bug_template.md => default.md} (100%) diff --git a/.gitlab/issue_templates/bug_template.md b/.gitlab/issue_templates/default.md similarity index 100% rename from .gitlab/issue_templates/bug_template.md rename to .gitlab/issue_templates/default.md -- GitLab From 01fcad0ca0a2d60f1ab0349b475f580b16e552f0 Mon Sep 17 00:00:00 2001 From: nperez Date: Mon, 21 Aug 2023 15:32:09 +0200 Subject: [PATCH 221/388] Include parameter ncores --- modules/Units/R/deaccumulate.R | 4 ++-- modules/Units/R/transform_units_precipitation.R | 14 +++++++------- modules/Units/R/units_transform.R | 5 +++-- modules/Units/Units.R | 4 +++- 4 files changed, 15 insertions(+), 12 deletions(-) diff --git a/modules/Units/R/deaccumulate.R b/modules/Units/R/deaccumulate.R index 474b7382..e1fcd6f5 100644 --- a/modules/Units/R/deaccumulate.R +++ b/modules/Units/R/deaccumulate.R @@ -1,6 +1,6 @@ -deaccumulate <- function(data) { +deaccumulate <- function(data, ncores = NULL) { data[[1]]$data <- Apply(list(data[[1]]$data), target_dim = 'time', fun = function(x) { c(x[1], diff(x)) - })$output1 + }, ncores = ncores)$output1 } diff --git a/modules/Units/R/transform_units_precipitation.R b/modules/Units/R/transform_units_precipitation.R index 9de12c41..20921147 100644 --- a/modules/Units/R/transform_units_precipitation.R +++ b/modules/Units/R/transform_units_precipitation.R @@ -1,5 +1,5 @@ transform_units_precipitation <- function(data, original_units, new_units, - var_name, freq) { + var_name, freq, ncores = NULL) { if (original_units == "ms-1") { if (new_units == "mm") { data[[1]]$data <- data[[1]]$data * 3600 * 24 * 1000 @@ -61,12 +61,12 @@ transform_units_precipitation <- function(data, original_units, new_units, } # If monthly data compute the total monthly accumlated if (freq == "monthly_mean") { # could it not be mean? - data[[1]] <- Apply(list(data[[1]]$data, data[[1]]$attrs$Dates), - target_dim = 'time', fun = function(x, y) { - date <- as.Date(y, "%Y-%m-%d") - num_days <- lubridate::days_in_month(date) - res <- x * num_days - })$output1 + data[[1]]$data <- Apply(list(data[[1]]$data, data[[1]]$attrs$Dates), + target_dim = 'time', fun = function(x, y) { + date <- as.Date(y, "%Y-%m-%d") + num_days <- lubridate::days_in_month(date) + res <- x * num_days + }, ncores = ncores)$output1 } return(data) } diff --git a/modules/Units/R/units_transform.R b/modules/Units/R/units_transform.R index 01008524..a9232647 100644 --- a/modules/Units/R/units_transform.R +++ b/modules/Units/R/units_transform.R @@ -1,6 +1,7 @@ # data is a s2dv_cube object # units as character -units_transform <- function(data, orig_units, user_units, var_name, freq) { +units_transform <- function(data, orig_units, user_units, var_name, freq, + ncores = NULL) { var_name <- unlist(var_name) if (orig_units %in% c("c", "k")) { if (user_units %in% c("c", "k")) { @@ -12,7 +13,7 @@ units_transform <- function(data, orig_units, user_units, var_name, freq) { } else if (orig_units %in% c("ms-1", "kgm-2s-1", "mm", "m")) { if (user_units %in% c("ms-1", "kgm-2s-1", "mm", "m")) { trans <- transform_units_precipitation(data, orig_units, user_units, - var_name, freq) + var_name, freq, ncores = ncores) } else { stop("Transformation precipitation units not available.") } diff --git a/modules/Units/Units.R b/modules/Units/Units.R index bd9f9045..386730f5 100644 --- a/modules/Units/Units.R +++ b/modules/Units/Units.R @@ -8,6 +8,7 @@ Units <- function(recipe, data) { # from recipe read the user defined units # from data the original units # deaccumulate option for CDS accumulated variables? + ncores <- recipe$Analysis$ncores ## Do we need to convert other than ECVs? var_names <- lapply(data, function(x) {x$attrs$Variable$varName}) freq <- recipe$Analysis$Variable$freq @@ -42,7 +43,8 @@ Units <- function(recipe, data) { result <- units_transform(data[x], orig_units = orig_units[[x]], user_units = user_units, - var_names[x], freq = freq) + var_names[x], freq = freq, + ncores = ncores) } else { result <- data[x] } -- GitLab From 4755551c544be823b5d3885d80e4b76e505dd611 Mon Sep 17 00:00:00 2001 From: nperez Date: Mon, 21 Aug 2023 17:49:56 +0200 Subject: [PATCH 222/388] Problem with second metric --- modules/Visualization/R/plot_skill_metrics.R | 10 +++++++--- modules/Visualization/Visualization.R | 17 ++++++++++++++--- modules/Visualization/output_size.yml | 5 +++-- recipe_ecvs_seasonal_oper.yml | 2 +- recipe_tas_seasonal_oper.yml | 5 +---- 5 files changed, 26 insertions(+), 13 deletions(-) diff --git a/modules/Visualization/R/plot_skill_metrics.R b/modules/Visualization/R/plot_skill_metrics.R index 2957f6f4..e01099d7 100644 --- a/modules/Visualization/R/plot_skill_metrics.R +++ b/modules/Visualization/R/plot_skill_metrics.R @@ -1,7 +1,7 @@ library(stringr) plot_skill_metrics <- function(recipe, data_cube, skill_metrics, - outdir, significance = F) { + outdir, significance = F, output_conf) { # recipe: Auto-S2S recipe # archive: Auto-S2S archive # data_cube: s2dv_cube object with the corresponding hindcast data @@ -44,7 +44,6 @@ plot_skill_metrics <- function(recipe, data_cube, skill_metrics, diverging_palette <- "bluered" sequential_palette <- "Reds" } - # Group different metrics by type skill_scores <- c("rpss", "bss90", "bss10", "frpss", "crpss", "mean_bias_ss", "enscorr", "rpss_specs", "bss90_specs", "bss10_specs", @@ -177,13 +176,16 @@ plot_skill_metrics <- function(recipe, data_cube, skill_metrics, # Define function and parameters depending on projection if (projection == 'cylindrical_equidistant') { fun <- PlotEquiMap + output_conf <- output_conf$PlotEquiMap$skill_metric base_args <- list(var = NULL, dots = NULL, lon = longitude, lat = latitude, dot_symbol = 20, title_scale = 0.6, filled.continents = F, brks = brks, cols = cols, col_inf = col_inf, col_sup = col_sup, bar_label_digits = 3, bar_label_scale = 1.5, - axes_label_scale = 1, width = 7, hight = 5) + axes_label_scale = 1, width = 7, height = 5) + base_args[names(output_conf)] <- output_conf +print(name) } else { fun <- PlotRobinson common_projections <- c("robinson", "stereographic", "lambert_europe") @@ -231,6 +233,8 @@ plot_skill_metrics <- function(recipe, data_cube, skill_metrics, } fileout <- paste0(outfile, "_ft", forecast_time, ".png") # Plot + print(name) + do.call(fun, args = c(base_args, list(toptitle = toptitle, diff --git a/modules/Visualization/Visualization.R b/modules/Visualization/Visualization.R index 5fb3b946..aacb9ef9 100644 --- a/modules/Visualization/Visualization.R +++ b/modules/Visualization/Visualization.R @@ -15,7 +15,8 @@ plot_data <- function(recipe, data, skill_metrics = NULL, probabilities = NULL, - significance = F) { + significance = F, + output_conf = NULL) { # Try to produce and save several basic plots. # recipe: the auto-s2s recipe as read by read_yaml() # data: list containing the hcst, obs and (optional) fcst s2dv_cube objects @@ -23,7 +24,17 @@ plot_data <- function(recipe, # s2dv_cube objects # skill_metrics: list of arrays containing the computed skill metrics # significance: Bool. Whether to include significance dots where applicable - + if (is.null(output_conf)) { + output_conf <- read_yaml("modules/Visualization/output_size.yml")$region + output_conf <- output_conf[[recipe$Analysis$Region[[1]]$name]] + if (is.null(output_conf)) { + stop("Region not found in the ouput_conf file") # warning? + } + } else{ + if (is.list(output_conf)) { + warning("Shape of the list of configuration?") + } + } plots <- strsplit(recipe$Analysis$Workflow$Visualization$plots, ", | |,")[[1]] recipe$Run$output_dir <- paste0(recipe$Run$output_dir, "/plots/") ## TODO: Sort this out @@ -47,7 +58,7 @@ plot_data <- function(recipe, if ("skill_metrics" %in% plots) { if (!is.null(skill_metrics)) { plot_skill_metrics(recipe, data$hcst, skill_metrics, outdir, - significance) + significance, output_conf) } else { error(recipe$Run$logger, paste0("The skill metric plots have been requested, but the ", diff --git a/modules/Visualization/output_size.yml b/modules/Visualization/output_size.yml index 0ed855a3..920ecdf0 100644 --- a/modules/Visualization/output_size.yml +++ b/modules/Visualization/output_size.yml @@ -1,12 +1,13 @@ region: #units inches EU: #latmin: 20, latmax: 80, lonmin: -20, lonmax: 40 PlotEquiMap: - skill_metrics: {width: 6, height: 6} + skill_metrics: {width: 6, height: 6, axes_label_scale: 0.8, bar_label_scale: 1} forecast_ensemble_mean: {width: 6, height: 6} most_likely_terciles: {width: 7, height: 5} + Multipanel: Projection: skill_metrics: {width: 8, height: 5} NA-EU: #Norht Atlantic European region Mediterranean: Global: -#... +# Add other regions diff --git a/recipe_ecvs_seasonal_oper.yml b/recipe_ecvs_seasonal_oper.yml index f6a7bbe7..898356ce 100644 --- a/recipe_ecvs_seasonal_oper.yml +++ b/recipe_ecvs_seasonal_oper.yml @@ -21,7 +21,7 @@ Analysis: ftime_min: 1 # Mandatory, int: First leadtime time step in months ftime_max: 6 # Mandatory, int: Last leadtime time step in months Region: - - {name: "UE", latmin: 20, latmax: 80, lonmin: -20, lonmax: 40} + - {name: "EU", latmin: 20, latmax: 80, lonmin: -20, lonmax: 40} Regrid: method: bilinear # Mandatory, str: Interpolation method. See docu. type: "to_system" diff --git a/recipe_tas_seasonal_oper.yml b/recipe_tas_seasonal_oper.yml index 75918265..8bfca789 100644 --- a/recipe_tas_seasonal_oper.yml +++ b/recipe_tas_seasonal_oper.yml @@ -21,10 +21,7 @@ Analysis: ftime_min: 1 # Mandatory, int: First leadtime time step in months ftime_max: 6 # Mandatory, int: Last leadtime time step in months Region: - latmin: 20 # Mandatory, int: minimum latitude - latmax: 80 # Mandatory, int: maximum latitude - lonmin: -20 # Mandatory, int: minimum longitude - lonmax: 40 # Mandatory, int: maximum longitude + - {name: "EU", latmin: 20, latmax: 80, lonmin: -20, lonmax: 40} Regrid: method: bilinear # Mandatory, str: Interpolation method. See docu. type: "to_system" -- GitLab From ca60c1e3db0b858a7f605a35d8ae618f3d7c8afe Mon Sep 17 00:00:00 2001 From: nperez Date: Tue, 22 Aug 2023 18:18:28 +0200 Subject: [PATCH 223/388] first working version configuration --- .../R/plot_most_likely_terciles_map.R | 44 +++++++++++-------- modules/Visualization/R/plot_skill_metrics.R | 7 ++- modules/Visualization/Visualization.R | 11 ++--- modules/Visualization/output_size.yml | 12 +++-- recipe_prlr_seasonal_oper.yml | 5 +-- recipe_tas_seasonal_oper.yml | 6 ++- 6 files changed, 50 insertions(+), 35 deletions(-) diff --git a/modules/Visualization/R/plot_most_likely_terciles_map.R b/modules/Visualization/R/plot_most_likely_terciles_map.R index 4952a90e..803882d7 100644 --- a/modules/Visualization/R/plot_most_likely_terciles_map.R +++ b/modules/Visualization/R/plot_most_likely_terciles_map.R @@ -9,7 +9,8 @@ plot_most_likely_terciles <- function(recipe, probabilities, mask, dots, - outdir) { + outdir, + output_conf) { ## TODO: Add 'anomaly' to plot title # Abort if frequency is daily @@ -126,6 +127,23 @@ plot_most_likely_terciles <- function(recipe, triangle_ends = c(F, F)) # , width = 11, height = 8) ) } else { + output_configuration <- output_conf$PlotEquiMap$most_likely_terciles + base_args <- list(cat_dim = 'bin', + probs = NULL, + lon = longitude, lat = latitude, + coast_width = 1.5, + mask = NULL, + dots = NULL, + col_mask = 'antiquewhite', + cols = cols, + title_scale = 1, + legend_scale = 0.8, + cex_bar_titles = 0.9, + bar_label_digits = 2, + bar_label_scale = 0.7, + axes_label_scale = 1.1, + triangle_ends = c(F, F) , width = 10, height = 8) + base_args[names(output_configuration)] <- output_configuration for (i in 1:length(months)) { # Get forecast time label forecast_time <- match(months[i], month.name) - init_month + 1 @@ -155,23 +173,13 @@ plot_most_likely_terciles <- function(recipe, "%d-%m-%Y")) # Plot fileout <- paste0(outfile, "_ft", forecast_time, ".png") - PlotMostLikelyQuantileMap(cat_dim = 'bin', - probs = i_var_probs[i, , , ], - lon = longitude, lat = latitude, - coast_width = 1.5, - mask = mask_i, - dots = dots_i, - col_mask = 'antiquewhite', - cols = cols, - title_scale = 1, - legend_scale = 0.8, - cex_bar_titles = 0.9, - toptitle = toptitle, - fileout = fileout, - bar_label_digits = 2, - bar_label_scale = 0.7, - axes_label_scale = 1.1, - triangle_ends = c(F, F) , width = 10, height = 8) + base_args$probs <- i_var_probs[i, , , ] + base_args$mask <- mask_i + base_args$dots <- dots_i + do.call(PlotMostLikelyQuantileMap, + args = c(base_args, + list(toptitle = toptitle, + fileout = fileout))) } } } diff --git a/modules/Visualization/R/plot_skill_metrics.R b/modules/Visualization/R/plot_skill_metrics.R index e01099d7..3261dee1 100644 --- a/modules/Visualization/R/plot_skill_metrics.R +++ b/modules/Visualization/R/plot_skill_metrics.R @@ -176,7 +176,7 @@ plot_skill_metrics <- function(recipe, data_cube, skill_metrics, # Define function and parameters depending on projection if (projection == 'cylindrical_equidistant') { fun <- PlotEquiMap - output_conf <- output_conf$PlotEquiMap$skill_metric + output_configuration <- output_conf$PlotEquiMap$skill_metric base_args <- list(var = NULL, dots = NULL, lon = longitude, lat = latitude, dot_symbol = 20, title_scale = 0.6, @@ -184,8 +184,7 @@ plot_skill_metrics <- function(recipe, data_cube, skill_metrics, col_inf = col_inf, col_sup = col_sup, bar_label_digits = 3, bar_label_scale = 1.5, axes_label_scale = 1, width = 7, height = 5) - base_args[names(output_conf)] <- output_conf -print(name) + base_args[names(output_configuration)] <- output_configuration } else { fun <- PlotRobinson common_projections <- c("robinson", "stereographic", "lambert_europe") @@ -194,6 +193,7 @@ print(name) } else { target_proj <- projection } + ## TODO: handle output_conf base_args <- list(data = NULL, mask = NULL, lon = longitude, lat = latitude, lon_dim = 'longitude', lat_dim = 'latitude', @@ -233,7 +233,6 @@ print(name) } fileout <- paste0(outfile, "_ft", forecast_time, ".png") # Plot - print(name) do.call(fun, args = c(base_args, diff --git a/modules/Visualization/Visualization.R b/modules/Visualization/Visualization.R index aacb9ef9..f427afc7 100644 --- a/modules/Visualization/Visualization.R +++ b/modules/Visualization/Visualization.R @@ -25,8 +25,9 @@ plot_data <- function(recipe, # skill_metrics: list of arrays containing the computed skill metrics # significance: Bool. Whether to include significance dots where applicable if (is.null(output_conf)) { - output_conf <- read_yaml("modules/Visualization/output_size.yml")$region - output_conf <- output_conf[[recipe$Analysis$Region[[1]]$name]] + output_conf <- read_yaml("modules/Visualization/output_size.yml", + eval.exp = TRUE)$region + output_conf <- output_conf[[recipe$Analysis$Region$name]] if (is.null(output_conf)) { stop("Region not found in the ouput_conf file") # warning? } @@ -96,7 +97,7 @@ plot_data <- function(recipe, probabilities, mask = NULL, dots = NULL, - outdir) + outdir, output_conf = output_conf) } # Plots with masked terciles if (recipe$Analysis$Workflow$Visualization$mask_terciles %in% @@ -114,7 +115,7 @@ plot_data <- function(recipe, probabilities, mask = skill_metrics$rpss, dots = NULL, - outdir) + outdir, output_conf = output_conf) } } # Plots with dotted terciles @@ -132,7 +133,7 @@ plot_data <- function(recipe, probabilities, mask = NULL, dots = skill_metrics$rpss, - outdir) + outdir, output_conf = output_conf) } } } else { diff --git a/modules/Visualization/output_size.yml b/modules/Visualization/output_size.yml index 920ecdf0..5c1a08e6 100644 --- a/modules/Visualization/output_size.yml +++ b/modules/Visualization/output_size.yml @@ -1,9 +1,15 @@ region: #units inches EU: #latmin: 20, latmax: 80, lonmin: -20, lonmax: 40 PlotEquiMap: - skill_metrics: {width: 6, height: 6, axes_label_scale: 0.8, bar_label_scale: 1} - forecast_ensemble_mean: {width: 6, height: 6} - most_likely_terciles: {width: 7, height: 5} + skill_metrics: + width: 9 + height: 8.5 + axes_label_scale: 0.8 + bar_label_scale: 1.2 + bar_extra_margin: !expr c(2,1,0.5,1) + forecast_ensemble_mean: {width: 9, height: 8.5, + axes_label_scale: 0.8, bar_label_scale: 1} + most_likely_terciles: {width: 9, height: 9} Multipanel: Projection: skill_metrics: {width: 8, height: 5} diff --git a/recipe_prlr_seasonal_oper.yml b/recipe_prlr_seasonal_oper.yml index fb6d1a1c..ae7acedb 100644 --- a/recipe_prlr_seasonal_oper.yml +++ b/recipe_prlr_seasonal_oper.yml @@ -21,10 +21,7 @@ Analysis: ftime_min: 1 # Mandatory, int: First leadtime time step in months ftime_max: 6 # Mandatory, int: Last leadtime time step in months Region: - latmin: 20 # Mandatory, int: minimum latitude - latmax: 80 # Mandatory, int: maximum latitude - lonmin: -20 # Mandatory, int: minimum longitude - lonmax: 40 # Mandatory, int: maximum longitude + - {name: "EU", latmin: 20, latmax: 80, lonmin: -20, lonmax: 40} Regrid: method: bilinear # Mandatory, str: Interpolation method. See docu. type: "to_system" diff --git a/recipe_tas_seasonal_oper.yml b/recipe_tas_seasonal_oper.yml index 8bfca789..13b6a0b9 100644 --- a/recipe_tas_seasonal_oper.yml +++ b/recipe_tas_seasonal_oper.yml @@ -21,7 +21,11 @@ Analysis: ftime_min: 1 # Mandatory, int: First leadtime time step in months ftime_max: 6 # Mandatory, int: Last leadtime time step in months Region: - - {name: "EU", latmin: 20, latmax: 80, lonmin: -20, lonmax: 40} + name: "EU" + latmin: 20 + latmax: 80 + lonmin: -20 + lonmax: 40 Regrid: method: bilinear # Mandatory, str: Interpolation method. See docu. type: "to_system" -- GitLab From ca9e2a808e14962595d7b719512c58e9216f8210 Mon Sep 17 00:00:00 2001 From: nperez Date: Wed, 23 Aug 2023 15:59:32 +0200 Subject: [PATCH 224/388] conf structure --- modules/Visualization/output_size.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/Visualization/output_size.yml b/modules/Visualization/output_size.yml index 5c1a08e6..c36b2d60 100644 --- a/modules/Visualization/output_size.yml +++ b/modules/Visualization/output_size.yml @@ -11,8 +11,8 @@ region: #units inches axes_label_scale: 0.8, bar_label_scale: 1} most_likely_terciles: {width: 9, height: 9} Multipanel: - Projection: - skill_metrics: {width: 8, height: 5} + Robinson: + skill_metrics: {width: 8, height: 5} NA-EU: #Norht Atlantic European region Mediterranean: Global: -- GitLab From 731451f340fe2266dff380cadce8ce05f7c22d5b Mon Sep 17 00:00:00 2001 From: nperez Date: Wed, 23 Aug 2023 17:45:46 +0200 Subject: [PATCH 225/388] ensemble mean adjusted --- modules/Visualization/R/plot_ensemble_mean.R | 8 ++++---- modules/Visualization/R/plot_most_likely_terciles_map.R | 2 ++ modules/Visualization/R/plot_skill_metrics.R | 3 ++- modules/Visualization/Visualization.R | 4 ++-- modules/Visualization/output_size.yml | 8 +++++--- recipe_prlr_seasonal_oper.yml | 6 +++++- 6 files changed, 20 insertions(+), 11 deletions(-) diff --git a/modules/Visualization/R/plot_ensemble_mean.R b/modules/Visualization/R/plot_ensemble_mean.R index 07e35706..301fd2a5 100644 --- a/modules/Visualization/R/plot_ensemble_mean.R +++ b/modules/Visualization/R/plot_ensemble_mean.R @@ -1,5 +1,4 @@ -plot_ensemble_mean <- function(recipe, fcst, outdir) { - +plot_ensemble_mean <- function(recipe, fcst, outdir, output_conf) { ## TODO: Add 'anomaly' to plot title # Abort if frequency is daily if (recipe$Analysis$Variables$freq == "daily_mean") { @@ -19,7 +18,6 @@ plot_ensemble_mean <- function(recipe, fcst, outdir) { } else { projection <- "cylindrical_equidistant" } - # Compute ensemble mean ensemble_mean <- s2dv::MeanDims(fcst$data, 'ensemble') # Loop over variable dimension @@ -94,12 +92,14 @@ plot_ensemble_mean <- function(recipe, fcst, outdir) { # Define function and parameters depending on projection if (projection == 'cylindrical_equidistant') { fun <- PlotEquiMap + output_configuration <- output_conf$PlotEquiMap$forecast_ensemble_mean base_args <- list(var = NULL, dots = NULL, lon = longitude, lat = latitude, dot_symbol = 20, title_scale = 0.6, filled.continents = F, brks = brks, cols = cols, bar_label_digits = 4, bar_label_scale = 1.5, axes_label_scale = 1) + base_args[names(output_configuration)] <- output_configuration } else { fun <- PlotRobinson common_projections <- c("robinson", "stereographic", "lambert_europe") @@ -147,5 +147,5 @@ plot_ensemble_mean <- function(recipe, fcst, outdir) { } } info(recipe$Run$logger, - "##### SKILL METRIC PLOTS SAVED TO OUTPUT DIRECTORY #####") + "##### FORECAST ENSEMBLE MEAN PLOTS SAVED TO OUTPUT DIRECTORY #####") } diff --git a/modules/Visualization/R/plot_most_likely_terciles_map.R b/modules/Visualization/R/plot_most_likely_terciles_map.R index 803882d7..33a19765 100644 --- a/modules/Visualization/R/plot_most_likely_terciles_map.R +++ b/modules/Visualization/R/plot_most_likely_terciles_map.R @@ -134,6 +134,8 @@ plot_most_likely_terciles <- function(recipe, coast_width = 1.5, mask = NULL, dots = NULL, + dot_symbol = 4, + dot_size = 1, col_mask = 'antiquewhite', cols = cols, title_scale = 1, diff --git a/modules/Visualization/R/plot_skill_metrics.R b/modules/Visualization/R/plot_skill_metrics.R index 3261dee1..a2986944 100644 --- a/modules/Visualization/R/plot_skill_metrics.R +++ b/modules/Visualization/R/plot_skill_metrics.R @@ -179,7 +179,8 @@ plot_skill_metrics <- function(recipe, data_cube, skill_metrics, output_configuration <- output_conf$PlotEquiMap$skill_metric base_args <- list(var = NULL, dots = NULL, lon = longitude, lat = latitude, - dot_symbol = 20, title_scale = 0.6, + dot_symbol = 20, dot_size = 1, + title_scale = 0.6, filled.continents = F, brks = brks, cols = cols, col_inf = col_inf, col_sup = col_sup, bar_label_digits = 3, bar_label_scale = 1.5, diff --git a/modules/Visualization/Visualization.R b/modules/Visualization/Visualization.R index f427afc7..5d4e4080 100644 --- a/modules/Visualization/Visualization.R +++ b/modules/Visualization/Visualization.R @@ -59,7 +59,7 @@ plot_data <- function(recipe, if ("skill_metrics" %in% plots) { if (!is.null(skill_metrics)) { plot_skill_metrics(recipe, data$hcst, skill_metrics, outdir, - significance, output_conf) + significance, output_conf = output_conf) } else { error(recipe$Run$logger, paste0("The skill metric plots have been requested, but the ", @@ -70,7 +70,7 @@ plot_data <- function(recipe, # Plot forecast ensemble mean if ("forecast_ensemble_mean" %in% plots) { if (!is.null(data$fcst)) { - plot_ensemble_mean(recipe, data$fcst, outdir) + plot_ensemble_mean(recipe, data$fcst, outdir, output_conf = output_conf) } else { error(recipe$Run$logger, paste0("The forecast ensemble mean plot has been requested, but ", diff --git a/modules/Visualization/output_size.yml b/modules/Visualization/output_size.yml index c36b2d60..62816167 100644 --- a/modules/Visualization/output_size.yml +++ b/modules/Visualization/output_size.yml @@ -2,14 +2,16 @@ region: #units inches EU: #latmin: 20, latmax: 80, lonmin: -20, lonmax: 40 PlotEquiMap: skill_metrics: - width: 9 + width: 8.5 height: 8.5 axes_label_scale: 0.8 bar_label_scale: 1.2 bar_extra_margin: !expr c(2,1,0.5,1) - forecast_ensemble_mean: {width: 9, height: 8.5, + dot_size: 1.7 + dot_symbol: 4 + forecast_ensemble_mean: {width: 8.5, height: 8.5, axes_label_scale: 0.8, bar_label_scale: 1} - most_likely_terciles: {width: 9, height: 9} + most_likely_terciles: {width: 8.5, height: 9, dot_size: 1.7} Multipanel: Robinson: skill_metrics: {width: 8, height: 5} diff --git a/recipe_prlr_seasonal_oper.yml b/recipe_prlr_seasonal_oper.yml index ae7acedb..64dc7fe8 100644 --- a/recipe_prlr_seasonal_oper.yml +++ b/recipe_prlr_seasonal_oper.yml @@ -21,7 +21,11 @@ Analysis: ftime_min: 1 # Mandatory, int: First leadtime time step in months ftime_max: 6 # Mandatory, int: Last leadtime time step in months Region: - - {name: "EU", latmin: 20, latmax: 80, lonmin: -20, lonmax: 40} + name: "EU" + latmin: 20 + latmax: 80 + lonmin: -20 + lonmax: 40 Regrid: method: bilinear # Mandatory, str: Interpolation method. See docu. type: "to_system" -- GitLab From 91f1fd338fa3d7602df3c1c7d2c295d662e2d0fd Mon Sep 17 00:00:00 2001 From: nperez Date: Wed, 23 Aug 2023 18:02:05 +0200 Subject: [PATCH 226/388] adjustments forecast ensemble mean --- modules/Visualization/R/plot_ensemble_mean.R | 11 ++++++++--- modules/Visualization/output_size.yml | 10 +++++++--- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/modules/Visualization/R/plot_ensemble_mean.R b/modules/Visualization/R/plot_ensemble_mean.R index 301fd2a5..d49d8902 100644 --- a/modules/Visualization/R/plot_ensemble_mean.R +++ b/modules/Visualization/R/plot_ensemble_mean.R @@ -67,6 +67,7 @@ plot_ensemble_mean <- function(recipe, fcst, outdir, output_conf) { "\n", "Forecast Ensemble Mean / ", "Init.: ", i_syear) months <- lubridate::month(fcst$attrs$Dates[1, 1, which(start_date == i_syear), ], label = T, abb = F) + years <- lubridate::year(fcst$attrs$Dates[1, 1, which(start_date == i_syear), ]) if (recipe$Analysis$Workflow$Visualization$multi_panel) { # Define name of output file and titles @@ -123,9 +124,13 @@ plot_ensemble_mean <- function(recipe, fcst, outdir, output_conf) { } forecast_time <- sprintf("%02d", forecast_time) # Define plot title - toptitle <- paste(system_name, "/", - str_to_title(var_long_name), - "\n", "Forecast Ensemble Mean /", months[i]) + toptitle <- paste0(system_name, " / ", + str_to_title(var_long_name), + "\n", "Ensemble Mean / ", + months[i], " ", years[i], + " / Start date: ", + format(as.Date(i_syear, format="%Y%m%d"), + "%d-%m-%Y")) # Define caption if (identical(fun, PlotRobinson)) { ## TODO: Customize technical details diff --git a/modules/Visualization/output_size.yml b/modules/Visualization/output_size.yml index 62816167..fcad0175 100644 --- a/modules/Visualization/output_size.yml +++ b/modules/Visualization/output_size.yml @@ -9,9 +9,13 @@ region: #units inches bar_extra_margin: !expr c(2,1,0.5,1) dot_size: 1.7 dot_symbol: 4 - forecast_ensemble_mean: {width: 8.5, height: 8.5, - axes_label_scale: 0.8, bar_label_scale: 1} - most_likely_terciles: {width: 8.5, height: 9, dot_size: 1.7} + forecast_ensemble_mean: + width: 8.5 + height: 8.5 + axes_label_scale: 0.8 + bar_label_scale: 1.2 + bar_extra_margin: !expr c(2,1,0.5,1) + most_likely_terciles: {width: 8.5, height: 9, dot_size: 2} Multipanel: Robinson: skill_metrics: {width: 8, height: 5} -- GitLab From 7492f08cd189a5f37d75b8d361d365f0391ee41d Mon Sep 17 00:00:00 2001 From: nperez Date: Thu, 24 Aug 2023 11:21:50 +0200 Subject: [PATCH 227/388] extra adjustment PlotCombined hardcoded --- modules/Visualization/R/plot_most_likely_terciles_map.R | 1 + modules/Visualization/R/tmp/PlotCombinedMap.R | 2 +- modules/Visualization/output_size.yml | 6 +++++- recipe_ecvs_seasonal_oper.yml | 2 +- 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/modules/Visualization/R/plot_most_likely_terciles_map.R b/modules/Visualization/R/plot_most_likely_terciles_map.R index 33a19765..ed5f3635 100644 --- a/modules/Visualization/R/plot_most_likely_terciles_map.R +++ b/modules/Visualization/R/plot_most_likely_terciles_map.R @@ -144,6 +144,7 @@ plot_most_likely_terciles <- function(recipe, bar_label_digits = 2, bar_label_scale = 0.7, axes_label_scale = 1.1, + plot_margin = c(5.1, 4.1, 4.1, 2.1), triangle_ends = c(F, F) , width = 10, height = 8) base_args[names(output_configuration)] <- output_configuration for (i in 1:length(months)) { diff --git a/modules/Visualization/R/tmp/PlotCombinedMap.R b/modules/Visualization/R/tmp/PlotCombinedMap.R index 4575f897..9c7a6ede 100644 --- a/modules/Visualization/R/tmp/PlotCombinedMap.R +++ b/modules/Visualization/R/tmp/PlotCombinedMap.R @@ -435,7 +435,7 @@ PlotCombinedMap <- function(maps, lon, lat, subsampleg = NULL, bar_limits = display_range, var_limits = NULL, triangle_ends = NULL, plot = TRUE, draw_separators = TRUE, bar_titles = bar_titles, title_scale = cex_bar_titles, label_scale = legend_scale * 1.5, - extra_margin = c(2, 0, 2, 0)) + extra_margin = c(2, 0, 1.5, 0)) } # If the graphic was saved to file, close the connection with the device diff --git a/modules/Visualization/output_size.yml b/modules/Visualization/output_size.yml index fcad0175..6d82b039 100644 --- a/modules/Visualization/output_size.yml +++ b/modules/Visualization/output_size.yml @@ -15,7 +15,11 @@ region: #units inches axes_label_scale: 0.8 bar_label_scale: 1.2 bar_extra_margin: !expr c(2,1,0.5,1) - most_likely_terciles: {width: 8.5, height: 9, dot_size: 2} + most_likely_terciles: + width: 8.5 + height: 8.5 + dot_size: 2 + plot_margin: !expr c(0, 4.1, 4.1, 2.1) Multipanel: Robinson: skill_metrics: {width: 8, height: 5} diff --git a/recipe_ecvs_seasonal_oper.yml b/recipe_ecvs_seasonal_oper.yml index 898356ce..7b8969bf 100644 --- a/recipe_ecvs_seasonal_oper.yml +++ b/recipe_ecvs_seasonal_oper.yml @@ -14,7 +14,7 @@ Analysis: Reference: - {name: ERA5} # Mandatory, str: Reference codename. See docu. Time: - sdate: '0701' ## MMDD + sdate: '0801' ## MMDD fcst_year: '2023' # Optional, int: Forecast year 'YYYY' hcst_start: '1993' # Mandatory, int: Hindcast start year 'YYYY' hcst_end: '2016' # Mandatory, int: Hindcast end year 'YYYY' -- GitLab From b9da976b9c36c280aa349eb61d136c7dd82424c0 Mon Sep 17 00:00:00 2001 From: nperez Date: Thu, 24 Aug 2023 17:28:23 +0200 Subject: [PATCH 228/388] flux parameter in recipe --- exec_units.R | 2 +- .../Units/R/transform_units_precipitation.R | 47 +++++++++++++++---- modules/Units/R/units_transform.R | 4 +- modules/Units/Units.R | 11 +++++ recipe_tas_seasonal_units.yml | 4 +- 5 files changed, 54 insertions(+), 14 deletions(-) diff --git a/exec_units.R b/exec_units.R index 09d6e711..fa95767b 100644 --- a/exec_units.R +++ b/exec_units.R @@ -26,7 +26,7 @@ data <- load_datasets(recipe) source("modules/Units/Units.R") test <- Units(recipe, data) # Calibrate datasets -data <- calibrate_datasets(recipe, data) +data <- calibrate_datasets(recipe, test) # Compute skill metrics skill_metrics <- compute_skill_metrics(recipe, data) # Compute percentiles and probability bins diff --git a/modules/Units/R/transform_units_precipitation.R b/modules/Units/R/transform_units_precipitation.R index 20921147..bc840d15 100644 --- a/modules/Units/R/transform_units_precipitation.R +++ b/modules/Units/R/transform_units_precipitation.R @@ -1,5 +1,7 @@ transform_units_precipitation <- function(data, original_units, new_units, - var_name, freq, ncores = NULL) { + var_name, freq, flux = FALSE, ncores = NULL) { +## TODO consider higher frequencies (e.g. 6hourly) +## could create a constant hours <- 24 or hours <- 6 and use the same code if (original_units == "ms-1") { if (new_units == "mm") { data[[1]]$data <- data[[1]]$data * 3600 * 24 * 1000 @@ -59,16 +61,43 @@ transform_units_precipitation <- function(data, original_units, new_units, } else { stop("Unknown precipitation units transformation") } - # If monthly data compute the total monthly accumlated - if (freq == "monthly_mean") { # could it not be mean? - data[[1]]$data <- Apply(list(data[[1]]$data, data[[1]]$attrs$Dates), - target_dim = 'time', fun = function(x, y) { - date <- as.Date(y, "%Y-%m-%d") - num_days <- lubridate::days_in_month(date) - res <- x * num_days - }, ncores = ncores)$output1 + if (flux) { + data[[1]]$attrs$Variable$metadata[[var_name]]$units <- paste0( + data[[1]]$attrs$Variable$metadata[[var_name]]$units, "/day") + } else { + if (freq == "monthly_mean") { # could it not be mean? + time_pos <- which(lapply(data[[1]]$attrs$Variable$metadata[[var_name]]$dim, + function(x) {x$name}) == 'time') + cal <- tolower(data[[1]]$attrs$Variable$metadata[[var_name]]$dim[[time_pos]]$calendar) + data[[1]]$data <- Apply(list(data[[1]]$data, data[[1]]$attrs$Dates), + target_dim = 'time', fun = function(x, y) { + date <- as.Date(y, "%Y-%m-%d") + num_days <- .days_in_month(date, cal = cal) + res <- x * num_days + }, ncores = ncores)$output1 + } } return(data) } +.days_in_month <- function (x, cal) { + if (cal %in% c('gregorian', 'standard', 'proleptic_gregorian')) { + N_DAYS_IN_MONTHS <- lubridate:::N_DAYS_IN_MONTHS + if (leap_year(year(x))) { + N_DAYS_IN_MONTHS[2] <- N_DAYS_IN_MONTHS[2] + 1 + } + } else if (cal %in% c('360', '360_day')) { + N_DAYS_IN_MONTHS <- rep(30, 12) + names(N_DAYS_IN_MONTHS) <- month.abb + } else if (cal %in% c('365', '365_day')) { + N_DAYS_IN_MONTHS <- lubridate:::N_DAYS_IN_MONTHS + } else { + stop("Unknown calendar") + } + + month_x <- month(x, label = TRUE, locale = "C") + n_days <- N_DAYS_IN_MONTHS[month_x] + n_days[month_x == "Feb" & leap_year(x)] <- 29L + n_days +} diff --git a/modules/Units/R/units_transform.R b/modules/Units/R/units_transform.R index a9232647..fd435fa8 100644 --- a/modules/Units/R/units_transform.R +++ b/modules/Units/R/units_transform.R @@ -1,6 +1,6 @@ # data is a s2dv_cube object # units as character -units_transform <- function(data, orig_units, user_units, var_name, freq, +units_transform <- function(data, orig_units, user_units, var_name, freq, flux = FALSE, ncores = NULL) { var_name <- unlist(var_name) if (orig_units %in% c("c", "k")) { @@ -13,7 +13,7 @@ units_transform <- function(data, orig_units, user_units, var_name, freq, } else if (orig_units %in% c("ms-1", "kgm-2s-1", "mm", "m")) { if (user_units %in% c("ms-1", "kgm-2s-1", "mm", "m")) { trans <- transform_units_precipitation(data, orig_units, user_units, - var_name, freq, ncores = ncores) + var_name, freq, flux, ncores = ncores) } else { stop("Transformation precipitation units not available.") } diff --git a/modules/Units/Units.R b/modules/Units/Units.R index 386730f5..5e7ea88c 100644 --- a/modules/Units/Units.R +++ b/modules/Units/Units.R @@ -4,6 +4,11 @@ source("modules/Units/R/units_transform.R") source("modules/Units/R/transform_units_temperature.R") source("modules/Units/R/transform_units_precipitation.R") source("modules/Units/R/transform_units_pressure.R") +# Requires recipe to include: +# recipe$Analysis$Variables: +# $freq +# $flux (if precipitation) +# $units (optional) Units <- function(recipe, data) { # from recipe read the user defined units # from data the original units @@ -12,6 +17,11 @@ Units <- function(recipe, data) { ## Do we need to convert other than ECVs? var_names <- lapply(data, function(x) {x$attrs$Variable$varName}) freq <- recipe$Analysis$Variable$freq + if (is.null(recipe$Analysis$Variable$flux)) { + flux <- FALSE + } else { + flux <- recipe$Analysis$Variable$flux + } orig_units <- lapply(1:length(data), function(x) { data[[x]]$attrs$Variable$metadata[[var_names[[x]]]]$units}) if (is.null(recipe$Analysis$Variables$units)) { @@ -44,6 +54,7 @@ Units <- function(recipe, data) { orig_units = orig_units[[x]], user_units = user_units, var_names[x], freq = freq, + flux = flux, ncores = ncores) } else { result <- data[x] diff --git a/recipe_tas_seasonal_units.yml b/recipe_tas_seasonal_units.yml index c217b9fd..d2b25321 100644 --- a/recipe_tas_seasonal_units.yml +++ b/recipe_tas_seasonal_units.yml @@ -7,7 +7,7 @@ Analysis: Variables: name: tas freq: monthly_mean - units: C + units: K Datasets: System: name: ECMWF-SEAS5.1 # Mandatory, str: system5c3s system21_m1 system35c3s @@ -17,7 +17,7 @@ Analysis: Time: sdate: '0601' ## MMDD fcst_year: '2023' # Optional, int: Forecast year 'YYYY' - hcst_start: '2014' # Mandatory, int: Hindcast start year 'YYYY' + hcst_start: '2009' # Mandatory, int: Hindcast start year 'YYYY' hcst_end: '2016' # Mandatory, int: Hindcast end year 'YYYY' ftime_min: 1 # Mandatory, int: First leadtime time step in months ftime_max: 6 # Mandatory, int: Last leadtime time step in months -- GitLab From 411cf893b684630c92a3bb3ef0f0ed487fc6548c Mon Sep 17 00:00:00 2001 From: nperez Date: Thu, 24 Aug 2023 17:45:56 +0200 Subject: [PATCH 229/388] units in plot mean ensemble forecast --- exec_ecvs_seasonal_oper.R | 3 +++ modules/Visualization/R/plot_ensemble_mean.R | 3 +-- modules/Visualization/Visualization.R | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/exec_ecvs_seasonal_oper.R b/exec_ecvs_seasonal_oper.R index 18f2e493..650d2caf 100644 --- a/exec_ecvs_seasonal_oper.R +++ b/exec_ecvs_seasonal_oper.R @@ -9,6 +9,7 @@ source("modules/Skill/Skill.R") source("modules/Saving/Saving.R") source("modules/Visualization/Visualization.R") source("tools/prepare_outputs.R") +source("modules/Units/Units.R") # Read recipe args = commandArgs(trailingOnly = TRUE) @@ -20,6 +21,8 @@ recipe <- read_atomic_recipe(recipe_file) # Load datasets data <- load_datasets(recipe) +# Change units +data <- Units(recipe, data) # Calibrate datasets data <- calibrate_datasets(recipe, data) # Compute skill metrics diff --git a/modules/Visualization/R/plot_ensemble_mean.R b/modules/Visualization/R/plot_ensemble_mean.R index d49d8902..3a11b727 100644 --- a/modules/Visualization/R/plot_ensemble_mean.R +++ b/modules/Visualization/R/plot_ensemble_mean.R @@ -4,7 +4,6 @@ plot_ensemble_mean <- function(recipe, fcst, outdir, output_conf) { if (recipe$Analysis$Variables$freq == "daily_mean") { stop("Visualization functions not yet implemented for daily data.") } - latitude <- fcst$coords$lat longitude <- fcst$coords$lon archive <- get_archive(recipe) @@ -99,7 +98,7 @@ plot_ensemble_mean <- function(recipe, fcst, outdir, output_conf) { dot_symbol = 20, title_scale = 0.6, filled.continents = F, brks = brks, cols = cols, bar_label_digits = 4, bar_label_scale = 1.5, - axes_label_scale = 1) + axes_label_scale = 1, units = units) base_args[names(output_configuration)] <- output_configuration } else { fun <- PlotRobinson diff --git a/modules/Visualization/Visualization.R b/modules/Visualization/Visualization.R index 5d4e4080..1ba015b1 100644 --- a/modules/Visualization/Visualization.R +++ b/modules/Visualization/Visualization.R @@ -24,7 +24,7 @@ plot_data <- function(recipe, # s2dv_cube objects # skill_metrics: list of arrays containing the computed skill metrics # significance: Bool. Whether to include significance dots where applicable - if (is.null(output_conf)) { + if (is.null(output_conf) && !is.null(recipe$Analysis$Region$name)) { output_conf <- read_yaml("modules/Visualization/output_size.yml", eval.exp = TRUE)$region output_conf <- output_conf[[recipe$Analysis$Region$name]] -- GitLab From 02644c2a87efb5b9efea2e2900b9e45699eceb12 Mon Sep 17 00:00:00 2001 From: nperez Date: Thu, 24 Aug 2023 17:54:19 +0200 Subject: [PATCH 230/388] units plot mean bias --- modules/Visualization/R/plot_skill_metrics.R | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/modules/Visualization/R/plot_skill_metrics.R b/modules/Visualization/R/plot_skill_metrics.R index a2986944..0ecd9d64 100644 --- a/modules/Visualization/R/plot_skill_metrics.R +++ b/modules/Visualization/R/plot_skill_metrics.R @@ -57,6 +57,7 @@ plot_skill_metrics <- function(recipe, data_cube, skill_metrics, drop = 'selected')}) for (name in c(skill_scores, scores, "mean_bias", "enssprerr")) { if (name %in% names(skill_metrics)) { + units <- NULL # Define plot characteristics and metric name to display in plot if (name %in% c("rpss", "bss90", "bss10", "frpss", "crpss", "rpss_specs", "bss90_specs", "bss10_specs", @@ -109,6 +110,7 @@ plot_skill_metrics <- function(recipe, data_cube, skill_metrics, cols <- colorbar[2:(length(colorbar) - 1)] col_inf <- colorbar[1] col_sup <- colorbar[length(colorbar)] + units <- data_cube$attrs$Variable$metadata[[var_name]]$units } # Reorder dimensions skill <- Reorder(skill, c("time", "longitude", "latitude")) @@ -182,7 +184,8 @@ plot_skill_metrics <- function(recipe, data_cube, skill_metrics, dot_symbol = 20, dot_size = 1, title_scale = 0.6, filled.continents = F, brks = brks, cols = cols, - col_inf = col_inf, col_sup = col_sup, + col_inf = col_inf, col_sup = col_sup, + units = units, bar_label_digits = 3, bar_label_scale = 1.5, axes_label_scale = 1, width = 7, height = 5) base_args[names(output_configuration)] <- output_configuration -- GitLab From dd6f16648e66623510e29e0b5f923226a0ad812e Mon Sep 17 00:00:00 2001 From: nperez Date: Mon, 28 Aug 2023 17:16:10 +0200 Subject: [PATCH 231/388] mask and dots in Ens Forecast --- modules/Visualization/R/plot_ensemble_mean.R | 55 ++++++++++++++++++-- modules/Visualization/Visualization.R | 52 +++++++++++++++++- modules/Visualization/output_size.yml | 2 + recipe_ecvs_seasonal_oper.yml | 4 +- recipe_tas_seasonal_oper.yml | 3 ++ 5 files changed, 109 insertions(+), 7 deletions(-) diff --git a/modules/Visualization/R/plot_ensemble_mean.R b/modules/Visualization/R/plot_ensemble_mean.R index 3a11b727..8fbe1bfd 100644 --- a/modules/Visualization/R/plot_ensemble_mean.R +++ b/modules/Visualization/R/plot_ensemble_mean.R @@ -1,4 +1,4 @@ -plot_ensemble_mean <- function(recipe, fcst, outdir, output_conf) { +plot_ensemble_mean <- function(recipe, fcst, mask = NULL, dots = NULL, outdir, output_conf) { ## TODO: Add 'anomaly' to plot title # Abort if frequency is daily if (recipe$Analysis$Variables$freq == "daily_mean") { @@ -49,10 +49,19 @@ plot_ensemble_mean <- function(recipe, fcst, outdir, output_conf) { max_value <- max(abs(var_ens_mean)) ugly_intervals <- seq(-max_value, max_value, max_value/20) brks <- pretty(ugly_intervals, n = 12, min.n = 8) + cols <- grDevices::hcl.colors(length(brks) - 1, palette, rev = rev) } else { + if (variable == 'prlr') { + cols <- c("#FFAB38", "white", "#41CBC9") + col_fun <- colorRampPalette(cols) + } else { + cols <- c("#33BFD1", "white", "#FF764D") + col_fun <- colorRampPalette(cols) + } brks <- pretty(range(var_ens_mean, na.rm = T), n = 15, min.n = 8) + cols <- col_fun(length(brks)-1) + } - cols <- grDevices::hcl.colors(length(brks) - 1, palette, rev = rev) for (i_syear in start_date) { if (length(start_date) == 1) { @@ -62,6 +71,28 @@ plot_ensemble_mean <- function(recipe, fcst, outdir, output_conf) { i_var_ens_mean <- var_ens_mean[which(start_date == i_syear), , , ] outfile <- paste0(outdir[[var]], "forecast_ensemble_mean-", i_syear) } + # Mask + if (!is.null(mask)) { + outfile <- paste0(outfile, "_enscormask") + var_mask <- ClimProjDiags::Subset(mask, + along = c("var"), + indices = var, + drop = 'selected') + dim_mask <- dim(var_mask) + var_mask <- as.numeric(var_mask <= 0) + dim(var_mask) <- dim_mask + } + # Dots + if (!is.null(dots)) { + outfile <- paste0(outfile, "_enscordots") + var_dots <- ClimProjDiags::Subset(dots, + along = c("var"), + indices = var, + drop = 'selected') + dim_dots <- dim(var_dots) + var_dots <- as.numeric(var_dots <= 0) + dim(var_dots) <- dim_dots + } toptitle <- paste0(system_name, " / ", str_to_title(var_long_name), "\n", "Forecast Ensemble Mean / ", "Init.: ", i_syear) months <- lubridate::month(fcst$attrs$Dates[1, 1, which(start_date == i_syear), ], @@ -74,6 +105,8 @@ plot_ensemble_mean <- function(recipe, fcst, outdir, output_conf) { # Plots PlotLayout(PlotEquiMap, c('longitude', 'latitude'), i_var_ens_mean, longitude, latitude, + mask = mask, + dots = dots, filled.continents = F, toptitle = toptitle, title_scale = 0.7, @@ -93,7 +126,7 @@ plot_ensemble_mean <- function(recipe, fcst, outdir, output_conf) { if (projection == 'cylindrical_equidistant') { fun <- PlotEquiMap output_configuration <- output_conf$PlotEquiMap$forecast_ensemble_mean - base_args <- list(var = NULL, dots = NULL, + base_args <- list(var = NULL, dots = NULL, mask = NULL, lon = longitude, lat = latitude, dot_symbol = 20, title_scale = 0.6, filled.continents = F, brks = brks, cols = cols, @@ -108,7 +141,7 @@ plot_ensemble_mean <- function(recipe, fcst, outdir, output_conf) { } else { target_proj <- projection } - base_args <- list(data = NULL, mask = NULL, + base_args <- list(data = NULL, mask = NULL, dots = NULL, lon = longitude, lat = latitude, lon_dim = 'longitude', lat_dim = 'latitude', target_proj = target_proj, legend = 's2dv', @@ -122,6 +155,18 @@ plot_ensemble_mean <- function(recipe, fcst, outdir, output_conf) { forecast_time <- forecast_time + 12 } forecast_time <- sprintf("%02d", forecast_time) + # Get mask subset + if (!is.null(mask)) { + mask_i <- Subset(var_mask, along = 'time', indices = i, drop = TRUE) + } else { + mask_i <- NULL + } + # Get dots subset + if (!is.null(dots)) { + dots_i <- Subset(var_dots, along = 'time', indices = i, drop = TRUE) + } else { + dots_i <- NULL + } # Define plot title toptitle <- paste0(system_name, " / ", str_to_title(var_long_name), @@ -141,6 +186,8 @@ plot_ensemble_mean <- function(recipe, fcst, outdir, output_conf) { # Modify base arguments base_args[[1]] <- i_var_ens_mean[i, , ] fileout <- paste0(outfile, "_ft", sprintf("%02d", i), ".png") + base_args$mask <- mask_i + base_args$dots <- dots_i # Plot do.call(fun, args = c(base_args, diff --git a/modules/Visualization/Visualization.R b/modules/Visualization/Visualization.R index 1ba015b1..1104e4e2 100644 --- a/modules/Visualization/Visualization.R +++ b/modules/Visualization/Visualization.R @@ -70,7 +70,57 @@ plot_data <- function(recipe, # Plot forecast ensemble mean if ("forecast_ensemble_mean" %in% plots) { if (!is.null(data$fcst)) { - plot_ensemble_mean(recipe, data$fcst, outdir, output_conf = output_conf) + if (is.null(recipe$Analysis$Workflow$Visualization$mask_ens)) { + recipe$Analysis$Workflow$Visualization$mask <- FALSE + } + if (is.null(recipe$Analysis$Workflow$Visualization$dots)) { + recipe$Analysis$Worklow$Visualization$dots <- FALSE + } + # Plot without mask or dots + if ((recipe$Analysis$Workflow$Visualization$mask_ens + %in% c('both', FALSE)) || + (recipe$Analysis$Workflow$Visualization$dots + %in% c('both', FALSE))) { + plot_ensemble_mean(recipe, data$fcst, outdir, + mask = NULL, dots = NULL, + output_conf = output_conf) + } + # Plots with masked + if (recipe$Analysis$Workflow$Visualization$mask_ens %in% + c('both', TRUE)) { + if (is.null(skill_metrics)) { + error(recipe$Run$logger, + paste0("For the forecast ensemble mean plot, skill_metrics ", + "need to be provided to be masked.")) + } else if (!('enscorr' %in% names(skill_metrics))) { + error(recipe$Run$logger, + paste0("For the forecast ensemble mean plot, enscor metric ", + "need to be provided to be masked")) + } else { + plot_ensemble_mean(recipe, data$fcst, + mask = skill_metrics$enscorr, + dots = NULL, + outdir, output_conf = output_conf) + } + } + # Plots with dotted negative correlated in ens-mean-fcst + if (recipe$Analysis$Workflow$Visualization$dots %in% c('both', TRUE)) { + if (is.null(skill_metrics)) { + error(recipe$Run$logger, + paste0("For the forecast ensemble mean plot, skill_metrics ", + "need to be provided for the dots")) + } else if (!('enscorr' %in% names(skill_metrics))) { + error(recipe$Run$logger, + paste0("For the forecast ensemble mean plot, enscor metric ", + "needs to be provided for the dots")) + } else { + plot_ensemble_mean(recipe, data$fcst, + mask = NULL, + dots = skill_metrics$enscorr, + outdir, output_conf = output_conf) + } + } + } else { error(recipe$Run$logger, paste0("The forecast ensemble mean plot has been requested, but ", diff --git a/modules/Visualization/output_size.yml b/modules/Visualization/output_size.yml index 6d82b039..f5edfd7a 100644 --- a/modules/Visualization/output_size.yml +++ b/modules/Visualization/output_size.yml @@ -15,6 +15,8 @@ region: #units inches axes_label_scale: 0.8 bar_label_scale: 1.2 bar_extra_margin: !expr c(2,1,0.5,1) + dot_symbol: 4 + dot_size: 1.7 most_likely_terciles: width: 8.5 height: 8.5 diff --git a/recipe_ecvs_seasonal_oper.yml b/recipe_ecvs_seasonal_oper.yml index 7b8969bf..832f36d5 100644 --- a/recipe_ecvs_seasonal_oper.yml +++ b/recipe_ecvs_seasonal_oper.yml @@ -5,8 +5,8 @@ Description: Analysis: Horizon: seasonal # Mandatory, str: either subseasonal, seasonal, or decadal Variables: - - {name: tas, freq: monthly_mean} - - {name: prlr, freq: monthly_mean} + - {name: tas, freq: monthly_mean, units: C} + - {name: prlr, freq: monthly_mean, units: mm, flux: no} Datasets: System: - {name: ECMWF-SEAS5.1} # system21_m1 system35c3s diff --git a/recipe_tas_seasonal_oper.yml b/recipe_tas_seasonal_oper.yml index 13b6a0b9..f1150d3f 100644 --- a/recipe_tas_seasonal_oper.yml +++ b/recipe_tas_seasonal_oper.yml @@ -7,6 +7,8 @@ Analysis: Variables: name: tas freq: monthly_mean + units: C + flux: FALSE Datasets: System: name: ECMWF-SEAS5.1 # Mandatory, str: system5c3s system21_m1 system35c3s @@ -52,6 +54,7 @@ Analysis: plots: skill_metrics forecast_ensemble_mean most_likely_terciles multi_panel: no mask_terciles: both + dots: both ncores: 4 # Optional, int: number of cores, defaults to 1 remove_NAs: # Optional, bool: Whether NAs are removed, defaults to FALSE Output_format: scorecards -- GitLab From 4bba2103714ae3a3e9f3a54f15239f10767f2978 Mon Sep 17 00:00:00 2001 From: nperez Date: Mon, 28 Aug 2023 17:43:37 +0200 Subject: [PATCH 232/388] fix check --- modules/Visualization/Visualization.R | 2 +- recipe_tas_seasonal_oper.yml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/Visualization/Visualization.R b/modules/Visualization/Visualization.R index 1104e4e2..251e835a 100644 --- a/modules/Visualization/Visualization.R +++ b/modules/Visualization/Visualization.R @@ -71,7 +71,7 @@ plot_data <- function(recipe, if ("forecast_ensemble_mean" %in% plots) { if (!is.null(data$fcst)) { if (is.null(recipe$Analysis$Workflow$Visualization$mask_ens)) { - recipe$Analysis$Workflow$Visualization$mask <- FALSE + recipe$Analysis$Workflow$Visualization$mask_ens <- FALSE } if (is.null(recipe$Analysis$Workflow$Visualization$dots)) { recipe$Analysis$Worklow$Visualization$dots <- FALSE diff --git a/recipe_tas_seasonal_oper.yml b/recipe_tas_seasonal_oper.yml index f1150d3f..c5e6482f 100644 --- a/recipe_tas_seasonal_oper.yml +++ b/recipe_tas_seasonal_oper.yml @@ -53,8 +53,8 @@ Analysis: Visualization: plots: skill_metrics forecast_ensemble_mean most_likely_terciles multi_panel: no - mask_terciles: both - dots: both + mask_terciles: no + dots: true ncores: 4 # Optional, int: number of cores, defaults to 1 remove_NAs: # Optional, bool: Whether NAs are removed, defaults to FALSE Output_format: scorecards -- GitLab From 20bc382995d0e6cb7100765e5164c83f7be89d05 Mon Sep 17 00:00:00 2001 From: nperez Date: Tue, 29 Aug 2023 16:00:36 +0200 Subject: [PATCH 233/388] Add logo to plots --- exec_ecvs_seasonal_oper.R | 16 +++++++++++++++- tools/BSC_logo_95.jpg | Bin 0 -> 5997 bytes 2 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 tools/BSC_logo_95.jpg diff --git a/exec_ecvs_seasonal_oper.R b/exec_ecvs_seasonal_oper.R index 650d2caf..cfd5bb2d 100644 --- a/exec_ecvs_seasonal_oper.R +++ b/exec_ecvs_seasonal_oper.R @@ -30,9 +30,23 @@ skill_metrics <- compute_skill_metrics(recipe, data) # Compute percentiles and probability bins probabilities <- compute_probabilities(recipe, data) # Export all data to netCDF -## TODO: Fix plotting # save_data(recipe, data, skill_metrics, probabilities) # Plot data plot_data(recipe, data, skill_metrics, probabilities, significance = T) +## Add logo +logo <- "/esarchive/scratch/nperez/git/auto-s2s/tools/BSC_logo_95.jpg" +system <- list.files(paste0(recipe$Run$output_dir, "/plots")) +## This line may lead to add to logos: +# variables <- list.files(paste0(recipe$Run$output_dir, "/plots/", system)) +variable <- recipe$Analysis$Variable$name +files <- lapply(variable, function(x) { + f <- list.files(paste0(recipe$Run$output_dir, "/plots/", + system, "/", x)) + full_path <- paste0(recipe$Run$output_dir, "/plots/", + system, "/", x,"/", f)})[[1]] +dim(files) <- c(file = length(files)) +Apply(list(files), target_dims = NULL, function(x) { + system(paste("composite -gravity southeast -geometry +10+10", + logo, x, x))}, ncores = recipe$Analysis$ncores) diff --git a/tools/BSC_logo_95.jpg b/tools/BSC_logo_95.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f961c0409bdd5c973e8521570d96e4ff341e5fcc GIT binary patch literal 5997 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 a-6Oyz1vR6Oo20Kg_8Eunb_XE&i2i?zdqyb$ literal 0 HcmV?d00001 -- GitLab From 82c2132880f78aa8a3843f96fb827bcca7fa829c Mon Sep 17 00:00:00 2001 From: nperez Date: Wed, 30 Aug 2023 18:24:23 +0200 Subject: [PATCH 234/388] Normal category dev in mostlikelyterciles --- .../R/plot_most_likely_terciles_map.R | 57 +- modules/Visualization/R/tmp/ColorBar.R | 593 ++++++ .../R/tmp/GradientCatsColorBar.R | 110 +- modules/Visualization/R/tmp/PlotCombinedMap.R | 138 +- modules/Visualization/R/tmp/PlotEquiMap.R | 1267 ++++++++++++ modules/Visualization/R/tmp/Utils.R | 1779 +++++++++++++++++ modules/Visualization/R/tmp/clim.palette.R | 70 + modules/Visualization/R/tmp/zzz.R | 256 +++ 8 files changed, 4197 insertions(+), 73 deletions(-) create mode 100644 modules/Visualization/R/tmp/ColorBar.R create mode 100644 modules/Visualization/R/tmp/PlotEquiMap.R create mode 100644 modules/Visualization/R/tmp/Utils.R create mode 100644 modules/Visualization/R/tmp/clim.palette.R create mode 100644 modules/Visualization/R/tmp/zzz.R diff --git a/modules/Visualization/R/plot_most_likely_terciles_map.R b/modules/Visualization/R/plot_most_likely_terciles_map.R index ed5f3635..cfc0635e 100644 --- a/modules/Visualization/R/plot_most_likely_terciles_map.R +++ b/modules/Visualization/R/plot_most_likely_terciles_map.R @@ -1,8 +1,14 @@ +## Functions required for normal cat and triangles end. +## See https://earth.bsc.es/gitlab/external/cstools/-/issues/125 source("modules/Visualization/R/tmp/PlotMostLikelyQuantileMap.R") source("modules/Visualization/R/tmp/PlotCombinedMap.R") +source("modules/Visualization/R/tmp/ColorBar.R") +source("modules/Visualization/R/tmp/clim.palette.R") +source("modules/Visualization/R/tmp/Utils.R") +source("modules/Visualization/R/tmp/PlotEquiMap.R") +source("/esarchive/scratch/aho/tmp/ColorBar_onebox.R") source("modules/Visualization/R/tmp/GradientCatsColorBar.R") - ## TODO: Change name plot_most_likely_terciles <- function(recipe, fcst, @@ -49,17 +55,15 @@ plot_most_likely_terciles <- function(recipe, var_long_name <- fcst$attrs$Variable$metadata[[variable]]$long_name # Choose colors depending on the variable if (variable %in% c('prlr')) { ## add others - cols <- list(c("#FFC473", #FFAB38", - "darkorange1"), - c("#b5b5b5", "black"), - c("#A0E5E4",#41CBC9", - "deepskyblue3")) + cols <- list(c("#FFC473", "#FFAB38"), + c("grey"), + c("#A0E5E4","#41CBC9")) + col_sup <- list("darkorange1", "grey", "deepskyblue3") } else { - cols <- list(c("#A0E5E4",#33BFD1", - "deepskyblue3"), - c("#b5b5b5", "black"), - c("#FFB19A", #FF764D", - "indianred3")) + cols <- list(c("#A0E5E4","#33BFD1"), + c("grey"), + c("#FFB19A", "#FF764D")) + col_sup <- list("deepskyblue3", "grey", "indianred3") } var_probs <- ClimProjDiags::Subset(probs_fcst, along = c("var"), @@ -138,14 +142,18 @@ plot_most_likely_terciles <- function(recipe, dot_size = 1, col_mask = 'antiquewhite', cols = cols, + col_sup = col_sup, title_scale = 1, legend_scale = 0.8, cex_bar_titles = 0.9, bar_label_digits = 2, bar_label_scale = 0.7, + bar_limits = list(c(40, 85), c(40, 85), c(40, 85)), + brks = list(4,2,4), axes_label_scale = 1.1, plot_margin = c(5.1, 4.1, 4.1, 2.1), - triangle_ends = c(F, F) , width = 10, height = 8) + return_leg = T, + triangle_ends = c(F, T) , width = 10, height = 8) base_args[names(output_configuration)] <- output_configuration for (i in 1:length(months)) { # Get forecast time label @@ -179,10 +187,33 @@ plot_most_likely_terciles <- function(recipe, base_args$probs <- i_var_probs[i, , , ] base_args$mask <- mask_i base_args$dots <- dots_i - do.call(PlotMostLikelyQuantileMap, + cb_info <- do.call(PlotMostLikelyQuantileMap, args = c(base_args, list(toptitle = toptitle, fileout = fileout))) + # Add color bars with 1 range for normal category: + for (i_bar in 1:cb_info$nmap) { + tmp <- cb_info + tmp$brks <- tmp$brks[[i_bar]] + tmp$cols <- tmp$cols[[i_bar]] + tmp$bar_limits <- tmp$bar_limits[[i_bar]] + tmp$col_sup <- tmp$col_sup[[i_bar]] + tmp$title <- tmp$bar_titles[i_bar] + tmp$bar_titles <- NULL + tmp$nmap <- NULL + tmp$var_limits <- NULL + if (length(cb_info$brks[[i_bar]]) > 2) { + # plot colorbar as normal + do.call(ColorBar, tmp) + } else { + # plot a square + tmp$brks <- 4 + tmp$draw_ticks <- F + tmp$box_label <- "40+" + do.call(ColorBar_onebox, tmp) + } + } + dev.off() } } } diff --git a/modules/Visualization/R/tmp/ColorBar.R b/modules/Visualization/R/tmp/ColorBar.R new file mode 100644 index 00000000..22261c16 --- /dev/null +++ b/modules/Visualization/R/tmp/ColorBar.R @@ -0,0 +1,593 @@ +#'Draws a Color Bar +#' +#'Generates a color bar to use as colouring function for map plots and +#'optionally draws it (horizontally or vertically) to be added to map +#'multipanels or plots. It is possible to draw triangles at the ends of the +#'colour bar to represent values that go beyond the range of interest. A +#'number of options is provided to adjust the colours and the position and +#'size of the components. The drawn colour bar spans a whole figure region +#'and is compatible with figure layouts.\cr\cr +#'The generated colour bar consists of a set of breaks that define the +#'length(brks) - 1 intervals to classify each of the values in each of the +#'grid cells of a two-dimensional field. The corresponding grid cell of a +#'given value of the field will be coloured in function of the interval it +#'belongs to.\cr\cr +#'The only mandatory parameters are 'var_limits' or 'brks' (in its second +#'format, see below). +#' +#'@param brks Can be provided in two formats: +#'\itemize{ +#' \item{A single value with the number of breaks to be generated +#' automatically, between the minimum and maximum specified in 'var_limits' +#' (both inclusive). Hence the parameter 'var_limits' is mandatory if 'brks' +#' is provided with this format. If 'bar_limits' is additionally provided, +#' values only between 'bar_limits' will be generated. The higher the value +#' of 'brks', the smoother the plot will look.} +#' \item{A vector with the actual values of the desired breaks. Values will +#' be reordered by force to ascending order. If provided in this format, no +#' other parameters are required to generate/plot the colour bar.} +#'} +#' This parameter is optional if 'var_limits' is specified. If 'brks' not +#' specified but 'cols' is specified, it will take as value length(cols) + 1. +#' If 'cols' is not specified either, 'brks' will take 21 as value. +#'@param cols Vector of length(brks) - 1 valid colour identifiers, for each +#' interval defined by the breaks. This parameter is optional and will be +#' filled in with a vector of length(brks) - 1 colours generated with the +#' function provided in 'color_fun' (\code{clim.colors} by default).\cr 'cols' +#' can have one additional colour at the beginning and/or at the end with the +#' aim to colour field values beyond the range of interest represented in the +#' colour bar. If any of these extra colours is provided, parameter +#' 'triangle_ends' becomes mandatory in order to disambiguate which of the +#' ends the colours have been provided for. +#'@param vertical TRUE/FALSE for vertical/horizontal colour bar +#' (disregarded if plot = FALSE). +#'@param subsampleg The first of each subsampleg breaks will be ticked on the +#' colorbar. Takes by default an approximation of a value that yields a +#' readable tick arrangement (extreme breaks always ticked). If set to 0 or +#' lower, no labels are drawn. See the code of the function for details or +#' use 'extra_labels' for customized tick arrangements. +#'@param bar_limits Vector of two numeric values with the extremes of the +#' range of values represented in the colour bar. If 'var_limits' go beyond +#' this interval, the drawing of triangle extremes is triggered at the +#' corresponding sides, painted in 'col_inf' and 'col_sup'. Either of them +#' can be set as NA and will then take as value the corresponding extreme in +#' 'var_limits' (hence a triangle end won't be triggered for these sides). +#' Takes as default the extremes of 'brks' if available, else the same values +#' as 'var_limits'. +#'@param var_limits Vector of two numeric values with the minimum and maximum +#' values of the field to represent. These are used to know whether to draw +#' triangle ends at the extremes of the colour bar and what colour to fill +#' them in with. If not specified, take the same value as the extremes of +#' 'brks'. Hence the parameter 'brks' is mandatory if 'var_limits' is not +#' specified. +#'@param triangle_ends Vector of two logical elements, indicating whether to +#' force the drawing of triangle ends at each of the extremes of the colour +#' bar. This choice is automatically made from the provided 'brks', +#' 'bar_limits', 'var_limits', 'col_inf' and 'col_sup', but the behaviour +#' can be manually forced to draw or not to draw the triangle ends with this +#' parameter. If 'cols' is provided, 'col_inf' and 'col_sup' will take +#' priority over 'triangle_ends' when deciding whether to draw the triangle +#' ends or not. +#'@param col_inf Colour to fill the inferior triangle end with. Useful if +#' specifying colours manually with parameter 'cols', to specify the colour +#' and to trigger the drawing of the lower extreme triangle, or if 'cols' is +#' not specified, to replace the colour automatically generated by ColorBar(). +#'@param col_sup Colour to fill the superior triangle end with. Useful if +#' specifying colours manually with parameter 'cols', to specify the colour +#' and to trigger the drawing of the upper extreme triangle, or if 'cols' is +#' not specified, to replace the colour automatically generated by ColorBar(). +#'@param color_fun Function to generate the colours of the color bar. Must +#' take an integer and must return as many colours. The returned colour vector +#' can have the attribute 'na_color', with a colour to draw NA values. This +#' parameter is set by default to clim.palette(). +#'@param plot Logical value indicating whether to only compute its breaks and +#' colours (FALSE) or to also draw it on the current device (TRUE). +#'@param draw_ticks Whether to draw ticks for the labels along the colour bar +#' (TRUE) or not (FALSE). TRUE by default. Disregarded if 'plot = FALSE'. +#'@param draw_separators Whether to draw black lines in the borders of each of +#' the colour rectancles of the colour bar (TRUE) or not (FALSE). FALSE by +#' default. Disregarded if 'plot = FALSE'. +#'@param triangle_ends_scale Scale factor for the drawn triangle ends of the +#' colour bar, if drawn at all. Takes 1 by default (rectangle triangle +#' proportional to the thickness of the colour bar). Disregarded if +#' 'plot = FALSE'. +#'@param extra_labels Numeric vector of extra labels to draw along axis of +#' the colour bar. The number of provided decimals will be conserved. +#' Disregarded if 'plot = FALSE'. +#'@param title Title to draw on top of the colour bar, most commonly with the +#' units of the represented field in the neighbour figures. Empty by default. +#'@param title_scale Scale factor for the 'title' of the colour bar. +#' Takes 1 by default. +#'@param label_scale Scale factor for the labels of the colour bar. +#' Takes 1 by default. +#'@param tick_scale Scale factor for the length of the ticks of the labels +#' along the colour bar. Takes 1 by default. +#'@param extra_margin Extra margins to be added around the colour bar, +#' in the format c(y1, x1, y2, x2). The units are margin lines. Takes +#' rep(0, 4) by default. +#'@param label_digits Number of significant digits to be displayed in the +#' labels of the colour bar, usually to avoid too many decimal digits +#' overflowing the figure region. This does not have effect over the labels +#' provided in 'extra_labels'. Takes 4 by default. +#'@param ... Arguments to be passed to the method. Only accepts the following +#' graphical parameters:\cr adj ann ask bg bty cex.lab cex.main cex.sub cin +#' col.axis col.lab col.main col.sub cra crt csi cxy err family fg fig fin +#' font font.axis font.lab font.main font.sub lend lheight ljoin lmitre lty +#' lwd mai mex mfcol mfrow mfg mkh oma omd omi page pch pin plt pty smo srt +#' tck tcl usr xaxp xaxs xaxt xlog xpd yaxp yaxs yaxt ylbias ylog.\cr For more +#' information about the parameters see `par`. +#' +#'@return +#'\item{brks}{ +#' Breaks used for splitting the range in intervals. +#'} +#'\item{cols}{ +#' Colours generated for each of the length(brks) - 1 intervals. +#' Always of length length(brks) - 1. +#'} +#'\item{col_inf}{ +#' Colour used to draw the lower triangle end in the colour +#' bar (NULL if not drawn at all). +#'} +#'\item{col_sup}{ +#' Colour used to draw the upper triangle end in the colour +#' bar (NULL if not drawn at all). +#'} +#' +#'@examples +#'cols <- c("dodgerblue4", "dodgerblue1", "forestgreen", "yellowgreen", "white", +#' "white", "yellow", "orange", "red", "saddlebrown") +#'lims <- seq(-1, 1, 0.2) +#'ColorBar(lims, cols) +#'@importFrom grDevices col2rgb rgb +#'@export +ColorBar <- function(brks = NULL, cols = NULL, vertical = TRUE, + subsampleg = NULL, bar_limits = NULL, var_limits = NULL, + triangle_ends = NULL, col_inf = NULL, col_sup = NULL, + color_fun = clim.palette(), plot = TRUE, + draw_ticks = TRUE, draw_separators = FALSE, + triangle_ends_scale = 1, extra_labels = NULL, + title = NULL, title_scale = 1, + label_scale = 1, tick_scale = 1, + extra_margin = rep(0, 4), label_digits = 4, ...) { + # Required checks + if ((is.null(brks) || length(brks) < 2) && is.null(bar_limits) && is.null(var_limits)) { + stop("At least one of 'brks' with the desired breaks, 'bar_limits' or ", + "'var_limits' must be provided to generate the colour bar.") + } + + # Check brks + if (!is.null(brks)) { + if (!is.numeric(brks)) { + stop("Parameter 'brks' must be numeric if specified.") + } else if (length(brks) > 1) { + reorder <- sort(brks, index.return = TRUE) + if (!is.null(cols)) { + cols <- cols[reorder$ix[which(reorder$ix <= length(cols))]] + } + brks <- reorder$x + } + } + + # Check bar_limits + if (!is.null(bar_limits)) { + if (!(all(is.na(bar_limits) | is.numeric(bar_limits)) && (length(bar_limits) == 2))) { + stop("Parameter 'bar_limits' must be a vector of two numeric elements or NAs.") + } + } + + # Check var_limits + if (!is.null(var_limits)) { + if (!(is.numeric(var_limits) && (length(var_limits) == 2))) { + stop("Parameter 'var_limits' must be a numeric vector of length 2.") + } else if (anyNA(var_limits)) { + stop("Parameter 'var_limits' must not contain NA values.") + } else if (any(is.infinite(var_limits))) { + stop("Parameter 'var_limits' must not contain infinite values.") + } + } + + # Check cols + if (!is.null(cols)) { + if (!is.character(cols)) { + stop("Parameter 'cols' must be a vector of character strings.") + } else if (any(!sapply(cols, .IsColor))) { + stop("Parameter 'cols' must contain valid colour identifiers.") + } + } + + # Check color_fun + if (!is.function(color_fun)) { + stop("Parameter 'color_fun' must be a colour-generator function.") + } + + # Check integrity among brks, bar_limits and var_limits + if (is.null(brks) || (length(brks) < 2)) { + if (is.null(brks)) { + if (is.null(cols)) { + brks <- 21 + } else { + brks <- length(cols) + 1 + } + } + if (is.null(bar_limits) || anyNA(bar_limits)) { + # var_limits is defined + if (is.null(bar_limits)) { + bar_limits <- c(NA, NA) + } + half_width <- 0.5 * (var_limits[2] - var_limits[1]) / (brks - 1) + bar_limits[which(is.na(bar_limits))] <- c(var_limits[1] - half_width, var_limits[2] + half_width)[which(is.na(bar_limits))] + brks <- seq(bar_limits[1], bar_limits[2], length.out = brks) + } else if (is.null(var_limits)) { + # bar_limits is defined + var_limits <- bar_limits + half_width <- 0.5 * (var_limits[2] - var_limits[1]) / (brks - 1) + brks <- seq(bar_limits[1], bar_limits[2], length.out = brks) + var_limits[1] <- var_limits[1] + half_width / 50 + } else { + # both bar_limits and var_limits are defined + brks <- seq(bar_limits[1], bar_limits[2], length.out = brks) + } + } else if (is.null(bar_limits)) { + if (is.null(var_limits)) { + # brks is defined + bar_limits <- c(head(brks, 1), tail(brks, 1)) + var_limits <- bar_limits + half_width <- 0.5 * (var_limits[2] - var_limits[1]) / (length(brks) - 1) + var_limits[1] <- var_limits[1] + half_width / 50 + } else { + # brks and var_limits are defined + bar_limits <- c(head(brks, 1), tail(brks, 1)) + } + } else { + # brks and bar_limits are defined + # or + # brks, bar_limits and var_limits are defined + if (head(brks, 1) != bar_limits[1] || tail(brks, 1) != bar_limits[2]) { + stop("Parameters 'brks' and 'bar_limits' are inconsistent.") + } + } + + # Check col_inf + if (!is.null(col_inf)) { + if (!.IsColor(col_inf)) { + stop("Parameter 'col_inf' must be a valid colour identifier.") + } + } + + # Check col_sup + if (!is.null(col_sup)) { + if (!.IsColor(col_sup)) { + stop("Parameter 'col_sup' must be a valid colour identifier.") + } + } + + # Check triangle_ends + if (!is.null(triangle_ends) && (!is.logical(triangle_ends) || length(triangle_ends) != 2)) { + stop("Parameter 'triangle_ends' must be a logical vector with two elements.") + } + teflc <- triangle_ends_from_limit_cols <- c(!is.null(col_inf), !is.null(col_sup)) + if (is.null(triangle_ends) && is.null(col_inf) && is.null(col_sup)) { + triangle_ends <- c(FALSE, FALSE) + if (bar_limits[1] >= var_limits[1]) { + triangle_ends[1] <- TRUE + } + if (bar_limits[2] < var_limits[2]) { + triangle_ends[2] <- TRUE + } + } else if (!is.null(triangle_ends) && is.null(col_inf) && is.null(col_sup)) { + triangle_ends <- triangle_ends + } else if (is.null(triangle_ends) && (!is.null(col_inf) || !is.null(col_sup))) { + triangle_ends <- teflc + } else if (any(teflc != triangle_ends)) { + if (!is.null(brks) && length(brks) > 1 && !is.null(cols) && length(cols) >= length(brks)) { + triangle_ends <- teflc + } else if (!is.null(cols)) { + triangle_ends <- teflc + } else { + triangle_ends <- triangle_ends + } + } + if (plot && !is.null(var_limits)) { + if ((bar_limits[1] >= var_limits[1]) && !triangle_ends[1]) { + .warning("There are variable values smaller or equal to the lower limit ", + "of the colour bar and the lower triangle end has been ", + "disabled. These will be painted in the colour for NA values.") + } + if ((bar_limits[2] < var_limits[2]) && !triangle_ends[2]) { + .warning("There are variable values greater than the higher limit ", + "of the colour bar and the higher triangle end has been ", + "disabled. These will be painted in the colour for NA values.") + } + } + + # Generate colours if needed + if (is.null(cols)) { + cols <- color_fun(length(brks) - 1 + sum(triangle_ends)) + attr_bk <- attributes(cols) + if (triangle_ends[1]) { + if (is.null(col_inf)) col_inf <- head(cols, 1) + cols <- cols[-1] + } + if (triangle_ends[2]) { + if (is.null(col_sup)) col_sup <- tail(cols, 1) + cols <- cols[-length(cols)] + } + attributes(cols) <- attr_bk + } else if ((length(cols) != (length(brks) - 1))) { + stop("Incorrect number of 'brks' and 'cols'. There must be one more break than the number of colours.") + } + + # Check vertical + if (!is.logical(vertical)) { + stop("Parameter 'vertical' must be TRUE or FALSE.") + } + + # Check extra_labels + if (is.null(extra_labels)) { + extra_labels <- numeric(0) + } + if (!is.numeric(extra_labels)) { + stop("Parameter 'extra_labels' must be numeric.") + } else { + if (any(extra_labels > bar_limits[2]) || any(extra_labels < bar_limits[1])) { + stop("Parameter 'extra_labels' must not contain ticks beyond the color bar limits.") + } + } + extra_labels <- sort(extra_labels) + + # Check subsampleg + primes <- function(x) { + # Courtesy of Chase. See http://stackoverflow.com/questions/6424856/r-function-for-returning-all-factors + x <- as.integer(x) + div <- seq_len(abs(x)) + factors <- div[x %% div == 0L] + factors <- list(neg = -factors, pos = factors) + return(factors) + } + remove_final_tick <- FALSE + added_final_tick <- TRUE + if (is.null(subsampleg)) { + subsampleg <- 1 + while (length(brks) / subsampleg > 15 - 1) { + next_factor <- primes((length(brks) - 1) / subsampleg)$pos + next_factor <- next_factor[length(next_factor) - ifelse(length(next_factor) > 2, 1, 0)] + subsampleg <- subsampleg * next_factor + } + if (subsampleg > (length(brks) - 1) / 4) { + subsampleg <- max(1, round(length(brks) / 4)) + extra_labels <- c(extra_labels, bar_limits[2]) + added_final_tick <- TRUE + if ((length(brks) - 1) %% subsampleg < (length(brks) - 1) / 4 / 2) { + remove_final_tick <- TRUE + } + } + } else if (!is.numeric(subsampleg)) { + stop("Parameter 'subsampleg' must be numeric.") + } + subsampleg <- round(subsampleg) + draw_labels <- TRUE + if ((subsampleg) < 1) { + draw_labels <- FALSE + } + + # Check plot + if (!is.logical(plot)) { + stop("Parameter 'plot' must be logical.") + } + + # Check draw_separators + if (!is.logical(draw_separators)) { + stop("Parameter 'draw_separators' must be logical.") + } + + # Check triangle_ends_scale + if (!is.numeric(triangle_ends_scale)) { + stop("Parameter 'triangle_ends_scale' must be numeric.") + } + + # Check draw_ticks + if (!is.logical(draw_ticks)) { + stop("Parameter 'draw_ticks' must be logical.") + } + + # Check title + if (is.null(title)) { + title <- '' + } + if (!is.character(title)) { + stop("Parameter 'title' must be a character string.") + } + + # Check title_scale + if (!is.numeric(title_scale)) { + stop("Parameter 'title_scale' must be numeric.") + } + + # Check label_scale + if (!is.numeric(label_scale)) { + stop("Parameter 'label_scale' must be numeric.") + } + + # Check tick_scale + if (!is.numeric(tick_scale)) { + stop("Parameter 'tick_scale' must be numeric.") + } + + # Check extra_margin + if (!is.numeric(extra_margin) || length(extra_margin) != 4) { + stop("Parameter 'extra_margin' must be a numeric vector of length 4.") + } + + # Check label_digits + if (!is.numeric(label_digits)) { + stop("Parameter 'label_digits' must be numeric.") + } + label_digits <- round(label_digits) + + # Process the user graphical parameters that may be passed in the call + ## Graphical parameters to exclude + excludedArgs <- c("cex", "cex.axis", "col", "lab", "las", "mar", "mgp", "new", "ps") + userArgs <- .FilterUserGraphicArgs(excludedArgs, ...) + + # + # Plotting colorbar + # ~~~~~~~~~~~~~~~~~~~ + # + if (plot) { + pars_to_save <- c('mar', 'cex', names(userArgs), 'mai', 'mgp', 'las', 'xpd') + saved_pars <- par(pars_to_save) + par(mar = c(0, 0, 0, 0), cex = 1) + image(1, 1, t(t(1)), col = rgb(0, 0, 0, 0), axes = FALSE, xlab = '', ylab = '') + # Get the availale space + figure_size <- par('fin') + cs <- par('csi') + # This allows us to assume we always want to plot horizontally + if (vertical) { + figure_size <- rev(figure_size) + } +# pannel_to_redraw <- par('mfg') +# .SwitchToFigure(pannel_to_redraw[1], pannel_to_redraw[2]) + # Load the user parameters + par(new = TRUE) + par(userArgs) + # Set up color bar plot region + margins <- c(0.0, 0, 0.0, 0) + cex_title <- 1 * title_scale + cex_labels <- 0.9 * label_scale + cex_ticks <- -0.3 * tick_scale + spaceticklab <- max(-cex_ticks, 0) + if (vertical) { + margins[1] <- margins[1] + (1.2 * cex_labels * 3 + spaceticklab) * cs + margins <- margins + extra_margin[c(4, 1:3)] * cs + } else { + margins[1] <- margins[1] + (1.2 * cex_labels * 1 + spaceticklab) * cs + margins <- margins + extra_margin * cs + } + if (title != '') { + margins[3] <- margins[3] + (1.0 * cex_title) * cs + } + margins[3] <- margins[3] + sqrt(figure_size[2] / (margins[1] + margins[3])) * + figure_size[2] / 6 * ifelse(title != '', 0.5, 0.8) + # Set side margins + margins[2] <- margins[2] + figure_size[1] / 16 + margins[4] <- margins[4] + figure_size[1] / 16 + triangle_ends_prop <- 1 / 32 * triangle_ends_scale + triangle_ends_cex <- triangle_ends_prop * figure_size[2] + if (triangle_ends[1]) { + margins[2] <- margins[2] + triangle_ends_cex + } + if (triangle_ends[2]) { + margins[4] <- margins[4] + triangle_ends_cex + } + ncols <- length(cols) + # Set up the points of triangles + # Compute the proportion of horiz. space occupied by one plot unit + prop_unit <- (1 - (margins[2] + margins[4]) / figure_size[1]) / ncols + # Convert triangle height to plot inits + triangle_height <- triangle_ends_prop / prop_unit + left_triangle <- list(x = c(1, 1 - triangle_height, 1) - 0.5, + y = c(1.4, 1, 0.6)) + right_triangle <- list(x = c(ncols, ncols + triangle_height, ncols) + 0.5, + y = c(1.4, 1, 0.6)) + # Draw the color squares and title + if (vertical) { + par(mai = c(margins[2:4], margins[1]), + mgp = c(0, spaceticklab + 0.2, 0), las = 1) + d <- 4 + image(1, 1:ncols, t(1:ncols), axes = FALSE, col = cols, + xlab = '', ylab = '') + title(ylab = title, line = cex_title * (0.2 + 0.1), cex.lab = cex_title) + # Draw top and bottom border lines + lines(c(0.6, 0.6), c(1 - 0.5, ncols + 0.5)) + lines(c(1.4, 1.4), c(1 - 0.5, ncols + 0.5)) + # Rotate triangles + names(left_triangle) <- rev(names(left_triangle)) + names(right_triangle) <- rev(names(right_triangle)) + } else { + # The term - cex_labels / 4 * (3 / cex_labels - 1) was found by + # try and error + par(mai = margins, + mgp = c(0, cex_labels / 2 + spaceticklab + - cex_labels / 4 * (3 / cex_labels - 1), 0), + las = 1) + d <- 1 + image(1:ncols, 1, t(t(1:ncols)), axes = FALSE, col = cols, + xlab = '', ylab = '') + title(title, line = cex_title * (0.2 + 0.1), cex.main = cex_title) + # Draw top and bottom border lines + lines(c(1 - 0.5, ncols + 0.5), c(0.6, 0.6)) + lines(c(1 - 0.5, ncols + 0.5), c(1.4, 1.4)) + tick_length <- -0.4 + } + # Draw the triangles + par(xpd = TRUE) + if (triangle_ends[1]) { + # Draw left triangle + polygon(left_triangle$x, left_triangle$y, col = col_inf, border = NA) + lines(left_triangle$x, left_triangle$y) + } + if (triangle_ends[2]) { + # Draw right triangle + polygon(right_triangle$x, right_triangle$y, col = col_sup, border = NA) + lines(right_triangle$x, right_triangle$y) + } + par(xpd = FALSE) + + # Put the separators + if (vertical) { + if (draw_separators) { + for (i in 1:(ncols - 1)) { + lines(c(0.6, 1.4), c(i, i) + 0.5) + } + } + if (draw_separators || is.null(col_inf)) { + lines(c(0.6, 1.4), c(0.5, 0.5)) + } + if (draw_separators || is.null(col_sup)) { + lines(c(0.6, 1.4), c(ncols + 0.5, ncols + 0.5)) + } + } else { + if (draw_separators) { + for (i in 1:(ncols - 1)) { + lines(c(i, i) + 0.5, c(0.6, 1.4)) + } + } + if (draw_separators || is.null(col_inf)) { + lines(c(0.5, 0.5), c(0.6, 1.4)) + } + if (draw_separators || is.null(col_sup)) { + lines(c(ncols + 0.5, ncols + 0.5), c(0.6, 1.4)) + } + } + # Put the ticks + plot_range <- length(brks) - 1 + var_range <- tail(brks, 1) - head(brks, 1) + extra_labels_at <- ((extra_labels - head(brks, 1)) / var_range) * plot_range + 0.5 + at <- seq(1, length(brks), subsampleg) + labels <- brks[at] + # Getting rid of next-to-last tick if too close to last one + if (remove_final_tick) { + at <- at[-length(at)] + labels <- labels[-length(labels)] + } + labels <- signif(labels, label_digits) + if (added_final_tick) { + extra_labels[length(extra_labels)] <- signif(tail(extra_labels, 1), label_digits) + } + at <- at - 0.5 + at <- c(at, extra_labels_at) + labels <- c(labels, extra_labels) + tick_reorder <- sort(at, index.return = TRUE) + at <- tick_reorder$x + if (draw_labels) { + labels <- labels[tick_reorder$ix] + } else { + labels <- FALSE + } + axis(d, at = at, tick = draw_ticks, labels = labels, cex.axis = cex_labels, tcl = cex_ticks) + par(saved_pars) + } + invisible(list(brks = brks, cols = cols, col_inf = col_inf, col_sup = col_sup)) +} + diff --git a/modules/Visualization/R/tmp/GradientCatsColorBar.R b/modules/Visualization/R/tmp/GradientCatsColorBar.R index 4cdeb0af..00c89b1d 100644 --- a/modules/Visualization/R/tmp/GradientCatsColorBar.R +++ b/modules/Visualization/R/tmp/GradientCatsColorBar.R @@ -1,28 +1,45 @@ -#Draws Color Bars for Categories -#A wrapper of s2dv::ColorBar to generate multiple color bars for different -#categories, and each category has different color set. GradientCatsColorBar <- function(nmap, brks = NULL, cols = NULL, vertical = TRUE, subsampleg = NULL, bar_limits, var_limits = NULL, - triangle_ends = NULL, plot = TRUE, + triangle_ends = NULL, col_inf = NULL, col_sup = NULL, plot = TRUE, draw_separators = FALSE, bar_titles = NULL, title_scale = 1, label_scale = 1, extra_margin = rep(0, 4), ...) { - # bar_limits - if (!is.numeric(bar_limits) || length(bar_limits) != 2) { - stop("Parameter 'bar_limits' must be a numeric vector of length 2.") - } + # bar_limits: a vector of 2 or a list + if (!is.list(bar_limits)) { + if (!is.numeric(bar_limits) || length(bar_limits) != 2) { + stop("Parameter 'bar_limits' must be a numeric vector of length 2 or a list containing that.") + } + # turn into list + bar_limits <- rep(list(bar_limits), nmap) + } else { + if (any(!sapply(bar_limits, is.numeric)) || any(sapply(bar_limits, length) != 2)) { + stop("Parameter 'bar_limits' must be a numeric vector of length 2 or a list containing that.") + } + if (length(bar_limits) != nmap) { + stop("Parameter 'bar_limits' must have the length of 'nmap'.") + } + } # Check brks - if (is.null(brks) || (is.numeric(brks) && length(brks) == 1)) { - num_brks <- 5 - if (is.numeric(brks)) { - num_brks <- brks + if (!is.list(brks)) { + if (is.null(brks)) { + brks <- 5 + } else if (!is.numeric(brks)) { + stop("Parameter 'brks' must be a numeric vector.") + } + # Turn it into list + brks <- rep(list(brks), nmap) + } else { + if (length(brks) != nmap) { + stop("Parameter 'brks' must have the length of 'nmap'.") } - brks <- seq(from = bar_limits[1], to = bar_limits[2], length.out = num_brks) } - if (!is.numeric(brks)) { - stop("Parameter 'brks' must be a numeric vector.") + for (i_map in 1:nmap) { + if (length(brks[[i_map]]) == 1) { + brks[[i_map]] <- seq(from = bar_limits[[i_map]][1], to = bar_limits[[i_map]][2], length.out = brks[[i_map]]) + } } + # Check cols col_sets <- list(c("#A1D99B", "#74C476", "#41AB5D", "#238B45"), c("#6BAED6FF", "#4292C6FF", "#2171B5FF", "#08519CFF"), @@ -37,6 +54,44 @@ GradientCatsColorBar <- function(nmap, brks = NULL, cols = NULL, vertical = TRUE chosen_sets <- array(1:length(col_sets), nmap) } cols <- col_sets[chosen_sets] + + # Set triangle_ends, col_sup, col_inf + #NOTE: The "col" input of ColorBar() later is not NULL (since we determine it here) + # so ColorBar() cannot decide these parameters for us. + #NOTE: Here, col_inf and col_sup are prior to triangle_ends, which is consistent with ColorBar(). + #TODO: Make triangle_ends a list + if (is.null(triangle_ends)) { + if (!is.null(var_limits)) { + triangle_ends <- c(FALSE, FALSE) + #TODO: bar_limits is a list + if (bar_limits[1] >= var_limits[1] | !is.null(col_inf)) { + triangle_ends[1] <- TRUE + if (is.null(col_inf)) { + col_inf <- lapply(cols, head, 1) + cols <- lapply(cols, '[', -1) + } + } + if (bar_limits[2] < var_limits[2] | !is.null(col_sup)) { + triangle_ends[2] <- TRUE + if (is.null(col_sup)) { + col_sup <- lapply(cols, tail, 1) + cols <- lapply(cols, '[', -length(cols[[1]])) + } + } + } else { + triangle_ends <- c(!is.null(col_inf), !is.null(col_sup)) + } + } else { # triangle_ends has values + if (triangle_ends[1] & is.null(col_inf)) { + col_inf <- lapply(cols, head, 1) + cols <- lapply(cols, '[', -1) + } + if (triangle_ends[2] & is.null(col_sup)) { + col_sup <- lapply(cols, tail, 1) + cols <- lapply(cols, '[', -length(cols[[1]])) + } + } + } else { if (!is.list(cols)) { stop("Parameter 'cols' must be a list of character vectors.") @@ -45,13 +100,12 @@ GradientCatsColorBar <- function(nmap, brks = NULL, cols = NULL, vertical = TRUE stop("Parameter 'cols' must be a list of character vectors.") } if (length(cols) != nmap) { - stop("Parameter 'cols' must be a list of the same length as the number of ", - "maps in 'maps'.") + stop("Parameter 'cols' must be a list of the same length as 'nmap'.") } } - for (i in 1:length(cols)) { - if (length(cols[[i]]) != (length(brks) - 1)) { - cols[[i]] <- grDevices::colorRampPalette(cols[[i]])(length(brks) - 1) + for (i_map in 1:length(cols)) { + if (length(cols[[i_map]]) != (length(brks[[i_map]]) - 1)) { + cols[[i_map]] <- grDevices::colorRampPalette(cols[[i_map]])(length(brks[[i_map]]) - 1) } } @@ -68,23 +122,17 @@ GradientCatsColorBar <- function(nmap, brks = NULL, cols = NULL, vertical = TRUE } if (plot) { -brks <- brks[-length(brks)] for (k in 1:nmap) { -triangle_ends <- c(F,T) -col_sup <- cols[[k]][length(cols[[k]])] -cols[[k]] <- cols[[k]][-length(cols[[k]])] - s2dv::ColorBar(brks = brks, cols = cols[[k]], vertical = FALSE, - subsampleg = subsampleg, -# bar_limits = bar_limits, var_limits = var_limits, - triangle_ends = triangle_ends, plot = TRUE, - col_sup = col_sup, +#TODO: Add s2dv:: + ColorBar(brks = brks[[k]], cols = cols[[k]], vertical = FALSE, subsampleg = subsampleg, + bar_limits = bar_limits[[k]], #var_limits = var_limits, + triangle_ends = triangle_ends, col_inf = col_inf[[k]], col_sup = col_sup[[k]], plot = TRUE, draw_separators = draw_separators, title = bar_titles[[k]], title_scale = title_scale, label_scale = label_scale, extra_margin = extra_margin) } } else { - #TODO: col_inf and col_sup - return(list(brks = brks, cols = cols)) + return(list(brks = brks, cols = cols, col_inf = col_inf, col_sup = col_sup)) } } diff --git a/modules/Visualization/R/tmp/PlotCombinedMap.R b/modules/Visualization/R/tmp/PlotCombinedMap.R index 9c7a6ede..e4d6d7f3 100644 --- a/modules/Visualization/R/tmp/PlotCombinedMap.R +++ b/modules/Visualization/R/tmp/PlotCombinedMap.R @@ -78,6 +78,12 @@ #' 'down', 'd', 'D', 'bottom', 'b', 'B', 'south', 's', 'S' (default)\cr #' 'right', 'r', 'R', 'east', 'e', 'E'\cr #' 'left', 'l', 'L', 'west', 'w', 'W' +#'@param return_leg A logical value indicating if the color bars information +#' should be returned by the function. If TRUE, the function doesn't plot the +#' color bars but still creates the layout with color bar areas, and the +#' arguments for GradientCatsColorBar() or ColorBar() will be returned. It is +#' convenient for users to adjust the color bars manually. The default is +#' FALSE, the color bars will be plotted directly. #'@param ... Additional parameters to be passed on to \code{PlotEquiMap}. #' #'@examples @@ -121,16 +127,18 @@ PlotCombinedMap <- function(maps, lon, lat, map_select_fun, display_range, map_dim = 'map', brks = NULL, cols = NULL, + bar_limits = NULL, triangle_ends = c(F, F), col_inf = NULL, col_sup = NULL, col_unknown_map = 'white', mask = NULL, col_mask = 'grey', dots = NULL, bar_titles = NULL, legend_scale = 1, cex_bar_titles = 1.5, - plot_margin = NULL, + plot_margin = NULL, bar_extra_margin = c(2, 0, 2, 0), fileout = NULL, width = 8, height = 5, - size_units = 'in', res = 100, drawleg = T, + size_units = 'in', res = 100, drawleg = T, return_leg = FALSE, ...) { args <- list(...) + # If there is any filenames to store the graphics, process them # to select the right device if (!is.null(fileout)) { @@ -254,12 +262,16 @@ PlotCombinedMap <- function(maps, lon, lat, # Generate the desired brks and cols. Only nmap, brks, cols, bar_limits, and # bar_titles matter here because plot = F. - colorbar <- GradientCatsColorBar(nmap = dim(maps)[map_dim], + var_limits_maps <- range(maps, na.rm = TRUE) + if (is.null(bar_limits)) bar_limits <- display_range + nmap <- dim(maps)[map_dim] + colorbar <- GradientCatsColorBar(nmap = nmap, brks = brks, cols = cols, vertical = FALSE, - subsampleg = NULL, bar_limits = display_range, var_limits = NULL, - triangle_ends = NULL, plot = FALSE, draw_separators = TRUE, + subsampleg = NULL, bar_limits = bar_limits, + var_limits = var_limits_maps, + triangle_ends = triangle_ends, col_inf = col_inf, col_sup = col_sup, plot = FALSE, draw_separators = TRUE, bar_titles = bar_titles, title_scale = cex_bar_titles, label_scale = legend_scale * 1.5, - extra_margin = c(2, 0, 2, 0)) + extra_margin = bar_extra_margin) # Check legend_scale if (!is.numeric(legend_scale)) { @@ -303,9 +315,52 @@ PlotCombinedMap <- function(maps, lon, lat, #---------------------- # Identify the most likely map #---------------------- - brks_norm <- seq(0, 1, length.out = length(colorbar$brks)) - if (is.function(map_select_fun)) { - range_width <- display_range[2] - display_range[1] + if (!is.null(colorbar$col_sup[[1]])) { + + brks_norm <- vector('list', length = nmap) + range_width <- vector('list', length = nmap) + slightly_tune_val <- vector('list', length = nmap) + for (ii in 1:nmap) { + brks_norm[[ii]] <- seq(0, 1, length.out = length(colorbar$brks[[ii]]) + 1) # add one break for col_sup + slightly_tune_val[[ii]] <- brks_norm[[ii]][2] / (length(brks_norm[[ii]]) * 2) + range_width[[ii]] <- diff(range(colorbar$brks[[ii]])) + } + ml_map <- apply(maps, c(lat_dim, lon_dim), function(x) { + if (any(is.na(x))) { + res <- NA + } else { + res <- which(x == map_select_fun(x)) + if (length(res) > 0) { + res <- res_ind <- res[1] + if (map_select_fun(x) < display_range[1] || map_select_fun(x) > display_range[2]) { + res <- -0.5 + } else { + if (map_select_fun(x) > tail(colorbar$brks[[res_ind]], 1)) { # col_sup + res <- res + 1 - slightly_tune_val[[res_ind]] + } else { + res <- res + ((map_select_fun(x) - colorbar$brks[[res_ind]][1]) / + range_width[[res_ind]] * ((length(brks_norm[[res_ind]]) - 2) / (length(brks_norm[[res_ind]]) - 1))) + if (map_select_fun(x) == colorbar$brks[[res_ind]][1]) { + res <- res + slightly_tune_val[[res_ind]] + } + } + } + } else { + res <- -0.5 + } + } + res + }) + + } else { + + brks_norm <- vector('list', length = nmap) + range_width <- display_range[2] - display_range[1] #vector('list', length = nmap) + slightly_tune_val <- vector('list', length = nmap) + for (ii in 1:nmap) { + brks_norm[[ii]] <- seq(0, 1, length.out = length(colorbar$brks[[ii]])) + slightly_tune_val[[ii]] <- brks_norm[[ii]][2] / (length(brks_norm[[ii]]) * 2) + } ml_map <- apply(maps, c(lat_dim, lon_dim), function(x) { if (any(is.na(x))) { res <- NA @@ -313,13 +368,13 @@ PlotCombinedMap <- function(maps, lon, lat, res <- which(x == map_select_fun(x)) if (length(res) > 0) { res <- res[1] - if (map_select_fun(x) < display_range[1] || - map_select_fun(x) > display_range[2]) { + if (map_select_fun(x) < display_range[1] || + map_select_fun(x) > display_range[2]) { res <- -0.5 } else { res <- res + (map_select_fun(x) - display_range[1]) / range_width if (map_select_fun(x) == display_range[1]) { - res <- res + brks_norm[2] / (length(brks_norm) * 2) + res <- res + slightly_tune_val } } } else { @@ -328,18 +383,15 @@ PlotCombinedMap <- function(maps, lon, lat, } res }) - } else { - stop("Providing 'map_select_fun' as array not implemented yet.") - ml_map <- map_select_fun } - nmap <- dim(maps)[map_dim] + nlat <- length(lat) nlon <- length(lon) #---------------------- # Set latitudes from minimum to maximum #---------------------- - if (lat[1] > lat[nlat]){ + if (lat[1] > lat[nlat]) { lat <- lat[nlat:1] indices <- list(nlat:1, TRUE) ml_map <- do.call("[", c(list(x = ml_map), indices)) @@ -372,11 +424,21 @@ PlotCombinedMap <- function(maps, lon, lat, #---------------------- # Set colors and breaks and then PlotEquiMap #---------------------- - tcols <- c(col_unknown_map, colorbar$cols[[1]]) - for (k in 2:nmap) { - tcols <- append(tcols, c(col_unknown_map, colorbar$cols[[k]])) + if (!is.null(colorbar$col_sup[[1]])) { + tcols <- c(col_unknown_map, colorbar$cols[[1]], colorbar$col_sup[[1]]) + tbrks <- c(-1, brks_norm[[1]] + rep(1, each = length(brks_norm[[1]]))) + for (k in 2:nmap) { + tcols <- append(tcols, c(col_unknown_map, colorbar$cols[[k]], colorbar$col_sup[[k]])) + tbrks <- c(tbrks, brks_norm[[k]] + rep(k, each = length(brks_norm[[k]]))) + } + } else { # original code + tcols <- c(col_unknown_map, colorbar$cols[[1]]) + tbrks <- c(-1, brks_norm[[1]] + rep(1, each = length(brks_norm[[1]]))) + for (k in 2:nmap) { + tcols <- append(tcols, c(col_unknown_map, colorbar$cols[[k]])) + tbrks <- c(tbrks, brks_norm[[k]] + rep(k, each = length(brks_norm[[k]]))) + } } - tbrks <- c(-1, brks_norm + rep(1:nmap, each = length(brks_norm))) if (is.null(plot_margin)) { plot_margin <- c(5, 4, 4, 2) + 0.1 # default of par()$mar @@ -429,17 +491,35 @@ PlotCombinedMap <- function(maps, lon, lat, par(mar = old_mar) } - if (drawleg) { - GradientCatsColorBar(nmap = dim(maps)[map_dim], + if (drawleg & !return_leg) { + GradientCatsColorBar(nmap = dim(maps)[map_dim], brks = colorbar$brks, cols = colorbar$cols, vertical = FALSE, - subsampleg = NULL, bar_limits = display_range, var_limits = NULL, - triangle_ends = NULL, plot = TRUE, draw_separators = TRUE, + subsampleg = NULL, bar_limits = bar_limits, + var_limits = var_limits_maps, + triangle_ends = triangle_ends, col_inf = colorbar$col_inf, col_sup = colorbar$col_sup, + plot = TRUE, draw_separators = TRUE, bar_titles = bar_titles, title_scale = cex_bar_titles, label_scale = legend_scale * 1.5, - extra_margin = c(2, 0, 1.5, 0)) + extra_margin = bar_extra_margin) } - - # If the graphic was saved to file, close the connection with the device - if (!is.null(fileout)) dev.off() + + if (!return_leg) { + # If the graphic was saved to file, close the connection with the device + if (!is.null(fileout)) dev.off() + } + + if (return_leg) { + tmp <- list(nmap = dim(maps)[map_dim], + brks = colorbar$brks, cols = colorbar$cols, vertical = FALSE, + subsampleg = NULL, bar_limits = bar_limits, + var_limits = var_limits_maps, + triangle_ends = triangle_ends, col_inf = colorbar$col_inf, col_sup = colorbar$col_sup, + plot = TRUE, draw_separators = TRUE, + bar_titles = bar_titles, title_scale = cex_bar_titles, label_scale = legend_scale * 1.5, + extra_margin = bar_extra_margin) + return(tmp) + #NOTE: The device is not off! Can keep plotting the color bars. + } + } diff --git a/modules/Visualization/R/tmp/PlotEquiMap.R b/modules/Visualization/R/tmp/PlotEquiMap.R new file mode 100644 index 00000000..78025a02 --- /dev/null +++ b/modules/Visualization/R/tmp/PlotEquiMap.R @@ -0,0 +1,1267 @@ +#'Maps A Two-Dimensional Variable On A Cylindrical Equidistant Projection +#' +#'Map longitude-latitude array (on a regular rectangular or gaussian grid) +#'on a cylindrical equidistant latitude and longitude projection with coloured +#'grid cells. Only the region for which data has been provided is displayed. +#'A colour bar (legend) can be plotted and adjusted. It is possible to draw +#'superimposed arrows, dots, symbols, contour lines and boxes. A number of +#'options is provided to adjust the position, size and colour of the +#'components. Some parameters are provided to add and adjust the masks that +#'include continents, oceans, and lakes. This plot function is compatible with +#'figure layouts if colour bar is disabled. +#' +#'@param var Array with the values at each cell of a grid on a regular +#' rectangular or gaussian grid. The array is expected to have two +#' dimensions: c(latitude, longitude). Longitudes can be in ascending or +#' descending order and latitudes in any order. It can contain NA values +#' (coloured with 'colNA'). Arrays with dimensions c(longitude, latitude) +#' will also be accepted but 'lon' and 'lat' will be used to disambiguate so +#' this alternative is not appropriate for square arrays. It is allowed that +#' the positions of the longitudinal and latitudinal coordinate dimensions +#' are interchanged. +#'@param lon Numeric vector of longitude locations of the cell centers of the +#' grid of 'var', in ascending or descending order (same as 'var'). Expected +#' to be regularly spaced, within either of the ranges [-180, 180] or +#' [0, 360]. Data for two adjacent regions split by the limits of the +#' longitude range can also be provided, e.g. \code{lon = c(0:50, 300:360)} +#' ('var' must be provided consitently). +#'@param lat Numeric vector of latitude locations of the cell centers of the +#' grid of 'var', in any order (same as 'var'). Expected to be from a regular +#' rectangular or gaussian grid, within the range [-90, 90]. +#'@param varu Array of the zonal component of wind/current/other field with +#' the same dimensions as 'var'. It is allowed that the positions of the +#' longitudinal and latitudinal coordinate dimensions are interchanged. +#'@param varv Array of the meridional component of wind/current/other field +#' with the same dimensions as 'var'. It is allowed that the positions of the +#' longitudinal and latitudinal coordinate dimensions are interchanged. +#'@param toptitle Top title of the figure, scalable with parameter +#' 'title_scale'. +#'@param sizetit Scale factor for the figure top title provided in parameter +#' 'toptitle'. Deprecated. Use 'title_scale' instead. +#'@param units Title at the top of the colour bar, most commonly the units of +#' the variable provided in parameter 'var'. +#'@param brks,cols,bar_limits,triangle_ends Usually only providing 'brks' is +#' enough to generate the desired colour bar. These parameters allow to +#' define n breaks that define n - 1 intervals to classify each of the values +#' in 'var'. The corresponding grid cell of a given value in 'var' will be +#' coloured in function of the interval it belongs to. These parameters are +#' sent to \code{ColorBar()} to generate the breaks and colours. Additional +#' colours for values beyond the limits of the colour bar are also generated +#' and applied to the plot if 'bar_limits' or 'brks' and 'triangle_ends' are +#' properly provided to do so. See ?ColorBar for a full explanation. +#'@param col_inf,col_sup,colNA Colour identifiers to colour the values in +#' 'var' that go beyond the extremes of the colour bar and to colour NA +#' values, respectively. 'colNA' takes attr(cols, 'na_color') if available by +#' default, where cols is the parameter 'cols' if provided or the vector of +#' colors returned by 'color_fun'. If not available, it takes 'pink' by +#' default. 'col_inf' and 'col_sup' will take the value of 'colNA' if not +#' specified. See ?ColorBar for a full explanation on 'col_inf' and 'col_sup'. +#'@param color_fun,subsampleg,bar_extra_labels,draw_bar_ticks Set of +#' parameters to control the visual aspect of the drawn colour bar +#' (1/3). See ?ColorBar for a full explanation. +#'@param draw_separators,triangle_ends_scale,bar_label_digits Set of +#' parameters to control the visual aspect of the drawn colour bar +#' (2/3). See ?ColorBar for a full explanation. +#'@param bar_label_scale,units_scale,bar_tick_scale,bar_extra_margin Set of +#' parameters to control the visual aspect of the drawn colour bar (3/3). +#' See ?ColorBar for a full explanation. +#'@param square Logical value to choose either to draw a coloured square for +#' each grid cell in 'var' (TRUE; default) or to draw contour lines and fill +#' the spaces in between with colours (FALSE). In the latter case, +#' 'filled.continents' will take the value FALSE if not specified. +#'@param filled.continents Colour to fill in drawn projected continents. +#' Takes the value gray(0.5) by default or, if 'square = FALSE', takes the +#' value FALSE. If set to FALSE, continents are not filled in. +#'@param filled.oceans A logical value or the color name to fill in drawn +#' projected oceans. The default value is FALSE. If it is TRUE, the default +#' colour is "light blue". +#'@param country.borders A logical value indicating if the country borders +#' should be plotted (TRUE) or not (FALSE). It only works when +#' 'filled.continents' is FALSE. The default value is FALSE. +#'@param coast_color Colour of the coast line of the drawn projected continents. +#' Takes the value gray(0.5) by default. +#'@param coast_width Line width of the coast line of the drawn projected +#' continents. Takes the value 1 by default. +#'@param lake_color Colour of the lake or other water body inside continents. +#' The default value is NULL. +#'@param shapefile A character string of the path to a .rds file or a list +#' object containinig shape file data. If it is a .rds file, it should contain +#' a list. The list should contains 'x' and 'y' at least, which indicate the +#' location of the shape. The default value is NULL. +#'@param shapefile_color Line color of the shapefile. +#'@param shapefile_lwd Line width of the shapefile. The default value is 1. +#'@param contours Array of same dimensions as 'var' to be added to the plot +#' and displayed with contours. Parameter 'brks2' is required to define the +#' magnitude breaks for each contour curve. Disregarded if 'square = FALSE'. +#' It is allowed that the positions of the longitudinal and latitudinal +#' coordinate dimensions are interchanged. +#'@param brks2 Vector of magnitude breaks where to draw contour curves for the +#' array provided in 'contours' or if 'square = FALSE'. +#'@param contour_lwd Line width of the contour curves provided via 'contours' +#' and 'brks2', or if 'square = FALSE'. +#'@param contour_color Line color of the contour curves provided via 'contours' +#' and 'brks2', or if 'square = FALSE'. +#'@param contour_lty Line type of the contour curves. Takes 1 (solid) by +#' default. See help on 'lty' in par() for other accepted values. +#'@param contour_draw_label A logical value indicating whether to draw the +#' contour labels or not. The default value is TRUE. +#'@param contour_label_scale Scale factor for the superimposed labels when +#' drawing contour levels. +#'@param dots Array of same dimensions as 'var' or with dimensions +#' c(n, dim(var)), where n is the number of dot/symbol layers to add to the +#' plot. A value of TRUE at a grid cell will draw a dot/symbol on the +#' corresponding square of the plot. By default all layers provided in 'dots' +#' are plotted with dots, but a symbol can be specified for each of the +#' layers via the parameter 'dot_symbol'. It is allowed that the positions of +#' the longitudinal and latitudinal coordinate dimensions are interchanged. +#'@param dot_symbol Single character/number or vector of characters/numbers +#' that correspond to each of the symbol layers specified in parameter 'dots'. +#' If a single value is specified, it will be applied to all the layers in +#' 'dots'. Takes 15 (centered square) by default. See 'pch' in par() for +#' additional accepted options. +#'@param dot_size Scale factor for the dots/symbols to be plotted, specified +#' in 'dots'. If a single value is specified, it will be applied to all +#' layers in 'dots'. Takes 1 by default. +#'@param arr_subsamp Subsampling factor to select a subset of arrows in +#' 'varu' and 'varv' to be drawn. Only one out of arr_subsamp arrows will +#' be drawn. Takes 1 by default. +#'@param arr_scale Scale factor for drawn arrows from 'varu' and 'varv'. +#' Takes 1 by default. +#'@param arr_ref_len Length of the refence arrow to be drawn as legend at the +#' bottom of the figure (in same units as 'varu' and 'varv', only affects the +#' legend for the wind or variable in these arrays). Defaults to 15. +#'@param arr_units Units of 'varu' and 'varv', to be drawn in the legend. +#' Takes 'm/s' by default. +#'@param arr_scale_shaft Parameter for the scale of the shaft of the arrows +#' (which also depend on the number of figures and the arr_scale parameter). +#' Defaults to 1. +#'@param arr_scale_shaft_angle Parameter for the scale of the angle of the +#' shaft of the arrows (which also depend on the number of figure and the +#' arr_scale parameter). Defaults to 1. +#'@param axelab Whether to draw longitude and latitude axes or not. +#' TRUE by default. +#'@param labW Whether to label the longitude axis with a 'W' instead of minus +#' for negative values. Defaults to FALSE. +#'@param lab_dist_x A numeric of the distance of the longitude labels to the +#' box borders. The default value is NULL and is automatically adjusted by +#' the function. +#'@param lab_dist_y A numeric of the distance of the latitude labels to the +#' box borders. The default value is NULL and is automatically adjusted by +#' the function. +#'@param degree_sym A logical indicating whether to include degree symbol +#' (30° N) or not (30N; default). +#'@param intylat Interval between latitude ticks on y-axis, in degrees. +#' Defaults to 20. +#'@param intxlon Interval between latitude ticks on x-axis, in degrees. +#' Defaults to 20. +#'@param xlonshft A numeric of the degrees to shift the latitude ticks. The +#' default value is 0. +#'@param ylatshft A numeric of the degrees to shift the longitude ticks. The +#' default value is 0. +#'@param xlabels A vector of character string of the custumized x-axis labels. +#' The values should correspond to each tick, which is decided by the longitude +#' and parameter 'intxlon'. The default value is NULL and the labels will be +#' automatically generated. +#'@param ylabels A vector of character string of the custumized y-axis labels. +#' The values should correspond to each tick, which is decided by the latitude +#' and parameter 'intylat'. The default value is NULL and the labels will be +#' automatically generated. +#'@param axes_tick_scale Scale factor for the tick lines along the longitude +#' and latitude axes. +#'@param axes_label_scale Scale factor for the labels along the longitude +#' and latitude axes. +#'@param drawleg Whether to plot a color bar (legend, key) or not. Defaults to +#' TRUE. It is not possible to plot the colour bar if 'add = TRUE'. Use +#' ColorBar() and the return values of PlotEquiMap() instead. +#'@param boxlim Limits of a box to be added to the plot, in degrees: +#' c(x1, y1, x2, y2). A list with multiple box specifications can also be +#' provided. +#'@param boxcol Colour of the box lines. A vector with a colour for each of +#' the boxes is also accepted. Defaults to 'purple2'. +#'@param boxlwd Line width of the box lines. A vector with a line width for +#' each of the boxes is also accepted. Defaults to 5. +#'@param margin_scale Scale factor for the margins around the map plot, with +#' the format c(y1, x1, y2, x2). Defaults to rep(1, 4). If drawleg = TRUE, +#' then margin_scale[1] is subtracted 1 unit. +#'@param title_scale Scale factor for the figure top title. Defaults to 1. +#'@param numbfig Number of figures in the layout the plot will be put into. +#' A higher numbfig will result in narrower margins and smaller labels, +#' axe labels, ticks, thinner lines, ... Defaults to 1. +#'@param fileout File where to save the plot. If not specified (default) a +#' graphics device will pop up. Extensions allowed: eps/ps, jpeg, png, pdf, +#' bmp and tiff. +#'@param width File width, in the units specified in the parameter size_units +#' (inches by default). Takes 8 by default. +#'@param height File height, in the units specified in the parameter +#' size_units (inches by default). Takes 5 by default. +#'@param size_units Units of the size of the device (file or window) to plot +#' in. Inches ('in') by default. See ?Devices and the creator function of +#' the corresponding device. +#'@param res Resolution of the device (file or window) to plot in. See +#' ?Devices and the creator function of the corresponding device. +#'@param \dots Arguments to be passed to the method. Only accepts the following +#' graphical parameters:\cr +#' adj ann ask bg bty cex.sub cin col.axis col.lab col.main col.sub cra crt +#' csi cxy err family fg font font.axis font.lab font.main font.sub lend +#' lheight ljoin lmitre mex mfcol mfrow mfg mkh omd omi page pch pin plt +#' pty smo srt tcl usr xaxp xaxs xaxt xlog xpd yaxp yaxs yaxt ylbias ylog \cr +#' For more information about the parameters see `par`. +#' +#'@return +#'\item{brks}{ +#' Breaks used for colouring the map (and legend if drawleg = TRUE). +#'} +#'\item{cols}{ +#' Colours used for colouring the map (and legend if drawleg = TRUE). Always +#' of length length(brks) - 1. +#'} +#'\item{col_inf}{ +#' Colour used to draw the lower triangle end in the colour bar (NULL if not +#' drawn at all). +#' } +#'\item{col_sup}{ +#' Colour used to draw the upper triangle end in the colour bar (NULL if not +#' drawn at all). +#'} +#' +#'@examples +#'# See examples on Load() to understand the first lines in this example +#' \dontrun{ +#'data_path <- system.file('sample_data', package = 's2dv') +#'expA <- list(name = 'experiment', path = file.path(data_path, +#' 'model/$EXP_NAME$/$STORE_FREQ$_mean/$VAR_NAME$_3hourly', +#' '$VAR_NAME$_$START_DATE$.nc')) +#'obsX <- list(name = 'observation', path = file.path(data_path, +#' '$OBS_NAME$/$STORE_FREQ$_mean/$VAR_NAME$', +#' '$VAR_NAME$_$YEAR$$MONTH$.nc')) +#' +#'# Now we are ready to use Load(). +#'startDates <- c('19851101', '19901101', '19951101', '20001101', '20051101') +#'sampleData <- Load('tos', list(expA), list(obsX), startDates, +#' leadtimemin = 1, leadtimemax = 4, output = 'lonlat', +#' latmin = 27, latmax = 48, lonmin = -12, lonmax = 40) +#' } +#' \dontshow{ +#'startDates <- c('19851101', '19901101', '19951101', '20001101', '20051101') +#'sampleData <- s2dv:::.LoadSampleData('tos', c('experiment'), +#' c('observation'), startDates, +#' leadtimemin = 1, +#' leadtimemax = 4, +#' output = 'lonlat', +#' latmin = 27, latmax = 48, +#' lonmin = -12, lonmax = 40) +#' } +#'PlotEquiMap(sampleData$mod[1, 1, 1, 1, , ], sampleData$lon, sampleData$lat, +#' toptitle = 'Predicted sea surface temperature for Nov 1960 from 1st Nov', +#' title_scale = 0.5) +#'@import graphics maps +#'@importFrom grDevices dev.cur dev.new dev.off gray +#'@importFrom stats cor +#'@export +PlotEquiMap <- function(var, lon, lat, varu = NULL, varv = NULL, + toptitle = NULL, sizetit = NULL, units = NULL, + brks = NULL, cols = NULL, bar_limits = NULL, + triangle_ends = NULL, col_inf = NULL, col_sup = NULL, + colNA = NULL, color_fun = clim.palette(), + square = TRUE, filled.continents = NULL, + filled.oceans = FALSE, country.borders = FALSE, + coast_color = NULL, coast_width = 1, lake_color = NULL, + shapefile = NULL, shapefile_color = NULL, shapefile_lwd = 1, + contours = NULL, brks2 = NULL, contour_lwd = 0.5, + contour_color = 'black', contour_lty = 1, + contour_draw_label = TRUE, contour_label_scale = 1, + dots = NULL, dot_symbol = 4, dot_size = 1, + arr_subsamp = floor(length(lon) / 30), arr_scale = 1, + arr_ref_len = 15, arr_units = "m/s", + arr_scale_shaft = 1, arr_scale_shaft_angle = 1, + axelab = TRUE, labW = FALSE, + lab_dist_x = NULL, lab_dist_y = NULL, degree_sym = FALSE, + intylat = 20, intxlon = 20, + xlonshft = 0, ylatshft = 0, xlabels = NULL, ylabels = NULL, + axes_tick_scale = 1, axes_label_scale = 1, + drawleg = TRUE, subsampleg = NULL, + bar_extra_labels = NULL, draw_bar_ticks = TRUE, + draw_separators = FALSE, triangle_ends_scale = 1, + bar_label_digits = 4, bar_label_scale = 1, + units_scale = 1, bar_tick_scale = 1, + bar_extra_margin = rep(0, 4), + boxlim = NULL, boxcol = 'purple2', boxlwd = 5, + margin_scale = rep(1, 4), title_scale = 1, + numbfig = NULL, fileout = NULL, + width = 8, height = 5, size_units = 'in', + res = 100, ...) { + # Process the user graphical parameters that may be passed in the call + ## Graphical parameters to exclude + excludedArgs <- c("cex", "cex.axis", "cex.lab", "cex.main", "col", "din", "fig", "fin", "lab", "las", "lty", "lwd", "mai", "mar", "mgp", "new", "oma", "ps", "tck") + userArgs <- .FilterUserGraphicArgs(excludedArgs, ...) + + # If there is any filenames to store the graphics, process them + # to select the right device + if (!is.null(fileout)) { + deviceInfo <- .SelectDevice(fileout = fileout, width = width, height = height, units = size_units, res = res) + saveToFile <- deviceInfo$fun + fileout <- deviceInfo$files + } + + # Check lon, lat + if (!is.numeric(lon) || !is.numeric(lat)) { + stop("Parameters 'lon' and 'lat' must be numeric vectors.") + } + + # Check var + if (is.null(var)) { + stop("Parameter 'var' cannot be NULL.") + } + if (!is.array(var)) { + stop("Parameter 'var' must be a numeric array.") + } + + transpose <- FALSE + if (!is.null(names(dim(var)))) { + if (any(names(dim(var)) %in% .KnownLonNames()) && + any(names(dim(var)) %in% .KnownLatNames())) { + lon_dim <- names(dim(var))[names(dim(var)) %in% .KnownLonNames()] + lat_dim <- names(dim(var))[names(dim(var)) %in% .KnownLatNames()] + } else { + names(dim(var)) <- NULL + lat_dim <- NULL + lon_dim <- NULL + .warning("Dimension names of 'var' doesn't correspond to any coordinates names supported by s2dv package.") + } + } else { + lon_dim <- NULL + lat_dim <- NULL + .warning("Parameter 'var' should have dimension names. Coordinates 'lon' and 'lat' have been assigned into the corresponding coordinates dimensions.") + } + + if (length(dim(var)) > 2) { + if (!is.null(lon_dim) & !is.null(lat_dim)) { + dimnames <- names(dim(var)) + dim(var) <- dim(var)[which((dimnames == lon_dim | dimnames == lat_dim | dim(var) != 1))] + } else { + if (all(dim(var) == 1)) { + dim(var) <- c(1, 1) + } else if (length(dim(var)[which(dim(var) > 1)]) == 2) { + var <- drop(var) + } else if (length(dim(var)[which(dim(var) > 1)]) == 1) { + dim(var) <- c(dim(var)[which(dim(var) > 1)], 1) + } + } + } + + if (length(dim(var)) != 2) { + stop("Parameter 'var' must be a numeric array with two dimensions.") + } + + if ((dim(var)[1] == length(lon) && dim(var)[2] == length(lat)) || + (dim(var)[2] == length(lon) && dim(var)[1] == length(lat))) { + if (dim(var)[2] == length(lon) && dim(var)[1] == length(lat)) { + if (length(lon) == length(lat)) { + if (is.null(names(dim(var)))) { + .warning("Parameter 'var' should have dimension names. Coordinates 'lon' and 'lat' have been assigned into the first and second dimensions.") + } else { + if (names(dim(var)[1]) == lat_dim) { + transpose <- TRUE + } + } + } else { + transpose <- TRUE + } + } + } else { + stop("Parameters 'lon' and 'lat' must have as many elements as the number of cells along longitudes and latitudes in the input array 'var'.") + } + + if (!is.null(names(dim(var)))) { + if (names(dim(var)[1]) == lon_dim) { + if (transpose) { + stop("Coordinates dimensions of 'var' doesn't correspond to lat or lon.") + } + } else if (names(dim(var)[2]) == lon_dim) { + if (!transpose) { + stop("Coordinates dimensions of 'var' doesn't correspond to lat or lon.") + } + } + } + + # Transpose the input matrices because the base plot functions work directly + # with dimensions c(lon, lat). + + if (transpose) { + var <- t(var) + } + + transpose <- FALSE + + names(dim(var)) <- c(lon_dim, lat_dim) + dims <- dim(var) + + # Check varu and varv + if (!is.null(varu) && !is.null(varv)) { + if (!is.array(varu) || !(length(dim(varu)) == 2)) { + stop("Parameter 'varu' must be a numerical array with two dimensions.") + } + if (!is.array(varv) || !(length(dim(varv)) == 2)) { + stop("Parameter 'varv' must be a numerical array with two dimensions.") + } + } else if (!is.null(varu) || !is.null(varv)) { + stop("Only one of the components 'varu' or 'varv' has been provided. Both must be provided.") + } + + if (!is.null(varu) && !is.null(varv)) { + if (!all(dim(varu) %in% dim(varv)) || !all(names(dim(varv)) %in% names(dim(varu)))) { + stop("Parameter 'varu' and 'varv' must have equal dimensions and dimension names.") + } else if (any(dim(varu) != dim(varv)) || any(names(dim(varv)) != names(dim(varu)))) { + varv <- t(varv) + names(dim(varv)) <- names(dim(varu)) + } + + if (is.null(lon_dim)) { + names(dim(varu)) <- NULL + names(dim(varv)) <- NULL + } else { + if (!is.null(names(dim(varu)))) { + if (!(lon_dim %in% names(dim(varu)) && lat_dim %in% names(dim(varu)))) { + stop("Parameters 'varu' and 'varv' must have same dimension names as 'var'.") + } else if (dim(varu)[lon_dim] != dim(var)[lon_dim] || dim(varu)[lat_dim] != dim(var)[lat_dim]) { + stop("Parameters 'varu' and 'varv' must have same dimensions as 'var'.") + } + } else { + .warning("Parameters 'varu' and 'varv' should have dimension names. Coordinates 'lon' and 'lat' have been assigned into the corresponding coordinates dimensions.") + } + } + + + if ((dim(varu)[1] == dims[1] && dim(varu)[2] == dims[2]) || + (dim(varu)[2] == dims[1] && dim(varu)[1] == dims[2])) { + if (dim(varu)[2] == dims[1] && dim(varu)[1] == dims[2]) { + if (length(lon) == length(lat)) { + if (is.null(names(dim(varu)))) { + .warning("Parameters 'varu' and 'varv' should have dimension names. Coordinates 'lon' and 'lat' have been assigned into the first and second dimensions.") + } else { + if (names(dim(varu)[1]) == lat_dim) { + transpose <- TRUE + } + } + } else { + transpose <- TRUE + } + } + } else { + stop("Parameters 'lon' and 'lat' must have as many elements as the number of cells along longitudes and latitudes in the input array 'varu' and 'varv'.") + } + + if (transpose) { + varu <- t(varu) + varv <- t(varv) + } + + transpose <- FALSE + + } + + # Check contours + if (!is.null(contours)) { + if (!is.array(contours) || !(length(dim(contours)) == 2)) { + stop("Parameter 'contours' must be a numerical array with two dimensions.") + } + } + + + if (!is.null(contours)) { + + if (is.null(lon_dim)) { + names(dim(contours)) <- NULL + } else { + if (!is.null(names(dim(contours)))) { + if (!(lon_dim %in% names(dim(contours)) && lat_dim %in% names(dim(contours)))) { + stop("Parameters 'contours' must have same dimension names as 'var'.") + } else if (dim(contours)[lon_dim] != dim(var)[lon_dim] || dim(contours)[lat_dim] != dim(var)[lat_dim]) { + stop("Parameters 'contours' must have same dimensions as 'var'.") + } + } else { + .warning("Parameters 'contours' should have dimension names. Coordinates 'lon' and 'lat' have been assigned into the corresponding coordinates dimensions.") + } + } + + + transpose <- FALSE + if ((dim(contours)[1] == dims[1] && dim(contours)[2] == dims[2]) || + (dim(contours)[2] == dims[1] && dim(contours)[1] == dims[2])) { + if (dim(contours)[2] == dims[1] && dim(contours)[1] == dims[2]) { + if (length(lon) == length(lat)) { + if (is.null(names(dim(contours)))) { + .warning("Parameter 'contours' should have dimension names. Coordinates 'lon' and 'lat' have been assigned into the first and second dimensions.") + } else { + if (names(dim(contours)[1]) == lat_dim) { + transpose <- TRUE + } + } + } else { + transpose <- TRUE + } + } + } else { + stop("Parameters 'lon' and 'lat' must have as many elements as the number of cells along longitudes and latitudes in the input array 'contours'.") + } + + if (transpose) { + contours <- t(contours) + } + + transpose <- FALSE + + } + + # Check toptitle + if (is.null(toptitle) || is.na(toptitle)) { + toptitle <- '' + } + if (!is.character(toptitle)) { + stop("Parameter 'toptitle' must be a character string.") + } + + # Check sizetit + if (!is.null(sizetit)) { + .warning("Parameter 'sizetit' is obsolete. Use 'title_scale' instead.") + if (!is.numeric(sizetit) || length(sizetit) != 1) { + stop("Parameter 'sizetit' must be a single numeric value.") + } + title_scale <- sizetit + } + + var_limits <- c(min(var, na.rm = TRUE), max(var, na.rm = TRUE)) + # Check: brks, cols, subsampleg, bar_limits, color_fun, bar_extra_labels, draw_bar_ticks + # draw_separators, triangle_ends_scale, label_scale, units, units_scale, + # bar_label_digits + # Build: brks, cols, bar_limits, col_inf, col_sup + colorbar <- ColorBar(brks, cols, FALSE, subsampleg, bar_limits, var_limits, + triangle_ends, col_inf, col_sup, color_fun, FALSE, + extra_labels = bar_extra_labels, draw_ticks = draw_bar_ticks, + draw_separators = draw_separators, + triangle_ends_scale = triangle_ends_scale, + label_scale = bar_label_scale, title = units, + title_scale = units_scale, tick_scale = bar_tick_scale, + extra_margin = bar_extra_margin, label_digits = bar_label_digits) + brks <- colorbar$brks + cols <- colorbar$cols + col_inf <- colorbar$col_inf + col_sup <- colorbar$col_sup + bar_limits <- c(head(brks, 1), tail(brks, 1)) + + # Check colNA + if (is.null(colNA)) { + if ('na_color' %in% names(attributes(cols))) { + colNA <- attr(cols, 'na_color') + if (!.IsColor(colNA)) { + stop("The 'na_color' provided as attribute of the colour vector must be a valid colour identifier.") + } + } else { + colNA <- 'pink' + } + } else if (!.IsColor(colNA)) { + stop("Parameter 'colNA' must be a valid colour identifier.") + } + + # Check square + if (!is.logical(square)) { + stop("Parameter 'square' must be logical.") + } + + # Check filled.continents + if (is.null(filled.continents)) { + if (!square) { + filled.continents <- FALSE + } else { + filled.continents <- TRUE + } + } + if (!.IsColor(filled.continents) && !is.logical(filled.continents)) { + stop("Parameter 'filled.continents' must be logical or a colour identifier.") + } else if (!is.logical(filled.continents)) { + continent_color <- filled.continents + filled.continents <- TRUE + } else { + continent_color <- gray(0.5) + } + + # Check filled.oceans + if (!.IsColor(filled.oceans) & !is.logical(filled.oceans)) { + stop("Parameter 'filled.oceans' must be logical or a colour identifier.") + } else if (!is.logical(filled.oceans)) { + ocean_color <- filled.oceans + filled.oceans <- TRUE + } else if (filled.oceans) { + ocean_color <- "light blue" + } + + # Check country.borders + if (!is.logical(country.borders)) { + stop("Parameter 'country.borders' must be logical.") + } + + # Check coast_color + if (is.null(coast_color)) { + if (filled.continents) { + coast_color <- continent_color + } else { + coast_color <- 'black' + } + } + if (!.IsColor(coast_color)) { + stop("Parameter 'coast_color' must be a valid colour identifier.") + } + + # Check coast_width + if (!is.numeric(coast_width)) { + stop("Parameter 'coast_width' must be numeric.") + } + + # Check lake_color + if (!is.null(lake_color)) { + if (!.IsColor(lake_color)) { + stop("Parameter 'lake_color' must be a valid colour identifier.") + } + } + + # Check shapefile + if (!is.null(shapefile)) { + if (is.list(shapefile)) { + shape <- shapefile + if (any(!c('x', 'y') %in% names(shape))) { + stop("The list names of the object in 'shapefile' .rds file should ", + "have at least 'x' and 'y'.") + } + if (length(shape$x) != length(shape$y)) { + stop("The length of x and y in 'shapefile' list should be equal.") + } + } else if (!is.character(shapefile)) { + stop("Parameter 'shapefile' must be a .rds file or a list.") + } else { # .rds file + if (!file.exists(shapefile)) { + stop("Parameter 'shapefile' is not a valid file.") + } + if (!grepl("\\.rds$", shapefile)) { + stop("Parameter 'shapefile' must be a .rds file or a list.") + } + shape <- readRDS(file = shapefile) + if (!is.list(shape)) { + stop("Parameter 'shapefile' should be a .rds file of a list object.") + } + if (any(!c('x', 'y') %in% names(shape))) { + stop("The list names of the object in 'shapefile' .rds file should ", + "have at least 'x' and 'y'.") + } + if (length(shape$x) != length(shape$y)) { + stop("The length of x and y in 'shapefile' list should be equal.") + } + } + } + + # Check shapefile_col + if (is.null(shapefile_color)) { + if (filled.continents) { + shapefile_color <- continent_color + } else { + shapefile_color <- 'black' + } + } + if (!.IsColor(shapefile_color)) { + stop("Parameter 'shapefile_color' must be a valid colour identifier.") + } + + # Check brks2 + if (is.null(brks2)) { + if (is.null(contours)) { + if (!square) { + brks2 <- brks + contours <- var + } + } else { + ll <- signif(min(contours, na.rm = TRUE), 2) + ul <- signif(max(contours, na.rm = TRUE), 2) + brks2 <- signif(seq(ll, ul, length.out = length(brks)), 2) + } + } + + # Check contour_lwd + if (!is.numeric(contour_lwd)) { + stop("Parameter 'contour_lwd' must be numeric.") + } + + # Check contour_color + if (!.IsColor(contour_color)) { + stop("Parameter 'contour_color' must be a valid colour identifier.") + } + + # Check contour_lty + if (!is.numeric(contour_lty) && !is.character(contour_lty)) { + stop("Parameter 'contour_lty' must be either a number or a character string.") + } + + # Check contour_draw_label + if (!is.logical(contour_draw_label)) { + stop("Parameter 'contour_draw_label' must be logical.") + } + + # Check contour_label_scale + if (!is.numeric(contour_label_scale)) { + stop("Parameter 'contour_label_scale' must be numeric.") + } + + # Check dots + if (!is.null(dots)) { + if (!is.array(dots) || !(length(dim(dots)) %in% c(2, 3))) { + stop("Parameter 'dots' must be a logical array with two or three dimensions.") + } + if (length(dim(dots)) == 2) { + dim(dots) <- c(1, dim(dots)) + } + + if (is.null(lon_dim)) { + names(dim(dots)) <- NULL + } else { + if (!is.null(names(dim(dots)))) { + if (!(lon_dim %in% names(dim(dots)) && lat_dim %in% names(dim(dots)))) { + stop("Parameters 'dots' must have same dimension names as 'var'.") + } else if (dim(dots)[lon_dim] != dim(var)[lon_dim] || dim(dots)[lat_dim] != dim(var)[lat_dim]) { + stop("Parameters 'dots' must have same dimensions as 'var'.") + } + } else { + .warning("Parameters 'dots' should have dimension names. Coordinates 'lon' and 'lat' have been assigned into the corresponding coordinates dimensions.") + } + } + + transpose <- FALSE + if ((dim(dots)[2] == dims[1] && dim(dots)[3] == dims[2]) || + (dim(dots)[3] == dims[1] && dim(dots)[2] == dims[2])) { + if (dim(dots)[3] == dims[1] && dim(dots)[2] == dims[2]) { + if (length(lon) == length(lat)) { + if (is.null(names(dim(dots)))) { + .warning("Parameter 'dots' should have dimension names. Coordinates 'lon' and 'lat' have been assigned into the first and second dimensions.") + } else { + if (names(dim(dots)[2]) == lat_dim) { + transpose <- TRUE + } + } + } else { + transpose <- TRUE + } + } + } else { + stop("Parameter 'dots' must have same number of longitudes and latitudes as 'var'.") + } + + if (transpose) { + dots <- aperm(dots, c(1, 3, 2)) + } + + transpose <- FALSE + + } + + # Check dot_symbol and dot_size + if (!is.null(dots)) { + if (!is.numeric(dot_symbol) && !is.character(dot_symbol)) { + stop("Parameter 'dot_symbol' must be a numeric or character string vector.") + } + if (length(dot_symbol) == 1) { + dot_symbol <- rep(dot_symbol, dim(dots)[1]) + } else if (length(dot_symbol) < dim(dots)[1]) { + stop("Parameter 'dot_symbol' does not contain enough symbols.") + } + if (!is.numeric(dot_size)) { + stop("Parameter 'dot_size' must be numeric.") + } + if (length(dot_size) == 1) { + dot_size <- rep(dot_size, dim(dots)[1]) + } else if (length(dot_size) < dim(dots)[1]) { + stop("Parameter 'dot_size' does not contain enough sizes.") + } + } + + # Check arrow parameters + if (!is.numeric(arr_subsamp)) { + stop("Parameter 'arr_subsamp' must be numeric.") + } + if (!is.numeric(arr_scale)) { + stop("Parameter 'arr_scale' must be numeric.") + } + if (!is.numeric(arr_ref_len)) { + stop("Parameter 'arr_ref_len' must be numeric.") + } + if (!is.character(arr_units)) { + stop("Parameter 'arr_units' must be character.") + } + if (!is.numeric(arr_scale_shaft)) { + stop("Parameter 'arr_scale_shaft' must be numeric.") + } + if (!is.numeric(arr_scale_shaft_angle)) { + stop("Parameter 'arr_scale_shaft_angle' must be numeric.") + } + + # Check axis parameters + if (!is.logical(axelab)) { + stop("Parameter 'axelab' must be logical.") + } + if (!is.logical(labW)) { + stop("Parameter 'labW' must be logical.") + } + if (!is.null(lab_dist_x)) { + if (!is.numeric(lab_dist_x)) { + stop("Parameter 'lab_dist_x' must be numeric.") + } + } + if (!is.null(lab_dist_y)) { + if (!is.numeric(lab_dist_y)) { + stop("Parameter 'lab_dist_y' must be numeric.") + } + } + if (!is.numeric(intylat)) { + stop("Parameter 'intylat' must be numeric.") + } else { + intylat <- round(intylat) + } + if (!is.numeric(intxlon)) { + stop("Parameter 'intxlon' must be numeric.") + } else { + intxlon <- round(intxlon) + } + if (!is.numeric(xlonshft) | length(xlonshft) != 1) { + stop("Parameter 'xlonshft' must be a number.") + } + if (!is.numeric(ylatshft) | length(ylatshft) != 1) { + stop("Parameter 'ylatshft' must be a number.") + } + if (!is.null(xlabels)) { + if (!is.character(xlabels) | !is.vector(xlabels)) { + stop("Parameter 'xlabels' must be a vector of character string.") + } + } + if (!is.null(ylabels)) { + if (!is.character(ylabels) | !is.vector(ylabels)) { + stop("Parameter 'ylabels' must be a vector of character string.") + } + } + + # Check legend parameters + if (!is.logical(drawleg)) { + stop("Parameter 'drawleg' must be logical.") + } + + # Check box parameters + if (!is.null(boxlim)) { + if (!is.list(boxlim)) { + boxlim <- list(boxlim) + } + for (i in 1:length(boxlim)) { + if (!is.numeric(boxlim[[i]]) || length(boxlim[[i]]) != 4) { + stop("Parameter 'boxlim' must be a a numeric vector or a list of numeric vectors of length 4 (with W, S, E, N box limits).") + } + } + if (!is.character(boxcol)) { + stop("Parameter 'boxcol' must be a character string or a vector of character strings.") + } else { + if (length(boxlim) != length(boxcol)) { + if (length(boxcol) == 1) { + boxcol <- rep(boxcol, length(boxlim)) + } else { + stop("Parameter 'boxcol' must have a colour for each box in 'boxlim' or a single colour for all boxes.") + } + } + } + if (!is.numeric(boxlwd)) { + stop("Parameter 'boxlwd' must be numeric.") + } else { + if (length(boxlim) != length(boxlwd)) { + if (length(boxlwd) == 1) { + boxlwd <- rep(boxlwd, length(boxlim)) + } else { + stop("Parameter 'boxlwd' must have a line width for each box in 'boxlim' or a single line width for all boxes.") + } + } + } + } + + # Check margin_scale + if (!is.numeric(margin_scale) || length(margin_scale) != 4) { + stop("Parameter 'margin_scale' must be a numeric vector of length 4.") + } + + # Check title_scale + if (!is.numeric(title_scale)) { + stop("Parameter 'title_scale' must be numeric.") + } + + # Check axes_tick_scale + if (!is.numeric(axes_tick_scale)) { + stop("Parameter 'axes_tick_scale' must be numeric.") + } + + # Check axes_label_scale + if (!is.numeric(axes_label_scale)) { + stop("Parameter 'axes_label_scale' must be numeric.") + } + + # Check numbfig + if (!is.null(numbfig)) { + if (!is.numeric(numbfig)) { + stop("Parameter 'numbfig' must be numeric.") + } else { + numbfig <- round(numbfig) + scale <- 1 / numbfig ** 0.3 + axes_tick_scale <- axes_tick_scale * scale + axes_label_scale <- axes_label_scale * scale + title_scale <- title_scale * scale + margin_scale <- margin_scale * scale + arr_scale <- arr_scale * scale + dot_size <- dot_size * scale + contour_label_scale <- contour_label_scale * scale + contour_lwd <- contour_lwd * scale + } + } + + # + # Input arguments + # ~~~~~~~~~~~~~~~~~ + # + latb <- sort(lat, index.return = TRUE) + dlon <- diff(lon) + wher <- which(dlon > (mean(dlon) + 1)) + if (length(wher) > 0) { + .warning("Detect gap in 'lon' vector, which is considered as crossing the border.") + lon[(wher + 1):dims[1]] <- lon[(wher + 1):dims[1]] - 360 + } + lonb <- sort(lon, index.return = TRUE) + latmin <- floor(min(lat) / 10) * 10 + latmax <- ceiling(max(lat) / 10) * 10 + lonmin <- floor(min(lon) / 10) * 10 + lonmax <- ceiling(max(lon) / 10) * 10 + + # + # Plotting the map + # ~~~~~~~~~~~~~~~~~~ + # + + # Open connection to graphical device + if (!is.null(fileout)) { + saveToFile(fileout) + } else if (names(dev.cur()) == 'null device') { + dev.new(units = size_units, res = res, width = width, height = height) + } + + # + # Defining the layout + # ~~~~~~~~~~~~~~~~~~~~~ + # + if (drawleg) { + margin_scale[1] <- margin_scale[1] - 1 + } + margins <- rep(0.4, 4) * margin_scale + margins[4] <- margins[4] + 1 + cex_title <- 2 * title_scale + cex_axes_labels <- 1.3 * axes_label_scale + cex_axes_ticks <- -0.5 * axes_tick_scale + spaceticklab <- 0 + if (axelab) { + # Y axis label + if (!is.null(ylabels)) { + ypos <- seq(latmin, latmax, intylat) + ylatshft + if (length(ypos) != length(ylabels)) { + stop(paste0("Parameter 'ylabels' must have the same length as the latitude ", + "vector spaced by 'intylat' (length = ", length(ypos), ").")) + } + ylabs <- ylabels + } else { + ypos <- seq(latmin, latmax, intylat) + ylatshft + letters <- array('', length(ypos)) + if (degree_sym == FALSE) { + letters[ypos < 0] <- 'S' + letters[ypos > 0] <- 'N' + } else { + letters[ypos < 0] <- paste(intToUtf8(176), 'S') + letters[ypos > 0] <- paste(intToUtf8(176), 'N') + } + ylabs <- paste(as.character(abs(ypos)), letters, sep = '') + } + + # X axis label + if (!is.null(xlabels)) { + xpos <- seq(lonmin, lonmax, intxlon) + xlonshft + if (length(xpos) != length(xlabels)) { + stop(paste0("Parameter 'xlabels' must have the same length as the longitude ", + "vector spaced by 'intxlon' (length = ", length(xpos), ").")) + } + xlabs <- xlabels + } else { + xpos <- seq(lonmin, lonmax, intxlon) + xlonshft + letters <- array('', length(xpos)) + if (labW) { + xpos2 <- xpos + xpos2[xpos2 > 180] <- 360 - xpos2[xpos2 > 180] + } + if (degree_sym == FALSE) { + letters[xpos < 0] <- 'W' + letters[xpos > 0] <- 'E' + } else { + letters[xpos < 0] <- paste(intToUtf8(176), 'W') + letters[xpos > 0] <- paste(intToUtf8(176), 'E') + } + if (labW) { + letters[xpos == 0] <- ' ' + letters[xpos == 180] <- ' ' + if (degree_sym == FALSE) { + letters[xpos > 180] <- 'W' + } else { + letters[xpos > 180] <- paste(intToUtf8(176), 'W') + } + xlabs <- paste(as.character(abs(xpos2)), letters, sep = '') + } else { + xlabs <- paste(as.character(abs(xpos)), letters, sep = '') + } + } + spaceticklab <- max(-cex_axes_ticks, 0) + margins[1] <- margins[1] + 1.2 * cex_axes_labels + spaceticklab + margins[2] <- margins[2] + 1.2 * cex_axes_labels + spaceticklab + } + bar_extra_margin[2] <- bar_extra_margin[2] + margins[2] + bar_extra_margin[4] <- bar_extra_margin[4] + margins[4] + if (toptitle != '') { + margins[3] <- margins[3] + cex_title + 1 + } + if (!is.null(varu)) { + margins[1] <- margins[1] + 2.2 * units_scale + } + + if (drawleg) { + layout(matrix(1:2, ncol = 1, nrow = 2), heights = c(5, 1)) + } + plot.new() + # Load the user parameters + par(userArgs) + par(mar = margins, cex.main = cex_title, cex.axis = cex_axes_labels, + mgp = c(0, spaceticklab, 0), las = 0) + + #NOTE: Here creates the window for later plot. If 'usr' for par() is not specified, + # use the lat/lon as the borders. If 'usr' is specified, use the assigned values. + if (is.null(userArgs$usr)) { + #NOTE: The grids are assumed to be equally spaced + xlim_cal <- c(lonb$x[1] - (lonb$x[2] - lonb$x[1]) / 2, + lonb$x[length(lonb$x)] + (lonb$x[2] - lonb$x[1]) / 2) + ylim_cal <- c(latb$x[1] - (latb$x[2] - latb$x[1]) / 2, + latb$x[length(latb$x)] + (latb$x[2] - latb$x[1]) / 2) + plot.window(xlim = xlim_cal, ylim = ylim_cal, xaxs = 'i', yaxs = 'i') +# Below is Old code. The border grids are only half plotted. +# plot.window(xlim = range(lonb$x, finite = TRUE), ylim = range(latb$x, finite = TRUE), +# xaxs = 'i', yaxs = 'i') + } else { + plot.window(xlim = par("usr")[1:2], ylim = par("usr")[3:4], xaxs = 'i', yaxs = 'i') + } + + if (axelab) { + lab_distance_y <- ifelse(is.null(lab_dist_y), spaceticklab + 0.2, lab_dist_y) + lab_distance_x <- ifelse(is.null(lab_dist_x), spaceticklab + cex_axes_labels / 2 - 0.3, lab_dist_x) + + axis(2, at = ypos, labels = ylabs, cex.axis = cex_axes_labels, tcl = cex_axes_ticks, + mgp = c(0, lab_distance_y, 0)) + axis(1, at = xpos, labels = xlabs, cex.axis = cex_axes_labels, tcl = cex_axes_ticks, + mgp = c(0, lab_distance_x, 0)) + } + title(toptitle, cex.main = cex_title) + rect(par("usr")[1], par("usr")[3], par("usr")[2], par("usr")[4], col = colNA) + col_inf_image <- ifelse(is.null(col_inf), colNA, col_inf) + col_sup_image <- ifelse(is.null(col_sup), colNA, col_sup) + if (square) { + # If lat and lon are both regular-spaced, "useRaster = TRUE" can avoid + # artifact white lines on the figure. If not, useRaster has to be FALSE (default) + tryCatch({ + image(lonb$x, latb$x, var[lonb$ix, latb$ix], + col = c(col_inf_image, cols, col_sup_image), + breaks = c(-.Machine$double.xmax, brks, .Machine$double.xmax), + axes = FALSE, xlab = "", ylab = "", add = TRUE, useRaster = TRUE) + }, error = function(x) { + image(lonb$x, latb$x, var[lonb$ix, latb$ix], + col = c(col_inf_image, cols, col_sup_image), + breaks = c(-.Machine$double.xmax, brks, .Machine$double.xmax), + axes = FALSE, xlab = "", ylab = "", add = TRUE) + }) + } else { + .filled.contour(lonb$x, latb$x, var[lonb$ix, latb$ix], + levels = c(.Machine$double.xmin, brks, .Machine$double.xmax), + col = c(col_inf_image, cols, col_sup_image)) + } + if (!is.null(contours)) { +#NOTE: 'labcex' is the absolute size of contour labels. Parameter 'contour_label_scale' +# is provided in PlotEquiMap() but it was not used. Here, 'cex_axes_labels' was used +# and it was calculated from 'axes_label_scale', the size of lat/lon axis label. +# It is changed to use contour_label_scale*par('cex'). + contour(lonb$x, latb$x, contours[lonb$ix, latb$ix], levels = brks2, + method = "edge", add = TRUE, +# labcex = cex_axes_labels, + labcex = contour_label_scale * par("cex"), + lwd = contour_lwd, lty = contour_lty, + col = contour_color, drawlabels = contour_draw_label) + } + + # + # Adding black dots or symbols + # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + # + if (!is.null(dots)) { + data_avail <- !is.na(var) + for (counter in 1:(dim(dots)[1])) { + points <- which(dots[counter, , ] & data_avail, arr.ind = TRUE) + points(lon[points[, 1]], lat[points[, 2]], + pch = dot_symbol[counter], + cex = dot_size[counter] * 3 / sqrt(sqrt(length(var))), + lwd = dot_size[counter] * 3 / sqrt(sqrt(length(var)))) + } + } + # + # Plotting continents + # ~~~~~~~~~~~~~~~~~~~~~ + # + wrap_vec <- c(lonb$x[1], lonb$x[1] + 360) + old_lwd <- par('lwd') + par(lwd = coast_width) + # If [0, 360], use GEOmap; if [-180, 180], use maps::map + # UPDATE: Use maps::map for both cases. The difference between GEOmap and + # maps is trivial. The only thing we can see for now is that + # GEOmap has better lakes. + coast <- maps::map(interior = country.borders, wrap = wrap_vec, + fill = filled.continents, add = TRUE, plot = FALSE) + + if (filled.continents) { + polygon(coast, col = continent_color, border = coast_color, lwd = coast_width) + } else { + lines(coast, col = coast_color, lwd = coast_width) + } + if (!is.null(lake_color)) { + maps::map('lakes', add = TRUE, wrap = wrap_vec, fill = filled.continents, col = lake_color) + } + par(lwd = old_lwd) + + # filled.oceans + if (filled.oceans) { + old_lwd <- par('lwd') + par(lwd = coast_width) + + outline <- maps::map(wrap = wrap_vec, fill = T, plot = FALSE) # must be fill = T + xbox <- wrap_vec + c(-2, 2) + ybox <- c(-92, 92) + outline$x <- c(outline$x, NA, c(xbox, rev(xbox), xbox[1])) + outline$y <- c(outline$y, NA, rep(ybox, each = 2), ybox[1]) + polypath(outline, col = ocean_color, rule = 'evenodd', border = NA) + + par(lwd = old_lwd) + } + + # Plot shapefile + #NOTE: the longitude range cannot cut shapefile range, or not all the shapefile will be plotted. + if (!is.null(shapefile)) { + maps::map(shape, interior = country.borders, #wrap = wrap_vec, + fill = filled.continents, add = TRUE, plot = TRUE, + lwd = shapefile_lwd, col = shapefile_color) + } + + box() + # Draw rectangle on the map + if (!is.null(boxlim)) { + counter <- 1 + for (box in boxlim) { + if (box[1] > box[3]) { + box[1] <- box[1] - 360 + } + if (length(box) != 4) { + stop(paste("The", counter, "st box defined in the parameter 'boxlim' is ill defined.")) + } else if (box[2] < latmin || box[4] > latmax || + box[1] < lonmin || box[3] > lonmax) { + stop(paste("The limits of the", counter, "st box defined in the parameter 'boxlim' are invalid.")) + } else if (box[1] < 0 && box[3] > 0) { + #segments south + segments(box[1], box[2], 0, box[2], col = boxcol[counter], lwd = boxlwd[counter]) + segments(0, box[2], box[3], box[2], col = boxcol[counter], lwd = boxlwd[counter]) + #segments north + segments(box[1], box[4], 0, box[4], col = boxcol[counter], lwd = boxlwd[counter]) + segments(0, box[4], box[3], box[4], col = boxcol[counter], lwd = boxlwd[counter]) + #segments west + segments(box[1], box[2], box[1], box[4], col = boxcol[counter], + lwd = boxlwd[counter]) + #segments est + segments(box[3], box[2], box[3],box[4], col = boxcol[counter], + lwd = boxlwd[counter]) + } else { + rect(box[1], box[2], box[3], box[4], border = boxcol[counter], col = NULL, + lwd = boxlwd[counter], lty = 'solid') + } + counter <- counter + 1 + } + } + # + # PlotWind + # ~~~~~~~~~~ + # + if (!is.null(varu) && !is.null(varv)) { + # Create a two dimention array of longitude and latitude + lontab <- InsertDim(lonb$x, 2, length(latb$x), name = 'lat') + lattab <- InsertDim(latb$x, 1, length(lonb$x), name = 'lon') + varplotu <- varu[lonb$ix, latb$ix] + varplotv <- varv[lonb$ix, latb$ix] + + # Select a subsample af the points to an arrow + #for each "subsample" grid point + sublon <- seq(1,length(lon), arr_subsamp) + sublat <- seq(1,length(lat), arr_subsamp) + + uaux <- lontab[sublon, sublat] + varplotu[sublon, sublat] * 0.5 * arr_scale + vaux <- lattab[sublon, sublat] + varplotv[sublon, sublat] * 0.5 * arr_scale + + lenshaft <- 0.18 * arr_scale * arr_scale_shaft + angleshaft <- 12 * arr_scale_shaft_angle + # Plot Wind + arrows(lontab[sublon, sublat], lattab[sublon, sublat], + uaux, vaux, + angle = angleshaft, + length = lenshaft) + + # Plotting an arrow at the bottom of the plot for the legend + posarlon <- lonb$x[1] + (lonmax - lonmin) * 0.1 + posarlat <- latmin - ((latmax - latmin) + 1) / par('pin')[2] * + (spaceticklab + 0.2 + cex_axes_labels + 0.6 * units_scale) * par('csi') + + arrows(posarlon, posarlat, + posarlon + 0.5 * arr_scale * arr_ref_len, posarlat, + length = lenshaft, angle = angleshaft, + xpd = TRUE) + #save the parameter value + xpdsave <- par('xpd') + #desactivate xpd to be able to plot in margen + par(xpd = NA) + #plot text + mtext(paste(as.character(arr_ref_len), arr_units, sep = ""), + line = spaceticklab + 0.2 + cex_axes_labels + 1.2 * units_scale, side = 1, + at = posarlon + (0.5 * arr_scale * arr_ref_len) / 2, + cex = units_scale) + #come back to the previous xpd value + par(xpd = xpdsave) + } + # + # Colorbar + # ~~~~~~~~~~ + # + if (drawleg) { + ColorBar(brks, cols, FALSE, subsampleg, bar_limits, var_limits, + triangle_ends, col_inf = col_inf, col_sup = col_sup, + extra_labels = bar_extra_labels, draw_ticks = draw_bar_ticks, + draw_separators = draw_separators, title = units, + title_scale = units_scale, triangle_ends_scale = triangle_ends_scale, + label_scale = bar_label_scale, tick_scale = bar_tick_scale, + extra_margin = bar_extra_margin, label_digits = bar_label_digits) + } + + # If the graphic was saved to file, close the connection with the device + if (!is.null(fileout)) dev.off() + + invisible(list(brks = brks, cols = cols, col_inf = col_inf, col_sup = col_sup)) +} + diff --git a/modules/Visualization/R/tmp/Utils.R b/modules/Visualization/R/tmp/Utils.R new file mode 100644 index 00000000..05878259 --- /dev/null +++ b/modules/Visualization/R/tmp/Utils.R @@ -0,0 +1,1779 @@ +#'@importFrom abind abind +#'@import plyr ncdf4 +#'@importFrom grDevices png jpeg pdf svg bmp tiff +#'@importFrom easyVerification convert2prob + +## Function to tell if a regexpr() match is a complete match to a specified name +.IsFullMatch <- function(x, name) { + ifelse(x > 0 && attributes(x)$match.length == nchar(name), TRUE, FALSE) +} + +.ConfigReplaceVariablesInString <- function(string, replace_values, allow_undefined_key_vars = FALSE) { + # This function replaces all the occurrences of a variable in a string by + # their corresponding string stored in the replace_values. + if (length(strsplit(string, "\\$")[[1]]) > 1) { + parts <- strsplit(string, "\\$")[[1]] + output <- "" + i <- 0 + for (part in parts) { + if (i %% 2 == 0) { + output <- paste(output, part, sep = "") + } else { + if (part %in% names(replace_values)) { + output <- paste(output, .ConfigReplaceVariablesInString(replace_values[[part]], replace_values, allow_undefined_key_vars), sep = "") + } else if (allow_undefined_key_vars) { + output <- paste0(output, "$", part, "$") + } else { + stop(paste('Error: The variable $', part, '$ was not defined in the configuration file.', sep = '')) + } + } + i <- i + 1 + } + output + } else { + string + } +} + +.KnownLonNames <- function() { + known_lon_names <- c('lon', 'longitude', 'x', 'i', 'nav_lon') +} + +.KnownLatNames <- function() { + known_lat_names <- c('lat', 'latitude', 'y', 'j', 'nav_lat') +} + +.t2nlatlon <- function(t) { + ## As seen in cdo's griddes.c: ntr2nlat() + nlats <- (t * 3 + 1) / 2 + if ((nlats > 0) && (nlats - trunc(nlats) >= 0.5)) { + nlats <- ceiling(nlats) + } else { + nlats <- round(nlats) + } + if (nlats %% 2 > 0) { + nlats <- nlats + 1 + } + ## As seen in cdo's griddes.c: compNlon(), and as specified in ECMWF + nlons <- 2 * nlats + keep_going <- TRUE + while (keep_going) { + n <- nlons + if (n %% 8 == 0) n <- trunc(n / 8) + while (n %% 6 == 0) n <- trunc(n / 6) + while (n %% 5 == 0) n <- trunc(n / 5) + while (n %% 4 == 0) n <- trunc(n / 4) + while (n %% 3 == 0) n <- trunc(n / 3) + if (n %% 2 == 0) n <- trunc(n / 2) + if (n <= 8) { + keep_going <- FALSE + } else { + nlons <- nlons + 2 + if (nlons > 9999) { + stop("Error: pick another gaussian grid truncation. It doesn't fulfill the standards to apply FFT.") + } + } + } + c(nlats, nlons) +} + +.nlat2t <- function(nlats) { + trunc((nlats * 2 - 1) / 3) +} + +.LoadDataFile <- function(work_piece, explore_dims = FALSE, silent = FALSE) { + # The purpose, working modes, inputs and outputs of this function are + # explained in ?LoadDataFile + #suppressPackageStartupMessages({library(ncdf4)}) + #suppressPackageStartupMessages({library(bigmemory)}) + #suppressPackageStartupMessages({library(plyr)}) + # Auxiliar function to convert array indices to lineal indices + arrayIndex2VectorIndex <- function(indices, dims) { + if (length(indices) > length(dims)) { + stop("Error: indices do not match dimensions in arrayIndex2VectorIndex.") + } + position <- 1 + dims <- rev(dims) + indices <- rev(indices) + for (i in 1:length(indices)) { + position <- position + (indices[i] - 1) * prod(dims[-c(1:i)]) + } + position + } + + found_file <- NULL + dims <- NULL + grid_name <- units <- var_long_name <- NULL + is_2d_var <- array_across_gw <- NULL + data_across_gw <- NULL + + filename <- work_piece[['filename']] + namevar <- work_piece[['namevar']] + output <- work_piece[['output']] + # The names of all data files in the directory of the repository that match + # the pattern are obtained. + if (length(grep("^http", filename)) > 0) { + is_url <- TRUE + files <- filename + ## TODO: Check that the user is not using shell globbing exps. + } else { + is_url <- FALSE + files <- Sys.glob(filename) + } + + # If we don't find any, we leave the flag 'found_file' with a NULL value. + if (length(files) > 0) { + # The first file that matches the pattern is chosen and read. + filename <- head(files, 1) + filein <- filename + found_file <- filename + mask <- work_piece[['mask']] + + if (!silent) { + if (explore_dims) { + .message(paste("Exploring dimensions...", filename)) + } + ##} else { + ## cat(paste("* Reading & processing data...", filename, '\n')) + ##} + } + + # We will fill in 'expected_dims' with the names of the expected dimensions of + # the data array we'll retrieve from the file. + expected_dims <- NULL + remap_needed <- FALSE + # But first we open the file and work out whether the requested variable is 2d + fnc <- nc_open(filein) + if (!(namevar %in% names(fnc$var))) { + stop(paste("Error: The variable", namevar, "is not defined in the file", filename)) + } + var_long_name <- fnc$var[[namevar]]$longname + units <- fnc$var[[namevar]]$units + file_dimnames <- unlist(lapply(fnc$var[[namevar]][['dim']], '[[', 'name')) + # The following two 'ifs' are to allow for 'lon'/'lat' by default, instead of + # 'longitude'/'latitude'. + if (!(work_piece[['dimnames']][['lon']] %in% file_dimnames) && + (work_piece[['dimnames']][['lon']] == 'longitude') && + ('lon' %in% file_dimnames)) { + work_piece[['dimnames']][['lon']] <- 'lon' + } + if (!(work_piece[['dimnames']][['lat']] %in% file_dimnames) && + (work_piece[['dimnames']][['lat']] == 'latitude') && + ('lat' %in% file_dimnames)) { + work_piece[['dimnames']][['lat']] <- 'lat' + } + if (is.null(work_piece[['is_2d_var']])) { + is_2d_var <- all(c(work_piece[['dimnames']][['lon']], + work_piece[['dimnames']][['lat']]) %in% + unlist(lapply(fnc$var[[namevar]][['dim']], + '[[', 'name'))) + } else { + is_2d_var <- work_piece[['is_2d_var']] + } + if ((is_2d_var || work_piece[['is_file_per_dataset']])) { + if (Sys.which("cdo")[[1]] == "") { + stop("Error: CDO libraries not available") + } + + cdo_version <- strsplit(suppressWarnings(system2("cdo", args = '-V', stderr = TRUE))[[1]], ' ')[[1]][5] + + cdo_version <- as.numeric_version(unlist(strsplit(cdo_version, "[A-Za-z]", fixed = FALSE))[[1]]) + + } + # If the variable to load is 2-d, we need to determine whether: + # - interpolation is needed + # - subsetting is requested + if (is_2d_var) { + ## We read the longitudes and latitudes from the file. + lon <- ncvar_get(fnc, work_piece[['dimnames']][['lon']]) + lat <- ncvar_get(fnc, work_piece[['dimnames']][['lat']]) + first_lon_in_original_file <- lon[1] + # If a common grid is requested or we are exploring the file dimensions + # we need to read the grid type and size of the file to finally work out the + # CDO grid name. + if (!is.null(work_piece[['grid']]) || explore_dims) { + # Here we read the grid type and its number of longitudes and latitudes + file_info <- system(paste('cdo -s griddes', filein, '2> /dev/null'), intern = TRUE) + grids_positions <- grep('# gridID', file_info) + if (length(grids_positions) < 1) { + stop("The grid should be defined in the files.") + } + grids_first_lines <- grids_positions + 2 + grids_last_lines <- c((grids_positions - 2)[-1], length(file_info)) + grids_info <- as.list(1:length(grids_positions)) + grids_info <- lapply(grids_info, function (x) file_info[grids_first_lines[x]:grids_last_lines[x]]) + grids_info <- lapply(grids_info, function (x) gsub(" *", " ", x)) + grids_info <- lapply(grids_info, function (x) gsub("^ | $", "", x)) + grids_info <- lapply(grids_info, function (x) unlist(strsplit(x, " | = "))) + grids_types <- unlist(lapply(grids_info, function (x) x[grep('gridtype', x) + 1])) + grids_matches <- unlist(lapply(grids_info, function (x) { + nlons <- if (length(grep('xsize', x)) > 0) { + as.numeric(x[grep('xsize', x) + 1]) + } else { + NA + } + nlats <- if (length(grep('ysize', x)) > 0) { + as.numeric(x[grep('ysize', x) + 1]) + } else { + NA + } + result <- FALSE + if (!anyNA(c(nlons, nlats))) { + if ((nlons == length(lon)) && + (nlats == length(lat))) { + result <- TRUE + } + } + result + })) + grids_matches <- grids_matches[which(grids_types %in% c('gaussian', 'lonlat'))] + grids_info <- grids_info[which(grids_types %in% c('gaussian', 'lonlat'))] + grids_types <- grids_types[which(grids_types %in% c('gaussian', 'lonlat'))] + if (length(grids_matches) == 0) { + stop("Error: Only 'gaussian' and 'lonlat' grids supported. See e.g: cdo sinfo ", filename) + } + if (sum(grids_matches) > 1) { + if ((all(grids_types[which(grids_matches)] == 'gaussian') || + all(grids_types[which(grids_matches)] == 'lonlat')) && + all(unlist(lapply(grids_info[which(grids_matches)], identical, + grids_info[which(grids_matches)][[1]])))) { + grid_type <- grids_types[which(grids_matches)][1] + } else { + stop("Error: Load() can't disambiguate: More than one lonlat/gaussian grids with the same size as the requested variable defined in ", filename) + } + } else if (sum(grids_matches) == 1) { + grid_type <- grids_types[which(grids_matches)] + } else { + stop("Unexpected error.") + } + grid_lons <- length(lon) + grid_lats <- length(lat) + # Convert to CDO grid name as seen in cdo's griddes.c: nlat2ntr() + if (grid_type == 'lonlat') { + grid_name <- paste0('r', grid_lons, 'x', grid_lats) + } else { + grid_name <- paste0('t', .nlat2t(grid_lats), 'grid') + } + if (is.null(work_piece[['grid']])) { + .warning(paste0("Detect the grid type to be '", grid_name, "'. ", + "If it is not expected, assign parameter 'grid' to avoid wrong result.")) + } + } + # If a common grid is requested, we will also calculate its size which we will use + # later on. + if (!is.null(work_piece[['grid']])) { + # Now we calculate the common grid type and its lons and lats + if (length(grep('^t\\d{1,+}grid$', work_piece[['grid']])) > 0) { + common_grid_type <- 'gaussian' + common_grid_res <- as.numeric(strsplit(work_piece[['grid']], '[^0-9]{1,+}')[[1]][2]) + nlonlat <- .t2nlatlon(common_grid_res) + common_grid_lats <- nlonlat[1] + common_grid_lons <- nlonlat[2] + } else if (length(grep('^r\\d{1,+}x\\d{1,+}$', work_piece[['grid']])) > 0) { + common_grid_type <- 'lonlat' + common_grid_lons <- as.numeric(strsplit(work_piece[['grid']], '[^0-9]{1,+}')[[1]][2]) + common_grid_lats <- as.numeric(strsplit(work_piece[['grid']], '[^0-9]{1,+}')[[1]][3]) + } else { + stop("Error: Only supported grid types in parameter 'grid' are tgrid and rx") + } + } else { + ## If no 'grid' is specified, there is no common grid. + ## But these variables are filled in for consistency in the code. + common_grid_lons <- length(lon) + common_grid_lats <- length(lat) + } + first_common_grid_lon <- 0 + last_common_grid_lon <- 360 - 360/common_grid_lons + ## This is not true for gaussian grids or for some regular grids, but + ## is a safe estimation + first_common_grid_lat <- -90 + last_common_grid_lat <- 90 + # And finally determine whether interpolation is needed or not + remove_shift <- FALSE + if (!is.null(work_piece[['grid']])) { + if ((grid_lons != common_grid_lons) || + (grid_lats != common_grid_lats) || + (grid_type != common_grid_type) || + (lon[1] != first_common_grid_lon)) { + if (grid_lons == common_grid_lons && grid_lats == common_grid_lats && + grid_type == common_grid_type && lon[1] != first_common_grid_lon) { + remove_shift <- TRUE + } + remap_needed <- TRUE + common_grid_name <- work_piece[['grid']] + } + } else if ((lon[1] != first_common_grid_lon) && explore_dims && + !work_piece[['single_dataset']]) { + remap_needed <- TRUE + common_grid_name <- grid_name + remove_shift <- TRUE + } + if (remap_needed && (work_piece[['remap']] == 'con') && + (cdo_version >= as.numeric_version('1.7.0'))) { + work_piece[['remap']] <- 'ycon' + } + if (remove_shift && !explore_dims) { + if (!is.null(work_piece[['progress_amount']])) { + cat("\n") + } + .warning(paste0("The dataset with index ", + tail(work_piece[['indices']], 1), " in '", + work_piece[['dataset_type']], "' doesn't start at longitude 0 and will be re-interpolated in order to align its longitudes with the standard CDO grids definable with the names 'tgrid' or 'rx', which are by definition starting at the longitude 0.\n")) + if (!is.null(mask)) { + .warning(paste0("A mask was provided for the dataset with index ", + tail(work_piece[['indices']], 1), " in '", + work_piece[['dataset_type']], "'. This dataset has been re-interpolated to align its longitudes to start at 0. You must re-interpolate the corresponding mask to align its longitudes to start at 0 as well, if you haven't done so yet. Running cdo remapcon,", common_grid_name, " original_mask_file.nc new_mask_file.nc will fix it.\n")) + } + } + if (remap_needed && (grid_lons < common_grid_lons || grid_lats < common_grid_lats)) { + if (!is.null(work_piece[['progress_amount']])) { + cat("\n") + } + if (!explore_dims) { + .warning(paste0("The dataset with index ", tail(work_piece[['indices']], 1), + " in '", work_piece[['dataset_type']], "' is originally on ", + "a grid coarser than the common grid and it has been ", + "extrapolated. Check the results carefully. It is ", + "recommended to specify as common grid the coarsest grid ", + "among all requested datasets via the parameter 'grid'.\n")) + } + } + # Now calculate if the user requests for a lonlat subset or for the + # entire field + lonmin <- work_piece[['lon_limits']][1] + lonmax <- work_piece[['lon_limits']][2] + latmin <- work_piece[['lat_limits']][1] + latmax <- work_piece[['lat_limits']][2] + lon_subsetting_requested <- FALSE + lonlat_subsetting_requested <- FALSE + if (lonmin <= lonmax) { + if ((lonmin > first_common_grid_lon) || (lonmax < last_common_grid_lon)) { + lon_subsetting_requested <- TRUE + } + } else { + if ((lonmin - lonmax) > 360/common_grid_lons) { + lon_subsetting_requested <- TRUE + } else { + gap_width <- floor(lonmin / (360/common_grid_lons)) - + floor(lonmax / (360/common_grid_lons)) + if (gap_width > 0) { + if (!(gap_width == 1 && (lonmin %% (360/common_grid_lons) == 0) && + (lonmax %% (360/common_grid_lons) == 0))) { + lon_subsetting_requested <- TRUE + } + } + } + } + if ((latmin > first_common_grid_lat) || (latmax < last_common_grid_lat) + || (lon_subsetting_requested)) { + lonlat_subsetting_requested <- TRUE + } + # Now that we know if subsetting was requested, we can say if final data + # will go across greenwich + if (lonmax < lonmin) { + data_across_gw <- TRUE + } else { + data_across_gw <- !lon_subsetting_requested + } + + # When remap is needed but no subsetting, the file is copied locally + # so that cdo works faster, and then interpolated. + # Otherwise the file is kept as is and the subset will have to be + # interpolated still. + if (!lonlat_subsetting_requested && remap_needed) { + nc_close(fnc) + filecopy <- tempfile(pattern = "load", fileext = ".nc") + file.copy(filein, filecopy) + filein <- tempfile(pattern = "loadRegridded", fileext = ".nc") + # "-L" is to serialize I/O accesses. It prevents potential segmentation fault in the + # underlying hdf5 library. + system(paste0("cdo -L -s remap", work_piece[['remap']], ",", + common_grid_name, + " -selname,", namevar, " ", filecopy, " ", filein, + " 2>/dev/null", sep = "")) + file.remove(filecopy) + work_piece[['dimnames']][['lon']] <- 'lon' + work_piece[['dimnames']][['lat']] <- 'lat' + fnc <- nc_open(filein) + lon <- ncvar_get(fnc, work_piece[['dimnames']][['lon']]) + lat <- ncvar_get(fnc, work_piece[['dimnames']][['lat']]) + } + + # Read and check also the mask + if (!is.null(mask)) { + ###mask_file <- tempfile(pattern = 'loadMask', fileext = '.nc') + if (is.list(mask)) { + if (!file.exists(mask[['path']])) { + stop(paste("Error: Couldn't find the mask file", mask[['path']])) + } + mask_file <- mask[['path']] + ###file.copy(work_piece[['mask']][['path']], mask_file) + fnc_mask <- nc_open(mask_file) + vars_in_mask <- sapply(fnc_mask$var, '[[', 'name') + if ('nc_var_name' %in% names(mask)) { + if (!(mask[['nc_var_name']] %in% + vars_in_mask)) { + stop(paste("Error: couldn't find variable", mask[['nc_var_name']], + "in the mask file", mask[['path']])) + } + } else { + if (length(vars_in_mask) != 1) { + stop(paste("Error: one and only one non-coordinate variable should be defined in the mask file", + mask[['path']], "if the component 'nc_var_name' is not specified. Currently found: ", + paste(vars_in_mask, collapse = ', '), ".")) + } else { + mask[['nc_var_name']] <- vars_in_mask + } + } + if (sum(fnc_mask$var[[mask[['nc_var_name']]]]$size > 1) != 2) { + stop(paste0("Error: the variable '", + mask[['nc_var_name']], + "' must be defined only over the dimensions '", + work_piece[['dimnames']][['lon']], "' and '", + work_piece[['dimnames']][['lat']], + "' in the mask file ", + mask[['path']])) + } + mask <- ncvar_get(fnc_mask, mask[['nc_var_name']], collapse_degen = TRUE) + nc_close(fnc_mask) + ### mask_lon <- ncvar_get(fnc_mask, work_piece[['dimnames']][['lon']]) + ### mask_lat <- ncvar_get(fnc_mask, work_piece[['dimnames']][['lat']]) + ###} else { + ### dim_longitudes <- ncdim_def(work_piece[['dimnames']][['lon']], "degrees_east", lon) + ### dim_latitudes <- ncdim_def(work_piece[['dimnames']][['lat']], "degrees_north", lat) + ### ncdf_var <- ncvar_def('LSM', "", list(dim_longitudes, dim_latitudes), NA, 'double') + ### fnc_mask <- nc_create(mask_file, list(ncdf_var)) + ### ncvar_put(fnc_mask, ncdf_var, work_piece[['mask']]) + ### nc_close(fnc_mask) + ### fnc_mask <- nc_open(mask_file) + ### work_piece[['mask']] <- list(path = mask_file, nc_var_name = 'LSM') + ### mask_lon <- lon + ### mask_lat <- lat + ###} + ###} + ### Now ready to check that the mask is right + ##if (!(lonlat_subsetting_requested && remap_needed)) { + ### if ((dim(mask)[2] != length(lon)) || (dim(mask)[1] != length(lat))) { + ### stop(paste("Error: the mask of the dataset with index ", tail(work_piece[['indices']], 1), " in '", work_piece[['dataset_type']], "' is wrong. It must be on the common grid if the selected output type is 'lonlat', 'lon' or 'lat', or 'areave' and 'grid' has been specified. It must be on the grid of the corresponding dataset if the selected output type is 'areave' and no 'grid' has been specified. For more information check ?Load and see help on parameters 'grid', 'maskmod' and 'maskobs'.", sep = "")) + ### } + ###if (!(identical(mask_lon, lon) && identical(mask_lat, lat))) { + ### stop(paste0("Error: the longitudes and latitudes in the masks must be identical to the ones in the corresponding data files if output = 'areave' or, if the selected output is 'lon', 'lat' or 'lonlat', the longitudes in the mask file must start by 0 and the latitudes must be ordered from highest to lowest. See\n ", + ### work_piece[['mask']][['path']], " and ", filein)) + ###} + } + } + + lon_indices <- 1:length(lon) + if (!(lonlat_subsetting_requested && remap_needed)) { + lon[which(lon < 0)] <- lon[which(lon < 0)] + 360 + } + if (lonmax >= lonmin) { + lon_indices <- lon_indices[which(((lon %% 360) >= lonmin) & ((lon %% 360) <= lonmax))] + } else if (!remap_needed) { + lon_indices <- lon_indices[which(((lon %% 360) <= lonmax) | ((lon %% 360) >= lonmin))] + } + lat_indices <- which(lat >= latmin & lat <= latmax) + ## In most of the cases the latitudes are ordered from -90 to 90. + ## We will reorder them to be in the order from 90 to -90, so mostly + ## always the latitudes are reordered. + ## TODO: This could be avoided in future. + if (lat[1] < lat[length(lat)]) { + lat_indices <- lat_indices[length(lat_indices):1] + } + if (!is.null(mask) && !(lonlat_subsetting_requested && remap_needed)) { + if ((dim(mask)[1] != length(lon)) || (dim(mask)[2] != length(lat))) { + stop(paste("Error: the mask of the dataset with index ", tail(work_piece[['indices']], 1), " in '", work_piece[['dataset_type']], "' is wrong. It must be on the common grid if the selected output type is 'lonlat', 'lon' or 'lat', or 'areave' and 'grid' has been specified. It must be on the grid of the corresponding dataset if the selected output type is 'areave' and no 'grid' has been specified. For more information check ?Load and see help on parameters 'grid', 'maskmod' and 'maskobs'.", sep = "")) + } + mask <- mask[lon_indices, lat_indices] + } + ## If the user requests subsetting, we must extend the lon and lat limits if possible + ## so that the interpolation after is done properly + maximum_extra_points <- work_piece[['remapcells']] + if (lonlat_subsetting_requested && remap_needed) { + if ((maximum_extra_points > (head(lon_indices, 1) - 1)) || + (maximum_extra_points > (length(lon) - tail(lon_indices, 1)))) { + ## if the requested number of points goes beyond the left or right + ## sides of the map, we need to take the entire map so that the + ## interpolation works properly + lon_indices <- 1:length(lon) + } else { + extra_points <- min(maximum_extra_points, head(lon_indices, 1) - 1) + if (extra_points > 0) { + lon_indices <- c((head(lon_indices, 1) - extra_points):(head(lon_indices, 1) - 1), lon_indices) + } + extra_points <- min(maximum_extra_points, length(lon) - tail(lon_indices, 1)) + if (extra_points > 0) { + lon_indices <- c(lon_indices, (tail(lon_indices, 1) + 1):(tail(lon_indices, 1) + extra_points)) + } + } + min_lat_ind <- min(lat_indices) + max_lat_ind <- max(lat_indices) + extra_points <- min(maximum_extra_points, min_lat_ind - 1) + if (extra_points > 0) { + if (lat[1] < tail(lat, 1)) { + lat_indices <- c(lat_indices, (min_lat_ind - 1):(min_lat_ind - extra_points)) + } else { + lat_indices <- c((min_lat_ind - extra_points):(min_lat_ind - 1), lat_indices) + } + } + extra_points <- min(maximum_extra_points, length(lat) - max_lat_ind) + if (extra_points > 0) { + if (lat[1] < tail(lat, 1)) { + lat_indices <- c((max_lat_ind + extra_points):(max_lat_ind + 1), lat_indices) + } else { + lat_indices <- c(lat_indices, (max_lat_ind + 1):(max_lat_ind + extra_points)) + } + } + } + lon <- lon[lon_indices] + lat <- lat[lat_indices] + expected_dims <- c(work_piece[['dimnames']][['lon']], + work_piece[['dimnames']][['lat']]) + } else { + lon <- 0 + lat <- 0 + } + # We keep on filling the expected dimensions + var_dimnames <- unlist(lapply(fnc$var[[namevar]][['dim']], '[[', 'name')) + nmemb <- nltime <- NULL + ## Sometimes CDO renames 'members' dimension to 'lev' + old_members_dimname <- NULL + if (('lev' %in% var_dimnames) && !(work_piece[['dimnames']][['member']] %in% var_dimnames)) { + old_members_dimname <- work_piece[['dimnames']][['member']] + work_piece[['dimnames']][['member']] <- 'lev' + } + if (work_piece[['dimnames']][['member']] %in% var_dimnames) { + nmemb <- fnc$var[[namevar]][['dim']][[match(work_piece[['dimnames']][['member']], var_dimnames)]]$len + expected_dims <- c(expected_dims, work_piece[['dimnames']][['member']]) + } else { + nmemb <- 1 + } + if (length(expected_dims) > 0) { + dim_matches <- match(expected_dims, var_dimnames) + if (anyNA(dim_matches)) { + if (!is.null(old_members_dimname)) { + expected_dims[which(expected_dims == 'lev')] <- old_members_dimname + } + stop(paste("Error: the expected dimension(s)", + paste(expected_dims[which(is.na(dim_matches))], collapse = ', '), + "were not found in", filename)) + } + time_dimname <- var_dimnames[-dim_matches] + } else { + time_dimname <- var_dimnames + } + if (length(time_dimname) > 0) { + if (length(time_dimname) == 1) { + nltime <- fnc$var[[namevar]][['dim']][[match(time_dimname, var_dimnames)]]$len + expected_dims <- c(expected_dims, time_dimname) + dim_matches <- match(expected_dims, var_dimnames) + } else { + if (!is.null(old_members_dimname)) { + expected_dims[which(expected_dims == 'lev')] <- old_members_dimname + } + stop(paste("Error: the variable", namevar, + "is defined over more dimensions than the expected (", + paste(c(expected_dims, 'time'), collapse = ', '), + "). It could also be that the members, longitude or latitude dimensions are named incorrectly. In that case, either rename the dimensions in the file or adjust Load() to recognize the actual name with the parameter 'dimnames'. See file", filename)) + } + } else { + nltime <- 1 + } + + # Now we must retrieve the data from the file, but only the asked indices. + # So we build up the indices to retrieve. + # Longitudes or latitudes have been retrieved already. + if (explore_dims) { + # If we're exploring the file we only want one time step from one member, + # to regrid it and work out the number of longitudes and latitudes. + # We don't need more. + members <- 1 + ltimes_list <- list(c(1)) + } else { + # The data is arranged in the array 'tmp' with the dimensions in a + # common order: + # 1) Longitudes + # 2) Latitudes + # 3) Members (even if is not a file per member experiment) + # 4) Lead-times + if (work_piece[['is_file_per_dataset']]) { + time_indices <- 1:nltime + mons <- strsplit(system(paste('cdo showmon ', filein, + ' 2>/dev/null'), intern = TRUE), split = ' ') + years <- strsplit(system(paste('cdo showyear ', filein, + ' 2>/dev/null'), intern = TRUE), split = ' ') + mons <- as.numeric(mons[[1]][which(mons[[1]] != "")]) + years <- as.numeric(years[[1]][which(years[[1]] != "")]) + time_indices <- ts(time_indices, start = c(years[1], mons[1]), + end = c(years[length(years)], mons[length(mons)]), + frequency = 12) + ltimes_list <- list() + for (sdate in work_piece[['startdates']]) { + selected_time_indices <- window(time_indices, start = c(as.numeric( + substr(sdate, 1, 4)), as.numeric(substr(sdate, 5, 6))), + end = c(3000, 12), frequency = 12, extend = TRUE) + selected_time_indices <- selected_time_indices[work_piece[['leadtimes']]] + ltimes_list <- c(ltimes_list, list(selected_time_indices)) + } + } else { + ltimes <- work_piece[['leadtimes']] + #if (work_piece[['dataset_type']] == 'exp') { + ltimes_list <- list(ltimes[which(ltimes <= nltime)]) + #} + } + ## TODO: Put, when reading matrices, this kind of warnings + # if (nmember < nmemb) { + # cat("Warning: + members <- 1:work_piece[['nmember']] + members <- members[which(members <= nmemb)] + } + + # Now, for each list of leadtimes to load (usually only one list with all leadtimes), + # we'll join the indices and retrieve data + found_disordered_dims <- FALSE + for (ltimes in ltimes_list) { + if (is_2d_var) { + start <- c(min(lon_indices), min(lat_indices)) + end <- c(max(lon_indices), max(lat_indices)) + if (lonlat_subsetting_requested && remap_needed) { + subset_indices <- list(min(lon_indices):max(lon_indices) - min(lon_indices) + 1, + lat_indices - min(lat_indices) + 1) + dim_longitudes <- ncdim_def(work_piece[['dimnames']][['lon']], "degrees_east", lon) + dim_latitudes <- ncdim_def(work_piece[['dimnames']][['lat']], "degrees_north", lat) + ncdf_dims <- list(dim_longitudes, dim_latitudes) + } else { + subset_indices <- list(lon_indices - min(lon_indices) + 1, + lat_indices - min(lat_indices) + 1) + ncdf_dims <- list() + } + final_dims <- c(length(subset_indices[[1]]), length(subset_indices[[2]]), 1, 1) + } else { + start <- end <- c() + subset_indices <- list() + ncdf_dims <- list() + final_dims <- c(1, 1, 1, 1) + } + + if (work_piece[['dimnames']][['member']] %in% expected_dims) { + start <- c(start, head(members, 1)) + end <- c(end, tail(members, 1)) + subset_indices <- c(subset_indices, list(members - head(members, 1) + 1)) + dim_members <- ncdim_def(work_piece[['dimnames']][['member']], "", members) + ncdf_dims <- c(ncdf_dims, list(dim_members)) + final_dims[3] <- length(members) + } + if (time_dimname %in% expected_dims) { + if (any(!is.na(ltimes))) { + start <- c(start, head(ltimes[which(!is.na(ltimes))], 1)) + end <- c(end, tail(ltimes[which(!is.na(ltimes))], 1)) + subset_indices <- c(subset_indices, list(ltimes - head(ltimes[which(!is.na(ltimes))], 1) + 1)) + } else { + start <- c(start, NA) + end <- c(end, NA) + subset_indices <- c(subset_indices, list(ltimes)) + } + dim_time <- ncdim_def(time_dimname, "", 1:length(ltimes), unlim = TRUE) + ncdf_dims <- c(ncdf_dims, list(dim_time)) + final_dims[4] <- length(ltimes) + } + count <- end - start + 1 + start <- start[dim_matches] + count <- count[dim_matches] + subset_indices <- subset_indices[dim_matches] + # Now that we have the indices to retrieve, we retrieve the data + if (prod(final_dims) > 0) { + tmp <- take(ncvar_get(fnc, namevar, start, count, + collapse_degen = FALSE), + 1:length(subset_indices), subset_indices) + # The data is regridded if it corresponds to an atmospheric variable. When + # the chosen output type is 'areave' the data is not regridded to not + # waste computing time unless the user specified a common grid. + if (is_2d_var) { + ###if (!is.null(work_piece[['mask']]) && !(lonlat_subsetting_requested && remap_needed)) { + ### mask <- take(ncvar_get(fnc_mask, work_piece[['mask']][['nc_var_name']], + ### start[dim_matches[1:2]], count[dim_matches[1:2]], + ### collapse_degen = FALSE), 1:2, subset_indices[dim_matches[1:2]]) + ###} + if (lonlat_subsetting_requested && remap_needed) { + filein <- tempfile(pattern = "loadRegridded", fileext = ".nc") + filein2 <- tempfile(pattern = "loadRegridded2", fileext = ".nc") + ncdf_var <- ncvar_def(namevar, "", ncdf_dims[dim_matches], + fnc$var[[namevar]]$missval, + prec = if (fnc$var[[namevar]]$prec == 'int') { + 'integer' + } else { + fnc$var[[namevar]]$prec + }) + scale_factor <- ifelse(fnc$var[[namevar]]$hasScaleFact, fnc$var[[namevar]]$scaleFact, 1) + add_offset <- ifelse(fnc$var[[namevar]]$hasAddOffset, fnc$var[[namevar]]$addOffset, 0) + if (fnc$var[[namevar]]$hasScaleFact || fnc$var[[namevar]]$hasAddOffset) { + tmp <- (tmp - add_offset) / scale_factor + } + #nc_close(fnc) + fnc2 <- nc_create(filein2, list(ncdf_var)) + ncvar_put(fnc2, ncdf_var, tmp) + if (add_offset != 0) { + ncatt_put(fnc2, ncdf_var, 'add_offset', add_offset) + } + if (scale_factor != 1) { + ncatt_put(fnc2, ncdf_var, 'scale_factor', scale_factor) + } + nc_close(fnc2) + system(paste0("cdo -L -s -sellonlatbox,", if (lonmin > lonmax) { + "0,360," + } else { + paste0(lonmin, ",", lonmax, ",") + }, latmin, ",", latmax, + " -remap", work_piece[['remap']], ",", common_grid_name, + " ", filein2, " ", filein, " 2>/dev/null", sep = "")) + file.remove(filein2) + fnc2 <- nc_open(filein) + sub_lon <- ncvar_get(fnc2, 'lon') + sub_lat <- ncvar_get(fnc2, 'lat') + ## We read the longitudes and latitudes from the file. + ## In principle cdo should put in order the longitudes + ## and slice them properly unless data is across greenwich + sub_lon[which(sub_lon < 0)] <- sub_lon[which(sub_lon < 0)] + 360 + sub_lon_indices <- 1:length(sub_lon) + if (lonmax < lonmin) { + sub_lon_indices <- sub_lon_indices[which((sub_lon <= lonmax) | (sub_lon >= lonmin))] + } + sub_lat_indices <- 1:length(sub_lat) + ## In principle cdo should put in order the latitudes + if (sub_lat[1] < sub_lat[length(sub_lat)]) { + sub_lat_indices <- length(sub_lat):1 + } + final_dims[c(1, 2)] <- c(length(sub_lon_indices), length(sub_lat_indices)) + subset_indices[[dim_matches[1]]] <- sub_lon_indices + subset_indices[[dim_matches[2]]] <- sub_lat_indices + + tmp <- take(ncvar_get(fnc2, namevar, collapse_degen = FALSE), + 1:length(subset_indices), subset_indices) + + if (!is.null(mask)) { + ## We create a very simple 2d netcdf file that is then interpolated to the common + ## grid to know what are the lons and lats of our slice of data + mask_file <- tempfile(pattern = 'loadMask', fileext = '.nc') + mask_file_remap <- tempfile(pattern = 'loadMask', fileext = '.nc') + dim_longitudes <- ncdim_def(work_piece[['dimnames']][['lon']], "degrees_east", c(0, 360)) + dim_latitudes <- ncdim_def(work_piece[['dimnames']][['lat']], "degrees_north", c(-90, 90)) + ncdf_var <- ncvar_def('LSM', "", list(dim_longitudes, dim_latitudes), NA, 'double') + fnc_mask <- nc_create(mask_file, list(ncdf_var)) + ncvar_put(fnc_mask, ncdf_var, array(rep(0, 4), dim = c(2, 2))) + nc_close(fnc_mask) + system(paste0("cdo -L -s remap", work_piece[['remap']], ",", common_grid_name, + " ", mask_file, " ", mask_file_remap, " 2>/dev/null", sep = "")) + fnc_mask <- nc_open(mask_file_remap) + mask_lons <- ncvar_get(fnc_mask, 'lon') + mask_lats <- ncvar_get(fnc_mask, 'lat') + nc_close(fnc_mask) + file.remove(mask_file, mask_file_remap) + if ((dim(mask)[1] != common_grid_lons) || (dim(mask)[2] != common_grid_lats)) { + stop(paste("Error: the mask of the dataset with index ", tail(work_piece[['indices']], 1), " in '", work_piece[['dataset_type']], "' is wrong. It must be on the common grid if the selected output type is 'lonlat', 'lon' or 'lat', or 'areave' and 'grid' has been specified. It must be on the grid of the corresponding dataset if the selected output type is 'areave' and no 'grid' has been specified. For more information check ?Load and see help on parameters 'grid', 'maskmod' and 'maskobs'.", sep = "")) + } + mask_lons[which(mask_lons < 0)] <- mask_lons[which(mask_lons < 0)] + 360 + if (lonmax >= lonmin) { + mask_lon_indices <- which((mask_lons >= lonmin) & (mask_lons <= lonmax)) + } else { + mask_lon_indices <- which((mask_lons >= lonmin) | (mask_lons <= lonmax)) + } + mask_lat_indices <- which((mask_lats >= latmin) & (mask_lats <= latmax)) + if (sub_lat[1] < sub_lat[length(sub_lat)]) { + mask_lat_indices <- mask_lat_indices[length(mask_lat_indices):1] + } + mask <- mask[mask_lon_indices, mask_lat_indices] + } + sub_lon <- sub_lon[sub_lon_indices] + sub_lat <- sub_lat[sub_lat_indices] + ### nc_close(fnc_mask) + ### system(paste0("cdo -s -sellonlatbox,", if (lonmin > lonmax) { + ### "0,360," + ### } else { + ### paste0(lonmin, ",", lonmax, ",") + ### }, latmin, ",", latmax, + ### " -remap", work_piece[['remap']], ",", common_grid_name, + ###This is wrong: same files + ### " ", mask_file, " ", mask_file, " 2>/dev/null", sep = "")) + ### fnc_mask <- nc_open(mask_file) + ### mask <- take(ncvar_get(fnc_mask, work_piece[['mask']][['nc_var_name']], + ### collapse_degen = FALSE), 1:2, subset_indices[dim_matches[1:2]]) + ###} + } + } + if (!all(dim_matches == sort(dim_matches))) { + if (!found_disordered_dims && rev(work_piece[['indices']])[2] == 1 && rev(work_piece[['indices']])[3] == 1) { + found_disordered_dims <- TRUE + .warning(paste0("The dimensions for the variable ", namevar, " in the files of the experiment with index ", tail(work_piece[['indices']], 1), " are not in the optimal order for loading with Load(). The optimal order would be '", paste(expected_dims, collapse = ', '), "'. One of the files of the dataset is stored in ", filename)) + } + tmp <- aperm(tmp, dim_matches) + } + dim(tmp) <- final_dims + # If we are exploring the file we don't need to process and arrange + # the retrieved data. We only need to keep the dimension sizes. + if (is_2d_var && lonlat_subsetting_requested && remap_needed) { + final_lons <- sub_lon + final_lats <- sub_lat + } else { + final_lons <- lon + final_lats <- lat + } + if (explore_dims) { + if (work_piece[['is_file_per_member']]) { + ## TODO: When the exp_full_path contains asterisks and is file_per_member + ## members from different datasets may be accounted. + ## Also if one file member is missing the accounting will be wrong. + ## Should parse the file name and extract number of members. + if (is_url) { + nmemb <- NULL + } else { + nmemb <- length(files) + } + } + dims <- list(member = nmemb, ftime = nltime, lon = final_lons, lat = final_lats) + } else { + # If we are not exploring, then we have to process the retrieved data + if (is_2d_var) { + tmp <- apply(tmp, c(3, 4), function(x) { + # Disable of large values. + if (!is.na(work_piece[['var_limits']][2])) { + x[which(x > work_piece[['var_limits']][2])] <- NA + } + if (!is.na(work_piece[['var_limits']][1])) { + x[which(x < work_piece[['var_limits']][1])] <- NA + } + if (!is.null(mask)) { + x[which(mask < 0.5)] <- NA + } + + if (output == 'areave' || output == 'lon') { + weights <- InsertDim(cos(final_lats * pi / 180), 1, length(final_lons), name = 'lon') + weights[which(is.na(x))] <- NA + if (output == 'areave') { + weights <- weights / mean(weights, na.rm = TRUE) + mean(x * weights, na.rm = TRUE) + } else { + weights <- weights / InsertDim(MeanDims(weights, 2, na.rm = TRUE), 2, length(final_lats), name = 'lat') + MeanDims(x * weights, 2, na.rm = TRUE) + } + } else if (output == 'lat') { + MeanDims(x, 1, na.rm = TRUE) + } else if (output == 'lonlat') { + signif(x, 5) + } + }) + if (output == 'areave') { + dim(tmp) <- c(1, 1, final_dims[3:4]) + } else if (output == 'lon') { + dim(tmp) <- c(final_dims[1], 1, final_dims[3:4]) + } else if (output == 'lat') { + dim(tmp) <- c(1, final_dims[c(2, 3, 4)]) + } else if (output == 'lonlat') { + dim(tmp) <- final_dims + } + } + var_data <- attach.big.matrix(work_piece[['out_pointer']]) + if (work_piece[['dims']][['member']] > 1 && nmemb > 1 && + work_piece[['dims']][['ftime']] > 1 && + nltime < work_piece[['dims']][['ftime']]) { + work_piece[['indices']][2] <- work_piece[['indices']][2] - 1 + for (jmemb in members) { + work_piece[['indices']][2] <- work_piece[['indices']][2] + 1 + out_position <- arrayIndex2VectorIndex(work_piece[['indices']], work_piece[['dims']]) + out_indices <- out_position:(out_position + length(tmp[, , jmemb, ]) - 1) + var_data[out_indices] <- as.vector(tmp[, , jmemb, ]) + } + work_piece[['indices']][2] <- work_piece[['indices']][2] - tail(members, 1) + 1 + } else { + out_position <- arrayIndex2VectorIndex(work_piece[['indices']], work_piece[['dims']]) + out_indices <- out_position:(out_position + length(tmp) - 1) + a <- aperm(tmp, c(1, 2, 4, 3)) + as.vector(a) + var_data[out_indices] <- as.vector(aperm(tmp, c(1, 2, 4, 3))) + } + work_piece[['indices']][3] <- work_piece[['indices']][3] + 1 + } + } + } + nc_close(fnc) + if (is_2d_var) { + if (remap_needed) { + array_across_gw <- FALSE + file.remove(filein) + ###if (!is.null(mask) && lonlat_subsetting_requested) { + ### file.remove(mask_file) + ###} + } else { + if (first_lon_in_original_file < 0) { + array_across_gw <- data_across_gw + } else { + array_across_gw <- FALSE + } + } + } + } + if (explore_dims) { + list(dims = dims, is_2d_var = is_2d_var, grid = grid_name, + units = units, var_long_name = var_long_name, + data_across_gw = data_across_gw, array_across_gw = array_across_gw) + } else { + ###if (!silent && !is.null(progress_connection) && !is.null(work_piece[['progress_amount']])) { + ### foobar <- writeBin(work_piece[['progress_amount']], progress_connection) + ###} + if (!silent && !is.null(work_piece[['progress_amount']])) { + message(paste0(work_piece[['progress_amount']]), appendLF = FALSE) + } + found_file + } +} + +.LoadSampleData <- function(var, exp = NULL, obs = NULL, sdates, + nmember = NULL, nmemberobs = NULL, + nleadtime = NULL, leadtimemin = 1, + leadtimemax = NULL, storefreq = 'monthly', + sampleperiod = 1, lonmin = 0, lonmax = 360, + latmin = -90, latmax = 90, output = 'areave', + method = 'conservative', grid = NULL, + maskmod = vector("list", 15), + maskobs = vector("list", 15), + configfile = NULL, suffixexp = NULL, + suffixobs = NULL, varmin = NULL, varmax = NULL, + silent = FALSE, nprocs = NULL) { + ## This function loads and selects sample data stored in sampleMap and + ## sampleTimeSeries and is used in the examples instead of Load() so as + ## to avoid nco and cdo system calls and computation time in the stage + ## of running examples in the CHECK process on CRAN. + selected_start_dates <- match(sdates, c('19851101', '19901101', '19951101', + '20001101', '20051101')) + start_dates_position <- 3 + lead_times_position <- 4 + + if (output == 'lonlat') { + sampleData <- s2dv::sampleMap + if (is.null(leadtimemax)) { + leadtimemax <- dim(sampleData$mod)[lead_times_position] + } + selected_lead_times <- leadtimemin:leadtimemax + + dataOut <- sampleData + dataOut$mod <- sampleData$mod[, , selected_start_dates, selected_lead_times, , ] + dataOut$obs <- sampleData$obs[, , selected_start_dates, selected_lead_times, , ] + } + else if (output == 'areave') { + sampleData <- s2dv::sampleTimeSeries + if (is.null(leadtimemax)) { + leadtimemax <- dim(sampleData$mod)[lead_times_position] + } + selected_lead_times <- leadtimemin:leadtimemax + + dataOut <- sampleData + dataOut$mod <- sampleData$mod[, , selected_start_dates, selected_lead_times] + dataOut$obs <- sampleData$obs[, , selected_start_dates, selected_lead_times] + } + + dims_out <- dim(sampleData$mod) + dims_out[start_dates_position] <- length(selected_start_dates) + dims_out[lead_times_position] <- length(selected_lead_times) + dim(dataOut$mod) <- dims_out + + dims_out <- dim(sampleData$obs) + dims_out[start_dates_position] <- length(selected_start_dates) + dims_out[lead_times_position] <- length(selected_lead_times) + dim(dataOut$obs) <- dims_out + + invisible(list(mod = dataOut$mod, obs = dataOut$obs, + lat = dataOut$lat, lon = dataOut$lon)) +} + +.ConfigGetDatasetInfo <- function(matching_entries, table_name) { + # This function obtains the information of a dataset and variable pair, + # applying all the entries that match in the configuration file. + if (table_name == 'experiments') { + id <- 'EXP' + } else { + id <- 'OBS' + } + defaults <- c(paste0('$DEFAULT_', id, '_MAIN_PATH$'), paste0('$DEFAULT_', id, '_FILE_PATH$'), '$DEFAULT_NC_VAR_NAME$', '$DEFAULT_SUFFIX$', '$DEFAULT_VAR_MIN$', '$DEFAULT_VAR_MAX$') + info <- NULL + + for (entry in matching_entries) { + if (is.null(info)) { + info <- entry[-1:-2] + info[which(info == '*')] <- defaults[which(info == '*')] + } else { + info[which(entry[-1:-2] != '*')] <- entry[-1:-2][which(entry[-1:-2] != '*')] + } + } + + info <- as.list(info) + names(info) <- c('main_path', 'file_path', 'nc_var_name', 'suffix', 'var_min', 'var_max') + info +} + +.ReplaceGlobExpressions <- function(path_with_globs, actual_path, + replace_values, tags_to_keep, + dataset_name, permissive) { + # The goal of this function is to replace the shell globbing expressions in + # a path pattern (that may contain shell globbing expressions and Load() + # tags) by the corresponding part of the real existing path. + # What is done actually is to replace all the values of the tags in the + # actual path by the corresponding $TAG$ + # + # It takes mainly two inputs. The path with expressions and tags, e.g.: + # /data/experiments/*/$EXP_NAME$/$VAR_NAME$/$VAR_NAME$_*$START_DATE$*.nc + # and a complete known path to one of the matching files, e.g.: + # /data/experiments/ecearth/i00k/tos/tos_fc0-1_19901101_199011-199110.nc + # and it returns the path pattern but without shell globbing expressions: + # /data/experiments/ecearth/$EXP_NAME$/$VAR_NAME$/$VAR_NAME$_fc0-1_$START_DATE$_199011-199110.nc + # + # To do that, it needs also as inputs the list of replace values (the + # association of each tag to their value). + # + # All the tags not present in the parameter tags_to_keep will be repalced. + # + # Not all cases can be resolved with the implemented algorithm. In an + # unsolvable case a warning is given and one possible guess is returned. + # + # In some cases it is interesting to replace only the expressions in the + # path to the file, but not the ones in the file name itself. To keep the + # expressions in the file name, the parameter permissive can be set to + # TRUE. To replace all the expressions it can be set to FALSE. + clean <- function(x) { + if (nchar(x) > 0) { + x <- gsub('\\\\', '', x) + x <- gsub('\\^', '', x) + x <- gsub('\\$', '', x) + x <- unname(sapply(strsplit(x, '[',fixed = TRUE)[[1]], function(y) gsub('.*]', '.', y))) + do.call(paste0, as.list(x)) + } else { + x + } + } + + strReverse <- function(x) sapply(lapply(strsplit(x, NULL), rev), paste, collapse = "") + + if (permissive) { + actual_path_chunks <- strsplit(actual_path, '/')[[1]] + actual_path <- paste(actual_path_chunks[-length(actual_path_chunks)], collapse = '/') + file_name <- tail(actual_path_chunks, 1) + if (length(actual_path_chunks) > 1) { + file_name <- paste0('/', file_name) + } + path_with_globs_chunks <- strsplit(path_with_globs, '/')[[1]] + path_with_globs <- paste(path_with_globs_chunks[-length(path_with_globs_chunks)], + collapse = '/') + path_with_globs <- .ConfigReplaceVariablesInString(path_with_globs, replace_values) + file_name_with_globs <- tail(path_with_globs_chunks, 1) + if (length(path_with_globs_chunks) > 1) { + file_name_with_globs <- paste0('/', file_name_with_globs) + } + right_known <- head(strsplit(file_name_with_globs, '*', fixed = TRUE)[[1]], 1) + right_known_no_tags <- .ConfigReplaceVariablesInString(right_known, replace_values) + path_with_globs_rx <- utils::glob2rx(paste0(path_with_globs, right_known_no_tags)) + match <- regexpr(gsub('$', '', path_with_globs_rx, fixed = TRUE), paste0(actual_path, file_name)) + if (match != 1) { + stop("Incorrect parameters to replace glob expressions. The path with expressions does not match the actual path.") + } + if (attr(match, 'match.length') - nchar(right_known_no_tags) < nchar(actual_path)) { + path_with_globs <- paste0(path_with_globs, right_known_no_tags, '*') + file_name_with_globs <- sub(right_known, '/*', file_name_with_globs) + } + } + path_with_globs_rx <- utils::glob2rx(path_with_globs) + values_to_replace <- c() + tags_to_replace_starts <- c() + tags_to_replace_ends <- c() + give_warning <- FALSE + for (tag in tags_to_keep) { + matches <- gregexpr(paste0('$', tag, '$'), path_with_globs_rx, fixed = TRUE)[[1]] + lengths <- attr(matches, 'match.length') + if (!(length(matches) == 1 && matches[1] == -1)) { + for (i in 1:length(matches)) { + left <- NULL + if (matches[i] > 1) { + left <- .ConfigReplaceVariablesInString(substr(path_with_globs_rx, 1, matches[i] - 1), replace_values) + left_known <- strReverse(head(strsplit(strReverse(left), strReverse('.*'), fixed = TRUE)[[1]], 1)) + } + right <- NULL + if ((matches[i] + lengths[i] - 1) < nchar(path_with_globs_rx)) { + right <- .ConfigReplaceVariablesInString(substr(path_with_globs_rx, matches[i] + lengths[i], nchar(path_with_globs_rx)), replace_values) + right_known <- head(strsplit(right, '.*', fixed = TRUE)[[1]], 1) + } + final_match <- NULL + match_limits <- NULL + if (!is.null(left)) { + left_match <- regexpr(paste0(left, replace_values[[tag]], right_known), actual_path) + match_len <- attr(left_match, 'match.length') + left_match_limits <- c(left_match + match_len - 1 - nchar(clean(right_known)) - nchar(replace_values[[tag]]) + 1, + left_match + match_len - 1 - nchar(clean(right_known))) + if (!(left_match < 1)) { + match_limits <- left_match_limits + } + } + right_match <- NULL + if (!is.null(right)) { + right_match <- regexpr(paste0(left_known, replace_values[[tag]], right), actual_path) + match_len <- attr(right_match, 'match.length') + right_match_limits <- c(right_match + nchar(clean(left_known)), + right_match + nchar(clean(left_known)) + nchar(replace_values[[tag]]) - 1) + if (is.null(match_limits) && !(right_match < 1)) { + match_limits <- right_match_limits + } + } + if (!is.null(right_match) && !is.null(left_match)) { + if (!identical(right_match_limits, left_match_limits)) { + give_warning <- TRUE + } + } + if (is.null(match_limits)) { + stop("Too complex path pattern specified for ", dataset_name, + ". Specify a simpler path pattern for this dataset.") + } + values_to_replace <- c(values_to_replace, tag) + tags_to_replace_starts <- c(tags_to_replace_starts, match_limits[1]) + tags_to_replace_ends <- c(tags_to_replace_ends, match_limits[2]) + } + } + } + + if (length(tags_to_replace_starts) > 0) { + reorder <- sort(tags_to_replace_starts, index.return = TRUE) + tags_to_replace_starts <- reorder$x + values_to_replace <- values_to_replace[reorder$ix] + tags_to_replace_ends <- tags_to_replace_ends[reorder$ix] + while (length(values_to_replace) > 0) { + actual_path <- paste0(substr(actual_path, 1, head(tags_to_replace_starts, 1) - 1), + '$', head(values_to_replace, 1), '$', + substr(actual_path, head(tags_to_replace_ends, 1) + 1, nchar(actual_path))) + extra_chars <- nchar(head(values_to_replace, 1)) + 2 - (head(tags_to_replace_ends, 1) - head(tags_to_replace_starts, 1) + 1) + values_to_replace <- values_to_replace[-1] + tags_to_replace_starts <- tags_to_replace_starts[-1] + tags_to_replace_ends <- tags_to_replace_ends[-1] + tags_to_replace_starts <- tags_to_replace_starts + extra_chars + tags_to_replace_ends <- tags_to_replace_ends + extra_chars + } + } + + if (give_warning) { + .warning(paste0("Too complex path pattern specified for ", dataset_name, + ". Double check carefully the '$Files' fetched for this dataset or specify a simpler path pattern.")) + } + + if (permissive) { + paste0(actual_path, file_name_with_globs) + } else { + actual_path + } +} + +.FindTagValue <- function(path_with_globs_and_tag, actual_path, tag) { + tag <- paste0('\\$', tag, '\\$') + path_with_globs_and_tag <- paste0('^', path_with_globs_and_tag, '$') + parts <- strsplit(path_with_globs_and_tag, '*', fixed = TRUE)[[1]] + parts <- as.list(parts[grep(tag, parts)]) + longest_couples <- c() + pos_longest_couples <- c() + found_value <- NULL + for (i in 1:length(parts)) { + parts[[i]] <- strsplit(parts[[i]], tag)[[1]] + if (length(parts[[i]]) == 1) { + parts[[i]] <- c(parts[[i]], '') + } + len_parts <- sapply(parts[[i]], nchar) + len_couples <- len_parts[-length(len_parts)] + len_parts[2:length(len_parts)] + pos_longest_couples <- c(pos_longest_couples, which.max(len_couples)) + longest_couples <- c(longest_couples, max(len_couples)) + } + chosen_part <- which.max(longest_couples) + parts[[chosen_part]] <- parts[[chosen_part]][pos_longest_couples[chosen_part]:(pos_longest_couples[chosen_part] + 1)] + if (nchar(parts[[chosen_part]][1]) >= nchar(parts[[chosen_part]][2])) { + if (nchar(parts[[chosen_part]][1]) > 0) { + matches <- gregexpr(parts[[chosen_part]][1], actual_path)[[1]] + if (length(matches) == 1) { + match_left <- matches + actual_path <- substr(actual_path, match_left + attr(match_left, 'match.length'), nchar(actual_path)) + } + } + if (nchar(parts[[chosen_part]][2]) > 0) { + matches <- gregexpr(parts[[chosen_part]][2], actual_path)[[1]] + if (length(matches) == 1) { + match_right <- matches + found_value <- substr(actual_path, 0, match_right - 1) + } + } + } else { + if (nchar(parts[[chosen_part]][2]) > 0) { + matches <- gregexpr(parts[[chosen_part]][2], actual_path)[[1]] + if (length(matches) == 1) { + match_right <- matches + actual_path <- substr(actual_path, 0, match_right - 1) + } + } + if (nchar(parts[[chosen_part]][1]) > 0) { + matches <- gregexpr(parts[[chosen_part]][1], actual_path)[[1]] + if (length(matches) == 1) { + match_left <- matches + found_value <- substr(actual_path, match_left + attr(match_left, 'match.length'), nchar(actual_path)) + } + } + } + found_value +} + +.FilterUserGraphicArgs <- function(excludedArgs, ...) { + # This function filter the extra graphical parameters passed by the user in + # a plot function, excluding the ones that the plot function uses by default. + # Each plot function has a different set of arguments that are not allowed to + # be modified. + args <- list(...) + userArgs <- list() + for (name in names(args)) { + if ((name != "") & !is.element(name, excludedArgs)) { + # If the argument has a name and it is not in the list of excluded + # arguments, then it is added to the list that will be used + userArgs[[name]] <- args[[name]] + } else { + .warning(paste0("the argument '", name, "' can not be + modified and the new value will be ignored")) + } + } + userArgs +} + +.SelectDevice <- function(fileout, width, height, units, res) { + # This function is used in the plot functions to check the extension of the + # files where the graphics will be stored and select the right R device to + # save them. + # If the vector of filenames ('fileout') has files with different + # extensions, then it will only accept the first one, changing all the rest + # of the filenames to use that extension. + + # We extract the extension of the filenames: '.png', '.pdf', ... + ext <- regmatches(fileout, regexpr("\\.[a-zA-Z0-9]*$", fileout)) + + if (length(ext) != 0) { + # If there is an extension specified, select the correct device + ## units of width and height set to accept inches + if (ext[1] == ".png") { + saveToFile <- function(fileout) { + png(filename = fileout, width = width, height = height, res = res, units = units) + } + } else if (ext[1] == ".jpeg") { + saveToFile <- function(fileout) { + jpeg(filename = fileout, width = width, height = height, res = res, units = units) + } + } else if (ext[1] %in% c(".eps", ".ps")) { + saveToFile <- function(fileout) { + postscript(file = fileout, width = width, height = height) + } + } else if (ext[1] == ".pdf") { + saveToFile <- function(fileout) { + pdf(file = fileout, width = width, height = height) + } + } else if (ext[1] == ".svg") { + saveToFile <- function(fileout) { + svg(filename = fileout, width = width, height = height) + } + } else if (ext[1] == ".bmp") { + saveToFile <- function(fileout) { + bmp(filename = fileout, width = width, height = height, res = res, units = units) + } + } else if (ext[1] == ".tiff") { + saveToFile <- function(fileout) { + tiff(filename = fileout, width = width, height = height, res = res, units = units) + } + } else { + .warning("file extension not supported, it will be used '.eps' by default.") + ## In case there is only one filename + fileout[1] <- sub("\\.[a-zA-Z0-9]*$", ".eps", fileout[1]) + ext[1] <- ".eps" + saveToFile <- function(fileout) { + postscript(file = fileout, width = width, height = height) + } + } + # Change filenames when necessary + if (any(ext != ext[1])) { + .warning(paste0("some extensions of the filenames provided in 'fileout' are not ", ext[1],". The extensions are being converted to ", ext[1], ".")) + fileout <- sub("\\.[a-zA-Z0-9]*$", ext[1], fileout) + } + } else { + # Default filenames when there is no specification + .warning("there are no extensions specified in the filenames, default to '.eps'") + fileout <- paste0(fileout, ".eps") + saveToFile <- postscript + } + + # return the correct function with the graphical device, and the correct + # filenames + list(fun = saveToFile, files = fileout) +} + +.message <- function(...) { + # Function to use the 'message' R function with our custom settings + # Default: new line at end of message, indent to 0, exdent to 3, + # collapse to \n* + args <- list(...) + + ## In case we need to specify message arguments + if (!is.null(args[["appendLF"]])) { + appendLF <- args[["appendLF"]] + } else { + ## Default value in message function + appendLF <- TRUE + } + if (!is.null(args[["domain"]])) { + domain <- args[["domain"]] + } else { + ## Default value in message function + domain <- NULL + } + args[["appendLF"]] <- NULL + args[["domain"]] <- NULL + + ## To modify strwrap indent and exdent arguments + if (!is.null(args[["indent"]])) { + indent <- args[["indent"]] + } else { + indent <- 0 + } + if (!is.null(args[["exdent"]])) { + exdent <- args[["exdent"]] + } else { + exdent <- 3 + } + args[["indent"]] <- NULL + args[["exdent"]] <- NULL + + ## To modify paste collapse argument + if (!is.null(args[["collapse"]])) { + collapse <- args[["collapse"]] + } else { + collapse <- "\n*" + } + args[["collapse"]] <- NULL + + ## Message tag + if (!is.null(args[["tag"]])) { + tag <- args[["tag"]] + } else { + tag <- "* " + } + args[["tag"]] <- NULL + + message(paste0(tag, paste(strwrap( + args, indent = indent, exdent = exdent + ), collapse = collapse)), appendLF = appendLF, domain = domain) +} + +.warning <- function(...) { + # Function to use the 'warning' R function with our custom settings + # Default: no call information, indent to 0, exdent to 3, + # collapse to \n + args <- list(...) + + ## In case we need to specify warning arguments + if (!is.null(args[["call."]])) { + call <- args[["call."]] + } else { + ## Default: don't show info about the call where the warning came up + call <- FALSE + } + if (!is.null(args[["immediate."]])) { + immediate <- args[["immediate."]] + } else { + ## Default value in warning function + immediate <- FALSE + } + if (!is.null(args[["noBreaks."]])) { + noBreaks <- args[["noBreaks."]] + } else { + ## Default value warning function + noBreaks <- FALSE + } + if (!is.null(args[["domain"]])) { + domain <- args[["domain"]] + } else { + ## Default value warning function + domain <- NULL + } + args[["call."]] <- NULL + args[["immediate."]] <- NULL + args[["noBreaks."]] <- NULL + args[["domain"]] <- NULL + + ## To modify strwrap indent and exdent arguments + if (!is.null(args[["indent"]])) { + indent <- args[["indent"]] + } else { + indent <- 0 + } + if (!is.null(args[["exdent"]])) { + exdent <- args[["exdent"]] + } else { + exdent <- 3 + } + args[["indent"]] <- NULL + args[["exdent"]] <- NULL + + ## To modify paste collapse argument + if (!is.null(args[["collapse"]])) { + collapse <- args[["collapse"]] + } else { + collapse <- "\n!" + } + args[["collapse"]] <- NULL + + ## Warning tag + if (!is.null(args[["tag"]])) { + tag <- args[["tag"]] + } else { + tag <- "! Warning: " + } + args[["tag"]] <- NULL + + warning(paste0(tag, paste(strwrap( + args, indent = indent, exdent = exdent + ), collapse = collapse)), call. = call, immediate. = immediate, + noBreaks. = noBreaks, domain = domain) +} + +.IsColor <- function(x) { + res <- try(col2rgb(x), silent = TRUE) + return(!"try-error" %in% class(res)) +} + +# This function switches to a specified figure at position (row, col) in a layout. +# This overcomes the bug in par(mfg = ...). However the mode par(new = TRUE) is +# activated, i.e., all drawn elements will be superimposed. Additionally, after +# using this function, the automatical pointing to the next figure in the layout +# will be spoiled: once the last figure in the layout is drawn, the pointer won't +# move to the first figure in the layout. +# Only figures with numbers other than 0 (when creating the layout) will be +# accessible. +# Inputs: either row and col, or n and mat +.SwitchToFigure <- function(row = NULL, col = NULL, n = NULL, mat = NULL) { + if (!is.null(n) && !is.null(mat)) { + if (!is.numeric(n) || length(n) != 1) { + stop("Parameter 'n' must be a single numeric value.") + } + n <- round(n) + if (!is.array(mat)) { + stop("Parameter 'mat' must be an array.") + } + target <- which(mat == n, arr.ind = TRUE)[1, ] + row <- target[1] + col <- target[2] + } else if (!is.null(row) && !is.null(col)) { + if (!is.numeric(row) || length(row) != 1) { + stop("Parameter 'row' must be a single numeric value.") + } + row <- round(row) + if (!is.numeric(col) || length(col) != 1) { + stop("Parameter 'col' must be a single numeric value.") + } + col <- round(col) + } else { + stop("Either 'row' and 'col' or 'n' and 'mat' must be provided.") + } + next_attempt <- c(row, col) + par(mfg = next_attempt) + i <- 1 + layout_size <- par('mfrow') + layout_cells <- matrix(1:prod(layout_size), layout_size[1], layout_size[2], + byrow = TRUE) + while (any((par('mfg')[1:2] != c(row, col)))) { + next_attempt <- which(layout_cells == i, arr.ind = TRUE)[1, ] + par(mfg = next_attempt) + i <- i + 1 + if (i > prod(layout_size)) { + stop("Figure not accessible.") + } + } + plot(0, type = 'n', axes = FALSE, ann = FALSE) + par(mfg = next_attempt) +} + +# Function to permute arrays of non-atomic elements (e.g. POSIXct) +.aperm2 <- function(x, new_order) { + old_dims <- dim(x) + attr_bk <- attributes(x) + if ('dim' %in% names(attr_bk)) { + attr_bk[['dim']] <- NULL + } + if (is.numeric(x)) { + x <- aperm(x, new_order) + } else { + y <- array(1:length(x), dim = dim(x)) + y <- aperm(y, new_order) + x <- x[as.vector(y)] + } + dim(x) <- old_dims[new_order] + attributes(x) <- c(attributes(x), attr_bk) + x +} + +# This function is a helper for the function .MergeArrays. +# It expects as inputs two named numeric vectors, and it extends them +# with dimensions of length 1 until an ordered common dimension +# format is reached. +# The first output is dims1 extended with 1s. +# The second output is dims2 extended with 1s. +# The third output is a merged dimension vector. If dimensions with +# the same name are found in the two inputs, and they have a different +# length, the maximum is taken. +.MergeArrayDims <- function(dims1, dims2) { + new_dims1 <- c() + new_dims2 <- c() + while (length(dims1) > 0) { + if (names(dims1)[1] %in% names(dims2)) { + pos <- which(names(dims2) == names(dims1)[1]) + dims_to_add <- rep(1, pos - 1) + if (length(dims_to_add) > 0) { + names(dims_to_add) <- names(dims2[1:(pos - 1)]) + } + new_dims1 <- c(new_dims1, dims_to_add, dims1[1]) + new_dims2 <- c(new_dims2, dims2[1:pos]) + dims1 <- dims1[-1] + dims2 <- dims2[-c(1:pos)] + } else { + new_dims1 <- c(new_dims1, dims1[1]) + new_dims2 <- c(new_dims2, 1) + names(new_dims2)[length(new_dims2)] <- names(dims1)[1] + dims1 <- dims1[-1] + } + } + if (length(dims2) > 0) { + dims_to_add <- rep(1, length(dims2)) + names(dims_to_add) <- names(dims2) + new_dims1 <- c(new_dims1, dims_to_add) + new_dims2 <- c(new_dims2, dims2) + } + list(new_dims1, new_dims2, pmax(new_dims1, new_dims2)) +} + +# This function takes two named arrays and merges them, filling with +# NA where needed. +# dim(array1) +# 'b' 'c' 'e' 'f' +# 1 3 7 9 +# dim(array2) +# 'a' 'b' 'd' 'f' 'g' +# 2 3 5 9 11 +# dim(.MergeArrays(array1, array2, 'b')) +# 'a' 'b' 'c' 'e' 'd' 'f' 'g' +# 2 4 3 7 5 9 11 +.MergeArrays <- function(array1, array2, along) { + if (!(is.null(array1) || is.null(array2))) { + if (!(identical(names(dim(array1)), names(dim(array2))) && + identical(dim(array1)[-which(names(dim(array1)) == along)], + dim(array2)[-which(names(dim(array2)) == along)]))) { + new_dims <- .MergeArrayDims(dim(array1), dim(array2)) + dim(array1) <- new_dims[[1]] + dim(array2) <- new_dims[[2]] + for (j in 1:length(dim(array1))) { + if (names(dim(array1))[j] != along) { + if (dim(array1)[j] != dim(array2)[j]) { + if (which.max(c(dim(array1)[j], dim(array2)[j])) == 1) { + na_array_dims <- dim(array2) + na_array_dims[j] <- dim(array1)[j] - dim(array2)[j] + na_array <- array(dim = na_array_dims) + array2 <- abind(array2, na_array, along = j) + names(dim(array2)) <- names(na_array_dims) + } else { + na_array_dims <- dim(array1) + na_array_dims[j] <- dim(array2)[j] - dim(array1)[j] + na_array <- array(dim = na_array_dims) + array1 <- abind(array1, na_array, along = j) + names(dim(array1)) <- names(na_array_dims) + } + } + } + } + } + if (!(along %in% names(dim(array2)))) { + stop("The dimension specified in 'along' is not present in the ", + "provided arrays.") + } + array1 <- abind(array1, array2, along = which(names(dim(array1)) == along)) + names(dim(array1)) <- names(dim(array2)) + } else if (is.null(array1)) { + array1 <- array2 + } + array1 +} + +# only can be used in Trend(). Needs generalization or be replaced by other function. +.reorder <- function(output, time_dim, dim_names) { + # Add dim name back + if (is.null(dim(output))) { + dim(output) <- c(stats = length(output)) + } else { #is an array + if (length(dim(output)) == 1) { + if (!is.null(names(dim(output)))) { + dim(output) <- c(1, dim(output)) + names(dim(output))[1] <- time_dim + } else { + names(dim(output)) <- time_dim + } + } else { # more than one dim + if (names(dim(output))[1] != "") { + dim(output) <- c(1, dim(output)) + names(dim(output))[1] <- time_dim + } else { #regular case + names(dim(output))[1] <- time_dim + } + } + } + # reorder + pos <- match(dim_names, names(dim(output))) + output <- aperm(output, pos) + names(dim(output)) <- dim_names + names(dim(output))[names(dim(output)) == time_dim] <- 'stats' + return(output) +} + +# to be used in AMV.R, TPI.R, SPOD.R, GSAT.R and GMST.R +.Indices <- function(data, type, monini, indices_for_clim, + fmonth_dim, sdate_dim, year_dim, month_dim, na.rm) { + + if (type == 'dcpp') { + + fyear_dim <- 'fyear' + data <- Season(data = data, time_dim = fmonth_dim, + monini = monini, moninf = 1, monsup = 12, + method = mean, na.rm = na.rm) + names(dim(data))[which(names(dim(data))==fmonth_dim)] <- fyear_dim + + if (identical(indices_for_clim, FALSE)) { ## data is already anomalies + + anom <- data + + } else { ## Different indices_for_clim for each forecast year (to use the same calendar years) + + n_fyears <- as.numeric(dim(data)[fyear_dim]) + n_sdates <- as.numeric(dim(data)[sdate_dim]) + + if (is.null(indices_for_clim)) { ## climatology over the whole (common) period + first_years_for_clim <- n_fyears : 1 + last_years_for_clim <- n_sdates : (n_sdates - n_fyears + 1) + } else { ## indices_for_clim specified as a numeric vector + first_years_for_clim <- seq(from = indices_for_clim[1], by = -1, length.out = n_fyears) + last_years_for_clim <- seq(from = indices_for_clim[length(indices_for_clim)], by = -1, length.out = n_fyears) + } + + data <- s2dv::Reorder(data = data, order = c(fyear_dim, sdate_dim)) + anom <- array(data = NA, dim = dim(data)) + for (i in 1:n_fyears) { + clim <- mean(data[i,first_years_for_clim[i]:last_years_for_clim[i]], na.rm = na.rm) + anom[i,] <- data[i,] - clim + } + } + + } else if (type %in% c('obs','hist')) { + + data <- multiApply::Apply(data = data, target_dims = month_dim, fun = mean, na.rm = na.rm)$output1 + + if (identical(indices_for_clim, FALSE)) { ## data is already anomalies + clim <- 0 + } else if (is.null(indices_for_clim)) { ## climatology over the whole period + clim <- multiApply::Apply(data = data, target_dims = year_dim, fun = mean, na.rm = na.rm)$output1 + } else { ## indices_for_clim specified as a numeric vector + clim <- multiApply::Apply(data = ClimProjDiags::Subset(x = data, along = year_dim, indices = indices_for_clim), + target_dims = year_dim, fun = mean, na.rm = na.rm)$output1 + } + + anom <- data - clim + + } else {stop('type must be dcpp, hist or obs')} + + return(anom) +} + +#TODO: Remove from s2dv when PlotLayout can get colorbar info from plotting function directly. +# The function is temporarily here because PlotLayout() needs to draw the colorbars of +# PlotMostLikelyQuantileMap(). +#Draws Color Bars for Categories +#A wrapper of s2dv::ColorBar to generate multiple color bars for different +#categories, and each category has different color set. +GradientCatsColorBar <- function(nmap, brks = NULL, cols = NULL, vertical = TRUE, subsampleg = NULL, + bar_limits, var_limits = NULL, + triangle_ends = NULL, plot = TRUE, + draw_separators = FALSE, + bar_titles = NULL, title_scale = 1, label_scale = 1, extra_margin = rep(0, 4), + ...) { + # bar_limits + if (!is.numeric(bar_limits) || length(bar_limits) != 2) { + stop("Parameter 'bar_limits' must be a numeric vector of length 2.") + } + + # Check brks + if (is.null(brks) || (is.numeric(brks) && length(brks) == 1)) { + num_brks <- 5 + if (is.numeric(brks)) { + num_brks <- brks + } + brks <- seq(from = bar_limits[1], to = bar_limits[2], length.out = num_brks) + } + if (!is.numeric(brks)) { + stop("Parameter 'brks' must be a numeric vector.") + } + # Check cols + col_sets <- list(c("#A1D99B", "#74C476", "#41AB5D", "#238B45"), + c("#6BAED6FF", "#4292C6FF", "#2171B5FF", "#08519CFF"), + c("#FFEDA0FF", "#FED976FF", "#FEB24CFF", "#FD8D3CFF"), + c("#FC4E2AFF", "#E31A1CFF", "#BD0026FF", "#800026FF"), + c("#FCC5C0", "#FA9FB5", "#F768A1", "#DD3497")) + if (is.null(cols)) { + if (length(col_sets) >= nmap) { + chosen_sets <- 1:nmap + chosen_sets <- chosen_sets + floor((length(col_sets) - length(chosen_sets)) / 2) + } else { + chosen_sets <- array(1:length(col_sets), nmap) + } + cols <- col_sets[chosen_sets] + } else { + if (!is.list(cols)) { + stop("Parameter 'cols' must be a list of character vectors.") + } + if (!all(sapply(cols, is.character))) { + stop("Parameter 'cols' must be a list of character vectors.") + } + if (length(cols) != nmap) { + stop("Parameter 'cols' must be a list of the same length as the number of ", + "maps in 'maps'.") + } + } + for (i in 1:length(cols)) { + if (length(cols[[i]]) != (length(brks) - 1)) { + cols[[i]] <- grDevices::colorRampPalette(cols[[i]])(length(brks) - 1) + } + } + + # Check bar_titles + if (is.null(bar_titles)) { + if (nmap == 3) { + bar_titles <- c("Below normal (%)", "Normal (%)", "Above normal (%)") + } else if (nmap == 5) { + bar_titles <- c("Low (%)", "Below normal (%)", + "Normal (%)", "Above normal (%)", "High (%)") + } else { + bar_titles <- paste0("Cat. ", 1:nmap, " (%)") + } + } + + if (plot) { + for (k in 1:nmap) { + s2dv::ColorBar(brks = brks, cols = cols[[k]], vertical = FALSE, subsampleg = subsampleg, +# bar_limits = bar_limits, var_limits = var_limits, + triangle_ends = triangle_ends, plot = TRUE, + draw_separators = draw_separators, + title = bar_titles[[k]], title_scale = title_scale, + label_scale = label_scale, extra_margin = extra_margin) + } + } else { + #TODO: col_inf and col_sup + return(list(brks = brks, cols = cols)) + } + +} + + diff --git a/modules/Visualization/R/tmp/clim.palette.R b/modules/Visualization/R/tmp/clim.palette.R new file mode 100644 index 00000000..7f220d31 --- /dev/null +++ b/modules/Visualization/R/tmp/clim.palette.R @@ -0,0 +1,70 @@ +#'Generate Climate Color Palettes +#' +#'Generates a colorblind friendly color palette with color ranges useful in +#'climate temperature variable plotting. +#' +#'@param palette Which type of palette to generate: from blue through white +#' to red ('bluered'), from red through white to blue ('redblue'), from +#' yellow through orange to red ('yellowred'), from red through orange to +#' red ('redyellow'), from purple through white to orange ('purpleorange'), +#' and from orange through white to purple ('orangepurple'). +#'@param n Number of colors to generate. +#' +#'@examples +#'lims <- seq(-1, 1, length.out = 21) +#' +#'ColorBar(lims, color_fun = clim.palette('redyellow')) +#' +#'cols <- clim.colors(20) +#'ColorBar(lims, cols) +#' +#'@rdname clim.palette +#'@importFrom grDevices colorRampPalette +#'@export +clim.palette <- function(palette = "bluered") { + if (palette == "bluered") { + colorbar <- colorRampPalette(rev(c("#67001f", "#b2182b", "#d6604d", + "#f4a582", "#fddbc7", "#f7f7f7", + "#d1e5f0", "#92c5de", "#4393c3", + "#2166ac", "#053061"))) + attr(colorbar, 'na_color') <- 'pink' + } else if (palette == "redblue") { + colorbar <- colorRampPalette(c("#67001f", "#b2182b", "#d6604d", + "#f4a582", "#fddbc7", "#f7f7f7", + "#d1e5f0", "#92c5de", "#4393c3", + "#2166ac", "#053061")) + attr(colorbar, 'na_color') <- 'pink' + } else if (palette == "yellowred") { + colorbar <- colorRampPalette(c("#ffffcc", "#ffeda0", "#fed976", + "#feb24c", "#fd8d3c", "#fc4e2a", + "#e31a1c", "#bd0026", "#800026")) + attr(colorbar, 'na_color') <- 'pink' + } else if (palette == "redyellow") { + colorbar <- colorRampPalette(rev(c("#ffffcc", "#ffeda0", "#fed976", + "#feb24c", "#fd8d3c", "#fc4e2a", + "#e31a1c", "#bd0026", "#800026"))) + attr(colorbar, 'na_color') <- 'pink' + } else if (palette == "purpleorange") { + colorbar <- colorRampPalette(c("#2d004b", "#542789", "#8073ac", + "#b2abd2", "#d8daeb", "#f7f7f7", + "#fee0b6", "#fdb863", "#e08214", + "#b35806", "#7f3b08")) + attr(colorbar, 'na_color') <- 'pink' + } else if (palette == "orangepurple") { + colorbar <- colorRampPalette(rev(c("#2d004b", "#542789", "#8073ac", + "#b2abd2", "#d8daeb", "#f7f7f7", + "#fee0b6", "#fdb863", "#e08214", + "#b35806", "#7f3b08"))) + attr(colorbar, 'na_color') <- 'pink' + } else { + stop("Parameter 'palette' must be one of 'bluered', 'redblue', 'yellowred'", + "'redyellow', 'purpleorange' or 'orangepurple'.") + } + colorbar +} +#'@rdname clim.palette +#'@export +clim.colors <- function(n, palette = "bluered") { + clim.palette(palette)(n) +} + diff --git a/modules/Visualization/R/tmp/zzz.R b/modules/Visualization/R/tmp/zzz.R new file mode 100644 index 00000000..f2871dfd --- /dev/null +++ b/modules/Visualization/R/tmp/zzz.R @@ -0,0 +1,256 @@ +# Function to permute arrays of non-atomic elements (e.g. POSIXct) +.aperm2 <- function(x, new_order) { + old_dims <- dim(x) + attr_bk <- attributes(x) + if ('dim' %in% names(attr_bk)) { + attr_bk[['dim']] <- NULL + } + if (is.numeric(x)) { + x <- aperm(x, new_order) + } else { + y <- array(1:length(x), dim = dim(x)) + y <- aperm(y, new_order) + x <- x[as.vector(y)] + } + dim(x) <- old_dims[new_order] + attributes(x) <- c(attributes(x), attr_bk) + x +} + +# verbose-only printing function +.printv <- function(value, verbosity = TRUE) { + if (verbosity) { + print(value) + } +} + +# normalize a time series +.standardize <- function(timeseries) { + out <- (timeseries - mean(timeseries, na.rm = T)) / sd(timeseries, na.rm = T) + return(out) +} + +.selbox <- function(lon, lat, xlim = NULL, ylim = NULL) { + if (!is.null(xlim)) { + # This transforms c(-20, -10) to c(340, 350) but c(-20, 10) is unchanged + # Bring them all to the same units in the 0:360 range + xlim1 <- xlim[1] %% 360 + xlim2 <- xlim[2] %% 360 + lonm <- lon %% 360 + if (lonm[1] > tail(lonm, 1)) { + lonm <- lon + } + if (xlim1 > xlim2) { + # If box crosses 0 + ilonsel <- (lonm >= xlim1) | (lonm <= xlim2) + } else { + ilonsel <- (lonm >= xlim1) & (lonm <= xlim2) + } + if (!any(ilonsel)) { + stop("No intersection between longitude bounds and data domain.") + } + } else { + ilonsel <- 1:length(lon) + } + if (!is.null(ylim)) { + ilatsel <- (lat >= ylim[1]) & (lat <= ylim[2]) + } else { + ilatsel <- 1:length(lat) + } + return(list(ilon = ilonsel, ilat = ilatsel)) +} + +# produce a 2d matrix of area weights +.area.weight <- function(ics, ipsilon, root = T) { + field <- array(NA, dim = c(length(ics), length(ipsilon))) + if (root == T) { + for (j in 1:length(ipsilon)) { + field[, j] <- sqrt(cos(pi / 180 * ipsilon[j])) + } + } + + if (root == F) { + for (j in 1:length(ipsilon)) { + field[, j] <- cos(pi / 180 * ipsilon[j]) + } + } + + return(field) +} + +#Draws Color Bars for Categories +#A wrapper of s2dv::ColorBar to generate multiple color bars for different +#categories, and each category has different color set. +GradientCatsColorBar <- function(nmap, brks = NULL, cols = NULL, vertical = TRUE, subsampleg = NULL, + bar_limits, var_limits = NULL, + triangle_ends = NULL, col_inf = NULL, col_sup = NULL, plot = TRUE, + draw_separators = FALSE, + bar_titles = NULL, title_scale = 1, label_scale = 1, extra_margin = rep(0, 4), + ...) { + + # bar_limits: a vector of 2 or a list + if (!is.list(bar_limits)) { + if (!is.numeric(bar_limits) || length(bar_limits) != 2) { + stop("Parameter 'bar_limits' must be a numeric vector of length 2 or a list containing that.") + } + # turn into list + bar_limits <- rep(list(bar_limits), nmap) + } else { + if (any(!sapply(bar_limits, is.numeric)) || any(sapply(bar_limits, length) != 2)) { + stop("Parameter 'bar_limits' must be a numeric vector of length 2 or a list containing that.") + } + if (length(bar_limits) != nmap) { + stop("Parameter 'bar_limits' must have the length of 'nmap'.") + } + } + # Check brks + if (!is.list(brks)) { + if (is.null(brks)) { + brks <- 5 + } else if (!is.numeric(brks)) { + stop("Parameter 'brks' must be a numeric vector.") + } + # Turn it into list + brks <- rep(list(brks), nmap) + } else { + if (length(brks) != nmap) { + stop("Parameter 'brks' must have the length of 'nmap'.") + } + } + for (i_map in 1:nmap) { + if (length(brks[[i_map]]) == 1) { + brks[[i_map]] <- seq(from = bar_limits[[i_map]][1], to = bar_limits[[i_map]][2], length.out = brks[[i_map]]) + } + } + + # Check cols + col_sets <- list(c("#A1D99B", "#74C476", "#41AB5D", "#238B45"), + c("#6BAED6FF", "#4292C6FF", "#2171B5FF", "#08519CFF"), + c("#FFEDA0FF", "#FED976FF", "#FEB24CFF", "#FD8D3CFF"), + c("#FC4E2AFF", "#E31A1CFF", "#BD0026FF", "#800026FF"), + c("#FCC5C0", "#FA9FB5", "#F768A1", "#DD3497")) + if (is.null(cols)) { + if (length(col_sets) >= nmap) { + chosen_sets <- 1:nmap + chosen_sets <- chosen_sets + floor((length(col_sets) - length(chosen_sets)) / 2) + } else { + chosen_sets <- array(1:length(col_sets), nmap) + } + cols <- col_sets[chosen_sets] + + # Set triangle_ends, col_sup, col_inf + #NOTE: The "col" input of ColorBar() later is not NULL (since we determine it here) + # so ColorBar() cannot decide these parameters for us. + #NOTE: Here, col_inf and col_sup are prior to triangle_ends, which is consistent with ColorBar(). + #TODO: Make triangle_ends a list + if (is.null(triangle_ends)) { + if (!is.null(var_limits)) { + triangle_ends <- c(FALSE, FALSE) + #TODO: bar_limits is a list + if (bar_limits[1] >= var_limits[1] | !is.null(col_inf)) { + triangle_ends[1] <- TRUE + if (is.null(col_inf)) { + col_inf <- lapply(cols, head, 1) + cols <- lapply(cols, '[', -1) + } + } + if (bar_limits[2] < var_limits[2] | !is.null(col_sup)) { + triangle_ends[2] <- TRUE + if (is.null(col_sup)) { + col_sup <- lapply(cols, tail, 1) + cols <- lapply(cols, '[', -length(cols[[1]])) + } + } + } else { + triangle_ends <- c(!is.null(col_inf), !is.null(col_sup)) + } + } else { # triangle_ends has values + if (triangle_ends[1] & is.null(col_inf)) { + col_inf <- lapply(cols, head, 1) + cols <- lapply(cols, '[', -1) + } + if (triangle_ends[2] & is.null(col_sup)) { + col_sup <- lapply(cols, tail, 1) + cols <- lapply(cols, '[', -length(cols[[1]])) + } + } + + } else { + if (!is.list(cols)) { + stop("Parameter 'cols' must be a list of character vectors.") + } + if (!all(sapply(cols, is.character))) { + stop("Parameter 'cols' must be a list of character vectors.") + } + if (length(cols) != nmap) { + stop("Parameter 'cols' must be a list of the same length as 'nmap'.") + } + } + for (i_map in 1:length(cols)) { + if (length(cols[[i_map]]) != (length(brks[[i_map]]) - 1)) { + cols[[i_map]] <- grDevices::colorRampPalette(cols[[i_map]])(length(brks[[i_map]]) - 1) + } + } + + # Check bar_titles + if (is.null(bar_titles)) { + if (nmap == 3) { + bar_titles <- c("Below normal (%)", "Normal (%)", "Above normal (%)") + } else if (nmap == 5) { + bar_titles <- c("Low (%)", "Below normal (%)", + "Normal (%)", "Above normal (%)", "High (%)") + } else { + bar_titles <- paste0("Cat. ", 1:nmap, " (%)") + } + } + + if (plot) { + for (k in 1:nmap) { +#TODO: Add s2dv:: + ColorBar(brks = brks[[k]], cols = cols[[k]], vertical = FALSE, subsampleg = subsampleg, + bar_limits = bar_limits[[k]], #var_limits = var_limits, + triangle_ends = triangle_ends, col_inf = col_inf[[k]], col_sup = col_sup[[k]], plot = TRUE, + draw_separators = draw_separators, + title = bar_titles[[k]], title_scale = title_scale, + label_scale = label_scale, extra_margin = extra_margin) + } + } else { + return(list(brks = brks, cols = cols, col_inf = col_inf, col_sup = col_sup)) + } + +} + +.KnownLonNames <- function() { + known_lon_names <- c('lon', 'lons', 'longitude', 'x', 'i', 'nav_lon') +} + +.KnownLatNames <- function() { + known_lat_names <- c('lat', 'lats', 'latitude', 'y', 'j', 'nav_lat') +} + +.KnownTimeNames <- function() { + known_time_names <- c('time', 'ftime', 'sdate', 'sdates', 'syear', 'sweek', 'sday', 'leadtimes') +} + +.KnownForecastTimeNames <- function() { + known_time_names <- c('time', 'ftime', 'ltime', 'leadtimes') +} + +.KnownStartDateNames <- function() { + known_time_names <- c('sdate', 'sdates', 'syear', 'sweek', 'sday') +} + +.KnownMemberNames <- function() { + known_time_names <- c('memb', 'member', 'members', 'ensemble', 'ensembles') +} + +.isNullOb <- function(x) is.null(x) | all(sapply(x, is.null)) + +.rmNullObs <- function(x) { + x <- base::Filter(Negate(.isNullOb), x) + lapply(x, function(x) if (is.list(x)) .rmNullObs(x) else x) +} + +# Definition of a global variable to store the warning message used in Calibration +warning_shown <- FALSE + -- GitLab From 44098cd80e784cde37474abf408fe678d547eed5 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Thu, 31 Aug 2023 11:46:17 +0200 Subject: [PATCH 235/388] Add cpus option --- conf/slurm_templates/run_parallel_workflow.sh | 2 -- launch_SUNSET.sh | 19 +++++++++++++++---- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/conf/slurm_templates/run_parallel_workflow.sh b/conf/slurm_templates/run_parallel_workflow.sh index d821d158..461ee7e2 100644 --- a/conf/slurm_templates/run_parallel_workflow.sh +++ b/conf/slurm_templates/run_parallel_workflow.sh @@ -1,10 +1,8 @@ #!/bin/bash -#SBATCH -n 8 #SBATCH -J SUNSET_verification # Slurm directive description: -# -n: number of cores # -J: job name set -vx diff --git a/launch_SUNSET.sh b/launch_SUNSET.sh index eefb33cf..ec896a2f 100644 --- a/launch_SUNSET.sh +++ b/launch_SUNSET.sh @@ -17,7 +17,11 @@ function usage echo " --wallclock=: Maximum execution time for the jobs." echo " Default is 02:00:00." echo " " - echo " --custom_directives=: Custom directives sbatch." + echo " --cpus=: CPUs (cores) to be requested for each job." + echo " Corresponds to the --cpus-per-task parameter" + echo " in sbatch. The default number is 1." + echo " " + echo " --custom_directives=: Custom directives for sbatch." echo " E.g. '--constraint=medmem'." } @@ -25,8 +29,6 @@ function usage # Assign arguments recipe=$1 script=$2 -# recipe=recipes/tests/recipe_seasonal_example.yml -# script=modules/test_parallel_workflow.R for i in "$@"; do case $i in @@ -34,6 +36,10 @@ for i in "$@"; do export wallclock=`echo $1 | sed -e 's/^[^=]*=//g'` shift ;; + --cpus*) + export cpus=`echo $1 | sed -e 's/^[^=]*=//g'` + shift + ;; --custom_directives*) export custom_directives=`echo $1 | sed -e 's/^[^=]*=//g'` shift @@ -48,6 +54,7 @@ for i in "$@"; do ;; esac done + # Check recipe if [ ! -f "$recipe" ]; then echo "Could not find the recipe file: $recipe" @@ -64,6 +71,10 @@ fi if [ -z "$wallclock" ]; then wallclock="02:00:00" fi +# Assign default number of cores if not specified +if [ -z "$cpus" ]; then + cpus=1 +fi # Assign empty custom directives if not specified if [ -z "$custom_directives" ]; then custom_directives="" @@ -95,7 +106,7 @@ for atomic_recipe in ${outdir}/logs/recipes/atomic_recipe_??.yml; do job_name=$(basename $outdir)_$(printf %02d $job_number) outfile=${logdir}/run-${job_name}.out errfile=${logdir}/run-${job_name}.err - sbatch --output=$outfile --error=$errfile --time=$wallclock $custom_directives conf/slurm_templates/run_parallel_workflow.sh ${script} ${atomic_recipe} + sbatch --output=$outfile --error=$errfile --time=$wallclock --cpus-per-task=$cpus $custom_directives conf/slurm_templates/run_parallel_workflow.sh ${script} ${atomic_recipe} done ## TODO: Retrieve jobids and list them as dependencies for scorecards job? -- GitLab From e1f3f664a224b59d0937fe16c10a2b58f31672b3 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Thu, 31 Aug 2023 11:48:11 +0200 Subject: [PATCH 236/388] Remove as.s2dv_cube.R local copy --- tools/tmp/as.s2dv_cube.R | 184 --------------------------------------- 1 file changed, 184 deletions(-) delete mode 100644 tools/tmp/as.s2dv_cube.R diff --git a/tools/tmp/as.s2dv_cube.R b/tools/tmp/as.s2dv_cube.R deleted file mode 100644 index 019f69a2..00000000 --- a/tools/tmp/as.s2dv_cube.R +++ /dev/null @@ -1,184 +0,0 @@ -#'Conversion of 'startR_array' or 'list' objects to 's2dv_cube' -#' -#'This function converts data loaded using startR package or s2dverification Load function into a 's2dv_cube' object. -#' -#'@author Perez-Zanon Nuria, \email{nuria.perez@bsc.es} -#'@author Nicolau Manubens, \email{nicolau.manubens@bsc.es} -#' -#'@param object an object of class 'startR_array' generated from function \code{Start} from startR package (version 0.1.3 from earth.bsc.es/gitlab/es/startR) or a list output from function \code{Load} from s2dverification package. -#' -#'@return The function returns a 's2dv_cube' object to be easily used with functions \code{CST} from CSTools package. -#' -#'@seealso \code{\link{s2dv_cube}}, \code{\link[s2dverification]{Load}}, \code{\link[startR]{Start}} and \code{\link{CST_Load}} -#'@examples -#'\dontrun{ -#'library(startR) -#'repos <- '/esarchive/exp/ecmwf/system5_m1/monthly_mean/$var$_f6h/$var$_$sdate$.nc' -#'data <- Start(dat = repos, -#' var = 'tas', -#' sdate = c('20170101', '20180101'), -#' ensemble = indices(1:20), -#' time = 'all', -#' latitude = 'all', -#' longitude = indices(1:40), -#' return_vars = list(latitude = 'dat', longitude = 'dat', time = 'sdate'), -#' retrieve = TRUE) -#'data <- as.s2dv_cube(data) -#'class(data) -#'startDates <- c('20001101', '20011101', '20021101', -#' '20031101', '20041101', '20051101') -#'data <- Load(var = 'tas', exp = 'system5c3s', -#' nmember = 15, sdates = startDates, -#' leadtimemax = 3, latmin = 27, latmax = 48, -#' lonmin = -12, lonmax = 40, output = 'lonlat') -#'data <- as.s2dv_cube(data) -#'class(data) -#'} -#'@export -as.s2dv_cube <- function(object) { - if (is.list(object)) { - if (is.null(object) || (is.null(object$mod) && is.null(object$obs))) { - stop("The s2dverification::Load call did not return any data.") - } - obs <- object - obs$mod <- NULL - object$obs <- NULL - names(object)[[1]] <- 'data' - names(obs)[[1]] <- 'data' - remove_matches <- function(v, patterns) { - if (length(v) > 0) { - matches <- c() - for (pattern in patterns) { - matches <- c(matches, which(grepl(pattern, v))) - } - if (length(matches) > 0) { - v <- v[-matches] - } - } - v - } - - harmonize_patterns <- function(v) { - matches <- grepl('.*\\.nc$', v) - if (sum(!matches) > 0) { - match_indices <- which(!matches) - v[match_indices] <- sapply(v[match_indices], function(x) paste0(x, '*')) - } - v <- glob2rx(v) - v <- gsub('\\$.*\\$', '*', v) - v - } - - if (!is.null(obs$data)) { - obs$Datasets$exp <- NULL - obs$Datasets <- obs$Datasets$obs - obs_path_patterns <- sapply(obs$Datasets, function(x) attr(x, 'source')) - obs_path_patterns <- harmonize_patterns(obs_path_patterns) - } - - if (!is.null(object$data)) { - object$Datasets$obs <- NULL - object$Datasets <- object$Datasets$exp - exp_path_patterns <- sapply(object$Datasets, function(x) attr(x, 'source')) - exp_path_patterns <- harmonize_patterns(exp_path_patterns) - } - - if (!is.null(obs$data) && !is.null(object$data)) { - obs$source_files <- remove_matches(obs$source_files, - exp_path_patterns) - obs$not_found_files <- remove_matches(obs$not_found_files, - exp_path_patterns) - - object$source_files <- remove_matches(object$source_files, - obs_path_patterns) - object$not_found_files <- remove_matches(object$not_found_files, - obs_path_patterns) - } - - result <- list() - if (!is.null(object$data)) { - class(object) <- 's2dv_cube' - result$exp <- object - } - if (!is.null(obs$data)) { - class(obs) <- 's2dv_cube' - result$obs <- obs - } - if (is.list(result)) { - if (is.null(result$exp)) { - result <- result$obs - } else if (is.null(result$obs)) { - result <- result$exp - } else { - warning("The output is a list of two 's2dv_cube' objects", - " corresponding to 'exp' and 'obs'.") - } - } - - } else if (class(object) == 'startR_array') { - result <- list() - result$data <- as.vector(object) - dim(result$data) <- dim(object) - - dat_attr_names <- names(attributes(object)$Variables$dat1) - common_attr_names <- names(attributes(object)$Variables$common) - # $lon - known_lon_names <- s2dv:::.KnownLonNames() - if (!is.null(dat_attr_names[which(dat_attr_names %in% known_lon_names)]) & - !identical(dat_attr_names[which(dat_attr_names %in% known_lon_names)], character(0))) { - result$lon <- attributes(object)$Variables$dat1[[dat_attr_names[which(dat_attr_names %in% known_lon_names)]]] - } else if (!is.null(common_attr_names[which(common_attr_names %in% known_lon_names)]) & - !identical(common_attr_names[which(common_attr_names %in% known_lon_names)], character(0))) { - result$lon <- attributes(object)$Variables$common[[common_attr_names[which(common_attr_names %in% known_lon_names)]]] - } else { - warning("'lon' is not found in this object.") - result$lon <- NULL - } - # $lat - known_lat_names <- s2dv:::.KnownLatNames() - if (!is.null(dat_attr_names[which(dat_attr_names %in% known_lat_names)]) & - !identical(dat_attr_names[which(dat_attr_names %in% known_lat_names)], character(0))) { - result$lat <- attributes(object)$Variables$dat1[[dat_attr_names[which(dat_attr_names %in% known_lat_names)]]] - } else if (!is.null(common_attr_names[which(common_attr_names %in% known_lat_names)]) & - !identical(common_attr_names[which(common_attr_names %in% known_lat_names)], character(0))) { - result$lat <- attributes(object)$Variables$common[[common_attr_names[which(common_attr_names %in% known_lat_names)]]] - } else { - warning("'lat' is not found in this object.") - result$lat <- NULL - } - - vars <- which(!common_attr_names %in% c("time", known_lon_names, known_lat_names)) - - if (length(vars) > 1) { - warning("More than one variable has been provided and ", - "only the first one '", common_attr_names[vars[1]],"' will be used.") - vars <- vars[1] - } - - Variable <- list() - Variable$varName <- names(attributes(object)$Variables$common)[vars] - attr(Variable, 'variable') <- attributes(object)$Variables$common[[vars]] - result$Variable <- Variable - dims <- dim(object) - if (any(c('sdate', 'sdates') %in% names(dims))) { - n_sdates <- dims[which(names(dims) == 'sdate' | names(dims) == 'sdates')] - sdates <- attributes(object)$Variables$common$time[1 : n_sdates] - } else { - sdates <- attributes(object)$Variables$common$time[1] - } - Dataset <- list(list(InitializationDates = list(Member_1 = sdates))) - names(Dataset) <- list(deparse(substitute(object))) - result$Datasets <- Dataset - result$Dates$start <- attributes(object)$Variables$common$time - result$when <- Sys.time() - result$source_files <- as.vector(attributes(object)$Files) - result$load_parameters <- attributes(object)$FileSelectors - class(result) <- 's2dv_cube' - } else { - stop("The class of parameter 'object' is not implemented", - " to be converted into 's2dv_cube' class yet.") - } - result - -} - -- GitLab From f5b2a1603409214392fa924106b38712bee12388 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Thu, 31 Aug 2023 11:49:04 +0200 Subject: [PATCH 237/388] Delete OperationalCS.R script --- OperationalCS.R | 36 ------------------------------------ 1 file changed, 36 deletions(-) delete mode 100644 OperationalCS.R diff --git a/OperationalCS.R b/OperationalCS.R deleted file mode 100644 index ec01a30e..00000000 --- a/OperationalCS.R +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env Rscript -args = commandArgs(trailingOnly = TRUE) -# To test: -# args <- NULL; args[1] <- "recipes/seasonal_oper.yml" - - -# execution: Rscript OperationalCS.R recipe.yml -# This code checks the recipe and builds and executes the workflow -print(args) -library(yaml) - -recipe <- read_yaml(args[1]) -recipe$filename <- args[1] - -# Load required libraries -source("tools/libs.R") - -# Create output folder and log: -logger <- prepare_outputs(recipe = recipe) -folder <- logger$foldername -log_file <- logger$logname -logger <- logger$logger - -# Checks: -verifications <- check_recipe(recipe, file = args[2], conf, logger) -# Divide recipe into single verifications recipes: -total_recipes <- divide_recipe(recipe, verifications, folder, logger) - -# Divide recipe into single verifications recipes: -total_recipes <- divide_recipe(recipe, verifications, folder, logger) -# Go to verification code: -capture.output(source("modules/verifications.R"), - file = log_file, type ='message', - append = TRUE) - - -- GitLab From 98c3d994c5f1ea48e5323216e5f5ba9293b054c5 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Thu, 31 Aug 2023 11:50:50 +0200 Subject: [PATCH 238/388] Move GRIB recipe to recipes folder --- .../examples}/recipe_GRIB_system5_era5.yml | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {modules/Loading/testing_recipes => recipes/examples}/recipe_GRIB_system5_era5.yml (100%) diff --git a/modules/Loading/testing_recipes/recipe_GRIB_system5_era5.yml b/recipes/examples/recipe_GRIB_system5_era5.yml similarity index 100% rename from modules/Loading/testing_recipes/recipe_GRIB_system5_era5.yml rename to recipes/examples/recipe_GRIB_system5_era5.yml -- GitLab From 3ab5ce22572c593cf84613f6616aa9f9a676ef67 Mon Sep 17 00:00:00 2001 From: nperez Date: Fri, 1 Sep 2023 09:30:11 +0200 Subject: [PATCH 239/388] unify font --- modules/Visualization/R/plot_ensemble_mean.R | 1 + modules/Visualization/R/plot_most_likely_terciles_map.R | 2 +- modules/Visualization/R/plot_skill_metrics.R | 2 +- modules/Visualization/output_size.yml | 2 ++ 4 files changed, 5 insertions(+), 2 deletions(-) diff --git a/modules/Visualization/R/plot_ensemble_mean.R b/modules/Visualization/R/plot_ensemble_mean.R index 8fbe1bfd..3d0304a7 100644 --- a/modules/Visualization/R/plot_ensemble_mean.R +++ b/modules/Visualization/R/plot_ensemble_mean.R @@ -129,6 +129,7 @@ plot_ensemble_mean <- function(recipe, fcst, mask = NULL, dots = NULL, outdir, o base_args <- list(var = NULL, dots = NULL, mask = NULL, lon = longitude, lat = latitude, dot_symbol = 20, title_scale = 0.6, + font.main = 2, filled.continents = F, brks = brks, cols = cols, bar_label_digits = 4, bar_label_scale = 1.5, axes_label_scale = 1, units = units) diff --git a/modules/Visualization/R/plot_most_likely_terciles_map.R b/modules/Visualization/R/plot_most_likely_terciles_map.R index cfc0635e..4b18fd84 100644 --- a/modules/Visualization/R/plot_most_likely_terciles_map.R +++ b/modules/Visualization/R/plot_most_likely_terciles_map.R @@ -209,7 +209,7 @@ plot_most_likely_terciles <- function(recipe, # plot a square tmp$brks <- 4 tmp$draw_ticks <- F - tmp$box_label <- "40+" + tmp$box_label <- "> 40" do.call(ColorBar_onebox, tmp) } } diff --git a/modules/Visualization/R/plot_skill_metrics.R b/modules/Visualization/R/plot_skill_metrics.R index 0ecd9d64..c0b0f4f8 100644 --- a/modules/Visualization/R/plot_skill_metrics.R +++ b/modules/Visualization/R/plot_skill_metrics.R @@ -185,7 +185,7 @@ plot_skill_metrics <- function(recipe, data_cube, skill_metrics, title_scale = 0.6, filled.continents = F, brks = brks, cols = cols, col_inf = col_inf, col_sup = col_sup, - units = units, + units = units, font.main = 2, bar_label_digits = 3, bar_label_scale = 1.5, axes_label_scale = 1, width = 7, height = 5) base_args[names(output_configuration)] <- output_configuration diff --git a/modules/Visualization/output_size.yml b/modules/Visualization/output_size.yml index f5edfd7a..0cd945be 100644 --- a/modules/Visualization/output_size.yml +++ b/modules/Visualization/output_size.yml @@ -9,6 +9,7 @@ region: #units inches bar_extra_margin: !expr c(2,1,0.5,1) dot_size: 1.7 dot_symbol: 4 + font.main: 1 forecast_ensemble_mean: width: 8.5 height: 8.5 @@ -17,6 +18,7 @@ region: #units inches bar_extra_margin: !expr c(2,1,0.5,1) dot_symbol: 4 dot_size: 1.7 + font.main: 1 most_likely_terciles: width: 8.5 height: 8.5 -- GitLab From 77f029f91bca00b1b840bea8a8de1faa1c45cb9a Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Fri, 1 Sep 2023 10:29:56 +0200 Subject: [PATCH 240/388] Fix bug in platform configuration --- autosubmit/conf_esarchive/jobs.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autosubmit/conf_esarchive/jobs.conf b/autosubmit/conf_esarchive/jobs.conf index c99236dd..f9d26634 100644 --- a/autosubmit/conf_esarchive/jobs.conf +++ b/autosubmit/conf_esarchive/jobs.conf @@ -9,6 +9,6 @@ PROCESSORS = [scorecards] FILE = autosubmit/auto-scorecards.sh WALLCLOCK = 00:10 -PLATFORM = nord3v2 ## Change?? +PLATFORM = nord3v2 PROCESSORS = 1 DEPENDENCIES = verification -- GitLab From 97bfdeeb51b0a1a034300f7f0b2ad34e033d43a0 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Fri, 1 Sep 2023 13:25:43 +0200 Subject: [PATCH 241/388] Add Scorecards to launcher (WIP) --- conf/slurm_templates/run_scorecards.sh | 14 ++++++++++++++ launch_SUNSET.sh | 15 ++++++++++++++- split.R | 2 ++ 3 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 conf/slurm_templates/run_scorecards.sh diff --git a/conf/slurm_templates/run_scorecards.sh b/conf/slurm_templates/run_scorecards.sh new file mode 100644 index 00000000..7a125876 --- /dev/null +++ b/conf/slurm_templates/run_scorecards.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +#SBATCH -J SUNSET_scorecards + +# Slurm directive description: +# -J: job name + +set -vx + +recipe=$1 + +source MODULES + +sleep 600 diff --git a/launch_SUNSET.sh b/launch_SUNSET.sh index ec896a2f..72a1826d 100644 --- a/launch_SUNSET.sh +++ b/launch_SUNSET.sh @@ -90,6 +90,8 @@ Rscript split.R ${recipe} --tmpfile $tmpfile codedir=$( head -1 $tmpfile | tail -1 ) # Retrieve output directory outdir=$( head -2 $tmpfile | tail -1 ) +# Run scorecards job? +scorecards=$( head -3 $tmpfile | tail -1) rm $tmpfile @@ -101,12 +103,23 @@ echo "Slurm job logs will be stored in $logdir" # Launch one job per atomic recipe cd $codedir job_number=0 +verification_job_list=() + for atomic_recipe in ${outdir}/logs/recipes/atomic_recipe_??.yml; do job_number=$(($job_number + 1)) job_name=$(basename $outdir)_$(printf %02d $job_number) outfile=${logdir}/run-${job_name}.out errfile=${logdir}/run-${job_name}.err - sbatch --output=$outfile --error=$errfile --time=$wallclock --cpus-per-task=$cpus $custom_directives conf/slurm_templates/run_parallel_workflow.sh ${script} ${atomic_recipe} + job_ID=$(sbatch --parsable --output=$outfile --error=$errfile --time=$wallclock --cpus-per-task=$cpus $custom_directives conf/slurm_templates/run_parallel_workflow.sh ${script} ${atomic_recipe}) + verification_job_list+=($job_ID) done +echo $scorecards + +if [[ $scorecards == "TRUE" ]]; then + outfile=${logdir}/run-scorecards.out + erfile=${logdir}/run-scorecards.err + sbatch --dependency=afterok:$(IFS=,; echo "${verification_job_list[*]}") --output=$outfile --error=$errfile --time=01:00:00 conf/slurm_templates/run_scorecards.sh ${recipe} +fi + ## TODO: Retrieve jobids and list them as dependencies for scorecards job? diff --git a/split.R b/split.R index 5b42d986..c71a0377 100755 --- a/split.R +++ b/split.R @@ -39,5 +39,7 @@ if (recipe$Run$autosubmit) { sink(arguments$tmpfile, append = FALSE) cat(paste0(recipe$Run$code_dir, "\n")) cat(paste0(run_parameters$outdir, "\n")) + ## TODO: get parameter from recipe + cat(paste0("TRUE")) sink() } -- GitLab From 4254c8926ea948e3ed9901fac970072cba5f2bb2 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Fri, 1 Sep 2023 15:14:46 +0200 Subject: [PATCH 242/388] Refine dependency system, add comments --- conf/slurm_templates/run_scorecards.sh | 5 +++++ launch_SUNSET.sh | 15 +++++++++++---- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/conf/slurm_templates/run_scorecards.sh b/conf/slurm_templates/run_scorecards.sh index 7a125876..1ff64d21 100644 --- a/conf/slurm_templates/run_scorecards.sh +++ b/conf/slurm_templates/run_scorecards.sh @@ -1,9 +1,13 @@ #!/bin/bash #SBATCH -J SUNSET_scorecards +#SBATCH --kill-on-invalid-dep=yes # Slurm directive description: # -J: job name +# --kill-on-invalid-dep: Whether to kill the job if the dependencies are +# not satisfied. If the verification jobs fail, the scorecards job +# will be canceled. set -vx @@ -11,4 +15,5 @@ recipe=$1 source MODULES +## TODO: Add scorecards script sleep 600 diff --git a/launch_SUNSET.sh b/launch_SUNSET.sh index 72a1826d..c44880e9 100644 --- a/launch_SUNSET.sh +++ b/launch_SUNSET.sh @@ -86,6 +86,7 @@ tmpfile=$(mktemp ${TMPDIR-/tmp}/SUNSET.XXXXXX) # Create outdir and split recipes source MODULES Rscript split.R ${recipe} --tmpfile $tmpfile + # Retrieve working directory codedir=$( head -1 $tmpfile | tail -1 ) # Retrieve output directory @@ -103,23 +104,29 @@ echo "Slurm job logs will be stored in $logdir" # Launch one job per atomic recipe cd $codedir job_number=0 +# Create empty array to store all the job IDs for the verification jobs verification_job_list=() +echo "Submitting verification jobs..." +# Loop over atomic recipes for atomic_recipe in ${outdir}/logs/recipes/atomic_recipe_??.yml; do job_number=$(($job_number + 1)) job_name=$(basename $outdir)_$(printf %02d $job_number) outfile=${logdir}/run-${job_name}.out errfile=${logdir}/run-${job_name}.err + # Send batch job and capture job ID job_ID=$(sbatch --parsable --output=$outfile --error=$errfile --time=$wallclock --cpus-per-task=$cpus $custom_directives conf/slurm_templates/run_parallel_workflow.sh ${script} ${atomic_recipe}) + # Add job ID to array verification_job_list+=($job_ID) + echo "Submitted batch job $job_ID" done -echo $scorecards - +# Submit scorecards job with dependency on verification jobs. +# The job will not run until all the verification jobs have finished successfully. if [[ $scorecards == "TRUE" ]]; then + echo "Submitting scorecards jobs..." outfile=${logdir}/run-scorecards.out - erfile=${logdir}/run-scorecards.err + errfile=${logdir}/run-scorecards.err sbatch --dependency=afterok:$(IFS=,; echo "${verification_job_list[*]}") --output=$outfile --error=$errfile --time=01:00:00 conf/slurm_templates/run_scorecards.sh ${recipe} fi -## TODO: Retrieve jobids and list them as dependencies for scorecards job? -- GitLab From 15a25f013bc2a0ede30d1da7db4a1b220b015565 Mon Sep 17 00:00:00 2001 From: nperez Date: Tue, 5 Sep 2023 11:51:01 +0200 Subject: [PATCH 243/388] Improve error message --- modules/Units/R/units_transform.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/Units/R/units_transform.R b/modules/Units/R/units_transform.R index fd435fa8..694bd3a7 100644 --- a/modules/Units/R/units_transform.R +++ b/modules/Units/R/units_transform.R @@ -25,7 +25,7 @@ units_transform <- function(data, orig_units, user_units, var_name, freq, flux = stop("Transformation precipitation units not available.") } } else { - stop("Transformation unknown.") + stop(paste("Transformation unknown from", orig_units, "to", user_units)) } return(trans) } -- GitLab From 2f5378f8d87ced825c92b718bbea39e6567b4c5c Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Tue, 5 Sep 2023 14:45:44 +0200 Subject: [PATCH 244/388] Adapt Units module to multivar case --- .../Units/R/transform_units_precipitation.R | 66 ++++++++++++------- modules/Units/R/transform_units_pressure.R | 15 +++-- modules/Units/R/transform_units_temperature.R | 23 ++++--- modules/Units/R/units_transform.R | 54 ++++++++------- modules/Units/Units.R | 28 +++++--- .../atomic_recipes/recipe_test_multivar.yml | 1 + 6 files changed, 113 insertions(+), 74 deletions(-) diff --git a/modules/Units/R/transform_units_precipitation.R b/modules/Units/R/transform_units_precipitation.R index bc840d15..afe29d4f 100644 --- a/modules/Units/R/transform_units_precipitation.R +++ b/modules/Units/R/transform_units_precipitation.R @@ -1,16 +1,20 @@ transform_units_precipitation <- function(data, original_units, new_units, - var_name, freq, flux = FALSE, ncores = NULL) { + var_name, freq, flux = FALSE, ncores = NULL, + var_index = 1) { ## TODO consider higher frequencies (e.g. 6hourly) ## could create a constant hours <- 24 or hours <- 6 and use the same code if (original_units == "ms-1") { if (new_units == "mm") { - data[[1]]$data <- data[[1]]$data * 3600 * 24 * 1000 + data[[1]]$data[ , var_index, , , , , , , ] <- + data[[1]]$data[ , var_index, , , , , , , ] * 3600 * 24 * 1000 data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'mm' } else if (new_units == "m") { - data[[1]]$data <- data[[1]]$data * 3600 * 24 + data[[1]]$data[ , var_index, , , , , , , ] <- + data[[1]]$data[ , var_index, , , , , , , ] * 3600 * 24 data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'm' } else if (new_units == "kgm-2s-1") { - data[[1]]$data <- data[[1]]$data * 1000 + data[[1]]$data[ , var_index, , , , , , , ] <- + data[[1]]$data[ , var_index, , , , , , , ] * 1000 data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'kg m-2 s-1' } else { stop(paste("Unknown transformation from", original_units, "to", @@ -18,13 +22,16 @@ transform_units_precipitation <- function(data, original_units, new_units, } } else if (original_units == "mm") { if (new_units == "ms-1") { - data[[1]]$data <- data[[1]]$data / (3600 * 24 * 1000) + data[[1]]$data[ , var_index, , , , , , , ] <- + data[[1]]$data[ , var_index, , , , , , , ] / (3600 * 24 * 1000) data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'm s-1' } else if (new_units == "m") { - data[[1]]$data <- data[[1]]$data / 1000 + data[[1]]$data[ , var_index, , , , , , , ] <- + data[[1]]$data[ , var_index, , , , , , , ] / 1000 data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'm' } else if (new_units == "kgm-2s-1") { - data[[1]]$data <- data[[1]]$data / (3600 * 24 ) + data[[1]]$data[ , var_index, , , , , , , ] <- + data[[1]]$data[ , var_index, , , , , , , ] / (3600 * 24 ) data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'kg m-2 s-1' } else { stop(paste("Unknown transformation from", original_units, "to", @@ -32,13 +39,16 @@ transform_units_precipitation <- function(data, original_units, new_units, } } else if (original_units == "m") { if (new_units == "ms-1") { - data[[1]]$data <- data[[1]]$data / (3600 * 24) + data[[1]]$data[ , var_index, , , , , , , ] <- + data[[1]]$data[ , var_index, , , , , , , ] / (3600 * 24) data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'm s-1' } else if (new_units == "mm") { - data[[1]]$data <- data[[1]]$data * 1000 + data[[1]]$data[ , var_index, , , , , , , ] <- + data[[1]]$data[ , var_index, , , , , , , ] * 1000 data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'mm' } else if (new_units == "kgm-2s-1") { - data[[1]]$data <- data[[1]]$data * 1000 / (3600 * 24) + data[[1]]$data[ , var_index, , , , , , , ] <- + data[[1]]$data[ , var_index, , , , , , , ] * 1000 / (3600 * 24) data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'kg m-2 s-1' } else { stop(paste("Unknown transformation from", original_units, "to", @@ -46,13 +56,16 @@ transform_units_precipitation <- function(data, original_units, new_units, } } else if (original_units == "kgm-2s-1") { if (new_units == "ms-1") { - data[[1]]$data <- data[[1]]$data / 1000 + data[[1]]$data[ , var_index, , , , , , , ] <- + data[[1]]$data[ , var_index, , , , , , , ] / 1000 data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'm s-1' } else if (new_units == "mm") { - data[[1]]$data <- data[[1]]$data * 3600 * 24 + data[[1]]$data[ , var_index, , , , , , , ] <- + data[[1]]$data[ , var_index, , , , , , , ] * 3600 * 24 data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'mm' } else if (new_units == "m") { - data[[1]]$data <- data[[1]]$data * 3600 * 24 / 1000 + data[[1]]$data[ , var_index, , , , , , , ] <- + data[[1]]$data[ , var_index, , , , , , , ] * 3600 * 24 / 1000 data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'm' } else { stop(paste("Unknown transformation from", original_units, "to", @@ -65,21 +78,27 @@ transform_units_precipitation <- function(data, original_units, new_units, data[[1]]$attrs$Variable$metadata[[var_name]]$units <- paste0( data[[1]]$attrs$Variable$metadata[[var_name]]$units, "/day") } else { + ## TODO: Shouldn't use time dimension, need it for Compute() if (freq == "monthly_mean") { # could it not be mean? time_pos <- which(lapply(data[[1]]$attrs$Variable$metadata[[var_name]]$dim, function(x) {x$name}) == 'time') cal <- tolower(data[[1]]$attrs$Variable$metadata[[var_name]]$dim[[time_pos]]$calendar) - data[[1]]$data <- Apply(list(data[[1]]$data, data[[1]]$attrs$Dates), - target_dim = 'time', fun = function(x, y) { - date <- as.Date(y, "%Y-%m-%d") - num_days <- .days_in_month(date, cal = cal) - res <- x * num_days - }, ncores = ncores)$output1 + data_subset <- Subset(data[[1]]$data, along = "var", indices = var_index, drop = 'selected') + data[[1]]$data[ , var_index, , , , , , , ] <- + Apply(list(data_subset, data[[1]]$attrs$Dates), + target_dim = list(c('time'), c('time')), + extra_info = list(cal = cal, days_in_month = .days_in_month), + fun = function(x, y) { + date <- as.Date(y, "%Y-%m-%d") + num_days <- .days_in_month(date, cal = .cal) + res <- x * num_days + }, ncores = ncores)$output1 } } return(data) } -.days_in_month <- function (x, cal) { + +.days_in_month <- function(x, cal) { if (cal %in% c('gregorian', 'standard', 'proleptic_gregorian')) { N_DAYS_IN_MONTHS <- lubridate:::N_DAYS_IN_MONTHS if (leap_year(year(x))) { @@ -92,12 +111,9 @@ transform_units_precipitation <- function(data, original_units, new_units, N_DAYS_IN_MONTHS <- lubridate:::N_DAYS_IN_MONTHS } else { stop("Unknown calendar") - } - + } month_x <- month(x, label = TRUE, locale = "C") n_days <- N_DAYS_IN_MONTHS[month_x] n_days[month_x == "Feb" & leap_year(x)] <- 29L - n_days + return(n_days) } - - diff --git a/modules/Units/R/transform_units_pressure.R b/modules/Units/R/transform_units_pressure.R index 6ebd39ae..db3f88f1 100644 --- a/modules/Units/R/transform_units_pressure.R +++ b/modules/Units/R/transform_units_pressure.R @@ -1,23 +1,28 @@ -transform_units_pressure <- function(data, original_units, new_units, var_name) { +transform_units_pressure <- function(data, original_units, new_units, var_name, + var_index = 1) { if (original_units == 'pa') { if (new_units == 'hpa') { - data[[1]]$data <- data[[1]]$data /100 + data[[1]]$data[ , var_index, , , , , , , ] <- + data[[1]]$data[ , var_index, , , , , , , ] /100 data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'hPa' } else if (new_units == 'mb') { - data[[1]]$data <- data[[1]]$data /100 + data[[1]]$data[ , var_index, , , , , , , ] <- + data[[1]]$data[ , var_index, , , , , , , ] /100 data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'mb' } } else if (original_units == 'hpa') { if (new_units == 'pa') { - data[[1]]$data <- data[[1]]$data * 100 + data[[1]]$data[ , var_index, , , , , , , ] <- + data[[1]]$data[ , var_index, , , , , , , ] * 100 data[[1]]$attrs$Variable$metadata[[var_name]]$units <- "Pa" } else if (new_units == "mb") { data[[1]]$attrs$Variable$metadata[[var_name]]$units <- "mb" } } else if (original_units == "mb") { if (new_units == 'pa') { - data[[1]]$data <- data[[1]]$data * 100 + data[[1]]$data[ , var_index, , , , , , , ] <- + data[[1]]$data[ , var_index, , , , , , , ] * 100 data[[1]]$attrs$Variable$metadata[[var_name]]$units <- "Pa" } else if (new_units == "hPa") { data[[1]]$attrs$Variable$metadata[[var_name]]$units <- "hPa" diff --git a/modules/Units/R/transform_units_temperature.R b/modules/Units/R/transform_units_temperature.R index 09496b0f..bcd27524 100644 --- a/modules/Units/R/transform_units_temperature.R +++ b/modules/Units/R/transform_units_temperature.R @@ -1,13 +1,16 @@ transform_units_temperature <- function(data, original_units, new_units, - var_name) { - if (original_units == 'c' & new_units == 'k') { - data[[1]]$data <- data[[1]]$data + 273.15 - data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'K' - } - if (original_units == 'k' & new_units == 'c') { - data[[1]]$data <- data[[1]]$data - 273.15 - data[[1]]$attrs$Variable$metadata[[var_name]]$units <- "C" + var_name, var_index = 1, + var_dim = "var") { + if (original_units == 'c' & new_units == 'k') { + data[[1]]$data[ , var_index, , , , , , , ] <- + data[[1]]$data[ , var_index, , , , , , , ] + 273.15 + data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'K' + } + if (original_units == 'k' & new_units == 'c') { + data[[1]]$data[ , var_index, , , , , , , ] <- + data[[1]]$data[ , var_index, , , , , , , ] - 273.15 + data[[1]]$attrs$Variable$metadata[[var_name]]$units <- "C" - } - return(data) + } + return(data) } diff --git a/modules/Units/R/units_transform.R b/modules/Units/R/units_transform.R index fd435fa8..0779df68 100644 --- a/modules/Units/R/units_transform.R +++ b/modules/Units/R/units_transform.R @@ -2,31 +2,37 @@ # units as character units_transform <- function(data, orig_units, user_units, var_name, freq, flux = FALSE, ncores = NULL) { - var_name <- unlist(var_name) - if (orig_units %in% c("c", "k")) { - if (user_units %in% c("c", "k")) { - trans <- transform_units_temperature(data, orig_units, user_units, - var_name) - } else { - stop("Transformation temperature units not available.") + ## TODO: Change how argument 'flux' works + for (i in 1:length(var_name)) { + if (!(orig_units[i] == user_units[i])) { + if (orig_units[i] %in% c("c", "k")) { + if (user_units[i] %in% c("c", "k")) { + data <- transform_units_temperature(data, orig_units[i], user_units[i], + var_name[i], var_index = i) + } else { + stop("Transformation temperature units not available.") + } + } else if (orig_units[i] %in% c("ms-1", "kgm-2s-1", "mm", "m")) { + if (user_units[i] %in% c("ms-1", "kgm-2s-1", "mm", "m")) { + print("Converting precip units") + data <- transform_units_precipitation(data, orig_units[i], user_units[i], + var_name[i], freq, flux, + ncores = ncores, var_index = i) + } else { + stop("Transformation precipitation units not available.") + } + } else if (orig_units[i] %in% c("pa", "hpa", "mb")) { + if (user_units[i] %in% c("pa", "hpa", "mb")) { + data <- transform_units_pressure(data, orig_units[i], user_units[i], + var_name[i]) + } else { + stop("Transformation precipitation units not available.") + } + } else { + stop("Transformation unknown.") + } } - } else if (orig_units %in% c("ms-1", "kgm-2s-1", "mm", "m")) { - if (user_units %in% c("ms-1", "kgm-2s-1", "mm", "m")) { - trans <- transform_units_precipitation(data, orig_units, user_units, - var_name, freq, flux, ncores = ncores) - } else { - stop("Transformation precipitation units not available.") - } - } else if (orig_units %in% c("pa", "hpa", "mb")) { - if (user_units %in% c("pa", "hpa", "mb")) { - trans <- transform_units_pressure(data, orig_units, user_units, - var_name) - } else { - stop("Transformation precipitation units not available.") - } - } else { - stop("Transformation unknown.") } - return(trans) + return(data) } diff --git a/modules/Units/Units.R b/modules/Units/Units.R index 5e7ea88c..07b830d5 100644 --- a/modules/Units/Units.R +++ b/modules/Units/Units.R @@ -22,13 +22,21 @@ Units <- function(recipe, data) { } else { flux <- recipe$Analysis$Variable$flux } - orig_units <- lapply(1:length(data), function(x) { - data[[x]]$attrs$Variable$metadata[[var_names[[x]]]]$units}) + orig_units <- list() + for (element in names(var_names)) { + orig_units[[element]] <- c() + for (x in var_names[[element]]) { + orig_units[[element]] <- c(orig_units[[element]], + data[[element]]$attrs$Variable$metadata[[x]]$units) + } + } if (is.null(recipe$Analysis$Variables$units)) { user_units <- orig_units[[which(!is.null(orig_units))[1]]] } else { user_units <- recipe$Analysis$Variables$units } + ## TODO: How to handle spaces in multi-var case? + user_units <- strsplit(recipe$Analysis$Variables$units, ", | |,")[[1]] # remove spaces, "**", "*" and "per" from units user_units <- tolower(user_units) user_units <- gsub(" ", "", user_units) @@ -39,21 +47,21 @@ Units <- function(recipe, data) { x <- gsub(" ", "", x) x <- gsub("\\**", "", x) x <- gsub("\\*", "", x) - x <- unlist(ifelse(length(x)==0, user_units, x)) #when fcst is NULL + x <- unlist(ifelse(rep(length(x)==0, length(user_units)), user_units, x)) #when fcst is NULL }) - # if "/" appears substitute by -1 in at the end of next unit. How to know? - - if (all(orig_units == user_units)) { + ## TODO: + ## if "/" appears substitute by -1 in at the end of next unit. How to know? + identicalValue <- function(x,y) if (identical(x,y)) TRUE else FALSE + if (Reduce(identicalValue, c(orig_units, user_units))) { # no transformation needed res <- data } else { - obj2trans <- which(orig_units != user_units) res <- sapply(1:length(data), function(x) { - if (x %in% obj2trans) { + if (!all(orig_units[x] == user_units)) { result <- units_transform(data[x], orig_units = orig_units[[x]], user_units = user_units, - var_names[x], freq = freq, + var_names[[x]], freq = freq, flux = flux, ncores = ncores) } else { @@ -61,7 +69,7 @@ Units <- function(recipe, data) { } return(result) }, simplify = TRUE) # instead of lapply to get the named list directly - + info(recipe$Run$logger, "##### UNIT CONVERSION COMPLETE #####") } return(res) } diff --git a/recipes/atomic_recipes/recipe_test_multivar.yml b/recipes/atomic_recipes/recipe_test_multivar.yml index 8eb3e962..9c626a51 100644 --- a/recipes/atomic_recipes/recipe_test_multivar.yml +++ b/recipes/atomic_recipes/recipe_test_multivar.yml @@ -6,6 +6,7 @@ Analysis: Variables: name: tas prlr freq: monthly_mean + units: C mm Datasets: System: name: ECMWF-SEAS5 -- GitLab From cae7c26e7ab34e55ac4e68bf148c8dd495bde473 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Tue, 5 Sep 2023 14:49:47 +0200 Subject: [PATCH 245/388] Add a TODO --- modules/Units/R/transform_units_precipitation.R | 1 + modules/Units/R/transform_units_pressure.R | 1 + modules/Units/R/transform_units_temperature.R | 1 + 3 files changed, 3 insertions(+) diff --git a/modules/Units/R/transform_units_precipitation.R b/modules/Units/R/transform_units_precipitation.R index afe29d4f..43d00a6a 100644 --- a/modules/Units/R/transform_units_precipitation.R +++ b/modules/Units/R/transform_units_precipitation.R @@ -1,6 +1,7 @@ transform_units_precipitation <- function(data, original_units, new_units, var_name, freq, flux = FALSE, ncores = NULL, var_index = 1) { + ## TODO: Hard-coded subsetting ## TODO consider higher frequencies (e.g. 6hourly) ## could create a constant hours <- 24 or hours <- 6 and use the same code if (original_units == "ms-1") { diff --git a/modules/Units/R/transform_units_pressure.R b/modules/Units/R/transform_units_pressure.R index db3f88f1..9712e9fe 100644 --- a/modules/Units/R/transform_units_pressure.R +++ b/modules/Units/R/transform_units_pressure.R @@ -1,6 +1,7 @@ transform_units_pressure <- function(data, original_units, new_units, var_name, var_index = 1) { + ## TODO: Hard-coded subsetting if (original_units == 'pa') { if (new_units == 'hpa') { data[[1]]$data[ , var_index, , , , , , , ] <- diff --git a/modules/Units/R/transform_units_temperature.R b/modules/Units/R/transform_units_temperature.R index bcd27524..366f0d34 100644 --- a/modules/Units/R/transform_units_temperature.R +++ b/modules/Units/R/transform_units_temperature.R @@ -1,6 +1,7 @@ transform_units_temperature <- function(data, original_units, new_units, var_name, var_index = 1, var_dim = "var") { + ## TODO: Hard-coded subsetting if (original_units == 'c' & new_units == 'k') { data[[1]]$data[ , var_index, , , , , , , ] <- data[[1]]$data[ , var_index, , , , , , , ] + 273.15 -- GitLab From c7e6f01428c6141932276475d23c7fb8c9c4b0d3 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Tue, 5 Sep 2023 14:58:43 +0200 Subject: [PATCH 246/388] Display units in data summary --- tools/data_summary.R | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tools/data_summary.R b/tools/data_summary.R index 714c5a0b..11f365cd 100644 --- a/tools/data_summary.R +++ b/tools/data_summary.R @@ -34,8 +34,11 @@ data_summary <- function(data_cube, recipe) { info(recipe$Run$logger, paste0("Statistical summary of the data in ", object_name, ":")) for (var_index in 1:data_cube$dims[['var']]) { + variable_name <- data_cube$attrs$Variable$varName[var_index] + variable_units <- data_cube$attrs$Variable$metadata[[variable_name]]$units info(recipe$Run$logger, - paste("Variable:", data_cube$attrs$Variable$varName[var_index])) + paste0("Variable: ", variable_name, + " (units: ", variable_units, ")")) output_string <- capture.output(summary(Subset(data_cube$data, along = "var", indices = var_index))) -- GitLab From aba972a89fa9402b5edbd23f3ce4b4229597cdb8 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Tue, 5 Sep 2023 14:45:44 +0200 Subject: [PATCH 247/388] Adapt Units module to multivar case --- .../Units/R/transform_units_precipitation.R | 66 ++++++++++++------- modules/Units/R/transform_units_pressure.R | 15 +++-- modules/Units/R/transform_units_temperature.R | 23 ++++--- modules/Units/R/units_transform.R | 54 ++++++++------- modules/Units/Units.R | 28 +++++--- .../atomic_recipes/recipe_test_multivar.yml | 1 + 6 files changed, 113 insertions(+), 74 deletions(-) diff --git a/modules/Units/R/transform_units_precipitation.R b/modules/Units/R/transform_units_precipitation.R index bc840d15..afe29d4f 100644 --- a/modules/Units/R/transform_units_precipitation.R +++ b/modules/Units/R/transform_units_precipitation.R @@ -1,16 +1,20 @@ transform_units_precipitation <- function(data, original_units, new_units, - var_name, freq, flux = FALSE, ncores = NULL) { + var_name, freq, flux = FALSE, ncores = NULL, + var_index = 1) { ## TODO consider higher frequencies (e.g. 6hourly) ## could create a constant hours <- 24 or hours <- 6 and use the same code if (original_units == "ms-1") { if (new_units == "mm") { - data[[1]]$data <- data[[1]]$data * 3600 * 24 * 1000 + data[[1]]$data[ , var_index, , , , , , , ] <- + data[[1]]$data[ , var_index, , , , , , , ] * 3600 * 24 * 1000 data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'mm' } else if (new_units == "m") { - data[[1]]$data <- data[[1]]$data * 3600 * 24 + data[[1]]$data[ , var_index, , , , , , , ] <- + data[[1]]$data[ , var_index, , , , , , , ] * 3600 * 24 data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'm' } else if (new_units == "kgm-2s-1") { - data[[1]]$data <- data[[1]]$data * 1000 + data[[1]]$data[ , var_index, , , , , , , ] <- + data[[1]]$data[ , var_index, , , , , , , ] * 1000 data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'kg m-2 s-1' } else { stop(paste("Unknown transformation from", original_units, "to", @@ -18,13 +22,16 @@ transform_units_precipitation <- function(data, original_units, new_units, } } else if (original_units == "mm") { if (new_units == "ms-1") { - data[[1]]$data <- data[[1]]$data / (3600 * 24 * 1000) + data[[1]]$data[ , var_index, , , , , , , ] <- + data[[1]]$data[ , var_index, , , , , , , ] / (3600 * 24 * 1000) data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'm s-1' } else if (new_units == "m") { - data[[1]]$data <- data[[1]]$data / 1000 + data[[1]]$data[ , var_index, , , , , , , ] <- + data[[1]]$data[ , var_index, , , , , , , ] / 1000 data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'm' } else if (new_units == "kgm-2s-1") { - data[[1]]$data <- data[[1]]$data / (3600 * 24 ) + data[[1]]$data[ , var_index, , , , , , , ] <- + data[[1]]$data[ , var_index, , , , , , , ] / (3600 * 24 ) data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'kg m-2 s-1' } else { stop(paste("Unknown transformation from", original_units, "to", @@ -32,13 +39,16 @@ transform_units_precipitation <- function(data, original_units, new_units, } } else if (original_units == "m") { if (new_units == "ms-1") { - data[[1]]$data <- data[[1]]$data / (3600 * 24) + data[[1]]$data[ , var_index, , , , , , , ] <- + data[[1]]$data[ , var_index, , , , , , , ] / (3600 * 24) data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'm s-1' } else if (new_units == "mm") { - data[[1]]$data <- data[[1]]$data * 1000 + data[[1]]$data[ , var_index, , , , , , , ] <- + data[[1]]$data[ , var_index, , , , , , , ] * 1000 data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'mm' } else if (new_units == "kgm-2s-1") { - data[[1]]$data <- data[[1]]$data * 1000 / (3600 * 24) + data[[1]]$data[ , var_index, , , , , , , ] <- + data[[1]]$data[ , var_index, , , , , , , ] * 1000 / (3600 * 24) data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'kg m-2 s-1' } else { stop(paste("Unknown transformation from", original_units, "to", @@ -46,13 +56,16 @@ transform_units_precipitation <- function(data, original_units, new_units, } } else if (original_units == "kgm-2s-1") { if (new_units == "ms-1") { - data[[1]]$data <- data[[1]]$data / 1000 + data[[1]]$data[ , var_index, , , , , , , ] <- + data[[1]]$data[ , var_index, , , , , , , ] / 1000 data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'm s-1' } else if (new_units == "mm") { - data[[1]]$data <- data[[1]]$data * 3600 * 24 + data[[1]]$data[ , var_index, , , , , , , ] <- + data[[1]]$data[ , var_index, , , , , , , ] * 3600 * 24 data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'mm' } else if (new_units == "m") { - data[[1]]$data <- data[[1]]$data * 3600 * 24 / 1000 + data[[1]]$data[ , var_index, , , , , , , ] <- + data[[1]]$data[ , var_index, , , , , , , ] * 3600 * 24 / 1000 data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'm' } else { stop(paste("Unknown transformation from", original_units, "to", @@ -65,21 +78,27 @@ transform_units_precipitation <- function(data, original_units, new_units, data[[1]]$attrs$Variable$metadata[[var_name]]$units <- paste0( data[[1]]$attrs$Variable$metadata[[var_name]]$units, "/day") } else { + ## TODO: Shouldn't use time dimension, need it for Compute() if (freq == "monthly_mean") { # could it not be mean? time_pos <- which(lapply(data[[1]]$attrs$Variable$metadata[[var_name]]$dim, function(x) {x$name}) == 'time') cal <- tolower(data[[1]]$attrs$Variable$metadata[[var_name]]$dim[[time_pos]]$calendar) - data[[1]]$data <- Apply(list(data[[1]]$data, data[[1]]$attrs$Dates), - target_dim = 'time', fun = function(x, y) { - date <- as.Date(y, "%Y-%m-%d") - num_days <- .days_in_month(date, cal = cal) - res <- x * num_days - }, ncores = ncores)$output1 + data_subset <- Subset(data[[1]]$data, along = "var", indices = var_index, drop = 'selected') + data[[1]]$data[ , var_index, , , , , , , ] <- + Apply(list(data_subset, data[[1]]$attrs$Dates), + target_dim = list(c('time'), c('time')), + extra_info = list(cal = cal, days_in_month = .days_in_month), + fun = function(x, y) { + date <- as.Date(y, "%Y-%m-%d") + num_days <- .days_in_month(date, cal = .cal) + res <- x * num_days + }, ncores = ncores)$output1 } } return(data) } -.days_in_month <- function (x, cal) { + +.days_in_month <- function(x, cal) { if (cal %in% c('gregorian', 'standard', 'proleptic_gregorian')) { N_DAYS_IN_MONTHS <- lubridate:::N_DAYS_IN_MONTHS if (leap_year(year(x))) { @@ -92,12 +111,9 @@ transform_units_precipitation <- function(data, original_units, new_units, N_DAYS_IN_MONTHS <- lubridate:::N_DAYS_IN_MONTHS } else { stop("Unknown calendar") - } - + } month_x <- month(x, label = TRUE, locale = "C") n_days <- N_DAYS_IN_MONTHS[month_x] n_days[month_x == "Feb" & leap_year(x)] <- 29L - n_days + return(n_days) } - - diff --git a/modules/Units/R/transform_units_pressure.R b/modules/Units/R/transform_units_pressure.R index 6ebd39ae..db3f88f1 100644 --- a/modules/Units/R/transform_units_pressure.R +++ b/modules/Units/R/transform_units_pressure.R @@ -1,23 +1,28 @@ -transform_units_pressure <- function(data, original_units, new_units, var_name) { +transform_units_pressure <- function(data, original_units, new_units, var_name, + var_index = 1) { if (original_units == 'pa') { if (new_units == 'hpa') { - data[[1]]$data <- data[[1]]$data /100 + data[[1]]$data[ , var_index, , , , , , , ] <- + data[[1]]$data[ , var_index, , , , , , , ] /100 data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'hPa' } else if (new_units == 'mb') { - data[[1]]$data <- data[[1]]$data /100 + data[[1]]$data[ , var_index, , , , , , , ] <- + data[[1]]$data[ , var_index, , , , , , , ] /100 data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'mb' } } else if (original_units == 'hpa') { if (new_units == 'pa') { - data[[1]]$data <- data[[1]]$data * 100 + data[[1]]$data[ , var_index, , , , , , , ] <- + data[[1]]$data[ , var_index, , , , , , , ] * 100 data[[1]]$attrs$Variable$metadata[[var_name]]$units <- "Pa" } else if (new_units == "mb") { data[[1]]$attrs$Variable$metadata[[var_name]]$units <- "mb" } } else if (original_units == "mb") { if (new_units == 'pa') { - data[[1]]$data <- data[[1]]$data * 100 + data[[1]]$data[ , var_index, , , , , , , ] <- + data[[1]]$data[ , var_index, , , , , , , ] * 100 data[[1]]$attrs$Variable$metadata[[var_name]]$units <- "Pa" } else if (new_units == "hPa") { data[[1]]$attrs$Variable$metadata[[var_name]]$units <- "hPa" diff --git a/modules/Units/R/transform_units_temperature.R b/modules/Units/R/transform_units_temperature.R index 09496b0f..bcd27524 100644 --- a/modules/Units/R/transform_units_temperature.R +++ b/modules/Units/R/transform_units_temperature.R @@ -1,13 +1,16 @@ transform_units_temperature <- function(data, original_units, new_units, - var_name) { - if (original_units == 'c' & new_units == 'k') { - data[[1]]$data <- data[[1]]$data + 273.15 - data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'K' - } - if (original_units == 'k' & new_units == 'c') { - data[[1]]$data <- data[[1]]$data - 273.15 - data[[1]]$attrs$Variable$metadata[[var_name]]$units <- "C" + var_name, var_index = 1, + var_dim = "var") { + if (original_units == 'c' & new_units == 'k') { + data[[1]]$data[ , var_index, , , , , , , ] <- + data[[1]]$data[ , var_index, , , , , , , ] + 273.15 + data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'K' + } + if (original_units == 'k' & new_units == 'c') { + data[[1]]$data[ , var_index, , , , , , , ] <- + data[[1]]$data[ , var_index, , , , , , , ] - 273.15 + data[[1]]$attrs$Variable$metadata[[var_name]]$units <- "C" - } - return(data) + } + return(data) } diff --git a/modules/Units/R/units_transform.R b/modules/Units/R/units_transform.R index 694bd3a7..3da48638 100644 --- a/modules/Units/R/units_transform.R +++ b/modules/Units/R/units_transform.R @@ -2,31 +2,37 @@ # units as character units_transform <- function(data, orig_units, user_units, var_name, freq, flux = FALSE, ncores = NULL) { - var_name <- unlist(var_name) - if (orig_units %in% c("c", "k")) { - if (user_units %in% c("c", "k")) { - trans <- transform_units_temperature(data, orig_units, user_units, - var_name) - } else { - stop("Transformation temperature units not available.") + ## TODO: Change how argument 'flux' works + for (i in 1:length(var_name)) { + if (!(orig_units[i] == user_units[i])) { + if (orig_units[i] %in% c("c", "k")) { + if (user_units[i] %in% c("c", "k")) { + data <- transform_units_temperature(data, orig_units[i], user_units[i], + var_name[i], var_index = i) + } else { + stop("Transformation temperature units not available.") + } + } else if (orig_units[i] %in% c("ms-1", "kgm-2s-1", "mm", "m")) { + if (user_units[i] %in% c("ms-1", "kgm-2s-1", "mm", "m")) { + print("Converting precip units") + data <- transform_units_precipitation(data, orig_units[i], user_units[i], + var_name[i], freq, flux, + ncores = ncores, var_index = i) + } else { + stop("Transformation precipitation units not available.") + } + } else if (orig_units[i] %in% c("pa", "hpa", "mb")) { + if (user_units[i] %in% c("pa", "hpa", "mb")) { + data <- transform_units_pressure(data, orig_units[i], user_units[i], + var_name[i]) + } else { + stop("Transformation precipitation units not available.") + } + } else { + stop(paste("Transformation unknown from", orig_units[i], "to", user_units[i])) + } } - } else if (orig_units %in% c("ms-1", "kgm-2s-1", "mm", "m")) { - if (user_units %in% c("ms-1", "kgm-2s-1", "mm", "m")) { - trans <- transform_units_precipitation(data, orig_units, user_units, - var_name, freq, flux, ncores = ncores) - } else { - stop("Transformation precipitation units not available.") - } - } else if (orig_units %in% c("pa", "hpa", "mb")) { - if (user_units %in% c("pa", "hpa", "mb")) { - trans <- transform_units_pressure(data, orig_units, user_units, - var_name) - } else { - stop("Transformation precipitation units not available.") - } - } else { - stop(paste("Transformation unknown from", orig_units, "to", user_units)) } - return(trans) + return(data) } diff --git a/modules/Units/Units.R b/modules/Units/Units.R index 5e7ea88c..07b830d5 100644 --- a/modules/Units/Units.R +++ b/modules/Units/Units.R @@ -22,13 +22,21 @@ Units <- function(recipe, data) { } else { flux <- recipe$Analysis$Variable$flux } - orig_units <- lapply(1:length(data), function(x) { - data[[x]]$attrs$Variable$metadata[[var_names[[x]]]]$units}) + orig_units <- list() + for (element in names(var_names)) { + orig_units[[element]] <- c() + for (x in var_names[[element]]) { + orig_units[[element]] <- c(orig_units[[element]], + data[[element]]$attrs$Variable$metadata[[x]]$units) + } + } if (is.null(recipe$Analysis$Variables$units)) { user_units <- orig_units[[which(!is.null(orig_units))[1]]] } else { user_units <- recipe$Analysis$Variables$units } + ## TODO: How to handle spaces in multi-var case? + user_units <- strsplit(recipe$Analysis$Variables$units, ", | |,")[[1]] # remove spaces, "**", "*" and "per" from units user_units <- tolower(user_units) user_units <- gsub(" ", "", user_units) @@ -39,21 +47,21 @@ Units <- function(recipe, data) { x <- gsub(" ", "", x) x <- gsub("\\**", "", x) x <- gsub("\\*", "", x) - x <- unlist(ifelse(length(x)==0, user_units, x)) #when fcst is NULL + x <- unlist(ifelse(rep(length(x)==0, length(user_units)), user_units, x)) #when fcst is NULL }) - # if "/" appears substitute by -1 in at the end of next unit. How to know? - - if (all(orig_units == user_units)) { + ## TODO: + ## if "/" appears substitute by -1 in at the end of next unit. How to know? + identicalValue <- function(x,y) if (identical(x,y)) TRUE else FALSE + if (Reduce(identicalValue, c(orig_units, user_units))) { # no transformation needed res <- data } else { - obj2trans <- which(orig_units != user_units) res <- sapply(1:length(data), function(x) { - if (x %in% obj2trans) { + if (!all(orig_units[x] == user_units)) { result <- units_transform(data[x], orig_units = orig_units[[x]], user_units = user_units, - var_names[x], freq = freq, + var_names[[x]], freq = freq, flux = flux, ncores = ncores) } else { @@ -61,7 +69,7 @@ Units <- function(recipe, data) { } return(result) }, simplify = TRUE) # instead of lapply to get the named list directly - + info(recipe$Run$logger, "##### UNIT CONVERSION COMPLETE #####") } return(res) } diff --git a/recipes/atomic_recipes/recipe_test_multivar.yml b/recipes/atomic_recipes/recipe_test_multivar.yml index 8eb3e962..9c626a51 100644 --- a/recipes/atomic_recipes/recipe_test_multivar.yml +++ b/recipes/atomic_recipes/recipe_test_multivar.yml @@ -6,6 +6,7 @@ Analysis: Variables: name: tas prlr freq: monthly_mean + units: C mm Datasets: System: name: ECMWF-SEAS5 -- GitLab From abf6675dc963482990e6669ffb87de6aa9dee5f4 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Tue, 5 Sep 2023 14:49:47 +0200 Subject: [PATCH 248/388] Add a TODO --- modules/Units/R/transform_units_precipitation.R | 1 + modules/Units/R/transform_units_pressure.R | 1 + modules/Units/R/transform_units_temperature.R | 1 + 3 files changed, 3 insertions(+) diff --git a/modules/Units/R/transform_units_precipitation.R b/modules/Units/R/transform_units_precipitation.R index afe29d4f..43d00a6a 100644 --- a/modules/Units/R/transform_units_precipitation.R +++ b/modules/Units/R/transform_units_precipitation.R @@ -1,6 +1,7 @@ transform_units_precipitation <- function(data, original_units, new_units, var_name, freq, flux = FALSE, ncores = NULL, var_index = 1) { + ## TODO: Hard-coded subsetting ## TODO consider higher frequencies (e.g. 6hourly) ## could create a constant hours <- 24 or hours <- 6 and use the same code if (original_units == "ms-1") { diff --git a/modules/Units/R/transform_units_pressure.R b/modules/Units/R/transform_units_pressure.R index db3f88f1..9712e9fe 100644 --- a/modules/Units/R/transform_units_pressure.R +++ b/modules/Units/R/transform_units_pressure.R @@ -1,6 +1,7 @@ transform_units_pressure <- function(data, original_units, new_units, var_name, var_index = 1) { + ## TODO: Hard-coded subsetting if (original_units == 'pa') { if (new_units == 'hpa') { data[[1]]$data[ , var_index, , , , , , , ] <- diff --git a/modules/Units/R/transform_units_temperature.R b/modules/Units/R/transform_units_temperature.R index bcd27524..366f0d34 100644 --- a/modules/Units/R/transform_units_temperature.R +++ b/modules/Units/R/transform_units_temperature.R @@ -1,6 +1,7 @@ transform_units_temperature <- function(data, original_units, new_units, var_name, var_index = 1, var_dim = "var") { + ## TODO: Hard-coded subsetting if (original_units == 'c' & new_units == 'k') { data[[1]]$data[ , var_index, , , , , , , ] <- data[[1]]$data[ , var_index, , , , , , , ] + 273.15 -- GitLab From bddc54dfe86cfb67f56fc77e364dc79111e70754 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Tue, 5 Sep 2023 14:58:43 +0200 Subject: [PATCH 249/388] Display units in data summary --- tools/data_summary.R | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tools/data_summary.R b/tools/data_summary.R index 714c5a0b..11f365cd 100644 --- a/tools/data_summary.R +++ b/tools/data_summary.R @@ -34,8 +34,11 @@ data_summary <- function(data_cube, recipe) { info(recipe$Run$logger, paste0("Statistical summary of the data in ", object_name, ":")) for (var_index in 1:data_cube$dims[['var']]) { + variable_name <- data_cube$attrs$Variable$varName[var_index] + variable_units <- data_cube$attrs$Variable$metadata[[variable_name]]$units info(recipe$Run$logger, - paste("Variable:", data_cube$attrs$Variable$varName[var_index])) + paste0("Variable: ", variable_name, + " (units: ", variable_units, ")")) output_string <- capture.output(summary(Subset(data_cube$data, along = "var", indices = var_index))) -- GitLab From ad5e156cb066a6231c9a05fb04b7a40a22ef9de4 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Tue, 5 Sep 2023 16:26:47 +0200 Subject: [PATCH 250/388] Remove printed message --- modules/Units/R/units_transform.R | 1 - 1 file changed, 1 deletion(-) diff --git a/modules/Units/R/units_transform.R b/modules/Units/R/units_transform.R index 3da48638..83f5f700 100644 --- a/modules/Units/R/units_transform.R +++ b/modules/Units/R/units_transform.R @@ -14,7 +14,6 @@ units_transform <- function(data, orig_units, user_units, var_name, freq, flux = } } else if (orig_units[i] %in% c("ms-1", "kgm-2s-1", "mm", "m")) { if (user_units[i] %in% c("ms-1", "kgm-2s-1", "mm", "m")) { - print("Converting precip units") data <- transform_units_precipitation(data, orig_units[i], user_units[i], var_name[i], freq, flux, ncores = ncores, var_index = i) -- GitLab From 36b7be80fd5498b76d2683b88ef445d7dce559fb Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Tue, 5 Sep 2023 16:37:17 +0200 Subject: [PATCH 251/388] Change margin dimension in transform_units_precipitation() from 'time' to 'syear' --- modules/Units/R/transform_units_precipitation.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/Units/R/transform_units_precipitation.R b/modules/Units/R/transform_units_precipitation.R index 43d00a6a..a24ef851 100644 --- a/modules/Units/R/transform_units_precipitation.R +++ b/modules/Units/R/transform_units_precipitation.R @@ -87,7 +87,7 @@ transform_units_precipitation <- function(data, original_units, new_units, data_subset <- Subset(data[[1]]$data, along = "var", indices = var_index, drop = 'selected') data[[1]]$data[ , var_index, , , , , , , ] <- Apply(list(data_subset, data[[1]]$attrs$Dates), - target_dim = list(c('time'), c('time')), + target_dim = list(c('syear'), c('syear')), extra_info = list(cal = cal, days_in_month = .days_in_month), fun = function(x, y) { date <- as.Date(y, "%Y-%m-%d") -- GitLab From f916eae3998ca223de481d0558fa89ee6958607d Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Wed, 6 Sep 2023 09:36:07 +0200 Subject: [PATCH 252/388] Improve launcher comments --- launch_SUNSET.sh | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/launch_SUNSET.sh b/launch_SUNSET.sh index c44880e9..53e31e5e 100644 --- a/launch_SUNSET.sh +++ b/launch_SUNSET.sh @@ -1,5 +1,18 @@ #!/bin/bash +################################################################################ +## Launcher script for SUNSET +################################################################################ +## +## It reads a SUNSET recipe and splits it into single ('atomic') verifications. +## Then each atomic verification is launched as an independent job with SLURM. +## Each job can be further parallelized using the --cpus parameter and the +## 'ncores' field in the recipe. +## If requested in the recipe, the Scorecards for the results are also created +## and saved once the verifications are finished. +## +################################################################################ + # Usage statement if [[ ( $@ == "--help") || $@ == "-h" ]]; then echo "Usage: $0 --wallclock= --custom_directives=" @@ -91,7 +104,7 @@ Rscript split.R ${recipe} --tmpfile $tmpfile codedir=$( head -1 $tmpfile | tail -1 ) # Retrieve output directory outdir=$( head -2 $tmpfile | tail -1 ) -# Run scorecards job? +# Scorecards TRUE/FALSE scorecards=$( head -3 $tmpfile | tail -1) rm $tmpfile @@ -106,7 +119,6 @@ cd $codedir job_number=0 # Create empty array to store all the job IDs for the verification jobs verification_job_list=() - echo "Submitting verification jobs..." # Loop over atomic recipes for atomic_recipe in ${outdir}/logs/recipes/atomic_recipe_??.yml; do @@ -121,8 +133,10 @@ for atomic_recipe in ${outdir}/logs/recipes/atomic_recipe_??.yml; do echo "Submitted batch job $job_ID" done -# Submit scorecards job with dependency on verification jobs. -# The job will not run until all the verification jobs have finished successfully. +# Submit scorecards job with dependency on verification jobs, passed as a +# comma-separated string. The scorecards job will not run until all the +# verification jobs have finished successfully. +# If any of the jobs fail, it will be canceled. if [[ $scorecards == "TRUE" ]]; then echo "Submitting scorecards jobs..." outfile=${logdir}/run-scorecards.out -- GitLab From 319658313a97ea5556ff3f112e9b169a995fbf81 Mon Sep 17 00:00:00 2001 From: Nadia Milders Date: Wed, 6 Sep 2023 11:20:26 +0200 Subject: [PATCH 253/388] included bug fix in LoadMetrics function --- modules/Scorecards/tmp/LoadMetrics.R | 42 +++++++++++++++++----------- 1 file changed, 25 insertions(+), 17 deletions(-) diff --git a/modules/Scorecards/tmp/LoadMetrics.R b/modules/Scorecards/tmp/LoadMetrics.R index 7e68b65a..e5e15421 100644 --- a/modules/Scorecards/tmp/LoadMetrics.R +++ b/modules/Scorecards/tmp/LoadMetrics.R @@ -36,7 +36,7 @@ #' input.path = '/esarchive/scratch/nmilders/scorecards_data/input_data') #'} #'@import easyNCDF -#'@import abind +#'@import multiApply #'@export LoadMetrics <- function(system, reference, var, start.year, end.year, metrics, start.months, forecast.months, @@ -147,24 +147,24 @@ LoadMetrics <- function(system, reference, var, start.year, end.year, ############################################################ .Loadmetrics <- function(input.path, system, reference, - var, period, start.months, - forecast.months, metrics) { + var, period, start.months, + forecast.months, metrics) { ## Load data for each start date allfiles <- sapply(start.months, function(m) { - paste0(input.path, "/", system, "/", var, - "/scorecards_", system, "_", reference, "_", - var, "-skill_", period, "_s", m, # mod.pressure, - ".nc")}) + paste0(input.path, "/", system, "/", var, + "/scorecards_", system, "_", reference, "_", + var, "-skill_", period, "_s", m, # mod.pressure, + ".nc")}) allfiles_exist <- sapply(allfiles, file.exists) - + # Check dims files_exist_by_month <- seq(1:length(allfiles))[allfiles_exist] allfiledims <- sapply(allfiles[allfiles_exist], easyNCDF::NcReadDims) if (length(files_exist_by_month) == 0) { stop("No files are found.") } - + num_dims <- numeric(dim(allfiledims)[1]) for (i in 1:dim(allfiledims)[1]) { if (length(unique(allfiledims[i,])) > 1) { @@ -175,16 +175,24 @@ LoadMetrics <- function(system, reference, var, start.year, end.year, } # dims: [metric, longitude, latitude, time, smonth] # or [metric, region, time, smonth] - + # Loop for file - m <- array(files_exist_by_month, c(sdate = length(files_exist_by_month))) - array_met_by_sdate <- apply(m, 1, function(x) { - test <- easyNCDF::NcToArray(allfiles[x], vars_to_read = metrics, unlist = T, - drop_var_dim = T) - test}) + dim(allfiles) <- c(dat = 1, sdate = length(allfiles)) + + array_met_by_sdate <- Apply(data = allfiles, target_dims = 'dat', fun = function(x) { + if (file.exists(x)) { + res <- easyNCDF::NcToArray(x, vars_to_read = metrics, unlist = T, + drop_var_dim = T) + names(dim(res)) <- NULL + } else { + res <- array(dim = c(length(metrics), allfiledims[-1,1])) + names(dim(res)) <- NULL + } + res})$output1 + dim(array_met_by_sdate) <- c(metric = length(metrics), allfiledims[-1,1], - sdate = length(start.months)) - + sdate = length(allfiles)) + # Attributes # Read attributes from the first existing file if ("region" %in% rownames(allfiledims)) { -- GitLab From b039e4c1c4b70410b264a0d1630dc573d43d711f Mon Sep 17 00:00:00 2001 From: nperez Date: Wed, 6 Sep 2023 16:02:39 +0200 Subject: [PATCH 254/388] Fix multipanel size and typo --- modules/Visualization/R/plot_skill_metrics.R | 9 ++++----- modules/Visualization/Visualization.R | 2 +- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/modules/Visualization/R/plot_skill_metrics.R b/modules/Visualization/R/plot_skill_metrics.R index c0b0f4f8..5a3eafaf 100644 --- a/modules/Visualization/R/plot_skill_metrics.R +++ b/modules/Visualization/R/plot_skill_metrics.R @@ -35,7 +35,7 @@ plot_skill_metrics <- function(recipe, data_cube, skill_metrics, } else { projection <- "cylindrical_equidistant" } - + # Define color palette and number of breaks according to output format if (tolower(recipe$Analysis$Output_format) %in% c("scorecards", "cerise")) { diverging_palette <- "purpleorange" @@ -143,7 +143,6 @@ plot_skill_metrics <- function(recipe, data_cube, skill_metrics, # Get variable name and long name var_name <- data_cube$attrs$Variable$varName[[var]] var_long_name <- data_cube$attrs$Variable$metadata[[var_name]]$long_name - # Multi-panel or single-panel plots if (recipe$Analysis$Workflow$Visualization$multi_panel) { # Define titles @@ -171,8 +170,8 @@ plot_skill_metrics <- function(recipe, data_cube, skill_metrics, extra_margin = rep(1, 4), bar_label_scale = 1.5, axes_label_scale = 1.3, - width = 7,#default i - height = 5) + width = 11,#default i + height = 11) ) } else { # Define function and parameters depending on projection @@ -187,7 +186,7 @@ plot_skill_metrics <- function(recipe, data_cube, skill_metrics, col_inf = col_inf, col_sup = col_sup, units = units, font.main = 2, bar_label_digits = 3, bar_label_scale = 1.5, - axes_label_scale = 1, width = 7, height = 5) + axes_label_scale = 1, width = 8, height = 5) base_args[names(output_configuration)] <- output_configuration } else { fun <- PlotRobinson diff --git a/modules/Visualization/Visualization.R b/modules/Visualization/Visualization.R index 251e835a..1ddd6ec7 100644 --- a/modules/Visualization/Visualization.R +++ b/modules/Visualization/Visualization.R @@ -74,7 +74,7 @@ plot_data <- function(recipe, recipe$Analysis$Workflow$Visualization$mask_ens <- FALSE } if (is.null(recipe$Analysis$Workflow$Visualization$dots)) { - recipe$Analysis$Worklow$Visualization$dots <- FALSE + recipe$Analysis$Workflow$Visualization$dots <- FALSE } # Plot without mask or dots if ((recipe$Analysis$Workflow$Visualization$mask_ens -- GitLab From cfe336b7820f30e110df93785bfc36fb4964b1bc Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Thu, 7 Sep 2023 10:52:10 +0200 Subject: [PATCH 255/388] Add scorecards job to MARS config, remove minor bug in esarchive conf, modify recipe --- autosubmit/conf_esarchive/proj.conf | 2 +- autosubmit/conf_mars/jobs.yml | 7 +++++++ recipes/recipe_scorecards_vic.yml | 3 +-- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/autosubmit/conf_esarchive/proj.conf b/autosubmit/conf_esarchive/proj.conf index 1e8ffd03..7322a971 100644 --- a/autosubmit/conf_esarchive/proj.conf +++ b/autosubmit/conf_esarchive/proj.conf @@ -3,4 +3,4 @@ MODULES = "MODULES" OUTDIR = SCRIPT = -RECIPE = recipes/recipe_scorecards_vic.yml +RECIPE = diff --git a/autosubmit/conf_mars/jobs.yml b/autosubmit/conf_mars/jobs.yml index 2d8e32af..aba048bc 100644 --- a/autosubmit/conf_mars/jobs.yml +++ b/autosubmit/conf_mars/jobs.yml @@ -6,3 +6,10 @@ JOBS: NOTIFY_ON: PLATFORM: NORD3 PROCESSORS: + scorecards: + FILE: autosubmit/auto-scorecards.sh + WALLCLOCK: 00:10 + PLATFORM: NORD3 + PROCESSORS: 1 + DEPENDENCIES: verification + diff --git a/recipes/recipe_scorecards_vic.yml b/recipes/recipe_scorecards_vic.yml index 9abd5193..16a3cfae 100644 --- a/recipes/recipe_scorecards_vic.yml +++ b/recipes/recipe_scorecards_vic.yml @@ -36,7 +36,7 @@ Analysis: - '1201' fcst_year: hcst_start: '1993' # single option - hcst_end: '2016' # single option + hcst_end: '2003' # single option ftime_min: 1 # single option ftime_max: 6 # single option Region: # multiple lists, split? Add region name if length(Region) > 1 @@ -77,7 +77,6 @@ Analysis: col1_width: NULL col2_width: NULL calculate_diff: FALSE - #output_path: /esarchive/scratch/nmilders/scorecards_images/testing ncores: 14 remove_NAs: no # bool, don't split Output_format: Scorecards # string, don't split -- GitLab From 36a4de00242e2fbe095245c0e42c2ad0b47c4d5a Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Thu, 7 Sep 2023 13:18:48 +0200 Subject: [PATCH 256/388] Add memuse back --- tools/libs.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/libs.R b/tools/libs.R index 9e4de9ba..4a1e71e3 100644 --- a/tools/libs.R +++ b/tools/libs.R @@ -23,7 +23,7 @@ library(pryr) library(ncdf4) library(formattable) ## to plot horizontal color bars - used ?? library(kableExtra) -# To check mem usage. +library(memuse) # To check mem usage. # Functions ## To be removed when new package is done by library(CSOperational) -- GitLab From e0dd7a473afb3664a47f2c733b76ee8ccf15ed1f Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Thu, 7 Sep 2023 14:45:28 +0200 Subject: [PATCH 257/388] Add real slurm template for scorecards job --- conf/slurm_templates/run_scorecards.sh | 7 +++++-- launch_SUNSET.sh | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/conf/slurm_templates/run_scorecards.sh b/conf/slurm_templates/run_scorecards.sh index 1ff64d21..c658e35b 100644 --- a/conf/slurm_templates/run_scorecards.sh +++ b/conf/slurm_templates/run_scorecards.sh @@ -12,8 +12,11 @@ set -vx recipe=$1 +outdir=$2 source MODULES +# Get modified recipe from output directory +recipe=${outdir}/logs/recipes/${recipe} +# Execute scorecards +Rscript modules/Scorecards/execute_scorecards.R ${recipe} ${outdir} -## TODO: Add scorecards script -sleep 600 diff --git a/launch_SUNSET.sh b/launch_SUNSET.sh index 53e31e5e..5bd25b3a 100644 --- a/launch_SUNSET.sh +++ b/launch_SUNSET.sh @@ -141,6 +141,6 @@ if [[ $scorecards == "TRUE" ]]; then echo "Submitting scorecards jobs..." outfile=${logdir}/run-scorecards.out errfile=${logdir}/run-scorecards.err - sbatch --dependency=afterok:$(IFS=,; echo "${verification_job_list[*]}") --output=$outfile --error=$errfile --time=01:00:00 conf/slurm_templates/run_scorecards.sh ${recipe} + sbatch --dependency=afterok:$(IFS=,; echo "${verification_job_list[*]}") --output=$outfile --error=$errfile --time=01:00:00 conf/slurm_templates/run_scorecards.sh ${recipe} ${outdir} fi -- GitLab From 3efd87d2bfebbc6e374aff139364d1a1a7735589 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Fri, 8 Sep 2023 11:50:10 +0200 Subject: [PATCH 258/388] Put BSC logo code in function --- tools/add_logo.R | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 tools/add_logo.R diff --git a/tools/add_logo.R b/tools/add_logo.R new file mode 100644 index 00000000..42fb87c5 --- /dev/null +++ b/tools/add_logo.R @@ -0,0 +1,15 @@ +add_logo <- function(recipe, logo) { + # recipe: SUNSET recipe + # logo: URL to the logo + system <- list.files(paste0(recipe$Run$output_dir, "/plots/")) + variable <- recipe$Analysis$Variable$name + files <- lapply(variable, function(x) { + f <- list.files(paste0(recipe$Run$output_dir, "/plots/", + system, "/", x)) + full_path <- paste0(recipe$Run$output_dir, "/plots/", + system, "/", x,"/", f)})[[1]] + dim(files) <- c(file = length(files)) + Apply(list(files), target_dims = NULL, function(x) { + system(paste("composite -gravity southeast -geometry +10+10", + logo, x, x))}, ncores = recipe$Analysis$ncores) +} -- GitLab From 10047b33e3b67270623f3f080971dda21a134916 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Fri, 8 Sep 2023 15:29:46 +0200 Subject: [PATCH 259/388] Handle multivar units in recipe, fix bug in unit equality assessment logic --- modules/Units/Units.R | 14 +++++++++----- recipes/atomic_recipes/recipe_test_multivar.yml | 6 +++--- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/modules/Units/Units.R b/modules/Units/Units.R index 07b830d5..f2e8413f 100644 --- a/modules/Units/Units.R +++ b/modules/Units/Units.R @@ -35,8 +35,12 @@ Units <- function(recipe, data) { } else { user_units <- recipe$Analysis$Variables$units } + if (!is.null(names(user_units))) { + # Ensure that the units are in the correct order + user_units <- unlist(user_units[var_names[[1]]]) + } ## TODO: How to handle spaces in multi-var case? - user_units <- strsplit(recipe$Analysis$Variables$units, ", | |,")[[1]] + # user_units <- strsplit(recipe$Analysis$Variables$units, ", | |,")[[1]] # remove spaces, "**", "*" and "per" from units user_units <- tolower(user_units) user_units <- gsub(" ", "", user_units) @@ -51,9 +55,10 @@ Units <- function(recipe, data) { }) ## TODO: ## if "/" appears substitute by -1 in at the end of next unit. How to know? - identicalValue <- function(x,y) if (identical(x,y)) TRUE else FALSE - if (Reduce(identicalValue, c(orig_units, user_units))) { - # no transformation needed + # Check if all units are equal (if so, no conversion needed; else convert) + browser() + if (length(unique(c(unlist(orig_units), user_units))) == length(user_units)) { + info(recipe$Run$logger, "##### NO UNIT CONVERSION NEEDED #####") res <- data } else { res <- sapply(1:length(data), function(x) { @@ -73,4 +78,3 @@ Units <- function(recipe, data) { } return(res) } - diff --git a/recipes/atomic_recipes/recipe_test_multivar.yml b/recipes/atomic_recipes/recipe_test_multivar.yml index 9c626a51..a8c2e71b 100644 --- a/recipes/atomic_recipes/recipe_test_multivar.yml +++ b/recipes/atomic_recipes/recipe_test_multivar.yml @@ -4,9 +4,9 @@ Description: Analysis: Horizon: Seasonal Variables: - name: tas prlr + name: tas, prlr freq: monthly_mean - units: C mm + units: {tas: C, prlr: mm} Datasets: System: name: ECMWF-SEAS5 @@ -19,7 +19,7 @@ Analysis: hcst_start: '1999' hcst_end: '2010' ftime_min: 1 - ftime_max: 2 + ftime_max: 1 Region: latmin: -10 latmax: 10 -- GitLab From d357047e82392771e7ea810234efb9f433ed95c7 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Fri, 8 Sep 2023 15:43:55 +0200 Subject: [PATCH 260/388] Add warning in the case that filesystem: 'esarchive' and the units between s2dv_cube objects are not consistent --- modules/Units/Units.R | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/modules/Units/Units.R b/modules/Units/Units.R index f2e8413f..137ad56b 100644 --- a/modules/Units/Units.R +++ b/modules/Units/Units.R @@ -56,11 +56,16 @@ Units <- function(recipe, data) { ## TODO: ## if "/" appears substitute by -1 in at the end of next unit. How to know? # Check if all units are equal (if so, no conversion needed; else convert) - browser() if (length(unique(c(unlist(orig_units), user_units))) == length(user_units)) { info(recipe$Run$logger, "##### NO UNIT CONVERSION NEEDED #####") res <- data } else { + if (recipe$Run$filesystem == 'esarchive' && + !(length(unique(orig_units)) == 1)) { + warn(recipe$Run$logger, + paste("The units in", names(orig_units), "are not all equal.", + "If this is not expected, please contact the ES data team.")) + } res <- sapply(1:length(data), function(x) { if (!all(orig_units[x] == user_units)) { result <- units_transform(data[x], -- GitLab From 537866bab24a0914129ba56c26d5314a9085c416 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Fri, 8 Sep 2023 15:58:36 +0200 Subject: [PATCH 261/388] Fix indentation --- modules/Units/R/units_transform.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/Units/R/units_transform.R b/modules/Units/R/units_transform.R index 83f5f700..11e05f31 100644 --- a/modules/Units/R/units_transform.R +++ b/modules/Units/R/units_transform.R @@ -28,7 +28,7 @@ units_transform <- function(data, orig_units, user_units, var_name, freq, flux = stop("Transformation precipitation units not available.") } } else { - stop(paste("Transformation unknown from", orig_units[i], "to", user_units[i])) + stop(paste("Transformation unknown from", orig_units[i], "to", user_units[i])) } } } -- GitLab From c7c70ec0021d165436ca6390bc2b5fd6c39bb546 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Fri, 8 Sep 2023 16:32:53 +0200 Subject: [PATCH 262/388] Add Units() --- example_scripts/test_seasonal.R | 3 +++ 1 file changed, 3 insertions(+) diff --git a/example_scripts/test_seasonal.R b/example_scripts/test_seasonal.R index 0c1c1d2b..9734aeaf 100644 --- a/example_scripts/test_seasonal.R +++ b/example_scripts/test_seasonal.R @@ -6,6 +6,7 @@ # 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") @@ -18,6 +19,8 @@ recipe <- prepare_outputs(recipe_file) # Load datasets data <- load_datasets(recipe) +# Change units +data <- Units(recipe, data) # Calibrate datasets data <- calibrate_datasets(recipe, data) # Compute anomalies -- GitLab From 1b6fd9e2f693b400a630c9c65feb57b426f2108b Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Tue, 12 Sep 2023 12:04:35 +0200 Subject: [PATCH 263/388] Improve logic when reading Units from recipe --- modules/Units/Units.R | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/modules/Units/Units.R b/modules/Units/Units.R index 137ad56b..07e17543 100644 --- a/modules/Units/Units.R +++ b/modules/Units/Units.R @@ -34,13 +34,14 @@ Units <- function(recipe, data) { user_units <- orig_units[[which(!is.null(orig_units))[1]]] } else { user_units <- recipe$Analysis$Variables$units + if (!is.null(names(user_units))) { + # Change to vector and ensure that the units are in the correct order + user_units <- unlist(user_units[var_names[[1]]]) + } else if (length(var_names[[1]] > 1)) { + ## TODO: How to handle spaces in multi-var case? + user_units <- strsplit(recipe$Analysis$Variables$units, ", |,")[[1]] + } } - if (!is.null(names(user_units))) { - # Ensure that the units are in the correct order - user_units <- unlist(user_units[var_names[[1]]]) - } - ## TODO: How to handle spaces in multi-var case? - # user_units <- strsplit(recipe$Analysis$Variables$units, ", | |,")[[1]] # remove spaces, "**", "*" and "per" from units user_units <- tolower(user_units) user_units <- gsub(" ", "", user_units) -- GitLab From e4cbd88a4b8ef1632e88b3cdeba14b043ea4963b Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Tue, 12 Sep 2023 12:37:22 +0200 Subject: [PATCH 264/388] Move testing recipes and scripts --- example_scripts/exec_ecvs_seasonal_oper.R | 35 +++++++++ example_scripts/exec_units.R | 42 +++++++++++ .../examples/recipe_ecvs_seasonal_oper.yml | 73 +++++++++++++++++++ .../examples/recipe_prlr_seasonal_oper.yml | 62 ++++++++++++++++ .../examples/recipe_prlr_seasonal_units.yml | 63 ++++++++++++++++ recipes/examples/recipe_tas_seasonal_oper.yml | 62 ++++++++++++++++ .../examples/recipe_tas_seasonal_units.yml | 63 ++++++++++++++++ 7 files changed, 400 insertions(+) create mode 100644 example_scripts/exec_ecvs_seasonal_oper.R create mode 100644 example_scripts/exec_units.R create mode 100644 recipes/examples/recipe_ecvs_seasonal_oper.yml create mode 100644 recipes/examples/recipe_prlr_seasonal_oper.yml create mode 100644 recipes/examples/recipe_prlr_seasonal_units.yml create mode 100644 recipes/examples/recipe_tas_seasonal_oper.yml create mode 100644 recipes/examples/recipe_tas_seasonal_units.yml diff --git a/example_scripts/exec_ecvs_seasonal_oper.R b/example_scripts/exec_ecvs_seasonal_oper.R new file mode 100644 index 00000000..18f2e493 --- /dev/null +++ b/example_scripts/exec_ecvs_seasonal_oper.R @@ -0,0 +1,35 @@ +rm(list=ls()) +gc() +setwd("/esarchive/scratch/nperez/git/auto-s2s") + +source("modules/Loading/Loading.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("tools/prepare_outputs.R") + +# Read recipe +args = commandArgs(trailingOnly = TRUE) +recipe_file <- args[1] +recipe <- read_atomic_recipe(recipe_file) +## to test a single recipe: +#recipe_file <- "recipe_ecvs_seasonal_oper.yml" +#recipe <- prepare_outputs(recipe_file) + +# Load datasets +data <- load_datasets(recipe) +# Calibrate datasets +data <- calibrate_datasets(recipe, data) +# Compute skill metrics +skill_metrics <- compute_skill_metrics(recipe, data) +# Compute percentiles and probability bins +probabilities <- compute_probabilities(recipe, data) +# Export all data to netCDF +## TODO: Fix plotting +# save_data(recipe, data, skill_metrics, probabilities) +# Plot data +plot_data(recipe, data, skill_metrics, probabilities, significance = T) + + diff --git a/example_scripts/exec_units.R b/example_scripts/exec_units.R new file mode 100644 index 00000000..bcd443c5 --- /dev/null +++ b/example_scripts/exec_units.R @@ -0,0 +1,42 @@ +rm(list=ls()) +gc() +setwd("/esarchive/scratch/nperez/git/auto-s2s") + +source("modules/Loading/Loading.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("tools/prepare_outputs.R") + +# Read recipe +#args = commandArgs(trailingOnly = TRUE) +#recipe_file <- args[1] +#recipe <- read_atomic_recipe(recipe_file) +## to test a single recipe: + # recipe_file <- "recipes/examples/recipe_tas_seasonal_units.yml" + # recipe_file <- "recipes/examples/recipe_prlr_seasonal_units.yml" + +recipe <- prepare_outputs(recipe_file) + +# Load datasets +data <- load_datasets(recipe) +# Units transformation +source("modules/Units/Units.R") +test <- Units(recipe, data) +# Calibrate datasets +data <- calibrate_datasets(recipe, test) +# Compute skill metrics +skill_metrics <- compute_skill_metrics(recipe, data) +# Compute percentiles and probability bins +probabilities <- compute_probabilities(recipe, data) +# Export all data to netCDF +## TODO: Fix plotting +# save_data(recipe, data, skill_metrics, probabilities) +# Plot data +plot_data(recipe, data, skill_metrics, probabilities, significance = T) + + + + diff --git a/recipes/examples/recipe_ecvs_seasonal_oper.yml b/recipes/examples/recipe_ecvs_seasonal_oper.yml new file mode 100644 index 00000000..d47fd159 --- /dev/null +++ b/recipes/examples/recipe_ecvs_seasonal_oper.yml @@ -0,0 +1,73 @@ +Description: + Author: nperez + Info: ECVs Oper ESS ECMWF SEAS5 Seasonal Forecast recipe (monthly mean, tas) + +Analysis: + Horizon: seasonal # Mandatory, str: either subseasonal, seasonal, or decadal + Variables: + - {name: tas, freq: monthly_mean} + - {name: prlr, freq: monthly_mean} + Datasets: + System: + - {name: ECMWF-SEAS5.1} # system21_m1 system35c3s + Multimodel: no # Mandatory, bool: Either yes/true or no/false + Reference: + - {name: ERA5} # Mandatory, str: Reference codename. See docu. + Time: + sdate: '0701' ## MMDD + fcst_year: '2023' # Optional, int: Forecast year 'YYYY' + hcst_start: '1993' # Mandatory, int: Hindcast start year 'YYYY' + hcst_end: '2016' # Mandatory, int: Hindcast end year 'YYYY' + ftime_min: 1 # Mandatory, int: First leadtime time step in months + ftime_max: 6 # Mandatory, int: Last leadtime time step in months + Region: + - {name: "UE", latmin: 20, latmax: 80, lonmin: -20, lonmax: 40} + Regrid: + method: bilinear # Mandatory, str: Interpolation method. See docu. + type: "to_system" + #type: /esarchive/scratch/nmilders/gitlab/git_clones/auto-s2s/conf/grid_description.txt #'r360x180' # Mandatory, str: to_system, to_reference, or CDO-accepted grid. + Workflow: + Anomalies: + compute: no + cross_validation: no + save: none + Calibration: + method: evmos # Mandatory, str: Calibration method. See docu. + cross_validation: yes + save: none + Skill: + metric: mean_bias EnsCorr rpss crpss bss10 bss90 + save: 'all' + cross_validation: yes + Probabilities: + percentiles: [[1/3, 2/3], [1/10, 9/10]] # frac: Quantile thresholds. + save: 'all' + Indicators: + index: no + Visualization: + plots: skill_metrics forecast_ensemble_mean most_likely_terciles + multi_panel: no + projection: lambert_europe + ncores: 4 # Optional, int: number of cores, defaults to 1 + remove_NAs: # Optional, bool: Whether NAs are removed, defaults to FALSE + Output_format: scorecards + logo: yes +Run: + Loglevel: INFO + Terminal: yes + filesystem: esarchive + output_dir: /esarchive/scratch/nperez/cs_oper/seasonal/ # replace with the directory where you want to save the outputs + code_dir: /esarchive/scratch/nperez/git/auto-s2s/ # replace with the directory where your code is + autosubmit: yes + # fill only if using autosubmit + auto_conf: + script: /esarchive/scratch/nperez/git/auto-s2s/exec_ecvs_seasonal_oper.R # replace with the path to your script + expid: a68v # replace with your EXPID + hpc_user: bsc32339 # replace with your hpc username + wallclock: 02:00 # hh:mm + processors_per_job: 4 + platform: nord3v2 + email_notifications: yes # enable/disable email notifications. Change it if you want to. + email_address: nuria.perez@bsc.es # replace with your email address + notify_completed: yes # notify me by email when a job finishes + notify_failed: yes # notify me by email when a job fails diff --git a/recipes/examples/recipe_prlr_seasonal_oper.yml b/recipes/examples/recipe_prlr_seasonal_oper.yml new file mode 100644 index 00000000..fb6d1a1c --- /dev/null +++ b/recipes/examples/recipe_prlr_seasonal_oper.yml @@ -0,0 +1,62 @@ +Description: + Author: nperez + Info: ECVs Oper ESS ECMWF SEAS5 Seasonal Forecast recipe (monthly mean, tas) + +Analysis: + Horizon: seasonal # Mandatory, str: either subseasonal, seasonal, or decadal + Variables: + name: prlr + freq: monthly_mean + Datasets: + System: + name: ECMWF-SEAS5.1 # Mandatory, str: system5c3s system21_m1 system35c3s + Multimodel: no # Mandatory, bool: Either yes/true or no/false + Reference: + name: ERA5 # Mandatory, str: Reference codename. See docu. + Time: + sdate: '0701' ## MMDD + fcst_year: '2023' # Optional, int: Forecast year 'YYYY' + hcst_start: '1993' # Mandatory, int: Hindcast start year 'YYYY' + hcst_end: '2016' # Mandatory, int: Hindcast end year 'YYYY' + ftime_min: 1 # Mandatory, int: First leadtime time step in months + ftime_max: 6 # Mandatory, int: Last leadtime time step in months + Region: + latmin: 20 # Mandatory, int: minimum latitude + latmax: 80 # Mandatory, int: maximum latitude + lonmin: -20 # Mandatory, int: minimum longitude + lonmax: 40 # Mandatory, int: maximum longitude + Regrid: + method: bilinear # Mandatory, str: Interpolation method. See docu. + type: "to_system" + #type: /esarchive/scratch/nmilders/gitlab/git_clones/auto-s2s/conf/grid_description.txt #'r360x180' # Mandatory, str: to_system, to_reference, or CDO-accepted grid. + Workflow: + Anomalies: + compute: no + cross_validation: no + save: none + Calibration: + method: evmos # Mandatory, str: Calibration method. See docu. + cross_validation: yes + save: none + Skill: + metric: mean_bias EnsCorr rpss crpss bss10 bss90 + save: 'all' + cross_validation: yes + Probabilities: + percentiles: [[1/3, 2/3], [1/10, 9/10]] # frac: Quantile thresholds. + save: 'all' + Indicators: + index: no + Visualization: + plots: skill_metrics forecast_ensemble_mean most_likely_terciles + multi_panel: no + dots: both + ncores: 4 # Optional, int: number of cores, defaults to 1 + remove_NAs: # Optional, bool: Whether NAs are removed, defaults to FALSE + Output_format: scorecards + logo: yes +Run: + Loglevel: INFO + Terminal: TRUE + output_dir: /esarchive/scratch/nperez/cs_oper/ + code_dir: /esarchive/scratch/nperez/git/s2s-suite/ diff --git a/recipes/examples/recipe_prlr_seasonal_units.yml b/recipes/examples/recipe_prlr_seasonal_units.yml new file mode 100644 index 00000000..e03428ac --- /dev/null +++ b/recipes/examples/recipe_prlr_seasonal_units.yml @@ -0,0 +1,63 @@ +Description: + Author: nperez + Info: ECVs Oper ESS ECMWF SEAS5 Seasonal Forecast recipe (monthly mean, tas) + +Analysis: + Horizon: seasonal # Mandatory, str: either subseasonal, seasonal, or decadal + Variables: + name: prlr + freq: monthly_mean + units: mm + Datasets: + System: + name: ECMWF-SEAS5.1 # Mandatory, str: system5c3s system21_m1 system35c3s + Multimodel: no # Mandatory, bool: Either yes/true or no/false + Reference: + name: ERA5 # Mandatory, str: Reference codename. See docu. + Time: + sdate: '0601' ## MMDD + fcst_year: # Optional, int: Forecast year 'YYYY' + hcst_start: '2014' # Mandatory, int: Hindcast start year 'YYYY' + hcst_end: '2016' # Mandatory, int: Hindcast end year 'YYYY' + ftime_min: 1 # Mandatory, int: First leadtime time step in months + ftime_max: 6 # Mandatory, int: Last leadtime time step in months + Region: + latmin: 30 # Mandatory, int: minimum latitude + latmax: 50 # Mandatory, int: maximum latitude + lonmin: -10 # Mandatory, int: minimum longitude + lonmax: 10 # Mandatory, int: maximum longitude + Regrid: + method: bilinear # Mandatory, str: Interpolation method. See docu. + type: "to_system" + #type: /esarchive/scratch/nmilders/gitlab/git_clones/auto-s2s/conf/grid_description.txt #'r360x180' # Mandatory, str: to_system, to_reference, or CDO-accepted grid. + Workflow: + Anomalies: + compute: no + cross_validation: no + save: none + Calibration: + method: evmos # Mandatory, str: Calibration method. See docu. + cross_validation: yes + save: none + Skill: + metric: mean_bias EnsCorr rpss crpss bss10 bss90 + save: 'all' + cross_validation: yes + Probabilities: + percentiles: [[1/3, 2/3], [1/10, 9/10]] # frac: Quantile thresholds. + save: 'all' + Indicators: + index: no + Visualization: + plots: skill_metrics forecast_ensemble_mean most_likely_terciles + multi_panel: no + mask_terciles: both + ncores: 4 # Optional, int: number of cores, defaults to 1 + remove_NAs: # Optional, bool: Whether NAs are removed, defaults to FALSE + Output_format: scorecards + logo: yes +Run: + Loglevel: INFO + Terminal: TRUE + output_dir: /esarchive/scratch/nperez/cs_oper/ + code_dir: /esarchive/scratch/nperez/git/s2s-suite/ diff --git a/recipes/examples/recipe_tas_seasonal_oper.yml b/recipes/examples/recipe_tas_seasonal_oper.yml new file mode 100644 index 00000000..75918265 --- /dev/null +++ b/recipes/examples/recipe_tas_seasonal_oper.yml @@ -0,0 +1,62 @@ +Description: + Author: nperez + Info: ECVs Oper ESS ECMWF SEAS5 Seasonal Forecast recipe (monthly mean, tas) + +Analysis: + Horizon: seasonal # Mandatory, str: either subseasonal, seasonal, or decadal + Variables: + name: tas + freq: monthly_mean + Datasets: + System: + name: ECMWF-SEAS5.1 # Mandatory, str: system5c3s system21_m1 system35c3s + Multimodel: no # Mandatory, bool: Either yes/true or no/false + Reference: + name: ERA5 # Mandatory, str: Reference codename. See docu. + Time: + sdate: '0601' ## MMDD + fcst_year: '2023' # Optional, int: Forecast year 'YYYY' + hcst_start: '1993' # Mandatory, int: Hindcast start year 'YYYY' + hcst_end: '2016' # Mandatory, int: Hindcast end year 'YYYY' + ftime_min: 1 # Mandatory, int: First leadtime time step in months + ftime_max: 6 # Mandatory, int: Last leadtime time step in months + Region: + latmin: 20 # Mandatory, int: minimum latitude + latmax: 80 # Mandatory, int: maximum latitude + lonmin: -20 # Mandatory, int: minimum longitude + lonmax: 40 # Mandatory, int: maximum longitude + Regrid: + method: bilinear # Mandatory, str: Interpolation method. See docu. + type: "to_system" + #type: /esarchive/scratch/nmilders/gitlab/git_clones/auto-s2s/conf/grid_description.txt #'r360x180' # Mandatory, str: to_system, to_reference, or CDO-accepted grid. + Workflow: + Anomalies: + compute: no + cross_validation: no + save: none + Calibration: + method: evmos # Mandatory, str: Calibration method. See docu. + cross_validation: yes + save: none + Skill: + metric: mean_bias EnsCorr rpss crpss bss10 bss90 + save: 'all' + cross_validation: yes + Probabilities: + percentiles: [[1/3, 2/3], [1/10, 9/10]] # frac: Quantile thresholds. + save: 'all' + Indicators: + index: no + Visualization: + plots: skill_metrics forecast_ensemble_mean most_likely_terciles + multi_panel: no + mask_terciles: both + ncores: 4 # Optional, int: number of cores, defaults to 1 + remove_NAs: # Optional, bool: Whether NAs are removed, defaults to FALSE + Output_format: scorecards + logo: yes +Run: + Loglevel: INFO + Terminal: TRUE + output_dir: /esarchive/scratch/nperez/cs_oper/ + code_dir: /esarchive/scratch/nperez/git/s2s-suite/ diff --git a/recipes/examples/recipe_tas_seasonal_units.yml b/recipes/examples/recipe_tas_seasonal_units.yml new file mode 100644 index 00000000..d2b25321 --- /dev/null +++ b/recipes/examples/recipe_tas_seasonal_units.yml @@ -0,0 +1,63 @@ +Description: + Author: nperez + Info: ECVs Oper ESS ECMWF SEAS5 Seasonal Forecast recipe (monthly mean, tas) + +Analysis: + Horizon: seasonal # Mandatory, str: either subseasonal, seasonal, or decadal + Variables: + name: tas + freq: monthly_mean + units: K + Datasets: + System: + name: ECMWF-SEAS5.1 # Mandatory, str: system5c3s system21_m1 system35c3s + Multimodel: no # Mandatory, bool: Either yes/true or no/false + Reference: + name: ERA5 # Mandatory, str: Reference codename. See docu. + Time: + sdate: '0601' ## MMDD + fcst_year: '2023' # Optional, int: Forecast year 'YYYY' + hcst_start: '2009' # Mandatory, int: Hindcast start year 'YYYY' + hcst_end: '2016' # Mandatory, int: Hindcast end year 'YYYY' + ftime_min: 1 # Mandatory, int: First leadtime time step in months + ftime_max: 6 # Mandatory, int: Last leadtime time step in months + Region: + latmin: 30 # Mandatory, int: minimum latitude + latmax: 50 # Mandatory, int: maximum latitude + lonmin: -10 # Mandatory, int: minimum longitude + lonmax: 10 # Mandatory, int: maximum longitude + Regrid: + method: bilinear # Mandatory, str: Interpolation method. See docu. + type: "to_system" + #type: /esarchive/scratch/nmilders/gitlab/git_clones/auto-s2s/conf/grid_description.txt #'r360x180' # Mandatory, str: to_system, to_reference, or CDO-accepted grid. + Workflow: + Anomalies: + compute: no + cross_validation: no + save: none + Calibration: + method: evmos # Mandatory, str: Calibration method. See docu. + cross_validation: yes + save: none + Skill: + metric: mean_bias EnsCorr rpss crpss bss10 bss90 + save: 'all' + cross_validation: yes + Probabilities: + percentiles: [[1/3, 2/3], [1/10, 9/10]] # frac: Quantile thresholds. + save: 'all' + Indicators: + index: no + Visualization: + plots: skill_metrics forecast_ensemble_mean most_likely_terciles + multi_panel: no + mask_terciles: both + ncores: 4 # Optional, int: number of cores, defaults to 1 + remove_NAs: # Optional, bool: Whether NAs are removed, defaults to FALSE + Output_format: scorecards + logo: yes +Run: + Loglevel: INFO + Terminal: TRUE + output_dir: /esarchive/scratch/nperez/cs_oper/ + code_dir: /esarchive/scratch/nperez/git/s2s-suite/ -- GitLab From bd21e30375c661705e213079eb8c42a442364a61 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Tue, 12 Sep 2023 13:23:49 +0200 Subject: [PATCH 265/388] Delete extra scripts and recipes, change line to get logo from repo --- example_scripts/exec_ecvs_seasonal_oper.R | 17 +++++- example_scripts/exec_units.R | 4 -- exec_ecvs_seasonal_oper.R | 52 ------------------ exec_units.R | 42 --------------- recipe_prlr_seasonal_oper.yml | 63 ---------------------- recipe_prlr_seasonal_units.yml | 63 ---------------------- recipe_tas_seasonal_oper.yml | 66 ----------------------- recipe_tas_seasonal_units.yml | 63 ---------------------- 8 files changed, 16 insertions(+), 354 deletions(-) delete mode 100644 exec_ecvs_seasonal_oper.R delete mode 100644 exec_units.R delete mode 100644 recipe_prlr_seasonal_oper.yml delete mode 100644 recipe_prlr_seasonal_units.yml delete mode 100644 recipe_tas_seasonal_oper.yml delete mode 100644 recipe_tas_seasonal_units.yml diff --git a/example_scripts/exec_ecvs_seasonal_oper.R b/example_scripts/exec_ecvs_seasonal_oper.R index 18f2e493..f1fa717f 100644 --- a/example_scripts/exec_ecvs_seasonal_oper.R +++ b/example_scripts/exec_ecvs_seasonal_oper.R @@ -9,6 +9,7 @@ source("modules/Skill/Skill.R") source("modules/Saving/Saving.R") source("modules/Visualization/Visualization.R") source("tools/prepare_outputs.R") +source("modules/Units/Units.R") # Read recipe args = commandArgs(trailingOnly = TRUE) @@ -20,6 +21,8 @@ recipe <- read_atomic_recipe(recipe_file) # Load datasets data <- load_datasets(recipe) +# Change units +data <- Units(recipe, data) # Calibrate datasets data <- calibrate_datasets(recipe, data) # Compute skill metrics @@ -27,9 +30,21 @@ skill_metrics <- compute_skill_metrics(recipe, data) # Compute percentiles and probability bins probabilities <- compute_probabilities(recipe, data) # Export all data to netCDF -## TODO: Fix plotting # save_data(recipe, data, skill_metrics, probabilities) # Plot data plot_data(recipe, data, skill_metrics, probabilities, significance = T) +## Add BSC logo +logo <- "tools/BSC_logo_95.jpg" +system <- list.files(paste0(recipe$Run$output_dir, "/plots")) +variable <- recipe$Analysis$Variable$name +files <- lapply(variable, function(x) { + f <- list.files(paste0(recipe$Run$output_dir, "/plots/", + system, "/", x)) + full_path <- paste0(recipe$Run$output_dir, "/plots/", + system, "/", x,"/", f)})[[1]] +dim(files) <- c(file = length(files)) +Apply(list(files), target_dims = NULL, function(x) { + system(paste("composite -gravity southeast -geometry +10+10", + logo, x, x))}, ncores = recipe$Analysis$ncores) diff --git a/example_scripts/exec_units.R b/example_scripts/exec_units.R index bcd443c5..819121c9 100644 --- a/example_scripts/exec_units.R +++ b/example_scripts/exec_units.R @@ -36,7 +36,3 @@ probabilities <- compute_probabilities(recipe, data) # save_data(recipe, data, skill_metrics, probabilities) # Plot data plot_data(recipe, data, skill_metrics, probabilities, significance = T) - - - - diff --git a/exec_ecvs_seasonal_oper.R b/exec_ecvs_seasonal_oper.R deleted file mode 100644 index cfd5bb2d..00000000 --- a/exec_ecvs_seasonal_oper.R +++ /dev/null @@ -1,52 +0,0 @@ -rm(list=ls()) -gc() -setwd("/esarchive/scratch/nperez/git/auto-s2s") - -source("modules/Loading/Loading.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("tools/prepare_outputs.R") -source("modules/Units/Units.R") - -# Read recipe -args = commandArgs(trailingOnly = TRUE) -recipe_file <- args[1] -recipe <- read_atomic_recipe(recipe_file) -## to test a single recipe: -#recipe_file <- "recipe_ecvs_seasonal_oper.yml" -#recipe <- prepare_outputs(recipe_file) - -# Load datasets -data <- load_datasets(recipe) -# Change units -data <- Units(recipe, data) -# Calibrate datasets -data <- calibrate_datasets(recipe, data) -# Compute skill metrics -skill_metrics <- compute_skill_metrics(recipe, data) -# Compute percentiles and probability bins -probabilities <- compute_probabilities(recipe, data) -# Export all data to netCDF -# save_data(recipe, data, skill_metrics, probabilities) -# Plot data -plot_data(recipe, data, skill_metrics, probabilities, significance = T) - -## Add logo -logo <- "/esarchive/scratch/nperez/git/auto-s2s/tools/BSC_logo_95.jpg" -system <- list.files(paste0(recipe$Run$output_dir, "/plots")) -## This line may lead to add to logos: -# variables <- list.files(paste0(recipe$Run$output_dir, "/plots/", system)) -variable <- recipe$Analysis$Variable$name -files <- lapply(variable, function(x) { - f <- list.files(paste0(recipe$Run$output_dir, "/plots/", - system, "/", x)) - full_path <- paste0(recipe$Run$output_dir, "/plots/", - system, "/", x,"/", f)})[[1]] -dim(files) <- c(file = length(files)) -Apply(list(files), target_dims = NULL, function(x) { - system(paste("composite -gravity southeast -geometry +10+10", - logo, x, x))}, ncores = recipe$Analysis$ncores) - diff --git a/exec_units.R b/exec_units.R deleted file mode 100644 index fa95767b..00000000 --- a/exec_units.R +++ /dev/null @@ -1,42 +0,0 @@ -rm(list=ls()) -gc() -setwd("/esarchive/scratch/nperez/git/auto-s2s") - -source("modules/Loading/Loading.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("tools/prepare_outputs.R") - -# Read recipe -#args = commandArgs(trailingOnly = TRUE) -#recipe_file <- args[1] -#recipe <- read_atomic_recipe(recipe_file) -## to test a single recipe: - # recipe_file <- "recipe_tas_seasonal_units.yml" - # recipe_file <- "recipe_prlr_seasonal_units.yml" - -recipe <- prepare_outputs(recipe_file) - -# Load datasets -data <- load_datasets(recipe) -# Units transformation -source("modules/Units/Units.R") -test <- Units(recipe, data) -# Calibrate datasets -data <- calibrate_datasets(recipe, test) -# Compute skill metrics -skill_metrics <- compute_skill_metrics(recipe, data) -# Compute percentiles and probability bins -probabilities <- compute_probabilities(recipe, data) -# Export all data to netCDF -## TODO: Fix plotting -# save_data(recipe, data, skill_metrics, probabilities) -# Plot data -plot_data(recipe, data, skill_metrics, probabilities, significance = T) - - - - diff --git a/recipe_prlr_seasonal_oper.yml b/recipe_prlr_seasonal_oper.yml deleted file mode 100644 index 64dc7fe8..00000000 --- a/recipe_prlr_seasonal_oper.yml +++ /dev/null @@ -1,63 +0,0 @@ -Description: - Author: nperez - Info: ECVs Oper ESS ECMWF SEAS5 Seasonal Forecast recipe (monthly mean, tas) - -Analysis: - Horizon: seasonal # Mandatory, str: either subseasonal, seasonal, or decadal - Variables: - name: prlr - freq: monthly_mean - Datasets: - System: - name: ECMWF-SEAS5.1 # Mandatory, str: system5c3s system21_m1 system35c3s - Multimodel: no # Mandatory, bool: Either yes/true or no/false - Reference: - name: ERA5 # Mandatory, str: Reference codename. See docu. - Time: - sdate: '0701' ## MMDD - fcst_year: '2023' # Optional, int: Forecast year 'YYYY' - hcst_start: '1993' # Mandatory, int: Hindcast start year 'YYYY' - hcst_end: '2016' # Mandatory, int: Hindcast end year 'YYYY' - ftime_min: 1 # Mandatory, int: First leadtime time step in months - ftime_max: 6 # Mandatory, int: Last leadtime time step in months - Region: - name: "EU" - latmin: 20 - latmax: 80 - lonmin: -20 - lonmax: 40 - Regrid: - method: bilinear # Mandatory, str: Interpolation method. See docu. - type: "to_system" - #type: /esarchive/scratch/nmilders/gitlab/git_clones/auto-s2s/conf/grid_description.txt #'r360x180' # Mandatory, str: to_system, to_reference, or CDO-accepted grid. - Workflow: - Anomalies: - compute: no - cross_validation: no - save: none - Calibration: - method: evmos # Mandatory, str: Calibration method. See docu. - cross_validation: yes - save: none - Skill: - metric: mean_bias EnsCorr rpss crpss bss10 bss90 - save: 'all' - cross_validation: yes - Probabilities: - percentiles: [[1/3, 2/3], [1/10, 9/10]] # frac: Quantile thresholds. - save: 'all' - Indicators: - index: no - Visualization: - plots: skill_metrics forecast_ensemble_mean most_likely_terciles - multi_panel: no - dots: both - ncores: 4 # Optional, int: number of cores, defaults to 1 - remove_NAs: # Optional, bool: Whether NAs are removed, defaults to FALSE - Output_format: scorecards - logo: yes -Run: - Loglevel: INFO - Terminal: TRUE - output_dir: /esarchive/scratch/nperez/cs_oper/ - code_dir: /esarchive/scratch/nperez/git/s2s-suite/ diff --git a/recipe_prlr_seasonal_units.yml b/recipe_prlr_seasonal_units.yml deleted file mode 100644 index e03428ac..00000000 --- a/recipe_prlr_seasonal_units.yml +++ /dev/null @@ -1,63 +0,0 @@ -Description: - Author: nperez - Info: ECVs Oper ESS ECMWF SEAS5 Seasonal Forecast recipe (monthly mean, tas) - -Analysis: - Horizon: seasonal # Mandatory, str: either subseasonal, seasonal, or decadal - Variables: - name: prlr - freq: monthly_mean - units: mm - Datasets: - System: - name: ECMWF-SEAS5.1 # Mandatory, str: system5c3s system21_m1 system35c3s - Multimodel: no # Mandatory, bool: Either yes/true or no/false - Reference: - name: ERA5 # Mandatory, str: Reference codename. See docu. - Time: - sdate: '0601' ## MMDD - fcst_year: # Optional, int: Forecast year 'YYYY' - hcst_start: '2014' # Mandatory, int: Hindcast start year 'YYYY' - hcst_end: '2016' # Mandatory, int: Hindcast end year 'YYYY' - ftime_min: 1 # Mandatory, int: First leadtime time step in months - ftime_max: 6 # Mandatory, int: Last leadtime time step in months - Region: - latmin: 30 # Mandatory, int: minimum latitude - latmax: 50 # Mandatory, int: maximum latitude - lonmin: -10 # Mandatory, int: minimum longitude - lonmax: 10 # Mandatory, int: maximum longitude - Regrid: - method: bilinear # Mandatory, str: Interpolation method. See docu. - type: "to_system" - #type: /esarchive/scratch/nmilders/gitlab/git_clones/auto-s2s/conf/grid_description.txt #'r360x180' # Mandatory, str: to_system, to_reference, or CDO-accepted grid. - Workflow: - Anomalies: - compute: no - cross_validation: no - save: none - Calibration: - method: evmos # Mandatory, str: Calibration method. See docu. - cross_validation: yes - save: none - Skill: - metric: mean_bias EnsCorr rpss crpss bss10 bss90 - save: 'all' - cross_validation: yes - Probabilities: - percentiles: [[1/3, 2/3], [1/10, 9/10]] # frac: Quantile thresholds. - save: 'all' - Indicators: - index: no - Visualization: - plots: skill_metrics forecast_ensemble_mean most_likely_terciles - multi_panel: no - mask_terciles: both - ncores: 4 # Optional, int: number of cores, defaults to 1 - remove_NAs: # Optional, bool: Whether NAs are removed, defaults to FALSE - Output_format: scorecards - logo: yes -Run: - Loglevel: INFO - Terminal: TRUE - output_dir: /esarchive/scratch/nperez/cs_oper/ - code_dir: /esarchive/scratch/nperez/git/s2s-suite/ diff --git a/recipe_tas_seasonal_oper.yml b/recipe_tas_seasonal_oper.yml deleted file mode 100644 index c5e6482f..00000000 --- a/recipe_tas_seasonal_oper.yml +++ /dev/null @@ -1,66 +0,0 @@ -Description: - Author: nperez - Info: ECVs Oper ESS ECMWF SEAS5 Seasonal Forecast recipe (monthly mean, tas) - -Analysis: - Horizon: seasonal # Mandatory, str: either subseasonal, seasonal, or decadal - Variables: - name: tas - freq: monthly_mean - units: C - flux: FALSE - Datasets: - System: - name: ECMWF-SEAS5.1 # Mandatory, str: system5c3s system21_m1 system35c3s - Multimodel: no # Mandatory, bool: Either yes/true or no/false - Reference: - name: ERA5 # Mandatory, str: Reference codename. See docu. - Time: - sdate: '0601' ## MMDD - fcst_year: '2023' # Optional, int: Forecast year 'YYYY' - hcst_start: '1993' # Mandatory, int: Hindcast start year 'YYYY' - hcst_end: '2016' # Mandatory, int: Hindcast end year 'YYYY' - ftime_min: 1 # Mandatory, int: First leadtime time step in months - ftime_max: 6 # Mandatory, int: Last leadtime time step in months - Region: - name: "EU" - latmin: 20 - latmax: 80 - lonmin: -20 - lonmax: 40 - Regrid: - method: bilinear # Mandatory, str: Interpolation method. See docu. - type: "to_system" - #type: /esarchive/scratch/nmilders/gitlab/git_clones/auto-s2s/conf/grid_description.txt #'r360x180' # Mandatory, str: to_system, to_reference, or CDO-accepted grid. - Workflow: - Anomalies: - compute: no - cross_validation: no - save: none - Calibration: - method: evmos # Mandatory, str: Calibration method. See docu. - cross_validation: yes - save: none - Skill: - metric: mean_bias EnsCorr rpss crpss bss10 bss90 - save: 'all' - cross_validation: yes - Probabilities: - percentiles: [[1/3, 2/3], [1/10, 9/10]] # frac: Quantile thresholds. - save: 'all' - Indicators: - index: no - Visualization: - plots: skill_metrics forecast_ensemble_mean most_likely_terciles - multi_panel: no - mask_terciles: no - dots: true - ncores: 4 # Optional, int: number of cores, defaults to 1 - remove_NAs: # Optional, bool: Whether NAs are removed, defaults to FALSE - Output_format: scorecards - logo: yes -Run: - Loglevel: INFO - Terminal: TRUE - output_dir: /esarchive/scratch/nperez/cs_oper/ - code_dir: /esarchive/scratch/nperez/git/s2s-suite/ diff --git a/recipe_tas_seasonal_units.yml b/recipe_tas_seasonal_units.yml deleted file mode 100644 index d2b25321..00000000 --- a/recipe_tas_seasonal_units.yml +++ /dev/null @@ -1,63 +0,0 @@ -Description: - Author: nperez - Info: ECVs Oper ESS ECMWF SEAS5 Seasonal Forecast recipe (monthly mean, tas) - -Analysis: - Horizon: seasonal # Mandatory, str: either subseasonal, seasonal, or decadal - Variables: - name: tas - freq: monthly_mean - units: K - Datasets: - System: - name: ECMWF-SEAS5.1 # Mandatory, str: system5c3s system21_m1 system35c3s - Multimodel: no # Mandatory, bool: Either yes/true or no/false - Reference: - name: ERA5 # Mandatory, str: Reference codename. See docu. - Time: - sdate: '0601' ## MMDD - fcst_year: '2023' # Optional, int: Forecast year 'YYYY' - hcst_start: '2009' # Mandatory, int: Hindcast start year 'YYYY' - hcst_end: '2016' # Mandatory, int: Hindcast end year 'YYYY' - ftime_min: 1 # Mandatory, int: First leadtime time step in months - ftime_max: 6 # Mandatory, int: Last leadtime time step in months - Region: - latmin: 30 # Mandatory, int: minimum latitude - latmax: 50 # Mandatory, int: maximum latitude - lonmin: -10 # Mandatory, int: minimum longitude - lonmax: 10 # Mandatory, int: maximum longitude - Regrid: - method: bilinear # Mandatory, str: Interpolation method. See docu. - type: "to_system" - #type: /esarchive/scratch/nmilders/gitlab/git_clones/auto-s2s/conf/grid_description.txt #'r360x180' # Mandatory, str: to_system, to_reference, or CDO-accepted grid. - Workflow: - Anomalies: - compute: no - cross_validation: no - save: none - Calibration: - method: evmos # Mandatory, str: Calibration method. See docu. - cross_validation: yes - save: none - Skill: - metric: mean_bias EnsCorr rpss crpss bss10 bss90 - save: 'all' - cross_validation: yes - Probabilities: - percentiles: [[1/3, 2/3], [1/10, 9/10]] # frac: Quantile thresholds. - save: 'all' - Indicators: - index: no - Visualization: - plots: skill_metrics forecast_ensemble_mean most_likely_terciles - multi_panel: no - mask_terciles: both - ncores: 4 # Optional, int: number of cores, defaults to 1 - remove_NAs: # Optional, bool: Whether NAs are removed, defaults to FALSE - Output_format: scorecards - logo: yes -Run: - Loglevel: INFO - Terminal: TRUE - output_dir: /esarchive/scratch/nperez/cs_oper/ - code_dir: /esarchive/scratch/nperez/git/s2s-suite/ -- GitLab From 871ee33af02c27a2f3a89a5942d5cd446e4a9019 Mon Sep 17 00:00:00 2001 From: aho Date: Tue, 12 Sep 2023 15:59:48 +0200 Subject: [PATCH 266/388] Make brks and cols be NULLif all data is NA --- modules/Visualization/R/plot_ensemble_mean.R | 13 ++- recipes/tests/recipe_seasonal_vizNA.yml | 85 ++++++++++++++++++++ 2 files changed, 95 insertions(+), 3 deletions(-) create mode 100644 recipes/tests/recipe_seasonal_vizNA.yml diff --git a/modules/Visualization/R/plot_ensemble_mean.R b/modules/Visualization/R/plot_ensemble_mean.R index 07e35706..f343b1e1 100644 --- a/modules/Visualization/R/plot_ensemble_mean.R +++ b/modules/Visualization/R/plot_ensemble_mean.R @@ -53,10 +53,17 @@ plot_ensemble_mean <- function(recipe, fcst, outdir) { ugly_intervals <- seq(-max_value, max_value, max_value/20) brks <- pretty(ugly_intervals, n = 12, min.n = 8) } else { - brks <- pretty(range(var_ens_mean, na.rm = T), n = 15, min.n = 8) + if (all(is.na(var_ens_mean))) { + brks <- NULL + } else { + brks <- pretty(range(var_ens_mean, na.rm = T), n = 15, min.n = 8) + } + } + if (is.null(brks)) { + cols <- NULL + } else { + cols <- grDevices::hcl.colors(length(brks) - 1, palette, rev = rev) } - cols <- grDevices::hcl.colors(length(brks) - 1, palette, rev = rev) - for (i_syear in start_date) { if (length(start_date) == 1) { i_var_ens_mean <- var_ens_mean[which(start_date == i_syear), , , ] diff --git a/recipes/tests/recipe_seasonal_vizNA.yml b/recipes/tests/recipe_seasonal_vizNA.yml new file mode 100644 index 00000000..fac86933 --- /dev/null +++ b/recipes/tests/recipe_seasonal_vizNA.yml @@ -0,0 +1,85 @@ +################################################################################ +## RECIPE DESCRIPTION +################################################################################ + +Description: + Author: An-Chi Ho + Info: Test Visualization module to handle var is all NA + +################################################################################ +## ANALYSIS CONFIGURATION +################################################################################ + +Analysis: + Horizon: Seasonal + Variables: + name: tas + freq: monthly_mean + Datasets: + System: + name: [ECMWF-SEAS5] + Multimodel: no + Reference: + name: ERA5 + Time: + sdate: + - '1101' + fcst_year: '2020' + hcst_start: '2014' + hcst_end: '2016' + ftime_min: 1 + ftime_max: 2 + Region: + latmin: 0 + latmax: 3 + lonmin: 0 + lonmax: 2 + Regrid: + method: bilinear + type: 'r180x90' + Workflow: + Anomalies: + compute: no + cross_validation: no + save: 'none' + Calibration: + method: raw + save: 'none' + Skill: + metric: RPSS, CRPSS + save: 'none' + Probabilities: + percentiles: [[1/3, 2/3], [1/10, 9/10], [1/4, 2/4, 3/4]] + save: 'none' + Visualization: + plots: forecast_ensemble_mean + multi_panel: no + projection: cylindrical_equidistant + Indicators: + index: no + ncores: 8 + remove_NAs: yes + Output_format: S2S4E + +################################################################################ +## Run CONFIGURATION +################################################################################ +Run: + Loglevel: INFO + Terminal: yes + filesystem: esarchive + output_dir: /esarchive/scratch/aho/tmp/auto-s2s_outputs + code_dir: /esarchive/scratch/aho/git/auto-s2s/ + autosubmit: no + # fill only if using autosubmit + auto_conf: + script: /esarchive/scratch/vagudets/repos/auto-s2s/example_scripts/test_parallel_workflow.R + expid: # autosubmit experiment ID + hpc_user: bsc32762 # your hpc username + wallclock: 04:00 # hh:mm + processors_per_job: 8 # use ncores parameter? + platform: nord3v2 # make this constant? + email_notifications: yes # enable/disable email notifications + email_address: victoria.agudetse@bsc.es # email address for notifications + notify_completed: no # notify me by email when a job finishes + notify_failed: yes # notify me by email when a job fails -- GitLab From 5fb00673f540293a6930e991bbc1602cc7a546f7 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Tue, 12 Sep 2023 16:28:02 +0200 Subject: [PATCH 267/388] Replace '[' with ClimProjDiags::Subset() to avoid eliminating time dimension when the length is one --- modules/Visualization/R/plot_ensemble_mean.R | 12 +++++++++--- .../Visualization/R/plot_most_likely_terciles_map.R | 5 ++++- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/modules/Visualization/R/plot_ensemble_mean.R b/modules/Visualization/R/plot_ensemble_mean.R index 07e35706..61fdb783 100644 --- a/modules/Visualization/R/plot_ensemble_mean.R +++ b/modules/Visualization/R/plot_ensemble_mean.R @@ -59,10 +59,16 @@ plot_ensemble_mean <- function(recipe, fcst, outdir) { for (i_syear in start_date) { if (length(start_date) == 1) { - i_var_ens_mean <- var_ens_mean[which(start_date == i_syear), , , ] + i_var_ens_mean <- ClimProjDiags::Subset(var_ens_mean, + along = c("syear"), + indices = which(start_date == i_syear), + drop = 'selected') outfile <- paste0(outdir[[var]], "forecast_ensemble_mean-", start_date) } else { - i_var_ens_mean <- var_ens_mean[which(start_date == i_syear), , , ] + i_var_ens_mean <- ClimProjDiags::Subset(var_ens_mean, + along = c("syear"), + indices = which(start_date == i_syear), + drop = 'selected') outfile <- paste0(outdir[[var]], "forecast_ensemble_mean-", i_syear) } toptitle <- paste0(system_name, " / ", str_to_title(var_long_name), @@ -147,5 +153,5 @@ plot_ensemble_mean <- function(recipe, fcst, outdir) { } } info(recipe$Run$logger, - "##### SKILL METRIC PLOTS SAVED TO OUTPUT DIRECTORY #####") + "##### FORECAST ENSEMBLE MEAN PLOT SAVED TO OUTPUT DIRECTORY #####") } diff --git a/modules/Visualization/R/plot_most_likely_terciles_map.R b/modules/Visualization/R/plot_most_likely_terciles_map.R index 4952a90e..f2ef9575 100644 --- a/modules/Visualization/R/plot_most_likely_terciles_map.R +++ b/modules/Visualization/R/plot_most_likely_terciles_map.R @@ -68,7 +68,10 @@ plot_most_likely_terciles <- function(recipe, c("syear", "time", "bin", "longitude", "latitude")) for (i_syear in start_date) { # Define name of output file and titles - i_var_probs <- var_probs[which(start_date == i_syear), , , , ] + i_var_probs <- ClimProjDiags::Subset(var_probs, + along = c("syear"), + indices = which(start_date == i_syear), + drop = 'selected') outfile <- paste0(outdir[[var]], "forecast_most_likely_tercile-", i_syear) # Mask if (!is.null(mask)) { -- GitLab From ce271859c68a71677b23110096f91e5be86a1166 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Tue, 12 Sep 2023 16:59:19 +0200 Subject: [PATCH 268/388] Adapt logo code to multiple variables --- example_scripts/exec_ecvs_seasonal_oper.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/example_scripts/exec_ecvs_seasonal_oper.R b/example_scripts/exec_ecvs_seasonal_oper.R index f1fa717f..cdb48d09 100644 --- a/example_scripts/exec_ecvs_seasonal_oper.R +++ b/example_scripts/exec_ecvs_seasonal_oper.R @@ -37,7 +37,7 @@ plot_data(recipe, data, skill_metrics, probabilities, significance = T) ## Add BSC logo logo <- "tools/BSC_logo_95.jpg" system <- list.files(paste0(recipe$Run$output_dir, "/plots")) -variable <- recipe$Analysis$Variable$name +variable <- strsplit(recipe$Analysis$Variable$name, ", | |,")[[1]] files <- lapply(variable, function(x) { f <- list.files(paste0(recipe$Run$output_dir, "/plots/", system, "/", x)) -- GitLab From 7faac0f854601c4fffe4e9b1785c8139e24d97ad Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Wed, 13 Sep 2023 11:42:20 +0200 Subject: [PATCH 269/388] Add 'module purge' and explicit module versions --- MODULES | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/MODULES b/MODULES index dd2c568a..e2709d66 100644 --- a/MODULES +++ b/MODULES @@ -7,23 +7,25 @@ if [[ $BSC_MACHINE == "nord3v2" ]]; then module use /gpfs/projects/bsc32/software/suselinux/11/modules/all module unuse /apps/modules/modulefiles/applications /apps/modules/modulefiles/compilers /apps/modules/modulefiles/tools /apps/modules/modulefiles/libraries /apps/modules/modulefiles/environment + module purge module load CDO/1.9.8-foss-2019b module load R/4.1.2-foss-2019b module load OpenMPI/4.0.5-GCC-8.3.0-nord3-v2 - module load GEOS - module load GDAL - module load PROJ - module load Phantomjs + module load GEOS/3.7.2-foss-2019b-Python-3.7.4 + module load GDAL/3.5.0-foss-2019b-Python-3.7.4 + module load PROJ/9.0.0-GCCcore-8.3.0 + module load Phantomjs/2.1.1 else + module purge module load CDO/1.9.8-foss-2015a module load R/4.1.2-foss-2015a-bare - module load GEOS - module load GDAL - module load PROJ - module load Phantomjs + module load GEOS/3.7.2-foss-2015a-Python-3.7.3 + module load GDAL/2.2.1-foss-2015a + module load PROJ/4.8.0-foss-2015a + module load Phantomjs/2.1.1 fi -- GitLab From ae2b9136070cf4feba2d5fe3d6a686d1506686cb Mon Sep 17 00:00:00 2001 From: aho Date: Thu, 14 Sep 2023 13:05:33 +0200 Subject: [PATCH 270/388] Add message before saving outputs --- modules/Anomalies/Anomalies.R | 5 ++++- modules/Calibration/Calibration.R | 5 +++++ modules/Skill/Skill.R | 7 +++++++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/modules/Anomalies/Anomalies.R b/modules/Anomalies/Anomalies.R index 23014cbd..470d4706 100644 --- a/modules/Anomalies/Anomalies.R +++ b/modules/Anomalies/Anomalies.R @@ -84,8 +84,11 @@ compute_anomalies <- function(recipe, data) { "cross-validation. The original full fields are returned as", "$hcst.full_val and $obs.full_val.")) - info(recipe$Run$logger, "##### ANOMALIES COMPUTED SUCCESSFULLY #####") + if (recipe$Analysis$Workflow$Anomalies$save != 'none') { + info(recipe$Run$logger, "##### ANOMALIES COMPUTED SUCCESSFULLY #####") + } # Save outputs + info(recipe$Run$logger, "##### START SAVING ANOMALIES #####") recipe$Run$output_dir <- paste0(recipe$Run$output_dir, "/outputs/Anomalies/") # Save forecast diff --git a/modules/Calibration/Calibration.R b/modules/Calibration/Calibration.R index 6a8fe103..5811fa05 100644 --- a/modules/Calibration/Calibration.R +++ b/modules/Calibration/Calibration.R @@ -163,6 +163,11 @@ calibrate_datasets <- function(recipe, data) { } } info(recipe$Run$logger, CALIB_MSG) + + # Saving + if (recipe$Analysis$Workflow$Calibration$save != 'none') { + info(recipe$Run$logger, "##### START SAVING CALIBRATED DATA #####") + } ## TODO: What do we do with the full values? recipe$Run$output_dir <- paste0(recipe$Run$output_dir, "/outputs/Calibration/") diff --git a/modules/Skill/Skill.R b/modules/Skill/Skill.R index a6ae6d48..6c5c10e6 100644 --- a/modules/Skill/Skill.R +++ b/modules/Skill/Skill.R @@ -344,6 +344,9 @@ compute_skill_metrics <- function(recipe, data, agg = 'global') { info(recipe$Run$logger, "##### SKILL METRIC COMPUTATION COMPLETE #####") # Save outputs #NURIA: I think change the output_dir is a problem for future savings + if (recipe$Analysis$Workflow$Skill$save != 'none') { + info(recipe$Run$logger, "##### START SAVING SKILL METRIC #####") + } recipe$Run$output_dir <- paste0(recipe$Run$output_dir, "/outputs/Skill/") # Separate 'corr' from the rest of the metrics because of extra 'ensemble' dim @@ -468,6 +471,10 @@ compute_probabilities <- function(recipe, data) { info(recipe$Run$logger, "##### PERCENTILES AND PROBABILITY CATEGORIES COMPUTED #####") # Save outputs + if (recipe$Analysis$Workflow$Probabilities$save != 'none') { + info(recipe$Run$logger, + "##### START SAVING PERCENTILES AND PROBABILITY CATEGORIES #####") + } recipe$Run$output_dir <- paste0(recipe$Run$output_dir, "/outputs/Skill/") # Save percentiles -- GitLab From 45097babfde8661fdbb1a6272603cfbaa8810c6f Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Thu, 14 Sep 2023 14:08:15 +0200 Subject: [PATCH 271/388] Run Scorecards in a loop --- conf/slurm_templates/run_scorecards.sh | 2 +- modules/Scorecards/execute_scorecards.R | 23 ++++++++++++++++++----- recipes/recipe_scorecards_vic.yml | 1 + 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/conf/slurm_templates/run_scorecards.sh b/conf/slurm_templates/run_scorecards.sh index c658e35b..bfeaeac0 100644 --- a/conf/slurm_templates/run_scorecards.sh +++ b/conf/slurm_templates/run_scorecards.sh @@ -16,7 +16,7 @@ outdir=$2 source MODULES # Get modified recipe from output directory -recipe=${outdir}/logs/recipes/${recipe} +# recipe=${outdir}/logs/${recipe} # Execute scorecards Rscript modules/Scorecards/execute_scorecards.R ${recipe} ${outdir} diff --git a/modules/Scorecards/execute_scorecards.R b/modules/Scorecards/execute_scorecards.R index 95bf4bb9..e0829342 100644 --- a/modules/Scorecards/execute_scorecards.R +++ b/modules/Scorecards/execute_scorecards.R @@ -9,10 +9,23 @@ output_dir <- args[2] # Read recipe and set outdir recipe <- read_yaml(recipe_file) recipe$Run$output_dir <- output_dir -recipe$Analysis$Datasets$System <- recipe$Analysis$Datasets$System[[1]] -recipe$Analysis$Datasets$Reference <- recipe$Analysis$Datasets$Reference[[1]] -recipe$Analysis$Variables <- recipe$Analysis$Variables[[1]] -# Plot Scorecards -plot_scorecards(recipe) +## Loop over variables +datasets <- recipe$Analysis$Datasets +## TODO: Improve dependency system? +for (system in 1:length(datasets$System)) { + for (reference in 1:length(datasets$Reference)) { + for (variable in 1:length(recipe$Analysis$variables)) { + scorecard_recipe <- recipe + scorecard_recipe$Analysis$Datasets$System <- + recipe$Analysis$Datasets$System[[system]] + scorecard_recipe$Analysis$Datasets$Reference <- + recipe$Analysis$Datasets$Reference[[reference]] + scorecard_recipe$Analysis$Variables <- + recipe$Analysis$Variables[[variable]] + # Plot Scorecards + Scorecards(scorecard_recipe) + } + } +} print("##### SCORECARDS SAVED TO THE OUTPUT DIRECTORY #####") diff --git a/recipes/recipe_scorecards_vic.yml b/recipes/recipe_scorecards_vic.yml index 16a3cfae..2a149b41 100644 --- a/recipes/recipe_scorecards_vic.yml +++ b/recipes/recipe_scorecards_vic.yml @@ -14,6 +14,7 @@ Analysis: Horizon: Seasonal Variables: # ECVs and Indicators? - {name: tas, freq: monthly_mean} + - {name: prlr, freq: monthly_mean} Datasets: System: # multiple systems for single model, split if Multimodel = F - {name: ECMWF-SEAS5} -- GitLab From 172d05433ae64889c4f00f064e65157c507f1e41 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Fri, 15 Sep 2023 10:32:39 +0200 Subject: [PATCH 272/388] Remove outdated recipes, add descriptions --- .../atomic_recipes/recipe_decadal_daily.yml | 51 ------------- .../recipe_decadal_monthly_2.yml | 51 ------------- .../recipe_scorecards_s2s-suite.yml | 0 .../atomic_recipes/recipe_seasonal-tests.yml | 49 ------------- .../atomic_recipes/recipe_system5c3s-rsds.yml | 49 ------------- ...yml => recipe_system5c3s-tas-robinson.yml} | 2 +- .../atomic_recipes/recipe_system7c3s-prlr.yml | 2 +- .../atomic_recipes/recipe_system7c3s-tas.yml | 2 +- .../recipe_tas-daily-regrid-to-reference.yml | 50 ------------- .../recipe_tas-daily-regrid-to-system.yml | 47 ------------ recipes/atomic_recipes/recipe_tas_global.yml | 57 --------------- .../recipe_test-new-metrics.yml | 46 ------------ .../atomic_recipes/recipe_test_anomalies.yml | 49 ------------- .../atomic_recipes/recipe_test_multivar.yml | 2 +- .../atomic_recipes/recipe_testing_nadia.yml | 49 ------------- recipes/seasonal_complex.yml-OUTDATED | 46 ------------ recipes/seasonal_oper.yml | 68 ----------------- recipes/seasonal_oper_atomic.yml-OUTDATED | 73 ------------------- recipes/tests/old_tests/execute_tests.R | 44 ----------- .../old_tests/seasonal_testWorkflow1.yml | 53 -------------- .../old_tests/seasonal_testWorkflow2.yml | 54 -------------- .../old_tests/seasonal_testWorkflow3.yml | 52 ------------- .../old_tests/seasonal_testWorkflow4.yml | 53 -------------- .../old_tests/seasonal_testWorkflow5.yml | 51 ------------- .../old_tests/seasonal_testWorkflow6.yml | 53 -------------- .../old_tests/seasonal_testWorkflow7.yml | 53 -------------- .../old_tests/seasonal_testWorkflow8.yml | 51 ------------- 27 files changed, 4 insertions(+), 1153 deletions(-) delete mode 100644 recipes/atomic_recipes/recipe_decadal_daily.yml delete mode 100644 recipes/atomic_recipes/recipe_decadal_monthly_2.yml rename recipes/{ => atomic_recipes}/recipe_scorecards_s2s-suite.yml (100%) delete mode 100644 recipes/atomic_recipes/recipe_seasonal-tests.yml delete mode 100644 recipes/atomic_recipes/recipe_system5c3s-rsds.yml rename recipes/atomic_recipes/{recipe_system5c3s-tas.yml => recipe_system5c3s-tas-robinson.yml} (93%) delete mode 100644 recipes/atomic_recipes/recipe_tas-daily-regrid-to-reference.yml delete mode 100644 recipes/atomic_recipes/recipe_tas-daily-regrid-to-system.yml delete mode 100644 recipes/atomic_recipes/recipe_tas_global.yml delete mode 100644 recipes/atomic_recipes/recipe_test-new-metrics.yml delete mode 100644 recipes/atomic_recipes/recipe_test_anomalies.yml delete mode 100644 recipes/atomic_recipes/recipe_testing_nadia.yml delete mode 100644 recipes/seasonal_complex.yml-OUTDATED delete mode 100644 recipes/seasonal_oper.yml delete mode 100644 recipes/seasonal_oper_atomic.yml-OUTDATED delete mode 100644 recipes/tests/old_tests/execute_tests.R delete mode 100644 recipes/tests/old_tests/seasonal_testWorkflow1.yml delete mode 100644 recipes/tests/old_tests/seasonal_testWorkflow2.yml delete mode 100644 recipes/tests/old_tests/seasonal_testWorkflow3.yml delete mode 100644 recipes/tests/old_tests/seasonal_testWorkflow4.yml delete mode 100644 recipes/tests/old_tests/seasonal_testWorkflow5.yml delete mode 100644 recipes/tests/old_tests/seasonal_testWorkflow6.yml delete mode 100644 recipes/tests/old_tests/seasonal_testWorkflow7.yml delete mode 100644 recipes/tests/old_tests/seasonal_testWorkflow8.yml diff --git a/recipes/atomic_recipes/recipe_decadal_daily.yml b/recipes/atomic_recipes/recipe_decadal_daily.yml deleted file mode 100644 index 9d404bfa..00000000 --- a/recipes/atomic_recipes/recipe_decadal_daily.yml +++ /dev/null @@ -1,51 +0,0 @@ -Description: - Author: An-Chi Ho - '': split version -Analysis: - Horizon: Decadal - Variables: - name: tas - freq: daily_mean - Datasets: - System: - name: EC-Earth3-i4 #BCC-CSM2-MR #CanESM5 - member: r1i4p1f1,r2i4p1f1,r3i4p1f1 #'all' - Multimodel: no - Reference: - name: ERA5 - Time: - fcst_year: [2020,2021] - hcst_start: 2016 - hcst_end: 2019 - season: 'Annual' - ftime_min: 3 - ftime_max: 5 - Region: - latmin: 10 #-90 - latmax: 20 #90 - lonmin: 0 - lonmax: 15 #359.9 - Regrid: - method: bilinear - type: to_system #to_reference - Workflow: - Anomalies: - compute: no - cross_validation: - Calibration: - method: qmap - Skill: - metric: RPSS FRPSS EnsCorr - Probabilities: - percentiles: [[1/3, 2/3], [1/10, 9/10]] - Indicators: - index: FALSE - ncores: # Optional, int: number of cores, defaults to 1 - remove_NAs: # Optional, bool: Whether NAs are removed, defaults to FALSE - Output_format: S2S4E -Run: - Loglevel: INFO - Terminal: yes - output_dir: /esarchive/scratch/aho/git/auto-s2s/out-logs/ - code_dir: /esarchive/scratch/aho/git/auto-s2s/ - diff --git a/recipes/atomic_recipes/recipe_decadal_monthly_2.yml b/recipes/atomic_recipes/recipe_decadal_monthly_2.yml deleted file mode 100644 index 38b25d42..00000000 --- a/recipes/atomic_recipes/recipe_decadal_monthly_2.yml +++ /dev/null @@ -1,51 +0,0 @@ -Description: - Author: An-Chi Ho - '': split version -Analysis: - Horizon: Decadal - Variables: - name: tas - freq: daily_mean - Datasets: - System: - name: CanESM5 - member: r1i1p2f1,r2i1p2f1 #'all' - Multimodel: no - Reference: - name: ERA5 #JRA-55 - Time: - fcst_year: - hcst_start: 2014 - hcst_end: 2016 -# season: 'Annual' - ftime_min: 0 - ftime_max: 2 - Region: - latmin: 10 #-90 - latmax: 20 #90 - lonmin: 0 - lonmax: 15 #359.9 - Regrid: - method: bilinear - type: to_system #to_reference - Workflow: - Anomalies: - compute: no - cross_validation: - Calibration: - method: bias - Skill: - metric: RPSS - Probabilities: - percentiles: [[1/3, 2/3], [1/10, 9/10]] - Indicators: - index: FALSE - ncores: # Optional, int: number of cores, defaults to 1 - remove_NAs: # Optional, bool: Whether NAs are removed, defaults to FALSE - Output_format: S2S4E -Run: - Loglevel: INFO - Terminal: yes - output_dir: /esarchive/scratch/aho/git/auto-s2s/out-logs/ - code_dir: /esarchive/scratch/aho/git/auto-s2s/ - diff --git a/recipes/recipe_scorecards_s2s-suite.yml b/recipes/atomic_recipes/recipe_scorecards_s2s-suite.yml similarity index 100% rename from recipes/recipe_scorecards_s2s-suite.yml rename to recipes/atomic_recipes/recipe_scorecards_s2s-suite.yml diff --git a/recipes/atomic_recipes/recipe_seasonal-tests.yml b/recipes/atomic_recipes/recipe_seasonal-tests.yml deleted file mode 100644 index 3da81a34..00000000 --- a/recipes/atomic_recipes/recipe_seasonal-tests.yml +++ /dev/null @@ -1,49 +0,0 @@ -Description: - Author: V. Agudetse - -Analysis: - Horizon: Seasonal - Variables: - name: tas prlr - freq: monthly_mean - Datasets: - System: - name: ECMWF-SEAS5.1 - Multimodel: False - Reference: - name: CERRA - Time: - sdate: '0101' - fcst_year: - hcst_start: '2000' - hcst_end: '2005' - ftime_min: 1 - ftime_max: 2 - Region: - latmin: 30 - latmax: 50 - lonmin: -10 - lonmax: 30 - Regrid: - method: bilinear - type: to_system - Workflow: - Calibration: - method: raw - Anomalies: - compute: yes - cross_validation: yes - Skill: - metric: mean_bias EnsCorr RPSS CRPSS EnsSprErr # RPS RPSS CRPS CRPSS FRPSS BSS10 BSS90 EnsCorr Corr mean_bias mean_bias_SS - Probabilities: - percentiles: [[1/3, 2/3], [1/10, 9/10], [1/4, 2/4, 3/4]] - Indicators: - index: no - ncores: 14 - remove_NAs: yes - Output_format: Scorecards -Run: - Loglevel: INFO - Terminal: yes - output_dir: /esarchive/scratch/vagudets/repos/auto-s2s/out-logs/ - code_dir: /esarchive/scratch/vagudets/repos/auto-s2s/ diff --git a/recipes/atomic_recipes/recipe_system5c3s-rsds.yml b/recipes/atomic_recipes/recipe_system5c3s-rsds.yml deleted file mode 100644 index 0cb2d29f..00000000 --- a/recipes/atomic_recipes/recipe_system5c3s-rsds.yml +++ /dev/null @@ -1,49 +0,0 @@ -Description: - Author: V. Agudetse - -Analysis: - Horizon: Seasonal - Variables: - name: rsds - freq: monthly_mean - Datasets: - System: - name: ECMWF-SEAS5 - Multimodel: False - Reference: - name: ERA5 - Time: - sdate: '1101' - fcst_year: '2020' - hcst_start: '1993' - hcst_end: '2016' - ftime_min: 1 - ftime_max: 3 - Region: - latmin: -10 - latmax: 10 - lonmin: 0 - lonmax: 20 - Regrid: - method: bilinear - type: to_system - Workflow: - Anomalies: - compute: no - cross_validation: - Calibration: - method: mse_min - Skill: - metric: RPS RPSS CRPS CRPSS FRPSS BSS10 BSS90 EnsCorr Corr - Probabilities: - percentiles: [[1/3, 2/3], [1/10, 9/10], [1/4, 2/4, 3/4]] - Indicators: - index: no - ncores: 1 - remove_NAs: yes - Output_format: S2S4E -Run: - Loglevel: INFO - Terminal: yes - output_dir: /esarchive/scratch/vagudets/repos/auto-s2s/out-logs/ - code_dir: /esarchive/scratch/vagudets/repos/auto-s2s/ diff --git a/recipes/atomic_recipes/recipe_system5c3s-tas.yml b/recipes/atomic_recipes/recipe_system5c3s-tas-robinson.yml similarity index 93% rename from recipes/atomic_recipes/recipe_system5c3s-tas.yml rename to recipes/atomic_recipes/recipe_system5c3s-tas-robinson.yml index b0f171e4..f9f7d84e 100644 --- a/recipes/atomic_recipes/recipe_system5c3s-tas.yml +++ b/recipes/atomic_recipes/recipe_system5c3s-tas-robinson.yml @@ -1,6 +1,6 @@ Description: Author: V. Agudetse - + Description: Recipe to test forecast times + robinson projection with SEAS5 Analysis: Horizon: Seasonal Variables: diff --git a/recipes/atomic_recipes/recipe_system7c3s-prlr.yml b/recipes/atomic_recipes/recipe_system7c3s-prlr.yml index fa7bee7f..1cba3c97 100644 --- a/recipes/atomic_recipes/recipe_system7c3s-prlr.yml +++ b/recipes/atomic_recipes/recipe_system7c3s-prlr.yml @@ -1,6 +1,6 @@ Description: Author: V. Agudetse - + Description: Analysis of MF System 7 with precipitation Analysis: Horizon: Seasonal Variables: diff --git a/recipes/atomic_recipes/recipe_system7c3s-tas.yml b/recipes/atomic_recipes/recipe_system7c3s-tas.yml index c30ed71c..0b1fef13 100644 --- a/recipes/atomic_recipes/recipe_system7c3s-tas.yml +++ b/recipes/atomic_recipes/recipe_system7c3s-tas.yml @@ -1,6 +1,6 @@ Description: Author: V. Agudetse - + Description: Analysis of MF System 7 with temperature Analysis: Horizon: Seasonal Variables: diff --git a/recipes/atomic_recipes/recipe_tas-daily-regrid-to-reference.yml b/recipes/atomic_recipes/recipe_tas-daily-regrid-to-reference.yml deleted file mode 100644 index b14c90e1..00000000 --- a/recipes/atomic_recipes/recipe_tas-daily-regrid-to-reference.yml +++ /dev/null @@ -1,50 +0,0 @@ -Description: - Author: V. Agudetse - Info: ECMWF System5 Seasonal Forecast Example recipe (daily mean, tas) - -Analysis: - Horizon: seasonal # Mandatory, str: either subseasonal, seasonal, or decadal - Variables: - name: tas # Mandatory, str: variable name in /esarchive/ - freq: daily_mean # Mandatory, str: either monthly_mean or daily_mean - Datasets: - System: - name: ECMWF-SEAS5 # Mandatory, str: System codename. See docu. - Multimodel: no # Mandatory, bool: Either yes/true or no/false - Reference: - name: ERA5 # Mandatory, str: Reference codename. See docu. - Time: - sdate: '1101' - fcst_year: '2020' # Optional, int: Forecast year 'YYYY' - hcst_start: '1993' # Mandatory, int: Hindcast start year 'YYYY' - hcst_end: '1996' # Mandatory, int: Hindcast end year 'YYYY' - ftime_min: 1 # Mandatory, int: First leadtime time step in months - ftime_max: 2 # Mandatory, int: Last leadtime time step in months - Region: - latmin: -10 # Mandatory, int: minimum latitude - latmax: 10 # Mandatory, int: maximum latitude - lonmin: 0 # Mandatory, int: minimum longitude - lonmax: 20 # Mandatory, int: maximum longitude - Regrid: - method: bilinear # Mandatory, str: Interpolation method. See docu. - type: to_reference # Mandatory, str: to_system, to_reference, or CDO-accepted grid. - Workflow: - Anomalies: - compute: no # Whether to compute the anomalies and use them for skill metrics - cross_validation: # whether they should be computed in cross-validation - Calibration: - method: qmap # Mandatory, str: Calibration method. See docu. - Skill: - metric: RPSS FRPSS # str: Skill metric or list of skill metrics. See docu. - Probabilities: - percentiles: [[1/3, 2/3], [1/10, 9/10]] # frac: Quantile thresholds. - Indicators: - index: no - ncores: 4 # Optional, int: number of cores, defaults to 1 - remove_NAs: # Optional, bool: Whether NAs are removed, defaults to FALSE - Output_format: S2S4E -Run: - Loglevel: INFO - Terminal: yes - output_dir: /esarchive/scratch/vagudets/repos/auto-s2s/out-logs/ - code_dir: /esarchive/scratch/vagudets/repos/auto-s2s/ diff --git a/recipes/atomic_recipes/recipe_tas-daily-regrid-to-system.yml b/recipes/atomic_recipes/recipe_tas-daily-regrid-to-system.yml deleted file mode 100644 index 5c899f97..00000000 --- a/recipes/atomic_recipes/recipe_tas-daily-regrid-to-system.yml +++ /dev/null @@ -1,47 +0,0 @@ -Description: - Author: V. Agudetse - -Analysis: - Horizon: Seasonal - Variables: - name: tas - freq: daily_mean - Datasets: - System: - name: ECMWF-SEAS5 - Multimodel: no - Reference: - name: ERA5 - Time: - sdate: '1101' - fcst_year: '2020' - hcst_start: '1993' - hcst_end: '2003' - ftime_min: 1 - ftime_max: 2 - Region: - latmin: -10 - latmax: 10 - lonmin: 0 - lonmax: 20 - Regrid: - method: bilinear - type: to_system - Workflow: - Anomalies: - compute: no - cross_validation: - Calibration: - method: qmap - Skill: - metric: FRPS RPSS - Probabilities: - percentiles: [[1/3, 2/3], [1/10, 9/10]] - Indicators: - index: no - Output_format: S2S4E -Run: - Loglevel: INFO - Terminal: yes - output_dir: /esarchive/scratch/vagudets/repos/auto-s2s/out-logs/ - code_dir: /esarchive/scratch/vagudets/repos/auto-s2s/ diff --git a/recipes/atomic_recipes/recipe_tas_global.yml b/recipes/atomic_recipes/recipe_tas_global.yml deleted file mode 100644 index 969e150d..00000000 --- a/recipes/atomic_recipes/recipe_tas_global.yml +++ /dev/null @@ -1,57 +0,0 @@ -Description: - Author: V. Agudetse - -Analysis: - Horizon: Seasonal - Variables: - name: tas - freq: monthly_mean - Datasets: - System: - name: Meteo-France-System7 - Multimodel: False - Reference: - name: ERA5 - Time: - sdate: '1101' - fcst_year: '2020' - hcst_start: '2000' - hcst_end: '2010' - ftime_min: 1 - ftime_max: 2 - Region: - latmin: -90 - latmax: 90 - lonmin: 0 - lonmax: 359.9 - Regrid: - method: bilinear - type: to_system - Workflow: - Anomalies: - compute: yes # yes/no, default yes - cross_validation: yes # yes/no, default yes - save: 'all' # 'all'/'none'/'exp_only'/'fcst_only' - Calibration: - method: mse_min - save: 'none' # 'all'/'none'/'exp_only'/'fcst_only' - Skill: - metric: RPSS BSS10 BSS90 EnsCorr mean_bias mean_bias_SS - save: 'all' # 'all'/'none' - Probabilities: - percentiles: [[1/3, 2/3], [1/10, 9/10]] - save: 'percentiles_only' # 'all'/'none'/'bins_only'/'percentiles_only' - Visualization: - plots: skill_metrics, forecast_ensemble_mean, most_likely_terciles - multi_pannel: no - projection: robinson - Indicators: - index: no - ncores: 10 - remove_NAs: yes - Output_format: S2S4E -Run: - Loglevel: INFO - Terminal: yes - output_dir: /esarchive/scratch/vagudets/auto-s2s-outputs/ - code_dir: /esarchive/scratch/vagudets/repos/auto-s2s/ diff --git a/recipes/atomic_recipes/recipe_test-new-metrics.yml b/recipes/atomic_recipes/recipe_test-new-metrics.yml deleted file mode 100644 index b5745292..00000000 --- a/recipes/atomic_recipes/recipe_test-new-metrics.yml +++ /dev/null @@ -1,46 +0,0 @@ -Description: - Author: V. Agudetse - -Analysis: - Horizon: Seasonal - Variables: - name: tas - freq: monthly_mean - Datasets: - System: - name: Meteo-France-System7 - Multimodel: False - Reference: - name: ERA5 - Time: - sdate: '1101' - fcst_year: '2020' - hcst_start: '1998' - hcst_end: '2010' - ftime_min: 1 - ftime_max: 2 - Region: - latmin: -10 - latmax: 10 - lonmin: 0 - lonmax: 20 - Regrid: - method: bilinear - type: to_system - Workflow: - Calibration: - method: mse_min - Skill: - metric: RMSSS - Probabilities: - percentiles: [[1/3, 2/3], [1/10, 9/10]] - Indicators: - index: no - ncores: 7 - remove_NAs: yes - Output_format: S2S4E -Run: - Loglevel: INFO - Terminal: yes - output_dir: /esarchive/scratch/vagudets/repos/auto-s2s/out-logs/ - code_dir: /esarchive/scratch/vagudets/repos/auto-s2s/ diff --git a/recipes/atomic_recipes/recipe_test_anomalies.yml b/recipes/atomic_recipes/recipe_test_anomalies.yml deleted file mode 100644 index 287f9a98..00000000 --- a/recipes/atomic_recipes/recipe_test_anomalies.yml +++ /dev/null @@ -1,49 +0,0 @@ -Description: - Author: V. Agudetse - -Analysis: - Horizon: Seasonal - Variables: - name: tas - freq: monthly_mean - Datasets: - System: - name: ECMWF-SEAS5 - Multimodel: False - Reference: - name: ERA5 - Time: - sdate: '1101' - fcst_year: '2020' - hcst_start: '1999' - hcst_end: '2010' - ftime_min: 1 - ftime_max: 2 - Region: - latmin: -10 - latmax: 10 - lonmin: 0 - lonmax: 20 - Regrid: - method: bilinear - type: to_system - Workflow: - Calibration: - method: raw - Anomalies: - compute: yes - cross_validation: yes - Skill: - metric: RPS RPSS CRPS CRPSS BSS10 BSS90 EnsCorr mean_bias mean_bias_SS - Probabilities: - percentiles: [[1/3, 2/3], [1/10, 9/10]] - Indicators: - index: no - ncores: 7 - remove_NAs: yes - Output_format: S2S4E -Run: - Loglevel: INFO - Terminal: yes - output_dir: /esarchive/scratch/vagudets/repos/auto-s2s/out-logs/ - code_dir: /esarchive/scratch/vagudets/repos/auto-s2s/ diff --git a/recipes/atomic_recipes/recipe_test_multivar.yml b/recipes/atomic_recipes/recipe_test_multivar.yml index a8c2e71b..01625d40 100644 --- a/recipes/atomic_recipes/recipe_test_multivar.yml +++ b/recipes/atomic_recipes/recipe_test_multivar.yml @@ -1,6 +1,6 @@ Description: Author: V. Agudetse - + Description: Multiple variables in the same atomic recipe Analysis: Horizon: Seasonal Variables: diff --git a/recipes/atomic_recipes/recipe_testing_nadia.yml b/recipes/atomic_recipes/recipe_testing_nadia.yml deleted file mode 100644 index e6b2bc02..00000000 --- a/recipes/atomic_recipes/recipe_testing_nadia.yml +++ /dev/null @@ -1,49 +0,0 @@ -Description: - Author: V. Agudetse - -Analysis: - Horizon: Seasonal - Variables: - name: tas - freq: monthly_mean - Datasets: - System: - name: ECMWF-SEAS5 - Multimodel: False - Reference: - name: ERA5 - Time: - sdate: '1101' - fcst_year: - hcst_start: '2010' - hcst_end: '2015' - ftime_min: 1 - ftime_max: 6 - Region: - latmin: 30 - latmax: 50 - lonmin: -10 - lonmax: 30 - Regrid: - method: bilinear - type: to_system - Workflow: - Calibration: - method: raw - Anomalies: - compute: yes - cross_validation: yes - Skill: - metric: mean_bias EnsCorr RPSS CRPSS EnsSprErr - Probabilities: - percentiles: [[1/3, 2/3], [1/10, 9/10], [1/4, 2/4, 3/4]] - Indicators: - index: no - ncores: 7 - remove_NAs: yes - Output_format: scorecards -Run: - Loglevel: INFO - Terminal: yes - output_dir: /esarchive/scratch/vagudets/repos/auto-s2s/out-logs/ - code_dir: /esarchive/scratch/vagudets/repos/auto-s2s/ diff --git a/recipes/seasonal_complex.yml-OUTDATED b/recipes/seasonal_complex.yml-OUTDATED deleted file mode 100644 index 2c27e0b7..00000000 --- a/recipes/seasonal_complex.yml-OUTDATED +++ /dev/null @@ -1,46 +0,0 @@ -Description: - Author: N.Pérez-Zanón - Info: This is a test to transform s2s4e data-analysis for SEAS5 - -Analysis: - Horizon: Seasonal - Variables: - ECVs: - - {name: tas, freq: monthly_mean} - - {name: tas, freq: daily_mean} - Indicators: - - {name: gdd} - Datasets: - System: - - name: system5c3s - - name: glosea5 - Multimodel: False - Reference: - - name: ERA5 - - name: ERAInterim - Time: - sdate: - fcst_year: 2021 - fcst_month: [07, 08] - fcst_day: 01 - hcst_start: 2000 - hcst_end: 2002 - leadtimemin: 2 - leadtimemax: 4 - Region: - - {latmin: -90, latmax: 90, lonmin: 0, lonmax: 360} - Regrid: - method: bicubic - type: system - Workflow: - Calibration: - method: SBC - Skill: - metric: RPSS - Indicators: - index: False - Output_format: S2S4E - -Run: - Loglevel: INFO - Terminal: True diff --git a/recipes/seasonal_oper.yml b/recipes/seasonal_oper.yml deleted file mode 100644 index a1351e37..00000000 --- a/recipes/seasonal_oper.yml +++ /dev/null @@ -1,68 +0,0 @@ -# -# ___ ___ _ _ _ -# / __| / __| ___ _ __ ___ _ _ __ _ | |_ (_) ___ _ _ __ _ | | -# | (__ \__ \ / _ \ | '_ \ / -_) | '_| / _` | | _| | | / _ \ | ' \ / _` | | | -# \___| |___/ \___/ | .__/ \___| |_| \__,_| \__| |_| \___/ |_||_| \__,_| |_| -# |_| - -################################################################################# -# RECIPE DESCRIPTION -################################################################################# - -Description: - Author: N.Pérez-Zanón # [Optional?/str] -Info: This is a test to transform s2s4e data-analysis for SEAS5 # [Optional?/str] - -################################################################################# -# ANALYSIS CONF -################################################################################# - -Analysis: - Horizon: Seasonal # [Mandatory/str (either seasonal, subseasonal, decadal)] - Variables: - ECVs: # [Mandatory/list of dicts {name: , freq: } or None] - - {name: tas, freq: monthly_mean} - Indicators: # list of strs? - - None - Datasets: - System: - - name: ECMWF-SEAS5 # list of strs - Multimodel: False # boolean, if true system above are aggregated into single multi-model - Reference: # single dict? in the future multiple ref can be an asset - - {name: ERA5} # str - Time: - sdate: - fcst_syear: ["2017"] # list of ints or None (case where only hcst is verfied) - fcst_sday: ["0701", "0601"] # int or list of ints with MMDD format - hcst_start: "1993" # int mandatory - hcst_end: "2016" # int mandatory - leadtimemin: 2 # int mandatory - leadtimemax: 4 # int mandatory [units????] - Region: - - {latmin: -90, latmax: 90, lonmin: 0, lonmax: 360} - - {latmin: -10, latmax: 10, lonmin: 0, lonmax: 20} - Regrid: - method: bilinear # str mandatory - type: to_system # str either to_system, to_reference or CDO-compatible grid mandatory - Data_load: - module: "modules/data_load/seas5.load.R" - Workflow: - Calibration: - method: SBC # str - Skill: - metric: RPSS # str - Indicators: - index: FALSE # bool - Output_format: S2S4E # str - -################################################################################# -# Run CONF -################################################################################# - -Run: - Loglevel: INFO # str - Terminal: TRUE # bool - output_dir: /esarchive/scratch/lpalma/git/auto-s2s/out-logs/ - code_dir: /esarchive/scratch/lpalma/git/auto-s2s/ - - diff --git a/recipes/seasonal_oper_atomic.yml-OUTDATED b/recipes/seasonal_oper_atomic.yml-OUTDATED deleted file mode 100644 index 31b2f5d7..00000000 --- a/recipes/seasonal_oper_atomic.yml-OUTDATED +++ /dev/null @@ -1,73 +0,0 @@ -# -# ___ ___ _ _ _ -# / __| / __| ___ _ __ ___ _ _ __ _ | |_ (_) ___ _ _ __ _ | | -# | (__ \__ \ / _ \ | '_ \ / -_) | '_| / _` | | _| | | / _ \ | ' \ / _` | | | -# \___| |___/ \___/ | .__/ \___| |_| \__,_| \__| |_| \___/ |_||_| \__,_| |_| -# |_| - -################################################################################# -# RECIPE DESCRIPTION -################################################################################# - -Description: - Author: Ll. Palma # [Optional?/str] - Info: This is a test of an atomic recipe to calibrate and verify SEAS5 # [Optional?/str] - -################################################################################# -# ANALYSIS CONF -################################################################################# - -Analysis: - Horizon: Seasonal # [Mandatory/str (either seasonal, subseasonal, decadal)] - Variables: - ECVs: - name: tas - freq: monthly_mean - Indicators: - no - Datasets: - System: - name: system5c3s # list of strs - Multimodel: False # boolean, if true system above are aggregated into single multi-model - Reference: # single dict? in the future multiple ref can be an asset - name: era5 # str - Time: - sdate: - fcst_year: no # list of ints or no (case where only hcst is verfied) - fcst_month: ["07"] # int or list of ints with MMDD format - fcst_day: ["01"] # int or list of ints with MMDD format - hcst_start: "1993" # int mandatory - hcst_end: "2016" # int mandatory - leadtimemin: 1 # int mandatory - leadtimemax: 6 # int mandatory [units????] - Region: - # FOCUS SADC - latmin: -40 - latmax: 10 - lonmin: 0 - lonmax: 60 - Regrid: - method: conservative # str mandatory - type: to_system # str either system or reference mandatory - Data_load: - module: "modules/data_load/seas5.load.R" - Workflow: - Calibration: - method: SBC # str - Skill: - metric: RPSS # str - Indicators: - index: FALSE # bool - Output_format: S2S4E # str - -################################################################################# -# Run CONF -################################################################################# - -Run: - Loglevel: INFO # str - Terminal: TRUE # bool - output_dir: /esarchive/scratch/lpalma/git/auto-s2s/out-logs/ - code_dir: /esarchive/scratch/lpalma/git/auto-s2s/ - - diff --git a/recipes/tests/old_tests/execute_tests.R b/recipes/tests/old_tests/execute_tests.R deleted file mode 100644 index 2fa6a137..00000000 --- a/recipes/tests/old_tests/execute_tests.R +++ /dev/null @@ -1,44 +0,0 @@ -library(yaml) - -args <- NULL; - -# Function to run tests: -# source_lines("/esarchive/scratch/nperez/git/startR/inst/doc/usecase/ex2_1_timedim.R", -# start = 4, end = 14) -source_lines <- function(file, start, end, ...) { - file.lines <- scan(file, what = character(), skip = start - 1, - nlines = end - start + 1, sep = '\n') - file.lines.collapsed <- paste(file.lines, collapse = '\n') - source(textConnection(file.lines.collapsed), ...) -} - -# ------------------------------------------ -# Section to check recipes that should work: -args[1] <- "recipes/tests/seasonal_testWorkflow1.yml" -source_lines("OperationalCS.R", start = 14, end = 50) -# Calibration method None --> raw data verification -args[1] <- "recipes/tests/seasonal_testWorkflow4.yml" -source_lines("OperationalCS.R", start = 14, end = 50) -# Calibration: None --> raw data verification -args[1] <- "recipes/tests/seasonal_testWorkflow5.yml" -source_lines("OperationalCS.R", start = 14, end = 50) -# Case Skill_1 and Skill_2 when multiple times needed -args[1] <- "recipes/tests/seasonal_testWorkflow7.yml" -source_lines("OperationalCS.R", start = 14, end = 50) -# Indicator -args[1] <- "recipes/tests/seasonal_testWorkflow8.yml" -source_lines("OperationalCS.R", start = 14, end = 50) - -# ------------------------------------------ -# Section to check recipes that should fail: -## This should fail because there is no Horizon: -args[1] <- "recipes/tests/seasonal_testWorkflow2.yml" -source_lines("OperationalCS.R", start = 14, end = 50) - -## This should fail because there are 2 Calibration options: -args[1] <- "recipes/tests/seasonal_testWorkflow3.yml" -source_lines("OperationalCS.R", start = 14, end = 50) - -## This fails because it is not allow repeating the name Skill -args[1] <- "recipes/tests/seasonal_testWorkflow6.yml" -source_lines("OperationalCS.R", start = 14, end = 50) diff --git a/recipes/tests/old_tests/seasonal_testWorkflow1.yml b/recipes/tests/old_tests/seasonal_testWorkflow1.yml deleted file mode 100644 index 3c9e55f6..00000000 --- a/recipes/tests/old_tests/seasonal_testWorkflow1.yml +++ /dev/null @@ -1,53 +0,0 @@ -Description: - Author: N.Pérez-Zanón - Info: This is a test to transform s2s4e data-analysis for SEAS5 - -Analysis: - Horizon: Seasonal - Variables: - ECVs: - - {name: tas, freq: monthly_mean} - Indicators: - - None - Datasets: - System: - - name: system5c3s - Multimodel: False - Reference: - - {name: era5} - Time: - sdate: - fcst_year: 2021 - fcst_month: 07 - fcst_day: 01 - hcst_start: 2000 - hcst_end: 2002 - leadtimemin: 2 - leadtimemax: 4 - Region: - Global: TRUE - Aggregation: False - Regional: - - {latmin: -90, latmax: 90, lonmin: 0, lonmax: 360} - - {latmin: -10, latmax: 10, lonmin: 0, lonmax: 20} - Regrid: - method: bilinear - type: system - Workflow: - Calibration: - method: SBC - Skill: - - {metric: fRPSS, probs: [1/3, 2/3]} - - {metric: BSS10} - - {metric: BSS90} - - {metric: EnsCorr} - - {metric: Bias} - Indicators: - index: FALSE - Output_format: S2S4E - -Run: - Loglevel: INFO - Terminal: TRUE - output_dir: /esarchive/scratch/lpalma/git/auto-s2s/out-logs/ - code_dir: /esarchive/scratch/lpalma/git/auto-s2s/ diff --git a/recipes/tests/old_tests/seasonal_testWorkflow2.yml b/recipes/tests/old_tests/seasonal_testWorkflow2.yml deleted file mode 100644 index 4b05eb8c..00000000 --- a/recipes/tests/old_tests/seasonal_testWorkflow2.yml +++ /dev/null @@ -1,54 +0,0 @@ -Description: - Author: N.Pérez-Zanón - Info: This is a test to transform s2s4e data-analysis for SEAS5 - -Analysis: - Variables: - ECVs: - - {name: tas, freq: monthly_mean} - Indicators: - - None - Datasets: - System: - - name: system5c3s - Multimodel: False - Reference: - - {name: era5} - Time: - sdate: - fcst_year: 2021 - fcst_month: 07 - fcst_day: 01 - hcst_start: 2000 - hcst_end: 2002 - leadtimemin: 2 - leadtimemax: 4 - Region: - Global: TRUE - Aggregation: False - Regional: - - {latmin: -90, latmax: 90, lonmin: 0, lonmax: 360} - - {latmin: -10, latmax: 10, lonmin: 0, lonmax: 20} - Regrid: - method: bilinear - type: system - Workflow: - Calibration: - method: SBC - Skill: - - {metric: fRPSS, probs: [1/3, 2/3]} - - {metric: BSS10} - - {metric: BSS90} - - {metric: EnsCorr} - - {metric: Bias} - Indicators: - index: FALSE - Output_format: S2S4E - -Run: - Loglevel: INFO - Terminal: TRUE - output_dir: /esarchive/scratch/lpalma/git/auto-s2s/out-logs/ - code_dir: /esarchive/scratch/lpalma/git/auto-s2s/ - - diff --git a/recipes/tests/old_tests/seasonal_testWorkflow3.yml b/recipes/tests/old_tests/seasonal_testWorkflow3.yml deleted file mode 100644 index 2b544fa6..00000000 --- a/recipes/tests/old_tests/seasonal_testWorkflow3.yml +++ /dev/null @@ -1,52 +0,0 @@ -Description: - Author: N.Pérez-Zanón - Info: This is a test to transform s2s4e data-analysis for SEAS5 - -Analysis: - Horizon: Seasonal - Variables: - ECVs: - - {name: tas, freq: monthly_mean} - Indicators: - - None - Datasets: - System: - - name: system5c3s - Multimodel: False - Reference: - - {name: era5} - Time: - sdate: - fcst_year: 2021 - fcst_month: 07 - fcst_day: 01 - hcst_start: 2000 - hcst_end: 2002 - leadtimemin: 2 - leadtimemax: 4 - Region: - Global: TRUE - Aggregation: False - Regional: - - {latmin: -90, latmax: 90, lonmin: 0, lonmax: 360} - - {latmin: -10, latmax: 10, lonmin: 0, lonmax: 20} - Regrid: - method: bilinear - type: system - Workflow: - Calibration: - - {method: SBC} - - {method: VarianceInflation} - Skill: - - {metric: fRPSS, probs: [1/3, 2/3]} - - {metric: BSS10} - - {metric: BSS90} - - {metric: EnsCorr} - - {metric: Bias} - Output_format: S2S4E - -Run: - Loglevel: INFO - Terminal: TRUE - output_dir: /esarchive/scratch/lpalma/git/auto-s2s/out-logs/ - code_dir: /esarchive/scratch/lpalma/git/auto-s2s/ diff --git a/recipes/tests/old_tests/seasonal_testWorkflow4.yml b/recipes/tests/old_tests/seasonal_testWorkflow4.yml deleted file mode 100644 index e3f9499c..00000000 --- a/recipes/tests/old_tests/seasonal_testWorkflow4.yml +++ /dev/null @@ -1,53 +0,0 @@ -Description: - Author: N.Pérez-Zanón - Info: This is a test to transform s2s4e data-analysis for SEAS5 - -Analysis: - Horizon: Seasonal - Variables: - ECVs: - - {name: tas, freq: monthly_mean} - Indicators: - - None - Datasets: - System: - - name: system5c3s - Multimodel: False - Reference: - - {name: era5} - Time: - sdate: - fcst_year: 2021 - fcst_month: 07 - fcst_day: 01 - hcst_start: 2000 - hcst_end: 2002 - leadtimemin: 2 - leadtimemax: 4 - Region: - Global: TRUE - Aggregation: False - Regional: - - {latmin: -90, latmax: 90, lonmin: 0, lonmax: 360} - - {latmin: -10, latmax: 10, lonmin: 0, lonmax: 20} - Regrid: - method: bilinear - type: system - Workflow: - Calibration: - method: None - Skill: - - {metric: fRPSS, probs: [1/3, 2/3]} - - {metric: BSS10} - - {metric: BSS90} - - {metric: EnsCorr} - - {metric: Bias} - Indicators: - index: FALSE - Output_format: S2S4E - -Run: - Loglevel: INFO - Terminal: TRUE - output_dir: /esarchive/scratch/lpalma/git/auto-s2s/out-logs/ - code_dir: /esarchive/scratch/lpalma/git/auto-s2s/ diff --git a/recipes/tests/old_tests/seasonal_testWorkflow5.yml b/recipes/tests/old_tests/seasonal_testWorkflow5.yml deleted file mode 100644 index 7029db3c..00000000 --- a/recipes/tests/old_tests/seasonal_testWorkflow5.yml +++ /dev/null @@ -1,51 +0,0 @@ -Description: - Author: N.Pérez-Zanón - Info: This is a test to transform s2s4e data-analysis for SEAS5 - -Analysis: - Horizon: Seasonal - Variables: - ECVs: - - {name: tas, freq: monthly_mean} - Indicators: - - None - Datasets: - System: - - name: system5c3s - Multimodel: False - Reference: - - {name: era5} - Time: - sdate: - fcst_year: 2021 - fcst_month: 07 - fcst_day: 01 - hcst_start: 2000 - hcst_end: 2002 - leadtimemin: 2 - leadtimemax: 4 - Region: - Global: TRUE - Aggregation: False - Regional: - - {latmin: -90, latmax: 90, lonmin: 0, lonmax: 360} - - {latmin: -10, latmax: 10, lonmin: 0, lonmax: 20} - Regrid: - method: bilinear - type: system - Workflow: - Calibration: FALSE - Skill: - - {metric: fRPSS, probs: [1/3, 2/3]} - - {metric: BSS10} - - {metric: BSS90} - - {metric: EnsCorr} - - {metric: Bias} - Indicators: FALSE - Output_format: S2S4E - -Run: - Loglevel: INFO - Terminal: TRUE - output_dir: /esarchive/scratch/lpalma/git/auto-s2s/out-logs/ - code_dir: /esarchive/scratch/lpalma/git/auto-s2s/ diff --git a/recipes/tests/old_tests/seasonal_testWorkflow6.yml b/recipes/tests/old_tests/seasonal_testWorkflow6.yml deleted file mode 100644 index 94417582..00000000 --- a/recipes/tests/old_tests/seasonal_testWorkflow6.yml +++ /dev/null @@ -1,53 +0,0 @@ -Description: - Author: N.Pérez-Zanón - Info: This is a test to transform s2s4e data-analysis for SEAS5 - -Analysis: - Horizon: Seasonal - Variables: - ECVs: - - {name: tas, freq: monthly_mean} - Indicators: - - None - Datasets: - System: - - name: system5c3s - Multimodel: False - Reference: - - {name: era5} - Time: - sdate: - fcst_year: 2021 - fcst_month: 07 - fcst_day: 01 - hcst_start: 2000 - hcst_end: 2002 - leadtimemin: 2 - leadtimemax: 4 - Region: - Global: TRUE - Aggregation: False - Regional: - - {latmin: -90, latmax: 90, lonmin: 0, lonmax: 360} - - {latmin: -10, latmax: 10, lonmin: 0, lonmax: 20} - Regrid: - method: bilinear - type: system - Workflow: - Skill: - - {metric: EnsCorr} - - {metric: Bias} - Calibration: - method: SBC - Skill: - - {metric: EnsCorr} - - {metric: Bias} - Indicators: - index: FALSE - Output_format: S2S4E - -Run: - Loglevel: INFO - Terminal: TRUE - output_dir: /esarchive/scratch/lpalma/git/auto-s2s/out-logs/ - code_dir: /esarchive/scratch/lpalma/git/auto-s2s/ diff --git a/recipes/tests/old_tests/seasonal_testWorkflow7.yml b/recipes/tests/old_tests/seasonal_testWorkflow7.yml deleted file mode 100644 index 595b677b..00000000 --- a/recipes/tests/old_tests/seasonal_testWorkflow7.yml +++ /dev/null @@ -1,53 +0,0 @@ -Description: - Author: N.Pérez-Zanón - Info: This is a test to transform s2s4e data-analysis for SEAS5 - -Analysis: - Horizon: Seasonal - Variables: - ECVs: - - {name: tas, freq: monthly_mean} - Indicators: - - None - Datasets: - System: - - name: system5c3s - Multimodel: False - Reference: - - {name: era5} - Time: - sdate: - fcst_year: 2021 - fcst_month: 07 - fcst_day: 01 - hcst_start: 2000 - hcst_end: 2002 - leadtimemin: 2 - leadtimemax: 4 - Region: - Global: TRUE - Aggregation: False - Regional: - - {latmin: -90, latmax: 90, lonmin: 0, lonmax: 360} - - {latmin: -10, latmax: 10, lonmin: 0, lonmax: 20} - Regrid: - method: bilinear - type: system - Workflow: - Skill_1: - - {metric: EnsCorr} - - {metric: Bias} - Calibration: - method: SBC - Skill_2: - - {metric: EnsCorr} - - {metric: Bias} - Indicators: - index: FALSE - Output_format: S2S4E - -Run: - Loglevel: INFO - Terminal: TRUE - output_dir: /esarchive/scratch/lpalma/git/auto-s2s/out-logs/ - code_dir: /esarchive/scratch/lpalma/git/auto-s2s/ diff --git a/recipes/tests/old_tests/seasonal_testWorkflow8.yml b/recipes/tests/old_tests/seasonal_testWorkflow8.yml deleted file mode 100644 index b6d0c662..00000000 --- a/recipes/tests/old_tests/seasonal_testWorkflow8.yml +++ /dev/null @@ -1,51 +0,0 @@ -Description: - Author: N.Pérez-Zanón - Info: This is a test to transform s2s4e data-analysis for SEAS5 - -Analysis: - Horizon: Seasonal - Variables: - Indicators: - - {name: gdd} - Datasets: - System: - - name: system5c3s - Multimodel: False - Reference: - - {name: era5} - Time: - sdate: - fcst_year: 2021 - fcst_month: 07 - fcst_day: 01 - hcst_start: 2000 - hcst_end: 2002 - leadtimemin: 2 - leadtimemax: 4 - Region: - Global: TRUE - Aggregation: False - Regional: - - {latmin: -90, latmax: 90, lonmin: 0, lonmax: 360} - - {latmin: -10, latmax: 10, lonmin: 0, lonmax: 20} - Regrid: - method: bilinear - type: system - Workflow: - Calibration: - method: SBC - Skill: - - {metric: fRPSS, probs: [1/3, 2/3]} - - {metric: BSS10} - - {metric: BSS90} - - {metric: EnsCorr} - - {metric: Bias} - Indicators: - index: TRUE - Output_format: S2S4E - -Run: - Loglevel: INFO - Terminal: TRUE - output_dir: /esarchive/scratch/lpalma/git/auto-s2s/out-logs/ - code_dir: /esarchive/scratch/lpalma/git/auto-s2s/ \ No newline at end of file -- GitLab From 7c8a6acb518a57dbc2d20759817fb97e44b46c33 Mon Sep 17 00:00:00 2001 From: aho Date: Fri, 15 Sep 2023 10:39:14 +0200 Subject: [PATCH 273/388] add tmp function; specify function parameters to avoid warning --- .../R/plot_most_likely_terciles_map.R | 4 +- modules/Visualization/R/tmp/ColorBar_onebox.R | 496 ++++++++++++++++++ 2 files changed, 499 insertions(+), 1 deletion(-) create mode 100644 modules/Visualization/R/tmp/ColorBar_onebox.R diff --git a/modules/Visualization/R/plot_most_likely_terciles_map.R b/modules/Visualization/R/plot_most_likely_terciles_map.R index 698619c8..93d36042 100644 --- a/modules/Visualization/R/plot_most_likely_terciles_map.R +++ b/modules/Visualization/R/plot_most_likely_terciles_map.R @@ -6,7 +6,7 @@ source("modules/Visualization/R/tmp/ColorBar.R") source("modules/Visualization/R/tmp/clim.palette.R") source("modules/Visualization/R/tmp/Utils.R") source("modules/Visualization/R/tmp/PlotEquiMap.R") -source("/esarchive/scratch/aho/tmp/ColorBar_onebox.R") +source("modules/Visualization/R/tmp/ColorBar_onebox.R") source("modules/Visualization/R/tmp/GradientCatsColorBar.R") ## TODO: Change name @@ -213,6 +213,8 @@ plot_most_likely_terciles <- function(recipe, tmp$brks <- 4 tmp$draw_ticks <- F tmp$box_label <- "> 40" + tmp$triangle_ends <- c(F, F) + tmp$draw_separators <- FALSE do.call(ColorBar_onebox, tmp) } } diff --git a/modules/Visualization/R/tmp/ColorBar_onebox.R b/modules/Visualization/R/tmp/ColorBar_onebox.R new file mode 100644 index 00000000..679600df --- /dev/null +++ b/modules/Visualization/R/tmp/ColorBar_onebox.R @@ -0,0 +1,496 @@ +#============================================================================ +# This function is adapted from s2dv::ColorBar. It plots only one box with the proper +# width, which is manipulated by the length of breaks. +#============================================================================ +ColorBar_onebox <- function(brks = NULL, cols = NULL, vertical = TRUE, + subsampleg = NULL, bar_limits = NULL, var_limits = NULL, + triangle_ends = NULL, col_inf = NULL, col_sup = NULL, + color_fun = clim.palette(), plot = TRUE, + draw_ticks = TRUE, draw_separators = FALSE, + triangle_ends_scale = 1, extra_labels = NULL, + title = NULL, title_scale = 1, + label_scale = 1, tick_scale = 1, + extra_margin = rep(0, 4), label_digits = 4, box_label = NULL, ...) { + # Required checks +#---------NEW---------- +# if ((is.null(brks) || length(brks) < 2) && is.null(bar_limits) && is.null(var_limits)) { +# stop("At least one of 'brks' with the desired breaks, 'bar_limits' or ", +# "'var_limits' must be provided to generate the colour bar.") +# } + + # Check brks + if (is.null(brks)) { + stop("Parameter 'brks' must be provided.") + } + if (!is.numeric(brks) | length(brks) > 1) { + stop("Parameter 'brks' must be a number.") + } + + # Check bar_limits + if (!is.null(bar_limits)) { + if (!(all(is.na(bar_limits) | is.numeric(bar_limits)) && (length(bar_limits) == 2))) { + stop("Parameter 'bar_limits' must be a vector of two numeric elements or NAs.") + } +#-------NEW---------- + } else { + # randomly set a value + bar_limits <- c(0, 100) + } +#-------NEW_END----------- + + # Check var_limits + if (!is.null(var_limits)) { + if (!(is.numeric(var_limits) && (length(var_limits) == 2))) { + stop("Parameter 'var_limits' must be a numeric vector of length 2.") + } else if (anyNA(var_limits)) { + stop("Parameter 'var_limits' must not contain NA values.") + } else if (any(is.infinite(var_limits))) { + stop("Parameter 'var_limits' must not contain infinite values.") + } + } + + # Check cols + if (!is.null(cols)) { + if (!is.character(cols)) { + stop("Parameter 'cols' must be a vector of character strings.") + } else if (any(!sapply(cols, .IsColor))) { + stop("Parameter 'cols' must contain valid colour identifiers.") + } + } + + # Check color_fun + if (!is.function(color_fun)) { + stop("Parameter 'color_fun' must be a colour-generator function.") + } + + # Check integrity among brks, bar_limits and var_limits + if (is.null(brks) || (length(brks) < 2)) { + if (is.null(brks)) { + if (is.null(cols)) { + brks <- 21 + } else { + brks <- length(cols) + 1 + } + } + if (is.null(bar_limits) || anyNA(bar_limits)) { + # var_limits is defined + if (is.null(bar_limits)) { + bar_limits <- c(NA, NA) + } + half_width <- 0.5 * (var_limits[2] - var_limits[1]) / (brks - 1) + bar_limits[which(is.na(bar_limits))] <- c(var_limits[1] - half_width, var_limits[2] + half_width)[which(is.na(bar_limits))] + brks <- seq(bar_limits[1], bar_limits[2], length.out = brks) + } else if (is.null(var_limits)) { + # bar_limits is defined + var_limits <- bar_limits + half_width <- 0.5 * (var_limits[2] - var_limits[1]) / (brks - 1) + brks <- seq(bar_limits[1], bar_limits[2], length.out = brks) + var_limits[1] <- var_limits[1] + half_width / 50 + } else { + # both bar_limits and var_limits are defined + brks <- seq(bar_limits[1], bar_limits[2], length.out = brks) + } + } else if (is.null(bar_limits)) { + if (is.null(var_limits)) { + # brks is defined + bar_limits <- c(head(brks, 1), tail(brks, 1)) + var_limits <- bar_limits + half_width <- 0.5 * (var_limits[2] - var_limits[1]) / (length(brks) - 1) + var_limits[1] <- var_limits[1] + half_width / 50 + } else { + # brks and var_limits are defined + bar_limits <- c(head(brks, 1), tail(brks, 1)) + } + } else { + # brks and bar_limits are defined + # or + # brks, bar_limits and var_limits are defined + if (head(brks, 1) != bar_limits[1] || tail(brks, 1) != bar_limits[2]) { + stop("Parameters 'brks' and 'bar_limits' are inconsistent.") + } + } + +#--------NEW------------ + white_num <- length(brks) / 2 - 1 + if (length(brks) != 2 & length(cols) == 1) { + # Add whites at two sides + if (white_num %% 1 == 0) { + cols <- c(rep("white", white_num), cols, rep("white", white_num)) + } else { + warning("Set brks length even number so the color box can be in the center.") + cols <- c(rep("white", white_num), cols, rep("white", white_num), "white") + } + } +#------NEW_END---------- + + # Check col_inf + if (!is.null(col_inf)) { + if (!.IsColor(col_inf)) { + stop("Parameter 'col_inf' must be a valid colour identifier.") + } + } + + # Check col_sup + if (!is.null(col_sup)) { + if (!.IsColor(col_sup)) { + stop("Parameter 'col_sup' must be a valid colour identifier.") + } + } + + # Check triangle_ends + if (is.null(triangle_ends)) { + triangle_ends <- c(F, F) + } else if (!identical(triangle_ends, c(FALSE, FALSE))) { + warning("Plotting triangle ends is not a valid option. Set parameter 'triangle_ends' to c(F, F).") + triangle_ends <- c(F, F) + } +#------------NEW----------------- +# if (!is.null(triangle_ends) && (!is.logical(triangle_ends) || length(triangle_ends) != 2)) { +# stop("Parameter 'triangle_ends' must be a logical vector with two elements.") +# } +# teflc <- triangle_ends_from_limit_cols <- c(!is.null(col_inf), !is.null(col_sup)) +# if (is.null(triangle_ends) && is.null(col_inf) && is.null(col_sup)) { +# triangle_ends <- c(FALSE, FALSE) +# if (bar_limits[1] >= var_limits[1]) { +# triangle_ends[1] <- TRUE +# } +# if (bar_limits[2] < var_limits[2]) { +# triangle_ends[2] <- TRUE +# } +# } else if (!is.null(triangle_ends) && is.null(col_inf) && is.null(col_sup)) { +# triangle_ends <- triangle_ends +# } else if (is.null(triangle_ends) && (!is.null(col_inf) || !is.null(col_sup))) { +# triangle_ends <- teflc +# } else if (any(teflc != triangle_ends)) { +# if (!is.null(brks) && length(brks) > 1 && !is.null(cols) && length(cols) >= length(brks)) { +# triangle_ends <- teflc +# } else if (!is.null(cols)) { +# triangle_ends <- teflc +# } else { +# triangle_ends <- triangle_ends +# } +# } +# if (plot) { +# if ((bar_limits[1] >= var_limits[1]) && !triangle_ends[1]) { +# .warning("There are variable values smaller or equal to the lower limit ", +# "of the colour bar and the lower triangle end has been ", +# "disabled. These will be painted in the colour for NA values.") +# } +# if ((bar_limits[2] < var_limits[2]) && !triangle_ends[2]) { +# .warning("There are variable values greater than the higher limit ", +# "of the colour bar and the higher triangle end has been ", +# "disabled. These will be painted in the colour for NA values.") +# } +# } +#--------NEW_END------------ + + # Generate colours if needed + if (is.null(cols)) { + cols <- color_fun(length(brks) - 1 + sum(triangle_ends)) + attr_bk <- attributes(cols) + if (triangle_ends[1]) { + if (is.null(col_inf)) col_inf <- head(cols, 1) + cols <- cols[-1] + } + if (triangle_ends[2]) { + if (is.null(col_sup)) col_sup <- tail(cols, 1) + cols <- cols[-length(cols)] + } + attributes(cols) <- attr_bk + } else if ((length(cols) != (length(brks) - 1))) { + stop("Incorrect number of 'brks' and 'cols'. There must be one more break than the number of colours.") + } + + # Check vertical + if (!is.logical(vertical)) { + stop("Parameter 'vertical' must be TRUE or FALSE.") + } + + # Check extra_labels + if (is.null(extra_labels)) { + extra_labels <- numeric(0) + } + if (!is.numeric(extra_labels)) { + stop("Parameter 'extra_labels' must be numeric.") + } else { + if (any(extra_labels > bar_limits[2]) || any(extra_labels < bar_limits[1])) { + stop("Parameter 'extra_labels' must not contain ticks beyond the color bar limits.") + } + } + extra_labels <- sort(extra_labels) + + # Check subsampleg + primes <- function(x) { + # Courtesy of Chase. See http://stackoverflow.com/questions/6424856/r-function-for-returning-all-factors + x <- as.integer(x) + div <- seq_len(abs(x)) + factors <- div[x %% div == 0L] + factors <- list(neg = -factors, pos = factors) + return(factors) + } + remove_final_tick <- FALSE + added_final_tick <- TRUE + if (is.null(subsampleg)) { + subsampleg <- 1 + while (length(brks) / subsampleg > 15 - 1) { + next_factor <- primes((length(brks) - 1) / subsampleg)$pos + next_factor <- next_factor[length(next_factor) - ifelse(length(next_factor) > 2, 1, 0)] + subsampleg <- subsampleg * next_factor + } + if (subsampleg > (length(brks) - 1) / 4) { + subsampleg <- max(1, round(length(brks) / 4)) + extra_labels <- c(extra_labels, bar_limits[2]) + added_final_tick <- TRUE + if ((length(brks) - 1) %% subsampleg < (length(brks) - 1) / 4 / 2) { + remove_final_tick <- TRUE + } + } + } else if (!is.numeric(subsampleg)) { + stop("Parameter 'subsampleg' must be numeric.") + } + subsampleg <- round(subsampleg) + draw_labels <- TRUE + if ((subsampleg) < 1) { + draw_labels <- FALSE + } + + # Check plot + if (!is.logical(plot)) { + stop("Parameter 'plot' must be logical.") + } + + # Check draw_separators + if (!is.logical(draw_separators)) { + stop("Parameter 'draw_separators' must be logical.") + } +#--------NEW---------- + if (draw_separators) { + warning("Draw only one box. Parameter 'draw_separators' is not effective.") + draw_separators <- FALSE + } +#--------NEW_END---------- + + # Check triangle_ends_scale + if (!is.numeric(triangle_ends_scale)) { + stop("Parameter 'triangle_ends_scale' must be numeric.") + } + + # Check draw_ticks + if (!is.logical(draw_ticks)) { + stop("Parameter 'draw_ticks' must be logical.") + } + + # Check title + if (is.null(title)) { + title <- '' + } + if (!is.character(title)) { + stop("Parameter 'title' must be a character string.") + } + + # Check title_scale + if (!is.numeric(title_scale)) { + stop("Parameter 'title_scale' must be numeric.") + } + + # Check label_scale + if (!is.numeric(label_scale)) { + stop("Parameter 'label_scale' must be numeric.") + } + + # Check tick_scale + if (!is.numeric(tick_scale)) { + stop("Parameter 'tick_scale' must be numeric.") + } + + # Check extra_margin + if (!is.numeric(extra_margin) || length(extra_margin) != 4) { + stop("Parameter 'extra_margin' must be a numeric vector of length 4.") + } + + # Check label_digits + if (!is.numeric(label_digits)) { + stop("Parameter 'label_digits' must be numeric.") + } + label_digits <- round(label_digits) + + # Process the user graphical parameters that may be passed in the call + ## Graphical parameters to exclude + excludedArgs <- c("cex", "cex.axis", "col", "lab", "las", "mar", "mgp", "new", "ps") + userArgs <- .FilterUserGraphicArgs(excludedArgs, ...) + + # + # Plotting colorbar + # ~~~~~~~~~~~~~~~~~~~ + # + if (plot) { + pars_to_save <- c('mar', 'cex', names(userArgs), 'mai', 'mgp', 'las', 'xpd') + saved_pars <- par(pars_to_save) + par(mar = c(0, 0, 0, 0), cex = 1) + image(1, 1, t(t(1)), col = rgb(0, 0, 0, 0), axes = FALSE, xlab = '', ylab = '') + # Get the availale space + figure_size <- par('fin') + cs <- par('csi') + # This allows us to assume we always want to plot horizontally + if (vertical) { + figure_size <- rev(figure_size) + } +# pannel_to_redraw <- par('mfg') +# .SwitchToFigure(pannel_to_redraw[1], pannel_to_redraw[2]) + # Load the user parameters + par(new = TRUE) + par(userArgs) + # Set up color bar plot region + margins <- c(0.0, 0, 0.0, 0) + cex_title <- 1 * title_scale + cex_labels <- 0.9 * label_scale + cex_ticks <- -0.3 * tick_scale + spaceticklab <- max(-cex_ticks, 0) + if (vertical) { + margins[1] <- margins[1] + (1.2 * cex_labels * 3 + spaceticklab) * cs + margins <- margins + extra_margin[c(4, 1:3)] * cs + } else { + margins[1] <- margins[1] + (1.2 * cex_labels * 1 + spaceticklab) * cs + margins <- margins + extra_margin * cs + } + if (title != '') { + margins[3] <- margins[3] + (1.0 * cex_title) * cs + } + margins[3] <- margins[3] + sqrt(figure_size[2] / (margins[1] + margins[3])) * + figure_size[2] / 6 * ifelse(title != '', 0.5, 0.8) + # Set side margins + margins[2] <- margins[2] + figure_size[1] / 16 + margins[4] <- margins[4] + figure_size[1] / 16 + triangle_ends_prop <- 1 / 32 * triangle_ends_scale + triangle_ends_cex <- triangle_ends_prop * figure_size[2] + if (triangle_ends[1]) { + margins[2] <- margins[2] + triangle_ends_cex + } + if (triangle_ends[2]) { + margins[4] <- margins[4] + triangle_ends_cex + } + ncols <- length(cols) + # Set up the points of triangles + # Compute the proportion of horiz. space occupied by one plot unit + prop_unit <- (1 - (margins[2] + margins[4]) / figure_size[1]) / ncols + # Convert triangle height to plot inits + triangle_height <- triangle_ends_prop / prop_unit + left_triangle <- list(x = c(1, 1 - triangle_height, 1) - 0.5, + y = c(1.4, 1, 0.6)) + right_triangle <- list(x = c(ncols, ncols + triangle_height, ncols) + 0.5, + y = c(1.4, 1, 0.6)) + # Draw the color squares and title + if (vertical) { + par(mai = c(margins[2:4], margins[1]), + mgp = c(0, spaceticklab + 0.2, 0), las = 1) + d <- 4 + image(1, 1:ncols, t(1:ncols), axes = FALSE, col = cols, + xlab = '', ylab = '') + title(ylab = title, line = cex_title * (0.2 + 0.1), cex.lab = cex_title) + # Draw top and bottom border lines + lines(c(0.6, 0.6), c(1 - 0.5, ncols + 0.5)) + lines(c(1.4, 1.4), c(1 - 0.5, ncols + 0.5)) + # Rotate triangles + names(left_triangle) <- rev(names(left_triangle)) + names(right_triangle) <- rev(names(right_triangle)) + } else { + # The term - cex_labels / 4 * (3 / cex_labels - 1) was found by + # try and error + par(mai = margins, + mgp = c(0, cex_labels / 2 + spaceticklab + - cex_labels / 4 * (3 / cex_labels - 1), 0), + las = 1) + d <- 1 + image(1:ncols, 1, t(t(1:ncols)), axes = FALSE, col = cols, + xlab = '', ylab = '') + title(title, line = cex_title * (0.2 + 0.1), cex.main = cex_title) +#---------NEW--------------- + # Draw top and bottom border lines + lines(c(1 - 0.5 + white_num, ncols + 0.5 - white_num), c(0.6, 0.6)) + lines(c(1 - 0.5 + white_num, ncols + 0.5 - white_num), c(1.4, 1.4)) +#---------NEW_END-------------- + tick_length <- -0.4 + } + # Draw the triangles + par(xpd = TRUE) + if (triangle_ends[1]) { + # Draw left triangle + polygon(left_triangle$x, left_triangle$y, col = col_inf, border = NA) + lines(left_triangle$x, left_triangle$y) + } + if (triangle_ends[2]) { + # Draw right triangle + polygon(right_triangle$x, right_triangle$y, col = col_sup, border = NA) + lines(right_triangle$x, right_triangle$y) + } + par(xpd = FALSE) + + # Put the separators + if (vertical) { + if (draw_separators) { + for (i in 1:(ncols - 1)) { + lines(c(0.6, 1.4), c(i, i) + 0.5) + } + } + if (draw_separators || is.null(col_inf)) { + lines(c(0.6, 1.4), c(0.5, 0.5)) + } + if (draw_separators || is.null(col_sup)) { + lines(c(0.6, 1.4), c(ncols + 0.5, ncols + 0.5)) + } + } else { + if (draw_separators) { + for (i in 1:(ncols - 1)) { + lines(c(i, i) + 0.5, c(0.6, 1.4)) + } + } +#----------NEW------------- +# if (draw_separators || is.null(col_inf)) { +# lines(c(0.5, 0.5), c(0.6, 1.4)) +# } +# if (draw_separators || is.null(col_sup)) { +# lines(c(ncols + 0.5, ncols + 0.5), c(0.6, 1.4)) +# } +#---------NEW_END------------- + } +#---------NEW------------- + # Draw vertical border lines + lines(c(0.5 + white_num, 0.5 + white_num), c(0.6, 1.4)) + lines(c(ncols + 0.5 - white_num, ncols + 0.5 - white_num), c(0.6, 1.4)) +#-------NEW_END----------- + + # Put the ticks + plot_range <- length(brks) - 1 + var_range <- tail(brks, 1) - head(brks, 1) + extra_labels_at <- ((extra_labels - head(brks, 1)) / var_range) * plot_range + 0.5 + at <- seq(1, length(brks), subsampleg) + labels <- brks[at] + # Getting rid of next-to-last tick if too close to last one + if (remove_final_tick) { + at <- at[-length(at)] + labels <- labels[-length(labels)] + } + labels <- signif(labels, label_digits) + if (added_final_tick) { + extra_labels[length(extra_labels)] <- signif(tail(extra_labels, 1), label_digits) + } + at <- at - 0.5 + at <- c(at, extra_labels_at) + labels <- c(labels, extra_labels) + tick_reorder <- sort(at, index.return = TRUE) + at <- tick_reorder$x + if (draw_labels) { + labels <- labels[tick_reorder$ix] + } else { + labels <- FALSE + } +#---------NEW---------- + if (is.null(box_label)) box_label <- "" + axis(d, at = mean(at), tick = draw_ticks, labels = box_label, cex.axis = cex_labels, tcl = cex_ticks) +# axis(d, at = at, tick = draw_ticks, labels = labels, cex.axis = cex_labels, tcl = cex_ticks) +#-------NEW_END---------- + par(saved_pars) + } + invisible(list(brks = brks, cols = cols, col_inf = col_inf, col_sup = col_sup)) +} + -- GitLab From 97a835540c4601155defab67a1096d608c9343c0 Mon Sep 17 00:00:00 2001 From: eduzenli Date: Fri, 15 Sep 2023 15:25:12 +0200 Subject: [PATCH 274/388] all updates of CSDownscale are included --- modules/Downscaling/Downscaling.R | 92 +++++++++++++------------ modules/Downscaling/tmp/Analogs.R | 22 ++++-- modules/Downscaling/tmp/Intbc.R | 42 +++++------ modules/Downscaling/tmp/Interpolation.R | 10 +-- modules/Downscaling/tmp/Intlr.R | 20 ++++-- modules/Downscaling/tmp/LogisticReg.R | 23 ++++--- modules/Downscaling/tmp/Utils.R | 2 +- 7 files changed, 114 insertions(+), 97 deletions(-) diff --git a/modules/Downscaling/Downscaling.R b/modules/Downscaling/Downscaling.R index c6456da4..306c6dce 100644 --- a/modules/Downscaling/Downscaling.R +++ b/modules/Downscaling/Downscaling.R @@ -30,11 +30,11 @@ downscale_datasets <- function(recipe, data) { # Downscaling function params int_method <- tolower(recipe$Analysis$Workflow$Downscaling$int_method) bc_method <- tolower(recipe$Analysis$Workflow$Downscaling$bc_method) - cal_method <- tolower(recipe$Analysis$Workflow$Downscaling$cal_method) lr_method <- tolower(recipe$Analysis$Workflow$Downscaling$lr_method) log_reg_method <- tolower(recipe$Analysis$Workflow$Downscaling$log_reg_method) target_grid <- tolower(recipe$Analysis$Workflow$Downscaling$target_grid) nanalogs <- as.numeric(recipe$Analysis$Workflow$Downscaling$nanalogs) + size <- recipe$Analysis$Workflow$Downscaling$size if (is.null(recipe$Analysis$ncores)) { ncores <- 1 @@ -50,7 +50,7 @@ downscale_datasets <- function(recipe, data) { } DOWNSCAL_TYPES <- c("none", "int", "intbc", "intlr", "analogs", "logreg") - BC_METHODS <- c("simple_bias", "calibration", "quantile_mapping", "sbc", "cal", "qm") + BC_METHODS <- c("quantile_mapping", "bias", "evmos", "mse_min", "crps_min", "rpc-based", "qm") LR_METHODS <- c("basic", "large-scale", "4nn") LOG_REG_METHODS <- c("ens_mean", "ens_mean_sd", "sorted_members") @@ -103,8 +103,8 @@ downscale_datasets <- function(recipe, data) { if (is.null(bc_method)) { stop("Please provide one bias-correction method in the recipe. Accepted ", - "methods are 'simple_bias', 'calibration', 'quantile_mapping', 'sbc', 'cal', ", - "'qm'.") + "methods are 'quantile_mapping', 'bias', 'evmos', 'mse_min', 'crps_min' ", + "'rpc-based', 'qm'. ") } if (is.null(target_grid)) { @@ -113,46 +113,23 @@ downscale_datasets <- function(recipe, data) { if (!(bc_method %in% BC_METHODS)) { stop(paste0(bc_method, " method in the recipe is not available. Accepted methods ", - "are 'simple_bias', 'calibration', 'quantile_mapping', 'sbc', 'cal', 'qm'.")) + "are 'quantile_mapping', 'bias', 'evmos', 'mse_min', 'crps_min' ", + "'rpc-based', 'qm'.")) } - if (bc_method=="cal" | bc_method=="calibration") - { - if (length(cal_method)==0) { - stop("Please provide one (and only one) calibration method in the recipe.") - } - - hcst_downscal <- CST_Intbc(data$hcst, data$obs, - target_grid = target_grid, - bc_method = bc_method, - int_method = int_method, - cal.method = cal_method, - points = NULL, - method_point_interp = NULL, - lat_dim = "latitude", - lon_dim = "longitude", - sdate_dim = "syear", - member_dim = "ensemble", - region = NULL, - ncores = ncores) - - DOWNSCAL_MSG <- "##### DOWNSCALING COMPLETE #####" - } else - { - hcst_downscal <- CST_Intbc(data$hcst, data$obs, - target_grid = target_grid, - bc_method = bc_method, - int_method = int_method, - points = NULL, - method_point_interp = NULL, - lat_dim = "latitude", - lon_dim = "longitude", - sdate_dim = "syear", - member_dim = "ensemble", - region = NULL, - ncores = ncores) + hcst_downscal <- CST_Intbc(data$hcst, data$obs, + target_grid = target_grid, + bc_method = bc_method, + int_method = int_method, + points = NULL, + method_point_interp = NULL, + lat_dim = "latitude", + lon_dim = "longitude", + sdate_dim = "syear", + member_dim = "ensemble", + region = NULL, + ncores = ncores) DOWNSCAL_MSG <- "##### DOWNSCALING COMPLETE #####" - } } else if (type == "intlr") { if (length(int_method) == 0) { stop("Please provide one (and only one) interpolation method in the recipe.") @@ -206,11 +183,24 @@ downscale_datasets <- function(recipe, data) { "recipe. Setting it to 3.") nanalogs <- 3 } - + + if (!is.null(size) & recipe$Analysis$Variables$freq == "monthly_mean") { + size <- NULL + warning("Size is set to NULL. ", + "It must be NULL for the monthly input data.") + } + + if (!is.null(size)) { + dum <- data$obs$data ## keep obs data before the window process to provide it later as the output + data$obs$data <- .generate_window(data$obs$data,sdate_dim = 'syear',time_dim = 'time',loocv = TRUE,size=size) + data$obs$data <- Apply(data$obs$data,target_dims="window",fun=function (x) x[!is.na(x)])$output1 + } + hcst_downscal <- CST_Analogs(data$hcst, data$obs, - grid_exp = data$hcst$attrs$source_files[1], + grid_exp = data$hcst$attrs$source_files[ + which(!is.na(data$hcst$attrs$source_files))[1]], nanalogs = nanalogs, - fun_analog = "min", + fun_analog = "wmean", lat_dim = "latitude", lon_dim = "longitude", sdate_dim = "syear", @@ -220,6 +210,10 @@ downscale_datasets <- function(recipe, data) { return_indices = FALSE, loocv_window = loocv, ncores = ncores) + + if (!is.null(size)) { + hcst_downscal$obs$data <- Apply(dum,target_dims=c("time","smonth"),function (x) x[1:(dim(data$hcst$data)["time"]),2],ncores=ncores,output_dims="time")$output1 ## 2nd month is the target month + } DOWNSCAL_MSG <- "##### DOWNSCALING COMPLETE #####" } else if (type == "logreg") { @@ -268,7 +262,15 @@ downscale_datasets <- function(recipe, data) { DOWNSCAL_MSG <- "##### DOWNSCALING COMPLETE #####" } - } + } + + if (recipe$Analysis$Horizon == "seasonal" & (recipe$Analysis$Variables$freq == "daily_mean" | recipe$Analysis$Variables$freq == "daily")) { + hcst_downscal$exp$data <- Apply(hcst_downscal$exp$data,target_dims="time",mean)$output1 + hcst_downscal$obs$data <- Apply(hcst_downscal$obs$data,target_dims="time",mean)$output1 + hcst_downscal$exp$data <- InsertDim(hcst_downscal$exp$data,length(names(dim(hcst_downscal$exp$data))),1,name="time") + hcst_downscal$obs$data <- InsertDim(hcst_downscal$obs$data,length(names(dim(hcst_downscal$obs$data))),1,name="time") + } + print(DOWNSCAL_MSG) return(list(hcst = hcst_downscal$exp, obs = hcst_downscal$obs, fcst = NULL)) } diff --git a/modules/Downscaling/tmp/Analogs.R b/modules/Downscaling/tmp/Analogs.R index f0ebd610..99fc45e7 100644 --- a/modules/Downscaling/tmp/Analogs.R +++ b/modules/Downscaling/tmp/Analogs.R @@ -381,7 +381,7 @@ Analogs <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, grid_exp, method_remap = "conservative", region = region, ncores = ncores) # If after interpolating 'obs' data the coordinates do not match, the exp data is interpolated to # the same grid to force the matching - if (!.check_coords(lat1 = obs_interpolated$lat, lat2 = exp_lats, lon1 = obs_interpolated$lon, lon2 = exp_lons)) { + if (!.check_coords(lat1 = as.numeric(obs_interpolated$lat), lat2 = exp_lats, lon1 = as.numeric(obs_interpolated$lon), lon2 = exp_lons)) { exp_interpolated <- Interpolation(exp = exp, lats = exp_lats, lons = exp_lons, target_grid = grid_exp, lat_dim = lat_dim, lon_dim = lon_dim, method_remap = "conservative", region = region, ncores = ncores)$data @@ -394,6 +394,11 @@ Analogs <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, grid_exp, obs_train_interpolated <- .generate_window(obj = obs_interpolated$data, sdate_dim = sdate_dim, time_dim = time_dim, loocv = loocv_window, ncores = ncores) obs_hres <- .generate_window(obj = obs, sdate_dim = sdate_dim, time_dim = time_dim, loocv = loocv_window, ncores = ncores) + } else { + obs_train_interpolated <- obs_interpolated$data + dim(obs_train_interpolated) <- dim(obs_train_interpolated)[-which(names(dim(obs_train_interpolated))=="time")] + obs_hres <- obs + dim(obs_hres) <- dim(obs_hres)[-which(names(dim(obs_hres))=="time")] } #----------------------------------- @@ -443,9 +448,9 @@ Analogs <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, grid_exp, # For each element in test, find the indices of the k nearest neigbhors in train .analogs <- function(train, test, obs_hres, k, fun_analog, return_indices = FALSE) { - + require(FNN) - + # train and obs_hres dim: 3 dimensions window, lat and lon (in this order) # test dim: 2 dimensions lat and lon (in this order) # Number of lats/lons of the high-resolution data @@ -480,6 +485,10 @@ Analogs <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, grid_exp, if (fun_analog == "wmean") { weight <- 1 / dist res <- apply(res, c(1,2), function(x) weighted.mean(x, weight)) + } else if (fun_analog == "min") { + res<-res[,,which.min(dist)] + } else if (fun_analog == "max") { + res<-res[,,which.max(dist)] } else { res <- apply(res, c(1,2), fun_analog) } @@ -489,6 +498,7 @@ Analogs <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, grid_exp, return(res) } + # Add the dimension window to an array that contains, at least, the start date and time # dimensions # object has at least dimensions sdate and time @@ -524,13 +534,13 @@ Analogs <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, grid_exp, fun = as.vector, output_dims = "time", ncores = ncores )$output1 if (loocv) { - obj_window <- Apply(list(obj_new, rtimes, rsdates), target_dims = list(c(time_dim, sdate_dim), NULL, NULL), - fun = function(x, t, s) as.vector(x[(ntimes + t - size):(ntimes + t + size), -s]), + obj_window <- Apply(list(obj_new, rsdates), target_dims = list(c(time_dim, sdate_dim), NULL), + fun = function(x, s) as.vector(x[(ntimes + min(rtimes) - size):(ntimes + max(rtimes) + size), -s]), output_dims = 'window', ncores = ncores)$output1 names(dim(obj_window))[(length(names(dim(obj_window))) - 1):length(names(dim(obj_window)))] <- c(time_dim, sdate_dim) } else { obj_window <- Apply(obj_new, target_dims = c(time_dim, sdate_dim), - fun = function(x) sapply(rtimes, function(t) as.vector(x[(ntimes + t - size):(ntimes + t + size), ])), + fun = function(x) sapply(rtimes, function(t) as.vector(x[(ntimes + min(rtimes) - size):(ntimes + max(rtimes) + size), ])), output_dims = c('window', time_dim), ncores = ncores)$output1 } diff --git a/modules/Downscaling/tmp/Intbc.R b/modules/Downscaling/tmp/Intbc.R index a436f90e..dc5d050b 100644 --- a/modules/Downscaling/tmp/Intbc.R +++ b/modules/Downscaling/tmp/Intbc.R @@ -23,8 +23,8 @@ #'@param target_grid a character vector indicating the target grid to be passed to CDO. #'It must be a grid recognised by CDO or a NetCDF file. #'@param bc_method a character vector indicating the bias adjustment method to be applied after -#'the interpolation. Accepted methods are 'simple_bias', 'calibration', 'quantile_mapping'. The -#'abbreviations 'sbc', 'cal', 'qm' can also be used. +#'the interpolation. Accepted methods are 'quantile_mapping', 'dynamical_bias', 'bias', 'evmos', +#''mse_min', 'crps_min', 'rpc-based'. The abbreviations 'dbc','qm' can also be used. #'@param int_method a character vector indicating the regridding method to be passed to CDORemap. #'Accepted methods are "con", "bil", "bic", "nn", "con2". If "nn" method is to be used, CDO_1.9.8 #'or newer version is required. @@ -135,8 +135,8 @@ CST_Intbc <- function(exp, obs, target_grid, bc_method, int_method = NULL, point #'@param target_grid a character vector indicating the target grid to be passed to CDO. #'It must be a grid recognised by CDO or a NetCDF file. #'@param bc_method a character vector indicating the bias adjustment method to be applied after -#'the interpolation. Accepted methods are 'simple_bias', 'calibration', 'quantile_mapping'. The -#'abbreviations 'sbc', 'cal', 'qm' can also be used. +#'the interpolation. Accepted methods are 'quantile_mapping', 'dynamical_bias', 'bias', 'evmos', +#''mse_min', 'crps_min', 'rpc-based'. The abbreviations 'dbc','qm' can also be used. #'@param int_method a character vector indicating the regridding method to be passed to CDORemap. #'Accepted methods are "con", "bil", "bic", "nn", "con2". If "nn" method is to be used, CDO_1.9.8 #'or newer version is required. @@ -231,11 +231,11 @@ Intbc <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, target_grid, stop("Missing member dimension in 'exp', or does not match the parameter 'member_dim'") } - if (!(bc_method %in% c('sbc', 'cal', 'qm', 'dbc', 'simple_bias', 'calibration', - 'quantile_mapping', 'dynamical_bias'))) { + if (!(bc_method %in% c('qm', 'dbc', 'quantile_mapping', 'dynamical_bias', 'bias', 'evmos', 'mse_min', + 'crps_min', 'rpc-based'))) { stop("Parameter 'bc_method' must be a character vector indicating the bias adjustment method. ", - "Accepted methods are 'simple_bias', 'calibration', 'quantile_mapping'. The abbreviations ", - "'sbc', 'cal', 'qm' can also be used.") + "Accepted methods are 'quantile_mapping', 'dynamical_bias', 'bias', 'evmos', 'mse_min', ", + "'crps_min', 'rpc-based'. The abbreviations 'dbc','qm' can also be used.") } # When observations are pointwise @@ -304,22 +304,7 @@ Intbc <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, target_grid, # which(names(dim(obs_ref)) == sdate_dim), 'sdate') #} - if (bc_method == 'sbc' | bc_method == 'simple_bias') { - if (dim(obs_ref)[sdate_dim] == 1) { - warning('Simple Bias Correction should not be used with only one observation. Returning NA.') - } - - res <- BiasCorrection(exp = exp_interpolated$data, obs = obs_ref, memb_dim = member_dim, - sdate_dim = sdate_dim, ncores = ncores, ...) - } - else if (bc_method == 'cal' | bc_method == 'calibration') { - if (dim(exp_interpolated$data)[member_dim] == 1) { - stop('Calibration must not be used with only one ensemble member.') - } - res <- Calibration(exp = exp_interpolated$data, obs = obs_ref, memb_dim = member_dim, - sdate_dim = sdate_dim, ncores = ncores, ...) - } - else if (bc_method == 'qm' | bc_method == 'quantile_mapping') { + if (bc_method == 'qm' | bc_method == 'quantile_mapping') { res <- QuantileMapping(exp = exp_interpolated$data, obs = obs_ref, na.rm = TRUE, memb_dim = member_dim, sdate_dim = sdate_dim, ncores = ncores, ...) @@ -336,6 +321,15 @@ Intbc <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, target_grid, } # REMEMBER to add na.rm = T in colMeans in .proxiesattractor res <- DynBiasCorrection(exp = exp_interpolated$data, obs = obs_ref, ncores = ncores, ...) + } else { + if (dim(exp_interpolated$data)[member_dim] == 1) { + stop('Calibration must not be used with only one ensemble member.') + } + if (dim(obs_ref)[sdate_dim] == 1) { + warning('Simple Bias Correction should not be used with only one observation. Returning NA.') + } + res <- Calibration(exp = exp_interpolated$data, obs = obs_ref, memb_dim = member_dim, + sdate_dim = sdate_dim, ncores = ncores, cal.method = bc_method) } # Return a list of three elements diff --git a/modules/Downscaling/tmp/Interpolation.R b/modules/Downscaling/tmp/Interpolation.R index 4cf0c1ed..ed79f4fd 100644 --- a/modules/Downscaling/tmp/Interpolation.R +++ b/modules/Downscaling/tmp/Interpolation.R @@ -272,11 +272,11 @@ Interpolation <- function(exp, lats, lons, points = NULL, source_file = NULL, me .warning <- s2dv:::.warning res <- CDORemap(data_array = exp, - lats = lats, - lons = lons, - grid = target_grid, - method = method_remap, - crop = region) + lats = lats, + lons = lons, + grid = target_grid, + method = method_remap, + crop = region) # Return a list res <- list(data = res$data_array, obs = NULL, lon = res$lons, lat = res$lats) diff --git a/modules/Downscaling/tmp/Intlr.R b/modules/Downscaling/tmp/Intlr.R index f31b7d3b..36a7f11b 100644 --- a/modules/Downscaling/tmp/Intlr.R +++ b/modules/Downscaling/tmp/Intlr.R @@ -61,7 +61,7 @@ #'@param large_scale_predictor_dimname a character vector indicating the name of the #'dimension in 'predictors' that contain the predictor variables. See parameter 'predictors'. #'@param loocv a logical indicating whether to apply leave-one-out cross-validation when -#'generating the linear regressions. Default to FALSE. +#'generating the linear regressions. Default to TRUE. #'@param region a numeric vector indicating the borders of the region defined in exp. #'It consists of four elements in this order: lonmin, lonmax, latmin, latmax. lonmin refers #'to the left border, while lonmax refers to the right border. latmin indicates the lower @@ -89,7 +89,7 @@ CST_Intlr <- function(exp, obs, lr_method, target_grid = NULL, points = NULL, int_method = NULL, method_point_interp = NULL, predictors = NULL, lat_dim = "lat", lon_dim = "lon", sdate_dim = "sdate", time_dim = "time", member_dim = "member", - large_scale_predictor_dimname = 'vars', loocv = FALSE, region = NULL, ncores = NULL) { + large_scale_predictor_dimname = 'vars', loocv = TRUE, region = NULL, ncores = NULL) { if (!inherits(exp,'s2dv_cube')) { stop("Parameter 'exp' must be of the class 's2dv_cube'") @@ -203,7 +203,7 @@ CST_Intlr <- function(exp, obs, lr_method, target_grid = NULL, points = NULL, in #'@param large_scale_predictor_dimname a character vector indicating the name of the #'dimension in 'predictors' that contain the predictor variables. See parameter 'predictors'. #'@param loocv a logical indicating whether to apply leave-one-out cross-validation when -#'generating the linear regressions. Default to FALSE. +#'generating the linear regressions. Default to TRUE. #'@param ncores an integer indicating the number of cores to use in parallel computation. #'The default value is NULL. #'@import multiApply @@ -225,7 +225,7 @@ CST_Intlr <- function(exp, obs, lr_method, target_grid = NULL, points = NULL, in Intlr <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, lr_method, target_grid = NULL, points = NULL, int_method = NULL, method_point_interp = NULL, source_file_exp = NULL, source_file_obs = NULL, predictors = NULL, lat_dim = "lat", lon_dim = "lon", sdate_dim = "sdate", time_dim = "time", - member_dim = "member", region = NULL, large_scale_predictor_dimname = 'vars', loocv = FALSE, + member_dim = "member", region = NULL, large_scale_predictor_dimname = 'vars', loocv = TRUE, ncores = NULL) { #----------------------------------- @@ -404,10 +404,11 @@ Intlr <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, lr_method, t # Predictors: model data # Predictand: observations else if (lr_method == '4nn') { + predictor <- .find_nn(coar = exp, lats_hres = obs_lats, lons_hres = obs_lons, lats_coar = exp_lats, lons_coar = exp_lons, lat_dim = lat_dim, lon_dim = lon_dim, nn = 4, ncores = ncores) - if (is.null(points)) { + if (is.null(points) | ("location" %in% names(dim(obs)))) { if (!is.null(target_grid)) { warning("Interpolating to the 'obs' grid") } @@ -440,12 +441,19 @@ Intlr <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, lr_method, t else { stop(paste0(lr_method, " method is not implemented yet")) } - + + print(paste0('dim predictor',dim(predictor))) + print(paste0('dim predictand',dim(predictand))) + print(dim(list(predictor[1]))) # Apply the linear regressions + + + res <- Apply(list(predictor, predictand), target_dims = list(target_dims_predictor, target_dims_predictand), fun = .intlr, loocv = loocv, ncores = ncores)$output1 names(dim(res))[1] <- sdate_dim + # names(dim(res))[which(names(dim(res)) == '')] # restore ensemble dimension in observations if it existed originally if (restore_ens) { diff --git a/modules/Downscaling/tmp/LogisticReg.R b/modules/Downscaling/tmp/LogisticReg.R index 60681b97..a85a1b3f 100644 --- a/modules/Downscaling/tmp/LogisticReg.R +++ b/modules/Downscaling/tmp/LogisticReg.R @@ -59,7 +59,7 @@ #'border, whereas latmax indicates the upper border. If set to NULL (default), the function #'takes the first and last elements of the latitudes and longitudes. #'@param loocv a logical vector indicating whether to perform leave-one-out cross-validation -#'in the fitting of the logistic regression. Default to FALSE. +#'in the fitting of the logistic regression. Default to TRUE. #'@param ncores an integer indicating the number of cores to use in parallel computation. #'The default value is NULL. #'@import multiApply @@ -89,7 +89,7 @@ CST_LogisticReg <- function(exp, obs, target_grid, int_method = NULL, log_reg_method = "ens_mean", probs_cat = c(1/3,2/3), return_most_likely_cat = FALSE, points = NULL, method_point_interp = NULL, lat_dim = "lat", lon_dim = "lon", sdate_dim = "sdate", - member_dim = "member", region = NULL, loocv = FALSE, ncores = NULL) { + member_dim = "member", region = NULL, loocv = TRUE, ncores = NULL) { if (!inherits(exp,'s2dv_cube')) { stop("Parameter 'exp' must be of the class 's2dv_cube'") @@ -197,7 +197,7 @@ CST_LogisticReg <- function(exp, obs, target_grid, int_method = NULL, log_reg_me #'border, whereas latmax indicates the upper border. If set to NULL (default), the function #'takes the first and last elements of the latitudes and longitudes. #'@param loocv a logical vector indicating whether to perform leave-one-out cross-validation -#'in the fitting of the logistic regression. Default to FALSE. +#'in the fitting of the logistic regression. Default to TRUE. #'@param ncores an integer indicating the number of cores to use in parallel computation. #'The default value is NULL. #'@import multiApply @@ -227,7 +227,7 @@ LogisticReg <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, target int_method = NULL, log_reg_method = "ens_mean", probs_cat = c(1/3,2/3), return_most_likely_cat = FALSE, points = NULL, method_point_interp = NULL, lat_dim = "lat", lon_dim = "lon", sdate_dim = "sdate", member_dim = "member", - source_file_exp = NULL, source_file_obs = NULL, region = NULL, loocv = FALSE, ncores = NULL) { + source_file_exp = NULL, source_file_obs = NULL, region = NULL, loocv = TRUE, ncores = NULL) { #----------------------------------- # Checkings @@ -272,13 +272,13 @@ LogisticReg <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, target stop("Parameter 'loocv' must be set to TRUE or FALSE") } - if (is.na(match(lon_dim, names(dim(exp)))) | is.na(match(lon_dim, names(dim(obs))))) { - stop("Missing longitude dimension in 'exp' and/or 'obs', or does not match the parameter ", + if (is.na(match(lon_dim, names(dim(exp))))) { + stop("Missing longitude dimension in 'exp', or does not match the parameter ", "'lon_dim'") } - if (is.na(match(lat_dim, names(dim(exp)))) | is.na(match(lat_dim, names(dim(obs))))) { - stop("Missing latitude dimension in 'exp' and/or 'obs', or does not match the parameter ", + if (is.na(match(lat_dim, names(dim(exp))))) { + stop("Missing latitude dimension in 'exp', or does not match the parameter ", "'lat_dim'") } @@ -351,6 +351,9 @@ LogisticReg <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, target target_dims_predictor <- sdate_dim } else if (log_reg_method == "ens_mean_sd") { + + require(abind) + ens_mean_anom <- .get_ens_mean_anom(obj_ens = exp_interpolated$data, member_dim = member_dim, sdate_dim = sdate_dim, ncores = ncores) ens_sd <- .get_ens_sd(obj_ens = exp_interpolated$data, member_dim = member_dim, ncores = ncores) @@ -370,8 +373,8 @@ LogisticReg <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, target # If after interpolating 'exp' data the coordinates do not match, the obs data is interpolated to # the same grid to force the matching - if ((!.check_coords(lat1 = exp_interpolated$lat, lat2 = obs_lats, - lon1 = exp_interpolated$lon, lon2 = obs_lons)) | !(point_obs)) { + if ((!.check_coords(lat1 = as.numeric(exp_interpolated$lat), lat2 = obs_lats, + lon1 = as.numeric(exp_interpolated$lon), lon2 = obs_lons)) | !(point_obs)) { obs_interpolated <- Interpolation(exp = obs, lats = obs_lats, lons = obs_lons, target_grid = target_grid, method_remap = int_method, points = points, source_file = source_file_obs, lat_dim = lat_dim, lon_dim = lon_dim, method_point_interp = method_point_interp, diff --git a/modules/Downscaling/tmp/Utils.R b/modules/Downscaling/tmp/Utils.R index d332aa3c..3cd65852 100644 --- a/modules/Downscaling/tmp/Utils.R +++ b/modules/Downscaling/tmp/Utils.R @@ -1,5 +1,5 @@ .check_coords <- function(lat1, lon1, lat2, lon2) { - if (all(lat1 == lat2) & all(lon1 == lon2)) { + if (all(as.numeric(lat1) == as.numeric(lat2)) & all(as.numeric(lon1) == as.numeric(lon2))) { match <- TRUE } else { match <- FALSE -- GitLab From be82f39e07765860d43df6c085ed7b6fcb4c7f78 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Tue, 19 Sep 2023 09:06:43 +0200 Subject: [PATCH 275/388] Rename plot_scorecards() to Scorecards() --- modules/Scorecards/Scorecards.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/Scorecards/Scorecards.R b/modules/Scorecards/Scorecards.R index 6086ecb2..47b47797 100644 --- a/modules/Scorecards/Scorecards.R +++ b/modules/Scorecards/Scorecards.R @@ -15,7 +15,7 @@ source('modules/Scorecards/tmp/SCPlotScorecard.R') ## TODO: Change function name to 'Scorecards'? ## Define function -plot_scorecards <- function(recipe) { +Scorecards <- function(recipe) { ## set parameters input.path <- paste0(recipe$Run$output_dir, "/outputs/Skill/") -- GitLab From f587f1f07b0586d98d80cc2d271486a91daa47c9 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Tue, 19 Sep 2023 11:19:57 +0200 Subject: [PATCH 276/388] Fix bug caused by typo --- modules/Scorecards/execute_scorecards.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/Scorecards/execute_scorecards.R b/modules/Scorecards/execute_scorecards.R index e0829342..2c54c48f 100644 --- a/modules/Scorecards/execute_scorecards.R +++ b/modules/Scorecards/execute_scorecards.R @@ -15,7 +15,7 @@ datasets <- recipe$Analysis$Datasets ## TODO: Improve dependency system? for (system in 1:length(datasets$System)) { for (reference in 1:length(datasets$Reference)) { - for (variable in 1:length(recipe$Analysis$variables)) { + for (variable in 1:length(recipe$Analysis$Variables)) { scorecard_recipe <- recipe scorecard_recipe$Analysis$Datasets$System <- recipe$Analysis$Datasets$System[[system]] -- GitLab From 47ae0af0943701e6948f296f6630d4f98da2c05a Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Tue, 19 Sep 2023 15:27:21 +0200 Subject: [PATCH 277/388] Adapt launch_SUNSET.sh to Autosubmit case and Scorecards --- launch_SUNSET.sh | 97 +++++++++++++++++++++++++----------------------- split.R | 17 ++++++++- 2 files changed, 66 insertions(+), 48 deletions(-) diff --git a/launch_SUNSET.sh b/launch_SUNSET.sh index 5bd25b3a..7f63c97d 100644 --- a/launch_SUNSET.sh +++ b/launch_SUNSET.sh @@ -14,10 +14,6 @@ ################################################################################ # Usage statement -if [[ ( $@ == "--help") || $@ == "-h" ]]; then - echo "Usage: $0 --wallclock= --custom_directives=" - exit 0 -fi function usage { @@ -38,6 +34,10 @@ function usage echo " E.g. '--constraint=medmem'." } +if [[ ( $@ == "--help") || $@ == "-h" ]]; then + usage + exit 0 +fi # Assign arguments recipe=$1 @@ -100,47 +100,52 @@ tmpfile=$(mktemp ${TMPDIR-/tmp}/SUNSET.XXXXXX) source MODULES Rscript split.R ${recipe} --tmpfile $tmpfile -# Retrieve working directory -codedir=$( head -1 $tmpfile | tail -1 ) -# Retrieve output directory -outdir=$( head -2 $tmpfile | tail -1 ) -# Scorecards TRUE/FALSE -scorecards=$( head -3 $tmpfile | tail -1) - -rm $tmpfile - -# Create directory for slurm output -logdir=${codedir}/out-logs/slurm_logs/ -mkdir -p $logdir -echo "Slurm job logs will be stored in $logdir" - -# Launch one job per atomic recipe -cd $codedir -job_number=0 -# Create empty array to store all the job IDs for the verification jobs -verification_job_list=() -echo "Submitting verification jobs..." -# Loop over atomic recipes -for atomic_recipe in ${outdir}/logs/recipes/atomic_recipe_??.yml; do - job_number=$(($job_number + 1)) - job_name=$(basename $outdir)_$(printf %02d $job_number) - outfile=${logdir}/run-${job_name}.out - errfile=${logdir}/run-${job_name}.err - # Send batch job and capture job ID - job_ID=$(sbatch --parsable --output=$outfile --error=$errfile --time=$wallclock --cpus-per-task=$cpus $custom_directives conf/slurm_templates/run_parallel_workflow.sh ${script} ${atomic_recipe}) - # Add job ID to array - verification_job_list+=($job_ID) - echo "Submitted batch job $job_ID" -done - -# Submit scorecards job with dependency on verification jobs, passed as a -# comma-separated string. The scorecards job will not run until all the -# verification jobs have finished successfully. -# If any of the jobs fail, it will be canceled. -if [[ $scorecards == "TRUE" ]]; then - echo "Submitting scorecards jobs..." - outfile=${logdir}/run-scorecards.out - errfile=${logdir}/run-scorecards.err - sbatch --dependency=afterok:$(IFS=,; echo "${verification_job_list[*]}") --output=$outfile --error=$errfile --time=01:00:00 conf/slurm_templates/run_scorecards.sh ${recipe} ${outdir} +# Run with Autosubmit or directly with Slurm's sbatch? +run_method=$( head -1 $tmpfile | tail -1 ) +# If run method is 'sbatch', launch jobs with dependencies +if [ run_method == "sbatch" ]; then + # Retrieve working directory + codedir=$( head -2 $tmpfile | tail -1 ) + # Retrieve output directory + outdir=$( head -3 $tmpfile | tail -1 ) + # Scorecards TRUE/FALSE + scorecards=$( head -4 $tmpfile | tail -1) + + # Create directory for slurm output + logdir=${codedir}/out-logs/slurm_logs/ + mkdir -p $logdir + echo "Slurm job logs will be stored in $logdir" + + # Launch one job per atomic recipe + cd $codedir + job_number=0 + # Create empty array to store all the job IDs for the verification jobs + verification_job_list=() + echo "Submitting verification jobs..." + # Loop over atomic recipes + for atomic_recipe in ${outdir}/logs/recipes/atomic_recipe_??.yml; do + job_number=$(($job_number + 1)) + job_name=$(basename $outdir)_$(printf %02d $job_number) + outfile=${logdir}/run-${job_name}.out + errfile=${logdir}/run-${job_name}.err + # Send batch job and capture job ID + job_ID=$(sbatch --parsable --output=$outfile --error=$errfile --time=$wallclock --cpus-per-task=$cpus $custom_directives conf/slurm_templates/run_parallel_workflow.sh ${script} ${atomic_recipe}) + # Add job ID to array + verification_job_list+=($job_ID) + echo "Submitted batch job $job_ID" + done + + # Submit scorecards job with dependency on verification jobs, passed as a + # comma-separated string. The scorecards job will not run until all the + # verification jobs have finished successfully. + # If any of the jobs fail, it will be canceled. + if [[ $scorecards == "TRUE" ]]; then + echo "Submitting scorecards jobs..." + outfile=${logdir}/run-scorecards.out + errfile=${logdir}/run-scorecards.err + sbatch --dependency=afterok:$(IFS=,; echo "${verification_job_list[*]}") --output=$outfile --error=$errfile --time=01:00:00 conf/slurm_templates/run_scorecards.sh ${recipe} ${outdir} + fi fi +# Clean temporary file +rm $tmpfile diff --git a/split.R b/split.R index c71a0377..58b34a87 100755 --- a/split.R +++ b/split.R @@ -35,11 +35,24 @@ run_parameters <- divide_recipe(recipe) if (recipe$Run$autosubmit) { write_autosubmit_conf(recipe, run_parameters$n_atomic_recipes) + sink(arguments$tmpfile, append = FALSE) + # Run with... + cat("autosubmit") + sink() } else if (!is.null(arguments$tmpfile)) { sink(arguments$tmpfile, append = FALSE) + # Run with... + cat(paste0("sbatch", "\n")) + # Code directory cat(paste0(recipe$Run$code_dir, "\n")) + # Output directory cat(paste0(run_parameters$outdir, "\n")) - ## TODO: get parameter from recipe - cat(paste0("TRUE")) + # Scorecards + if (!("Scorecards" %in% names(recipe$Analysis$Workflow)) || + (!recipe$Analysis$Workflow$Scorecards$execute)) { + cat("FALSE") + } else { + cat("TRUE") + } sink() } -- GitLab From 600f99e73799305b7cfb8e80ba6af6ae133d49ee Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Tue, 19 Sep 2023 15:28:02 +0200 Subject: [PATCH 278/388] =?UTF-8?q?Remove=20commented=20lines=C2=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/slurm_templates/run_scorecards.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/conf/slurm_templates/run_scorecards.sh b/conf/slurm_templates/run_scorecards.sh index bfeaeac0..5ebf6528 100644 --- a/conf/slurm_templates/run_scorecards.sh +++ b/conf/slurm_templates/run_scorecards.sh @@ -15,8 +15,6 @@ recipe=$1 outdir=$2 source MODULES -# Get modified recipe from output directory -# recipe=${outdir}/logs/${recipe} # Execute scorecards Rscript modules/Scorecards/execute_scorecards.R ${recipe} ${outdir} -- GitLab From ce6bfe575d8018edec9e571c18c4e65ef1e2625c Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Tue, 19 Sep 2023 15:49:21 +0200 Subject: [PATCH 279/388] Copy loading functions --- modules/Loading/R/load_decadal.R | 554 ++++++++++++++++++++++++++++++ modules/Loading/R/load_seasonal.R | 452 ++++++++++++++++++++++++ 2 files changed, 1006 insertions(+) create mode 100644 modules/Loading/R/load_decadal.R create mode 100644 modules/Loading/R/load_seasonal.R diff --git a/modules/Loading/R/load_decadal.R b/modules/Loading/R/load_decadal.R new file mode 100644 index 00000000..74c97e29 --- /dev/null +++ b/modules/Loading/R/load_decadal.R @@ -0,0 +1,554 @@ +# Loading module: +# 1. archive.yml +# 2. recipe.yml +# 3. Load_decadal.R (V) +#setwd('/esarchive/scratch/aho/git/auto-s2s/') + +## TODO: remove paths to personal scratchs +source("/esarchive/scratch/vagudets/repos/csoperational/R/get_regrid_params.R") +# Load required libraries/funs +source("modules/Loading/helper_loading_decadal.R") +source("modules/Loading/R/dates2load.R") +source("modules/Loading/R/check_latlon.R") +source("modules/Loading/R/get_timeidx.R") +source("tools/libs.R") + +#==================================================================== + +# recipe_file <- "recipes/atomic_recipes/recipe_decadal.yml" +# recipe_file <- "recipes/atomic_recipes/recipe_decadal_daily.yml" + +load_datasets <- function(recipe) { + + ## + archive <- read_yaml(paste0("conf/archive_decadal.yml"))$esarchive + + # Print Start() info or not + DEBUG <- FALSE + + ## TODO: this should come from the main script + # Create output folder and log: + + #------------------------- + # Read from recipe: + #------------------------- + exp.name <- recipe$Analysis$Datasets$System$name #'HadGEM3' + ref.name <- recipe$Analysis$Datasets$Reference$name #'era5' + member <- strsplit(recipe$Analysis$Datasets$System$member, ',')[[1]] #c("r1i1p1f2", "r2i1p1f2") +# variable <- recipe$Analysis$Variables$name #'tas' + variable <- strsplit(recipe$Analysis$Variables$name, ", | |,")[[1]] + store.freq <- recipe$Analysis$Variables$freq #monthly_mean + lats.min <- as.numeric(recipe$Analysis$Region$latmin) #0 + lats.max <- as.numeric(recipe$Analysis$Region$latmax) #10 + lons.min <- as.numeric(recipe$Analysis$Region$lonmin) #0 + lons.max <- as.numeric(recipe$Analysis$Region$lonmax) #10 + + # change to: sdates <- dates2load(recipe, logger) + sdates_hcst <- as.numeric(recipe$Analysis$Time$hcst_start):as.numeric(recipe$Analysis$Time$hcst_end) #1960:2015 + sdates_fcst <- recipe$Analysis$Time$fcst + + if (store.freq == "monthly_mean") { + time_ind <- (as.numeric(recipe$Analysis$Time$ftime_min):as.numeric(recipe$Analysis$Time$ftime_max)) + + } else if (store.freq == "daily_mean") { + time_ind <- get_daily_time_ind(ftimemin = as.numeric(recipe$Analysis$Time$ftime_min), + ftimemax = as.numeric(recipe$Analysis$Time$ftime_max), + initial_month = archive$System[[exp.name]]$initial_month, + sdates = sdates_hcst, + calendar = archive$System[[exp.name]]$calendar) + } + +#NOTE: May be used in the future +# season <- recipe$Analysis$Time$season + + #------------------------- + # Read from archive: + #------------------------- + if (store.freq == "monthly_mean") { + table <- archive$System[[exp.name]][[store.freq]]$table[variable] #list(tas = 'Amon') + } else { + table <- 'day' + } + grid <- archive$System[[exp.name]][[store.freq]]$grid[variable] #list(tas = 'gr') + version <- archive$System[[exp.name]][[store.freq]]$version[variable] #list(tas = 'v20210910') + if (identical(member, 'all')) { + member <- strsplit(archive$System[[exp.name]]$member, ',')[[1]] + } + + #------------------------- + # derived from above: + #------------------------- + # Check lat and lon and decide CircularSort + circularsort <- check_latlon(latmin = lats.min, latmax = lats.max, lonmin = lons.min, lonmax = lons.max) + + # generate transform params for system and ref + regrid_params <- get_regrid_params(recipe, archive) + + # Only if the time length in each chunk may differ that we need largest_dims_length to be TRUE. Otherwise, set FALSE to increase efficiency. + need_largest_dims_length <- ifelse(exp.name == 'EC-Earth3-i2', TRUE, FALSE) + + + #------------------------------------------- + # Step 1: Load the hcst + #------------------------------------------- + #monthly and daily + tmp <- get_dcpp_path(archive = archive, exp.name = exp.name, table = table, grid = grid, + version = version, sdates = sdates_hcst) + path_list <- tmp$path_list + multi_path <- tmp$multi_path + + #TODO: to make this case work; enhance Start() if it's possible + if (multi_path & length(variable) > 1) { + stop("The recipe requests multiple variables and start dates from both dpccA-hindcast and dcppB-forecast. This case is not available for now.") + } + + Start_default_arg_list <- list( + dat = path_list, + var = variable, + syear = paste0(sdates_hcst), + chunk = 'all', + chunk_depends = 'syear', + time = indices(time_ind), + time_across = 'chunk', + merge_across_dims = TRUE, + largest_dims_length = need_largest_dims_length, + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(decreasing = TRUE), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = circularsort, + ensemble = member, + transform = regrid_params$fcst.transform, + transform_extra_cells = 2, + transform_params = list(grid = regrid_params$fcst.gridtype, + method = regrid_params$fcst.gridmethod), + transform_vars = c('latitude', 'longitude'), +# path_glob_permissive = 2, # for version + synonims = list(longitude = c('lon', 'longitude'), + latitude = c('lat', 'latitude')), + return_vars = list(latitude = NULL, longitude = NULL, + time = c('syear', 'chunk')), + silent = !DEBUG, + retrieve = T) + + if (length(variable) > 1) { + Start_default_arg_list <- c(Start_default_arg_list, + list(table = table, grid = grid, version = version, + table_depends = 'var', grid_depends = 'var', version_depends = 'var', + metadata_dims = 'var')) + } + + if (!multi_path) { + Start_hcst_arg_list <- Start_default_arg_list + hcst <- do.call(Start, Start_hcst_arg_list) + + } else { + Start_hcst_arg_list <- Start_default_arg_list + Start_hcst_arg_list[['syear']] <- NULL + Start_hcst_arg_list[['chunk_depends']] <- NULL + remove_ind <- which(Start_hcst_arg_list[['return_vars']][['time']] == 'syear') + Start_hcst_arg_list[['return_vars']][['time']] <- Start_hcst_arg_list[['return_vars']][['time']][-remove_ind] + + hcst <- do.call(Start, Start_hcst_arg_list) + + # Reshape and reorder dimensions + ## dat should be 1, syear should be length of dat; reorder dimensions + dim(hcst) <- c(dat = 1, syear = as.numeric(dim(hcst))[1], dim(hcst)[2:6]) + hcst <- s2dv::Reorder(hcst, c('dat', 'var', 'syear', 'time', 'latitude', 'longitude', 'ensemble')) + + # Manipulate time attr because Start() cannot read it correctly + wrong_time_attr <- attr(hcst, 'Variables')$common$time # dim: [time], the first syear only + tmp <- array(dim = c(dim(hcst)[c('syear', 'time')])) + tmp[1, ] <- wrong_time_attr + yr_diff <- (sdates_hcst - sdates_hcst[1])[-1] #diff(sdates_hcst) + for (i_syear in 1:length(yr_diff)) { + tmp[(i_syear + 1), ] <- wrong_time_attr + lubridate::years(yr_diff[i_syear]) + } + attr(hcst, 'Variables')$common$time <- as.POSIXct(tmp, origin = '1970-01-01', tz = 'UTC') + + } + + tmp_time_attr <- attr(hcst, 'Variables')$common$time + + # change syear to c(sday, sweek, syear) + # dim(hcst) should be [dat, var, sday, sweek, syear, time, latitude, longitude, ensemble] + dim(hcst) <- c(dim(hcst)[1:2], sday = 1, sweek = 1, dim(hcst)[3:7]) + if (!identical(dim(tmp_time_attr), dim(hcst)[c('syear', 'time')])) { + error(recipe$Run$logger, + "hcst has problem in matching data and time attr dimension.") + stop() + } + dim(attr(hcst, 'Variables')$common$time) <- c(sday = 1, sweek = 1, dim(tmp_time_attr)) + + #TODO: as.s2dv_cube() needs to be improved to recognize "variable" is under $dat1 + if (multi_path) { + attributes(hcst)$Variables$common[[variable]] <- attributes(hcst)$Variables$dat1[[variable]] + } + + # Change class from startR_array to s2dv_cube + suppressWarnings( + hcst <- as.s2dv_cube(hcst) + ) + +#------------------------------------------- +# Step 2: Load the fcst +#------------------------------------------- + if (!is.null(recipe$Analysis$Time$fcst)) { + + tmp <- get_dcpp_path(archive = archive, exp.name = exp.name, table = table, grid = grid, + version = version, sdates = sdates_fcst) + path_list <- tmp$path_list + multi_path <- tmp$multi_path + + #TODO: to make this case work; enhance Start() if it's possible + if (multi_path & length(variable) > 1) { + stop("The recipe requests multiple variables and start dates from both dpccA-hindcast and dcppB-forecast. This case is not available for now.") + } + + # monthly & daily + if (!multi_path) { + #NOTE: the adjustment for two cases (multiple files per sdate or not) has been made in hcst + Start_fcst_arg_list <- Start_default_arg_list + Start_fcst_arg_list[['dat']] <- path_list + Start_fcst_arg_list[['syear']] <- paste0(sdates_fcst) + fcst <- do.call(Start, Start_fcst_arg_list) + + + } else { # multi_path + + #TODO: time attribute is not correct. Improve Start(). + Start_fcst_arg_list <- Start_default_arg_list + Start_fcst_arg_list[['dat']] <- path_list + Start_fcst_arg_list[['syear']] <- NULL + Start_fcst_arg_list[['chunk_depends']] <- NULL + remove_ind <- which(Start_fcst_arg_list[['return_vars']][['time']] == 'syear') + Start_fcst_arg_list[['return_vars']][['time']] <- Start_fcst_arg_list[['return_vars']][['time']][-remove_ind] + fcst <- do.call(Start, Start_fcst_arg_list) + + # Reshape and reorder dimensions + ## dat should be 1, syear should be length of dat; reorder dimensions + ## dim(fcst) should be [dat, var, syear, time, latitude, longitude, ensemble] + dim(fcst) <- c(dat = 1, syear = as.numeric(dim(fcst))[1], dim(fcst)[2:6]) + fcst <- s2dv::Reorder(fcst, c('dat', 'var', 'syear', 'time', 'latitude', 'longitude', 'ensemble')) + + # Manipulate time attr because Start() cannot read it correctly + wrong_time_attr <- attr(fcst, 'Variables')$common$time # dim: [time], the first syear only + tmp <- array(dim = c(dim(fcst)[c('syear', 'time')])) + tmp[1, ] <- wrong_time_attr + yr_diff <- (sdates_fcst - sdates_fcst[1])[-1] #diff(sdates_fcst) + for (i_syear in 1:length(yr_diff)) { + tmp[(i_syear + 1), ] <- wrong_time_attr + lubridate::years(yr_diff[i_syear]) + } + attr(fcst, 'Variables')$common$time <- as.POSIXct(tmp, origin = '1970-01-01', tz = 'UTC') + + } + + tmp_time_attr <- attr(fcst, 'Variables')$common$time + + # change syear to c(sday, sweek, syear) + # dim(fcst) should be [dat, var, sday, sweek, syear, time, latitude, longitude, ensemble] + dim(fcst) <- c(dim(fcst)[1:2], sday = 1, sweek = 1, dim(fcst)[3:7]) + if (!identical(dim(tmp_time_attr), dim(fcst)[c('syear', 'time')])) { + error(recipe$Run$logger, + "fcst has problem in matching data and time attr dimension.") + stop() + } + dim(attr(fcst, 'Variables')$common$time) <- c(sday = 1, sweek = 1, dim(tmp_time_attr)) + + #TODO: as.s2dv_cube() needs to be improved to recognize "variable" is under $dat1 + if (multi_path) { + attributes(fcst)$Variables$common[[variable]] <- attributes(fcst)$Variables$dat1[[variable]] + } + + # Change class from startR_array to s2dv_cube + suppressWarnings( + fcst <- as.s2dv_cube(fcst) + ) + + # Only syear could be different + if (!identical(dim(hcst$data)[-5], dim(fcst$data)[-5])) { + error(recipe$Run$logger, + "hcst and fcst do not share the same dimension structure.") + stop() + } + + } else { + fcst <- NULL + } + +#------------------------------------------- +# Step 3. Load the reference +#------------------------------------------- + obs.path <- file.path(archive$src, archive$Reference[[ref.name]]$src, + store.freq, "$var$$var_dir$", "$var$_$file_date$.nc") + var_dir_obs <- archive$Reference[[ref.name]][[store.freq]][variable] # list(tas = "_f1h-r1440x721cds", tos = "_f1h-r1440x721cds") + +# obs.path <- file.path(archive$src, archive$Reference[[ref.name]]$src, store.freq, +# paste0(variable, archive$Reference[[ref.name]][[store.freq]][[variable]])) +# obs.files <- paste0('$var$_$file_date$.nc') + + # Get from startR_cube +# dates <- attr(hcst, 'Variables')$common$time + # Get from s2dv_cube + dates <- hcst$attrs$Dates + dates_file <- sapply(dates, format, '%Y%m') + dim(dates_file) <- dim(dates) + + if (store.freq == "daily_mean") { +#//////////////// +# Method 1: use hcst time attr as obs time selector +#//////////////// + + # Set hour to 12:00 to ensure correct date retrieval for daily data + lubridate::hour(dates) <- 12 + lubridate::minute(dates) <- 00 + # Restore correct dimensions + dim(dates) <- dim(dates_file) + + obs <- Start(dat = obs.path, + var = variable, + var_dir = var_dir_obs, + var_dir_depends = 'var', + file_date = unique(format(dates, '%Y%m')), + time = dates, # [sday, sweek, syear, time] + time_across = 'file_date', + merge_across_dims = TRUE, + split_multiselected_dims = TRUE, + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(decreasing = TRUE), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = circularsort, + transform = regrid_params$obs.transform, + transform_extra_cells = 2, + transform_params = list(grid = regrid_params$obs.gridtype, #nc file + method = regrid_params$obs.gridmethod), + transform_vars = c('latitude', 'longitude'), + synonims = list(latitude = c('lat','latitude'), + longitude = c('lon','longitude')), + return_vars = list(latitude = NULL, longitude = NULL, + time = 'file_date'), + silent = !DEBUG, + retrieve = TRUE) + + } else if (store.freq == "monthly_mean") { +#//////////////// +# Method 2: reshape hcst time attr's date into an array with time dim then as obs date selector +#//////////////// + + obs <- Start(dat = obs.path, + var = variable, + var_dir = var_dir_obs, + var_dir_depends = 'var', + file_date = dates_file, #dates_arr, # [sday, sweek, syear, time] + split_multiselected_dims = TRUE, + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(decreasing = TRUE), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = circularsort, + transform = regrid_params$obs.transform, + transform_extra_cells = 2, + transform_params = list(grid = regrid_params$obs.gridtype, #nc file + method = regrid_params$obs.gridmethod), + transform_vars = c('latitude', 'longitude'), + synonims = list(latitude = c('lat','latitude'), + longitude = c('lon','longitude')), + return_vars = list(latitude = NULL, longitude = NULL, + time = 'file_date'), + metadata_dims = 'var', + silent = !DEBUG, + retrieve = TRUE) + } + + +#dim(attr(obs, 'Variables')$common$time) +# sday sweek syear time +# 1 1 2 14 + + # Remove var_dir dimension + obs <- Subset(obs, along = "var_dir", indices = 1, drop = "selected") + + # Only ensemble dim could be different + if (!identical(dim(obs), dim(hcst$data)[-9])) { + error(recipe$Run$logger, + "obs and hcst dimensions do not match.") + stop() + } + # Add ensemble dim to obs + dim(obs) <- c(dim(obs), ensemble = 1) + + # Change class from startR_array to s2dv_cube + suppressWarnings( + obs <- as.s2dv_cube(obs) + ) + +#------------------------------------------- +# Step 4. Verify the consistance between data +#------------------------------------------- + # dimension + if (any(!names(dim(obs$data)) %in% names(dim(hcst$data)))) { + error(recipe$Run$logger, + "hcst and obs don't share the same dimension names.") + stop() + } else { + ens_ind <- which(names(dim(obs$data)) == 'ensemble') + match_ind <- match(names(dim(obs$data))[-ens_ind], names(dim(hcst$data))) + if (!all(dim(hcst$data)[match_ind] == dim(obs$data)[-ens_ind])) { + error(recipe$Run$logger, + "hcst and obs don't share the same dimension length.") + stop() + } + } + + # time attribute + if (!identical(format(hcst$attrs$Dates, '%Y%m'), + format(obs$attrs$Dates, '%Y%m'))) { + error(recipe$Run$logger, + "hcst and obs don't share the same time.") + stop() + } + + # lat and lon attributes + if (!(recipe$Analysis$Regrid$type == 'none')) { + if (!isTRUE(all.equal(as.vector(hcst$lat), as.vector(obs$lat)))) { + lat_error_msg <- paste("Latitude mismatch between hcst and obs.", + "Please check the original grids and the", + "regrid parameters in your recipe.") + error(recipe$Run$logger, lat_error_msg) + hcst_lat_msg <- paste0("First hcst lat: ", hcst$lat[1], + "; Last hcst lat: ", hcst$lat[length(hcst$lat)]) + info(recipe$Run$logger, hcst_lat_msg) + obs_lat_msg <- paste0("First obs lat: ", obs$lat[1], + "; Last obs lat: ", obs$lat[length(obs$lat)]) + info(recipe$Run$logger, obs_lat_msg) + stop("hcst and obs don't share the same latitudes.") + } + + if (!isTRUE(all.equal(as.vector(hcst$lon), as.vector(obs$lon)))) { + lon_error_msg <- paste("Longitude mismatch between hcst and obs.", + "Please check the original grids and the", + "regrid parameters in your recipe.") + error(recipe$Run$logger, lon_error_msg) + hcst_lon_msg <- paste0("First hcst lon: ", hcst$lon[1], + "; Last hcst lon: ", hcst$lon[length(hcst$lon)]) + info(recipe$Run$logger, hcst_lon_msg) + obs_lon_msg <- paste0("First obs lon: ", obs$lon[1], + "; Last obs lon: ", obs$lon[length(obs$lon)]) + info(recipe$Run$logger, obs_lon_msg) + stop("hcst and obs don't share the same longitudes.") + } + } + + # Check fcst + if (!is.null(fcst)) { + # dimension + if (any(!names(dim(fcst$data)) %in% names(dim(hcst$data)))) { + error(recipe$Run$logger, + "hcst and fcst don't share the same dimension names.") + stop() + } else { + ens_ind <- which(names(dim(fcst$data)) %in% c('ensemble', 'syear')) + match_ind <- match(names(dim(fcst$data))[-ens_ind], names(dim(hcst$data))) + if (!all(dim(hcst$data)[match_ind] == dim(fcst$data)[-ens_ind])) { + error(recipe$Run$logger, + "hcst and fcst don't share the same dimension length.") + stop() + } + } + + # lat and lon attributes + if (!(recipe$Analysis$Regrid$type == 'none')) { + if (!identical(as.vector(hcst$lat), as.vector(fcst$lat))) { + lat_error_msg <- paste("Latitude mismatch between hcst and fcst.", + "Please check the original grids and the", + "regrid parameters in your recipe.") + error(recipe$Run$logger, lat_error_msg) + hcst_lat_msg <- paste0("First hcst lat: ", hcst$lat[1], + "; Last hcst lat: ", hcst$lat[length(hcst$lat)]) + info(recipe$Run$logger, hcst_lat_msg) + fcst_lat_msg <- paste0("First fcst lat: ", fcst$lat[1], + "; Last fcst lat: ", fcst$lat[length(fcst$lat)]) + info(recipe$Run$logger, fcst_lat_msg) + stop("hcst and fcst don't share the same latitudes.") + } + + if (!identical(as.vector(hcst$lon), as.vector(fcst$lon))) { + lon_error_msg <- paste("Longitude mismatch between hcst and fcst.", + "Please check the original grids and the", + "regrid parameters in your recipe.") + error(recipe$Run$logger, lon_error_msg) + hcst_lon_msg <- paste0("First hcst lon: ", hcst$lon[1], + "; Last hcst lon: ", hcst$lon[length(hcst$lon)]) + info(recipe$Run$logger, hcst_lon_msg) + fcst_lon_msg <- paste0("First fcst lon: ", fcst$lon[1], + "; Last fcst lon: ", fcst$lon[length(fcst$lon)]) + info(recipe$Run$logger, fcst_lon_msg) + stop("hcst and fcst don't share the same longitudes.") + } + } + + } + + +#------------------------------------------- +# Step 5. Tune data +#------------------------------------------- + # Remove negative values in accumulative variables + dictionary <- read_yaml("conf/variable-dictionary.yml") + for (var_idx in 1:length(variable)) { + var_name <- variable[var_idx] + if (dictionary$vars[[var_name]]$accum) { + info(recipe$Run$logger, + paste0("Accumulated variable ", var_name, + ": setting negative values to zero.")) + # obs$data[, var_idx, , , , , , , ] <- pmax(Subset(obs$data, + # along = "var", + # indices = var_idx, F), 0) + obs$data[, var_idx, , , , , , , ][obs$data[, var_idx, , , , , , , ] < 0] <- 0 + hcst$data[, var_idx, , , , , , , ][hcst$data[, var_idx, , , , , , , ] < 0] <- 0 + if (!is.null(fcst)) { + fcst$data[, var_idx, , , , , , , ][fcst$data[, var_idx, , , , , , , ] < 0] <- 0 + } + } + + # Convert prlr from m/s to mm/day + ## TODO: Make a unit conversion function + if (variable[[var_idx]] == "prlr") { + # Verify that the units are m/s and the same in obs and hcst + if (((obs$attrs$Variable$metadata[[var_name]]$units == "m s-1") || + (obs$attrs$Variable$metadata[[var_name]]$units == "m s**-1")) && + ((hcst$attrs$Variable$metadata[[var_name]]$units == "m s-1") || + (hcst$attrs$Variable$metadata[[var_name]]$units == "m s**-1"))) { + info(recipe$Run$logger, "Converting precipitation from m/s to mm/day.") + obs$data[, var_idx, , , , , , , ] <- + obs$data[, var_idx, , , , , , , ]*86400*1000 + obs$attrs$Variable$metadata[[var_name]]$units <- "mm/day" + hcst$data[, var_idx, , , , , , , ] <- + hcst$data[, var_idx, , , , , , , ]*86400*1000 + hcst$attrs$Variable$metadata[[var_name]]$units <- "mm/day" + if (!is.null(fcst)) { + fcst$data[, var_idx, , , , , , , ] <- + fcst$data[, var_idx, , , , , , , ]*86400*1000 + fcst$attrs$Variable$metadata[[var_name]]$units <- "mm/day" + } + } + } + } + +#------------------------------------------- +# Step 6. Print summary +#------------------------------------------- + + # Print a summary of the loaded data for the user, for each object + if (recipe$Run$logger$threshold <= 2) { + data_summary(hcst, recipe) + data_summary(obs, recipe) + if (!is.null(fcst)) { + data_summary(fcst, recipe) + } + } + + info(recipe$Run$logger, + "##### DATA LOADING COMPLETED SUCCESSFULLY #####") + + + return(list(hcst = hcst, fcst = fcst, obs = obs)) +} diff --git a/modules/Loading/R/load_seasonal.R b/modules/Loading/R/load_seasonal.R new file mode 100644 index 00000000..8cc46dc7 --- /dev/null +++ b/modules/Loading/R/load_seasonal.R @@ -0,0 +1,452 @@ +## TODO: remove paths to personal scratchs +source("/esarchive/scratch/vagudets/repos/csoperational/R/get_regrid_params.R") +# Load required libraries/funs +source("modules/Loading/R/dates2load.R") +source("modules/Loading/R/get_timeidx.R") +source("modules/Loading/R/check_latlon.R") +## TODO: Move to prepare_outputs.R +source("tools/libs.R") + +load_datasets <- function(recipe) { + + # ------------------------------------------- + # Set params ----------------------------------------- + + hcst.inityear <- recipe$Analysis$Time$hcst_start + hcst.endyear <- recipe$Analysis$Time$hcst_end + lats.min <- recipe$Analysis$Region$latmin + lats.max <- recipe$Analysis$Region$latmax + lons.min <- recipe$Analysis$Region$lonmin + lons.max <- recipe$Analysis$Region$lonmax + ref.name <- recipe$Analysis$Datasets$Reference$name + exp.name <- recipe$Analysis$Datasets$System$name + + variable <- strsplit(recipe$Analysis$Variables$name, ", | |,")[[1]] + store.freq <- recipe$Analysis$Variables$freq + + # get sdates array + ## LOGGER: Change dates2load to extract logger from recipe? + sdates <- dates2load(recipe, recipe$Run$logger) + + idxs <- NULL + idxs$hcst <- get_timeidx(sdates$hcst, + recipe$Analysis$Time$ftime_min, + recipe$Analysis$Time$ftime_max, + time_freq=store.freq) + + if (!(is.null(sdates$fcst))) { + idxs$fcst <- get_timeidx(sdates$fcst, + recipe$Analysis$Time$ftime_min, + recipe$Analysis$Time$ftime_max, + time_freq=store.freq) + } + + ## TODO: Examine this verifications part, verify if it's necessary + # stream <- verifications$stream + # sdates <- verifications$fcst.sdate + + ## TODO: define fcst.name + ##fcst.name <- recipe$Analysis$Datasets$System[[sys]]$name + + # get esarchive datasets dict: + ## TODO: Adapt to 'filesystem' option in recipe + archive <- read_yaml("conf/archive.yml")$esarchive + exp_descrip <- archive$System[[exp.name]] + + freq.hcst <- unlist(exp_descrip[[store.freq]][variable[1]]) + reference_descrip <- archive$Reference[[ref.name]] + freq.obs <- unlist(reference_descrip[[store.freq]][variable[1]]) + obs.dir <- reference_descrip$src + fcst.dir <- exp_descrip$src + hcst.dir <- exp_descrip$src + fcst.nmember <- exp_descrip$nmember$fcst + hcst.nmember <- exp_descrip$nmember$hcst + + ## TODO: it is necessary? + ##if ("accum" %in% names(reference_descrip)) { + ## accum <- unlist(reference_descrip$accum[store.freq][[1]]) + ##} else { + ## accum <- FALSE + ##} + + var_dir_obs <- reference_descrip[[store.freq]][variable] + var_dir_exp <- exp_descrip[[store.freq]][variable] + + # ----------- + obs.path <- paste0(archive$src, + obs.dir, store.freq, "/$var$", "$var_dir$", + "/$var$_$file_date$.nc") + + hcst.path <- paste0(archive$src, + hcst.dir, store.freq, "/$var$", "$var_dir$", + "$var$_$file_date$.nc") + + fcst.path <- paste0(archive$src, + hcst.dir, store.freq, "/$var$", "$var_dir$", + "/$var$_$file_date$.nc") + + # Define regrid parameters: + #------------------------------------------------------------------- + regrid_params <- get_regrid_params(recipe, archive) + + # Longitude circular sort and latitude check + #------------------------------------------------------------------- + circularsort <- check_latlon(lats.min, lats.max, lons.min, lons.max) + + if (recipe$Analysis$Variables$freq == "monthly_mean"){ + split_multiselected_dims = TRUE + } else { + split_multiselected_dims = FALSE + } + + # Load hindcast + #------------------------------------------------------------------- + hcst <- Start(dat = hcst.path, + var = variable, + var_dir = var_dir_exp, + file_date = sdates$hcst, + time = idxs$hcst, + var_dir_depends = 'var', + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = circularsort, + transform = regrid_params$fcst.transform, + transform_params = list(grid = regrid_params$fcst.gridtype, + method = regrid_params$fcst.gridmethod), + transform_vars = c('latitude', 'longitude'), + synonims = list(latitude = c('lat', 'latitude'), + longitude = c('lon', 'longitude'), + ensemble = c('member', 'ensemble')), + ensemble = indices(1:hcst.nmember), + metadata_dims = 'var', # change to just 'var'? + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = 'file_date'), + split_multiselected_dims = split_multiselected_dims, + retrieve = TRUE) + + # Remove var_dir dimension + if ("var_dir" %in% names(dim(hcst))) { + hcst <- Subset(hcst, along = "var_dir", indices = 1, drop = "selected") + } + + if (store.freq %in% c("daily_mean", "daily")) { + # Adjusts dims for daily case, could be removed if startR allows + # multidim split + names(dim(hcst))[which(names(dim(hcst)) == 'file_date')] <- "syear" + default_dims <- c(dat = 1, var = 1, sday = 1, + sweek = 1, syear = 1, time = 1, + latitude = 1, longitude = 1, ensemble = 1) + default_dims[names(dim(hcst))] <- dim(hcst) + dim(hcst) <- default_dims + # Change time attribute dimensions + default_time_dims <- c(sday = 1, sweek = 1, syear = 1, time = 1) + names(dim(attr(hcst, "Variables")$common$time))[which(names( + dim(attr(hcst, "Variables")$common$time)) == 'file_date')] <- "syear" + default_time_dims[names(dim(attr(hcst, "Variables")$common$time))] <- + dim(attr(hcst, "Variables")$common$time) + dim(attr(hcst, "Variables")$common$time) <- default_time_dims + } + + # Convert hcst to s2dv_cube object + ## TODO: Give correct dimensions to $Dates + ## (sday, sweek, syear instead of file_date) + hcst <- as.s2dv_cube(hcst) + # Adjust dates for models where the time stamp goes into the next month + if (recipe$Analysis$Variables$freq == "monthly_mean") { + hcst$attrs$Dates[] <- hcst$attrs$Dates - seconds(exp_descrip$time_stamp_lag) + } + + # Load forecast + #------------------------------------------------------------------- + if (!is.null(recipe$Analysis$Time$fcst_year)) { + # the call uses file_date instead of fcst_syear so that it can work + # with the daily case and the current version of startR not allowing + # multiple dims split + + fcst <- Start(dat = fcst.path, + var = variable, + var_dir = var_dir_exp, + var_dir_depends = 'var', + file_date = sdates$fcst, + time = idxs$fcst, + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = circularsort, + transform = regrid_params$fcst.transform, + transform_params = list(grid = regrid_params$fcst.gridtype, + method = regrid_params$fcst.gridmethod), + transform_vars = c('latitude', 'longitude'), + synonims = list(latitude = c('lat', 'latitude'), + longitude = c('lon', 'longitude'), + ensemble = c('member', 'ensemble')), + ensemble = indices(1:fcst.nmember), + metadata_dims = 'var', + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = 'file_date'), + split_multiselected_dims = split_multiselected_dims, + retrieve = TRUE) + + if ("var_dir" %in% names(dim(fcst))) { + fcst <- Subset(fcst, along = "var_dir", indices = 1, drop = "selected") + } + + if (store.freq %in% c("daily_mean", "daily")) { + # Adjusts dims for daily case, could be removed if startR allows + # multidim split + names(dim(fcst))[which(names(dim(fcst)) == 'file_date')] <- "syear" + default_dims <- c(dat = 1, var = 1, sday = 1, + sweek = 1, syear = 1, time = 1, + latitude = 1, longitude = 1, ensemble = 1) + default_dims[names(dim(fcst))] <- dim(fcst) + dim(fcst) <- default_dims + # Change time attribute dimensions + default_time_dims <- c(sday = 1, sweek = 1, syear = 1, time = 1) + names(dim(attr(fcst, "Variables")$common$time))[which(names( + dim(attr(fcst, "Variables")$common$time)) == 'file_date')] <- "syear" + default_time_dims[names(dim(attr(fcst, "Variables")$common$time))] <- + dim(attr(fcst, "Variables")$common$time) + dim(attr(fcst, "Variables")$common$time) <- default_time_dims + } + + # Convert fcst to s2dv_cube + fcst <- as.s2dv_cube(fcst) + # Adjust dates for models where the time stamp goes into the next month + if (recipe$Analysis$Variables$freq == "monthly_mean") { + fcst$attrs$Dates[] <- + fcst$attrs$Dates - seconds(exp_descrip$time_stamp_lag) + } + + } else { + fcst <- NULL + } + + # Load reference + #------------------------------------------------------------------- + + # Obtain dates and date dimensions from the loaded hcst data to make sure + # the corresponding observations are loaded correctly. + dates <- hcst$attrs$Dates + dim(dates) <- hcst$dims[c("sday", "sweek", "syear", "time")] + + # Separate Start() call for monthly vs daily data + if (store.freq == "monthly_mean") { + + dates_file <- format(as.Date(dates, '%Y%m%d'), "%Y%m") + dim(dates_file) <- dim(dates) + + obs <- Start(dat = obs.path, + var = variable, + var_dir = var_dir_obs, + var_dir_depends = 'var', + file_date = dates_file, + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = circularsort, + transform = regrid_params$obs.transform, + transform_params = list(grid = regrid_params$obs.gridtype, + method = regrid_params$obs.gridmethod), + transform_vars = c('latitude', 'longitude'), + synonims = list(latitude = c('lat','latitude'), + longitude = c('lon','longitude')), + metadata_dims = 'var', + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = 'file_date'), + split_multiselected_dims = TRUE, + retrieve = TRUE) + + } else if (store.freq %in% c("daily_mean", "daily")) { + + # Get year and month for file_date + dates_file <- sapply(dates, format, '%Y%m') + dim(dates_file) <- dim(dates) + # Set hour to 12:00 to ensure correct date retrieval for daily data + lubridate::hour(dates) <- 12 + lubridate::minute(dates) <- 00 + # Restore correct dimensions + dim(dates) <- dim(dates_file) + + obs <- Start(dat = obs.path, + var = variable, + var_dir = var_dir_obs, + var_dir_depends = 'var', + file_date = sort(unique(dates_file)), + time = dates, + time_var = 'time', + time_across = 'file_date', + merge_across_dims = TRUE, + merge_across_dims_narm = TRUE, + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = circularsort, + transform = regrid_params$obs.transform, + transform_params = list(grid = regrid_params$obs.gridtype, + method = regrid_params$obs.gridmethod), + transform_vars = c('latitude', 'longitude'), + synonims = list(latitude = c('lat','latitude'), + longitude = c('lon','longitude')), + metadata_dims = 'var', + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = 'file_date'), + split_multiselected_dims = TRUE, + retrieve = TRUE) + } + + + # Remove var_dir dimension + if ("var_dir" %in% names(dim(obs))) { + obs <- Subset(obs, along = "var_dir", indices = 1, drop = "selected") + } + # Adds ensemble dim to obs (for consistency with hcst/fcst) + default_dims <- c(dat = 1, var = 1, sday = 1, + sweek = 1, syear = 1, time = 1, + latitude = 1, longitude = 1, ensemble = 1) + default_dims[names(dim(obs))] <- dim(obs) + dim(obs) <- default_dims + + # Convert obs to s2dv_cube + obs <- as.s2dv_cube(obs) + + # Check for consistency between hcst and obs grid + if (!(recipe$Analysis$Regrid$type == 'none')) { + if (!isTRUE(all.equal(as.vector(hcst$lat), as.vector(obs$lat)))) { + lat_error_msg <- paste("Latitude mismatch between hcst and obs.", + "Please check the original grids and the", + "regrid parameters in your recipe.") + error(recipe$Run$logger, lat_error_msg) + hcst_lat_msg <- paste0("First hcst lat: ", hcst$lat[1], + "; Last hcst lat: ", hcst$lat[length(hcst$lat)]) + info(recipe$Run$logger, hcst_lat_msg) + obs_lat_msg <- paste0("First obs lat: ", obs$lat[1], + "; Last obs lat: ", obs$lat[length(obs$lat)]) + info(recipe$Run$logger, obs_lat_msg) + stop("hcst and obs don't share the same latitudes.") + } + if (!isTRUE(all.equal(as.vector(hcst$lon), as.vector(obs$lon)))) { + lon_error_msg <- paste("Longitude mismatch between hcst and obs.", + "Please check the original grids and the", + "regrid parameters in your recipe.") + error(recipe$Run$logger, lon_error_msg) + hcst_lon_msg <- paste0("First hcst lon: ", hcst$lon[1], + "; Last hcst lon: ", hcst$lon[length(hcst$lon)]) + info(recipe$Run$logger, hcst_lon_msg) + obs_lon_msg <- paste0("First obs lon: ", obs$lon[1], + "; Last obs lon: ", obs$lon[length(obs$lon)]) + info(recipe$Run$logger, obs_lon_msg) + stop("hcst and obs don't share the same longitudes.") + + } + } + + # Remove negative values in accumulative variables + dictionary <- read_yaml("conf/variable-dictionary.yml") + for (var_idx in 1:length(variable)) { + var_name <- variable[var_idx] + if (dictionary$vars[[var_name]]$accum) { + info(recipe$Run$logger, + paste0("Accumulated variable ", var_name, + ": setting negative values to zero.")) + # obs$data[, var_idx, , , , , , , ] <- pmax(Subset(obs$data, + # along = "var", + # indices = var_idx, F), 0) + obs$data[, var_idx, , , , , , , ][obs$data[, var_idx, , , , , , , ] < 0] <- 0 + hcst$data[, var_idx, , , , , , , ][hcst$data[, var_idx, , , , , , , ] < 0] <- 0 + if (!is.null(fcst)) { + fcst$data[, var_idx, , , , , , , ][fcst$data[, var_idx, , , , , , , ] < 0] <- 0 + } + } + + # Convert prlr from m/s to mm/day + ## TODO: Make a unit conversion function +# if (variable[[var_idx]] == "prlr") { +# # Verify that the units are m/s and the same in obs and hcst +# if (((obs$attrs$Variable$metadata[[var_name]]$units == "m s-1") || +# (obs$attrs$Variable$metadata[[var_name]]$units == "m s**-1")) && +# ((hcst$attrs$Variable$metadata[[var_name]]$units == "m s-1") || +# (hcst$attrs$Variable$metadata[[var_name]]$units == "m s**-1"))) { +# info(recipe$Run$logger, "Converting precipitation from m/s to mm/day.") +# obs$data[, var_idx, , , , , , , ] <- +# obs$data[, var_idx, , , , , , , ]*86400*1000 +# obs$attrs$Variable$metadata[[var_name]]$units <- "mm/day" +# hcst$data[, var_idx, , , , , , , ] <- +# hcst$data[, var_idx, , , , , , , ]*86400*1000 +# hcst$attrs$Variable$metadata[[var_name]]$units <- "mm/day" +# if (!is.null(fcst)) { +# fcst$data[, var_idx, , , , , , , ] <- +# fcst$data[, var_idx, , , , , , , ]*86400*1000 +# fcst$attrs$Variable$metadata[[var_name]]$units <- "mm/day" +# } +# } +# } + } + # Compute anomalies if requested + # Print a summary of the loaded data for the user, for each object + if (recipe$Run$logger$threshold <= 2) { + data_summary(hcst, recipe) + data_summary(obs, recipe) + if (!is.null(fcst)) { + data_summary(fcst, recipe) + } + } + + info(recipe$Run$logger, + "##### DATA LOADING COMPLETED SUCCESSFULLY #####") + + ############################################################################ + # + # CHECKS ON MISSING FILES + # + ############################################################################ + + #obs.NA_dates.ind <- Apply(obs, + # fun=(function(x){ all(is.na(x))}), + # target_dims=c('time', 'latitude', 'longitude'))[[1]] + #obs.NA_dates <- dates_file[obs.NA_dates.ind] + #obs.NA_dates <- obs.NA_dates[order(obs.NA_dates)] + #obs.NA_files <- paste0(obs.dir, store.freq,"/",variable,"_", + # freq.obs,"obs.grid","/",variable,"_",obs.NA_dates,".nc") + # + #if (any(is.na(hcst))){ + # fatal(recipe$Run$logger, + # paste(" ERROR: MISSING HCST VALUES FOUND DURING LOADING # ", + # " ################################################# ", + # " ###### MISSING FILES #### ", + # " ################################################# ", + # "hcst files:", + # hcst.NA_files, + # " ################################################# ", + # " ################################################# ", + # sep="\n")) + # quit(status = 1) + #} + # + #if (any(is.na(obs)) && !identical(obs.NA_dates,character(0))){ + # fatal(recipe$logger, + # paste(" ERROR: MISSING OBS VALUES FOUND DURING LOADING # ", + # " ################################################# ", + # " ###### MISSING FILES #### ", + # " ################################################# ", + # "obs files:", + # obs.NA_files, + # " ################################################# ", + # " ################################################# ", + # sep="\n")) + # quit(status=1) + #} + # + #info(recipe$logger, + # "######### DATA LOADING COMPLETED SUCCESFULLY ##############") + + ############################################################################ + ############################################################################ + + return(list(hcst = hcst, fcst = fcst, obs = obs)) + +} -- GitLab From aa952347a49f85b473f524d1f048371b28751f3f Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Wed, 20 Sep 2023 14:45:03 +0200 Subject: [PATCH 280/388] Fix a bug in Visualization module that raised an error in the decadal case when more than 12 forecast times were plotted --- modules/Visualization/R/plot_ensemble_mean.R | 9 +++++++-- .../R/plot_most_likely_terciles_map.R | 9 +++++++-- modules/Visualization/R/plot_skill_metrics.R | 16 +++++++++++----- 3 files changed, 25 insertions(+), 9 deletions(-) diff --git a/modules/Visualization/R/plot_ensemble_mean.R b/modules/Visualization/R/plot_ensemble_mean.R index a753c23a..8a16341e 100644 --- a/modules/Visualization/R/plot_ensemble_mean.R +++ b/modules/Visualization/R/plot_ensemble_mean.R @@ -10,8 +10,13 @@ plot_ensemble_mean <- function(recipe, fcst, mask = NULL, dots = NULL, outdir, o system_name <- archive$System[[recipe$Analysis$Datasets$System$name]]$name start_date <- paste0(recipe$Analysis$Time$fcst_year, recipe$Analysis$Time$sdate) - init_month <- as.numeric(substr(recipe$Analysis$Time$sdate, - start = 1, stop = 2)) + if (tolower(recipe$Analysis$Horizon) == "seasonal") { + init_month <- as.numeric(substr(recipe$Analysis$Time$sdate, + start = 1, stop = 2)) + } else { + ## TODO: Sort out decadal initial month (is it always January?) + init_month <- 1 + } if (!is.null(recipe$Analysis$Workflow$Visualization$projection)) { projection <- tolower(recipe$Analysis$Workflow$Visualization$projection) } else { diff --git a/modules/Visualization/R/plot_most_likely_terciles_map.R b/modules/Visualization/R/plot_most_likely_terciles_map.R index 93d36042..66006ed1 100644 --- a/modules/Visualization/R/plot_most_likely_terciles_map.R +++ b/modules/Visualization/R/plot_most_likely_terciles_map.R @@ -30,8 +30,13 @@ plot_most_likely_terciles <- function(recipe, system_name <- archive$System[[recipe$Analysis$Datasets$System$name]]$name start_date <- paste0(recipe$Analysis$Time$fcst_year, recipe$Analysis$Time$sdate) - init_month <- as.numeric(substr(recipe$Analysis$Time$sdate, - start = 1, stop = 2)) + if (tolower(recipe$Analysis$Horizon) == "seasonal") { + init_month <- as.numeric(substr(recipe$Analysis$Time$sdate, + start = 1, stop = 2)) + } else { + ## TODO: Sort out decadal initial month (is it always January?) + init_month <- 1 + } # Retrieve and rearrange probability bins for the forecast if (is.null(probabilities$probs_fcst$prob_b33) || diff --git a/modules/Visualization/R/plot_skill_metrics.R b/modules/Visualization/R/plot_skill_metrics.R index 5a3eafaf..96496fb4 100644 --- a/modules/Visualization/R/plot_skill_metrics.R +++ b/modules/Visualization/R/plot_skill_metrics.R @@ -26,10 +26,19 @@ plot_skill_metrics <- function(recipe, data_cube, skill_metrics, system_name <- archive$System[[recipe$Analysis$Datasets$System$name]]$name hcst_period <- paste0(recipe$Analysis$Time$hcst_start, "-", recipe$Analysis$Time$hcst_end) - init_month <- as.numeric(substr(recipe$Analysis$Time$sdate, - start = 1, stop = 2)) + if (tolower(recipe$Analysis$Horizon) == "seasonal") { + init_month <- as.numeric(substr(recipe$Analysis$Time$sdate, + start = 1, stop = 2)) + } else { + ## TODO: Sort out decadal initial month (is it always January?) + init_month <- 1 + } month_label <- tolower(month.name[init_month]) month_abbreviation <- month.abb[init_month] + # Get months + months <- lubridate::month(Subset(data_cube$attrs$Dates, + "syear", indices = 1), + label = T, abb = F) if (!is.null(recipe$Analysis$Workflow$Visualization$projection)) { projection <- tolower(recipe$Analysis$Workflow$Visualization$projection) } else { @@ -137,9 +146,6 @@ plot_skill_metrics <- function(recipe, data_cube, skill_metrics, } else { outfile <- paste0(outdir[var], name) } - # Get months - months <- unique(lubridate::month(data_cube$attrs$Dates, - label = T, abb = F)) # Get variable name and long name var_name <- data_cube$attrs$Variable$varName[[var]] var_long_name <- data_cube$attrs$Variable$metadata[[var_name]]$long_name -- GitLab From edb99843f8733c00f64b0215c7546f0d2bb0f25d Mon Sep 17 00:00:00 2001 From: vagudets Date: Thu, 21 Sep 2023 09:09:02 +0200 Subject: [PATCH 281/388] Rename main module functions and adapt the recipe format --- example_scripts/test_decadal.R | 17 +- example_scripts/test_parallel_workflow.R | 14 +- example_scripts/test_seasonal.R | 15 +- modules/Anomalies/Anomalies.R | 5 +- modules/Anomalies/compute_anomalies.R | 7 + modules/Calibration/Calibration.R | 4 +- modules/Calibration/calibrate_datasets.R | 7 + modules/Loading/Loading.R | 461 +----------------- .../Loading/{ => R}/helper_loading_decadal.R | 0 modules/Loading/R/load_decadal.R | 90 ++-- modules/Loading/R/load_seasonal.R | 6 +- modules/Loading/load_datasets.R | 7 + modules/Saving/Saving.R | 11 +- modules/Skill/Skill.R | 49 +- modules/Skill/compute_probabilities.R | 7 + modules/Skill/compute_skill_metrics.R | 7 + modules/Visualization/Visualization.R | 14 +- modules/Visualization/plot_data.R | 11 + recipes/recipe_decadal_split.yml | 7 +- recipes/tests/recipe_seasonal_example.yml | 2 +- tests/recipes/recipe-seasonal_daily_1.yml | 12 +- tests/testthat/test-decadal_daily_1.R | 10 +- tests/testthat/test-decadal_monthly_1.R | 24 +- tests/testthat/test-decadal_monthly_2.R | 16 +- tests/testthat/test-decadal_monthly_3.R | 10 +- tests/testthat/test-seasonal_NAO.R | 6 +- tests/testthat/test-seasonal_daily.R | 6 +- tests/testthat/test-seasonal_monthly.R | 18 +- tools/divide_recipe.R | 53 +- tools/libs.R | 1 + tools/prepare_outputs.R | 2 + tools/read_atomic_recipe.R | 2 + tools/restructure_recipe.R | 24 + 33 files changed, 261 insertions(+), 664 deletions(-) create mode 100644 modules/Anomalies/compute_anomalies.R create mode 100644 modules/Calibration/calibrate_datasets.R rename modules/Loading/{ => R}/helper_loading_decadal.R (100%) create mode 100644 modules/Loading/load_datasets.R create mode 100644 modules/Skill/compute_probabilities.R create mode 100644 modules/Skill/compute_skill_metrics.R create mode 100644 modules/Visualization/plot_data.R create mode 100644 tools/restructure_recipe.R diff --git a/example_scripts/test_decadal.R b/example_scripts/test_decadal.R index 900b2622..12daa540 100644 --- a/example_scripts/test_decadal.R +++ b/example_scripts/test_decadal.R @@ -4,7 +4,7 @@ ## do not modify. ############################################################################### -source("modules/Loading/Loading_decadal.R") +source("modules/Loading/Loading.R") source("modules/Calibration/Calibration.R") source("modules/Skill/Skill.R") source("modules/Saving/Saving.R") @@ -15,21 +15,18 @@ recipe <- prepare_outputs(recipe_file) # archive <- read_yaml(paste0(recipe$Run$code_dir, "conf/archive_decadal.yml"))$archive # Load datasets -data <- load_datasets(recipe) +data <- Loading(recipe) # Calibrate datasets -calibrated_data <- calibrate_datasets(recipe, data) +calibrated_data <- Calibration(recipe, data) # Compute skill metrics -skill_metrics <- compute_skill_metrics(recipe, calibrated_data) +skill_metrics <- Skill(recipe, calibrated_data) # Compute percentiles and probability bins -probabilities <- compute_probabilities(recipe, calibrated_data) - -# Export all data to netCDF -save_data(recipe, calibrated_data, skill_metrics, probabilities) +probabilities <- Probabilities(recipe, calibrated_data) # Plot data -plot_data(recipe, calibrated_data, skill_metrics, probabilities, - significance = T) +Visualization(recipe, calibrated_data, skill_metrics, probabilities, + significance = T) diff --git a/example_scripts/test_parallel_workflow.R b/example_scripts/test_parallel_workflow.R index 8cf79c25..5f026513 100644 --- a/example_scripts/test_parallel_workflow.R +++ b/example_scripts/test_parallel_workflow.R @@ -9,15 +9,15 @@ args = commandArgs(trailingOnly = TRUE) recipe_file <- args[1] recipe <- read_atomic_recipe(recipe_file) # Load datasets -data <- load_datasets(recipe) +data <- Loading(recipe) # Calibrate datasets -data <- calibrate_datasets(recipe, data) +data <- Calibration(recipe, data) # Compute anomalies -data <- compute_anomalies(recipe, data) +data <- Anomalies(recipe, data) # Compute skill metrics -skill_metrics <- compute_skill_metrics(recipe, data) +skill_metrics <- Skill(recipe, data) # Compute percentiles and probability bins -probabilities <- compute_probabilities(recipe, data) +probabilities <- Probabilities(recipe, data) # Plot data -plot_data(recipe, data, skill_metrics, probabilities, - significance = T) +Visualization(recipe, data, skill_metrics, probabilities, + significance = T) diff --git a/example_scripts/test_seasonal.R b/example_scripts/test_seasonal.R index 9734aeaf..2c7d673a 100644 --- a/example_scripts/test_seasonal.R +++ b/example_scripts/test_seasonal.R @@ -18,19 +18,16 @@ recipe_file <- "recipes/atomic_recipes/recipe_test_multivar.yml" recipe <- prepare_outputs(recipe_file) # Load datasets -data <- load_datasets(recipe) +data <- Loading(recipe) # Change units data <- Units(recipe, data) # Calibrate datasets -data <- calibrate_datasets(recipe, data) +data <- Calibration(recipe, data) # Compute anomalies -data <- compute_anomalies(recipe, data) +data <- Anomalies(recipe, data) # Compute skill metrics -skill_metrics <- compute_skill_metrics(recipe, data) +skill_metrics <- Skill(recipe, data) # Compute percentiles and probability bins -probabilities <- compute_probabilities(recipe, data) -# Export all data to netCDF -## TODO: Fix plotting -# save_data(recipe, data, skill_metrics, probabilities) +probabilities <- Probabilities(recipe, data) # Plot data -plot_data(recipe, data, skill_metrics, probabilities, significance = T) +Visualization(recipe, data, skill_metrics, probabilities, significance = T) diff --git a/modules/Anomalies/Anomalies.R b/modules/Anomalies/Anomalies.R index 470d4706..386317fb 100644 --- a/modules/Anomalies/Anomalies.R +++ b/modules/Anomalies/Anomalies.R @@ -1,7 +1,10 @@ +## TODO: Remove in the next release +source("modules/Anomalies/compute_anomalies.R") + # Compute the hcst, obs and fcst anomalies with or without cross-validation # and return them, along with the hcst and obs climatologies. -compute_anomalies <- function(recipe, data) { +Anomalies <- function(recipe, data) { if (is.null(recipe$Analysis$Workflow$Anomalies$compute)) { error(recipe$Run$logger, diff --git a/modules/Anomalies/compute_anomalies.R b/modules/Anomalies/compute_anomalies.R new file mode 100644 index 00000000..2ef36a34 --- /dev/null +++ b/modules/Anomalies/compute_anomalies.R @@ -0,0 +1,7 @@ +compute_anomalies <- function(recipe, data) { + warning(paste0("The function compute_anomalies() has been renamed to: ", + "'Anomalies()'. The name 'compute_anomalies()' will be ", + "deprecated in the next release. Please change your scripts ", + "accordingly.")) + return(Anomalies(recipe, data)) +} diff --git a/modules/Calibration/Calibration.R b/modules/Calibration/Calibration.R index 5811fa05..171b22cf 100644 --- a/modules/Calibration/Calibration.R +++ b/modules/Calibration/Calibration.R @@ -1,5 +1,7 @@ +## TODO: Remove in the next release +source("modules/Calibration/calibrate_datasets.R") -calibrate_datasets <- function(recipe, data) { +Calibration <- function(recipe, data) { # Function that calibrates the hindcast using the method stated in the # recipe. If the forecast is not null, it calibrates it as well. # diff --git a/modules/Calibration/calibrate_datasets.R b/modules/Calibration/calibrate_datasets.R new file mode 100644 index 00000000..8264992f --- /dev/null +++ b/modules/Calibration/calibrate_datasets.R @@ -0,0 +1,7 @@ +calibrate_datasets <- function(recipe, data) { + warning(paste0("The function calibrate_datasets() has been renamed to: ", + "'Calibration()'. The name 'calibrate_datasets' will be ", + "deprecated in the next release. Please change your scripts ", + "accordingly.")) + return(Calibration(recipe, data)) +} diff --git a/modules/Loading/Loading.R b/modules/Loading/Loading.R index 8cc46dc7..cf97efc2 100644 --- a/modules/Loading/Loading.R +++ b/modules/Loading/Loading.R @@ -1,452 +1,19 @@ -## TODO: remove paths to personal scratchs -source("/esarchive/scratch/vagudets/repos/csoperational/R/get_regrid_params.R") -# Load required libraries/funs -source("modules/Loading/R/dates2load.R") -source("modules/Loading/R/get_timeidx.R") -source("modules/Loading/R/check_latlon.R") -## TODO: Move to prepare_outputs.R source("tools/libs.R") +## TODO: Remove with the next release +source("modules/Loading/load_datasets.R") -load_datasets <- function(recipe) { - - # ------------------------------------------- - # Set params ----------------------------------------- - - hcst.inityear <- recipe$Analysis$Time$hcst_start - hcst.endyear <- recipe$Analysis$Time$hcst_end - lats.min <- recipe$Analysis$Region$latmin - lats.max <- recipe$Analysis$Region$latmax - lons.min <- recipe$Analysis$Region$lonmin - lons.max <- recipe$Analysis$Region$lonmax - ref.name <- recipe$Analysis$Datasets$Reference$name - exp.name <- recipe$Analysis$Datasets$System$name - - variable <- strsplit(recipe$Analysis$Variables$name, ", | |,")[[1]] - store.freq <- recipe$Analysis$Variables$freq - - # get sdates array - ## LOGGER: Change dates2load to extract logger from recipe? - sdates <- dates2load(recipe, recipe$Run$logger) - - idxs <- NULL - idxs$hcst <- get_timeidx(sdates$hcst, - recipe$Analysis$Time$ftime_min, - recipe$Analysis$Time$ftime_max, - time_freq=store.freq) - - if (!(is.null(sdates$fcst))) { - idxs$fcst <- get_timeidx(sdates$fcst, - recipe$Analysis$Time$ftime_min, - recipe$Analysis$Time$ftime_max, - time_freq=store.freq) - } - - ## TODO: Examine this verifications part, verify if it's necessary - # stream <- verifications$stream - # sdates <- verifications$fcst.sdate - - ## TODO: define fcst.name - ##fcst.name <- recipe$Analysis$Datasets$System[[sys]]$name - - # get esarchive datasets dict: - ## TODO: Adapt to 'filesystem' option in recipe - archive <- read_yaml("conf/archive.yml")$esarchive - exp_descrip <- archive$System[[exp.name]] - - freq.hcst <- unlist(exp_descrip[[store.freq]][variable[1]]) - reference_descrip <- archive$Reference[[ref.name]] - freq.obs <- unlist(reference_descrip[[store.freq]][variable[1]]) - obs.dir <- reference_descrip$src - fcst.dir <- exp_descrip$src - hcst.dir <- exp_descrip$src - fcst.nmember <- exp_descrip$nmember$fcst - hcst.nmember <- exp_descrip$nmember$hcst - - ## TODO: it is necessary? - ##if ("accum" %in% names(reference_descrip)) { - ## accum <- unlist(reference_descrip$accum[store.freq][[1]]) - ##} else { - ## accum <- FALSE - ##} - - var_dir_obs <- reference_descrip[[store.freq]][variable] - var_dir_exp <- exp_descrip[[store.freq]][variable] - - # ----------- - obs.path <- paste0(archive$src, - obs.dir, store.freq, "/$var$", "$var_dir$", - "/$var$_$file_date$.nc") - - hcst.path <- paste0(archive$src, - hcst.dir, store.freq, "/$var$", "$var_dir$", - "$var$_$file_date$.nc") - - fcst.path <- paste0(archive$src, - hcst.dir, store.freq, "/$var$", "$var_dir$", - "/$var$_$file_date$.nc") - - # Define regrid parameters: - #------------------------------------------------------------------- - regrid_params <- get_regrid_params(recipe, archive) - - # Longitude circular sort and latitude check - #------------------------------------------------------------------- - circularsort <- check_latlon(lats.min, lats.max, lons.min, lons.max) - - if (recipe$Analysis$Variables$freq == "monthly_mean"){ - split_multiselected_dims = TRUE - } else { - split_multiselected_dims = FALSE - } - - # Load hindcast - #------------------------------------------------------------------- - hcst <- Start(dat = hcst.path, - var = variable, - var_dir = var_dir_exp, - file_date = sdates$hcst, - time = idxs$hcst, - var_dir_depends = 'var', - latitude = values(list(lats.min, lats.max)), - latitude_reorder = Sort(), - longitude = values(list(lons.min, lons.max)), - longitude_reorder = circularsort, - transform = regrid_params$fcst.transform, - transform_params = list(grid = regrid_params$fcst.gridtype, - method = regrid_params$fcst.gridmethod), - transform_vars = c('latitude', 'longitude'), - synonims = list(latitude = c('lat', 'latitude'), - longitude = c('lon', 'longitude'), - ensemble = c('member', 'ensemble')), - ensemble = indices(1:hcst.nmember), - metadata_dims = 'var', # change to just 'var'? - return_vars = list(latitude = 'dat', - longitude = 'dat', - time = 'file_date'), - split_multiselected_dims = split_multiselected_dims, - retrieve = TRUE) - - # Remove var_dir dimension - if ("var_dir" %in% names(dim(hcst))) { - hcst <- Subset(hcst, along = "var_dir", indices = 1, drop = "selected") - } - - if (store.freq %in% c("daily_mean", "daily")) { - # Adjusts dims for daily case, could be removed if startR allows - # multidim split - names(dim(hcst))[which(names(dim(hcst)) == 'file_date')] <- "syear" - default_dims <- c(dat = 1, var = 1, sday = 1, - sweek = 1, syear = 1, time = 1, - latitude = 1, longitude = 1, ensemble = 1) - default_dims[names(dim(hcst))] <- dim(hcst) - dim(hcst) <- default_dims - # Change time attribute dimensions - default_time_dims <- c(sday = 1, sweek = 1, syear = 1, time = 1) - names(dim(attr(hcst, "Variables")$common$time))[which(names( - dim(attr(hcst, "Variables")$common$time)) == 'file_date')] <- "syear" - default_time_dims[names(dim(attr(hcst, "Variables")$common$time))] <- - dim(attr(hcst, "Variables")$common$time) - dim(attr(hcst, "Variables")$common$time) <- default_time_dims - } - - # Convert hcst to s2dv_cube object - ## TODO: Give correct dimensions to $Dates - ## (sday, sweek, syear instead of file_date) - hcst <- as.s2dv_cube(hcst) - # Adjust dates for models where the time stamp goes into the next month - if (recipe$Analysis$Variables$freq == "monthly_mean") { - hcst$attrs$Dates[] <- hcst$attrs$Dates - seconds(exp_descrip$time_stamp_lag) - } - - # Load forecast - #------------------------------------------------------------------- - if (!is.null(recipe$Analysis$Time$fcst_year)) { - # the call uses file_date instead of fcst_syear so that it can work - # with the daily case and the current version of startR not allowing - # multiple dims split - - fcst <- Start(dat = fcst.path, - var = variable, - var_dir = var_dir_exp, - var_dir_depends = 'var', - file_date = sdates$fcst, - time = idxs$fcst, - latitude = values(list(lats.min, lats.max)), - latitude_reorder = Sort(), - longitude = values(list(lons.min, lons.max)), - longitude_reorder = circularsort, - transform = regrid_params$fcst.transform, - transform_params = list(grid = regrid_params$fcst.gridtype, - method = regrid_params$fcst.gridmethod), - transform_vars = c('latitude', 'longitude'), - synonims = list(latitude = c('lat', 'latitude'), - longitude = c('lon', 'longitude'), - ensemble = c('member', 'ensemble')), - ensemble = indices(1:fcst.nmember), - metadata_dims = 'var', - return_vars = list(latitude = 'dat', - longitude = 'dat', - time = 'file_date'), - split_multiselected_dims = split_multiselected_dims, - retrieve = TRUE) - - if ("var_dir" %in% names(dim(fcst))) { - fcst <- Subset(fcst, along = "var_dir", indices = 1, drop = "selected") - } - - if (store.freq %in% c("daily_mean", "daily")) { - # Adjusts dims for daily case, could be removed if startR allows - # multidim split - names(dim(fcst))[which(names(dim(fcst)) == 'file_date')] <- "syear" - default_dims <- c(dat = 1, var = 1, sday = 1, - sweek = 1, syear = 1, time = 1, - latitude = 1, longitude = 1, ensemble = 1) - default_dims[names(dim(fcst))] <- dim(fcst) - dim(fcst) <- default_dims - # Change time attribute dimensions - default_time_dims <- c(sday = 1, sweek = 1, syear = 1, time = 1) - names(dim(attr(fcst, "Variables")$common$time))[which(names( - dim(attr(fcst, "Variables")$common$time)) == 'file_date')] <- "syear" - default_time_dims[names(dim(attr(fcst, "Variables")$common$time))] <- - dim(attr(fcst, "Variables")$common$time) - dim(attr(fcst, "Variables")$common$time) <- default_time_dims - } - - # Convert fcst to s2dv_cube - fcst <- as.s2dv_cube(fcst) - # Adjust dates for models where the time stamp goes into the next month - if (recipe$Analysis$Variables$freq == "monthly_mean") { - fcst$attrs$Dates[] <- - fcst$attrs$Dates - seconds(exp_descrip$time_stamp_lag) - } - +Loading <- function(recipe) { + # Source correct function depending on time horizon + ## TODO: Add condition for GRIB files + time_horizon <- tolower(recipe$Analysis$Horizon) + if (time_horizon == "seasonal") { + source("modules/Loading/R/load_seasonal.R") + data <- load_seasonal(recipe) + } else if (time_horizon == "decadal") { + source("modules/Loading/R/load_decadal.R") + data <- load_decadal(recipe) } else { - fcst <- NULL - } - - # Load reference - #------------------------------------------------------------------- - - # Obtain dates and date dimensions from the loaded hcst data to make sure - # the corresponding observations are loaded correctly. - dates <- hcst$attrs$Dates - dim(dates) <- hcst$dims[c("sday", "sweek", "syear", "time")] - - # Separate Start() call for monthly vs daily data - if (store.freq == "monthly_mean") { - - dates_file <- format(as.Date(dates, '%Y%m%d'), "%Y%m") - dim(dates_file) <- dim(dates) - - obs <- Start(dat = obs.path, - var = variable, - var_dir = var_dir_obs, - var_dir_depends = 'var', - file_date = dates_file, - latitude = values(list(lats.min, lats.max)), - latitude_reorder = Sort(), - longitude = values(list(lons.min, lons.max)), - longitude_reorder = circularsort, - transform = regrid_params$obs.transform, - transform_params = list(grid = regrid_params$obs.gridtype, - method = regrid_params$obs.gridmethod), - transform_vars = c('latitude', 'longitude'), - synonims = list(latitude = c('lat','latitude'), - longitude = c('lon','longitude')), - metadata_dims = 'var', - return_vars = list(latitude = 'dat', - longitude = 'dat', - time = 'file_date'), - split_multiselected_dims = TRUE, - retrieve = TRUE) - - } else if (store.freq %in% c("daily_mean", "daily")) { - - # Get year and month for file_date - dates_file <- sapply(dates, format, '%Y%m') - dim(dates_file) <- dim(dates) - # Set hour to 12:00 to ensure correct date retrieval for daily data - lubridate::hour(dates) <- 12 - lubridate::minute(dates) <- 00 - # Restore correct dimensions - dim(dates) <- dim(dates_file) - - obs <- Start(dat = obs.path, - var = variable, - var_dir = var_dir_obs, - var_dir_depends = 'var', - file_date = sort(unique(dates_file)), - time = dates, - time_var = 'time', - time_across = 'file_date', - merge_across_dims = TRUE, - merge_across_dims_narm = TRUE, - latitude = values(list(lats.min, lats.max)), - latitude_reorder = Sort(), - longitude = values(list(lons.min, lons.max)), - longitude_reorder = circularsort, - transform = regrid_params$obs.transform, - transform_params = list(grid = regrid_params$obs.gridtype, - method = regrid_params$obs.gridmethod), - transform_vars = c('latitude', 'longitude'), - synonims = list(latitude = c('lat','latitude'), - longitude = c('lon','longitude')), - metadata_dims = 'var', - return_vars = list(latitude = 'dat', - longitude = 'dat', - time = 'file_date'), - split_multiselected_dims = TRUE, - retrieve = TRUE) - } - - - # Remove var_dir dimension - if ("var_dir" %in% names(dim(obs))) { - obs <- Subset(obs, along = "var_dir", indices = 1, drop = "selected") - } - # Adds ensemble dim to obs (for consistency with hcst/fcst) - default_dims <- c(dat = 1, var = 1, sday = 1, - sweek = 1, syear = 1, time = 1, - latitude = 1, longitude = 1, ensemble = 1) - default_dims[names(dim(obs))] <- dim(obs) - dim(obs) <- default_dims - - # Convert obs to s2dv_cube - obs <- as.s2dv_cube(obs) - - # Check for consistency between hcst and obs grid - if (!(recipe$Analysis$Regrid$type == 'none')) { - if (!isTRUE(all.equal(as.vector(hcst$lat), as.vector(obs$lat)))) { - lat_error_msg <- paste("Latitude mismatch between hcst and obs.", - "Please check the original grids and the", - "regrid parameters in your recipe.") - error(recipe$Run$logger, lat_error_msg) - hcst_lat_msg <- paste0("First hcst lat: ", hcst$lat[1], - "; Last hcst lat: ", hcst$lat[length(hcst$lat)]) - info(recipe$Run$logger, hcst_lat_msg) - obs_lat_msg <- paste0("First obs lat: ", obs$lat[1], - "; Last obs lat: ", obs$lat[length(obs$lat)]) - info(recipe$Run$logger, obs_lat_msg) - stop("hcst and obs don't share the same latitudes.") - } - if (!isTRUE(all.equal(as.vector(hcst$lon), as.vector(obs$lon)))) { - lon_error_msg <- paste("Longitude mismatch between hcst and obs.", - "Please check the original grids and the", - "regrid parameters in your recipe.") - error(recipe$Run$logger, lon_error_msg) - hcst_lon_msg <- paste0("First hcst lon: ", hcst$lon[1], - "; Last hcst lon: ", hcst$lon[length(hcst$lon)]) - info(recipe$Run$logger, hcst_lon_msg) - obs_lon_msg <- paste0("First obs lon: ", obs$lon[1], - "; Last obs lon: ", obs$lon[length(obs$lon)]) - info(recipe$Run$logger, obs_lon_msg) - stop("hcst and obs don't share the same longitudes.") - - } - } - - # Remove negative values in accumulative variables - dictionary <- read_yaml("conf/variable-dictionary.yml") - for (var_idx in 1:length(variable)) { - var_name <- variable[var_idx] - if (dictionary$vars[[var_name]]$accum) { - info(recipe$Run$logger, - paste0("Accumulated variable ", var_name, - ": setting negative values to zero.")) - # obs$data[, var_idx, , , , , , , ] <- pmax(Subset(obs$data, - # along = "var", - # indices = var_idx, F), 0) - obs$data[, var_idx, , , , , , , ][obs$data[, var_idx, , , , , , , ] < 0] <- 0 - hcst$data[, var_idx, , , , , , , ][hcst$data[, var_idx, , , , , , , ] < 0] <- 0 - if (!is.null(fcst)) { - fcst$data[, var_idx, , , , , , , ][fcst$data[, var_idx, , , , , , , ] < 0] <- 0 - } - } - - # Convert prlr from m/s to mm/day - ## TODO: Make a unit conversion function -# if (variable[[var_idx]] == "prlr") { -# # Verify that the units are m/s and the same in obs and hcst -# if (((obs$attrs$Variable$metadata[[var_name]]$units == "m s-1") || -# (obs$attrs$Variable$metadata[[var_name]]$units == "m s**-1")) && -# ((hcst$attrs$Variable$metadata[[var_name]]$units == "m s-1") || -# (hcst$attrs$Variable$metadata[[var_name]]$units == "m s**-1"))) { -# info(recipe$Run$logger, "Converting precipitation from m/s to mm/day.") -# obs$data[, var_idx, , , , , , , ] <- -# obs$data[, var_idx, , , , , , , ]*86400*1000 -# obs$attrs$Variable$metadata[[var_name]]$units <- "mm/day" -# hcst$data[, var_idx, , , , , , , ] <- -# hcst$data[, var_idx, , , , , , , ]*86400*1000 -# hcst$attrs$Variable$metadata[[var_name]]$units <- "mm/day" -# if (!is.null(fcst)) { -# fcst$data[, var_idx, , , , , , , ] <- -# fcst$data[, var_idx, , , , , , , ]*86400*1000 -# fcst$attrs$Variable$metadata[[var_name]]$units <- "mm/day" -# } -# } -# } - } - # Compute anomalies if requested - # Print a summary of the loaded data for the user, for each object - if (recipe$Run$logger$threshold <= 2) { - data_summary(hcst, recipe) - data_summary(obs, recipe) - if (!is.null(fcst)) { - data_summary(fcst, recipe) - } + stop("Incorrect time horizon.") } - - info(recipe$Run$logger, - "##### DATA LOADING COMPLETED SUCCESSFULLY #####") - - ############################################################################ - # - # CHECKS ON MISSING FILES - # - ############################################################################ - - #obs.NA_dates.ind <- Apply(obs, - # fun=(function(x){ all(is.na(x))}), - # target_dims=c('time', 'latitude', 'longitude'))[[1]] - #obs.NA_dates <- dates_file[obs.NA_dates.ind] - #obs.NA_dates <- obs.NA_dates[order(obs.NA_dates)] - #obs.NA_files <- paste0(obs.dir, store.freq,"/",variable,"_", - # freq.obs,"obs.grid","/",variable,"_",obs.NA_dates,".nc") - # - #if (any(is.na(hcst))){ - # fatal(recipe$Run$logger, - # paste(" ERROR: MISSING HCST VALUES FOUND DURING LOADING # ", - # " ################################################# ", - # " ###### MISSING FILES #### ", - # " ################################################# ", - # "hcst files:", - # hcst.NA_files, - # " ################################################# ", - # " ################################################# ", - # sep="\n")) - # quit(status = 1) - #} - # - #if (any(is.na(obs)) && !identical(obs.NA_dates,character(0))){ - # fatal(recipe$logger, - # paste(" ERROR: MISSING OBS VALUES FOUND DURING LOADING # ", - # " ################################################# ", - # " ###### MISSING FILES #### ", - # " ################################################# ", - # "obs files:", - # obs.NA_files, - # " ################################################# ", - # " ################################################# ", - # sep="\n")) - # quit(status=1) - #} - # - #info(recipe$logger, - # "######### DATA LOADING COMPLETED SUCCESFULLY ##############") - - ############################################################################ - ############################################################################ - - return(list(hcst = hcst, fcst = fcst, obs = obs)) - + return(data) } diff --git a/modules/Loading/helper_loading_decadal.R b/modules/Loading/R/helper_loading_decadal.R similarity index 100% rename from modules/Loading/helper_loading_decadal.R rename to modules/Loading/R/helper_loading_decadal.R diff --git a/modules/Loading/R/load_decadal.R b/modules/Loading/R/load_decadal.R index 74c97e29..ba4e1386 100644 --- a/modules/Loading/R/load_decadal.R +++ b/modules/Loading/R/load_decadal.R @@ -7,19 +7,17 @@ ## TODO: remove paths to personal scratchs source("/esarchive/scratch/vagudets/repos/csoperational/R/get_regrid_params.R") # Load required libraries/funs -source("modules/Loading/helper_loading_decadal.R") +source("modules/Loading/R/helper_loading_decadal.R") source("modules/Loading/R/dates2load.R") source("modules/Loading/R/check_latlon.R") source("modules/Loading/R/get_timeidx.R") -source("tools/libs.R") #==================================================================== # recipe_file <- "recipes/atomic_recipes/recipe_decadal.yml" # recipe_file <- "recipes/atomic_recipes/recipe_decadal_daily.yml" -load_datasets <- function(recipe) { - +load_decadal <- function(recipe) { ## archive <- read_yaml(paste0("conf/archive_decadal.yml"))$esarchive @@ -34,7 +32,7 @@ load_datasets <- function(recipe) { #------------------------- exp.name <- recipe$Analysis$Datasets$System$name #'HadGEM3' ref.name <- recipe$Analysis$Datasets$Reference$name #'era5' - member <- strsplit(recipe$Analysis$Datasets$System$member, ',')[[1]] #c("r1i1p1f2", "r2i1p1f2") + member <- strsplit(recipe$Analysis$Datasets$System$member, ', | |,')[[1]] #c("r1i1p1f2", "r2i1p1f2") # variable <- recipe$Analysis$Variables$name #'tas' variable <- strsplit(recipe$Analysis$Variables$name, ", | |,")[[1]] store.freq <- recipe$Analysis$Variables$freq #monthly_mean @@ -491,47 +489,47 @@ load_datasets <- function(recipe) { #------------------------------------------- # Step 5. Tune data #------------------------------------------- - # Remove negative values in accumulative variables - dictionary <- read_yaml("conf/variable-dictionary.yml") - for (var_idx in 1:length(variable)) { - var_name <- variable[var_idx] - if (dictionary$vars[[var_name]]$accum) { - info(recipe$Run$logger, - paste0("Accumulated variable ", var_name, - ": setting negative values to zero.")) - # obs$data[, var_idx, , , , , , , ] <- pmax(Subset(obs$data, - # along = "var", - # indices = var_idx, F), 0) - obs$data[, var_idx, , , , , , , ][obs$data[, var_idx, , , , , , , ] < 0] <- 0 - hcst$data[, var_idx, , , , , , , ][hcst$data[, var_idx, , , , , , , ] < 0] <- 0 - if (!is.null(fcst)) { - fcst$data[, var_idx, , , , , , , ][fcst$data[, var_idx, , , , , , , ] < 0] <- 0 - } - } - - # Convert prlr from m/s to mm/day - ## TODO: Make a unit conversion function - if (variable[[var_idx]] == "prlr") { - # Verify that the units are m/s and the same in obs and hcst - if (((obs$attrs$Variable$metadata[[var_name]]$units == "m s-1") || - (obs$attrs$Variable$metadata[[var_name]]$units == "m s**-1")) && - ((hcst$attrs$Variable$metadata[[var_name]]$units == "m s-1") || - (hcst$attrs$Variable$metadata[[var_name]]$units == "m s**-1"))) { - info(recipe$Run$logger, "Converting precipitation from m/s to mm/day.") - obs$data[, var_idx, , , , , , , ] <- - obs$data[, var_idx, , , , , , , ]*86400*1000 - obs$attrs$Variable$metadata[[var_name]]$units <- "mm/day" - hcst$data[, var_idx, , , , , , , ] <- - hcst$data[, var_idx, , , , , , , ]*86400*1000 - hcst$attrs$Variable$metadata[[var_name]]$units <- "mm/day" - if (!is.null(fcst)) { - fcst$data[, var_idx, , , , , , , ] <- - fcst$data[, var_idx, , , , , , , ]*86400*1000 - fcst$attrs$Variable$metadata[[var_name]]$units <- "mm/day" - } - } - } - } + # # Remove negative values in accumulative variables + # dictionary <- read_yaml("conf/variable-dictionary.yml") + # for (var_idx in 1:length(variable)) { + # var_name <- variable[var_idx] + # if (dictionary$vars[[var_name]]$accum) { + # info(recipe$Run$logger, + # paste0("Accumulated variable ", var_name, + # ": setting negative values to zero.")) + # # obs$data[, var_idx, , , , , , , ] <- pmax(Subset(obs$data, + # # along = "var", + # # indices = var_idx, F), 0) + # obs$data[, var_idx, , , , , , , ][obs$data[, var_idx, , , , , , , ] < 0] <- 0 + # hcst$data[, var_idx, , , , , , , ][hcst$data[, var_idx, , , , , , , ] < 0] <- 0 + # if (!is.null(fcst)) { + # fcst$data[, var_idx, , , , , , , ][fcst$data[, var_idx, , , , , , , ] < 0] <- 0 + # } + # } + # + # # Convert prlr from m/s to mm/day + # ## TODO: Make a unit conversion function + # if (variable[[var_idx]] == "prlr") { + # # Verify that the units are m/s and the same in obs and hcst + # if (((obs$attrs$Variable$metadata[[var_name]]$units == "m s-1") || + # (obs$attrs$Variable$metadata[[var_name]]$units == "m s**-1")) && + # ((hcst$attrs$Variable$metadata[[var_name]]$units == "m s-1") || + # (hcst$attrs$Variable$metadata[[var_name]]$units == "m s**-1"))) { + # info(recipe$Run$logger, "Converting precipitation from m/s to mm/day.") + # obs$data[, var_idx, , , , , , , ] <- + # obs$data[, var_idx, , , , , , , ]*86400*1000 + # obs$attrs$Variable$metadata[[var_name]]$units <- "mm/day" + # hcst$data[, var_idx, , , , , , , ] <- + # hcst$data[, var_idx, , , , , , , ]*86400*1000 + # hcst$attrs$Variable$metadata[[var_name]]$units <- "mm/day" + # if (!is.null(fcst)) { + # fcst$data[, var_idx, , , , , , , ] <- + # fcst$data[, var_idx, , , , , , , ]*86400*1000 + # fcst$attrs$Variable$metadata[[var_name]]$units <- "mm/day" + # } + # } + # } + # } #------------------------------------------- # Step 6. Print summary diff --git a/modules/Loading/R/load_seasonal.R b/modules/Loading/R/load_seasonal.R index 8cc46dc7..12a19c6c 100644 --- a/modules/Loading/R/load_seasonal.R +++ b/modules/Loading/R/load_seasonal.R @@ -4,11 +4,9 @@ source("/esarchive/scratch/vagudets/repos/csoperational/R/get_regrid_params.R") source("modules/Loading/R/dates2load.R") source("modules/Loading/R/get_timeidx.R") source("modules/Loading/R/check_latlon.R") -## TODO: Move to prepare_outputs.R -source("tools/libs.R") -load_datasets <- function(recipe) { - +load_seasonal <- function(recipe) { + # ------------------------------------------- # Set params ----------------------------------------- diff --git a/modules/Loading/load_datasets.R b/modules/Loading/load_datasets.R new file mode 100644 index 00000000..86010780 --- /dev/null +++ b/modules/Loading/load_datasets.R @@ -0,0 +1,7 @@ +load_datasets <- function(recipe) { + warning(paste0("The function load_datasets() has been renamed to: ", + "'Loading()'. The name 'load_datasets' will be ", + "deprecated in the next release. Please change your scripts ", + "accordingly.")) + return(Loading(recipe)) +} diff --git a/modules/Saving/Saving.R b/modules/Saving/Saving.R index 2d067ba3..7d0520c2 100644 --- a/modules/Saving/Saving.R +++ b/modules/Saving/Saving.R @@ -14,11 +14,12 @@ source("modules/Saving/R/get_time.R") source("modules/Saving/R/get_latlon.R") source("modules/Saving/R/get_global_attributes.R") source("modules/Saving/R/drop_dims.R") -save_data <- function(recipe, data, - skill_metrics = NULL, - probabilities = NULL, - agg = 'global', - archive = NULL) { + +Saving <- function(recipe, data, + skill_metrics = NULL, + probabilities = NULL, + agg = 'global', + archive = NULL) { # Wrapper for the saving functions. # recipe: The auto-s2s recipe # archive: The auto-s2s archive diff --git a/modules/Skill/Skill.R b/modules/Skill/Skill.R index 6c5c10e6..95b6856a 100644 --- a/modules/Skill/Skill.R +++ b/modules/Skill/Skill.R @@ -20,47 +20,11 @@ source("modules/Skill/R/tmp/MSE.R") source("modules/Skill/R/tmp/MSSS.R") source("modules/Skill/R/RPS_clim.R") source("modules/Skill/R/CRPS_clim.R") +## TODO: Remove in the next release +source("modules/Skill/compute_skill_metrics.R") +source("modules/Skill/compute_probabilities.R") -## TODO: Implement this in the future -## Which parameter are required? -# if (!("obs" %in% ls()) || is.null(obs)) { -# error(logger, -# "There is no object 'obs' in the global environment or it is NULL") -# } -# if (stream == "fcst" && (!("fcst" %in% ls()) || is.null(fcst))) { -# error(logger, -# "There is no object 'fcst' in the global environment or it is NULL") -# } -# if (!("hcst" %in% ls()) || is.null(hcst)) { -# error(logger, -# "There is no object 'hcst' in the global environment or it is NULL") -# } -# if (!("metric" %in% ls()) || is.null(metric)) { -# warn(logger, -# "Verification metric not found and it is set as 'EnsCorr'.") -# metric <- 'EnsCorr' -# } -# if (metric %in% c('FRPSS', 'RPSS')) { -# metric_fun <- "veriApply" -# metric_method <- "FairRpss" -# } else if (metric %in% c("FCRPSS", "CRPSS")) { -# metric_fun <- "veriApply" -# } else if (metric %in% c("EnsCorr", "EnsCor")) { -# metric_fun <- "veriApply" -# metric_method <- "EnsCorr" -# #... -# } else { -# error(logger, "Unknown verification metric defined in the recipe.") -# metric_fun <- 'NotFound' -# } -# info(logger, paste("#-------------------------- ", "\n", -# " running Skill module ", "\n", -# " it can call ", metric_fun )) - -# compute_skill_metrics <- function(recipe, data$hcst, obs, -# clim_data$hcst = NULL, -# clim_obs = NULL) { -compute_skill_metrics <- function(recipe, data, agg = 'global') { +Skill <- function(recipe, data, agg = 'global') { # data$hcst: s2dv_cube containing the hindcast # obs: s2dv_cube containing the observations @@ -372,9 +336,8 @@ compute_skill_metrics <- function(recipe, data, agg = 'global') { return(skill_metrics) } -compute_probabilities <- function(recipe, data) { - ## TODO: Do hcst and fcst at the same time - +Probabilities <- function(recipe, data) { + ## TODO: Do hcst and fcst at the same time if (is.null(recipe$Analysis$ncores)) { ncores <- 1 } else { diff --git a/modules/Skill/compute_probabilities.R b/modules/Skill/compute_probabilities.R new file mode 100644 index 00000000..44a91b96 --- /dev/null +++ b/modules/Skill/compute_probabilities.R @@ -0,0 +1,7 @@ +compute_probabilities <- function(recipe, data) { + warning(paste0("The function compute_probabilities() has been renamed to: ", + "'Probabilities()'. The name 'compute_probabilities' will be ", + "deprecated in the next release. Please change your scripts ", + "accordingly.")) + return(Probabilities(recipe, data)) +} diff --git a/modules/Skill/compute_skill_metrics.R b/modules/Skill/compute_skill_metrics.R new file mode 100644 index 00000000..98f0f2eb --- /dev/null +++ b/modules/Skill/compute_skill_metrics.R @@ -0,0 +1,7 @@ +compute_skill_metrics <- function(recipe, data) { + warning(paste0("The function compute_skill_metrics() has been renamed to: ", + "'Skill()'. The name 'compute_skill_metrics' will be ", + "deprecated in the next release. Please change your scripts ", + "accordingly.")) + return(Skill(recipe, data)) +} diff --git a/modules/Visualization/Visualization.R b/modules/Visualization/Visualization.R index 1ddd6ec7..7df72086 100644 --- a/modules/Visualization/Visualization.R +++ b/modules/Visualization/Visualization.R @@ -10,13 +10,15 @@ source("modules/Visualization/R/get_proj_code.R") source("modules/Visualization/R/tmp/PlotRobinson.R") source("modules/Visualization/R/plot_most_likely_terciles_map.R") source("modules/Visualization/R/plot_ensemble_mean.R") +## TODO: Remove in the next release +source("modules/Visualization/plot_data.R") -plot_data <- function(recipe, - data, - skill_metrics = NULL, - probabilities = NULL, - significance = F, - output_conf = NULL) { +Visualization <- function(recipe, + data, + skill_metrics = NULL, + probabilities = NULL, + significance = F, + output_conf = NULL) { # Try to produce and save several basic plots. # recipe: the auto-s2s recipe as read by read_yaml() # data: list containing the hcst, obs and (optional) fcst s2dv_cube objects diff --git a/modules/Visualization/plot_data.R b/modules/Visualization/plot_data.R new file mode 100644 index 00000000..910b40fa --- /dev/null +++ b/modules/Visualization/plot_data.R @@ -0,0 +1,11 @@ +plot_data <- function(recipe, + data, + skill_metrics = NULL, + probabilities = NULL, + significance = F) { + warning(paste0("The function plot_data() has been renamed to: ", + "'Visualization()'. The name 'plot_data()' will be ", + "deprecated in the next release. Please change your scripts ", + "accordingly.")) + return(Visualization(recipe, data, skill_metrics, probabilities, significance)) +} diff --git a/recipes/recipe_decadal_split.yml b/recipes/recipe_decadal_split.yml index a94ffd03..70764027 100644 --- a/recipes/recipe_decadal_split.yml +++ b/recipes/recipe_decadal_split.yml @@ -8,7 +8,7 @@ Analysis: - {name: pr, freq: monthly_mean} Datasets: System: - name: EC-Earth3-i4 + name: EC-Earth3-i4, member: r1i4p1f1,r2i4p1f1 Multimodel: no Reference: @@ -41,6 +41,7 @@ Analysis: save: 'all' Visualization: plots: skill_metrics + multi_panel: yes Indicators: index: FALSE ncores: 8 # Optional, int: number of cores, defaults to 1 @@ -50,9 +51,9 @@ Run: Loglevel: INFO Terminal: yes filesystem: esarchive - output_dir: /esarchive/scratch/cdelgado/auto-s2s_logs/ + output_dir: /esarchive/scratch/vagudets/auto-s2s_logs/ code_dir: /esarchive/scratch/cdelgado/gitlab/auto-s2s/ - autosubmit: yes + autosubmit: no # fill only if using autosubmit auto_conf: script: /esarchive/scratch/cdelgado/gitlab/cdelgado_copernicus/ESS_evaluation_tool/main_decadal.R diff --git a/recipes/tests/recipe_seasonal_example.yml b/recipes/tests/recipe_seasonal_example.yml index 787484ea..ccd2c7f2 100644 --- a/recipes/tests/recipe_seasonal_example.yml +++ b/recipes/tests/recipe_seasonal_example.yml @@ -13,7 +13,7 @@ Description: Analysis: Horizon: Seasonal Variables: - - {name: tas, freq: monthly_mean} + - {name: tas prlr, freq: monthly_mean} - {name: prlr, freq: monthly_mean} Datasets: System: diff --git a/tests/recipes/recipe-seasonal_daily_1.yml b/tests/recipes/recipe-seasonal_daily_1.yml index f70f0c03..42603c2c 100644 --- a/tests/recipes/recipe-seasonal_daily_1.yml +++ b/tests/recipes/recipe-seasonal_daily_1.yml @@ -4,14 +4,13 @@ Description: Analysis: Horizon: Seasonal Variables: - name: tas - freq: daily_mean + - {name: tas, freq: daily_mean} Datasets: System: - name: ECMWF-SEAS5 + - name: ECMWF-SEAS5 Multimodel: False Reference: - name: ERA5 + - name: ERA5 Time: sdate: '1201' fcst_year: @@ -20,10 +19,7 @@ Analysis: ftime_min: 1 ftime_max: 1 Region: - latmin: 17 - latmax: 20 - lonmin: 12 - lonmax: 15 + - {latmin: 17, latmax: 20, lonmin: 12, lonmax: 15} Regrid: method: conservative type: to_system diff --git a/tests/testthat/test-decadal_daily_1.R b/tests/testthat/test-decadal_daily_1.R index c26b8978..c847fd10 100644 --- a/tests/testthat/test-decadal_daily_1.R +++ b/tests/testthat/test-decadal_daily_1.R @@ -2,7 +2,7 @@ context("Decadal daily data - 1") ########################################### -source("modules/Loading/Loading_decadal.R") +source("modules/Loading/Loading.R") source("modules/Calibration/Calibration.R") source("modules/Skill/Skill.R") source("modules/Saving/Saving.R") @@ -13,18 +13,18 @@ archive <- read_yaml(paste0(recipe$Run$code_dir, "conf/archive_decadal.yml"))$ar # Load datasets suppressWarnings({invisible(capture.output( -data <- load_datasets(recipe) +data <- Loading(recipe) ))}) ## Calibrate datasets #suppressWarnings({invisible(capture.output( -# calibrated_data <- calibrate_datasets(data, recipe) +# calibrated_data <- Calibration(data, recipe) #))}) # ## Compute skill metrics #suppressWarnings({invisible(capture.output( -#skill_metrics <- compute_skill_metrics(calibrated_data$hcst, data$obs, -# recipe, na.rm = T, ncores = 4) +#skill_metrics <- Skill(calibrated_data$hcst, data$obs, +# recipe, na.rm = T, ncores = 4) #))}) #====================================== diff --git a/tests/testthat/test-decadal_monthly_1.R b/tests/testthat/test-decadal_monthly_1.R index a5c95e0c..3346e529 100644 --- a/tests/testthat/test-decadal_monthly_1.R +++ b/tests/testthat/test-decadal_monthly_1.R @@ -2,7 +2,7 @@ context("Decadal monthly data - 1") ########################################### -source("modules/Loading/Loading_decadal.R") +source("modules/Loading/Loading.R") source("modules/Calibration/Calibration.R") source("modules/Skill/Skill.R") source("modules/Saving/Saving.R") @@ -14,27 +14,27 @@ archive <- read_yaml(paste0(recipe$Run$code_dir, "conf/archive_decadal.yml"))$ar # Load datasets suppressWarnings({invisible(capture.output( -data <- load_datasets(recipe) +data <- Loading(recipe) ))}) # Calibrate datasets suppressWarnings({invisible(capture.output( - calibrated_data <- calibrate_datasets(recipe, data) + calibrated_data <- Calibration(recipe, data) ))}) # Compute skill metrics suppressWarnings({invisible(capture.output( -skill_metrics <- compute_skill_metrics(recipe, calibrated_data) +skill_metrics <- Skill(recipe, calibrated_data) ))}) suppressWarnings({invisible(capture.output( -probs <- compute_probabilities(recipe, calibrated_data) +probs <- Probabilities(recipe, calibrated_data) ))}) # Plotting suppressWarnings({invisible(capture.output( -plot_data(recipe = recipe, data = calibrated_data, - skill_metrics = skill_metrics, probabilities = probs, - significance = T) +Visualization(recipe = recipe, data = calibrated_data, + skill_metrics = skill_metrics, probabilities = probs, + significance = T) ))}) #====================================== @@ -297,20 +297,20 @@ archive <- read_yaml(paste0(recipe$Run$code_dir, "conf/archive_decadal.yml"))$ar # Load datasets suppressWarnings({invisible(capture.output( -data_b <- load_datasets(recipe) +data_b <- Loading(recipe) ))}) # Calibrate datasets suppressWarnings({invisible(capture.output( - calibrated_data_b <- calibrate_datasets(recipe, data_b) + calibrated_data_b <- Calibration(recipe, data_b) ))}) # Compute skill metrics suppressWarnings({invisible(capture.output( -skill_metrics_b <- compute_skill_metrics(recipe, calibrated_data_b) +skill_metrics_b <- Skill(recipe, calibrated_data_b) ))}) suppressWarnings({invisible(capture.output( -probs_b <- compute_probabilities(recipe, calibrated_data_b) +probs_b <- Probabilities(recipe, calibrated_data_b) ))}) diff --git a/tests/testthat/test-decadal_monthly_2.R b/tests/testthat/test-decadal_monthly_2.R index 2b605109..9adc16b6 100644 --- a/tests/testthat/test-decadal_monthly_2.R +++ b/tests/testthat/test-decadal_monthly_2.R @@ -2,7 +2,7 @@ context("Decadal monthly data - 2") ########################################### -source("modules/Loading/Loading_decadal.R") +source("modules/Loading/Loading.R") source("modules/Calibration/Calibration.R") source("modules/Skill/Skill.R") source("modules/Saving/Saving.R") @@ -13,27 +13,27 @@ recipe <- prepare_outputs(recipe_file) # Load datasets suppressWarnings({invisible(capture.output( -data <- load_datasets(recipe) +data <- Loading(recipe) ))}) # Calibrate datasets suppressWarnings({invisible(capture.output( - calibrated_data <- calibrate_datasets(recipe, data) + calibrated_data <- Calibration(recipe, data) ))}) # Compute skill metrics suppressMessages({invisible(capture.output( -skill_metrics <- compute_skill_metrics(recipe, calibrated_data) +skill_metrics <- Skill(recipe, calibrated_data) ))}) suppressWarnings({invisible(capture.output( -probs <- compute_probabilities(recipe, calibrated_data) +probs <- Probabilities(recipe, calibrated_data) ))}) # Plotting suppressWarnings({invisible(capture.output( -plot_data(recipe = recipe, data = calibrated_data, - skill_metrics = skill_metrics, - probabilities = probs, significance = T) +Visualization(recipe = recipe, data = calibrated_data, + skill_metrics = skill_metrics, + probabilities = probs, significance = T) ))}) diff --git a/tests/testthat/test-decadal_monthly_3.R b/tests/testthat/test-decadal_monthly_3.R index 7232ebfd..d1b42fd5 100644 --- a/tests/testthat/test-decadal_monthly_3.R +++ b/tests/testthat/test-decadal_monthly_3.R @@ -2,7 +2,7 @@ context("Decadal monthly data - 3") ########################################### -source("modules/Loading/Loading_decadal.R") +source("modules/Loading/Loading.R") source("modules/Calibration/Calibration.R") source("modules/Skill/Skill.R") source("modules/Saving/Saving.R") @@ -13,20 +13,20 @@ archive <- read_yaml(paste0(recipe$Run$code_dir, "conf/archive_decadal.yml"))$ar # Load datasets suppressWarnings({invisible(capture.output( -data <- load_datasets(recipe) +data <- Loading(recipe) ))}) # Calibrate datasets suppressWarnings({invisible(capture.output( - calibrated_data <- calibrate_datasets(recipe, data) + calibrated_data <- Calibration(recipe, data) ))}) # Compute skill metrics suppressWarnings({invisible(capture.output( -skill_metrics <- compute_skill_metrics(recipe, calibrated_data) +skill_metrics <- Skill(recipe, calibrated_data) ))}) suppressWarnings({invisible(capture.output( -probs <- compute_probabilities(recipe, calibrated_data) +probs <- Probabilities(recipe, calibrated_data) ))}) #====================================== diff --git a/tests/testthat/test-seasonal_NAO.R b/tests/testthat/test-seasonal_NAO.R index 7a03ecbf..7a9c9de8 100644 --- a/tests/testthat/test-seasonal_NAO.R +++ b/tests/testthat/test-seasonal_NAO.R @@ -12,12 +12,12 @@ archive <- read_yaml(paste0(recipe$Run$code_dir, "conf/archive.yml"))$archive # Load datasets suppressWarnings({invisible(capture.output( -data <- load_datasets(recipe) +data <- Loading(recipe) ))}) # Compute anomalies suppressWarnings({invisible(capture.output( -ano_data <- compute_anomalies(recipe, data) +ano_data <- Anomalies(recipe, data) ))}) # Compute index NAO @@ -27,7 +27,7 @@ nao_data <- Indices(recipe = recipe, data = ano_data) # Compute skill metrics suppressWarnings({invisible(capture.output( -skill_metrics <- compute_skill_metrics(recipe, nao_data, agg = 'region') +skill_metrics <- Skill(recipe, nao_data, agg = 'region') ))}) diff --git a/tests/testthat/test-seasonal_daily.R b/tests/testthat/test-seasonal_daily.R index 8a51cc86..6cfa4384 100644 --- a/tests/testthat/test-seasonal_daily.R +++ b/tests/testthat/test-seasonal_daily.R @@ -9,17 +9,17 @@ recipe_file <- "tests/recipes/recipe-seasonal_daily_1.yml" recipe <- prepare_outputs(recipe_file, disable_checks = F) # Load datasets suppressWarnings({invisible(capture.output( -data <- load_datasets(recipe) +data <- Loading(recipe) ))}) # Calibrate data suppressWarnings({invisible(capture.output( -calibrated_data <- calibrate_datasets(recipe, data) +calibrated_data <- Calibration(recipe, data) ))}) # Compute skill metrics suppressWarnings({invisible(capture.output( -skill_metrics <- compute_skill_metrics(recipe, calibrated_data) +skill_metrics <- Skill(recipe, calibrated_data) ))}) test_that("1. Loading", { diff --git a/tests/testthat/test-seasonal_monthly.R b/tests/testthat/test-seasonal_monthly.R index 0e311424..d112acf9 100644 --- a/tests/testthat/test-seasonal_monthly.R +++ b/tests/testthat/test-seasonal_monthly.R @@ -12,34 +12,34 @@ archive <- read_yaml(paste0(recipe$Run$code_dir, "conf/archive.yml"))$archive # Load datasets suppressWarnings({invisible(capture.output( -data <- load_datasets(recipe) +data <- Loading(recipe) ))}) # Calibrate data suppressWarnings({invisible(capture.output( -calibrated_data <- calibrate_datasets(recipe, data) +calibrated_data <- Calibration(recipe, data) ))}) # Compute skill metrics suppressWarnings({invisible(capture.output( -skill_metrics <- compute_skill_metrics(recipe, calibrated_data) +skill_metrics <- Skill(recipe, calibrated_data) ))}) suppressWarnings({invisible(capture.output( -probs <- compute_probabilities(recipe, calibrated_data) +probs <- Probabilities(recipe, calibrated_data) ))}) # Saving suppressWarnings({invisible(capture.output( -save_data(recipe = recipe, data = calibrated_data, - skill_metrics = skill_metrics, probabilities = probs) +Saving(recipe = recipe, data = calibrated_data, + skill_metrics = skill_metrics, probabilities = probs) ))}) # Plotting suppressWarnings({invisible(capture.output( -plot_data(recipe = recipe, data = calibrated_data, - skill_metrics = skill_metrics, probabilities = probs, - significance = T) +Visualization(recipe = recipe, data = calibrated_data, + skill_metrics = skill_metrics, probabilities = probs, + significance = T) ))}) outdir <- get_dir(recipe = recipe, variable = data$hcst$attrs$Variable$varName) diff --git a/tools/divide_recipe.R b/tools/divide_recipe.R index e9309be8..f4a56fb1 100644 --- a/tools/divide_recipe.R +++ b/tools/divide_recipe.R @@ -35,6 +35,13 @@ divide_recipe <- function(recipe) { # duplicate recipe by Datasets: # check Systems + + if (any(c("name", "member") %in% names(recipe$Analysis$Datasets$System))) { + system <- recipe$Analysis$Datasets$System + recipe$Analysis$Datasets$System <- NULL + recipe$Analysis$Datasets$System[[1]] <- system + } + if (recipe$Analysis$Datasets$Multimodel %in% c(TRUE, 'both')) { for (reci in 1:length(all_recipes)) { all_recipes[[reci]]$Analysis$Datasets <- @@ -43,34 +50,17 @@ divide_recipe <- function(recipe) { Reference = NULL) } } else { - if (tolower(recipe$Analysis$Horizon) == 'seasonal') { - for (sys in 1:length(recipe$Analysis$Datasets$System)) { - for (reci in 1:length(all_recipes)) { - all_recipes[[reci]]$Analysis$Datasets <- - list(System = recipe$Analysis$Datasets$System[[sys]], - Multimodel = recipe$Analysis$Datasets$Multimodel, - Reference = NULL) - } - if (sys == 1) { - recipes <- all_recipes - } else { - recipes <- append(recipes, all_recipes) - } + for (sys in 1:length(recipe$Analysis$Datasets$System)) { + for (reci in 1:length(all_recipes)) { + all_recipes[[reci]]$Analysis$Datasets <- + list(System = recipe$Analysis$Datasets$System[[sys]], + Multimodel = recipe$Analysis$Datasets$Multimodel, + Reference = NULL) } - } else if (tolower(recipe$Analysis$Horizon) == 'decadal') { - for (sys in 1:length(recipe$Analysis$Datasets$System$name)) { - for (reci in 1:length(all_recipes)) { - all_recipes[[reci]]$Analysis$Datasets <- - list(System = list(name = recipe$Analysis$Datasets$System$name[[sys]], - member = recipe$Analysis$Datasets$System$member[[sys]]), - Multimodel = recipe$Analysis$Datasets$Multimodel, - Reference = NULL) - } - if (sys == 1) { - recipes <- all_recipes - } else { - recipes <- append(recipes, all_recipes) - } + if (sys == 1) { + recipes <- all_recipes + } else { + recipes <- append(recipes, all_recipes) } } # Rest of horizons all_recipes <- recipes @@ -80,7 +70,7 @@ divide_recipe <- function(recipe) { for (ref in 1:length(recipe$Analysis$Datasets$Reference)) { for (reci in 1:length(all_recipes)) { all_recipes[[reci]]$Analysis$Datasets$Reference <- - recipe$Analysis$Datasets$Reference[[ref]] + recipe$Analysis$Datasets$Reference[ref] } if (ref == 1) { recipes <- all_recipes @@ -91,6 +81,12 @@ divide_recipe <- function(recipe) { all_recipes <- recipes # Duplicate recipe by Region recipes <- list() + if (any(c("latmin", "latmax", "lonmin", "lonmax") %in% + names(recipe$Analysis$Region))) { + region <- recipe$Analysis$Region + recipe$Analysis$Region <- NULL + recipe$Analysis$Region[[1]] <- region + } for (reg in 1:length(recipe$Analysis$Region)) { for (reci in 1:length(all_recipes)) { all_recipes[[reci]]$Analysis$Region <- recipe$Analysis$Region[[reg]] @@ -101,6 +97,7 @@ divide_recipe <- function(recipe) { recipes <- append(recipes, all_recipes) } } + all_recipes <- recipes rm(list = 'recipes') # Duplicate recipe by start date diff --git a/tools/libs.R b/tools/libs.R index a67f9549..ec34ad2e 100644 --- a/tools/libs.R +++ b/tools/libs.R @@ -29,6 +29,7 @@ source("tools/data_summary.R") source("tools/read_atomic_recipe.R") source("tools/write_autosubmit_conf.R") source("tools/get_archive.R") +source("tools/restructure_recipe.R") # source("tools/add_dims.R") # Not sure if necessary yet # Settings diff --git a/tools/prepare_outputs.R b/tools/prepare_outputs.R index f9e71132..8f9968f4 100644 --- a/tools/prepare_outputs.R +++ b/tools/prepare_outputs.R @@ -97,5 +97,7 @@ prepare_outputs <- function(recipe_file, } else { check_recipe(recipe) } + # Restructure the recipe to make the atomic recipe more readable + recipe <- restructure_recipe(recipe) return(recipe) } diff --git a/tools/read_atomic_recipe.R b/tools/read_atomic_recipe.R index de2ad5b5..fb26cb11 100644 --- a/tools/read_atomic_recipe.R +++ b/tools/read_atomic_recipe.R @@ -53,5 +53,7 @@ read_atomic_recipe <- function(recipe_file) { } recipe$Run$logger <- logger recipe$Run$logfile <- logfile + # Restructure recipe to flatten redundant lists + recipe <- restructure_recipe(recipe) return(recipe) } diff --git a/tools/restructure_recipe.R b/tools/restructure_recipe.R new file mode 100644 index 00000000..0a9f28f4 --- /dev/null +++ b/tools/restructure_recipe.R @@ -0,0 +1,24 @@ +restructure_recipe <- function(recipe) { + # Flattens the structure of the recipe to improve the readability of the code + # System + if ((length(recipe$Analysis$Datasets$System) == 1) && + (is.list(recipe$Analysis$Datasets$System[[1]]))) { + recipe$Analysis$Datasets$System <- recipe$Analysis$Datasets$System[[1]] + } + # Reference + if ((length(recipe$Analysis$Datasets$Reference) == 1) && + (is.list(recipe$Analysis$Datasets$Reference[[1]]))) { + recipe$Analysis$Datasets$Reference <- recipe$Analysis$Datasets$Reference[[1]] + } + # Variable + if ((length(recipe$Analysis$Variables) == 1) && + (is.list(recipe$Analysis$Variables[[1]]))) { + recipe$Analysis$Variables <- recipe$Analysis$Variables[[1]] + } + # Region + if ((length(recipe$Analysis$Region) == 1) && + (is.list(recipe$Analysis$Region[[1]]))) { + recipe$Analysis$Region <- recipe$Analysis$Region[[1]] + } + return(recipe) +} -- GitLab From 137279d9abe7730252e98ceb7455153d14057185 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Thu, 21 Sep 2023 11:00:17 +0200 Subject: [PATCH 282/388] Modify output configuration logic in Visualization module --- modules/Visualization/Visualization.R | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/modules/Visualization/Visualization.R b/modules/Visualization/Visualization.R index 7df72086..eedc1c54 100644 --- a/modules/Visualization/Visualization.R +++ b/modules/Visualization/Visualization.R @@ -26,21 +26,30 @@ Visualization <- function(recipe, # s2dv_cube objects # skill_metrics: list of arrays containing the computed skill metrics # significance: Bool. Whether to include significance dots where applicable + + # Try to set default configuration if not specified by user if (is.null(output_conf) && !is.null(recipe$Analysis$Region$name)) { output_conf <- read_yaml("modules/Visualization/output_size.yml", eval.exp = TRUE)$region - output_conf <- output_conf[[recipe$Analysis$Region$name]] - if (is.null(output_conf)) { - stop("Region not found in the ouput_conf file") # warning? + if (recipe$Analysis$Region$name %in% names(output_conf)) { + output_conf <- output_conf[[recipe$Analysis$Region$name]] + } else { + warn(recipe$Run$logger, + paste0("The region name is not found in the 'output_conf' file. ", + "The default plot settings will be used.")) + output_conf <- NULL } - } else{ + ## If the user chooses to specify the configuration... what? + } else { if (is.list(output_conf)) { + ## What does this warning mean? warning("Shape of the list of configuration?") } } + + # Get plot types and create output directories plots <- strsplit(recipe$Analysis$Workflow$Visualization$plots, ", | |,")[[1]] recipe$Run$output_dir <- paste0(recipe$Run$output_dir, "/plots/") - ## TODO: Sort this out outdir <- get_dir(recipe = recipe, variable = data$hcst$attrs$Variable$varName) for (directory in outdir) { -- GitLab From 6939695761a11712c1ccd2ab9de7566dcd933b3b Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Thu, 21 Sep 2023 11:56:27 +0200 Subject: [PATCH 283/388] Add recipe check: Verify that the metrics requested in Skill are available in SUNSET --- tools/check_recipe.R | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/tools/check_recipe.R b/tools/check_recipe.R index cfac94e3..2fe3808d 100644 --- a/tools/check_recipe.R +++ b/tools/check_recipe.R @@ -340,11 +340,27 @@ check_recipe <- function(recipe) { } # Skill - if (("Skill" %in% names(recipe$Analysis$Workflow)) && - (is.null(recipe$Analysis$Workflow$Skill$metric))) { + AVAILABLE_METRICS <- c("enscorr", "corr", "rps", "rpss", "frps", "frpss", + "crps", "crpss", "bss10", "bss90", "mean_bias", + "mean_bias_ss", "enssprerr", "rps_clim", "rpss_clim", + "enscorr_specs", "frps_specs", "rpss_specs", + "frpss_specs", "bss10_specs", "bss90_specs") + if ("Skill" %in% names(recipe$Analysis$Workflow)) { + if (is.null(recipe$Analysis$Workflow$Skill$metric)) { error(recipe$Run$logger, "Parameter 'metric' must be defined under 'Skill'.") error_status <- T + } else { + requested_metrics <- strsplit(recipe$Analysis$Workflow$Skill$metric, + ", | |,")[[1]] + if (!all(tolower(requested_metrics) %in% AVAILABLE_METRICS)) { + error(recipe$Run$logger, + paste0("Some of the metrics requested under 'Skill' are not ", + "available in SUNSET. Check the documentation to see the ", + "full list of accepted skill metrics.")) + error_status <- T + } + } # Saving checks SAVING_OPTIONS_SKILL <- c("all", "none") if ((is.null(recipe$Analysis$Workflow$Skill$save)) || -- GitLab From 90454cae1bf627e5b48d7286c2716c8fa4233d5f Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Thu, 21 Sep 2023 12:24:44 +0200 Subject: [PATCH 284/388] Add recipe check: Check that all metrics requested in 'Scorecards' are also requested in 'Skill' --- tools/check_recipe.R | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/tools/check_recipe.R b/tools/check_recipe.R index 2fe3808d..05c332db 100644 --- a/tools/check_recipe.R +++ b/tools/check_recipe.R @@ -458,7 +458,23 @@ check_recipe <- function(recipe) { } } } - + # Scorecards + if ("Scorecards" %in% names(recipe$Analysis$Workflow)) { + if (is.null(recipe$Analysis$Workflow$Scorecards$metric)) { + error(recipe$Run$logger, + "Parameter 'metric' must be defined under 'Scorecards'.") + error_status <- T + } else { + sc_metrics <- strsplit(recipe$Analysis$Workflow$Scorecards$metric, + ", | |,")[[1]] + if (!all(tolower(sc_metrics) %in% tolower(requested_metrics))) { + error(recipe$Run$logger, + paste0("All of the metrics requested under 'Scorecards' must ", + "be requested in the 'Skill' section.")) + error_status <- T + } + } + } # --------------------------------------------------------------------- # RUN CHECKS # --------------------------------------------------------------------- -- GitLab From 637601020448376dfc752955b4759b76b0ba123d Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Thu, 21 Sep 2023 12:27:14 +0200 Subject: [PATCH 285/388] Correct 'startup.log' file to 'main.log' in recipe checker --- tools/check_recipe.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/check_recipe.R b/tools/check_recipe.R index cfac94e3..57bece61 100644 --- a/tools/check_recipe.R +++ b/tools/check_recipe.R @@ -572,7 +572,7 @@ check_recipe <- function(recipe) { if (error_status) { error(recipe$Run$logger, "RECIPE CHECK FAILED.") stop("The recipe contains some errors. Find the full list in the", - " startup.log file.") + " main.log file.") } else { info(recipe$Run$logger, "##### RECIPE CHECK SUCCESSFULL #####") } -- GitLab From f053814c0f572cbe8277e19a31590f9def28c019 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Thu, 21 Sep 2023 15:40:23 +0200 Subject: [PATCH 286/388] Simplify recipe --- recipes/recipe_scorecards_vic.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/recipes/recipe_scorecards_vic.yml b/recipes/recipe_scorecards_vic.yml index 2a149b41..ba62072e 100644 --- a/recipes/recipe_scorecards_vic.yml +++ b/recipes/recipe_scorecards_vic.yml @@ -48,7 +48,7 @@ Analysis: Workflow: Anomalies: compute: yes - cross_validation: yes + cross_validation: no save: 'none' Calibration: method: raw ## TODO: list, split? -- GitLab From 073129f5f7b17e2c7f82b6797561fd83ebc36a98 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Thu, 21 Sep 2023 15:43:03 +0200 Subject: [PATCH 287/388] Rearrange directories --- modules/Scorecards/R/plot_scorecards.R | 184 ------------------ modules/Scorecards/{ => R}/tmp/LoadMetrics.R | 0 .../Scorecards/{ => R}/tmp/SCPlotScorecard.R | 0 modules/Scorecards/{ => R}/tmp/SCTransform.R | 0 .../Scorecards/{ => R}/tmp/ScorecardsMulti.R | 0 .../Scorecards/{ => R}/tmp/ScorecardsSingle.R | 0 .../{ => R}/tmp/ScorecardsSystemDiff.R | 0 modules/Scorecards/{ => R}/tmp/Utils.R | 0 .../Scorecards/{ => R}/tmp/WeightedMetrics.R | 0 modules/Scorecards/Scorecards.R | 16 +- 10 files changed, 8 insertions(+), 192 deletions(-) delete mode 100644 modules/Scorecards/R/plot_scorecards.R rename modules/Scorecards/{ => R}/tmp/LoadMetrics.R (100%) rename modules/Scorecards/{ => R}/tmp/SCPlotScorecard.R (100%) rename modules/Scorecards/{ => R}/tmp/SCTransform.R (100%) rename modules/Scorecards/{ => R}/tmp/ScorecardsMulti.R (100%) rename modules/Scorecards/{ => R}/tmp/ScorecardsSingle.R (100%) rename modules/Scorecards/{ => R}/tmp/ScorecardsSystemDiff.R (100%) rename modules/Scorecards/{ => R}/tmp/Utils.R (100%) rename modules/Scorecards/{ => R}/tmp/WeightedMetrics.R (100%) diff --git a/modules/Scorecards/R/plot_scorecards.R b/modules/Scorecards/R/plot_scorecards.R deleted file mode 100644 index c89868a5..00000000 --- a/modules/Scorecards/R/plot_scorecards.R +++ /dev/null @@ -1,184 +0,0 @@ -############################################################################### -##################### SCORECARDS MODULE FOR SUNSET SUITE ###################### -############################################################################### - -##### Load source functions ##### -source('modules/Scorecards/tmp/LoadMetrics.R') -source('modules/Scorecards/tmp/WeightedMetrics.R') -source('modules/Scorecards/tmp/Utils.R') -source('modules/Scorecards/tmp/SCTransform.R') -source('modules/Scorecards/tmp/ScorecardsSingle.R') -source('modules/Scorecards/tmp/ScorecardsMulti.R') -source('modules/Scorecards/tmp/ScorecardsSystemDiff.R') -source('modules/Scorecards/tmp/SCPlotScorecard.R') - - -## Define function -plot_scorecards <- function(recipe) { - - ## set parameters - input.path <- paste0(recipe$Run$output_dir, "/outputs/Skill/") - output.path <- paste0(recipe$Run$output_dir, "/plots/Scorecards/") - dir.create(output.path, recursive = T, showWarnings = F) - - system <- recipe$Analysis$Datasets$System$name - reference <- recipe$Analysis$Datasets$Reference$name - var <- recipe$Analysis$Variables$name - start.year <- as.numeric(recipe$Analysis$Time$hcst_start) - end.year <- as.numeric(recipe$Analysis$Time$hcst_end) - forecast.months <- recipe$Analysis$Time$ftime_min : recipe$Analysis$Time$ftime_max - - start.months <- 1:12 #recipe$Analysis$Workflow$Scorecards$start_months - - regions <- recipe$Analysis$Workflow$Scorecards$regions - for (i in names(regions)){regions[[i]] <- unlist(regions[[i]])} - - metric.aggregation <- recipe$Analysis$Workflow$Scorecards$metric_aggregation - metrics.load <- unlist(strsplit(tolower(recipe$Analysis$Workflow$Skill$metric), ", | |,")) - - ## Define skill scores in score aggregation has been requested - - if(metric.aggregation == 'score'){ - if('rps' %in% metrics.load){ - metrics.load <- c(metrics.load, 'rps_clim') - } - if('crps' %in% metrics.load){ - metrics.load <- c(metrics.load, 'crps_clim') - } - } - - metrics.visualize <- unlist(strsplit(tolower(recipe$Analysis$Workflow$Scorecards$metric), ", | |,")) - - ## Define skill scores in score aggregation has been requested - - if(metric.aggregation == 'score'){ - if('rpss' %in% metrics.visualize){ - metrics.visualize[metrics.visualize == 'rpss'] <- 'rpss_score_aggr' - } - if('crpss' %in% metrics.visualize){ - metrics.visualize[metrics.visualize == 'crpss'] <- 'crpss_score_aggr' - } - } - - table.label <- recipe$Analysis$Workflow$Scorecards$table_label - fileout.label <- recipe$Analysis$Workflow$Scorecards$fileout_label - legend.white.space <- recipe$Analysis$Workflow$Scorecards$legend_white_space - col1.width <- recipe$Analysis$Workflow$Scorecards$col1_width - col2.width <- recipe$Analysis$Workflow$Scorecards$col2_width - calculate.diff <- recipe$Analysis$Workflow$Scorecards$calculate_diff - ncores <- recipe$Analysis$ncores - - ## Load data files - loaded_metrics <- LoadMetrics(system = system, - reference = reference, - var = var, - start.year = start.year, - end.year = end.year, - metrics = metrics.load, - start.months = start.months, - forecast.months = forecast.months, - input.path = input.path) - - - if('region' %in% names(dim(loaded_metrics[[1]][[1]]))){ - - ### Convert loaded metrics to array for allready aggregated data - metrics.dim <- attributes(loaded_metrics[[1]][[1]])$metrics - forecast.months.dim <- attributes(loaded_metrics[[1]][[1]])$forecast.months - start.months.dim <- attributes(loaded_metrics[[1]][[1]])$start.months - regions.dim <- regions #list('NAO' = c(lon.min = -80, lon.max = 40, lat.min = 20, lat.max = 80)) - - aggregated_metrics <- array(dim = c(system = length(loaded_metrics), - reference = length(loaded_metrics[[1]]), - metric = length(metrics.dim), - time = length(forecast.months.dim), - sdate = length(start.months.dim), - region = length(regions.dim))) - - - for (sys in 1:length(names(loaded_metrics))){ - for (ref in 1:length(names(loaded_metrics[[sys]]))){ - aggregated_metrics[sys, ref, , , , ] <- s2dv::Reorder(data = loaded_metrics[[sys]][[ref]], order = c('metric','time','sdate','region')) - } - } - - ## Add attributes - attributes(aggregated_metrics)$metrics <- metrics.load - attributes(aggregated_metrics)$start.months <- attributes(loaded_metrics[[1]][[1]])$start.months - attributes(aggregated_metrics)$forecast.months <- attributes(loaded_metrics[[1]][[1]])$forecast.months - attributes(aggregated_metrics)$regions <- regions - attributes(aggregated_metrics)$system.name <- names(loaded_metrics) - attributes(aggregated_metrics)$reference.name <- names(loaded_metrics[[1]]) - - - } else { - ## Calculate weighted mean of spatial aggregation - aggregated_metrics <- WeightedMetrics(loaded_metrics, - regions = regions, - metric.aggregation = metric.aggregation, - ncores = ncores) - }## close if - - ## Create simple scorecard tables - ## (one system only) - ## Metrics input must be in the same order as function SC_spatial_aggregation - scorecard_single <- ScorecardsSingle(data = aggregated_metrics, - system = system, - reference = reference, - var = var, - start.year = start.year, - end.year = end.year, - start.months = start.months, - forecast.months = forecast.months, - region.names = names(regions), - metrics = metrics.visualize, - table.label = table.label, - fileout.label = fileout.label, - legend.white.space = legend.white.space, - col1.width = col1.width, - col2.width = col2.width, - output.path = output.path) - - ## Create multi system/reference scorecard tables - ## (multiple systems with one reference or one system with multiple references) - ## Metrics input must be in the same order as function SC_spatial_aggregation - if(length(system) > 1 || length(reference) > 1){ - scorecard_multi <- ScorecardsMulti(data = aggregated_metrics, - system = system, - reference = reference, - var = var, - start.year = start.year, - end.year = end.year, - start.months = start.months, - forecast.months = forecast.months, - region.names = attributes(regions)$names, - metrics = metrics.visualize, - table.label = table.label, - fileout.label = fileout.label, - output.path = output.path) - } ## close if - - - if(calculate.diff == TRUE){ - if(length(system) == 2 || length(reference) == 2){ - scorecard_diff <- ScorecardsSystemDiff(data = aggregated_metrics, - system = system, - reference = reference, - var = var, - start.year = start.year, - end.year = end.year, - start.months = start.months, - forecast.months = forecast.months, - region.names = attributes(regions)$names, - metrics = metrics.visualize, - table.label = table.label, - fileout.label = fileout.label, - legend.white.space = legend.white.space, - col1.width = col1.width, - col2.width = col2.width, - output.path = output.path) - } else {stop ("Difference scorecard can only be computed with two systems or two references.")} - } ## close if on calculate.diff - -} - diff --git a/modules/Scorecards/tmp/LoadMetrics.R b/modules/Scorecards/R/tmp/LoadMetrics.R similarity index 100% rename from modules/Scorecards/tmp/LoadMetrics.R rename to modules/Scorecards/R/tmp/LoadMetrics.R diff --git a/modules/Scorecards/tmp/SCPlotScorecard.R b/modules/Scorecards/R/tmp/SCPlotScorecard.R similarity index 100% rename from modules/Scorecards/tmp/SCPlotScorecard.R rename to modules/Scorecards/R/tmp/SCPlotScorecard.R diff --git a/modules/Scorecards/tmp/SCTransform.R b/modules/Scorecards/R/tmp/SCTransform.R similarity index 100% rename from modules/Scorecards/tmp/SCTransform.R rename to modules/Scorecards/R/tmp/SCTransform.R diff --git a/modules/Scorecards/tmp/ScorecardsMulti.R b/modules/Scorecards/R/tmp/ScorecardsMulti.R similarity index 100% rename from modules/Scorecards/tmp/ScorecardsMulti.R rename to modules/Scorecards/R/tmp/ScorecardsMulti.R diff --git a/modules/Scorecards/tmp/ScorecardsSingle.R b/modules/Scorecards/R/tmp/ScorecardsSingle.R similarity index 100% rename from modules/Scorecards/tmp/ScorecardsSingle.R rename to modules/Scorecards/R/tmp/ScorecardsSingle.R diff --git a/modules/Scorecards/tmp/ScorecardsSystemDiff.R b/modules/Scorecards/R/tmp/ScorecardsSystemDiff.R similarity index 100% rename from modules/Scorecards/tmp/ScorecardsSystemDiff.R rename to modules/Scorecards/R/tmp/ScorecardsSystemDiff.R diff --git a/modules/Scorecards/tmp/Utils.R b/modules/Scorecards/R/tmp/Utils.R similarity index 100% rename from modules/Scorecards/tmp/Utils.R rename to modules/Scorecards/R/tmp/Utils.R diff --git a/modules/Scorecards/tmp/WeightedMetrics.R b/modules/Scorecards/R/tmp/WeightedMetrics.R similarity index 100% rename from modules/Scorecards/tmp/WeightedMetrics.R rename to modules/Scorecards/R/tmp/WeightedMetrics.R diff --git a/modules/Scorecards/Scorecards.R b/modules/Scorecards/Scorecards.R index 47b47797..047db597 100644 --- a/modules/Scorecards/Scorecards.R +++ b/modules/Scorecards/Scorecards.R @@ -3,14 +3,14 @@ ############################################################################### ##### Load source functions ##### -source('modules/Scorecards/tmp/LoadMetrics.R') -source('modules/Scorecards/tmp/WeightedMetrics.R') -source('modules/Scorecards/tmp/Utils.R') -source('modules/Scorecards/tmp/SCTransform.R') -source('modules/Scorecards/tmp/ScorecardsSingle.R') -source('modules/Scorecards/tmp/ScorecardsMulti.R') -source('modules/Scorecards/tmp/ScorecardsSystemDiff.R') -source('modules/Scorecards/tmp/SCPlotScorecard.R') +source('modules/Scorecards/R/tmp/LoadMetrics.R') +source('modules/Scorecards/R/tmp/WeightedMetrics.R') +source('modules/Scorecards/R/tmp/Utils.R') +source('modules/Scorecards/R/tmp/SCTransform.R') +source('modules/Scorecards/R/tmp/ScorecardsSingle.R') +source('modules/Scorecards/R/tmp/ScorecardsMulti.R') +source('modules/Scorecards/R/tmp/ScorecardsSystemDiff.R') +source('modules/Scorecards/R/tmp/SCPlotScorecard.R') ## TODO: Change function name to 'Scorecards'? -- GitLab From 98e939b4be2bf210ac6cc58bacbc28e0b6bb8cf2 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Fri, 22 Sep 2023 15:09:54 +0200 Subject: [PATCH 288/388] Hard code number of cores used for Scorecards to 1 --- modules/Scorecards/Scorecards.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/Scorecards/Scorecards.R b/modules/Scorecards/Scorecards.R index 047db597..3bcb01ce 100644 --- a/modules/Scorecards/Scorecards.R +++ b/modules/Scorecards/Scorecards.R @@ -67,7 +67,7 @@ Scorecards <- function(recipe) { col1.width <- recipe$Analysis$Workflow$Scorecards$col1_width col2.width <- recipe$Analysis$Workflow$Scorecards$col2_width calculate.diff <- recipe$Analysis$Workflow$Scorecards$calculate_diff - ncores <- recipe$Analysis$ncores + ncores <- 1 # recipe$Analysis$ncores ## Load data files loaded_metrics <- LoadMetrics(system = system, -- GitLab From 028f02fca4e6a70c14c6c27c6da1e7178b28abe8 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Tue, 26 Sep 2023 11:11:56 +0200 Subject: [PATCH 289/388] Remove extra line --- modules/Units/Units.R | 2 -- 1 file changed, 2 deletions(-) diff --git a/modules/Units/Units.R b/modules/Units/Units.R index 4a43dee2..07e17543 100644 --- a/modules/Units/Units.R +++ b/modules/Units/Units.R @@ -42,8 +42,6 @@ Units <- function(recipe, data) { user_units <- strsplit(recipe$Analysis$Variables$units, ", |,")[[1]] } } - ## TODO: How to handle spaces in multi-var case? - user_units <- strsplit(recipe$Analysis$Variables$units, ", | |,")[[1]] # remove spaces, "**", "*" and "per" from units user_units <- tolower(user_units) user_units <- gsub(" ", "", user_units) -- GitLab From 8c166497141538f18a28e5e4bde4bbeb67a5a9e9 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Tue, 26 Sep 2023 12:19:50 +0200 Subject: [PATCH 290/388] Refine warnings about output_conf --- modules/Visualization/Visualization.R | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/modules/Visualization/Visualization.R b/modules/Visualization/Visualization.R index eedc1c54..1f6e836d 100644 --- a/modules/Visualization/Visualization.R +++ b/modules/Visualization/Visualization.R @@ -39,11 +39,17 @@ Visualization <- function(recipe, "The default plot settings will be used.")) output_conf <- NULL } - ## If the user chooses to specify the configuration... what? + # If the user chooses to specify the configuration, warn them. } else { if (is.list(output_conf)) { - ## What does this warning mean? - warning("Shape of the list of configuration?") + warning(paste0("Parameter 'output_conf' should be a list matching the ", + "parameters of the requested plotting function, i.e. ", + "PlotEquiMap, PlotRobinson or PlotLayout. There could be ", + "plotting erros if the list is incomplete.")) + } else { + warning(paste("Parameter 'output_conf' should be a list.", + "Using default configuration.")) + output_conf <- NULL } } -- GitLab From 56efa48bc6d2a30f72fdd695cc331df3c96e7964 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Wed, 27 Sep 2023 11:28:15 +0200 Subject: [PATCH 291/388] Add saving to Downscaling module --- modules/Downscaling/Downscaling.R | 43 +++++++++++++++++++++---------- 1 file changed, 30 insertions(+), 13 deletions(-) diff --git a/modules/Downscaling/Downscaling.R b/modules/Downscaling/Downscaling.R index 306c6dce..57887f1d 100644 --- a/modules/Downscaling/Downscaling.R +++ b/modules/Downscaling/Downscaling.R @@ -6,8 +6,7 @@ source('modules/Downscaling/tmp/Analogs.R') source('modules/Downscaling/tmp/LogisticReg.R') source('modules/Downscaling/tmp/Utils.R') -## Entry params data and recipe? -downscale_datasets <- function(recipe, data) { +Downscaling <- function(recipe, data) { # Function that downscale the hindcast using the method stated in the # recipe. For the moment, forecast must be null. # @@ -15,18 +14,18 @@ downscale_datasets <- function(recipe, data) { # recipe: object obtained when passing the .yml recipe file to read_yaml() type <- tolower(recipe$Analysis$Workflow$Downscaling$type) - - if (!is.null(data$fcst)) { - warning("The downscaling will be only performed to the hindcast data") - data$fcst <- NULL - } - + if (type == "none") { - hcst_downscal <- data$hcst DOWNSCAL_MSG <- "##### NO DOWNSCALING PERFORMED #####" } else { + + if (!is.null(data$fcst)) { + warn(recipe$Run$logger, + "The downscaling will be only performed to the hindcast data") + data$fcst <- NULL + } # Downscaling function params int_method <- tolower(recipe$Analysis$Workflow$Downscaling$int_method) bc_method <- tolower(recipe$Analysis$Workflow$Downscaling$bc_method) @@ -264,7 +263,8 @@ downscale_datasets <- function(recipe, data) { } } - if (recipe$Analysis$Horizon == "seasonal" & (recipe$Analysis$Variables$freq == "daily_mean" | recipe$Analysis$Variables$freq == "daily")) { + if (recipe$Analysis$Horizon == "seasonal" & + (recipe$Analysis$Variables$freq %in% c("daily_mean", "daily"))) { hcst_downscal$exp$data <- Apply(hcst_downscal$exp$data,target_dims="time",mean)$output1 hcst_downscal$obs$data <- Apply(hcst_downscal$obs$data,target_dims="time",mean)$output1 hcst_downscal$exp$data <- InsertDim(hcst_downscal$exp$data,length(names(dim(hcst_downscal$exp$data))),1,name="time") @@ -272,7 +272,24 @@ downscale_datasets <- function(recipe, data) { } print(DOWNSCAL_MSG) - return(list(hcst = hcst_downscal$exp, obs = hcst_downscal$obs, fcst = NULL)) -} - + # Saving + if (recipe$Analysis$Workflow$Downscaling$save != 'none') { + info(recipe$Run$logger, "##### START SAVING CALIBRATED DATA #####") + } + ## TODO: What do we do with the full values? + recipe$Run$output_dir <- paste0(recipe$Run$output_dir, + "/outputs/Downscaling/") + # if ((recipe$Analysis$Workflow$Downscaling$save %in% + # c('all', 'exp_only', 'fcst_only')) && (!is.null(data$fcst))) { + # save_forecast(recipe = recipe, data_cube = data$fcst, type = 'fcst') + # } + if (recipe$Analysis$Workflow$Downscaling$save %in% c('all', 'exp_only')) { + save_forecast(recipe = recipe, data_cube = hcst_downscal$exp, type = 'hcst') + } + if (recipe$Analysis$Workflow$Downscaling$save == 'all') { + save_observations(recipe = recipe, data_cube = hcst_downscal$obs) + } + + return(list(hcst = hcst_downscal$exp, obs = hcst_downscal$obs, fcst = NULL)) +} -- GitLab From d5945e08db6ef8b6280cfcd70f46782f125faade Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Wed, 27 Sep 2023 12:03:18 +0200 Subject: [PATCH 292/388] Remove computation of mean; formatting changes --- modules/Downscaling/Downscaling.R | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/modules/Downscaling/Downscaling.R b/modules/Downscaling/Downscaling.R index 57887f1d..15f5ea9b 100644 --- a/modules/Downscaling/Downscaling.R +++ b/modules/Downscaling/Downscaling.R @@ -191,8 +191,14 @@ Downscaling <- function(recipe, data) { if (!is.null(size)) { dum <- data$obs$data ## keep obs data before the window process to provide it later as the output - data$obs$data <- .generate_window(data$obs$data,sdate_dim = 'syear',time_dim = 'time',loocv = TRUE,size=size) - data$obs$data <- Apply(data$obs$data,target_dims="window",fun=function (x) x[!is.na(x)])$output1 + data$obs$data <- .generate_window(data$obs$data, + sdate_dim = 'syear', + time_dim = 'time', + loocv = TRUE, + size = size) + data$obs$data <- Apply(data$obs$data, + target_dims="window", + fun=function (x) x[!is.na(x)])$output1 } hcst_downscal <- CST_Analogs(data$hcst, data$obs, @@ -211,7 +217,10 @@ Downscaling <- function(recipe, data) { ncores = ncores) if (!is.null(size)) { - hcst_downscal$obs$data <- Apply(dum,target_dims=c("time","smonth"),function (x) x[1:(dim(data$hcst$data)["time"]),2],ncores=ncores,output_dims="time")$output1 ## 2nd month is the target month + hcst_downscal$obs$data <- Apply(dum, target_dims=c("time", "smonth"), + function (x) {x[1:(dim(data$hcst$data)["time"]), 2]}, + ncores = ncores, + output_dims = "time")$output1 ## 2nd month is the target month } DOWNSCAL_MSG <- "##### DOWNSCALING COMPLETE #####" @@ -262,15 +271,6 @@ Downscaling <- function(recipe, data) { DOWNSCAL_MSG <- "##### DOWNSCALING COMPLETE #####" } } - - if (recipe$Analysis$Horizon == "seasonal" & - (recipe$Analysis$Variables$freq %in% c("daily_mean", "daily"))) { - hcst_downscal$exp$data <- Apply(hcst_downscal$exp$data,target_dims="time",mean)$output1 - hcst_downscal$obs$data <- Apply(hcst_downscal$obs$data,target_dims="time",mean)$output1 - hcst_downscal$exp$data <- InsertDim(hcst_downscal$exp$data,length(names(dim(hcst_downscal$exp$data))),1,name="time") - hcst_downscal$obs$data <- InsertDim(hcst_downscal$obs$data,length(names(dim(hcst_downscal$obs$data))),1,name="time") - } - print(DOWNSCAL_MSG) # Saving -- GitLab From 2691398872b65a8202fe9820676890d3e1cf34b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pierre-Antoine=20Bretonni=C3=A8re?= Date: Wed, 27 Sep 2023 14:08:29 +0200 Subject: [PATCH 293/388] add conda env for ECMWF --- .../environment-cerise-localgribR-ecmwf.yml | 331 ++++++++++++++++++ 1 file changed, 331 insertions(+) create mode 100644 conda_installation/environment-cerise-localgribR-ecmwf.yml diff --git a/conda_installation/environment-cerise-localgribR-ecmwf.yml b/conda_installation/environment-cerise-localgribR-ecmwf.yml new file mode 100644 index 00000000..983347f0 --- /dev/null +++ b/conda_installation/environment-cerise-localgribR-ecmwf.yml @@ -0,0 +1,331 @@ +name: condaCerise +channels: + - r + - conda-forge + - https://nexus.ecmwf.int/repository/conda-ecmwf + - https://nexus.ecmwf.int/repository/conda-forge +dependencies: + - _libgcc_mutex=0.1=conda_forge + - _openmp_mutex=4.5=2_gnu + - _r-mutex=1.0.1=anacondar_1 + - atk-1.0=2.38.0=hd4edc92_1 + - binutils_impl_linux-64=2.40=hf600244_0 + - blosc=1.21.5=h0f2a231_0 + - boost-cpp=1.78.0=h5adbc97_2 + - bwidget=1.9.14=ha770c72_1 + - bzip2=1.0.8=h7f98852_4 + - c-ares=1.19.1=hd590300_0 + - ca-certificates=2023.7.22=hbcca054_0 + - cairo=1.16.0=ha61ee94_1014 + - cfitsio=4.1.0=hd9d235c_0 + - curl=8.1.2=h409715c_0 + - eccodes=2.30.2=hc4464db_0 + - expat=2.5.0=hcb278e6_1 + - fftw=3.3.10=nompi_hc118613_108 + - font-ttf-dejavu-sans-mono=2.37=hab24e00_0 + - font-ttf-inconsolata=3.000=h77eed37_0 + - font-ttf-source-code-pro=2.038=h77eed37_0 + - font-ttf-ubuntu=0.83=hab24e00_0 + - fontconfig=2.14.2=h14ed4e7_0 + - fonts-conda-ecosystem=1=0 + - fonts-conda-forge=1=0 + - freeglut=3.2.2=h9c3ff4c_1 + - freetype=2.12.1=h267a509_2 + - freexl=1.0.6=h166bdaf_1 + - fribidi=1.0.10=h36c2ea0_0 + - gcc_impl_linux-64=13.2.0=h338b0a0_2 + - gdal=3.5.2=py311hd39052d_7 + - gdk-pixbuf=2.42.8=hff1cb4f_1 + - geos=3.11.0=h27087fc_0 + - geotiff=1.7.1=ha76d385_4 + - gettext=0.21.1=h27087fc_0 + - gfortran_impl_linux-64=13.2.0=h76e1118_2 + - ghostscript=10.02.0=h59595ed_0 + - giflib=5.2.1=h0b41bf4_3 + - gmp=6.2.1=h58526e2_0 + - graphite2=1.3.13=h58526e2_1001 + - graphviz=6.0.2=h99bc08f_0 + - gsl=2.7=he838d99_0 + - gtk2=2.24.33=h90689f9_2 + - gts=0.7.6=h977cf35_4 + - gxx_impl_linux-64=13.2.0=h338b0a0_2 + - harfbuzz=6.0.0=h8e241bc_0 + - hdf4=4.2.15=h9772cbc_5 + - hdf5=1.12.2=nompi_h4df4325_101 + - icu=70.1=h27087fc_0 + - imagemagick=7.1.0_55=pl5321h0d24a18_0 + - jasper=2.0.33=h0ff4b12_1 + - jbig=2.1=h7f98852_2003 + - jpeg=9e=h0b41bf4_3 + - json-c=0.16=hc379101_0 + - kealib=1.4.15=ha7026e8_1 + - kernel-headers_linux-64=2.6.32=he073ed8_16 + - keyutils=1.6.1=h166bdaf_0 + - krb5=1.20.1=h81ceb04_0 + - lcms2=2.14=h6ed2654_0 + - ld_impl_linux-64=2.40=h41732ed_0 + - lerc=4.0.0=h27087fc_0 + - libaec=1.0.6=hcb278e6_1 + - libblas=3.9.0=18_linux64_openblas + - libcblas=3.9.0=18_linux64_openblas + - libcurl=8.1.2=h409715c_0 + - libdap4=3.20.6=hd7c4107_2 + - libdeflate=1.14=h166bdaf_0 + - libedit=3.1.20191231=he28a2e2_2 + - libev=4.33=h516909a_1 + - libexpat=2.5.0=hcb278e6_1 + - libffi=3.4.2=h7f98852_5 + - libgcc-devel_linux-64=13.2.0=ha9c7c90_2 + - libgcc-ng=13.2.0=h807b86a_2 + - libgd=2.3.3=h18fbbfe_3 + - libgdal=3.5.2=h27ae5c1_7 + - libgfortran-ng=13.2.0=h69a702a_2 + - libgfortran5=13.2.0=ha4646dd_2 + - libglib=2.78.0=hebfc3b9_0 + - libglu=9.0.0=he1b5a44_1001 + - libgomp=13.2.0=h807b86a_2 + - libiconv=1.17=h166bdaf_0 + - libkml=1.3.0=h37653c0_1015 + - liblapack=3.9.0=18_linux64_openblas + - libnetcdf=4.8.1=nompi_h261ec11_106 + - libnghttp2=1.52.0=h61bc06f_0 + - libnsl=2.0.0=hd590300_1 + - libopenblas=0.3.24=pthreads_h413a1c8_0 + - libpng=1.6.39=h753d276_0 + - libpq=14.5=hb675445_5 + - librsvg=2.54.4=h7abd40a_0 + - librttopo=1.1.0=hf730bdb_11 + - libsanitizer=13.2.0=h7e041cc_2 + - libspatialite=5.0.1=hfbd986c_21 + - libsqlite=3.43.0=h2797004_0 + - libssh2=1.11.0=h0841786_0 + - libstdcxx-devel_linux-64=13.2.0=ha9c7c90_2 + - libstdcxx-ng=13.2.0=h7e041cc_2 + - libtiff=4.4.0=h82bc61c_5 + - libtool=2.4.7=h27087fc_0 + - libuuid=2.38.1=h0b41bf4_0 + - libwebp=1.2.4=h522a892_0 + - libwebp-base=1.2.4=h166bdaf_0 + - libxcb=1.13=h7f98852_1004 + - libxml2=2.10.3=hca2bb57_4 + - libzip=1.10.1=h2629f0a_3 + - libzlib=1.2.13=hd590300_5 + - lz4-c=1.9.4=hcb278e6_0 + - make=4.3=hd18ef5c_1 + - ncurses=6.4=hcb278e6_0 + - nspr=4.35=h27087fc_0 + - nss=3.92=h1d7d5a4_0 + - numpy=1.26.0=py311h64a7726_0 + - openjpeg=2.5.0=h7d73246_1 + - openssl=3.1.3=hd590300_0 + - pandoc=3.1.3=h32600fe_0 + - pango=1.50.14=hd33c08f_0 + - pcre=8.45=h9c3ff4c_0 + - pcre2=10.40=hc3806b6_0 + - perl=5.32.1=4_hd590300_perl5 + - phantomjs=2.1.1=ha770c72_1 + - pip=23.2.1=pyhd8ed1ab_0 + - pixman=0.42.2=h59595ed_0 + - pkg-config=0.29.2=h36c2ea0_1008 + - poppler=22.10.0=h92391eb_0 + - poppler-data=0.4.12=hd8ed1ab_0 + - postgresql=14.5=h3248436_5 + - proj=9.1.0=h93bde94_0 + - pthread-stubs=0.4=h36c2ea0_1001 + - python=3.11.5=hab00c5b_0_cpython + - python_abi=3.11=4_cp311 + - r-abind=1.4_5=r42hc72bb7e_1005 + - r-askpass=1.2.0=r42h57805ef_0 + - r-assertthat=0.2.1=r42hc72bb7e_4 + - r-backports=1.4.1=r42h57805ef_2 + - r-base=4.2.2=h6b4767f_2 + - r-base64enc=0.1_3=r42h57805ef_1006 + - r-bigmemory=4.6.1=r42ha503ecb_2 + - r-bigmemory.sri=0.1.6=r42hc72bb7e_1 + - r-brio=1.1.3=r42h57805ef_2 + - r-bslib=0.5.1=r42hc72bb7e_0 + - r-cachem=1.0.8=r42h57805ef_1 + - r-callr=3.7.3=r42hc72bb7e_1 + - r-class=7.3_22=r42h57805ef_1 + - r-classint=0.4_10=r42h61816a4_0 + - r-cli=3.6.1=r42ha503ecb_1 + - r-climdex.pcic=1.1_11=r42ha503ecb_2 + - r-climprojdiags=0.3.2=r42hc72bb7e_1 + - r-clock=0.7.0=r42ha503ecb_1 + - r-codetools=0.2_19=r42hc72bb7e_1 + - r-colorspace=2.1_0=r42h57805ef_1 + - r-commonmark=1.9.0=r42h57805ef_1 + - r-configr=0.3.5=r42hc72bb7e_1 + - r-cowplot=1.1.1=r42hc72bb7e_2 + - r-cpp11=0.4.6=r42hc72bb7e_0 + - r-crayon=1.5.2=r42hc72bb7e_2 + - r-curl=5.0.1=r42hf9611b0_0 + - r-dbi=1.1.3=r42hc72bb7e_2 + - r-desc=1.4.2=r42hc72bb7e_2 + - r-diffobj=0.3.5=r42h57805ef_2 + - r-digest=0.6.33=r42ha503ecb_0 + - r-docopt=0.7.1=r42hc72bb7e_3 + - r-doparallel=1.0.17=r42hc72bb7e_2 + - r-dotcall64=1.0_2=r42h61816a4_2 + - r-e1071=1.7_13=r42ha503ecb_1 + - r-easyncdf=0.1.2=r42hc72bb7e_1 + - r-easyverification=0.4.5=r42ha503ecb_0 + - r-ellipsis=0.3.2=r42h57805ef_2 + - r-evaluate=0.21=r42hc72bb7e_1 + - r-fansi=1.0.4=r42h57805ef_1 + - r-farver=2.1.1=r42ha503ecb_2 + - r-fastmap=1.1.1=r42ha503ecb_1 + - r-fields=15.2=r42h61816a4_0 + - r-fnn=1.1.3.2=r42ha503ecb_1 + - r-fontawesome=0.5.2=r42hc72bb7e_0 + - r-foreach=1.5.2=r42hc72bb7e_2 + - r-formattable=0.2.1=r42ha770c72_2 + - r-fs=1.6.3=r42ha503ecb_0 + - r-future=1.33.0=r42hc72bb7e_0 + - r-generics=0.1.3=r42hc72bb7e_2 + - r-geomap=2.5_0=r42h57805ef_2 + - r-geomapdata=2.0_2=r42hc72bb7e_0 + - r-ggplot2=3.4.3=r42hc72bb7e_0 + - r-globals=0.16.2=r42hc72bb7e_1 + - r-glue=1.6.2=r42h57805ef_2 + - r-gridextra=2.3=r42hc72bb7e_1005 + - r-gtable=0.3.4=r42hc72bb7e_0 + - r-highr=0.10=r42hc72bb7e_1 + - r-htmltools=0.5.6=r42ha503ecb_0 + - r-htmlwidgets=1.6.2=r42hc72bb7e_1 + - r-httpuv=1.6.11=r42ha503ecb_1 + - r-httr=1.4.7=r42hc72bb7e_0 + - r-ini=0.3.1=r42hc72bb7e_1005 + - r-isoband=0.2.7=r42ha503ecb_2 + - r-iterators=1.0.14=r42hc72bb7e_2 + - r-jquerylib=0.1.4=r42hc72bb7e_2 + - r-jsonlite=1.8.7=r42h57805ef_0 + - r-kableextra=1.3.4=r42hc72bb7e_2 + - r-kernsmooth=2.23_22=r42h13b3f57_0 + - r-knitr=1.44=r42hc72bb7e_0 + - r-labeling=0.4.3=r42hc72bb7e_0 + - r-later=1.3.1=r42ha503ecb_1 + - r-lattice=0.21_8=r42h57805ef_1 + - r-lifecycle=1.0.3=r42hc72bb7e_2 + - r-listenv=0.9.0=r42hc72bb7e_1 + - r-log4r=0.4.3=r42h57805ef_1 + - r-lubridate=1.9.2=r42h57805ef_2 + - r-magick=2.7.3=r42h7525677_1 + - r-magrittr=2.0.3=r42h57805ef_2 + - r-mapproj=1.2.11=r42h57805ef_1 + - r-maps=3.4.1=r42h57805ef_2 + - r-mass=7.3_60=r42h57805ef_1 + - r-matrix=1.6_1.1=r42h316c678_0 + - r-mba=0.1_0=r42ha503ecb_1 + - r-memoise=2.0.1=r42hc72bb7e_2 + - r-memuse=4.2_3=r42h57805ef_1 + - r-mgcv=1.9_0=r42h316c678_0 + - r-mime=0.12=r42h57805ef_2 + - r-multiapply=2.1.4=r42hc72bb7e_1 + - r-munsell=0.5.0=r42hc72bb7e_1006 + - r-nbclust=3.0.1=r42hc72bb7e_2 + - r-ncdf4=1.21=r42h15f2bca_0 + - r-nlme=3.1_163=r42h61816a4_0 + - r-nnet=7.3_19=r42h57805ef_1 + - r-openssl=2.1.1=r42hb353fa6_0 + - r-parallelly=1.36.0=r42hc72bb7e_1 + - r-pbapply=1.7_2=r42hc72bb7e_0 + - r-pcict=0.5_4.4=r42h57805ef_1 + - r-pillar=1.9.0=r42hc72bb7e_1 + - r-pkgbuild=1.4.2=r42hc72bb7e_0 + - r-pkgconfig=2.0.3=r42hc72bb7e_3 + - r-pkgload=1.3.3=r42hc72bb7e_0 + - r-plyr=1.8.8=r42ha503ecb_1 + - r-praise=1.0.0=r42hc72bb7e_1007 + - r-prettyunits=1.2.0=r42hc72bb7e_0 + - r-processx=3.8.2=r42h57805ef_0 + - r-proj4=1.0_12=r42h4db2be8_0 + - r-promises=1.2.1=r42ha503ecb_0 + - r-proxy=0.4_27=r42h57805ef_2 + - r-ps=1.7.5=r42h57805ef_1 + - r-r6=2.5.1=r42hc72bb7e_2 + - r-rappdirs=0.3.3=r42h57805ef_2 + - r-rcolorbrewer=1.1_3=r42h6115d3f_0 + - r-rcpp=1.0.11=r42h7df8631_0 + - r-rcpparmadillo=0.12.6.4.0=r42h08d816e_0 + - r-rcpptoml=0.2.2=r42ha503ecb_1 + - r-rematch2=2.1.2=r42hc72bb7e_3 + - r-rlang=1.1.1=r42ha503ecb_1 + - r-rmarkdown=2.25=r42hc72bb7e_0 + - r-rnaturalearth=0.1.0=r42hc72bb7e_1 + - r-rpmg=2.2_7=r42hc72bb7e_0 + - r-rprojroot=2.0.3=r42hc72bb7e_1 + - r-rstudioapi=0.15.0=r42hc72bb7e_0 + - r-rvest=1.0.3=r42hc72bb7e_2 + - r-s2=1.1.4=r42h5eac2b3_1 + - r-s2dv=1.4.1=r42hc72bb7e_1 + - r-s2dverification=2.10.3=r42hc72bb7e_2 + - r-sass=0.4.7=r42ha503ecb_0 + - r-scales=1.2.1=r42hc72bb7e_2 + - r-selectr=0.4_2=r42hc72bb7e_3 + - r-sf=1.0_7=r42h25da31b_5 + - r-shiny=1.7.5=r42h785f33e_0 + - r-sourcetools=0.1.7_1=r42ha503ecb_1 + - r-sp=2.0_0=r42h57805ef_0 + - r-spam=2.9_1=r42hd9ac46e_2 + - r-specsverification=0.5_3=r42h7525677_2 + - r-splancs=2.01_44=r42h61816a4_0 + - r-startr=2.3.0=r42hc72bb7e_0 + - r-stringi=1.7.12=r42h1ae9187_0 + - r-stringr=1.5.0=r42h785f33e_1 + - r-svglite=2.1.1=r42h329214f_1 + - r-sys=3.4.2=r42h57805ef_1 + - r-systemfonts=1.0.4=r42haf97adc_2 + - r-testthat=3.1.10=r42ha503ecb_0 + - r-tibble=3.2.1=r42h57805ef_2 + - r-timechange=0.2.0=r42ha503ecb_1 + - r-tinytex=0.46=r42hc72bb7e_0 + - r-tzdb=0.4.0=r42ha503ecb_1 + - r-units=0.8_4=r42ha503ecb_0 + - r-utf8=1.2.3=r42h57805ef_1 + - r-uuid=1.1_1=r42h57805ef_0 + - r-vctrs=0.6.3=r42ha503ecb_0 + - r-viridis=0.6.4=r42hc72bb7e_0 + - r-viridislite=0.4.2=r42hc72bb7e_1 + - r-waldo=0.5.1=r42hc72bb7e_1 + - r-webshot=0.5.5=r42hc72bb7e_0 + - r-withr=2.5.1=r42hc72bb7e_0 + - r-wk=0.8.0=r42ha503ecb_0 + - r-xfun=0.40=r42ha503ecb_0 + - r-xml2=1.3.3=r42h044e5c7_2 + - r-xtable=1.8_4=r42hc72bb7e_5 + - r-yaml=2.3.5=r42h06615bd_1 + - readline=8.2=h8228510_1 + - sed=4.8=he412f7d_0 + - setuptools=68.2.2=pyhd8ed1ab_0 + - snappy=1.1.10=h9fff704_0 + - sqlite=3.43.0=h2c6b66d_0 + - sysroot_linux-64=2.12=he073ed8_16 + - tiledb=2.11.3=h3f4058f_1 + - tk=8.6.13=h2797004_0 + - tktable=2.10=h0c5db8f_5 + - tzcode=2023c=h0b41bf4_0 + - tzdata=2023c=h71feb2d_0 + - udunits2=2.2.28=h40f5838_2 + - wheel=0.41.2=pyhd8ed1ab_0 + - xerces-c=3.2.4=h55805fa_1 + - xorg-fixesproto=5.0=h7f98852_1002 + - xorg-inputproto=2.3.2=h7f98852_1002 + - xorg-kbproto=1.0.7=h7f98852_1002 + - xorg-libice=1.0.10=h7f98852_0 + - xorg-libsm=1.2.3=hd9c2040_1000 + - xorg-libx11=1.8.4=h0b41bf4_0 + - xorg-libxau=1.0.11=hd590300_0 + - xorg-libxdmcp=1.1.3=h7f98852_0 + - xorg-libxext=1.3.4=h0b41bf4_2 + - xorg-libxfixes=5.0.3=h7f98852_1004 + - xorg-libxi=1.7.10=h7f98852_0 + - xorg-libxrender=0.9.10=h7f98852_1003 + - xorg-libxt=1.3.0=hd590300_0 + - xorg-renderproto=0.11.1=h7f98852_1002 + - xorg-xextproto=7.3.0=h0b41bf4_1003 + - xorg-xproto=7.0.31=h7f98852_1007 + - xz=5.2.6=h166bdaf_0 + - zlib=1.2.13=hd590300_5 + - zstd=1.5.5=hfc55251_0 +prefix: /perm/cyce/conda/envs/condaCerise -- GitLab From 255f9eef1a36b267394d340979efef5c8c66131c Mon Sep 17 00:00:00 2001 From: vagudets Date: Wed, 27 Sep 2023 16:47:34 +0200 Subject: [PATCH 294/388] Dev downscaling --- conf/archive.yml | 8 +- modules/Calibration/Calibration.R | 3 +- modules/Downscaling/Downscaling.R | 295 +++++++ modules/Downscaling/tmp/Analogs.R | 550 +++++++++++++ modules/Downscaling/tmp/Intbc.R | 339 ++++++++ modules/Downscaling/tmp/Interpolation.R | 767 ++++++++++++++++++ modules/Downscaling/tmp/Intlr.R | 559 +++++++++++++ modules/Downscaling/tmp/LogisticReg.R | 550 +++++++++++++ modules/Downscaling/tmp/Utils.R | 39 + modules/Loading/Loading.R | 1 + .../recipe_system5c3s-tas_downscaling.yml | 62 ++ modules/Saving/R/get_filename.R | 3 +- modules/Skill/Skill.R | 2 +- modules/Visualization/Visualization.R | 1 + tools/check_recipe.R | 114 ++- tools/data_summary.R | 3 +- 16 files changed, 3284 insertions(+), 12 deletions(-) create mode 100644 modules/Downscaling/Downscaling.R create mode 100644 modules/Downscaling/tmp/Analogs.R create mode 100644 modules/Downscaling/tmp/Intbc.R create mode 100644 modules/Downscaling/tmp/Interpolation.R create mode 100644 modules/Downscaling/tmp/Intlr.R create mode 100644 modules/Downscaling/tmp/LogisticReg.R create mode 100644 modules/Downscaling/tmp/Utils.R create mode 100644 modules/Loading/testing_recipes/recipe_system5c3s-tas_downscaling.yml diff --git a/conf/archive.yml b/conf/archive.yml index a347dc40..29489a97 100644 --- a/conf/archive.yml +++ b/conf/archive.yml @@ -5,9 +5,9 @@ esarchive: name: "ECMWF SEAS5" institution: "European Centre for Medium-Range Weather Forecasts" src: "exp/ecmwf/system5c3s/" + daily: {"tasmin":"/", "tasmax":"/"} daily_mean: {"tas":"_f6h/", "rsds":"_s0-24h/", "prlr":"_s0-24h/", "sfcWind":"_f6h/", - "tasmin":"_f24h/", "tasmax":"_f24h/", "ta300":"_f12h/", "ta500":"_f12h/", "ta850":"_f12h/", "g300":"_f12h/", "g500":"_f12h/", "g850":"_f12h/", "tdps":"_f6h/", "hurs":"_f6h/"} @@ -16,7 +16,8 @@ esarchive: "tasmin":"_f24h/", "tasmax":"_f24h/", "ta300":"_f12h/", "ta500":"_f12h/", "ta850":"_f12h/", "g300":"_f12h/", "g500":"_f12h/", "g850":"_f12h/", - "tdps":"_f6h/", "psl":"_f6h/", "tos":"_f6h/"} + "tdps":"_f6h/", "psl":"_f6h/", "tos":"_f6h/", + "hurs":"_f6h/"} nmember: fcst: 51 hcst: 25 @@ -185,7 +186,8 @@ esarchive: name: "ECMWF CERRA" institution: "European Centre for Medium-Range Weather Forecasts" src: "recon/ecmwf/cerra/" - daily_mean: {"hur":"_f3h-r2631x1113/", "ps":"_f3h-r2631x1113/", "sfcWind":"_f3h-r2631x1113/", + daily: {"tasmax":"-r2631x1113/", "tasmin":"-r2631x1113/"} + daily_mean: {"hurs":"_f3h-r2631x1113/", "ps":"_f3h-r2631x1113/", "sfcWind":"_f3h-r2631x1113/", "tas":"_f3h-r2631x1113/", "winddir":"_f3h-r2631x1113/"} monthly_mean: {"hurs":"_f3h-r2631x1113/", "ps":"_f3h-r2631x1113/", "sfcWind":"_f3h-r2631x1113/", "tas":"_f3h-r2631x1113/", "winddir":"_f3h-r2631x1113/","tasmin":"_f24h-r2631x1113/","tasmax":"_f24h-r2631x1113/"} diff --git a/modules/Calibration/Calibration.R b/modules/Calibration/Calibration.R index 171b22cf..e41565a9 100644 --- a/modules/Calibration/Calibration.R +++ b/modules/Calibration/Calibration.R @@ -110,7 +110,8 @@ Calibration <- function(recipe, data) { fcst_calibrated <- NULL } } - } else if (recipe$Analysis$Variables$freq == "daily_mean") { + } else if ((recipe$Analysis$Variables$freq == "daily_mean") || + (recipe$Analysis$Variables$freq == "daily")) { # Daily data calibration using Quantile Mapping if (!(method %in% c("qmap"))) { error(recipe$Run$logger, diff --git a/modules/Downscaling/Downscaling.R b/modules/Downscaling/Downscaling.R new file mode 100644 index 00000000..15f5ea9b --- /dev/null +++ b/modules/Downscaling/Downscaling.R @@ -0,0 +1,295 @@ +### Downscaling Module +source('modules/Downscaling/tmp/Interpolation.R') +source('modules/Downscaling/tmp/Intbc.R') +source('modules/Downscaling/tmp/Intlr.R') +source('modules/Downscaling/tmp/Analogs.R') +source('modules/Downscaling/tmp/LogisticReg.R') +source('modules/Downscaling/tmp/Utils.R') + +Downscaling <- function(recipe, data) { + # Function that downscale the hindcast using the method stated in the + # recipe. For the moment, forecast must be null. + # + # data: list of s2dv_cube objects containing the hcst, obs and fcst. + # recipe: object obtained when passing the .yml recipe file to read_yaml() + + type <- tolower(recipe$Analysis$Workflow$Downscaling$type) + + if (type == "none") { + hcst_downscal <- data$hcst + DOWNSCAL_MSG <- "##### NO DOWNSCALING PERFORMED #####" + + } else { + + if (!is.null(data$fcst)) { + warn(recipe$Run$logger, + "The downscaling will be only performed to the hindcast data") + data$fcst <- NULL + } + # Downscaling function params + int_method <- tolower(recipe$Analysis$Workflow$Downscaling$int_method) + bc_method <- tolower(recipe$Analysis$Workflow$Downscaling$bc_method) + lr_method <- tolower(recipe$Analysis$Workflow$Downscaling$lr_method) + log_reg_method <- tolower(recipe$Analysis$Workflow$Downscaling$log_reg_method) + target_grid <- tolower(recipe$Analysis$Workflow$Downscaling$target_grid) + nanalogs <- as.numeric(recipe$Analysis$Workflow$Downscaling$nanalogs) + size <- recipe$Analysis$Workflow$Downscaling$size + + if (is.null(recipe$Analysis$ncores)) { + ncores <- 1 + } else { + ncores <- recipe$Analysis$ncores + } + + #TO DO: add the parametre loocv where it corresponds + if (is.null(recipe$Analysis$loocv)) { + loocv <- TRUE + } else { + loocv <- recipe$Analysis$loocv + } + + DOWNSCAL_TYPES <- c("none", "int", "intbc", "intlr", "analogs", "logreg") + BC_METHODS <- c("quantile_mapping", "bias", "evmos", "mse_min", "crps_min", "rpc-based", "qm") + LR_METHODS <- c("basic", "large-scale", "4nn") + LOG_REG_METHODS <- c("ens_mean", "ens_mean_sd", "sorted_members") + + if (!(type %in% DOWNSCAL_TYPES)) { + stop("Downscaling type in the recipe is not available. Accepted types ", + "are 'none', 'int', 'intbc', 'intlr', 'analogs', 'logreg'.") + } + + if (type == "int") { + if (is.null(int_method)) { + stop("Please provide one interpolation method in the recipe.") + } + + if (is.null(target_grid)) { + stop("Please provide the target grid in the recipe.") + } + + # Ensure that observations are in the same grid as experiments + # Only needed for this method because the others already return the + # observations + latmin <- data$hcst$coords$latitude[1] + lonmin <- data$hcst$coords$longitude[1] + latmax <- data$hcst$coords$latitude[length(data$hcst$coords$latitude)] + lonmax <- data$hcst$coords$longitude[length(data$hcst$coords$longitude)] + hcst_downscal <- CST_Interpolation(data$hcst, + points = NULL, + method_remap = int_method, + target_grid = target_grid, + lat_dim = "latitude", + lon_dim = "longitude", + region = c(lonmin, lonmax, latmin, latmax), + method_point_interp = NULL) + + obs_downscal <- CST_Interpolation(data$obs, + points = NULL, + method_remap = int_method, + target_grid = target_grid, + lat_dim = "latitude", + lon_dim = "longitude", + region = c(lonmin, lonmax, latmin, latmax), + method_point_interp = NULL) + + hcst_downscal$obs <- obs_downscal$exp + + DOWNSCAL_MSG <- "##### DOWNSCALING COMPLETE #####" + } else if (type == "intbc") { + if (length(int_method) == 0) { + stop("Please provide one (and only one) interpolation method in the recipe.") + } + + if (is.null(bc_method)) { + stop("Please provide one bias-correction method in the recipe. Accepted ", + "methods are 'quantile_mapping', 'bias', 'evmos', 'mse_min', 'crps_min' ", + "'rpc-based', 'qm'. ") + } + + if (is.null(target_grid)) { + stop("Please provide the target grid in the recipe.") + } + + if (!(bc_method %in% BC_METHODS)) { + stop(paste0(bc_method, " method in the recipe is not available. Accepted methods ", + "are 'quantile_mapping', 'bias', 'evmos', 'mse_min', 'crps_min' ", + "'rpc-based', 'qm'.")) + } + + hcst_downscal <- CST_Intbc(data$hcst, data$obs, + target_grid = target_grid, + bc_method = bc_method, + int_method = int_method, + points = NULL, + method_point_interp = NULL, + lat_dim = "latitude", + lon_dim = "longitude", + sdate_dim = "syear", + member_dim = "ensemble", + region = NULL, + ncores = ncores) + DOWNSCAL_MSG <- "##### DOWNSCALING COMPLETE #####" + } else if (type == "intlr") { + if (length(int_method) == 0) { + stop("Please provide one (and only one) interpolation method in the recipe.") + } + + if (is.null(lr_method)) { + stop("Please provide one linear regression method in the recipe. Accepted ", + "methods are 'basic', 'large-scale', '4nn'.") + } + + if (is.null(target_grid)) { + stop("Please provide the target grid in the recipe.") + } + + if (!(lr_method %in% LR_METHODS)) { + stop(paste0(lr_method, " method in the recipe is not available. Accepted methods ", + "are 'basic', 'large-scale', '4nn'.")) + } + + # TO DO: add the possibility to have the element 'pred' in 'data' + if (lr_method == "large-scale") { + if (is.null(data$pred$data)) { + stop("Please provide the large scale predictors in the element 'data$pred$data'.") + } + } else { + data$pred$data <- NULL + } + + hcst_downscal <- CST_Intlr(data$hcst, data$obs, + lr_method = lr_method, + target_grid = target_grid, + points = NULL, + int_method = int_method, + method_point_interp = NULL, + predictors = data$pred$data, + lat_dim = "latitude", + lon_dim = "longitude", + sdate_dim = "syear", + time_dim = "time", + member_dim = "ensemble", + large_scale_predictor_dimname = 'vars', + loocv = loocv, + region = NULL, + ncores = ncores) + + DOWNSCAL_MSG <- "##### DOWNSCALING COMPLETE #####" + } else if (type == "analogs") { + + if (is.null(nanalogs)) { + warning("The number of analogs for searching has not been provided in the ", + "recipe. Setting it to 3.") + nanalogs <- 3 + } + + if (!is.null(size) & recipe$Analysis$Variables$freq == "monthly_mean") { + size <- NULL + warning("Size is set to NULL. ", + "It must be NULL for the monthly input data.") + } + + if (!is.null(size)) { + dum <- data$obs$data ## keep obs data before the window process to provide it later as the output + data$obs$data <- .generate_window(data$obs$data, + sdate_dim = 'syear', + time_dim = 'time', + loocv = TRUE, + size = size) + data$obs$data <- Apply(data$obs$data, + target_dims="window", + fun=function (x) x[!is.na(x)])$output1 + } + + hcst_downscal <- CST_Analogs(data$hcst, data$obs, + grid_exp = data$hcst$attrs$source_files[ + which(!is.na(data$hcst$attrs$source_files))[1]], + nanalogs = nanalogs, + fun_analog = "wmean", + lat_dim = "latitude", + lon_dim = "longitude", + sdate_dim = "syear", + time_dim = "time", + member_dim = "ensemble", + region = NULL, + return_indices = FALSE, + loocv_window = loocv, + ncores = ncores) + + if (!is.null(size)) { + hcst_downscal$obs$data <- Apply(dum, target_dims=c("time", "smonth"), + function (x) {x[1:(dim(data$hcst$data)["time"]), 2]}, + ncores = ncores, + output_dims = "time")$output1 ## 2nd month is the target month + } + + DOWNSCAL_MSG <- "##### DOWNSCALING COMPLETE #####" + } else if (type == "logreg") { + + if (length(int_method) == 0) { + stop("Please provide one (and only one) interpolation method in the recipe.") + } + + if (is.null(log_reg_method)) { + stop("Please provide one logistic regression method in the recipe. Accepted ", + "methods are 'ens_mean', 'ens_mean_sd', 'sorted_members'.") + } + + if (is.null(target_grid)) { + stop("Please provide the target grid in the recipe.") + } + + # Since we are forcing to create three categories, and applying cross-validation, + # we need at least six years of data for the logistic regression function to not + # crash + if (dim(data$hcst$data)[names(dim(data$hcst$data)) == "syear"] <= 5) { + stop("The number of start dates is insufficient for the logisitic regression method. ", + "Please provide six or more.") + } + + if (!(log_reg_method %in% LOG_REG_METHODS)) { + stop(paste0(log_reg_method, " method in the recipe is not available. Accepted methods ", + "are 'ens_mean', 'ens_mean_sd', 'sorted_members'.")) + } + + hcst_downscal <- CST_LogisticReg(data$hcst, data$obs, + target_grid = target_grid, + int_method = int_method, + log_reg_method = log_reg_method, + probs_cat = c(1/3,2/3), + return_most_likely_cat = FALSE, + points = NULL, + method_point_interp = NULL, + lat_dim = "latitude", + lon_dim = "longitude", + sdate_dim = "syear", + member_dim = "ensemble", + region = NULL, + loocv = loocv, + ncores = ncores) + + DOWNSCAL_MSG <- "##### DOWNSCALING COMPLETE #####" + } + } + print(DOWNSCAL_MSG) + + # Saving + if (recipe$Analysis$Workflow$Downscaling$save != 'none') { + info(recipe$Run$logger, "##### START SAVING CALIBRATED DATA #####") + } + ## TODO: What do we do with the full values? + recipe$Run$output_dir <- paste0(recipe$Run$output_dir, + "/outputs/Downscaling/") + # if ((recipe$Analysis$Workflow$Downscaling$save %in% + # c('all', 'exp_only', 'fcst_only')) && (!is.null(data$fcst))) { + # save_forecast(recipe = recipe, data_cube = data$fcst, type = 'fcst') + # } + if (recipe$Analysis$Workflow$Downscaling$save %in% c('all', 'exp_only')) { + save_forecast(recipe = recipe, data_cube = hcst_downscal$exp, type = 'hcst') + } + if (recipe$Analysis$Workflow$Downscaling$save == 'all') { + save_observations(recipe = recipe, data_cube = hcst_downscal$obs) + } + + return(list(hcst = hcst_downscal$exp, obs = hcst_downscal$obs, fcst = NULL)) +} diff --git a/modules/Downscaling/tmp/Analogs.R b/modules/Downscaling/tmp/Analogs.R new file mode 100644 index 00000000..99fc45e7 --- /dev/null +++ b/modules/Downscaling/tmp/Analogs.R @@ -0,0 +1,550 @@ +#'@rdname CST_Analogs +#'@title Downscaling using Analogs based on large scale fields. +#' +#'@author J. Ramon, \email{jaume.ramon@bsc.es} +#' +#'@description This function performs a downscaling using Analogs. To compute +#'the analogs given a coarse-scale field, the function looks for days with +#'similar conditions in the historical observations. The coarse scale and +#'observation data can be either global or regional. In the latter case, the +#'region is defined by the user. In principle, the coarse and observation data +#'should be of the same variable, although different variables can also be admitted. +#'The analogs function will find the N best analogs based in Minimum Euclidean +#'distance. +#' +#'The search of analogs must be done in the longest dataset posible, but might +#'require high-memory computational resources. This is important since it is +#'necessary to have a good representation of the possible states of the field in +#'the past, and therefore, to get better analogs. The function can also look for +#'analogs within a window of D days, but is the user who has to define that window. +#'Otherwise, the function will look for analogs in the whole dataset. This function +#'is intended to downscale climate prediction data (i.e., sub-seasonal, seasonal +#'and decadal predictions) but can admit climate projections or reanalyses. It does +#'not have constrains of specific region or variables to downscale. +#'@param exp an 's2dv' object with named dimensions containing the experimental field on +#'the coarse scale for which the downscaling is aimed. The object must have, at least, +#'the dimensions latitude, longitude, start date and time. The object is expected to be +#'already subset for the desired region. Data can be in one or two integrated regions, e.g., +#'crossing the Greenwich meridian. To get the correct results in the latter case, +#'the borders of the region should be specified in the parameter 'region'. See parameter +#''region'. +#'@param obs an 's2dv' object with named dimensions containing the observational field. +#'The object must have, at least, the dimensions latitude, longitude and start date. +#'The object is expected to be already subset for the desired region. +#'@param obs2 an 's2dv' object with named dimensions containing a different observational +#'field to that in 'obs'. If provided, these observations will be used in the training, +#'i.e. the searching for analogs, so that they should be in a coarser grid to those in +#''obs'. Training with observations on a grid with a spatial resolution closer to that +#'in 'exp', will in principle ensure better results. The object must have, at least, the +#'dimensions latitude, longitude and start date. The object is expected to be already +#'subset for the desired region. +#'@param grid_exp a character vector with a path to an example file of the exp data. +#'It can be either a path to another NetCDF file which to read the target grid from +#'(a single grid must be defined in such file) or a character vector indicating the +#'coarse grid to be passed to CDO, and it must be a grid recognised by CDO. +#'@param nanalogs an integer indicating the number of analogs to be searched +#'@param fun_analog a function to be applied over the found analogs. Only these options +#'are valid: "mean", "wmean", "max", "min", "median" or NULL. If set to NULL (default), +#'the function returns the found analogs. +#'@param lat_dim a character vector indicating the latitude dimension name in the element +#''data' in exp and obs. Default set to "lat". +#'@param lon_dim a character vector indicating the longitude dimension name in the element +#''data' in exp and obs. Default set to "lon". +#'@param sdate_dim a character vector indicating the start date dimension name in the +#'element 'data' in exp and obs. Default set to "sdate". +#'@param time_dim a character vector indicating the time dimension name in the element +#''data' in exp and obs. Default set to "time". +#'@param member_dim a character vector indicating the member dimension name in the element +#''data' in exp and obs. Default set to "member". +#'@param region a numeric vector indicating the borders of the region defined in exp. +#'It consists of four elements in this order: lonmin, lonmax, latmin, latmax. lonmin refers +#'to the left border, while lonmax refers to the right border. latmin indicates the lower +#'border, whereas latmax indicates the upper border. If set to NULL (default), the function +#'takes the first and last elements of the latitudes and longitudes. +#'@param return_indices a logical vector indicating whether to return the indices of the +#'analogs together with the downscaled fields. Default to FALSE. +#'@param loocv_window a logical vector only to be used if 'obs' does not have the dimension +#''window'. It indicates whether to apply leave-one-out cross-validation in the creation +#'of the window. It is recommended to be set to TRUE. Default to TRUE. +#'@param ncores an integer indicating the number of cores to use in parallel computation. +#'The default value is NULL. +#'@return An 's2dv' object. The element 'data' contains the dowscaled field, 'lat' the +#'downscaled latitudes, and 'lon' the downscaled longitudes. If fun_analog is set to NULL +#'(default), the output array in 'data' also contains the dimension 'analog' with the best +#'analog days. +#'@examples +#'exp <- rnorm(15000) +#'dim(exp) <- c(member = 5, lat = 4, lon = 5, sdate = 5, time = 30) +#'exp_lons <- 1:5 +#'exp_lats <- 1:4 +#'obs <- rnorm(27000) +#'dim(obs) <- c(lat = 12, lon = 15, sdate = 5, time = 30) +#'obs_lons <- seq(0,6, 6/14) +#'obs_lats <- seq(0,6, 6/11) +#'exp <- s2dv_cube(data = exp, lat = exp_lats, lon = exp_lons) +#'obs <- s2dv_cube(data = obs, lat = obs_lats, lon = obs_lons) +#'downscaled_field <- CST_Analogs(exp = exp, obs = obs, grid_exp = 'r360x180') +#'@export +CST_Analogs <- function(exp, obs, grid_exp, obs2 = NULL, nanalogs = 3, fun_analog = NULL, lat_dim = "lat", + lon_dim = "lon", sdate_dim = "sdate", time_dim = "time", member_dim = "member", + region = NULL, return_indices = FALSE, loocv_window = TRUE, ncores = NULL) { + + # input exp and obs must be s2dv_cube objects + if (!inherits(exp,'s2dv_cube')) { + stop("Parameter 'exp' must be of the class 's2dv_cube'") + } + + # input exp and obs must be s2dv_cube objects + if (!inherits(obs,'s2dv_cube')) { + stop("Parameter 'obs' must be of the class 's2dv_cube'") + } + + res <- Analogs(exp = exp$data, obs = obs$data, exp_lats = exp$coords[[lat_dim]], + exp_lons = exp$coords[[lon_dim]], obs_lats = obs$coords[[lat_dim]], + obs_lons = obs$coords[[lon_dim]], grid_exp = grid_exp, nanalogs = nanalogs, + fun_analog = fun_analog, lat_dim = lat_dim, lon_dim = lon_dim, + sdate_dim = sdate_dim, time_dim = time_dim, member_dim = member_dim, + region = region, return_indices = return_indices, loocv_window = loocv_window, + ncores = ncores) + + # Modify data, lat and lon in the origina s2dv_cube, adding the downscaled data + exp$data <- res$data + exp$dims <- dim(exp$data) + exp$coords[[lon_dim]] <- res$lon + exp$coords[[lat_dim]] <- res$lat + + obs$data <- res$obs + obs$dims <- dim(obs$data) + obs$coords[[lon_dim]] <- res$lon + obs$coords[[lat_dim]] <- res$lat + + res_s2dv <- list(exp = exp, obs = obs) + return(res_s2dv) +} + +#'@rdname Analogs +#'@title Downscaling using Analogs based on large scale fields. +#' +#'@author J. Ramon, \email{jaume.ramon@bsc.es} +#'@author Ll. Lledó, \email{llorenc.lledo@ecmwf.int} +#' +#'@description This function performs a downscaling using Analogs. To compute +#'the analogs given a coarse-scale field, the function looks for days with +#'similar conditions in the historical observations. The coarse scale and +#'observation data can be either global or regional. In the latter case, the +#'region is defined by the user. In principle, the coarse and observation data +#'should be of the same variable, although different variables can also be admitted. +#'The analogs function will find the N best analogs based in Minimum Euclidean +#'distance. +#' +#'The search of analogs must be done in the longest dataset posible, but might +#'require high-memory computational resources. This is important since it is +#'necessary to have a good representation of the possible states of the field in +#'the past, and therefore, to get better analogs. The function can also look for +#'analogs within a window of D days, but is the user who has to define that window. +#'Otherwise, the function will look for analogs in the whole dataset. This function +#'is intended to downscale climate prediction data (i.e., sub-seasonal, seasonal +#'and decadal predictions) but can admit climate projections or reanalyses. It does +#'not have constrains of specific region or variables to downscale. +#'@param exp an array with named dimensions containing the experimental field on the +#'coarse scale for which the downscaling is aimed. The object must have, at least, +#'the dimensions latitude, longitude, start date and time. The object is expected to be +#'already subset for the desired region. Data can be in one or two integrated regions, e.g., +#'crossing the Greenwich meridian. To get the correct results in the latter case, +#'the borders of the region should be specified in the parameter 'region'. See parameter +#''region'. +#'@param obs an array with named dimensions containing the observational field. The object +#'must have, at least, the dimensions latitude, longitude, start date and time. The object +#'is expected to be already subset for the desired region. Optionally, 'obs' can have the +#'dimension 'window', containing the sampled fields into which the function will look for +#'the analogs. See function 'generate_window()'. Otherwise, the function will look for +#'analogs using all the possible fields contained in obs. +#'@param exp_lats a numeric vector containing the latitude values in 'exp'. Latitudes must +#'range from -90 to 90. +#'@param exp_lons a numeric vector containing the longitude values in 'exp'. Longitudes +#'can range from -180 to 180 or from 0 to 360. +#'@param obs_lats a numeric vector containing the latitude values in 'obs'. Latitudes must +#'range from -90 to 90. +#'@param obs_lons a numeric vector containing the longitude values in 'obs'. Longitudes +#'can range from -180 to 180 or from 0 to 360. +#'@param grid_exp a character vector with a path to an example file of the exp data. +#'It can be either a path to another NetCDF file which to read the target grid from +#'(a single grid must be defined in such file) or a character vector indicating the +#'coarse grid to be passed to CDO, and it must be a grid recognised by CDO. +#'@param obs2 an 's2dv' object with named dimensions containing a different observational +#'field to that in 'obs'. If provided, these observations will be used in the training, +#'i.e. the searching for analogs, so that they should be in a coarser grid to those in +#''obs'. Training with observations on a grid with a spatial resolution closer to that +#'in 'exp', will in principle ensure better results. The object must have, at least, the +#'dimensions latitude, longitude and start date. The object is expected to be already +#'subset for the desired region. +#'@param nanalogs an integer indicating the number of analogs to be searched. +#'@param fun_analog a function to be applied over the found analogs. Only these options +#'are valid: "mean", "wmean", "max", "min", "median" or NULL. If set to NULL (default), +#'the function returns the found analogs. +#'@param lat_dim a character vector indicating the latitude dimension name in the element +#''data' in exp and obs. Default set to "lat". +#'@param lon_dim a character vector indicating the longitude dimension name in the element +#''data' in exp and obs. Default set to "lon". +#'@param sdate_dim a character vector indicating the start date dimension name in the +#'element 'data' in exp and obs. Default set to "sdate". +#'@param time_dim a character vector indicating the time dimension name in the element +#''data' in exp and obs. Default set to "time". +#'@param member_dim a character vector indicating the member dimension name in the element +#''data' in exp and obs. Default set to "member". +#'@param region a numeric vector indicating the borders of the region defined in exp. +#'It consists of four elements in this order: lonmin, lonmax, latmin, latmax. lonmin refers +#'to the left border, while lonmax refers to the right border. latmin indicates the lower +#'border, whereas latmax indicates the upper border. If set to NULL (default), the function +#'takes the first and last elements of the latitudes and longitudes. +#'@param return_indices a logical vector indicating whether to return the indices of the +#'analogs together with the downscaled fields. The indices refer to the position of the +#'element in the vector time * start_date. If 'obs' contain the dimension 'window', it will +#'refer to the position of the element in the dimension 'window'. Default to FALSE. +#'@param loocv_window a logical vector only to be used if 'obs' does not have the dimension +#''window'. It indicates whether to apply leave-one-out cross-validation in the creation +#'of the window. It is recommended to be set to TRUE. Default to TRUE. +#'@param ncores an integer indicating the number of cores to use in parallel computation. +#'The default value is NULL. +#'@import multiApply +#'@import CSTools +#'@importFrom s2dv InsertDim CDORemap +#'@importFrom FNN get.knnx +#' +#'@seealso \code{\link[s2dverification]{CDORemap}} +#' +#'@return A list of three elements. 'data' contains the dowscaled field, 'lat' the +#'downscaled latitudes, and 'lon' the downscaled longitudes. If fun_analog is set to NULL +#'(default), the output array in 'data' also contains the dimension 'analog' with the best +#'analog days. +#'@examples +#'exp <- rnorm(15000) +#'dim(exp) <- c(member = 5, lat = 4, lon = 5, sdate = 5, time = 30) +#'exp_lons <- 1:5 +#'exp_lats <- 1:4 +#'obs <- rnorm(27000) +#'dim(obs) <- c(lat = 12, lon = 15, sdate = 5, time = 30) +#'obs_lons <- seq(0,6, 6/14) +#'obs_lats <- seq(0,6, 6/11) +#'downscaled_field <- Analogs(exp = exp, obs = obs, exp_lats = exp_lats, exp_lons = exp_lons, +#'obs_lats = obs_lats, obs_lons = obs_lons, grid_exp = 'r360x180') +#'@export +Analogs <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, grid_exp, obs2 = NULL, + obs2_lats = NULL, obs2_lons = NULL, nanalogs = 3, fun_analog = NULL, + lat_dim = "lat", lon_dim = "lon", sdate_dim = "sdate", time_dim = "time", + member_dim = "member", region = NULL, return_indices = FALSE, + loocv_window = TRUE, ncores = NULL) { + #----------------------------------- + # Checkings + #----------------------------------- + if (!inherits(grid_exp, 'character')) { + stop("Parameter 'grid_exp' must be of class 'character'. It can be either a path ", + "to another NetCDF file which to read the target grid from (a single grid must be ", + "defined in such file) or a character vector indicating the coarse grid to ", + "be passed to CDO, and it must be a grid recognised by CDO or a NetCDF file.") + } + + if (!inherits(nanalogs, 'numeric')) { + stop("Parameter 'nanalogs' must be of the class 'numeric'") + } + + if (!inherits(lat_dim, 'character')) { + stop("Parameter 'lat_dim' must be of the class 'character'") + } + + if (!inherits(lon_dim, 'character')) { + stop("Parameter 'lon_dim' must be of the class 'character'") + } + + if (!inherits(sdate_dim, 'character')) { + stop("Parameter 'sdate_dim' must be of the class 'character'") + } + + if (!inherits(time_dim, 'character')) { + stop("Parameter 'time_dim' must be of the class 'character'") + } + + # Do not allow synonims for lat (latitude), lon (longitude) and time (sdate) dimension names + if (is.na(match(lon_dim, names(dim(exp)))) | is.na(match(lon_dim, names(dim(obs))))) { + stop("Missing longitude dimension in 'exp' and/or 'obs', or does not match the parameter ", + "'lon_dim'") + } + + if (is.na(match(lat_dim, names(dim(exp)))) | is.na(match(lat_dim, names(dim(obs))))) { + stop("Missing latitude dimension in 'exp' and/or 'obs', or does not match the parameter ", + "'lat_dim'") + } + + if (is.na(match(sdate_dim, names(dim(exp)))) | is.na(match(sdate_dim, names(dim(obs))))) { + stop("Missing start date dimension in 'exp' and/or 'obs', or does not match the parameter ", + "'sdate_dim'") + } + + if (is.na(match(time_dim, names(dim(exp)))) | is.na(match(time_dim, names(dim(obs))))) { + stop("Missing time dimension in 'exp' and/or 'obs', or does not match the parameter ", + "'time_dim'") + } + + # Ensure we have enough data to interpolate from high-res to coarse grid + #if ((obs_lats[1] > exp_lats[1]) | (obs_lats[length(obs_lats)] < exp_lats[length(exp_lats)]) | + # (obs_lons[1] > exp_lons[1]) | (obs_lons[length(obs_lons)] < exp_lons[length(exp_lons)])) { + + # stop("There are not enough data in 'obs'. Please to add more latitudes or ", + # "longitudes.") + #} + + # the code is not yet prepared to handle members in the observations + restore_ens <- FALSE + if (member_dim %in% names(dim(obs))) { + if (identical(as.numeric(dim(obs)[member_dim]), 1)) { + restore_ens <- TRUE + obs <- ClimProjDiags::Subset(x = obs, along = member_dim, indices = 1, drop = 'selected') + } else { + stop("Not implemented for observations with members ('obs' can have 'member_dim', ", + "but it should be of length = 1).") + } + } + + if (!is.null(obs2)) { + # the code is not yet prepared to handle members in the observations + if (member_dim %in% names(dim(obs2))) { + if (identical(as.numeric(dim(obs2)[member_dim]), 1)) { + obs2 <- ClimProjDiags::Subset(x = obs2, along = member_dim, indices = 1, drop = 'selected') + } else { + stop("Not implemented for observations with members ('obs2' can have 'member_dim', ", + "but it should be of length = 1).") + } + } + + if (is.null(obs2_lats) | is.null(obs2_lons)) { + stop("Missing latitudes and/or longitudes for the provided training observations. Please ", + "provide them with the parametres 'obs2_lats' and 'obs2_lons'") + } + + if (is.na(match(lon_dim, names(dim(obs2))))) { + stop("Missing longitude dimension in 'obs2', or does not match the parameter 'lon_dim'") + } + + if (is.na(match(lat_dim, names(dim(obs2))))) { + stop("Missing latitude dimension in 'obs2', or does not match the parameter 'lat_dim'") + } + + if (is.na(match(sdate_dim, names(dim(obs2))))) { + stop("Missing start date dimension in 'obs2', or does not match the parameter 'sdate_dim'") + } + + if (is.na(match(time_dim, names(dim(obs2))))) { + stop("Missing time dimension in 'obs2', or does not match the parameter 'time_dim'") + } + } + ## ncores + if (!is.null(ncores)) { + if (!is.numeric(ncores) | any(ncores %% 1 != 0) | any(ncores < 0) | + length(ncores) > 1) { + stop("Parameter 'ncores' must be a positive integer.") + } + } + + # Select a function to apply to the analogs selected for a given observation + if (!is.null(fun_analog)) { + stopifnot(fun_analog %in% c("mean", "wmean", "max", "min", "median")) + } + + if (!is.null(obs2)) { + obs_train <- obs2 + obs_train_lats <- obs2_lats + obs_train_lons <- obs2_lons + } else { + obs_train <- obs + obs_train_lats <- obs_lats + obs_train_lons <- obs_lons + } + + # Correct indices later if cross-validation + loocv_correction <- FALSE + if ( !("window" %in% names(dim(obs_train))) & loocv_window) { + loocv_correction <- TRUE + } + + #----------------------------------- + # Interpolate high-res observations to the coarse grid + #----------------------------------- + if (is.null(region)) { + warning("The borders of the downscaling region have not been provided. Assuming the four borders of the ", + "downscaling region are defined by the first and last elements of the parametres 'exp_lats' and ", + "'exp_lons'.") + region <- c(exp_lons[1], exp_lons[length(exp_lons)], exp_lats[1], exp_lats[length(exp_lats)]) + } + + obs_interpolated <- Interpolation(exp = obs_train, lats = obs_train_lats, lons = obs_train_lons, + target_grid = grid_exp, lat_dim = lat_dim, lon_dim = lon_dim, + method_remap = "conservative", region = region, ncores = ncores) + # If after interpolating 'obs' data the coordinates do not match, the exp data is interpolated to + # the same grid to force the matching + if (!.check_coords(lat1 = as.numeric(obs_interpolated$lat), lat2 = exp_lats, lon1 = as.numeric(obs_interpolated$lon), lon2 = exp_lons)) { + exp_interpolated <- Interpolation(exp = exp, lats = exp_lats, lons = exp_lons, target_grid = grid_exp, + lat_dim = lat_dim, lon_dim = lon_dim, method_remap = "conservative", + region = region, ncores = ncores)$data + } else { + exp_interpolated <- exp + } + + # Create window if user does not have it in the training observations + if ( !("window" %in% names(dim(obs_interpolated$data))) ) { + obs_train_interpolated <- .generate_window(obj = obs_interpolated$data, sdate_dim = sdate_dim, + time_dim = time_dim, loocv = loocv_window, ncores = ncores) + obs_hres <- .generate_window(obj = obs, sdate_dim = sdate_dim, time_dim = time_dim, loocv = loocv_window, ncores = ncores) + } else { + obs_train_interpolated <- obs_interpolated$data + dim(obs_train_interpolated) <- dim(obs_train_interpolated)[-which(names(dim(obs_train_interpolated))=="time")] + obs_hres <- obs + dim(obs_hres) <- dim(obs_hres)[-which(names(dim(obs_hres))=="time")] + } + + #----------------------------------- + # Reshape train and test + #----------------------------------- + res.data <- Apply(list(obs_train_interpolated, exp_interpolated, obs_hres), + target_dims = list(c("window", lat_dim, lon_dim), c(lat_dim, lon_dim), + c("window", lat_dim, lon_dim)), + fun = function(tr, te, ob) .analogs(train = tr, test = te, obs_hres = ob, k = nanalogs, + fun_analog = fun_analog), ncores = ncores)$output1 + + # Return the indices of the best analogs + if (return_indices) { + res.ind <- Apply(list(obs_train_interpolated, exp_interpolated, obs_hres), + target_dims = list(c("window", lat_dim, lon_dim), c(lat_dim, lon_dim), + c("window", lat_dim, lon_dim)), + fun = function(tr, te, ob) .analogs(train = tr, test = te, obs_hres = ob, k = nanalogs, + fun_analog = fun_analog, return_indices = TRUE), ncores = ncores, output_dims = 'ind')$output1 + + # If cross-validation has been applied, correct the indices + if (loocv_correction) { + nsdates <- dim(res.ind)[names(dim(res.ind)) == sdate_dim] + ntimes <- dim(res.ind)[names(dim(res.ind)) == time_dim] + res.ind <- Apply(res.ind, target_dims = c("ind", sdate_dim), function(x) + sapply(1:nsdates, function(s) seq(ntimes * nsdates)[ - (ntimes * (s - 1) + 1:ntimes)][x[, s]]), + output_dims = c("ind", sdate_dim), ncores = ncores)$output1 + } + + # restore ensemble dimension in observations if it existed originally + if (restore_ens) { + obs <- s2dv::InsertDim(obs, posdim = 1, lendim = 1, name = member_dim) + } + + res <- list(data = res.data, ind = res.ind, obs = obs, lon = obs_lons, lat = obs_lats) + } + else { + # restore ensemble dimension in observations if it existed originally + if (restore_ens) { + obs <- s2dv::InsertDim(obs, posdim = 1, lendim = 1, name = member_dim) + } + + res <- list(data = res.data, obs = obs, lon = obs_lons, lat = obs_lats) + } + + return(res) +} + +# For each element in test, find the indices of the k nearest neigbhors in train +.analogs <- function(train, test, obs_hres, k, fun_analog, return_indices = FALSE) { + + require(FNN) + + # train and obs_hres dim: 3 dimensions window, lat and lon (in this order) + # test dim: 2 dimensions lat and lon (in this order) + # Number of lats/lons of the high-resolution data + space_dims_hres <- dim(obs_hres)[c(2,3)] + + # Reformat train and test as an array with (time, points) + train <- apply(train, 1, as.vector); names(dim(train))[1] <- "space" + test <- as.vector(test) + obs_hres <- apply(obs_hres, 1, as.vector); names(dim(obs_hres))[1] <- "space" + + # Identify and remove NA's + idx_na_tr <- is.na(train[ , 1]) + idx_na_te <- is.na(test) + idx_na <- idx_na_tr | idx_na_te + tr_wo_na <- t(train[!idx_na , ]) + te_wo_na <- test[!idx_na] + te_wo_na <- InsertDim(data = te_wo_na, posdim = 1, lendim = 1, name = "time") + + knn.ind <- get.knnx(tr_wo_na, te_wo_na, k) + + dist <- knn.ind$nn.dist + idx <- knn.ind$nn.index + + # Either return only the indices or the analogs + if (return_indices) { + res <- as.numeric(idx) + } else { + res <- obs_hres[ , idx] + dim(res) <- c(space_dims_hres, analogs = k) + + if (!is.null(fun_analog)) { + if (fun_analog == "wmean") { + weight <- 1 / dist + res <- apply(res, c(1,2), function(x) weighted.mean(x, weight)) + } else if (fun_analog == "min") { + res<-res[,,which.min(dist)] + } else if (fun_analog == "max") { + res<-res[,,which.max(dist)] + } else { + res <- apply(res, c(1,2), fun_analog) + } + } + } + + return(res) +} + + +# Add the dimension window to an array that contains, at least, the start date and time +# dimensions +# object has at least dimensions sdate and time +.generate_window <- function(obj, sdate_dim, time_dim, loocv, size = NULL, ncores = NULL) { + + rsdates <- 1:dim(obj)[names(dim(obj)) == sdate_dim] + ntimes <- dim(obj)[names(dim(obj)) == time_dim] + rtimes <- 1:dim(obj)[names(dim(obj)) == time_dim] + + # Generate a window containing all the data + if (is.null(size)) { + + # Generate window removing one start date each time (leave-one-out cross-validation) + if (loocv) { + obj_window <- Apply(obj, target_dims = c(time_dim, sdate_dim), + fun = function(x) sapply(rsdates, function(s) as.vector(x[ rtimes, -s])), + output_dims = c('window', sdate_dim), ncores = ncores)$output1 + # Generate window without cross-validation + } else { + obj_window <- Apply(obj, target_dims = c(time_dim, sdate_dim), + fun = as.vector, output_dims = 'window', ncores = ncores)$output1 + } + } + # Generate window of the size specified by the user. Only applied with CV + else { + # For an accurate generation of the window, it is mandatory to add some "extra" data. + if (!("smonth" %in% names(dim(obj)))) { + stop("Missing 'smonth' dimension") + } + + # Concatenate data from previous, target and posterior months + obj_new <- Apply(obj, target_dims = list(c("time", "smonth")), + fun = as.vector, output_dims = "time", ncores = ncores )$output1 + + if (loocv) { + obj_window <- Apply(list(obj_new, rsdates), target_dims = list(c(time_dim, sdate_dim), NULL), + fun = function(x, s) as.vector(x[(ntimes + min(rtimes) - size):(ntimes + max(rtimes) + size), -s]), + output_dims = 'window', ncores = ncores)$output1 + names(dim(obj_window))[(length(names(dim(obj_window))) - 1):length(names(dim(obj_window)))] <- c(time_dim, sdate_dim) + } else { + obj_window <- Apply(obj_new, target_dims = c(time_dim, sdate_dim), + fun = function(x) sapply(rtimes, function(t) as.vector(x[(ntimes + min(rtimes) - size):(ntimes + max(rtimes) + size), ])), + output_dims = c('window', time_dim), ncores = ncores)$output1 + + } + } + + return(obj_window) +} diff --git a/modules/Downscaling/tmp/Intbc.R b/modules/Downscaling/tmp/Intbc.R new file mode 100644 index 00000000..dc5d050b --- /dev/null +++ b/modules/Downscaling/tmp/Intbc.R @@ -0,0 +1,339 @@ +#'@rdname CST_Intbc +#'@title Downscaling using interpolation and bias adjustment. +#' +#'@author J. Ramon, \email{jaume.ramon@bsc.es} +#' +#'@description This function performs a downscaling using an interpolation and a later bias +#'adjustment. It is recommended that the observations are passed already in the target grid. +#'Otherwise, the function will also perform an interpolation of the observed field into the +#'target grid. The coarse scale and observation data can be either global or regional. In the +#'latter case, the region is defined by the user. In principle, the coarse and observation data +#'are intended to be of the same variable, although different variables can also be admitted. +#' +#'@param exp an 's2dv object' containing the experimental field on the +#'coarse scale for which the downscaling is aimed. The object must have, at least, +#'the dimensions latitude, longitude, start date and member. The object is expected to be +#'already subset for the desired region. Data can be in one or two integrated regions, e.g., +#'crossing the Greenwich meridian. To get the correct results in the latter case, +#'the borders of the region should be specified in the parameter 'region'. See parameter +#''region'. +#'@param obs an 's2dv object' containing the observational field. The object +#'must have, at least, the dimensions latitude, longitude and start date. The object is +#'expected to be already subset for the desired region. +#'@param target_grid a character vector indicating the target grid to be passed to CDO. +#'It must be a grid recognised by CDO or a NetCDF file. +#'@param bc_method a character vector indicating the bias adjustment method to be applied after +#'the interpolation. Accepted methods are 'quantile_mapping', 'dynamical_bias', 'bias', 'evmos', +#''mse_min', 'crps_min', 'rpc-based'. The abbreviations 'dbc','qm' can also be used. +#'@param int_method a character vector indicating the regridding method to be passed to CDORemap. +#'Accepted methods are "con", "bil", "bic", "nn", "con2". If "nn" method is to be used, CDO_1.9.8 +#'or newer version is required. +#'@param points a list of two elements containing the point latitudes and longitudes +#'of the locations to downscale the model data. The list must contain the two elements +#'named as indicated in the parameters 'lat_dim' and 'lon_dim'. If the downscaling is +#'to a point location, only regular grids are allowed for exp and obs. Only needed if the +#'downscaling is to a point location. +#'@param method_point_interp a character vector indicating the interpolation method to interpolate +#'model gridded data into the point locations. Accepted methods are "nearest", "bilinear", "9point", +#'"invdist4nn", "NE", "NW", "SE", "SW". Only needed if the downscaling is to a point location. +#'@param lat_dim a character vector indicating the latitude dimension name in the element 'data' +#'in exp and obs. Default set to "lat". +#'@param lon_dim a character vector indicating the longitude dimension name in the element 'data' +#'in exp and obs. Default set to "lon". +#'@param sdate_dim a character vector indicating the start date dimension name in the element +#''data' in exp and obs. Default set to "sdate". +#'@param member_dim a character vector indicating the member dimension name in the element +#''data' in exp and obs. Default set to "member". +#'@param region a numeric vector indicating the borders of the region defined in obs. +#'It consists of four elements in this order: lonmin, lonmax, latmin, latmax. lonmin refers +#'to the left border, while lonmax refers to the right border. latmin indicates the lower +#'border, whereas latmax indicates the upper border. If set to NULL (default), the function +#'takes the first and last elements of the latitudes and longitudes. +#'@param ncores an integer indicating the number of cores to use in parallel computation. +#'The default value is NULL. +#'@return An 's2dv' object. The element 'data' contains the dowscaled field, 'lat' the +#'downscaled latitudes, and 'lon' the downscaled longitudes. +#'@examples +#'exp <- rnorm(500) +#'dim(exp) <- c(member = 5, lat = 4, lon = 5, sdate = 5) +#'exp_lons <- 1:5 +#'exp_lats <- 1:4 +#'obs <- rnorm(900) +#'dim(obs) <- c(lat = 12, lon = 15, sdate = 5) +#'obs_lons <- seq(1,5, 4/14) +#'obs_lats <- seq(1,4, 3/11) +#'exp <- s2dv_cube(data = exp, lat = exp_lats, lon = exp_lons) +#'obs <- s2dv_cube(data = obs, lat = obs_lats, lon = obs_lons) +#'res <- CST_Intbc(exp = exp, obs = obs, target_grid = 'r1280x640', bc_method = 'simple_bias', int_method = 'conservative') +#'@export + +CST_Intbc <- function(exp, obs, target_grid, bc_method, int_method = NULL, points = NULL, + method_point_interp = NULL, lat_dim = "lat", lon_dim = "lon", + sdate_dim = "sdate", member_dim = "member", region = NULL, ncores = NULL, ...) +{ + if (!inherits(exp,'s2dv_cube')) { + stop("Parameter 'exp' must be of the class 's2dv_cube'") + } + + if (!inherits(obs,'s2dv_cube')) { + stop("Parameter 'obs' must be of the class 's2dv_cube'") + } + + res <- Intbc(exp = exp$data, obs = obs$data, exp_lats = exp$coords[[lat_dim]], exp_lons = exp$coords[[lon_dim]], + obs_lats = obs$coords[[lat_dim]], obs_lons = obs$coords[[lon_dim]], target_grid = target_grid, + int_method = int_method, bc_method = bc_method, points = points, + source_file_exp = exp$attrs$source_files[1], source_file_obs = obs$attrs$source_files[1], + method_point_interp = method_point_interp, lat_dim = lat_dim, lon_dim = lon_dim, + sdate_dim = sdate_dim, member_dim = member_dim, region = region, ncores = ncores, ...) + + # Modify data, lat and lon in the origina s2dv_cube, adding the downscaled data + exp$data <- res$data + exp$dims <- dim(exp$data) + exp$coords[[lon_dim]] <- res$lon + exp$coords[[lat_dim]] <- res$lat + + obs$data <- res$obs + obs$dims <- dim(obs$data) + obs$coords[[lon_dim]] <- res$lon + obs$coords[[lat_dim]] <- res$lat + + res_s2dv <- list(exp = exp, obs = obs) + return(res_s2dv) + +} + +#'@rdname Intbc +#'@title Downscaling using interpolation and bias adjustment. +#' +#'@author J. Ramon, \email{jaume.ramon@bsc.es} +#' +#'@description This function performs a downscaling using an interpolation and a later bias +#'adjustment. It is recommended that the observations are passed already in the target grid. +#'Otherwise, the function will also perform an interpolation of the observed field into the +#'target grid. The coarse scale and observation data can be either global or regional. In the +#'latter case, the region is defined by the user. In principle, the coarse and observation data +#'are intended to be of the same variable, although different variables can also be admitted. +#' +#'@param exp an array with named dimensions containing the experimental field on the +#'coarse scale for which the downscaling is aimed. The object must have, at least, +#'the dimensions latitude, longitude, start date and member. The object is expected to be +#'already subset for the desired region. Data can be in one or two integrated regions, e.g., +#'crossing the Greenwich meridian. To get the correct results in the latter case, +#'the borders of the region should be specified in the parameter 'region'. See parameter +#''region'. +#'@param obs an array with named dimensions containing the observational field. The object +#'must have, at least, the dimensions latitude, longitude and start date. The object is +#'expected to be already subset for the desired region. +#'@param exp_lats a numeric vector containing the latitude values in 'exp'. Latitudes must +#'range from -90 to 90. +#'@param exp_lons a numeric vector containing the longitude values in 'exp'. Longitudes +#'can range from -180 to 180 or from 0 to 360. +#'@param obs_lats a numeric vector containing the latitude values in 'obs'. Latitudes must +#'range from -90 to 90. +#'@param obs_lons a numeric vector containing the longitude values in 'obs'. Longitudes +#'can range from -180 to 180 or from 0 to 360. +#'@param target_grid a character vector indicating the target grid to be passed to CDO. +#'It must be a grid recognised by CDO or a NetCDF file. +#'@param bc_method a character vector indicating the bias adjustment method to be applied after +#'the interpolation. Accepted methods are 'quantile_mapping', 'dynamical_bias', 'bias', 'evmos', +#''mse_min', 'crps_min', 'rpc-based'. The abbreviations 'dbc','qm' can also be used. +#'@param int_method a character vector indicating the regridding method to be passed to CDORemap. +#'Accepted methods are "con", "bil", "bic", "nn", "con2". If "nn" method is to be used, CDO_1.9.8 +#'or newer version is required. +#'@param points a list of two elements containing the point latitudes and longitudes +#'of the locations to downscale the model data. The list must contain the two elements +#'named as indicated in the parameters 'lat_dim' and 'lon_dim'. If the downscaling is +#'to a point location, only regular grids are allowed for exp and obs. Only needed if the +#'downscaling is to a point location. +#'@param method_point_interp a character vector indicating the interpolation method to interpolate +#'model gridded data into the point locations. Accepted methods are "nearest", "bilinear", "9point", +#'"invdist4nn", "NE", "NW", "SE", "SW". Only needed if the downscaling is to a point location. +#'@param lat_dim a character vector indicating the latitude dimension name in the element 'data' +#'in exp and obs. Default set to "lat". +#'@param lon_dim a character vector indicating the longitude dimension name in the element 'data' +#'in exp and obs. Default set to "lon". +#'@param sdate_dim a character vector indicating the start date dimension name in the element +#''data' in exp and obs. Default set to "sdate". +#'@param member_dim a character vector indicating the member dimension name in the element +#''data' in exp and obs. Default set to "member". +#'@param source_file_exp a character vector with a path to an example file of the exp data. +#'Only needed if the downscaling is to a point location. +#'@param source_file_obs a character vector with a path to an example file of the obs data. +#'Only needed if the downscaling is to a point location. +#'@param region a numeric vector indicating the borders of the region defined in obs. +#'It consists of four elements in this order: lonmin, lonmax, latmin, latmax. lonmin refers +#'to the left border, while lonmax refers to the right border. latmin indicates the lower +#'border, whereas latmax indicates the upper border. If set to NULL (default), the function +#'takes the first and last elements of the latitudes and longitudes. +#'@param ncores an integer indicating the number of cores to use in parallel computation. +#'The default value is NULL. +#'@import CSTools +#' +#'@seealso \code{\link[CSTools]{BiasCorrection}} +#'@seealso \code{\link[CSTools]{Calibration}} +#'@seealso \code{\link[CSTools]{QuantileMapping}} +#' +#'@return An list of three elements. 'data' contains the dowscaled field, 'lat' the +#'downscaled latitudes, and 'lon' the downscaled longitudes. +#'@examples +#'exp <- rnorm(500) +#'dim(exp) <- c(member = 5, lat = 4, lon = 5, sdate = 5) +#'exp_lons <- 1:5 +#'exp_lats <- 1:4 +#'obs <- rnorm(900) +#'dim(obs) <- c(lat = 12, lon = 15, sdate = 5) +#'obs_lons <- seq(1,5, 4/14) +#'obs_lats <- seq(1,4, 3/11) +#'res <- Intbc(exp = exp, obs = obs, exp_lats = exp_lats, exp_lons = exp_lons, obs_lats = obs_lats, +#'obs_lons = obs_lons, target_grid = 'r1280x640', bc_method = 'simple_bias', int_method = 'conservative') +#'@export +Intbc <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, target_grid, bc_method, int_method = NULL, + points = NULL, method_point_interp = NULL, lat_dim = "lat", lon_dim = "lon", sdate_dim = "sdate", + time_dim = "time", member_dim = "member", source_file_exp = NULL, source_file_obs = NULL, + region = NULL, ncores = NULL, ...) { + + if (!inherits(bc_method, 'character')) { + stop("Parameter 'bc_method' must be of the class 'character'") + } + + if (!inherits(lat_dim, 'character')) { + stop("Parameter 'lat_dim' must be of the class 'character'") + } + + if (!inherits(lon_dim, 'character')) { + stop("Parameter 'lon_dim' must be of the class 'character'") + } + + if (!inherits(sdate_dim, 'character')) { + stop("Parameter 'sdate_dim' must be of the class 'character'") + } + + if (!inherits(member_dim, 'character')) { + stop("Parameter 'member_dim' must be of the class 'character'") + } + + if (is.na(match(lon_dim, names(dim(exp))))) { + stop("Missing longitude dimension in 'exp', or does not match the parameter ", + "'lon_dim'") + } + + if (is.na(match(lat_dim, names(dim(exp))))) { + stop("Missing latitude dimension in 'exp', or does not match the parameter ", + "'lat_dim'") + } + + if (is.na(match(sdate_dim, names(dim(exp)))) | is.na(match(sdate_dim, names(dim(obs))))) { + stop("Missing start date dimension in 'exp' and/or 'obs', or does not match the parameter ", + "'sdate_dim'") + } + + if (is.na(match(member_dim, names(dim(exp))))) { + stop("Missing member dimension in 'exp', or does not match the parameter 'member_dim'") + } + + if (!(bc_method %in% c('qm', 'dbc', 'quantile_mapping', 'dynamical_bias', 'bias', 'evmos', 'mse_min', + 'crps_min', 'rpc-based'))) { + stop("Parameter 'bc_method' must be a character vector indicating the bias adjustment method. ", + "Accepted methods are 'quantile_mapping', 'dynamical_bias', 'bias', 'evmos', 'mse_min', ", + "'crps_min', 'rpc-based'. The abbreviations 'dbc','qm' can also be used.") + } + + # When observations are pointwise + if (!is.null(points) & !is.na(match("location", names(dim(obs))))) { + point_obs <- T + # dimension aux in obs is needed + if (is.na(match("aux", names(dim(obs))))) { + obs <- InsertDim(obs, posdim = 1, lendim = 1, name = "aux") + } + } else { + point_obs <- F + } + + if (!is.null(points) & (is.null(source_file_exp))) { + stop("No source file found. Source file must be provided in the parameter 'source_file_exp'.") + } + + if (!is.null(points) & is.null(method_point_interp)) { + stop("Please provide the interpolation method to interpolate gridded data to point locations ", + "through the parameter 'method_point_interp'.") + } + + if (is.null(region)) { + warning("The borders of the downscaling region have not been provided. Assuming the four borders ", + "of the downscaling region are defined by the first and last elements of the parametres ", + "'obs_lats' and 'obs_lons'.") + region <- c(obs_lons[1], obs_lons[length(obs_lons)], obs_lats[1], obs_lats[length(obs_lats)]) + } + ## ncores + if (!is.null(ncores)) { + if (!is.numeric(ncores) | any(ncores %% 1 != 0) | any(ncores < 0) | + length(ncores) > 1) { + stop("Parameter 'ncores' must be a positive integer.") + } + } + + exp_interpolated <- Interpolation(exp = exp, lats = exp_lats, lons = exp_lons, target_grid = target_grid, + method_remap = int_method, points = points, source_file = source_file_exp, + lat_dim = lat_dim, lon_dim = lon_dim, method_point_interp = method_point_interp, + region = region, ncores = ncores) + + # If after interpolating 'exp' data the coordinates do not match, the obs data is interpolated to + # the same grid to force the matching + if ((!.check_coords(lat1 = exp_interpolated$lat, lat2 = obs_lats, + lon1 = exp_interpolated$lon, lon2 = obs_lons)) | !(point_obs)) { + obs_interpolated <- Interpolation(exp = obs, lats = obs_lats, lons = obs_lons, target_grid = target_grid, + method_remap = int_method, points = points, source_file = source_file_obs, + lat_dim = lat_dim, lon_dim = lon_dim, method_point_interp = method_point_interp, + region = region, ncores = ncores) + obs_ref <- obs_interpolated$data + } else { + obs_ref <- obs + } + + # Some functions only accept the dimension names "member" and "sdate" for exp and + # "sdate" for obs + #if (member_dim != 'member') { + # names(dim(exp_interpolated$data)) <- replace(names(dim(exp_interpolated$data)), + # which(names(dim(exp_interpolated$data)) == member_dim), 'member') + #} + + #if (sdate_dim != 'sdate') { + # names(dim(exp_interpolated$data)) <- replace(names(dim(exp_interpolated$data)), + # which(names(dim(exp_interpolated$data)) == sdate_dim), 'sdate') + # names(dim(obs_ref)) <- replace(names(dim(obs_ref)), + # which(names(dim(obs_ref)) == sdate_dim), 'sdate') + #} + + if (bc_method == 'qm' | bc_method == 'quantile_mapping') { + + res <- QuantileMapping(exp = exp_interpolated$data, obs = obs_ref, na.rm = TRUE, + memb_dim = member_dim, sdate_dim = sdate_dim, ncores = ncores, ...) + } + else if (bc_method == 'dbc' | bc_method == 'dynamical_bias') { + # the temporal dimension must be only one dimension called "time" + if (all(c(time_dim, sdate_dim) %in% names(dim(exp_interpolated$data)))) { + exp_interpolated$data <- Apply(exp_interpolated$data, target_dims = c(time_dim, sdate_dim), + fun = as.vector, output_dims = "time", ncores = ncores)$output1 + } + if (all(c(time_dim, sdate_dim) %in% names(dim(obs_ref)))) { + obs_ref <- Apply(obs_ref, target_dims = c(time_dim, sdate_dim), fun = as.vector, + output_dims = "time", ncores = ncores)$output1 + } + # REMEMBER to add na.rm = T in colMeans in .proxiesattractor + res <- DynBiasCorrection(exp = exp_interpolated$data, obs = obs_ref, ncores = ncores, ...) + } else { + if (dim(exp_interpolated$data)[member_dim] == 1) { + stop('Calibration must not be used with only one ensemble member.') + } + if (dim(obs_ref)[sdate_dim] == 1) { + warning('Simple Bias Correction should not be used with only one observation. Returning NA.') + } + res <- Calibration(exp = exp_interpolated$data, obs = obs_ref, memb_dim = member_dim, + sdate_dim = sdate_dim, ncores = ncores, cal.method = bc_method) + } + + # Return a list of three elements + res <- list(data = res, obs = obs_ref, lon = exp_interpolated$lon, lat = exp_interpolated$lat) + + return(res) +} diff --git a/modules/Downscaling/tmp/Interpolation.R b/modules/Downscaling/tmp/Interpolation.R new file mode 100644 index 00000000..ed79f4fd --- /dev/null +++ b/modules/Downscaling/tmp/Interpolation.R @@ -0,0 +1,767 @@ +#'@rdname CST_Interpolation +#'@title Regrid or interpolate gridded data to a point location. +#' +#'@author J. Ramon, \email{jaume.ramon@bsc.es} +#' +#'@description This function interpolates gridded model data from one grid to +#'another (regrid) or interpolates gridded model data to a set of point locations. +#'The gridded model data can be either global or regional. In the latter case, the +#'region is defined by the user. It does not have constrains of specific region or +#'variables to downscale. +#'@param exp s2dv object containing the experimental field on the +#'coarse scale for which the downscaling is aimed. The object must have, at least, +#'the dimensions latitude and longitude. The field data is expected to be already subset +#'for the desired region. Data can be in one or two integrated regions, e.g., +#'crossing the Greenwich meridian. To get the correct results in the latter case, +#'the borders of the region should be specified in the parameter 'region'. See parameter +#''region'. +#'@param points a list of two elements containing the point latitudes and longitudes +#'of the locations to downscale the model data. The list must contain the two elements +#'named as indicated in the parameters 'lat_dim' and 'lon_dim'. If the downscaling is +#'to a point location, only regular grids are allowed for exp and obs. Only needed if the +#'downscaling is to a point location. +#'@param method_remap a character vector indicating the regridding method to be passed +#'to CDORemap. Accepted methods are "con", "bil", "bic", "nn", "con2". If "nn" method is +#'to be used, CDO_1.9.8 or newer version is required. +#'@param target_grid a character vector indicating the target grid to be passed to CDO. +#'It must be a grid recognised by CDO or a NetCDF file. +#'@param lat_dim a character vector indicating the latitude dimension name in the element +#''exp' and/or 'points'. Default set to "lat". +#'@param lon_dim a character vector indicating the longitude dimension name in the element +#''exp' and/or 'points'. Default set to "lon". +#'@param region a numeric vector indicating the borders of the region defined in exp. +#'It consists of four elements in this order: lonmin, lonmax, latmin, latmax. lonmin refers +#'to the left border, while lonmax refers to the right border. latmin indicates the lower +#'border, whereas latmax indicates the upper border. If set to NULL (default), the function +#'takes the first and last elements of the latitudes and longitudes. +#'@param method_point_interp a character vector indicating the interpolation method to +#'interpolate model gridded data into the point locations. Accepted methods are "nearest", +#'"bilinear", "9point", "invdist4nn", "NE", "NW", "SE", "SW". +#'@param ncores an integer indicating the number of cores to use in parallel computation. +#'The default value is NULL. +#'@seealso \code{\link[s2dverification]{CDORemap}} +#' +#'@return An s2dv object containing the dowscaled field. +#' +#'@examples +#'exp <- rnorm(500) +#'dim(exp) <- c(member = 5, lat = 4, lon = 5, sdate = 5, time = 1) +#'lons <- 1:5 +#'lats <- 1:4 +#'exp <- s2dv_cube(data = exp, lat = lats, lon = lons) +#'res <- CST_Interpolation(exp = exp, method_remap = 'conservative', target_grid = 'r1280x640') +#'@export +CST_Interpolation <- function(exp, points = NULL, method_remap = NULL, target_grid = NULL, + lat_dim = "lat", lon_dim = "lon", region = NULL, + method_point_interp = NULL, ncores = NULL) +{ + if (!inherits(exp,'s2dv_cube')) { + stop("Parameter 'exp' must be of the class 's2dv_cube'") + } + + #if (is.null(exp[[lat_dim]]) | is.null(exp[[lon_dim]])) { + # stop("The name of the latitude/longitude elements in 'exp' must match the parametres ", + # "'lat_dim' and 'lon_dim'") + #} + + if ((length(which(names(dim(exp$data)) == lat_dim)) == 0) | (length(which(names(dim(exp$data)) == lon_dim)) == 0)) { + stop("The name of the latitude/longitude dimensions in 'exp$data' must match the parametres 'lat_dim' and 'lon_dim'") + } + + res <- Interpolation(exp = exp$data, lats = exp$coords[[lat_dim]], lons = exp$coords[[lon_dim]], + source_file = exp$attrs$source_files[1], points = points, + method_remap = method_remap, target_grid = target_grid, lat_dim = lat_dim, + lon_dim = lon_dim, region = region, method_point_interp = method_point_interp, ncores = ncores) + + # Modify data, lat and lon in the origina s2dv_cube, adding the downscaled data + exp$data <- res$data + exp$dims <- dim(exp$data) + exp$coords[[lon_dim]] <- res$lon + exp$coords[[lat_dim]] <- res$lat + + res_s2dv <- list(exp = exp, obs = NULL) + return(res_s2dv) +} + +#'@rdname Interpolation +#'@title Regrid or interpolate gridded data to a point location. +#' +#'@author J. Ramon, \email{jaume.ramon@bsc.es} +#'@author Ll. Lledó, \email{llorenc.lledo@ecmwf.int} +#' +#'@description This function interpolates gridded model data from one grid to +#'another (regrid) or interpolates gridded model data to a set of point locations. +#'The gridded model data can be either global or regional. In the latter case, the +#'region is defined by the user. It does not have constrains of specific region or +#'variables to downscale. +#'@param exp an array with named dimensions containing the experimental field on the +#'coarse scale for which the downscaling is aimed. The object must have, at least, +#'the dimensions latitude and longitude. The object is expected to be already subset +#'for the desired region. Data can be in one or two integrated regions, e.g., +#'crossing the Greenwich meridian. To get the correct results in the latter case, +#'the borders of the region should be specified in the parameter 'region'. See parameter +#''region'. +#'@param lats a numeric vector containing the latitude values. Latitudes must range from +#'-90 to 90. +#'@param lons a numeric vector containing the longitude values. Longitudes can range from +#'-180 to 180 or from 0 to 360. +#'@param points a list of two elements containing the point latitudes and longitudes +#'of the locations to downscale the model data. The list must contain the two elements +#'named as indicated in the parameters 'lat_dim' and 'lon_dim'. If the downscaling is +#'to a point location, only regular grids are allowed for exp and obs. Only needed if the +#'downscaling is to a point location. +#'@param source_file a character vector with a path to an example file of the exp data. +#'Only needed if the downscaling is to a point location. +#'@param method_remap a character vector indicating the regridding method to be passed +#'to CDORemap. Accepted methods are "con", "bil", "bic", "nn", "con2". If "nn" method is +#'to be used, CDO_1.9.8 or newer version is required. +#'@param target_grid a character vector indicating the target grid to be passed to CDO. +#'It must be a grid recognised by CDO or a NetCDF file. +#'@param lat_dim a character vector indicating the latitude dimension name in the element +#''exp' and/or 'points'. Default set to "lat". +#'@param lon_dim a character vector indicating the longitude dimension name in the element +#''exp' and/or 'points'. Default set to "lon". +#'@param region a numeric vector indicating the borders of the region defined in exp. +#'It consists of four elements in this order: lonmin, lonmax, latmin, latmax. lonmin refers +#'to the left border, while lonmax refers to the right border. latmin indicates the lower +#'border, whereas latmax indicates the upper border. If set to NULL (default), the function +#'takes the first and last elements of the latitudes and longitudes. +#'@param method_point_interp a character vector indicating the interpolation method to +#'interpolate model gridded data into the point locations. Accepted methods are "nearest", +#'"bilinear", "9point", "invdist4nn", "NE", "NW", "SE", "SW". Only needed if the downscaling +#'is to a point location. +#'@param ncores an integer indicating the number of cores to use in parallel computation. +#'The default value is NULL. +#'@import multiApply +#'@import plyr +#'@importFrom s2dv CDORemap +#' +#'@seealso \code{\link[s2dverification]{CDORemap}} +#' +#'@return An list of three elements. 'data' contains the dowscaled field, 'lat' the +#'downscaled latitudes, and 'lon' the downscaled longitudes. +#' +#'@examples +#'exp <- rnorm(500) +#'dim(exp) <- c(member = 5, lat = 4, lon = 5, sdate = 5, time = 1) +#'lons <- 1:5 +#'lats <- 1:4 +#'res <- Interpolation(exp = exp, lats = lats, lons = lons, method_remap = 'conservative', target_grid = 'r1280x640') +#'@export +Interpolation <- function(exp, lats, lons, points = NULL, source_file = NULL, method_remap = NULL, + target_grid = NULL, lat_dim = "lat", lon_dim = "lon", region = NULL, + method_point_interp = NULL, ncores = NULL) +{ + if (!is.null(method_remap)) { + if (!inherits(method_remap, 'character')) { + stop("Parameter 'method_remap' must be of the class 'character'") + } + } + + if (!is.null(method_point_interp)) { + if (!inherits(method_point_interp, 'character')) { + stop("Parameter 'method_point_interp' must be of the class 'character'") + } + } + + if (is.na(match(lon_dim, names(dim(exp))))) { + stop("Missing longitude dimension in 'exp', or does not match the parameter 'lon_dim'") + } + + if (is.na(match(lat_dim, names(dim(exp))))) { + stop("Missing latitude dimension in 'exp', or does not match the parameter 'lat_dim'") + } + + # Check for negative latitudes in the exp data + if (any(lats < -90 | lats > 90) ) { + stop("Out-of-range latitudes have been found. Latitudes must range from -90 to 90") + } + + # checkings for the case of interpolation to point locations + if (!is.null(points)) { + if (!inherits(points, 'list')) { + stop("Parameter 'points' must be a list of two elements containing the point ", + "latitudes and longitudes.") + } + + if (is.null(method_point_interp)) { + stop("Parameter 'method_point_interp' must be a character vector indicating the ", + "interpolation method. Accepted methods are nearest, bilinear, 9point, ", + "invdist4nn, NE, NW, SE, SW") + } + + if (!(method_point_interp %in% c('nearest', 'bilinear', '9point', 'invdist4nn', 'NE', 'NW', 'SE', 'SW'))) { + stop("Parameter 'method_point_interp' must be a character vector indicating the ", + "interpolation method. Accepted methods are nearest, bilinear, 9point, ", + "invdist4nn, NE, NW, SE, SW") + } + + # Points must be a list of two elements + if (length(points) != 2) { + stop("'points' must be a lis of two elements containing the point ", + "latitudes and longitudes in the form 'points$lat', 'points$lon'") + } + + # The names of the two elements must be 'lat' and 'lon' + if (any(!(c(lat_dim, lon_dim) %in% names(points)))) { + stop("The names of the elements in the list 'points' must coincide with the parametres ", + "'lat_dim' and 'lon_dim'") + } + + # Check that the number of latitudes and longitudes match + if (length(unique(lengths(points))) != 1L) { + stop("The number of latitudes and longitudes must match") + } + + # Check for negative latitudes in the point coordinates + if (any(points[[lat_dim]] < -90 | points[[lat_dim]] > 90) ) { + stop("Out-of-range latitudes have been found in 'points'. Latitudes must range from ", + "-90 to 90") + } + + if (is.null(source_file)) { + stop("No source file found. Source file must be provided in the parameter 'source_file'.") + } + } else { + if (is.null(method_remap)) { + stop("Parameter 'method_remap' must be a character vector indicating the ", + "interpolation method. Accepted methods are con, bil, bic, nn, con2") + } + + if (is.null(target_grid)) { + stop("Parameter 'target_grid' can be either a path ", + "to another NetCDF file which to read the target grid from (a single grid must be ", + "defined in such file) or a character vector indicating the coarse grid to ", + "be passed to CDO, and it must be a grid recognised by CDO or a NetCDF file.") + } + } + ## ncores + if (!is.null(ncores)) { + if (!is.numeric(ncores) | any(ncores %% 1 != 0) | any(ncores < 0) | + length(ncores) > 1) { + stop("Parameter 'ncores' must be a positive integer.") + } + } + + #---------------------------------- + # Limits of the region defined by the model data + #---------------------------------- + # for the case when region limits are not passed by the user + # regions contains the following elements in order: lonmin, lonmax, latmin, latmax + if (is.null(region)) { + warning("The borders of the downscaling region have not been provided. Assuming the four borders of the ", + "downscaling region are defined by the first and last elements of the parametres 'lats' and 'lons'.") + region <- c(lons[1], lons[length(lons)], lats[1], lats[length(lats)]) + } + + # Ensure points to be within the region limits + if (!is.null(points)) { + if (any(points[[lat_dim]] > region[4]) | any(points[[lat_dim]] < region[3]) | + any(points[[lon_dim]] > region[2]) | any(points[[lon_dim]] < region[1])) { + stop("At least one of the points lies outside the model region") + } + } + + #---------------------------------- + # Map regrid with CDO + #---------------------------------- + if (is.null(points)) { + + .KnownLonNames <- s2dv:::.KnownLonNames + .KnownLatNames <- s2dv:::.KnownLatNames + .warning <- s2dv:::.warning + + res <- CDORemap(data_array = exp, + lats = lats, + lons = lons, + grid = target_grid, + method = method_remap, + crop = region) + + # Return a list + res <- list(data = res$data_array, obs = NULL, lon = res$lons, lat = res$lats) + + #---------------------------------- + # Interpolate to point locations + #---------------------------------- + } else { + # First create interpolation weights, depending on the chosen method + weights <- .create_interp_weights(ncfile = source_file, locids = 1:unique(lengths(points)), + lats = points[[lat_dim]], lons = points[[lon_dim]], + method = method_point_interp, region = list(lat_min = region[3], + lat_max = region[4], lon_min = region[1], lon_max = region[2])) + + # Select coarse-scale data to be interpolated + model_data_gridpoints <- .get_model_data(weights.df = weights, mdata = exp, ncores = ncores) + + # Interpolate model data to point locations + res <- .interpolate_data(model_data_gridpoints, weights, ncores = ncores) + + # Return a list + res <- list(data = res, obs = NULL, lon = points[[lon_dim]], lat = points[[lat_dim]]) + } + + return(res) +} + +#====================== +# Compute weights for interpolation at several (lat,lon) positions +# We assume that grid boxes are centered in the grid point. +#====================== +.create_interp_weights <- function(ncfile, locids, lats, lons, region = NULL, + method = c("nearest", "bilinear", "9point", "invdist4nn", "NE", + "NW", "SE", "SW")) +{ + # crop the region to get the correct weights - save temporary file + nc_cropped1 <- paste0('tmp_cropped_', format(Sys.time(), "%Y%m%d%H%M"),'.nc') + nc_cropped2 <- paste0('tmp_cropped2_', format(Sys.time(), "%Y%m%d%H%M"),'.nc') + + system(paste0('cdo sellonlatbox,', region$lon_min, ',', region$lon_max, ',', region$lat_min, + ',', region$lat_max, ' ', ncfile, ' ', nc_cropped1)) + + #---------------- + # Read grid description and compute (i,j) of requested locations (including decimals) + #---------------- + griddes <- .get_griddes(nc_cropped1) + + if (is.null(griddes$yinc)) { + system(paste0('rm ', nc_cropped1)) + stop("'griddes$yinc' not found in NetCDF file. Remember that only regular grids are accepted when ", + "downscaling to point locations.") + } + + # If latitudes are decreasingly ordered, revert them + if (griddes$yinc < 0) { + system(paste0('cdo invertlat ', nc_cropped1, ' ', nc_cropped2)) + griddes <- .get_griddes(nc_cropped2) + } + # remove temporary files + system(paste0('rm ', nc_cropped1)) + system(paste0('rm ', nc_cropped2)) + + if (is.null(griddes)) { + stop("'griddes' not found in the NetCDF source files") + } + + gridpoints <- .latlon2ij(griddes, lats, lons) + + #---------------- + # Compute the weights according to the selected method + #---------------- + if(method == "nearest") { + #---------------- + # Round i and j to closest integer. Weight is always 1. + #---------------- + + # | | | + # -+-----+-----+- + # | x| | + # | a | | + # | | | + # -+-----+-----+- + # | | | + + centeri <- round(gridpoints$i,0) + centeri[centeri == griddes$xsize+1] <- 1 # close longitudes + + weights.df <- data.frame(locid = locids, + lat = lats, + lon = lons, + rawi = gridpoints$i, + rawj = gridpoints$j, + i = centeri, + j = round(gridpoints$j, 0), + weight = 1) + } else if (method %in% c("bilinear","invdist4nn")) { + #---------------- + # Get the (i,j) coordinates of the 4 points (a,b,c,d) around x. + # This plot shows i increasing to the right and + # j increasing to the top, but the computations are generic. + #---------------- + # | | | + #- +-----+-----+- + # | | | + # | b | c | + # | | | + #- +-----+-----+- + # | x| | + # | a | d | + # | | | + #- +-----+-----+- + # | | | + + lowi <- floor(gridpoints$i) + highi <- ceiling(gridpoints$i) + highi[highi == griddes$xsize+1] <- 1 # close the longitudes + lowj <- floor(gridpoints$j) + highj <- ceiling(gridpoints$j) + # Note: highi and lowi are the same if i is integer + # Note: highj and lowj are the same if j is integer + + #---------------- + # Get x position wrt ad and ab axes (from 0 to 1) + #---------------- + pcti <- gridpoints$i - lowi + pctj <- gridpoints$j - lowj + + #---------------- + # Compute weights for a,b,c,d grid points + #---------------- + if(method == "bilinear") { + wa = (1 - pcti) * (1 - pctj) + wb = (1 - pcti) * pctj + wc = pcti * pctj + wd = pcti * (1 - pctj) + } else if(method == "invdist4nn") { + #---------------- + # Note: the distance is computed in the (i,j) space. + # Note2: this method does not guarantees a continuous interpolation. + # Use bilinear if that's desirable. + # When x is on the ab line, c and d would be used. In the limit of x + # being just left of ab other points would be used. + # Here we just dropped c and d coeffs when over ab. Same for ad line, + # b and c coeffs dropped. This prevents repeated nodes. + #---------------- + ida = 1 / sqrt(pcti^2 + pctj^2) + idb = 1 / sqrt(pcti^2 + (1 - pctj)^2) + idc = 1 / sqrt((1-pcti)^2 + (1-pctj)^2) + idd = 1 / sqrt((1-pcti)^2 + pctj^2) + idb[pctj == 0] <- 0; + idc[pctj == 0] <- 0; + idc[pcti == 0] <- 0; + idd[pcti == 0] <- 0; + + #---------------- + # Normalize vector of inverse distances + #---------------- + invdist <- cbind(ida, idb, idc, idd) + print(invdist) + w <- t(apply(invdist, 1, function(x) { print(x); if(any(is.infinite(x))) { + x <- is.infinite(x) * 1 } ; x <- x/sum(x) })) + print(w) + + wa = w[ , 1] + wb = w[ , 2] + wc = w[ , 3] + wd = w[ , 4] + } + + #---------------- + # Put info in dataframes and rbind them + #---------------- + weightsa.df <- data.frame(locid = locids, lat = lats,lon = lons, rawi = gridpoints$i, + rawj = gridpoints$j, i = lowi, j = lowj, weight = wa) + weightsb.df <- data.frame(locid = locids, lat = lats, lon = lons, rawi = gridpoints$i, + rawj = gridpoints$j, i = lowi, j = highj, weight = wb) + weightsc.df <- data.frame(locid = locids, lat = lats, lon = lons, rawi = gridpoints$i, + rawj = gridpoints$j, i = highi, j = highj, weight = wc) + weightsd.df <- data.frame(locid = locids, lat = lats, lon = lons, rawi = gridpoints$i, + rawj = gridpoints$j, i = highi, j = lowj, weight = wd) + weights.df <- rbind(weightsa.df, weightsb.df, weightsc.df, weightsd.df) + } else if(method == "9point") { + #---------------- + # Get the (i,j) coordinates of the 9 points (a,b,...,i) around x + # This plot shows i increasing to the right and + # j increasing to the top, but the computations are generic. + #---------------- + # | | | | + #-+-----+-----+-----+- + # | | | | + # | c | f | i | + # | | | | + #-+-----+-----+-----+- + # | | x| | + # | b | e | h | + # | | | | + #-+-----+-----+-----+- + # | | | | + # | a | d | g | + # | | | | + #-+-----+-----+-----+- + # | | | | + + centeri <- round(gridpoints$i, 0) + centeri[centeri == griddes$xsize + 1] <- 1 + centerj <- round(gridpoints$j, 0) + lowi <- centeri - 1 + highi <- centeri + 1 + lowi[lowi == 0] <- griddes$xsize # close the longitudes + highi[highi == griddes$xsize+1] <- 1 # close the longitudes + lowj <- centerj - 1 + highj <- centerj + 1 + + #---------------- + # For the north and south pole do a 6-point average + #---------------- + w_highj <- ifelse(centerj == 1,1/6,ifelse(centerj == griddes$ysize,0 ,1/9)) + w_centerj <- ifelse(centerj == 1,1/6,ifelse(centerj == griddes$ysize,1/6,1/9)) + w_lowj <- ifelse(centerj == 1,0 ,ifelse(centerj == griddes$ysize,1/6,1/9)) + + #---------------- + # Put info in dataframes and rbind them + #---------------- + weightsa.df <- data.frame(locid = locids, lat = lats, lon = lons, rawi = gridpoints$i, + rawj = gridpoints$j, i = lowi, j = lowj, weight = w_lowj) + weightsb.df <- data.frame(locid = locids, lat = lats, lon = lons, rawi = gridpoints$i, + rawj = gridpoints$j, i = lowi, j = centerj, weight = w_centerj) + weightsc.df <- data.frame(locid = locids, lat = lats, lon = lons, rawi = gridpoints$i, + rawj = gridpoints$j, i = lowi, j = highj, weight = w_highj) + weightsd.df <- data.frame(locid = locids, lat = lats, lon = lons, rawi = gridpoints$i, + rawj = gridpoints$j, i = centeri, j = lowj, weight = w_lowj) + weightse.df <- data.frame(locid = locids, lat = lats, lon = lons, rawi = gridpoints$i, + rawj = gridpoints$j, i = centeri, j = centerj, weight = w_centerj) + weightsf.df <- data.frame(locid = locids, lat = lats, lon = lons, rawi = gridpoints$i, + rawj = gridpoints$j, i = centeri, j = highj, weight = w_highj) + weightsg.df <- data.frame(locid = locids, lat = lats, lon = lons, rawi = gridpoints$i, + rawj = gridpoints$j, i = highi, j = lowj, weight = w_lowj) + weightsh.df <- data.frame(locid = locids, lat = lats, lon = lons, rawi = gridpoints$i, + rawj = gridpoints$j, i = highi, j = centerj, weight = w_centerj) + weightsi.df <- data.frame(locid = locids, lat = lats, lon = lons, rawi = gridpoints$i, + rawj = gridpoints$j, i = highi, j = highj, weight = w_highj) + weights.df <- rbind(weightsa.df, weightsb.df, weightsc.df, weightsd.df, weightse.df, + weightsf.df, weightsg.df, weightsh.df, weightsi.df) + } else if(method %in% c("NE", "NW", "SW", "SE")) { + #---------------- + # Find if increasing i and j increases or decreases lat and lon + #---------------- + westtoeast <- (griddes$xinc > 0) + southtonorth <- T + if(griddes$gridtype == "gaussian") { + # We assume gaussian grid latitudes are ordered north to south + southtonorth <- F + } else { #lonlat + if(griddes$yinc < 0) {southtonorth <- F} + } + + #---------------- + # Get the (i,j) coordinates of the desired point (a,b,c or d) around x + #---------------- + # | | | + #- +-----+-----+- + # | | | + # | b | c | + # | | | + #- +-----+-----+- + # | x| | + # | a | d | + # | | | + #- +-----+-----+- + # | | | + + if(substr(method,1,1) == "N" & southtonorth == T) { selj <- ceiling(gridpoints$j) } + if(substr(method,1,1) == "S" & southtonorth == T) { selj <- floor(gridpoints$j) } + if(substr(method,1,1) == "N" & southtonorth == F) { selj <- floor(gridpoints$j) } + if(substr(method,1,1) == "S" & southtonorth == F) { selj <- ceiling(gridpoints$j) } + + if(substr(method,2,2) == "E" & westtoeast == T) {seli <- ceiling(gridpoints$i) } + if(substr(method,2,2) == "W" & westtoeast == T) {seli <- floor(gridpoints$i) } + if(substr(method,2,2) == "E" & westtoeast == F) {seli <- floor(gridpoints$i) } + if(substr(method,2,2) == "W" & westtoeast == F) {seli <- ceiling(gridpoints$i) } + + seli[seli == griddes$xsize + 1] <- 1 # close the longitudes + + weights.df <- data.frame(locid = locids, lat = lats, lon = lons, rawi = gridpoints$i, + rawj = gridpoints$j, i = seli, j = selj, weight = 1) + } else { + stop(paste0("Method " ,method, " not implemented")) + } + + #---------------- + # Order by locid and remove lines with 0 weight + # This also removes some duplicates in the bilinear/invdist4nn methods when i + # or j is a whole number, or in the 9-point method when at the poles. + #---------------- + weights.df <- weights.df[order(weights.df$locid), ] + weights.df <- weights.df[weights.df$weight != 0, ] + + #---------------- + # Add as attributes the method and the nc file used to compute the weights + #---------------- + attributes(weights.df)$nc_file <- normalizePath(ncfile) + attributes(weights.df)$method <- method + + return(weights.df) +} + +#====================== +# Compute (i,j) from (lat,lon). +# Works only for 'lonlat' and 'gaussian' grids. +# Grids are supposed to cover whole globe. +#====================== +.latlon2ij <- function(griddes, lats, lons) { + #------------ + # Check input params + #------------ + if(length(lons) != length(lats)) {stop("Input lat and lon have different lengths.")} + if(any(lats < -90) | any(lats > 90)) {stop("Latitude out of valid range")} + if((griddes$xfirst > 180) & (any(lons < 0))) { + stop("Please use the same convention for the longitudes in the source file and the ", + "longitude values in 'points'.") + } + #if(round(griddes$xinc*griddes$xsize) != 360) {stop("Grid is not global")} + # no need to resize lons to [0,360) + + #------------ + # Compute i (with decimals) + # i lies in [1,xsize+1) + # %% gives the remainder + #------------ + gridpoints <- list() + gridpoints$i <- 1 + (((lons - griddes$xfirst) / griddes$xinc) %% griddes$xsize) + + #------------ + # Compute j (with decimals) + #------------ + if(griddes$gridtype=='lonlat') { + gridpoints$j <- 1 + (lats - griddes$yfirst) / griddes$yinc + } else if(griddes$gridtype == 'gaussian') { + # We assume gaussian grid latitudes are ordered north to south + # findInterval can only work with monotonic ascending values so we revert twice + northj <- griddes$ysize-findInterval(lats, -griddes$yvals) + southj <- northj + 1 + + # Special case: We are north of the first lat + gridpoints$j[northj == 0] <- 1 + + # Special case: We are south of the last lat + gridpoints$j[southj == griddes$ysize + 1] <- griddes$ysize + + # Generic case + ok_idx <- !(northj == 0 | southj == griddes$ysize+1) + gridpoints$j[ok_idx] <- northj[ok_idx] + (griddes$yvals[northj[ok_idx]] - + lats[ok_idx])/(griddes$yvals[northj[ok_idx]] - griddes$yvals[southj[ok_idx]]) + } else { stop("Unsupported grid") } + + return(gridpoints) +} + +#====================== +# Use cdo griddes to obtain grid information +#====================== +.get_griddes <- function(ncfile) { + tmp <- system(paste0("cdo griddes ", ncfile, + " 2>/dev/null | egrep 'gridtype|xsize|ysize|xfirst|xinc|yfirst|yinc'"), intern = T) + arr <- do.call(rbind, strsplit(tmp,"\\s+= ", perl = T)) + griddes <- as.list(arr[,2]) + names(griddes) <- arr[,1] + + if(griddes$gridtype == "gaussian") { + griddes$yvals <- .get_lats(ncfile) + } + + # Convert some fields to numeric. Ensures all fields are present. + for(nm in c("xsize", "ysize", "xfirst", "yfirst", "xinc", "yinc")) { + griddes[[nm]] <- ifelse(is.null(griddes[[nm]]), NA, as.numeric(griddes[[nm]])) + } + + return(griddes) +} + +#====================== +# Use nco to obtain latitudes. Latitudes shall be named "lat" or "latitude". +#====================== +.get_lats <- function(ncfile) { + + tmp <- system(paste0('ncks -H -s "%f " -v latitude ',ncfile),intern=T) + + if(!is.null(attributes(tmp)$status)) { + tmp <- system(paste0('ncks -H -s "%f " -v lat ',ncfile),intern=T) + } + + lats <- as.numeric(strsplit(tmp[1],"\\s+",perl=T)[[1]]) + + return(lats) +} + +#====================== +# Load model data at all (i,j) pairs listed in the weights dataframe. +# Uses StartR. All ... parameters go to Start (i.e. specify dat, var, +# sdate, time, ensemble, num_procs, etc) +#====================== +.get_model_data <- function(weights.df, mdata, ncores = NULL) { + + #----------------- + # Get data for all combinations of i and j. + # (inefficient, getting many unneded pairs). + # Avoid retrieving duplicates with unique() + # These are the indices of the global grid + #----------------- + is <- weights.df$i + js <- weights.df$j + + #----------------- + # If any of the indices happens to be 0, + # change it by 1 but give a warning + #----------------- + if (any(is == 0) | any(js == 0)) { + warning("Is the point location in the border of the region? The code can run but ", + "results will be less accurate than those obtained with a larger region." ) + is[is == 0] <- 1 + js[js == 0] <- 1 + } + + #----------------- + # Get indices of original is and js in unique(is),unique(js) that were requested + #----------------- + idxi <- match(is, unique(is)) + idxj <- match(js, unique(js)) + + #----------------- + # Subsample mdata to keep only the needed (i,j) pairs. + #----------------- + if (is.na(match("longitude", names(dim(mdata))))) { + londim <- match("lon", names(dim(mdata))) + } else { + londim <- match("longitude", names(dim(mdata))) + } + if (is.na(match("latitude", names(dim(mdata))))) { + latdim <- match("lat", names(dim(mdata))) + } else { + latdim <- match("latitude", names(dim(mdata))) + } + + # trick: exchange idxi and idxj + #if(londim > latdim) { idx.tmp <- idxi; idxi <- idxj; idxj <- idx.tmp } + #keepdims <- (1:length(dim(mdata)))[-c(londim,latdim)] + + #sub_mdata <- apply(mdata, keepdims, function(x) { + # laply(1:length(is),function(k) { x[idxi[k],idxj[k]] }) }) + #names(dim(sub_mdata))[1] <- "gridpoint" + + #----------------- + # Retrieve with multiApply + #----------------- + sub_mdata <- Apply(mdata, target_dims = list(c(latdim, londim)), + fun = function(x) {laply(1:length(is),function(k) { x[js[k],is[k]] }) }, + ncores = ncores)$output1 + names(dim(sub_mdata))[1] <- "gridpoint" + + #----------------- + # Return an array that contains as many gridpoints as (i,j) pairs were requested + #----------------- + return(sub_mdata) +} + +#====================== +# Multiply the grid-point series by the weights, +# to obtain the desired interpolations +#====================== +.interpolate_data <- function(model_data, weights.df, ncores) { + #----------------- + # Multiply each gridpoint matrix by its corresponding weight + #----------------- + gpdim <- match("gridpoint", names(dim(model_data))) + weighted_data <- sweep(model_data, gpdim, weights.df$weight, "*") + + #----------------- + # Sum all series that belong to same interpolation point + # Return an array that contains the requested locations and interpolation type + #----------------- + #interp_data <- apply(weighted_data, -gpdim, function(x) { rowsum(x, weights.df$locid) }) + #names(dim(interp_data))[1] <- "location" + interp_data <- Apply(weighted_data, target_dims = gpdim, fun = function(x) { + rowsum(x, weights.df$locid)}, output_dims = c("location", "aux"), + ncores = ncores)$output1 + + return(interp_data) +} diff --git a/modules/Downscaling/tmp/Intlr.R b/modules/Downscaling/tmp/Intlr.R new file mode 100644 index 00000000..36a7f11b --- /dev/null +++ b/modules/Downscaling/tmp/Intlr.R @@ -0,0 +1,559 @@ +#'@rdname CST_Intlr +#'@title Downscaling using interpolation and linear regression. +#' +#'@author J. Ramon, \email{jaume.ramon@bsc.es} +#' +#'@description This function performs a downscaling using an interpolation and a linear +#'regression. Different methodologies that employ linear regressions are available. See +#'parameter 'lr_method' for more information. It is recommended that the observations +#'are passed already in the target grid. Otherwise, the function will also perform an +#'interpolation of the observed field into the target grid. The coarse scale and +#'observation data can be either global or regional. In the latter case, the region is +#'defined by the user. In principle, the coarse and observation data are intended to +#'be of the same variable, although different variables can also be admitted. +#' +#'@param exp an 's2dv object' containing the experimental field on the +#'coarse scale for which the downscaling is aimed. The object must have, at least, +#'the dimensions latitude, longitude, start date and member. The object is expected to be +#'already subset for the desired region. Data can be in one or two integrated regions, e.g., +#'crossing the Greenwich meridian. To get the correct results in the latter case, +#'the borders of the region should be specified in the parameter 'region'. See parameter +#''region'. +#'@param obs an 's2dv object' containing the observational field. The object +#'must have, at least, the dimensions latitude, longitude and start date. The object is +#'expected to be already subset for the desired region. +#'@param lr_method a character vector indicating the linear regression method to be applied +#'after the interpolation. Accepted methods are 'basic', 'large-scale' and '4nn'. The 'basic' +#'method fits a linear regression using high resolution observations as predictands and the +#'interpolated model data as predictor. Then, the regression equation is to the interpolated +#'model data to correct the interpolated values. The 'large-scale' method fits a linear +#'regression with large-scale predictors from the same model (e.g. teleconnection indices) +#'as predictors and high-resolution observations as predictands. This equation is then +#'applied to the interpolated model values. Finally, the '4nn' method uses a linear +#'regression with the four nearest neighbours as predictors and high-resolution observations +#'as predictands. It is then applied to model data to correct the interpolated values. +#'@param target_grid a character vector indicating the target grid to be passed to CDO. +#'It must be a grid recognised by CDO or a NetCDF file. +#'@param points a list of two elements containing the point latitudes and longitudes +#'of the locations to downscale the model data. The list must contain the two elements +#'named as indicated in the parameters 'lat_dim' and 'lon_dim'. If the downscaling is +#'to a point location, only regular grids are allowed for exp and obs. Only needed if the +#'downscaling is to a point location. +#'@param int_method a character vector indicating the regridding method to be passed +#'to CDORemap. Accepted methods are "con", "bil", "bic", "nn", "con2". If "nn" method is +#'to be used, CDO_1.9.8 or newer version is required. +#'@param method_point_interp a character vector indicating the interpolation method to +#'interpolate model gridded data into the point locations. Accepted methods are "nearest", +#'"bilinear", "9point", "invdist4nn", "NE", "NW", "SE", "SW". +#'@param predictors an array with large-scale data to be used in the 'large-scale' method. +#'Only needed if the linear regression method is set to 'large-scale'. It must have, at +#'least the dimension start date and another dimension whose name has to be specified in +#'the parameter 'large_scale_predictor_dimname'. It should contain as many elements as the +#'number of large-scale predictors. +#'@param lat_dim a character vector indicating the latitude dimension name in the element 'data' +#'in exp and obs. Default set to "lat". +#'@param lon_dim a character vector indicating the longitude dimension name in the element 'data' +#'in exp and obs. Default set to "lon". +#'@param sdate_dim a character vector indicating the start date dimension name in the element +#''data' in exp and obs. Default set to "sdate". +#'@param time_dim a character vector indicating the time dimension name in the element +#''data' in exp and obs. Default set to "time". +#'@param large_scale_predictor_dimname a character vector indicating the name of the +#'dimension in 'predictors' that contain the predictor variables. See parameter 'predictors'. +#'@param loocv a logical indicating whether to apply leave-one-out cross-validation when +#'generating the linear regressions. Default to TRUE. +#'@param region a numeric vector indicating the borders of the region defined in exp. +#'It consists of four elements in this order: lonmin, lonmax, latmin, latmax. lonmin refers +#'to the left border, while lonmax refers to the right border. latmin indicates the lower +#'border, whereas latmax indicates the upper border. If set to NULL (default), the function +#'takes the first and last elements of the latitudes and longitudes. +#'@param ncores an integer indicating the number of cores to use in parallel computation. +#'The default value is NULL. +#'@import multiApply +#' +#'@return A list of three elements. 'data' contains the dowscaled field, 'lat' the +#'downscaled latitudes, and 'lon' the downscaled longitudes. +#'@examples +#'exp <- rnorm(500) +#'dim(exp) <- c(member = 5, lat = 4, lon = 5, sdate = 5) +#'exp_lons <- 1:5 +#'exp_lats <- 1:4 +#'obs <- rnorm(900) +#'dim(obs) <- c(lat = 12, lon = 15, sdate = 5) +#'obs_lons <- seq(1,5, 4/14) +#'obs_lats <- seq(1,4, 3/11) +#'exp <- s2dv_cube(data = exp, lat = exp_lats, lon = exp_lons) +#'obs <- s2dv_cube(data = obs, lat = obs_lats, lon = obs_lons) +#'res <- CST_Intlr(exp = exp, obs = obs, target_grid = 'r1280x640', lr_method = 'basic', int_method = 'conservative') +#'@export +CST_Intlr <- function(exp, obs, lr_method, target_grid = NULL, points = NULL, int_method = NULL, + method_point_interp = NULL, predictors = NULL, lat_dim = "lat", lon_dim = "lon", + sdate_dim = "sdate", time_dim = "time", member_dim = "member", + large_scale_predictor_dimname = 'vars', loocv = TRUE, region = NULL, ncores = NULL) { + + if (!inherits(exp,'s2dv_cube')) { + stop("Parameter 'exp' must be of the class 's2dv_cube'") + } + + if (!inherits(obs,'s2dv_cube')) { + stop("Parameter 'obs' must be of the class 's2dv_cube'") + } + + res <- Intlr(exp = exp$data, obs = obs$data, exp_lats = exp$coords[[lat_dim]], exp_lons = exp$coords[[lon_dim]], + obs_lats = obs$coords[[lat_dim]], obs_lons = obs$coords[[lon_dim]], points = points, + source_file_exp = exp$attrs$source_files[1], source_file_obs = obs$attrs$source_files[1], + target_grid = target_grid, lr_method = lr_method, int_method = int_method, + method_point_interp = method_point_interp, predictors = predictors, + lat_dim = lat_dim, lon_dim = lon_dim, sdate_dim = sdate_dim, time_dim = time_dim, + member_dim = member_dim, large_scale_predictor_dimname = large_scale_predictor_dimname, + loocv = loocv, region = region, ncores = ncores) + + # Modify data, lat and lon in the origina s2dv_cube, adding the downscaled data + exp$data <- res$data + exp$dims <- dim(exp$data) + exp$coords[[lon_dim]] <- res$lon + exp$coords[[lat_dim]] <- res$lat + + obs$data <- res$obs + obs$dims <- dim(obs$data) + obs$coords[[lon_dim]] <- res$lon + obs$coords[[lat_dim]] <- res$lat + + res_s2dv <- list(exp = exp, obs = obs) + return(res_s2dv) +} + +#'@rdname Intlr +#'@title Downscaling using interpolation and linear regression. +#' +#'@author J. Ramon, \email{jaume.ramon@bsc.es} +#' +#'@description This function performs a downscaling using an interpolation and a linear +#'regression. Different methodologies that employ linear regressions are available. See +#'parameter 'lr_method' for more information. It is recommended that the observations +#'are passed already in the target grid. Otherwise, the function will also perform an +#'interpolation of the observed field into the target grid. The coarse scale and +#'observation data can be either global or regional. In the latter case, the region is +#'defined by the user. In principle, the coarse and observation data are intended to +#'be of the same variable, although different variables can also be admitted. +#' +#'@param exp an array with named dimensions containing the experimental field on the +#'coarse scale for which the downscaling is aimed. The object must have, at least, +#'the dimensions latitude, longitude and start date. The object is expected to be +#'already subset for the desired region. Data can be in one or two integrated regions, e.g., +#'crossing the Greenwich meridian. To get the correct results in the latter case, +#'the borders of the region should be specified in the parameter 'region'. See parameter +#''region'. +#'@param obs an array with named dimensions containing the observational field. The object +#'must have, at least, the dimensions latitude, longitude and start date. The object is +#'expected to be already subset for the desired region. +#'@param exp_lats a numeric vector containing the latitude values in 'exp'. Latitudes must +#'range from -90 to 90. +#'@param exp_lons a numeric vector containing the longitude values in 'exp'. Longitudes +#'can range from -180 to 180 or from 0 to 360. +#'@param obs_lats a numeric vector containing the latitude values in 'obs'. Latitudes must +#'range from -90 to 90. +#'@param obs_lons a numeric vector containing the longitude values in 'obs'. Longitudes +#'can range from -180 to 180 or from 0 to 360. +#'@param lr_method a character vector indicating the linear regression method to be applied +#'after the interpolation. Accepted methods are 'basic', 'large-scale' and '4nn'. The 'basic' +#'method fits a linear regression using high resolution observations as predictands and the +#'interpolated model data as predictor. Then, the regression equation is to the interpolated +#'model data to correct the interpolated values. The 'large-scale' method fits a linear +#'regression with large-scale predictors from the same model (e.g. teleconnection indices) +#'as predictors and high-resolution observations as predictands. This equation is then +#'applied to the interpolated model values. Finally, the '4nn' method uses a linear +#'regression with the four nearest neighbours as predictors and high-resolution observations +#'as predictands. It is then applied to model data to correct the interpolated values. +#'@param target_grid a character vector indicating the target grid to be passed to CDO. +#'It must be a grid recognised by CDO or a NetCDF file. +#'@param points a list of two elements containing the point latitudes and longitudes +#'of the locations to downscale the model data. The list must contain the two elements +#'named as indicated in the parameters 'lat_dim' and 'lon_dim'. If the downscaling is +#'to a point location, only regular grids are allowed for exp and obs. Only needed if the +#'downscaling is to a point location. +#'@param int_method a character vector indicating the regridding method to be passed +#'to CDORemap. Accepted methods are "con", "bil", "bic", "nn", "con2". If "nn" method is +#'to be used, CDO_1.9.8 or newer version is required. +#'@param method_point_interp a character vector indicating the interpolation method to +#'interpolate model gridded data into the point locations. Accepted methods are "nearest", +#'"bilinear", "9point", "invdist4nn", "NE", "NW", "SE", "SW". +#'@param source_file_exp a character vector with a path to an example file of the exp data. +#'Only needed if the downscaling is to a point location. +#'@param source_file_obs a character vector with a path to an example file of the obs data. +#'Only needed if the downscaling is to a point location. +#'@param predictors an array with large-scale data to be used in the 'large-scale' method. +#'Only needed if the linear regression method is set to 'large-scale'. It must have, at +#'least the dimension start date and another dimension whose name has to be specified in +#'the parameter 'large_scale_predictor_dimname'. It should contain as many elements as the +#'number of large-scale predictors. +#'@param lat_dim a character vector indicating the latitude dimension name in the element 'data' +#'in exp and obs. Default set to "lat". +#'@param lon_dim a character vector indicating the longitude dimension name in the element 'data' +#'in exp and obs. Default set to "lon". +#'@param sdate_dim a character vector indicating the start date dimension name in the element +#''data' in exp and obs. Default set to "sdate". +#'@param time_dim a character vector indicating the time dimension name in the element +#''data' in exp and obs. Default set to "time". +#'@param region a numeric vector indicating the borders of the region defined in exp. +#'It consists of four elements in this order: lonmin, lonmax, latmin, latmax. lonmin refers +#'to the left border, while lonmax refers to the right border. latmin indicates the lower +#'border, whereas latmax indicates the upper border. If set to NULL (default), the function +#'takes the first and last elements of the latitudes and longitudes. +#'@param large_scale_predictor_dimname a character vector indicating the name of the +#'dimension in 'predictors' that contain the predictor variables. See parameter 'predictors'. +#'@param loocv a logical indicating whether to apply leave-one-out cross-validation when +#'generating the linear regressions. Default to TRUE. +#'@param ncores an integer indicating the number of cores to use in parallel computation. +#'The default value is NULL. +#'@import multiApply +#' +#'@return A list of three elements. 'data' contains the dowscaled field, 'lat' the +#'downscaled latitudes, and 'lon' the downscaled longitudes. +#'@examples +#'exp <- rnorm(500) +#'dim(exp) <- c(member = 5, lat = 4, lon = 5, sdate = 5) +#'exp_lons <- 1:5 +#'exp_lats <- 1:4 +#'obs <- rnorm(900) +#'dim(obs) <- c(lat = 12, lon = 15, sdate = 5) +#'obs_lons <- seq(1,5, 4/14) +#'obs_lats <- seq(1,4, 3/11) +#'res <- Intlr(exp = exp, obs = obs, exp_lats = exp_lats, exp_lons = exp_lons, obs_lats = obs_lats, +#'obs_lons = obs_lons, target_grid = 'r1280x640', lr_method = 'basic', int_method = 'conservative') +#'@export +Intlr <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, lr_method, target_grid = NULL, points = NULL, + int_method = NULL, method_point_interp = NULL, source_file_exp = NULL, source_file_obs = NULL, + predictors = NULL, lat_dim = "lat", lon_dim = "lon", sdate_dim = "sdate", time_dim = "time", + member_dim = "member", region = NULL, large_scale_predictor_dimname = 'vars', loocv = TRUE, + ncores = NULL) { + + #----------------------------------- + # Checkings + #----------------------------------- + if (!inherits(lr_method, 'character')) { + stop("Parameter 'lr_method' must be of the class 'character'") + } + + if (!inherits(large_scale_predictor_dimname, 'character')) { + stop("Parameter 'large_scale_predictor_dimname' must be of the class 'character'") + } + + if (!inherits(loocv, 'logical')) { + stop("Parameter 'loocv' must be set to TRUE or FALSE") + } + + if (!inherits(lat_dim, 'character')) { + stop("Parameter 'lat_dim' must be of the class 'character'") + } + + if (!inherits(lon_dim, 'character')) { + stop("Parameter 'lon_dim' must be of the class 'character'") + } + + if (!inherits(sdate_dim, 'character')) { + stop("Parameter 'sdate_dim' must be of the class 'character'") + } + + if (!inherits(large_scale_predictor_dimname, 'character')) { + stop("Parameter 'large_scale_predictor_dimname' must be of the class 'character'") + } + + if (is.na(match(lon_dim, names(dim(exp))))) { + stop("Missing longitude dimension in 'exp', or does not match the parameter ", + "'lon_dim'") + } + + if (is.na(match(lat_dim, names(dim(exp))))) { + stop("Missing latitude dimension in 'exp', or does not match the parameter ", + "'lat_dim'") + } + + if (is.na(match(sdate_dim, names(dim(exp)))) | is.na(match(sdate_dim, names(dim(obs))))) { + stop("Missing start date dimension in 'exp' and/or 'obs', or does not match the parameter ", + "'sdate_dim'") + } + + # When observations are pointwise + if (!is.null(points) & !is.na(match("location", names(dim(obs))))) { + point_obs <- T + # dimension aux in obs is needed + if (is.na(match("aux", names(dim(obs))))) { + obs <- InsertDim(obs, posdim = 1, lendim = 1, name = "aux") + } + } else { + point_obs <- F + } + + if (!is.null(points) & is.null(source_file_exp)) { + stop("No source file found. Source file for exp must be provided in the parameter ", + "'source_file_exp'.") + } + + if (!is.null(points) & is.null(method_point_interp)) { + stop("Please provide the interpolation method to interpolate gridded data to point locations ", + "through the parameter 'method_point_interp'.") + } + + # sdate must be the time dimension in the input data + stopifnot(sdate_dim %in% names(dim(exp))) + stopifnot(sdate_dim %in% names(dim(obs))) + + # the code is not yet prepared to handle members in the observations + restore_ens <- FALSE + if (member_dim %in% names(dim(obs))) { + if (identical(as.numeric(dim(obs)[member_dim]), 1)) { + obs <- ClimProjDiags::Subset(x = obs, along = member_dim, indices = 1, drop = 'selected') + restore_ens <- TRUE + } else { + stop("Not implemented for observations with members ('obs' can have 'member_dim', ", + "but it should be of length = 1).") + } + } + + # checkings for the parametre 'predictors' + if (!is.null(predictors)) { + if (!is.array(predictors)) { + stop("Parameter 'predictors' must be of the class 'array'") + } else { + # ensure the predictor variable name matches the parametre large_scale_predictor_dimname + stopifnot(large_scale_predictor_dimname %in% names(dim(predictors))) + stopifnot(sdate_dim %in% names(dim(predictors))) + stopifnot(dim(predictors)[sdate_dim] == dim(exp)[sdate_dim]) + } + } + ## ncores + if (!is.null(ncores)) { + if (!is.numeric(ncores) | any(ncores %% 1 != 0) | any(ncores < 0) | + length(ncores) > 1) { + stop("Parameter 'ncores' must be a positive integer.") + } + } + + #----------------------------------- + # Interpolation + #----------------------------------- + if (lr_method != '4nn') { + + if (is.null(int_method)) { + stop("Parameter 'int_method' must be a character vector indicating the interpolation method. ", + "Accepted methods are con, bil, bic, nn, con2") + } + + if (is.null(region)) { + warning("The borders of the downscaling region have not been provided. Assuming the ", + "four borders of the downscaling region are defined by the first and last ", + "elements of the parametres 'obs_lats' and 'obs_lons'.") + region <- c(obs_lons[1], obs_lons[length(obs_lons)], obs_lats[1], obs_lats[length(obs_lats)]) + } + + exp_interpolated <- Interpolation(exp = exp, lats = exp_lats, lons = exp_lons, target_grid = target_grid, + points = points, method_point_interp = method_point_interp, + source_file = source_file_exp, lat_dim = lat_dim, lon_dim = lon_dim, + method_remap = int_method, region = region, ncores = ncores) + + # If after interpolating 'exp' data the coordinates do not match, the obs data is interpolated to + # the same grid to force the matching + if ((!.check_coords(lat1 = exp_interpolated$lat, lat2 = obs_lats, + lon1 = exp_interpolated$lon, lon2 = obs_lons)) | !(point_obs)) { + obs_interpolated <- Interpolation(exp = obs, lats = obs_lats, lons = obs_lons, target_grid = target_grid, + points = points, method_point_interp = method_point_interp, + source_file = source_file_obs, lat_dim = lat_dim, lon_dim = lon_dim, + method_remap = int_method, region = region, ncores = ncores) + + lats <- obs_interpolated$lat + lons <- obs_interpolated$lon + obs_interpolated <- obs_interpolated$data + } else { + obs_interpolated <- obs + lats <- obs_lats + lons <- obs_lons + } + } + + #----------------------------------- + # Linear regressions + #----------------------------------- + # Pointwise linear regression + # Predictor: model data + # Predictand: observations + if (lr_method == 'basic') { + predictor <- exp_interpolated$data + predictand <- obs_interpolated + + target_dims_predictor <- sdate_dim + target_dims_predictand <- sdate_dim + } + + # (Multi) linear regression with large-scale predictors + # Predictor: passed through the parameter 'predictors' by the user. Can be model or observations + # Predictand: model data + else if (lr_method == 'large-scale') { + if (is.null(predictors)) { + stop("The large-scale predictors must be passed through the parametre 'predictors'") + } + + predictand <- obs_interpolated + predictor <- predictors + + target_dims_predictor <- c(sdate_dim, large_scale_predictor_dimname) + target_dims_predictand <- sdate_dim + } + + # Multi-linear regression with the four nearest neighbours + # Predictors: model data + # Predictand: observations + else if (lr_method == '4nn') { + + predictor <- .find_nn(coar = exp, lats_hres = obs_lats, lons_hres = obs_lons, lats_coar = exp_lats, + lons_coar = exp_lons, lat_dim = lat_dim, lon_dim = lon_dim, nn = 4, ncores = ncores) + + if (is.null(points) | ("location" %in% names(dim(obs)))) { + if (!is.null(target_grid)) { + warning("Interpolating to the 'obs' grid") + } + predictand <- obs + + lats <- obs_lats + lons <- obs_lons + } + # If the downscaling is to point locations: Once the 4 nearest neighbours have been found, + # interpolate to point locations + else { + predictor <- Interpolation(exp = predictor, lats = obs_lats, lons = obs_lons, target_grid = NULL, + points = points, method_point_interp = method_point_interp, + source_file = source_file_obs, method_remap = NULL, region = region, ncores = ncores) + + predictand <- Interpolation(exp = obs, lats = obs_lats, lons = obs_lons, target_grid = NULL, + points = points, method_point_interp = method_point_interp, + source_file = source_file_obs, method_remap = NULL, region = region, ncores = ncores) + + lats <- predictor$lat + lons <- predictor$lon + predictor <- predictor$data + predictand <- predictand$data + } + + target_dims_predictor <- c(sdate_dim,'nn') + target_dims_predictand <- sdate_dim + } + + else { + stop(paste0(lr_method, " method is not implemented yet")) + } + + print(paste0('dim predictor',dim(predictor))) + print(paste0('dim predictand',dim(predictand))) + print(dim(list(predictor[1]))) + # Apply the linear regressions + + + + res <- Apply(list(predictor, predictand), target_dims = list(target_dims_predictor, target_dims_predictand), + fun = .intlr, loocv = loocv, ncores = ncores)$output1 + + names(dim(res))[1] <- sdate_dim + # names(dim(res))[which(names(dim(res)) == '')] + + # restore ensemble dimension in observations if it existed originally + if (restore_ens) { + predictand <- s2dv::InsertDim(predictand, posdim = 1, lendim = 1, name = member_dim) + } + + # Return a list of three elements + res <- list(data = res, obs = predictand, lon = lons, lat = lats) + + return(res) +} + +#----------------------------------- +# Atomic function to generate and apply the linear regressions +#----------------------------------- +.intlr <- function(x, y, loocv) { + + tmp_df <- data.frame(x = x, y = y) + # if the data is all NA, force return return NA + if (all(is.na(tmp_df)) | (sum(apply(tmp_df, 2, function(x) !all(is.na(x)))) == 1)) { + + n <- nrow(tmp_df) + res <- rep(NA, n) + + } else { + # training + lm1 <- .train_lm(df = tmp_df, loocv = loocv) + + # prediction + res <- .pred_lm(lm1 = lm1, df = tmp_df, loocv = loocv) + } + + return(res) +} + +#----------------------------------- +# Function to generate the linear regressions. +# Returns a list +#----------------------------------- +.train_lm <- function(df, loocv) { + + # Remove predictor columns containing only NA's + df <- df[ ,apply(as.matrix(df[,colnames(df) != 'y'],nrow(df),ncol(df)-1), 2, function(x) !all(is.na(x)))] + + if (loocv) { + + lm1 <- lapply(1:nrow(df), function(j) { + if (all(is.na(df[-j,]$y))) { + return(NA) + } else { + return(lm(df[-j,], formula = y ~ .)) + }}) + } else { + + lm1 <- ifelse(all(is.na(df$y)), NA, list(lm(data = df, formula = y ~ .))) + } + + return(lm1) +} + +#----------------------------------- +# Function to apply the linear regressions. +#----------------------------------- +.pred_lm <- function(df, lm1, loocv) { + + if (loocv) { + pred_vals <- sapply(1:nrow(df), function(j) { + if (all(is.na(lm1[[j]]))) { + return(NA) + } else { + return(predict(lm1[[j]], df[j,])) + }}) + } else { + if (!is.na(lm1)) { + pred_vals_ls <- lapply(lm1, predict, data = df) + pred_vals <- unlist(pred_vals_ls) + } else { + pred_vals <- rep(NA, nrow(df)) + } + } + return(pred_vals) +} + +#----------------------------------- +# Function to find N nearest neighbours. +# 'coar' is an array with named dimensions +#----------------------------------- +.find_nn <- function(coar, lats_hres, lons_hres, lats_coar, lons_coar, lat_dim, lon_dim, nn = 4, ncores = NULL) { + + # Sort the distances from closest to furthest + idx_lat <- as.array(sapply(lats_hres, function(x) order(abs(lats_coar - x))[1:nn])) + idx_lon <- as.array(sapply(lons_hres, function(x) order(abs(lons_coar - x))[1:nn])) + + names(dim(idx_lat)) <- c('nn', lat_dim) + names(dim(idx_lon)) <- c('nn', lon_dim) + + # obtain the values of the nearest neighbours + nearest <- Apply(list(coar, idx_lat, idx_lon), + target_dims = list(c(lat_dim, lon_dim), lat_dim, lon_dim), + fun = function(x, y, z) x[y, z], ncores = ncores)$output1 + + return(nearest) +} diff --git a/modules/Downscaling/tmp/LogisticReg.R b/modules/Downscaling/tmp/LogisticReg.R new file mode 100644 index 00000000..a85a1b3f --- /dev/null +++ b/modules/Downscaling/tmp/LogisticReg.R @@ -0,0 +1,550 @@ +#'@rdname CST_LogisticReg +#'@title Downscaling using interpolation and logistic regression. +#' +#'@author J. Ramon, \email{jaume.ramon@bsc.es} +#' +#'@description This function performs a downscaling using an interpolation and a logistic +#'regression. See \code{\link[nnet]{multinom}} for further details. It is recommended that +#'the observations are passed already in the target grid. Otherwise, the function will also +#'perform an interpolation of the observed field into the target grid. The coarse scale and +#'observation data can be either global or regional. In the latter case, the region is +#'defined by the user. In principle, the coarse and observation data are intended to be of +#'the same variable, although different variables can also be admitted. +#' +#'@param exp an 's2dv object' with named dimensions containing the experimental field on +#'the coarse scale for which the downscaling is aimed. The object must have, at least, +#'the dimensions latitude, longitude, start date and member. The object is expected to be +#'already subset for the desired region. Data can be in one or two integrated regions, e.g., +#'crossing the Greenwich meridian. To get the correct results in the latter case, +#'the borders of the region should be specified in the parameter 'region'. See parameter +#''region'. +#'@param obs an 's2dv object' with named dimensions containing the observational field. +#'The object must have, at least, the dimensions latitude, longitude and start date. The +#'object is expected to be already subset for the desired region. +#'@param target_grid a character vector indicating the target grid to be passed to CDO. +#'It must be a grid recognised by CDO or a NetCDF file. +#'@param int_method a character vector indicating the regridding method to be passed to CDORemap. +#'Accepted methods are "con", "bil", "bic", "nn", "con2". If "nn" method is to be used, CDO_1.9.8 +#'or newer version is required. +#'@param log_reg_method a character vector indicating the logistic regression method to be used. +#'Accepted methods are "ens_mean", "ens_mean_sd", "sorted_members". "ens_mean" uses the ensemble +#'mean anomalies as predictors in the logistic regression, "ens_mean_sd" uses the ensemble +#'mean anomalies and the ensemble spread (computed as the standard deviation of all the members) +#'as predictors in the logistic regression, and "sorted_members" considers all the members +#'ordered decreasingly as predictors in the logistic regression. Default method is "ens_mean". +#'@param probs_cat a numeric vector indicating the percentile thresholds separating the +#'climatological distribution into different classes (categories). Default to c(1/3, 2/3). See +#'\code{\link[easyVerification]{convert2prob}}. +#'@param return_most_likely_cat if TRUE, the function returns the most likely category. If +#'FALSE, the function returns the probabilities for each category. Default to FALSE. +#'@param points a list of two elements containing the point latitudes and longitudes +#'of the locations to downscale the model data. The list must contain the two elements +#'named as indicated in the parameters 'lat_dim' and 'lon_dim'. If the downscaling is +#'to a point location, only regular grids are allowed for exp and obs. Only needed if the +#'downscaling is to a point location. +#'@param method_point_interp a character vector indicating the interpolation method to interpolate +#'model gridded data into the point locations. Accepted methods are "nearest", "bilinear", "9point", +#'"invdist4nn", "NE", "NW", "SE", "SW". Only needed if the downscaling is to a point location. +#'@param lat_dim a character vector indicating the latitude dimension name in the element 'data' +#'in exp and obs. Default set to "lat". +#'@param lon_dim a character vector indicating the longitude dimension name in the element 'data' +#'in exp and obs. Default set to "lon". +#'@param sdate_dim a character vector indicating the start date dimension name in the element +#''data' in exp and obs. Default set to "sdate". +#'@param member_dim a character vector indicating the member dimension name in the element +#''data' in exp and obs. Default set to "member". +#'@param region a numeric vector indicating the borders of the region defined in obs. +#'It consists of four elements in this order: lonmin, lonmax, latmin, latmax. lonmin refers +#'to the left border, while lonmax refers to the right border. latmin indicates the lower +#'border, whereas latmax indicates the upper border. If set to NULL (default), the function +#'takes the first and last elements of the latitudes and longitudes. +#'@param loocv a logical vector indicating whether to perform leave-one-out cross-validation +#'in the fitting of the logistic regression. Default to TRUE. +#'@param ncores an integer indicating the number of cores to use in parallel computation. +#'The default value is NULL. +#'@import multiApply +#'@import nnet +#'@importFrom laply plyr +#' +#'@seealso \code{\link[nnet]{multinom}} +#' +#'@return An list of three elements. 'data' contains the dowscaled data, that could be either +#'in the form of probabilities for each category or the most likely category. 'lat' contains the +#'downscaled latitudes, and 'lon' the downscaled longitudes. +#' +#'@examples +#'exp <- rnorm(1500) +#'dim(exp) <- c(member = 5, lat = 4, lon = 5, sdate = 15) +#'exp_lons <- 1:5 +#'exp_lats <- 1:4 +#'obs <- rnorm(2700) +#'dim(obs) <- c(lat = 12, lon = 15, sdate = 15) +#'obs_lons <- seq(1,5, 4/14) +#'obs_lats <- seq(1,4, 3/11) +#'exp <- s2dv_cube(data = exp, lat = exp_lats, lon = exp_lons) +#'obs <- s2dv_cube(data = obs, lat = obs_lats, lon = obs_lons) +#'res <- CST_LogisticReg(exp = exp, obs = obs, int_method = 'bil', target_grid = 'r1280x640', +#'probs_cat = c(1/3, 2/3)) +#'@export +CST_LogisticReg <- function(exp, obs, target_grid, int_method = NULL, log_reg_method = "ens_mean", + probs_cat = c(1/3,2/3), return_most_likely_cat = FALSE, points = NULL, + method_point_interp = NULL, lat_dim = "lat", lon_dim = "lon", sdate_dim = "sdate", + member_dim = "member", region = NULL, loocv = TRUE, ncores = NULL) { + + if (!inherits(exp,'s2dv_cube')) { + stop("Parameter 'exp' must be of the class 's2dv_cube'") + } + + if (!inherits(obs,'s2dv_cube')) { + stop("Parameter 'obs' must be of the class 's2dv_cube'") + } + + res <- LogisticReg(exp = exp$data, obs = obs$data, exp_lats = exp$coords[[lat_dim]], + exp_lons = exp$coords[[lon_dim]], obs_lats = obs$coords[[lat_dim]], + obs_lons = obs$coords[[lon_dim]], target_grid = target_grid, + probs_cat = probs_cat, return_most_likely_cat = return_most_likely_cat, + int_method = int_method, log_reg_method = log_reg_method, points = points, + method_point_interp = method_point_interp, lat_dim = lat_dim, + lon_dim = lon_dim, sdate_dim = sdate_dim, member_dim = member_dim, + source_file_exp = exp$attrs$source_files[1], source_file_obs = obs$attrs$source_files[1], + region = region, loocv = loocv, ncores = ncores) + + # Modify data, lat and lon in the origina s2dv_cube, adding the downscaled data + exp$data <- res$data + exp$dims <- dim(exp$data) + exp$coords[[lon_dim]] <- res$lon + exp$coords[[lat_dim]] <- res$lat + + obs$data <- res$obs + obs$dims <- dim(obs$data) + obs$coords[[lon_dim]] <- res$lon + obs$coords[[lat_dim]] <- res$lat + + res_s2dv <- list(exp = exp, obs = obs) + return(res_s2dv) +} + +#'@rdname LogisticReg +#'@title Downscaling using interpolation and logistic regression. +#' +#'@author J. Ramon, \email{jaume.ramon@bsc.es} +#' +#'@description This function performs a downscaling using an interpolation and a logistic +#'regression. See \code{\link[nnet]{multinom}} for further details. It is recommended that +#'the observations are passed already in the target grid. Otherwise, the function will also +#'perform an interpolation of the observed field into the target grid. The coarse scale and +#'observation data can be either global or regional. In the latter case, the region is +#'defined by the user. In principle, the coarse and observation data are intended to be of +#'the same variable, although different variables can also be admitted. +#' +#'@param exp an array with named dimensions containing the experimental field on the +#'coarse scale for which the downscaling is aimed. The object must have, at least, +#'the dimensions latitude, longitude, start date and member. The object is expected to be +#'already subset for the desired region. Data can be in one or two integrated regions, e.g., +#'crossing the Greenwich meridian. To get the correct results in the latter case, +#'the borders of the region should be specified in the parameter 'region'. See parameter +#''region'. +#'@param obs an array with named dimensions containing the observational field. The object +#'must have, at least, the dimensions latitude, longitude and start date. The object is +#'expected to be already subset for the desired region. +#'@param exp_lats a numeric vector containing the latitude values in 'exp'. Latitudes must +#'range from -90 to 90. +#'@param exp_lons a numeric vector containing the longitude values in 'exp'. Longitudes +#'can range from -180 to 180 or from 0 to 360. +#'@param obs_lats a numeric vector containing the latitude values in 'obs'. Latitudes must +#'range from -90 to 90. +#'@param obs_lons a numeric vector containing the longitude values in 'obs'. Longitudes +#'can range from -180 to 180 or from 0 to 360. +#'@param target_grid a character vector indicating the target grid to be passed to CDO. +#'It must be a grid recognised by CDO or a NetCDF file. +#'@param int_method a character vector indicating the regridding method to be passed to CDORemap. +#'Accepted methods are "con", "bil", "bic", "nn", "con2". If "nn" method is to be used, CDO_1.9.8 +#'or newer version is required. +#'@param log_reg_method a character vector indicating the logistic regression method to be used. +#'Accepted methods are "ens_mean", "ens_mean_sd", "sorted_members". "ens_mean" uses the ensemble +#'mean anomalies as predictors in the logistic regression, "ens_mean_sd" uses the ensemble +#'mean anomalies and the ensemble spread (computed as the standard deviation of all the members) +#'as predictors in the logistic regression, and "sorted_members" considers all the members +#'ordered decreasingly as predictors in the logistic regression. Default method is "ens_mean". +#'@param probs_cat a numeric vector indicating the percentile thresholds separating the +#'climatological distribution into different classes (categories). Default to c(1/3, 2/3). See +#'\code{\link[easyVerification]{convert2prob}}. +#'@param return_most_likely_cat if TRUE, the function returns the most likely category. If +#'FALSE, the function returns the probabilities for each category. Default to FALSE. +#'@param points a list of two elements containing the point latitudes and longitudes +#'of the locations to downscale the model data. The list must contain the two elements +#'named as indicated in the parameters 'lat_dim' and 'lon_dim'. If the downscaling is +#'to a point location, only regular grids are allowed for exp and obs. Only needed if the +#'downscaling is to a point location. +#'@param method_point_interp a character vector indicating the interpolation method to interpolate +#'model gridded data into the point locations. Accepted methods are "nearest", "bilinear", "9point", +#'"invdist4nn", "NE", "NW", "SE", "SW". Only needed if the downscaling is to a point location. +#'@param lat_dim a character vector indicating the latitude dimension name in the element 'data' +#'in exp and obs. Default set to "lat". +#'@param lon_dim a character vector indicating the longitude dimension name in the element 'data' +#'in exp and obs. Default set to "lon". +#'@param sdate_dim a character vector indicating the start date dimension name in the element +#''data' in exp and obs. Default set to "sdate". +#'@param member_dim a character vector indicating the member dimension name in the element +#''data' in exp and obs. Default set to "member". +#'@param source_file_exp a character vector with a path to an example file of the exp data. +#'Only needed if the downscaling is to a point location. +#'@param source_file_obs a character vector with a path to an example file of the obs data. +#'Only needed if the downscaling is to a point location. +#'@param region a numeric vector indicating the borders of the region defined in obs. +#'It consists of four elements in this order: lonmin, lonmax, latmin, latmax. lonmin refers +#'to the left border, while lonmax refers to the right border. latmin indicates the lower +#'border, whereas latmax indicates the upper border. If set to NULL (default), the function +#'takes the first and last elements of the latitudes and longitudes. +#'@param loocv a logical vector indicating whether to perform leave-one-out cross-validation +#'in the fitting of the logistic regression. Default to TRUE. +#'@param ncores an integer indicating the number of cores to use in parallel computation. +#'The default value is NULL. +#'@import multiApply +#'@import nnet +#'@importFrom laply plyr +#' +#'@seealso \code{\link[nnet]{multinom}} +#' +#'@return An list of three elements. 'data' contains the dowscaled data, that could be either +#'in the form of probabilities for each category or the most likely category. 'lat' contains the +#'downscaled latitudes, and 'lon' the downscaled longitudes. +#' +#'@examples +#'exp <- rnorm(1500) +#'dim(exp) <- c(member = 5, lat = 4, lon = 5, sdate = 15) +#'exp_lons <- 1:5 +#'exp_lats <- 1:4 +#'obs <- rnorm(2700) +#'dim(obs) <- c(lat = 12, lon = 15, sdate = 15) +#'obs_lons <- seq(1,5, 4/14) +#'obs_lats <- seq(1,4, 3/11) +#'res <- LogisticReg(exp = exp, obs = obs, exp_lats = exp_lats, exp_lons = exp_lons, +#'obs_lats = obs_lats, obs_lons = obs_lons, int_method = 'bil', target_grid = 'r1280x640', +#'probs_cat = c(1/3, 2/3)) +#'@export +LogisticReg <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, target_grid, + int_method = NULL, log_reg_method = "ens_mean", probs_cat = c(1/3,2/3), + return_most_likely_cat = FALSE, points = NULL, method_point_interp = NULL, + lat_dim = "lat", lon_dim = "lon", sdate_dim = "sdate", member_dim = "member", + source_file_exp = NULL, source_file_obs = NULL, region = NULL, loocv = TRUE, ncores = NULL) { + + #----------------------------------- + # Checkings + #----------------------------------- + if (!inherits(target_grid, 'character')) { + stop("Parameter 'target_grid' must be of the class 'character'") + } + + if (!is.null(int_method) & !inherits(int_method, 'character')) { + stop("Parameter 'int_method' must be of the class 'character'") + } + + if (!is.null(method_point_interp) & !inherits(method_point_interp, 'character')) { + stop("Parameter 'method_point_interp' must be of the class 'character'") + } + + if (!inherits(lat_dim, 'character')) { + stop("Parameter 'lat_dim' must be of the class 'character'") + } + + if (!inherits(lon_dim, 'character')) { + stop("Parameter 'lon_dim' must be of the class 'character'") + } + + if (!inherits(sdate_dim, 'character')) { + stop("Parameter 'sdate_dim' must be of the class 'character'") + } + + if (!inherits(member_dim, 'character')) { + stop("Parameter 'member_dim' must be of the class 'character'") + } + + if (!is.null(source_file_exp) & !inherits(source_file_exp, 'character')) { + stop("Parameter 'source_file_exp' must be of the class 'character'") + } + + if (!is.null(source_file_obs) & !inherits(source_file_obs, 'character')) { + stop("Parameter 'source_file_obs' must be of the class 'character'") + } + + if (!inherits(loocv, 'logical')) { + stop("Parameter 'loocv' must be set to TRUE or FALSE") + } + + if (is.na(match(lon_dim, names(dim(exp))))) { + stop("Missing longitude dimension in 'exp', or does not match the parameter ", + "'lon_dim'") + } + + if (is.na(match(lat_dim, names(dim(exp))))) { + stop("Missing latitude dimension in 'exp', or does not match the parameter ", + "'lat_dim'") + } + + if (is.na(match(sdate_dim, names(dim(exp)))) | is.na(match(sdate_dim, names(dim(obs))))) { + stop("Missing start date dimension in 'exp' and/or 'obs', or does not match the parameter ", + "'sdate_dim'") + } + + if (is.na(match(member_dim, names(dim(exp))))) { + stop("Missing member dimension in 'exp' and/or 'obs', or does not match the parameter ", + "'member_dim'") + } + + # When observations are pointwise + if (!is.null(points) & !is.na(match("location", names(dim(obs))))) { + point_obs <- T + # dimension aux in obs is needed + if (is.na(match("aux", names(dim(obs))))) { + obs <- InsertDim(obs, posdim = 1, lendim = 1, name = "aux") + } + } else { + point_obs <- F + } + + if (!is.null(points) & (is.null(source_file_exp))) { + stop("No source file found. Source file must be provided in the parameter 'source_file_exp'.") + } + + if (!is.null(points) & is.null(method_point_interp)) { + stop("Please provide the interpolation method to interpolate gridded data to point locations ", + "through the parameter 'method_point_interp'.") + } + + if (is.null(region)) { + warning("The borders of the downscaling region have not been provided. Assuming the four borders ", + "of the downscaling region are defined by the first and last elements of the parametres ", + "'obs_lats' and 'obs_lons'.") + region <- c(obs_lons[1], obs_lons[length(obs_lons)], obs_lats[1], obs_lats[length(obs_lats)]) + } + ## ncores + if (!is.null(ncores)) { + if (!is.numeric(ncores) | any(ncores %% 1 != 0) | any(ncores < 0) | + length(ncores) > 1) { + stop("Parameter 'ncores' must be a positive integer.") + } + } + + # the code is not yet prepared to handle members in the observations + restore_ens <- FALSE + if (member_dim %in% names(dim(obs))) { + if (identical(as.numeric(dim(obs)[member_dim]), 1)) { + restore_ens <- TRUE + obs <- ClimProjDiags::Subset(x = obs, along = member_dim, indices = 1, drop = 'selected') + } else { + stop("Not implemented for observations with members ('obs' can have 'member_dim', ", + "but it should be of length = 1).") + } + } + + exp_interpolated <- Interpolation(exp = exp, lats = exp_lats, lons = exp_lons, target_grid = target_grid, + method_remap = int_method, points = points, source_file = source_file_exp, + lat_dim = lat_dim, lon_dim = lon_dim, method_point_interp = method_point_interp, + region = region, ncores = ncores) + + # compute ensemble mean anomalies + if (log_reg_method == "ens_mean") { + predictor <- .get_ens_mean_anom(obj_ens = exp_interpolated$data, member_dim = member_dim, sdate_dim = sdate_dim, + ncores = ncores) + + target_dims_predictor <- sdate_dim + } + else if (log_reg_method == "ens_mean_sd") { + + require(abind) + + ens_mean_anom <- .get_ens_mean_anom(obj_ens = exp_interpolated$data, member_dim = member_dim, + sdate_dim = sdate_dim, ncores = ncores) + ens_sd <- .get_ens_sd(obj_ens = exp_interpolated$data, member_dim = member_dim, ncores = ncores) + + #merge two arrays into one array of predictors + predictor <- abind(ens_mean_anom, ens_sd, along = 1/2) + names(dim(predictor)) <- c("pred", names(dim(ens_mean_anom))) + + target_dims_predictor <- c(sdate_dim, "pred") + } else if (log_reg_method == "sorted_members") { + predictor <- .sort_members(obj_ens = exp_interpolated$data, member_dim = member_dim, ncores = ncores) + + target_dims_predictor <- c(sdate_dim, member_dim) + } else { + stop(paste0(log_reg_method, " not recognised or not implemented.")) + } + + # If after interpolating 'exp' data the coordinates do not match, the obs data is interpolated to + # the same grid to force the matching + if ((!.check_coords(lat1 = as.numeric(exp_interpolated$lat), lat2 = obs_lats, + lon1 = as.numeric(exp_interpolated$lon), lon2 = obs_lons)) | !(point_obs)) { + obs_interpolated <- Interpolation(exp = obs, lats = obs_lats, lons = obs_lons, target_grid = target_grid, + method_remap = int_method, points = points, source_file = source_file_obs, + lat_dim = lat_dim, lon_dim = lon_dim, method_point_interp = method_point_interp, + region = region, ncores = ncores) + obs_ref <- obs_interpolated$data + } else { + obs_ref <- obs + } + + # convert observations to categorical predictands + +obs_cat <- Apply(obs_ref, target_dims = sdate_dim, function(x) { + if (!any(!is.na(x))) { + rep(NA,length(x)) + } else { + terc <- convert2prob(as.vector(x), prob = probs_cat) + apply(terc, 1, function(r) which (r == 1))}}, + output_dims = sdate_dim, ncores = ncores)$output1 + + + res <- Apply(list(predictor, obs_cat), target_dims = list(target_dims_predictor, sdate_dim), fun = function(x, y) + .log_reg(x = x, y = y, loocv = loocv,probs_cat=probs_cat), output_dims = c(sdate_dim, "category"), ncores = ncores)$output1 + + if (return_most_likely_cat) { + res <- Apply(res, target_dims = c(sdate_dim, "category"), .most_likely_category, + output_dims = sdate_dim, ncores = ncores)$output1 + } + + # restore ensemble dimension in observations if it existed originally + if (restore_ens) { + obs_ref <- s2dv::InsertDim(obs_ref, posdim = 1, lendim = 1, name = member_dim, ncores = ncores) + } + + res <- list(data = res, obs = obs_ref, lon = exp_interpolated$lon, lat = exp_interpolated$lat) + + return(res) +} + +.most_likely_category <- function(data) { +# data, expected dims: start date, category (in this order) + + if (all(is.na(data))) { + mlc <- rep(NA, nrow(data)) + } else { + mlc <- apply(data, 1, which.max) + } + return(mlc) +} + +.sort_members <- function(obj_ens, member_dim, ncores = NULL) { + + sorted <- Apply(obj_ens, target_dims = member_dim, sort, decreasing = TRUE, na.last = TRUE, ncores = ncores)$output1 + + return(sorted) +} + +.get_ens_sd <- function(obj_ens, member_dim, ncores = NULL) { + + # compute ensemble spread + ens_sd <- Apply(obj_ens, target_dims = member_dim, sd, na.rm = TRUE, ncores = ncores)$output1 + + return(ens_sd) +} + +.get_ens_mean_anom <- function(obj_ens, member_dim, sdate_dim, ncores = NULL) { + + require(s2dv) + + # compute climatology + clim <- Apply(obj_ens, target_dims = c(member_dim, sdate_dim), mean, ncores = ncores)$output1 + + # compute ensemble mean + ens_mean <- Apply(obj_ens, target_dims = member_dim, mean, na.rm = TRUE, ncores = ncores)$output1 + + # compute ensemble mean anomalies + anom <- Ano(ens_mean, clim, ncores = ncores) + + return(anom) +} + +# atomic functions for logistic regressions +.log_reg <- function(x, y, loocv,probs_cat) { + + tmp_df <- data.frame(x = x, y = y) + + # if the data is all NA, force return return NA + if (all(is.na(tmp_df)) | (sum(apply(tmp_df, 2, function(x) !all(is.na(x)))) == 1) | all(is.na(tmp_df$y))) { + + n1 <- nrow(tmp_df) + n2<- length(probs_cat)+1 + res <- matrix(NA, nrow = n1, ncol = n2) + + } else { + # training + lm1 <- .train_lr(df = tmp_df, loocv = loocv) + + # prediction + res <- pred_lr(lm1 = lm1, df = tmp_df, loocv = loocv,probs_cat=probs_cat) + } + return(res) +} + +#----------------------------------- +# Function to train the logistic regressions. +#----------------------------------- +.train_lr <- function(df, loocv) { + + require(nnet) + + # Remove columns containing only NA's + df <- df[ , apply(df, 2, function(x) !all(is.na(x)))] + + if (loocv) { + + lm1 <- lapply(1:nrow(df), function(j) multinom(y ~ ., data = df[ -j, ])) + + } else { + + lm1 <- list(multinom(y ~ ., data = df)) + + } + + return(lm1) +} + +#----------------------------------- +# Function to apply the logistic regressions. +#----------------------------------- +pred_lr <- function(df, lm1, loocv,probs_cat) { + + require(plyr) + + if (loocv) { + + # The error: "Error: Results must have the same dimensions." can + # appear when the number of sdates is insufficient + + pred_vals_ls <-list() + for (j in 1:nrow(df)) { + pred_vals_ls[[j]] <- predict(lm1[[j]], df[j,], type = "probs") + } + + pred_vals <- laply(pred_vals_ls, .fun = as.array) + + if( length(probs_cat)+1==2) + { + pred_vals_dum<-array(NA,dim=c(nrow(df),2)) + pred_vals_dum[,2]<-pred_vals + pred_vals_dum[,1]<-1-pred_vals + pred_vals<-pred_vals_dum + colnames(pred_vals)<-c(1,2) + } + + } else { + + # type = class, probs + #pred_vals_ls <- lapply(lm1, predict, data = df, type = "probs") + #pred_vals <- unlist(pred_vals_ls) + pred_vals <- predict(lm1[[1]], df, type = "probs") + + if( length(probs_cat)+1==2) + { + pred_vals_dum<-array(NA,dim=c(nrow(df),2)) + pred_vals_dum[,2]<-pred_vals + pred_vals_dum[,1]<-1-pred_vals + pred_vals<-pred_vals_dum + colnames(pred_vals)<-c(1,2) + } + + } + + return(pred_vals) +} diff --git a/modules/Downscaling/tmp/Utils.R b/modules/Downscaling/tmp/Utils.R new file mode 100644 index 00000000..3cd65852 --- /dev/null +++ b/modules/Downscaling/tmp/Utils.R @@ -0,0 +1,39 @@ +.check_coords <- function(lat1, lon1, lat2, lon2) { + if (all(as.numeric(lat1) == as.numeric(lat2)) & all(as.numeric(lon1) == as.numeric(lon2))) { + match <- TRUE + } else { + match <- FALSE + } + return(match) +} + +# reorder dims to a reference array. If they do not exist, they are created +# example +#arr_ref <- array(NA, c(dataset = 1, sdate = 8, member = 3, ftime = 1, lon = 269, lat = 181)) +#arr_to_reorder <- array(NA, c(dataset = 1, member = 3, sdate = 8, lat = 181, lon = 269, pp = 1)) + +.reorder_dims <- function(arr_ref, arr_to_reorder) { + + miss_dims <- names(dim(arr_ref))[!(names(dim(arr_ref)) %in% names(dim(arr_to_reorder)))] + + if (length(miss_dims) != 0) { + for (m in seq(miss_dims)) { + arr_to_reorder <- InsertDim(data = arr_to_reorder, posdim = length(dim(arr_to_reorder)) + 1, lendim = 1, + name = miss_dims[m]) + } + } + + # TODO: add code to reorder dimensions and put the non-common dimensions at the end + + orddim <- match(names(dim(arr_ref)),names(dim(arr_to_reorder))) + return(Reorder(data = arr_to_reorder, order = orddim)) +} + +#.check_coords <- function(lat1, lon1, lat2, lon2) { +# match <- TRUE +# if (!((length(lat1) == length(lat2)) & (length(lon1) == length(lon2)))) { +# match <- FALSE +# } +# return(match) +#} + diff --git a/modules/Loading/Loading.R b/modules/Loading/Loading.R index cf97efc2..2de0406c 100644 --- a/modules/Loading/Loading.R +++ b/modules/Loading/Loading.R @@ -15,5 +15,6 @@ Loading <- function(recipe) { } else { stop("Incorrect time horizon.") } + return(data) } diff --git a/modules/Loading/testing_recipes/recipe_system5c3s-tas_downscaling.yml b/modules/Loading/testing_recipes/recipe_system5c3s-tas_downscaling.yml new file mode 100644 index 00000000..99e02c7d --- /dev/null +++ b/modules/Loading/testing_recipes/recipe_system5c3s-tas_downscaling.yml @@ -0,0 +1,62 @@ +# ▄████▄ ██████ ▓█████▄ ▒█████ █ █░███▄ █ ██████ ▄████▄ ▄▄▄ ██▓ ▓█████ +#▒██▀ ▀█ ▒██ ▒ ▒██▀ ██▌▒██▒ ██▒▓█░ █ ░█░██ ▀█ █ ▒██ ▒ ▒██▀ ▀█ ▒████▄ ▓██▒ ▓█ ▀ +#▒▓█ ▄ ░ ▓██▄ ░██ █▌▒██░ ██▒▒█░ █ ░█▓██ ▀█ ██▒░ ▓██▄ ▒▓█ ▄ ▒██ ▀█▄ ▒██░ ▒███ +#▒▓▓▄ ▄██▒ ▒ ██▒░▓█▄ ▌▒██ ██░░█░ █ ░█▓██▒ ▐▌██▒ ▒ ██▒▒▓▓▄ ▄██▒░██▄▄▄▄██ ▒██░ ▒▓█ ▄ +#▒ ▓███▀ ░▒██████▒▒░▒████▓ ░ ████▓▒░░░██▒██▓▒██░ ▓██░▒██████▒▒▒ ▓███▀ ░ ▓█ ▓██▒░██████▒░▒████▒ +#░ ░▒ ▒ ░▒ ▒▓▒ ▒ ░ ▒▒▓ ▒ ░ ▒░▒░▒░ ░ ▓░▒ ▒ ░ ▒░ ▒ ▒ ▒ ▒▓▒ ▒ ░░ ░▒ ▒ ░ ▒▒ ▓▒█░░ ▒░▓ ░░░ ▒░ ░ +# ░ ▒ ░ ░▒ ░ ░ ░ ▒ ▒ ░ ▒ ▒░ ▒ ░ ░ ░ ░░ ░ ▒░░ ░▒ ░ ░ ░ ▒ ▒ ▒▒ ░░ ░ ▒ ░ ░ ░ ░ +#░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ▒ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ▒ ░ ░ ░ +#░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ +#░ ░ ░ +Description: + Author: J. Ramon +Info: downscaling of seasonal predictions from coarse to fine grids + +Analysis: + Horizon: Seasonal + Variables: + name: tas + freq: monthly_mean + Datasets: + System: + name: ECMWF-SEAS5 + Multimodel: no + Reference: + name: ERA5 + Time: + sdate: '0501' + hcst_start: '2000' + hcst_end: '2005' + ftime_min: 1 + ftime_max: 1 +#sometimes we want the region for the obs to be bigger than for hcst + Region: + latmin: 34.1 + latmax: 45.1 + lonmin: -12.5 + lonmax: 6.35 + Regrid: + method: bilinear + type: none + Workflow: + Calibration: + method: raw + Skill: + metric: BSS10 BSS90 Mean_Bias_SS RPSS ROCSS + Downscaling: + # Assumption 1: leave-one-out cross-validation is always applied + # Assumption 2: for analogs, we select the best analog (minimum distance) + # TO DO: add downscaling to point locations + type: intbc # mandatory, 'none', 'int', 'intbc', 'intlr', 'analogs', 'logreg' + int_method: conservative # optional, regridding method accepted by CDO + bc_method: simple_bias # optional, 'simple_bias', 'calibration', 'quantile_mapping' + lr_method: # optional, 'basic', 'large_scale', '4nn' + log_reg_method: # optional, 'ens_mean', 'ens_mean_sd', 'sorted_members' + target_grid: /esarchive/recon/ecmwf/era5/monthly_mean/tas_f1h/tas_200002.nc # optional, nc file or grid accepted by CDO + nanalogs: # optional, number of analogs to be searched + Output_format: S2S4E +Run: + Loglevel: INFO + Terminal: yes + output_dir: /esarchive/scratch/vagudets/repos/auto-s2s/out-logs/ + code_dir: /esarchive/scratch/vagudets/repos/auto-s2s/ diff --git a/modules/Saving/R/get_filename.R b/modules/Saving/R/get_filename.R index f18a6fb4..1c925651 100644 --- a/modules/Saving/R/get_filename.R +++ b/modules/Saving/R/get_filename.R @@ -17,8 +17,7 @@ get_filename <- function(dir, recipe, var, date, agg, file.type) { switch(tolower(agg), "country" = {gg <- "-country"}, - "global" = {gg <- ""}, - "region" = {gg <- "-region"}) + "global" = {gg <- ""}) system <- gsub('.','', recipe$Analysis$Datasets$System$name, fixed = T) reference <- gsub('.','', recipe$Analysis$Datasets$Reference$name, fixed = T) diff --git a/modules/Skill/Skill.R b/modules/Skill/Skill.R index 95b6856a..fd27ba75 100644 --- a/modules/Skill/Skill.R +++ b/modules/Skill/Skill.R @@ -307,7 +307,7 @@ Skill <- function(recipe, data, agg = 'global') { } info(recipe$Run$logger, "##### SKILL METRIC COMPUTATION COMPLETE #####") # Save outputs -#NURIA: I think change the output_dir is a problem for future savings + #NURIA: I think change the output_dir is a problem for future savings if (recipe$Analysis$Workflow$Skill$save != 'none') { info(recipe$Run$logger, "##### START SAVING SKILL METRIC #####") } diff --git a/modules/Visualization/Visualization.R b/modules/Visualization/Visualization.R index 1f6e836d..a6b6bd75 100644 --- a/modules/Visualization/Visualization.R +++ b/modules/Visualization/Visualization.R @@ -210,3 +210,4 @@ Visualization <- function(recipe, } } } + diff --git a/tools/check_recipe.R b/tools/check_recipe.R index 57bece61..5b81420b 100644 --- a/tools/check_recipe.R +++ b/tools/check_recipe.R @@ -1,8 +1,6 @@ check_recipe <- function(recipe) { - # recipe: yaml recipe already read it - ## TODO: Adapt to decadal case - + ## TODO: set up logger-less case info(recipe$Run$logger, paste("Checking recipe:", recipe$recipe_path)) # --------------------------------------------------------------------- @@ -239,7 +237,9 @@ check_recipe <- function(recipe) { # WORKFLOW CHECKS # --------------------------------------------------------------------- - # Only one Calibration method allowed: + # Calibration + # If 'method' is FALSE/no/'none' or NULL, set to 'raw' + ## TODO: Review this check if ((is.logical(recipe$Analysis$Workflow$Calibration$method) && recipe$Analysis$Workflow$Calibration$method == FALSE) || tolower(recipe$Analysis$Workflow$Calibration$method) == 'none' || @@ -296,6 +296,109 @@ check_recipe <- function(recipe) { } } } + # Downscaling + ## TODO: Simplify checks (reduce number of lines) + ## TODO: Add saving checks + downscal_params <- lapply(recipe$Analysis$Workflow$Downscaling, tolower) + # Define accepted entries + DOWNSCAL_TYPES <- c("none", "int", "intbc", "intlr", "analogs", "logreg") + BC_METHODS <- c("simple_bias", "calibration", "quantile_mapping") + LR_METHODS <- c("basic", "large_scale", "4nn") + LOGREG_METHODS <- c("ens_mean", "ens_mean_sd", "sorted_members") + # Check downscaling type + if ("type" %in% names(downscal_params)) { + if (length(downscal_params$type) == 0) { + downscal_params$type <- "none" + warn(recipe$Run$logger, + paste("Downscaling 'type' is empty in the recipe, setting it to", + "'none'.")) + } + if (!(downscal_params$type %in% DOWNSCAL_TYPES)) { + error(recipe$Run$logger, + paste0("The type of Downscaling request in the recipe is not ", + "available. It must be one of the following: ", + paste(DOWNSCAL_TYPES, collapse = ", "), ".")) + error_status <- T + } + if ((downscal_params$type %in% c("int", "intbc", "intlr", "logreg")) && + (length(downscal_params$target_grid) == 0)) { + error(recipe$Run$logger, + paste("A target grid is required for the downscaling method", + "requested in the recipe.")) + error_status <- T + } + if (downscal_params$type == "int") { + if (length(downscal_params$int_method) == 0) { + error(recipe$Run$logger, + paste("Downscaling type 'int' was requested, but no", + "interpolation method is provided in the recipe.")) + error_status <- T + } + } else if (downscal_params$type == "intbc") { + if (length(downscal_params$int_method) == 0) { + error(recipe$Run$logger, + paste("Downscaling type 'int' was requested in the recipe, but no", + "interpolation method is provided.")) + error_status <- T + } + if (length(downscal_params$bc_method)== 0) { + error(recipe$Run$logger, + paste("Downscaling type 'intbc' was requested in the recipe, but", + "no bias correction method is provided.")) + error_status <- T + } else if (!(downscal_params$bc_method %in% BC_METHODS)) { + error(recipe$Run$logger, + paste0("The accepted Bias Correction methods for the downscaling", + " module are: ", paste(BC_METHODS, collapse = ", "), ".")) + error_status <- T + } + } else if (downscal_params$type == "intlr") { + if (length(downscal_params$int_method) == 0) { + error(recipe$Run$logger, + paste("Downscaling type 'intlr' was requested in the recipe, but", + "no interpolation method was provided.")) + error_status <- T + } + if (length(downscal_params$lr_method) == 0) { + error(recipe$Run$logger, + paste("Downscaling type 'intlr' was requested in the recipe, but", + "no linear regression method was provided.")) + error_status <- T + } else if (!(downscal_params$lr_method %in% LR_METHODS)) { + error(recipe$Run$logger, + paste0("The accepted linear regression methods for the", + " downscaling module are: ", + paste(LR_METHODS, collapse = ", "), ".")) + error_status <- T + } + } else if (downscal_params$type == "analogs") { + if (length(nanalogs) == 0) { + warn(recipe$Run$logger, + paste("Downscaling type is 'analogs, but the number of analogs", + "has not been provided in the recipe.")) + } + } else if (downscal_params$type == "logreg") { + if (length(downscal_params$int_method) == 0) { + error(recipe$Run$logger, + paste("Downscaling type 'logreg' was requested in the recipe, but", + "no interpolation method was provided.")) + error_status <- T + } + if (length(downscal_params$log_reg_method) == 0) { + error(recipe$Run$logger, + paste("Downscaling type 'logreg' was requested in the recipe,", + "but no logistic regression method is provided.")) + error_status <- T + } else if (!(downscal_params$log_reg_method %in% LOGREG_METHODS)) { + error(recipe$Run$logger, + paste0("The accepted logistic regression methods for the ", + "downscaling module are: ", + paste(LOGREG_METHODS, collapse = ", "), ".")) + error_status <- T + } + } + } + # Indices if ("Indices" %in% names(recipe$Analysis$Workflow)) { nino_indices <- paste0("nino", c("1+2", "3", "3.4", "4")) @@ -356,6 +459,7 @@ check_recipe <- function(recipe) { error_status <- T } } + # Probabilities if ("Probabilities" %in% names(recipe$Analysis$Workflow)) { if (is.null(recipe$Analysis$Workflow$Probabilities$percentiles)) { @@ -380,6 +484,7 @@ check_recipe <- function(recipe) { error_status <- T } } + # Visualization if ("Visualization" %in% names(recipe$Analysis$Workflow)) { PLOT_OPTIONS <- c("skill_metrics", "forecast_ensemble_mean", @@ -447,6 +552,7 @@ check_recipe <- function(recipe) { # RUN CHECKS # --------------------------------------------------------------------- + ## TODO: These checks should probably go first RUN_FIELDS = c("Loglevel", "Terminal", "output_dir", "code_dir") LOG_LEVELS = c("INFO", "DEBUG", "WARN", "ERROR", "FATAL") diff --git a/tools/data_summary.R b/tools/data_summary.R index 11f365cd..e3de9711 100644 --- a/tools/data_summary.R +++ b/tools/data_summary.R @@ -10,7 +10,8 @@ data_summary <- function(data_cube, recipe) { object_name <- deparse(substitute(data_cube)) if (recipe$Analysis$Variables$freq == "monthly_mean") { date_format <- "%b %Y" - } else if (recipe$Analysis$Variables$freq == "daily_mean") { + } else if ((recipe$Analysis$Variables$freq == "daily_mean") || + (recipe$Analysis$Variables$freq == "daily")) { date_format <- "%b %d %Y" } months <- unique(format(as.Date(data_cube$attrs$Dates), format = '%B')) -- GitLab From 91b5b7b1c27124831360887a395b3524be31e9db Mon Sep 17 00:00:00 2001 From: vagudets Date: Wed, 27 Sep 2023 16:49:09 +0200 Subject: [PATCH 295/388] Revert "Merge branch 'dev-Downscaling' into 'master'" This reverts merge request !65 --- conf/archive.yml | 8 +- modules/Calibration/Calibration.R | 3 +- modules/Downscaling/Downscaling.R | 295 ------- modules/Downscaling/tmp/Analogs.R | 550 ------------- modules/Downscaling/tmp/Intbc.R | 339 -------- modules/Downscaling/tmp/Interpolation.R | 767 ------------------ modules/Downscaling/tmp/Intlr.R | 559 ------------- modules/Downscaling/tmp/LogisticReg.R | 550 ------------- modules/Downscaling/tmp/Utils.R | 39 - modules/Loading/Loading.R | 1 - .../recipe_system5c3s-tas_downscaling.yml | 62 -- modules/Saving/R/get_filename.R | 3 +- modules/Skill/Skill.R | 2 +- modules/Visualization/Visualization.R | 1 - tools/check_recipe.R | 114 +-- tools/data_summary.R | 3 +- 16 files changed, 12 insertions(+), 3284 deletions(-) delete mode 100644 modules/Downscaling/Downscaling.R delete mode 100644 modules/Downscaling/tmp/Analogs.R delete mode 100644 modules/Downscaling/tmp/Intbc.R delete mode 100644 modules/Downscaling/tmp/Interpolation.R delete mode 100644 modules/Downscaling/tmp/Intlr.R delete mode 100644 modules/Downscaling/tmp/LogisticReg.R delete mode 100644 modules/Downscaling/tmp/Utils.R delete mode 100644 modules/Loading/testing_recipes/recipe_system5c3s-tas_downscaling.yml diff --git a/conf/archive.yml b/conf/archive.yml index 29489a97..a347dc40 100644 --- a/conf/archive.yml +++ b/conf/archive.yml @@ -5,9 +5,9 @@ esarchive: name: "ECMWF SEAS5" institution: "European Centre for Medium-Range Weather Forecasts" src: "exp/ecmwf/system5c3s/" - daily: {"tasmin":"/", "tasmax":"/"} daily_mean: {"tas":"_f6h/", "rsds":"_s0-24h/", "prlr":"_s0-24h/", "sfcWind":"_f6h/", + "tasmin":"_f24h/", "tasmax":"_f24h/", "ta300":"_f12h/", "ta500":"_f12h/", "ta850":"_f12h/", "g300":"_f12h/", "g500":"_f12h/", "g850":"_f12h/", "tdps":"_f6h/", "hurs":"_f6h/"} @@ -16,8 +16,7 @@ esarchive: "tasmin":"_f24h/", "tasmax":"_f24h/", "ta300":"_f12h/", "ta500":"_f12h/", "ta850":"_f12h/", "g300":"_f12h/", "g500":"_f12h/", "g850":"_f12h/", - "tdps":"_f6h/", "psl":"_f6h/", "tos":"_f6h/", - "hurs":"_f6h/"} + "tdps":"_f6h/", "psl":"_f6h/", "tos":"_f6h/"} nmember: fcst: 51 hcst: 25 @@ -186,8 +185,7 @@ esarchive: name: "ECMWF CERRA" institution: "European Centre for Medium-Range Weather Forecasts" src: "recon/ecmwf/cerra/" - daily: {"tasmax":"-r2631x1113/", "tasmin":"-r2631x1113/"} - daily_mean: {"hurs":"_f3h-r2631x1113/", "ps":"_f3h-r2631x1113/", "sfcWind":"_f3h-r2631x1113/", + daily_mean: {"hur":"_f3h-r2631x1113/", "ps":"_f3h-r2631x1113/", "sfcWind":"_f3h-r2631x1113/", "tas":"_f3h-r2631x1113/", "winddir":"_f3h-r2631x1113/"} monthly_mean: {"hurs":"_f3h-r2631x1113/", "ps":"_f3h-r2631x1113/", "sfcWind":"_f3h-r2631x1113/", "tas":"_f3h-r2631x1113/", "winddir":"_f3h-r2631x1113/","tasmin":"_f24h-r2631x1113/","tasmax":"_f24h-r2631x1113/"} diff --git a/modules/Calibration/Calibration.R b/modules/Calibration/Calibration.R index e41565a9..171b22cf 100644 --- a/modules/Calibration/Calibration.R +++ b/modules/Calibration/Calibration.R @@ -110,8 +110,7 @@ Calibration <- function(recipe, data) { fcst_calibrated <- NULL } } - } else if ((recipe$Analysis$Variables$freq == "daily_mean") || - (recipe$Analysis$Variables$freq == "daily")) { + } else if (recipe$Analysis$Variables$freq == "daily_mean") { # Daily data calibration using Quantile Mapping if (!(method %in% c("qmap"))) { error(recipe$Run$logger, diff --git a/modules/Downscaling/Downscaling.R b/modules/Downscaling/Downscaling.R deleted file mode 100644 index 15f5ea9b..00000000 --- a/modules/Downscaling/Downscaling.R +++ /dev/null @@ -1,295 +0,0 @@ -### Downscaling Module -source('modules/Downscaling/tmp/Interpolation.R') -source('modules/Downscaling/tmp/Intbc.R') -source('modules/Downscaling/tmp/Intlr.R') -source('modules/Downscaling/tmp/Analogs.R') -source('modules/Downscaling/tmp/LogisticReg.R') -source('modules/Downscaling/tmp/Utils.R') - -Downscaling <- function(recipe, data) { - # Function that downscale the hindcast using the method stated in the - # recipe. For the moment, forecast must be null. - # - # data: list of s2dv_cube objects containing the hcst, obs and fcst. - # recipe: object obtained when passing the .yml recipe file to read_yaml() - - type <- tolower(recipe$Analysis$Workflow$Downscaling$type) - - if (type == "none") { - hcst_downscal <- data$hcst - DOWNSCAL_MSG <- "##### NO DOWNSCALING PERFORMED #####" - - } else { - - if (!is.null(data$fcst)) { - warn(recipe$Run$logger, - "The downscaling will be only performed to the hindcast data") - data$fcst <- NULL - } - # Downscaling function params - int_method <- tolower(recipe$Analysis$Workflow$Downscaling$int_method) - bc_method <- tolower(recipe$Analysis$Workflow$Downscaling$bc_method) - lr_method <- tolower(recipe$Analysis$Workflow$Downscaling$lr_method) - log_reg_method <- tolower(recipe$Analysis$Workflow$Downscaling$log_reg_method) - target_grid <- tolower(recipe$Analysis$Workflow$Downscaling$target_grid) - nanalogs <- as.numeric(recipe$Analysis$Workflow$Downscaling$nanalogs) - size <- recipe$Analysis$Workflow$Downscaling$size - - if (is.null(recipe$Analysis$ncores)) { - ncores <- 1 - } else { - ncores <- recipe$Analysis$ncores - } - - #TO DO: add the parametre loocv where it corresponds - if (is.null(recipe$Analysis$loocv)) { - loocv <- TRUE - } else { - loocv <- recipe$Analysis$loocv - } - - DOWNSCAL_TYPES <- c("none", "int", "intbc", "intlr", "analogs", "logreg") - BC_METHODS <- c("quantile_mapping", "bias", "evmos", "mse_min", "crps_min", "rpc-based", "qm") - LR_METHODS <- c("basic", "large-scale", "4nn") - LOG_REG_METHODS <- c("ens_mean", "ens_mean_sd", "sorted_members") - - if (!(type %in% DOWNSCAL_TYPES)) { - stop("Downscaling type in the recipe is not available. Accepted types ", - "are 'none', 'int', 'intbc', 'intlr', 'analogs', 'logreg'.") - } - - if (type == "int") { - if (is.null(int_method)) { - stop("Please provide one interpolation method in the recipe.") - } - - if (is.null(target_grid)) { - stop("Please provide the target grid in the recipe.") - } - - # Ensure that observations are in the same grid as experiments - # Only needed for this method because the others already return the - # observations - latmin <- data$hcst$coords$latitude[1] - lonmin <- data$hcst$coords$longitude[1] - latmax <- data$hcst$coords$latitude[length(data$hcst$coords$latitude)] - lonmax <- data$hcst$coords$longitude[length(data$hcst$coords$longitude)] - hcst_downscal <- CST_Interpolation(data$hcst, - points = NULL, - method_remap = int_method, - target_grid = target_grid, - lat_dim = "latitude", - lon_dim = "longitude", - region = c(lonmin, lonmax, latmin, latmax), - method_point_interp = NULL) - - obs_downscal <- CST_Interpolation(data$obs, - points = NULL, - method_remap = int_method, - target_grid = target_grid, - lat_dim = "latitude", - lon_dim = "longitude", - region = c(lonmin, lonmax, latmin, latmax), - method_point_interp = NULL) - - hcst_downscal$obs <- obs_downscal$exp - - DOWNSCAL_MSG <- "##### DOWNSCALING COMPLETE #####" - } else if (type == "intbc") { - if (length(int_method) == 0) { - stop("Please provide one (and only one) interpolation method in the recipe.") - } - - if (is.null(bc_method)) { - stop("Please provide one bias-correction method in the recipe. Accepted ", - "methods are 'quantile_mapping', 'bias', 'evmos', 'mse_min', 'crps_min' ", - "'rpc-based', 'qm'. ") - } - - if (is.null(target_grid)) { - stop("Please provide the target grid in the recipe.") - } - - if (!(bc_method %in% BC_METHODS)) { - stop(paste0(bc_method, " method in the recipe is not available. Accepted methods ", - "are 'quantile_mapping', 'bias', 'evmos', 'mse_min', 'crps_min' ", - "'rpc-based', 'qm'.")) - } - - hcst_downscal <- CST_Intbc(data$hcst, data$obs, - target_grid = target_grid, - bc_method = bc_method, - int_method = int_method, - points = NULL, - method_point_interp = NULL, - lat_dim = "latitude", - lon_dim = "longitude", - sdate_dim = "syear", - member_dim = "ensemble", - region = NULL, - ncores = ncores) - DOWNSCAL_MSG <- "##### DOWNSCALING COMPLETE #####" - } else if (type == "intlr") { - if (length(int_method) == 0) { - stop("Please provide one (and only one) interpolation method in the recipe.") - } - - if (is.null(lr_method)) { - stop("Please provide one linear regression method in the recipe. Accepted ", - "methods are 'basic', 'large-scale', '4nn'.") - } - - if (is.null(target_grid)) { - stop("Please provide the target grid in the recipe.") - } - - if (!(lr_method %in% LR_METHODS)) { - stop(paste0(lr_method, " method in the recipe is not available. Accepted methods ", - "are 'basic', 'large-scale', '4nn'.")) - } - - # TO DO: add the possibility to have the element 'pred' in 'data' - if (lr_method == "large-scale") { - if (is.null(data$pred$data)) { - stop("Please provide the large scale predictors in the element 'data$pred$data'.") - } - } else { - data$pred$data <- NULL - } - - hcst_downscal <- CST_Intlr(data$hcst, data$obs, - lr_method = lr_method, - target_grid = target_grid, - points = NULL, - int_method = int_method, - method_point_interp = NULL, - predictors = data$pred$data, - lat_dim = "latitude", - lon_dim = "longitude", - sdate_dim = "syear", - time_dim = "time", - member_dim = "ensemble", - large_scale_predictor_dimname = 'vars', - loocv = loocv, - region = NULL, - ncores = ncores) - - DOWNSCAL_MSG <- "##### DOWNSCALING COMPLETE #####" - } else if (type == "analogs") { - - if (is.null(nanalogs)) { - warning("The number of analogs for searching has not been provided in the ", - "recipe. Setting it to 3.") - nanalogs <- 3 - } - - if (!is.null(size) & recipe$Analysis$Variables$freq == "monthly_mean") { - size <- NULL - warning("Size is set to NULL. ", - "It must be NULL for the monthly input data.") - } - - if (!is.null(size)) { - dum <- data$obs$data ## keep obs data before the window process to provide it later as the output - data$obs$data <- .generate_window(data$obs$data, - sdate_dim = 'syear', - time_dim = 'time', - loocv = TRUE, - size = size) - data$obs$data <- Apply(data$obs$data, - target_dims="window", - fun=function (x) x[!is.na(x)])$output1 - } - - hcst_downscal <- CST_Analogs(data$hcst, data$obs, - grid_exp = data$hcst$attrs$source_files[ - which(!is.na(data$hcst$attrs$source_files))[1]], - nanalogs = nanalogs, - fun_analog = "wmean", - lat_dim = "latitude", - lon_dim = "longitude", - sdate_dim = "syear", - time_dim = "time", - member_dim = "ensemble", - region = NULL, - return_indices = FALSE, - loocv_window = loocv, - ncores = ncores) - - if (!is.null(size)) { - hcst_downscal$obs$data <- Apply(dum, target_dims=c("time", "smonth"), - function (x) {x[1:(dim(data$hcst$data)["time"]), 2]}, - ncores = ncores, - output_dims = "time")$output1 ## 2nd month is the target month - } - - DOWNSCAL_MSG <- "##### DOWNSCALING COMPLETE #####" - } else if (type == "logreg") { - - if (length(int_method) == 0) { - stop("Please provide one (and only one) interpolation method in the recipe.") - } - - if (is.null(log_reg_method)) { - stop("Please provide one logistic regression method in the recipe. Accepted ", - "methods are 'ens_mean', 'ens_mean_sd', 'sorted_members'.") - } - - if (is.null(target_grid)) { - stop("Please provide the target grid in the recipe.") - } - - # Since we are forcing to create three categories, and applying cross-validation, - # we need at least six years of data for the logistic regression function to not - # crash - if (dim(data$hcst$data)[names(dim(data$hcst$data)) == "syear"] <= 5) { - stop("The number of start dates is insufficient for the logisitic regression method. ", - "Please provide six or more.") - } - - if (!(log_reg_method %in% LOG_REG_METHODS)) { - stop(paste0(log_reg_method, " method in the recipe is not available. Accepted methods ", - "are 'ens_mean', 'ens_mean_sd', 'sorted_members'.")) - } - - hcst_downscal <- CST_LogisticReg(data$hcst, data$obs, - target_grid = target_grid, - int_method = int_method, - log_reg_method = log_reg_method, - probs_cat = c(1/3,2/3), - return_most_likely_cat = FALSE, - points = NULL, - method_point_interp = NULL, - lat_dim = "latitude", - lon_dim = "longitude", - sdate_dim = "syear", - member_dim = "ensemble", - region = NULL, - loocv = loocv, - ncores = ncores) - - DOWNSCAL_MSG <- "##### DOWNSCALING COMPLETE #####" - } - } - print(DOWNSCAL_MSG) - - # Saving - if (recipe$Analysis$Workflow$Downscaling$save != 'none') { - info(recipe$Run$logger, "##### START SAVING CALIBRATED DATA #####") - } - ## TODO: What do we do with the full values? - recipe$Run$output_dir <- paste0(recipe$Run$output_dir, - "/outputs/Downscaling/") - # if ((recipe$Analysis$Workflow$Downscaling$save %in% - # c('all', 'exp_only', 'fcst_only')) && (!is.null(data$fcst))) { - # save_forecast(recipe = recipe, data_cube = data$fcst, type = 'fcst') - # } - if (recipe$Analysis$Workflow$Downscaling$save %in% c('all', 'exp_only')) { - save_forecast(recipe = recipe, data_cube = hcst_downscal$exp, type = 'hcst') - } - if (recipe$Analysis$Workflow$Downscaling$save == 'all') { - save_observations(recipe = recipe, data_cube = hcst_downscal$obs) - } - - return(list(hcst = hcst_downscal$exp, obs = hcst_downscal$obs, fcst = NULL)) -} diff --git a/modules/Downscaling/tmp/Analogs.R b/modules/Downscaling/tmp/Analogs.R deleted file mode 100644 index 99fc45e7..00000000 --- a/modules/Downscaling/tmp/Analogs.R +++ /dev/null @@ -1,550 +0,0 @@ -#'@rdname CST_Analogs -#'@title Downscaling using Analogs based on large scale fields. -#' -#'@author J. Ramon, \email{jaume.ramon@bsc.es} -#' -#'@description This function performs a downscaling using Analogs. To compute -#'the analogs given a coarse-scale field, the function looks for days with -#'similar conditions in the historical observations. The coarse scale and -#'observation data can be either global or regional. In the latter case, the -#'region is defined by the user. In principle, the coarse and observation data -#'should be of the same variable, although different variables can also be admitted. -#'The analogs function will find the N best analogs based in Minimum Euclidean -#'distance. -#' -#'The search of analogs must be done in the longest dataset posible, but might -#'require high-memory computational resources. This is important since it is -#'necessary to have a good representation of the possible states of the field in -#'the past, and therefore, to get better analogs. The function can also look for -#'analogs within a window of D days, but is the user who has to define that window. -#'Otherwise, the function will look for analogs in the whole dataset. This function -#'is intended to downscale climate prediction data (i.e., sub-seasonal, seasonal -#'and decadal predictions) but can admit climate projections or reanalyses. It does -#'not have constrains of specific region or variables to downscale. -#'@param exp an 's2dv' object with named dimensions containing the experimental field on -#'the coarse scale for which the downscaling is aimed. The object must have, at least, -#'the dimensions latitude, longitude, start date and time. The object is expected to be -#'already subset for the desired region. Data can be in one or two integrated regions, e.g., -#'crossing the Greenwich meridian. To get the correct results in the latter case, -#'the borders of the region should be specified in the parameter 'region'. See parameter -#''region'. -#'@param obs an 's2dv' object with named dimensions containing the observational field. -#'The object must have, at least, the dimensions latitude, longitude and start date. -#'The object is expected to be already subset for the desired region. -#'@param obs2 an 's2dv' object with named dimensions containing a different observational -#'field to that in 'obs'. If provided, these observations will be used in the training, -#'i.e. the searching for analogs, so that they should be in a coarser grid to those in -#''obs'. Training with observations on a grid with a spatial resolution closer to that -#'in 'exp', will in principle ensure better results. The object must have, at least, the -#'dimensions latitude, longitude and start date. The object is expected to be already -#'subset for the desired region. -#'@param grid_exp a character vector with a path to an example file of the exp data. -#'It can be either a path to another NetCDF file which to read the target grid from -#'(a single grid must be defined in such file) or a character vector indicating the -#'coarse grid to be passed to CDO, and it must be a grid recognised by CDO. -#'@param nanalogs an integer indicating the number of analogs to be searched -#'@param fun_analog a function to be applied over the found analogs. Only these options -#'are valid: "mean", "wmean", "max", "min", "median" or NULL. If set to NULL (default), -#'the function returns the found analogs. -#'@param lat_dim a character vector indicating the latitude dimension name in the element -#''data' in exp and obs. Default set to "lat". -#'@param lon_dim a character vector indicating the longitude dimension name in the element -#''data' in exp and obs. Default set to "lon". -#'@param sdate_dim a character vector indicating the start date dimension name in the -#'element 'data' in exp and obs. Default set to "sdate". -#'@param time_dim a character vector indicating the time dimension name in the element -#''data' in exp and obs. Default set to "time". -#'@param member_dim a character vector indicating the member dimension name in the element -#''data' in exp and obs. Default set to "member". -#'@param region a numeric vector indicating the borders of the region defined in exp. -#'It consists of four elements in this order: lonmin, lonmax, latmin, latmax. lonmin refers -#'to the left border, while lonmax refers to the right border. latmin indicates the lower -#'border, whereas latmax indicates the upper border. If set to NULL (default), the function -#'takes the first and last elements of the latitudes and longitudes. -#'@param return_indices a logical vector indicating whether to return the indices of the -#'analogs together with the downscaled fields. Default to FALSE. -#'@param loocv_window a logical vector only to be used if 'obs' does not have the dimension -#''window'. It indicates whether to apply leave-one-out cross-validation in the creation -#'of the window. It is recommended to be set to TRUE. Default to TRUE. -#'@param ncores an integer indicating the number of cores to use in parallel computation. -#'The default value is NULL. -#'@return An 's2dv' object. The element 'data' contains the dowscaled field, 'lat' the -#'downscaled latitudes, and 'lon' the downscaled longitudes. If fun_analog is set to NULL -#'(default), the output array in 'data' also contains the dimension 'analog' with the best -#'analog days. -#'@examples -#'exp <- rnorm(15000) -#'dim(exp) <- c(member = 5, lat = 4, lon = 5, sdate = 5, time = 30) -#'exp_lons <- 1:5 -#'exp_lats <- 1:4 -#'obs <- rnorm(27000) -#'dim(obs) <- c(lat = 12, lon = 15, sdate = 5, time = 30) -#'obs_lons <- seq(0,6, 6/14) -#'obs_lats <- seq(0,6, 6/11) -#'exp <- s2dv_cube(data = exp, lat = exp_lats, lon = exp_lons) -#'obs <- s2dv_cube(data = obs, lat = obs_lats, lon = obs_lons) -#'downscaled_field <- CST_Analogs(exp = exp, obs = obs, grid_exp = 'r360x180') -#'@export -CST_Analogs <- function(exp, obs, grid_exp, obs2 = NULL, nanalogs = 3, fun_analog = NULL, lat_dim = "lat", - lon_dim = "lon", sdate_dim = "sdate", time_dim = "time", member_dim = "member", - region = NULL, return_indices = FALSE, loocv_window = TRUE, ncores = NULL) { - - # input exp and obs must be s2dv_cube objects - if (!inherits(exp,'s2dv_cube')) { - stop("Parameter 'exp' must be of the class 's2dv_cube'") - } - - # input exp and obs must be s2dv_cube objects - if (!inherits(obs,'s2dv_cube')) { - stop("Parameter 'obs' must be of the class 's2dv_cube'") - } - - res <- Analogs(exp = exp$data, obs = obs$data, exp_lats = exp$coords[[lat_dim]], - exp_lons = exp$coords[[lon_dim]], obs_lats = obs$coords[[lat_dim]], - obs_lons = obs$coords[[lon_dim]], grid_exp = grid_exp, nanalogs = nanalogs, - fun_analog = fun_analog, lat_dim = lat_dim, lon_dim = lon_dim, - sdate_dim = sdate_dim, time_dim = time_dim, member_dim = member_dim, - region = region, return_indices = return_indices, loocv_window = loocv_window, - ncores = ncores) - - # Modify data, lat and lon in the origina s2dv_cube, adding the downscaled data - exp$data <- res$data - exp$dims <- dim(exp$data) - exp$coords[[lon_dim]] <- res$lon - exp$coords[[lat_dim]] <- res$lat - - obs$data <- res$obs - obs$dims <- dim(obs$data) - obs$coords[[lon_dim]] <- res$lon - obs$coords[[lat_dim]] <- res$lat - - res_s2dv <- list(exp = exp, obs = obs) - return(res_s2dv) -} - -#'@rdname Analogs -#'@title Downscaling using Analogs based on large scale fields. -#' -#'@author J. Ramon, \email{jaume.ramon@bsc.es} -#'@author Ll. Lledó, \email{llorenc.lledo@ecmwf.int} -#' -#'@description This function performs a downscaling using Analogs. To compute -#'the analogs given a coarse-scale field, the function looks for days with -#'similar conditions in the historical observations. The coarse scale and -#'observation data can be either global or regional. In the latter case, the -#'region is defined by the user. In principle, the coarse and observation data -#'should be of the same variable, although different variables can also be admitted. -#'The analogs function will find the N best analogs based in Minimum Euclidean -#'distance. -#' -#'The search of analogs must be done in the longest dataset posible, but might -#'require high-memory computational resources. This is important since it is -#'necessary to have a good representation of the possible states of the field in -#'the past, and therefore, to get better analogs. The function can also look for -#'analogs within a window of D days, but is the user who has to define that window. -#'Otherwise, the function will look for analogs in the whole dataset. This function -#'is intended to downscale climate prediction data (i.e., sub-seasonal, seasonal -#'and decadal predictions) but can admit climate projections or reanalyses. It does -#'not have constrains of specific region or variables to downscale. -#'@param exp an array with named dimensions containing the experimental field on the -#'coarse scale for which the downscaling is aimed. The object must have, at least, -#'the dimensions latitude, longitude, start date and time. The object is expected to be -#'already subset for the desired region. Data can be in one or two integrated regions, e.g., -#'crossing the Greenwich meridian. To get the correct results in the latter case, -#'the borders of the region should be specified in the parameter 'region'. See parameter -#''region'. -#'@param obs an array with named dimensions containing the observational field. The object -#'must have, at least, the dimensions latitude, longitude, start date and time. The object -#'is expected to be already subset for the desired region. Optionally, 'obs' can have the -#'dimension 'window', containing the sampled fields into which the function will look for -#'the analogs. See function 'generate_window()'. Otherwise, the function will look for -#'analogs using all the possible fields contained in obs. -#'@param exp_lats a numeric vector containing the latitude values in 'exp'. Latitudes must -#'range from -90 to 90. -#'@param exp_lons a numeric vector containing the longitude values in 'exp'. Longitudes -#'can range from -180 to 180 or from 0 to 360. -#'@param obs_lats a numeric vector containing the latitude values in 'obs'. Latitudes must -#'range from -90 to 90. -#'@param obs_lons a numeric vector containing the longitude values in 'obs'. Longitudes -#'can range from -180 to 180 or from 0 to 360. -#'@param grid_exp a character vector with a path to an example file of the exp data. -#'It can be either a path to another NetCDF file which to read the target grid from -#'(a single grid must be defined in such file) or a character vector indicating the -#'coarse grid to be passed to CDO, and it must be a grid recognised by CDO. -#'@param obs2 an 's2dv' object with named dimensions containing a different observational -#'field to that in 'obs'. If provided, these observations will be used in the training, -#'i.e. the searching for analogs, so that they should be in a coarser grid to those in -#''obs'. Training with observations on a grid with a spatial resolution closer to that -#'in 'exp', will in principle ensure better results. The object must have, at least, the -#'dimensions latitude, longitude and start date. The object is expected to be already -#'subset for the desired region. -#'@param nanalogs an integer indicating the number of analogs to be searched. -#'@param fun_analog a function to be applied over the found analogs. Only these options -#'are valid: "mean", "wmean", "max", "min", "median" or NULL. If set to NULL (default), -#'the function returns the found analogs. -#'@param lat_dim a character vector indicating the latitude dimension name in the element -#''data' in exp and obs. Default set to "lat". -#'@param lon_dim a character vector indicating the longitude dimension name in the element -#''data' in exp and obs. Default set to "lon". -#'@param sdate_dim a character vector indicating the start date dimension name in the -#'element 'data' in exp and obs. Default set to "sdate". -#'@param time_dim a character vector indicating the time dimension name in the element -#''data' in exp and obs. Default set to "time". -#'@param member_dim a character vector indicating the member dimension name in the element -#''data' in exp and obs. Default set to "member". -#'@param region a numeric vector indicating the borders of the region defined in exp. -#'It consists of four elements in this order: lonmin, lonmax, latmin, latmax. lonmin refers -#'to the left border, while lonmax refers to the right border. latmin indicates the lower -#'border, whereas latmax indicates the upper border. If set to NULL (default), the function -#'takes the first and last elements of the latitudes and longitudes. -#'@param return_indices a logical vector indicating whether to return the indices of the -#'analogs together with the downscaled fields. The indices refer to the position of the -#'element in the vector time * start_date. If 'obs' contain the dimension 'window', it will -#'refer to the position of the element in the dimension 'window'. Default to FALSE. -#'@param loocv_window a logical vector only to be used if 'obs' does not have the dimension -#''window'. It indicates whether to apply leave-one-out cross-validation in the creation -#'of the window. It is recommended to be set to TRUE. Default to TRUE. -#'@param ncores an integer indicating the number of cores to use in parallel computation. -#'The default value is NULL. -#'@import multiApply -#'@import CSTools -#'@importFrom s2dv InsertDim CDORemap -#'@importFrom FNN get.knnx -#' -#'@seealso \code{\link[s2dverification]{CDORemap}} -#' -#'@return A list of three elements. 'data' contains the dowscaled field, 'lat' the -#'downscaled latitudes, and 'lon' the downscaled longitudes. If fun_analog is set to NULL -#'(default), the output array in 'data' also contains the dimension 'analog' with the best -#'analog days. -#'@examples -#'exp <- rnorm(15000) -#'dim(exp) <- c(member = 5, lat = 4, lon = 5, sdate = 5, time = 30) -#'exp_lons <- 1:5 -#'exp_lats <- 1:4 -#'obs <- rnorm(27000) -#'dim(obs) <- c(lat = 12, lon = 15, sdate = 5, time = 30) -#'obs_lons <- seq(0,6, 6/14) -#'obs_lats <- seq(0,6, 6/11) -#'downscaled_field <- Analogs(exp = exp, obs = obs, exp_lats = exp_lats, exp_lons = exp_lons, -#'obs_lats = obs_lats, obs_lons = obs_lons, grid_exp = 'r360x180') -#'@export -Analogs <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, grid_exp, obs2 = NULL, - obs2_lats = NULL, obs2_lons = NULL, nanalogs = 3, fun_analog = NULL, - lat_dim = "lat", lon_dim = "lon", sdate_dim = "sdate", time_dim = "time", - member_dim = "member", region = NULL, return_indices = FALSE, - loocv_window = TRUE, ncores = NULL) { - #----------------------------------- - # Checkings - #----------------------------------- - if (!inherits(grid_exp, 'character')) { - stop("Parameter 'grid_exp' must be of class 'character'. It can be either a path ", - "to another NetCDF file which to read the target grid from (a single grid must be ", - "defined in such file) or a character vector indicating the coarse grid to ", - "be passed to CDO, and it must be a grid recognised by CDO or a NetCDF file.") - } - - if (!inherits(nanalogs, 'numeric')) { - stop("Parameter 'nanalogs' must be of the class 'numeric'") - } - - if (!inherits(lat_dim, 'character')) { - stop("Parameter 'lat_dim' must be of the class 'character'") - } - - if (!inherits(lon_dim, 'character')) { - stop("Parameter 'lon_dim' must be of the class 'character'") - } - - if (!inherits(sdate_dim, 'character')) { - stop("Parameter 'sdate_dim' must be of the class 'character'") - } - - if (!inherits(time_dim, 'character')) { - stop("Parameter 'time_dim' must be of the class 'character'") - } - - # Do not allow synonims for lat (latitude), lon (longitude) and time (sdate) dimension names - if (is.na(match(lon_dim, names(dim(exp)))) | is.na(match(lon_dim, names(dim(obs))))) { - stop("Missing longitude dimension in 'exp' and/or 'obs', or does not match the parameter ", - "'lon_dim'") - } - - if (is.na(match(lat_dim, names(dim(exp)))) | is.na(match(lat_dim, names(dim(obs))))) { - stop("Missing latitude dimension in 'exp' and/or 'obs', or does not match the parameter ", - "'lat_dim'") - } - - if (is.na(match(sdate_dim, names(dim(exp)))) | is.na(match(sdate_dim, names(dim(obs))))) { - stop("Missing start date dimension in 'exp' and/or 'obs', or does not match the parameter ", - "'sdate_dim'") - } - - if (is.na(match(time_dim, names(dim(exp)))) | is.na(match(time_dim, names(dim(obs))))) { - stop("Missing time dimension in 'exp' and/or 'obs', or does not match the parameter ", - "'time_dim'") - } - - # Ensure we have enough data to interpolate from high-res to coarse grid - #if ((obs_lats[1] > exp_lats[1]) | (obs_lats[length(obs_lats)] < exp_lats[length(exp_lats)]) | - # (obs_lons[1] > exp_lons[1]) | (obs_lons[length(obs_lons)] < exp_lons[length(exp_lons)])) { - - # stop("There are not enough data in 'obs'. Please to add more latitudes or ", - # "longitudes.") - #} - - # the code is not yet prepared to handle members in the observations - restore_ens <- FALSE - if (member_dim %in% names(dim(obs))) { - if (identical(as.numeric(dim(obs)[member_dim]), 1)) { - restore_ens <- TRUE - obs <- ClimProjDiags::Subset(x = obs, along = member_dim, indices = 1, drop = 'selected') - } else { - stop("Not implemented for observations with members ('obs' can have 'member_dim', ", - "but it should be of length = 1).") - } - } - - if (!is.null(obs2)) { - # the code is not yet prepared to handle members in the observations - if (member_dim %in% names(dim(obs2))) { - if (identical(as.numeric(dim(obs2)[member_dim]), 1)) { - obs2 <- ClimProjDiags::Subset(x = obs2, along = member_dim, indices = 1, drop = 'selected') - } else { - stop("Not implemented for observations with members ('obs2' can have 'member_dim', ", - "but it should be of length = 1).") - } - } - - if (is.null(obs2_lats) | is.null(obs2_lons)) { - stop("Missing latitudes and/or longitudes for the provided training observations. Please ", - "provide them with the parametres 'obs2_lats' and 'obs2_lons'") - } - - if (is.na(match(lon_dim, names(dim(obs2))))) { - stop("Missing longitude dimension in 'obs2', or does not match the parameter 'lon_dim'") - } - - if (is.na(match(lat_dim, names(dim(obs2))))) { - stop("Missing latitude dimension in 'obs2', or does not match the parameter 'lat_dim'") - } - - if (is.na(match(sdate_dim, names(dim(obs2))))) { - stop("Missing start date dimension in 'obs2', or does not match the parameter 'sdate_dim'") - } - - if (is.na(match(time_dim, names(dim(obs2))))) { - stop("Missing time dimension in 'obs2', or does not match the parameter 'time_dim'") - } - } - ## ncores - if (!is.null(ncores)) { - if (!is.numeric(ncores) | any(ncores %% 1 != 0) | any(ncores < 0) | - length(ncores) > 1) { - stop("Parameter 'ncores' must be a positive integer.") - } - } - - # Select a function to apply to the analogs selected for a given observation - if (!is.null(fun_analog)) { - stopifnot(fun_analog %in% c("mean", "wmean", "max", "min", "median")) - } - - if (!is.null(obs2)) { - obs_train <- obs2 - obs_train_lats <- obs2_lats - obs_train_lons <- obs2_lons - } else { - obs_train <- obs - obs_train_lats <- obs_lats - obs_train_lons <- obs_lons - } - - # Correct indices later if cross-validation - loocv_correction <- FALSE - if ( !("window" %in% names(dim(obs_train))) & loocv_window) { - loocv_correction <- TRUE - } - - #----------------------------------- - # Interpolate high-res observations to the coarse grid - #----------------------------------- - if (is.null(region)) { - warning("The borders of the downscaling region have not been provided. Assuming the four borders of the ", - "downscaling region are defined by the first and last elements of the parametres 'exp_lats' and ", - "'exp_lons'.") - region <- c(exp_lons[1], exp_lons[length(exp_lons)], exp_lats[1], exp_lats[length(exp_lats)]) - } - - obs_interpolated <- Interpolation(exp = obs_train, lats = obs_train_lats, lons = obs_train_lons, - target_grid = grid_exp, lat_dim = lat_dim, lon_dim = lon_dim, - method_remap = "conservative", region = region, ncores = ncores) - # If after interpolating 'obs' data the coordinates do not match, the exp data is interpolated to - # the same grid to force the matching - if (!.check_coords(lat1 = as.numeric(obs_interpolated$lat), lat2 = exp_lats, lon1 = as.numeric(obs_interpolated$lon), lon2 = exp_lons)) { - exp_interpolated <- Interpolation(exp = exp, lats = exp_lats, lons = exp_lons, target_grid = grid_exp, - lat_dim = lat_dim, lon_dim = lon_dim, method_remap = "conservative", - region = region, ncores = ncores)$data - } else { - exp_interpolated <- exp - } - - # Create window if user does not have it in the training observations - if ( !("window" %in% names(dim(obs_interpolated$data))) ) { - obs_train_interpolated <- .generate_window(obj = obs_interpolated$data, sdate_dim = sdate_dim, - time_dim = time_dim, loocv = loocv_window, ncores = ncores) - obs_hres <- .generate_window(obj = obs, sdate_dim = sdate_dim, time_dim = time_dim, loocv = loocv_window, ncores = ncores) - } else { - obs_train_interpolated <- obs_interpolated$data - dim(obs_train_interpolated) <- dim(obs_train_interpolated)[-which(names(dim(obs_train_interpolated))=="time")] - obs_hres <- obs - dim(obs_hres) <- dim(obs_hres)[-which(names(dim(obs_hres))=="time")] - } - - #----------------------------------- - # Reshape train and test - #----------------------------------- - res.data <- Apply(list(obs_train_interpolated, exp_interpolated, obs_hres), - target_dims = list(c("window", lat_dim, lon_dim), c(lat_dim, lon_dim), - c("window", lat_dim, lon_dim)), - fun = function(tr, te, ob) .analogs(train = tr, test = te, obs_hres = ob, k = nanalogs, - fun_analog = fun_analog), ncores = ncores)$output1 - - # Return the indices of the best analogs - if (return_indices) { - res.ind <- Apply(list(obs_train_interpolated, exp_interpolated, obs_hres), - target_dims = list(c("window", lat_dim, lon_dim), c(lat_dim, lon_dim), - c("window", lat_dim, lon_dim)), - fun = function(tr, te, ob) .analogs(train = tr, test = te, obs_hres = ob, k = nanalogs, - fun_analog = fun_analog, return_indices = TRUE), ncores = ncores, output_dims = 'ind')$output1 - - # If cross-validation has been applied, correct the indices - if (loocv_correction) { - nsdates <- dim(res.ind)[names(dim(res.ind)) == sdate_dim] - ntimes <- dim(res.ind)[names(dim(res.ind)) == time_dim] - res.ind <- Apply(res.ind, target_dims = c("ind", sdate_dim), function(x) - sapply(1:nsdates, function(s) seq(ntimes * nsdates)[ - (ntimes * (s - 1) + 1:ntimes)][x[, s]]), - output_dims = c("ind", sdate_dim), ncores = ncores)$output1 - } - - # restore ensemble dimension in observations if it existed originally - if (restore_ens) { - obs <- s2dv::InsertDim(obs, posdim = 1, lendim = 1, name = member_dim) - } - - res <- list(data = res.data, ind = res.ind, obs = obs, lon = obs_lons, lat = obs_lats) - } - else { - # restore ensemble dimension in observations if it existed originally - if (restore_ens) { - obs <- s2dv::InsertDim(obs, posdim = 1, lendim = 1, name = member_dim) - } - - res <- list(data = res.data, obs = obs, lon = obs_lons, lat = obs_lats) - } - - return(res) -} - -# For each element in test, find the indices of the k nearest neigbhors in train -.analogs <- function(train, test, obs_hres, k, fun_analog, return_indices = FALSE) { - - require(FNN) - - # train and obs_hres dim: 3 dimensions window, lat and lon (in this order) - # test dim: 2 dimensions lat and lon (in this order) - # Number of lats/lons of the high-resolution data - space_dims_hres <- dim(obs_hres)[c(2,3)] - - # Reformat train and test as an array with (time, points) - train <- apply(train, 1, as.vector); names(dim(train))[1] <- "space" - test <- as.vector(test) - obs_hres <- apply(obs_hres, 1, as.vector); names(dim(obs_hres))[1] <- "space" - - # Identify and remove NA's - idx_na_tr <- is.na(train[ , 1]) - idx_na_te <- is.na(test) - idx_na <- idx_na_tr | idx_na_te - tr_wo_na <- t(train[!idx_na , ]) - te_wo_na <- test[!idx_na] - te_wo_na <- InsertDim(data = te_wo_na, posdim = 1, lendim = 1, name = "time") - - knn.ind <- get.knnx(tr_wo_na, te_wo_na, k) - - dist <- knn.ind$nn.dist - idx <- knn.ind$nn.index - - # Either return only the indices or the analogs - if (return_indices) { - res <- as.numeric(idx) - } else { - res <- obs_hres[ , idx] - dim(res) <- c(space_dims_hres, analogs = k) - - if (!is.null(fun_analog)) { - if (fun_analog == "wmean") { - weight <- 1 / dist - res <- apply(res, c(1,2), function(x) weighted.mean(x, weight)) - } else if (fun_analog == "min") { - res<-res[,,which.min(dist)] - } else if (fun_analog == "max") { - res<-res[,,which.max(dist)] - } else { - res <- apply(res, c(1,2), fun_analog) - } - } - } - - return(res) -} - - -# Add the dimension window to an array that contains, at least, the start date and time -# dimensions -# object has at least dimensions sdate and time -.generate_window <- function(obj, sdate_dim, time_dim, loocv, size = NULL, ncores = NULL) { - - rsdates <- 1:dim(obj)[names(dim(obj)) == sdate_dim] - ntimes <- dim(obj)[names(dim(obj)) == time_dim] - rtimes <- 1:dim(obj)[names(dim(obj)) == time_dim] - - # Generate a window containing all the data - if (is.null(size)) { - - # Generate window removing one start date each time (leave-one-out cross-validation) - if (loocv) { - obj_window <- Apply(obj, target_dims = c(time_dim, sdate_dim), - fun = function(x) sapply(rsdates, function(s) as.vector(x[ rtimes, -s])), - output_dims = c('window', sdate_dim), ncores = ncores)$output1 - # Generate window without cross-validation - } else { - obj_window <- Apply(obj, target_dims = c(time_dim, sdate_dim), - fun = as.vector, output_dims = 'window', ncores = ncores)$output1 - } - } - # Generate window of the size specified by the user. Only applied with CV - else { - # For an accurate generation of the window, it is mandatory to add some "extra" data. - if (!("smonth" %in% names(dim(obj)))) { - stop("Missing 'smonth' dimension") - } - - # Concatenate data from previous, target and posterior months - obj_new <- Apply(obj, target_dims = list(c("time", "smonth")), - fun = as.vector, output_dims = "time", ncores = ncores )$output1 - - if (loocv) { - obj_window <- Apply(list(obj_new, rsdates), target_dims = list(c(time_dim, sdate_dim), NULL), - fun = function(x, s) as.vector(x[(ntimes + min(rtimes) - size):(ntimes + max(rtimes) + size), -s]), - output_dims = 'window', ncores = ncores)$output1 - names(dim(obj_window))[(length(names(dim(obj_window))) - 1):length(names(dim(obj_window)))] <- c(time_dim, sdate_dim) - } else { - obj_window <- Apply(obj_new, target_dims = c(time_dim, sdate_dim), - fun = function(x) sapply(rtimes, function(t) as.vector(x[(ntimes + min(rtimes) - size):(ntimes + max(rtimes) + size), ])), - output_dims = c('window', time_dim), ncores = ncores)$output1 - - } - } - - return(obj_window) -} diff --git a/modules/Downscaling/tmp/Intbc.R b/modules/Downscaling/tmp/Intbc.R deleted file mode 100644 index dc5d050b..00000000 --- a/modules/Downscaling/tmp/Intbc.R +++ /dev/null @@ -1,339 +0,0 @@ -#'@rdname CST_Intbc -#'@title Downscaling using interpolation and bias adjustment. -#' -#'@author J. Ramon, \email{jaume.ramon@bsc.es} -#' -#'@description This function performs a downscaling using an interpolation and a later bias -#'adjustment. It is recommended that the observations are passed already in the target grid. -#'Otherwise, the function will also perform an interpolation of the observed field into the -#'target grid. The coarse scale and observation data can be either global or regional. In the -#'latter case, the region is defined by the user. In principle, the coarse and observation data -#'are intended to be of the same variable, although different variables can also be admitted. -#' -#'@param exp an 's2dv object' containing the experimental field on the -#'coarse scale for which the downscaling is aimed. The object must have, at least, -#'the dimensions latitude, longitude, start date and member. The object is expected to be -#'already subset for the desired region. Data can be in one or two integrated regions, e.g., -#'crossing the Greenwich meridian. To get the correct results in the latter case, -#'the borders of the region should be specified in the parameter 'region'. See parameter -#''region'. -#'@param obs an 's2dv object' containing the observational field. The object -#'must have, at least, the dimensions latitude, longitude and start date. The object is -#'expected to be already subset for the desired region. -#'@param target_grid a character vector indicating the target grid to be passed to CDO. -#'It must be a grid recognised by CDO or a NetCDF file. -#'@param bc_method a character vector indicating the bias adjustment method to be applied after -#'the interpolation. Accepted methods are 'quantile_mapping', 'dynamical_bias', 'bias', 'evmos', -#''mse_min', 'crps_min', 'rpc-based'. The abbreviations 'dbc','qm' can also be used. -#'@param int_method a character vector indicating the regridding method to be passed to CDORemap. -#'Accepted methods are "con", "bil", "bic", "nn", "con2". If "nn" method is to be used, CDO_1.9.8 -#'or newer version is required. -#'@param points a list of two elements containing the point latitudes and longitudes -#'of the locations to downscale the model data. The list must contain the two elements -#'named as indicated in the parameters 'lat_dim' and 'lon_dim'. If the downscaling is -#'to a point location, only regular grids are allowed for exp and obs. Only needed if the -#'downscaling is to a point location. -#'@param method_point_interp a character vector indicating the interpolation method to interpolate -#'model gridded data into the point locations. Accepted methods are "nearest", "bilinear", "9point", -#'"invdist4nn", "NE", "NW", "SE", "SW". Only needed if the downscaling is to a point location. -#'@param lat_dim a character vector indicating the latitude dimension name in the element 'data' -#'in exp and obs. Default set to "lat". -#'@param lon_dim a character vector indicating the longitude dimension name in the element 'data' -#'in exp and obs. Default set to "lon". -#'@param sdate_dim a character vector indicating the start date dimension name in the element -#''data' in exp and obs. Default set to "sdate". -#'@param member_dim a character vector indicating the member dimension name in the element -#''data' in exp and obs. Default set to "member". -#'@param region a numeric vector indicating the borders of the region defined in obs. -#'It consists of four elements in this order: lonmin, lonmax, latmin, latmax. lonmin refers -#'to the left border, while lonmax refers to the right border. latmin indicates the lower -#'border, whereas latmax indicates the upper border. If set to NULL (default), the function -#'takes the first and last elements of the latitudes and longitudes. -#'@param ncores an integer indicating the number of cores to use in parallel computation. -#'The default value is NULL. -#'@return An 's2dv' object. The element 'data' contains the dowscaled field, 'lat' the -#'downscaled latitudes, and 'lon' the downscaled longitudes. -#'@examples -#'exp <- rnorm(500) -#'dim(exp) <- c(member = 5, lat = 4, lon = 5, sdate = 5) -#'exp_lons <- 1:5 -#'exp_lats <- 1:4 -#'obs <- rnorm(900) -#'dim(obs) <- c(lat = 12, lon = 15, sdate = 5) -#'obs_lons <- seq(1,5, 4/14) -#'obs_lats <- seq(1,4, 3/11) -#'exp <- s2dv_cube(data = exp, lat = exp_lats, lon = exp_lons) -#'obs <- s2dv_cube(data = obs, lat = obs_lats, lon = obs_lons) -#'res <- CST_Intbc(exp = exp, obs = obs, target_grid = 'r1280x640', bc_method = 'simple_bias', int_method = 'conservative') -#'@export - -CST_Intbc <- function(exp, obs, target_grid, bc_method, int_method = NULL, points = NULL, - method_point_interp = NULL, lat_dim = "lat", lon_dim = "lon", - sdate_dim = "sdate", member_dim = "member", region = NULL, ncores = NULL, ...) -{ - if (!inherits(exp,'s2dv_cube')) { - stop("Parameter 'exp' must be of the class 's2dv_cube'") - } - - if (!inherits(obs,'s2dv_cube')) { - stop("Parameter 'obs' must be of the class 's2dv_cube'") - } - - res <- Intbc(exp = exp$data, obs = obs$data, exp_lats = exp$coords[[lat_dim]], exp_lons = exp$coords[[lon_dim]], - obs_lats = obs$coords[[lat_dim]], obs_lons = obs$coords[[lon_dim]], target_grid = target_grid, - int_method = int_method, bc_method = bc_method, points = points, - source_file_exp = exp$attrs$source_files[1], source_file_obs = obs$attrs$source_files[1], - method_point_interp = method_point_interp, lat_dim = lat_dim, lon_dim = lon_dim, - sdate_dim = sdate_dim, member_dim = member_dim, region = region, ncores = ncores, ...) - - # Modify data, lat and lon in the origina s2dv_cube, adding the downscaled data - exp$data <- res$data - exp$dims <- dim(exp$data) - exp$coords[[lon_dim]] <- res$lon - exp$coords[[lat_dim]] <- res$lat - - obs$data <- res$obs - obs$dims <- dim(obs$data) - obs$coords[[lon_dim]] <- res$lon - obs$coords[[lat_dim]] <- res$lat - - res_s2dv <- list(exp = exp, obs = obs) - return(res_s2dv) - -} - -#'@rdname Intbc -#'@title Downscaling using interpolation and bias adjustment. -#' -#'@author J. Ramon, \email{jaume.ramon@bsc.es} -#' -#'@description This function performs a downscaling using an interpolation and a later bias -#'adjustment. It is recommended that the observations are passed already in the target grid. -#'Otherwise, the function will also perform an interpolation of the observed field into the -#'target grid. The coarse scale and observation data can be either global or regional. In the -#'latter case, the region is defined by the user. In principle, the coarse and observation data -#'are intended to be of the same variable, although different variables can also be admitted. -#' -#'@param exp an array with named dimensions containing the experimental field on the -#'coarse scale for which the downscaling is aimed. The object must have, at least, -#'the dimensions latitude, longitude, start date and member. The object is expected to be -#'already subset for the desired region. Data can be in one or two integrated regions, e.g., -#'crossing the Greenwich meridian. To get the correct results in the latter case, -#'the borders of the region should be specified in the parameter 'region'. See parameter -#''region'. -#'@param obs an array with named dimensions containing the observational field. The object -#'must have, at least, the dimensions latitude, longitude and start date. The object is -#'expected to be already subset for the desired region. -#'@param exp_lats a numeric vector containing the latitude values in 'exp'. Latitudes must -#'range from -90 to 90. -#'@param exp_lons a numeric vector containing the longitude values in 'exp'. Longitudes -#'can range from -180 to 180 or from 0 to 360. -#'@param obs_lats a numeric vector containing the latitude values in 'obs'. Latitudes must -#'range from -90 to 90. -#'@param obs_lons a numeric vector containing the longitude values in 'obs'. Longitudes -#'can range from -180 to 180 or from 0 to 360. -#'@param target_grid a character vector indicating the target grid to be passed to CDO. -#'It must be a grid recognised by CDO or a NetCDF file. -#'@param bc_method a character vector indicating the bias adjustment method to be applied after -#'the interpolation. Accepted methods are 'quantile_mapping', 'dynamical_bias', 'bias', 'evmos', -#''mse_min', 'crps_min', 'rpc-based'. The abbreviations 'dbc','qm' can also be used. -#'@param int_method a character vector indicating the regridding method to be passed to CDORemap. -#'Accepted methods are "con", "bil", "bic", "nn", "con2". If "nn" method is to be used, CDO_1.9.8 -#'or newer version is required. -#'@param points a list of two elements containing the point latitudes and longitudes -#'of the locations to downscale the model data. The list must contain the two elements -#'named as indicated in the parameters 'lat_dim' and 'lon_dim'. If the downscaling is -#'to a point location, only regular grids are allowed for exp and obs. Only needed if the -#'downscaling is to a point location. -#'@param method_point_interp a character vector indicating the interpolation method to interpolate -#'model gridded data into the point locations. Accepted methods are "nearest", "bilinear", "9point", -#'"invdist4nn", "NE", "NW", "SE", "SW". Only needed if the downscaling is to a point location. -#'@param lat_dim a character vector indicating the latitude dimension name in the element 'data' -#'in exp and obs. Default set to "lat". -#'@param lon_dim a character vector indicating the longitude dimension name in the element 'data' -#'in exp and obs. Default set to "lon". -#'@param sdate_dim a character vector indicating the start date dimension name in the element -#''data' in exp and obs. Default set to "sdate". -#'@param member_dim a character vector indicating the member dimension name in the element -#''data' in exp and obs. Default set to "member". -#'@param source_file_exp a character vector with a path to an example file of the exp data. -#'Only needed if the downscaling is to a point location. -#'@param source_file_obs a character vector with a path to an example file of the obs data. -#'Only needed if the downscaling is to a point location. -#'@param region a numeric vector indicating the borders of the region defined in obs. -#'It consists of four elements in this order: lonmin, lonmax, latmin, latmax. lonmin refers -#'to the left border, while lonmax refers to the right border. latmin indicates the lower -#'border, whereas latmax indicates the upper border. If set to NULL (default), the function -#'takes the first and last elements of the latitudes and longitudes. -#'@param ncores an integer indicating the number of cores to use in parallel computation. -#'The default value is NULL. -#'@import CSTools -#' -#'@seealso \code{\link[CSTools]{BiasCorrection}} -#'@seealso \code{\link[CSTools]{Calibration}} -#'@seealso \code{\link[CSTools]{QuantileMapping}} -#' -#'@return An list of three elements. 'data' contains the dowscaled field, 'lat' the -#'downscaled latitudes, and 'lon' the downscaled longitudes. -#'@examples -#'exp <- rnorm(500) -#'dim(exp) <- c(member = 5, lat = 4, lon = 5, sdate = 5) -#'exp_lons <- 1:5 -#'exp_lats <- 1:4 -#'obs <- rnorm(900) -#'dim(obs) <- c(lat = 12, lon = 15, sdate = 5) -#'obs_lons <- seq(1,5, 4/14) -#'obs_lats <- seq(1,4, 3/11) -#'res <- Intbc(exp = exp, obs = obs, exp_lats = exp_lats, exp_lons = exp_lons, obs_lats = obs_lats, -#'obs_lons = obs_lons, target_grid = 'r1280x640', bc_method = 'simple_bias', int_method = 'conservative') -#'@export -Intbc <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, target_grid, bc_method, int_method = NULL, - points = NULL, method_point_interp = NULL, lat_dim = "lat", lon_dim = "lon", sdate_dim = "sdate", - time_dim = "time", member_dim = "member", source_file_exp = NULL, source_file_obs = NULL, - region = NULL, ncores = NULL, ...) { - - if (!inherits(bc_method, 'character')) { - stop("Parameter 'bc_method' must be of the class 'character'") - } - - if (!inherits(lat_dim, 'character')) { - stop("Parameter 'lat_dim' must be of the class 'character'") - } - - if (!inherits(lon_dim, 'character')) { - stop("Parameter 'lon_dim' must be of the class 'character'") - } - - if (!inherits(sdate_dim, 'character')) { - stop("Parameter 'sdate_dim' must be of the class 'character'") - } - - if (!inherits(member_dim, 'character')) { - stop("Parameter 'member_dim' must be of the class 'character'") - } - - if (is.na(match(lon_dim, names(dim(exp))))) { - stop("Missing longitude dimension in 'exp', or does not match the parameter ", - "'lon_dim'") - } - - if (is.na(match(lat_dim, names(dim(exp))))) { - stop("Missing latitude dimension in 'exp', or does not match the parameter ", - "'lat_dim'") - } - - if (is.na(match(sdate_dim, names(dim(exp)))) | is.na(match(sdate_dim, names(dim(obs))))) { - stop("Missing start date dimension in 'exp' and/or 'obs', or does not match the parameter ", - "'sdate_dim'") - } - - if (is.na(match(member_dim, names(dim(exp))))) { - stop("Missing member dimension in 'exp', or does not match the parameter 'member_dim'") - } - - if (!(bc_method %in% c('qm', 'dbc', 'quantile_mapping', 'dynamical_bias', 'bias', 'evmos', 'mse_min', - 'crps_min', 'rpc-based'))) { - stop("Parameter 'bc_method' must be a character vector indicating the bias adjustment method. ", - "Accepted methods are 'quantile_mapping', 'dynamical_bias', 'bias', 'evmos', 'mse_min', ", - "'crps_min', 'rpc-based'. The abbreviations 'dbc','qm' can also be used.") - } - - # When observations are pointwise - if (!is.null(points) & !is.na(match("location", names(dim(obs))))) { - point_obs <- T - # dimension aux in obs is needed - if (is.na(match("aux", names(dim(obs))))) { - obs <- InsertDim(obs, posdim = 1, lendim = 1, name = "aux") - } - } else { - point_obs <- F - } - - if (!is.null(points) & (is.null(source_file_exp))) { - stop("No source file found. Source file must be provided in the parameter 'source_file_exp'.") - } - - if (!is.null(points) & is.null(method_point_interp)) { - stop("Please provide the interpolation method to interpolate gridded data to point locations ", - "through the parameter 'method_point_interp'.") - } - - if (is.null(region)) { - warning("The borders of the downscaling region have not been provided. Assuming the four borders ", - "of the downscaling region are defined by the first and last elements of the parametres ", - "'obs_lats' and 'obs_lons'.") - region <- c(obs_lons[1], obs_lons[length(obs_lons)], obs_lats[1], obs_lats[length(obs_lats)]) - } - ## ncores - if (!is.null(ncores)) { - if (!is.numeric(ncores) | any(ncores %% 1 != 0) | any(ncores < 0) | - length(ncores) > 1) { - stop("Parameter 'ncores' must be a positive integer.") - } - } - - exp_interpolated <- Interpolation(exp = exp, lats = exp_lats, lons = exp_lons, target_grid = target_grid, - method_remap = int_method, points = points, source_file = source_file_exp, - lat_dim = lat_dim, lon_dim = lon_dim, method_point_interp = method_point_interp, - region = region, ncores = ncores) - - # If after interpolating 'exp' data the coordinates do not match, the obs data is interpolated to - # the same grid to force the matching - if ((!.check_coords(lat1 = exp_interpolated$lat, lat2 = obs_lats, - lon1 = exp_interpolated$lon, lon2 = obs_lons)) | !(point_obs)) { - obs_interpolated <- Interpolation(exp = obs, lats = obs_lats, lons = obs_lons, target_grid = target_grid, - method_remap = int_method, points = points, source_file = source_file_obs, - lat_dim = lat_dim, lon_dim = lon_dim, method_point_interp = method_point_interp, - region = region, ncores = ncores) - obs_ref <- obs_interpolated$data - } else { - obs_ref <- obs - } - - # Some functions only accept the dimension names "member" and "sdate" for exp and - # "sdate" for obs - #if (member_dim != 'member') { - # names(dim(exp_interpolated$data)) <- replace(names(dim(exp_interpolated$data)), - # which(names(dim(exp_interpolated$data)) == member_dim), 'member') - #} - - #if (sdate_dim != 'sdate') { - # names(dim(exp_interpolated$data)) <- replace(names(dim(exp_interpolated$data)), - # which(names(dim(exp_interpolated$data)) == sdate_dim), 'sdate') - # names(dim(obs_ref)) <- replace(names(dim(obs_ref)), - # which(names(dim(obs_ref)) == sdate_dim), 'sdate') - #} - - if (bc_method == 'qm' | bc_method == 'quantile_mapping') { - - res <- QuantileMapping(exp = exp_interpolated$data, obs = obs_ref, na.rm = TRUE, - memb_dim = member_dim, sdate_dim = sdate_dim, ncores = ncores, ...) - } - else if (bc_method == 'dbc' | bc_method == 'dynamical_bias') { - # the temporal dimension must be only one dimension called "time" - if (all(c(time_dim, sdate_dim) %in% names(dim(exp_interpolated$data)))) { - exp_interpolated$data <- Apply(exp_interpolated$data, target_dims = c(time_dim, sdate_dim), - fun = as.vector, output_dims = "time", ncores = ncores)$output1 - } - if (all(c(time_dim, sdate_dim) %in% names(dim(obs_ref)))) { - obs_ref <- Apply(obs_ref, target_dims = c(time_dim, sdate_dim), fun = as.vector, - output_dims = "time", ncores = ncores)$output1 - } - # REMEMBER to add na.rm = T in colMeans in .proxiesattractor - res <- DynBiasCorrection(exp = exp_interpolated$data, obs = obs_ref, ncores = ncores, ...) - } else { - if (dim(exp_interpolated$data)[member_dim] == 1) { - stop('Calibration must not be used with only one ensemble member.') - } - if (dim(obs_ref)[sdate_dim] == 1) { - warning('Simple Bias Correction should not be used with only one observation. Returning NA.') - } - res <- Calibration(exp = exp_interpolated$data, obs = obs_ref, memb_dim = member_dim, - sdate_dim = sdate_dim, ncores = ncores, cal.method = bc_method) - } - - # Return a list of three elements - res <- list(data = res, obs = obs_ref, lon = exp_interpolated$lon, lat = exp_interpolated$lat) - - return(res) -} diff --git a/modules/Downscaling/tmp/Interpolation.R b/modules/Downscaling/tmp/Interpolation.R deleted file mode 100644 index ed79f4fd..00000000 --- a/modules/Downscaling/tmp/Interpolation.R +++ /dev/null @@ -1,767 +0,0 @@ -#'@rdname CST_Interpolation -#'@title Regrid or interpolate gridded data to a point location. -#' -#'@author J. Ramon, \email{jaume.ramon@bsc.es} -#' -#'@description This function interpolates gridded model data from one grid to -#'another (regrid) or interpolates gridded model data to a set of point locations. -#'The gridded model data can be either global or regional. In the latter case, the -#'region is defined by the user. It does not have constrains of specific region or -#'variables to downscale. -#'@param exp s2dv object containing the experimental field on the -#'coarse scale for which the downscaling is aimed. The object must have, at least, -#'the dimensions latitude and longitude. The field data is expected to be already subset -#'for the desired region. Data can be in one or two integrated regions, e.g., -#'crossing the Greenwich meridian. To get the correct results in the latter case, -#'the borders of the region should be specified in the parameter 'region'. See parameter -#''region'. -#'@param points a list of two elements containing the point latitudes and longitudes -#'of the locations to downscale the model data. The list must contain the two elements -#'named as indicated in the parameters 'lat_dim' and 'lon_dim'. If the downscaling is -#'to a point location, only regular grids are allowed for exp and obs. Only needed if the -#'downscaling is to a point location. -#'@param method_remap a character vector indicating the regridding method to be passed -#'to CDORemap. Accepted methods are "con", "bil", "bic", "nn", "con2". If "nn" method is -#'to be used, CDO_1.9.8 or newer version is required. -#'@param target_grid a character vector indicating the target grid to be passed to CDO. -#'It must be a grid recognised by CDO or a NetCDF file. -#'@param lat_dim a character vector indicating the latitude dimension name in the element -#''exp' and/or 'points'. Default set to "lat". -#'@param lon_dim a character vector indicating the longitude dimension name in the element -#''exp' and/or 'points'. Default set to "lon". -#'@param region a numeric vector indicating the borders of the region defined in exp. -#'It consists of four elements in this order: lonmin, lonmax, latmin, latmax. lonmin refers -#'to the left border, while lonmax refers to the right border. latmin indicates the lower -#'border, whereas latmax indicates the upper border. If set to NULL (default), the function -#'takes the first and last elements of the latitudes and longitudes. -#'@param method_point_interp a character vector indicating the interpolation method to -#'interpolate model gridded data into the point locations. Accepted methods are "nearest", -#'"bilinear", "9point", "invdist4nn", "NE", "NW", "SE", "SW". -#'@param ncores an integer indicating the number of cores to use in parallel computation. -#'The default value is NULL. -#'@seealso \code{\link[s2dverification]{CDORemap}} -#' -#'@return An s2dv object containing the dowscaled field. -#' -#'@examples -#'exp <- rnorm(500) -#'dim(exp) <- c(member = 5, lat = 4, lon = 5, sdate = 5, time = 1) -#'lons <- 1:5 -#'lats <- 1:4 -#'exp <- s2dv_cube(data = exp, lat = lats, lon = lons) -#'res <- CST_Interpolation(exp = exp, method_remap = 'conservative', target_grid = 'r1280x640') -#'@export -CST_Interpolation <- function(exp, points = NULL, method_remap = NULL, target_grid = NULL, - lat_dim = "lat", lon_dim = "lon", region = NULL, - method_point_interp = NULL, ncores = NULL) -{ - if (!inherits(exp,'s2dv_cube')) { - stop("Parameter 'exp' must be of the class 's2dv_cube'") - } - - #if (is.null(exp[[lat_dim]]) | is.null(exp[[lon_dim]])) { - # stop("The name of the latitude/longitude elements in 'exp' must match the parametres ", - # "'lat_dim' and 'lon_dim'") - #} - - if ((length(which(names(dim(exp$data)) == lat_dim)) == 0) | (length(which(names(dim(exp$data)) == lon_dim)) == 0)) { - stop("The name of the latitude/longitude dimensions in 'exp$data' must match the parametres 'lat_dim' and 'lon_dim'") - } - - res <- Interpolation(exp = exp$data, lats = exp$coords[[lat_dim]], lons = exp$coords[[lon_dim]], - source_file = exp$attrs$source_files[1], points = points, - method_remap = method_remap, target_grid = target_grid, lat_dim = lat_dim, - lon_dim = lon_dim, region = region, method_point_interp = method_point_interp, ncores = ncores) - - # Modify data, lat and lon in the origina s2dv_cube, adding the downscaled data - exp$data <- res$data - exp$dims <- dim(exp$data) - exp$coords[[lon_dim]] <- res$lon - exp$coords[[lat_dim]] <- res$lat - - res_s2dv <- list(exp = exp, obs = NULL) - return(res_s2dv) -} - -#'@rdname Interpolation -#'@title Regrid or interpolate gridded data to a point location. -#' -#'@author J. Ramon, \email{jaume.ramon@bsc.es} -#'@author Ll. Lledó, \email{llorenc.lledo@ecmwf.int} -#' -#'@description This function interpolates gridded model data from one grid to -#'another (regrid) or interpolates gridded model data to a set of point locations. -#'The gridded model data can be either global or regional. In the latter case, the -#'region is defined by the user. It does not have constrains of specific region or -#'variables to downscale. -#'@param exp an array with named dimensions containing the experimental field on the -#'coarse scale for which the downscaling is aimed. The object must have, at least, -#'the dimensions latitude and longitude. The object is expected to be already subset -#'for the desired region. Data can be in one or two integrated regions, e.g., -#'crossing the Greenwich meridian. To get the correct results in the latter case, -#'the borders of the region should be specified in the parameter 'region'. See parameter -#''region'. -#'@param lats a numeric vector containing the latitude values. Latitudes must range from -#'-90 to 90. -#'@param lons a numeric vector containing the longitude values. Longitudes can range from -#'-180 to 180 or from 0 to 360. -#'@param points a list of two elements containing the point latitudes and longitudes -#'of the locations to downscale the model data. The list must contain the two elements -#'named as indicated in the parameters 'lat_dim' and 'lon_dim'. If the downscaling is -#'to a point location, only regular grids are allowed for exp and obs. Only needed if the -#'downscaling is to a point location. -#'@param source_file a character vector with a path to an example file of the exp data. -#'Only needed if the downscaling is to a point location. -#'@param method_remap a character vector indicating the regridding method to be passed -#'to CDORemap. Accepted methods are "con", "bil", "bic", "nn", "con2". If "nn" method is -#'to be used, CDO_1.9.8 or newer version is required. -#'@param target_grid a character vector indicating the target grid to be passed to CDO. -#'It must be a grid recognised by CDO or a NetCDF file. -#'@param lat_dim a character vector indicating the latitude dimension name in the element -#''exp' and/or 'points'. Default set to "lat". -#'@param lon_dim a character vector indicating the longitude dimension name in the element -#''exp' and/or 'points'. Default set to "lon". -#'@param region a numeric vector indicating the borders of the region defined in exp. -#'It consists of four elements in this order: lonmin, lonmax, latmin, latmax. lonmin refers -#'to the left border, while lonmax refers to the right border. latmin indicates the lower -#'border, whereas latmax indicates the upper border. If set to NULL (default), the function -#'takes the first and last elements of the latitudes and longitudes. -#'@param method_point_interp a character vector indicating the interpolation method to -#'interpolate model gridded data into the point locations. Accepted methods are "nearest", -#'"bilinear", "9point", "invdist4nn", "NE", "NW", "SE", "SW". Only needed if the downscaling -#'is to a point location. -#'@param ncores an integer indicating the number of cores to use in parallel computation. -#'The default value is NULL. -#'@import multiApply -#'@import plyr -#'@importFrom s2dv CDORemap -#' -#'@seealso \code{\link[s2dverification]{CDORemap}} -#' -#'@return An list of three elements. 'data' contains the dowscaled field, 'lat' the -#'downscaled latitudes, and 'lon' the downscaled longitudes. -#' -#'@examples -#'exp <- rnorm(500) -#'dim(exp) <- c(member = 5, lat = 4, lon = 5, sdate = 5, time = 1) -#'lons <- 1:5 -#'lats <- 1:4 -#'res <- Interpolation(exp = exp, lats = lats, lons = lons, method_remap = 'conservative', target_grid = 'r1280x640') -#'@export -Interpolation <- function(exp, lats, lons, points = NULL, source_file = NULL, method_remap = NULL, - target_grid = NULL, lat_dim = "lat", lon_dim = "lon", region = NULL, - method_point_interp = NULL, ncores = NULL) -{ - if (!is.null(method_remap)) { - if (!inherits(method_remap, 'character')) { - stop("Parameter 'method_remap' must be of the class 'character'") - } - } - - if (!is.null(method_point_interp)) { - if (!inherits(method_point_interp, 'character')) { - stop("Parameter 'method_point_interp' must be of the class 'character'") - } - } - - if (is.na(match(lon_dim, names(dim(exp))))) { - stop("Missing longitude dimension in 'exp', or does not match the parameter 'lon_dim'") - } - - if (is.na(match(lat_dim, names(dim(exp))))) { - stop("Missing latitude dimension in 'exp', or does not match the parameter 'lat_dim'") - } - - # Check for negative latitudes in the exp data - if (any(lats < -90 | lats > 90) ) { - stop("Out-of-range latitudes have been found. Latitudes must range from -90 to 90") - } - - # checkings for the case of interpolation to point locations - if (!is.null(points)) { - if (!inherits(points, 'list')) { - stop("Parameter 'points' must be a list of two elements containing the point ", - "latitudes and longitudes.") - } - - if (is.null(method_point_interp)) { - stop("Parameter 'method_point_interp' must be a character vector indicating the ", - "interpolation method. Accepted methods are nearest, bilinear, 9point, ", - "invdist4nn, NE, NW, SE, SW") - } - - if (!(method_point_interp %in% c('nearest', 'bilinear', '9point', 'invdist4nn', 'NE', 'NW', 'SE', 'SW'))) { - stop("Parameter 'method_point_interp' must be a character vector indicating the ", - "interpolation method. Accepted methods are nearest, bilinear, 9point, ", - "invdist4nn, NE, NW, SE, SW") - } - - # Points must be a list of two elements - if (length(points) != 2) { - stop("'points' must be a lis of two elements containing the point ", - "latitudes and longitudes in the form 'points$lat', 'points$lon'") - } - - # The names of the two elements must be 'lat' and 'lon' - if (any(!(c(lat_dim, lon_dim) %in% names(points)))) { - stop("The names of the elements in the list 'points' must coincide with the parametres ", - "'lat_dim' and 'lon_dim'") - } - - # Check that the number of latitudes and longitudes match - if (length(unique(lengths(points))) != 1L) { - stop("The number of latitudes and longitudes must match") - } - - # Check for negative latitudes in the point coordinates - if (any(points[[lat_dim]] < -90 | points[[lat_dim]] > 90) ) { - stop("Out-of-range latitudes have been found in 'points'. Latitudes must range from ", - "-90 to 90") - } - - if (is.null(source_file)) { - stop("No source file found. Source file must be provided in the parameter 'source_file'.") - } - } else { - if (is.null(method_remap)) { - stop("Parameter 'method_remap' must be a character vector indicating the ", - "interpolation method. Accepted methods are con, bil, bic, nn, con2") - } - - if (is.null(target_grid)) { - stop("Parameter 'target_grid' can be either a path ", - "to another NetCDF file which to read the target grid from (a single grid must be ", - "defined in such file) or a character vector indicating the coarse grid to ", - "be passed to CDO, and it must be a grid recognised by CDO or a NetCDF file.") - } - } - ## ncores - if (!is.null(ncores)) { - if (!is.numeric(ncores) | any(ncores %% 1 != 0) | any(ncores < 0) | - length(ncores) > 1) { - stop("Parameter 'ncores' must be a positive integer.") - } - } - - #---------------------------------- - # Limits of the region defined by the model data - #---------------------------------- - # for the case when region limits are not passed by the user - # regions contains the following elements in order: lonmin, lonmax, latmin, latmax - if (is.null(region)) { - warning("The borders of the downscaling region have not been provided. Assuming the four borders of the ", - "downscaling region are defined by the first and last elements of the parametres 'lats' and 'lons'.") - region <- c(lons[1], lons[length(lons)], lats[1], lats[length(lats)]) - } - - # Ensure points to be within the region limits - if (!is.null(points)) { - if (any(points[[lat_dim]] > region[4]) | any(points[[lat_dim]] < region[3]) | - any(points[[lon_dim]] > region[2]) | any(points[[lon_dim]] < region[1])) { - stop("At least one of the points lies outside the model region") - } - } - - #---------------------------------- - # Map regrid with CDO - #---------------------------------- - if (is.null(points)) { - - .KnownLonNames <- s2dv:::.KnownLonNames - .KnownLatNames <- s2dv:::.KnownLatNames - .warning <- s2dv:::.warning - - res <- CDORemap(data_array = exp, - lats = lats, - lons = lons, - grid = target_grid, - method = method_remap, - crop = region) - - # Return a list - res <- list(data = res$data_array, obs = NULL, lon = res$lons, lat = res$lats) - - #---------------------------------- - # Interpolate to point locations - #---------------------------------- - } else { - # First create interpolation weights, depending on the chosen method - weights <- .create_interp_weights(ncfile = source_file, locids = 1:unique(lengths(points)), - lats = points[[lat_dim]], lons = points[[lon_dim]], - method = method_point_interp, region = list(lat_min = region[3], - lat_max = region[4], lon_min = region[1], lon_max = region[2])) - - # Select coarse-scale data to be interpolated - model_data_gridpoints <- .get_model_data(weights.df = weights, mdata = exp, ncores = ncores) - - # Interpolate model data to point locations - res <- .interpolate_data(model_data_gridpoints, weights, ncores = ncores) - - # Return a list - res <- list(data = res, obs = NULL, lon = points[[lon_dim]], lat = points[[lat_dim]]) - } - - return(res) -} - -#====================== -# Compute weights for interpolation at several (lat,lon) positions -# We assume that grid boxes are centered in the grid point. -#====================== -.create_interp_weights <- function(ncfile, locids, lats, lons, region = NULL, - method = c("nearest", "bilinear", "9point", "invdist4nn", "NE", - "NW", "SE", "SW")) -{ - # crop the region to get the correct weights - save temporary file - nc_cropped1 <- paste0('tmp_cropped_', format(Sys.time(), "%Y%m%d%H%M"),'.nc') - nc_cropped2 <- paste0('tmp_cropped2_', format(Sys.time(), "%Y%m%d%H%M"),'.nc') - - system(paste0('cdo sellonlatbox,', region$lon_min, ',', region$lon_max, ',', region$lat_min, - ',', region$lat_max, ' ', ncfile, ' ', nc_cropped1)) - - #---------------- - # Read grid description and compute (i,j) of requested locations (including decimals) - #---------------- - griddes <- .get_griddes(nc_cropped1) - - if (is.null(griddes$yinc)) { - system(paste0('rm ', nc_cropped1)) - stop("'griddes$yinc' not found in NetCDF file. Remember that only regular grids are accepted when ", - "downscaling to point locations.") - } - - # If latitudes are decreasingly ordered, revert them - if (griddes$yinc < 0) { - system(paste0('cdo invertlat ', nc_cropped1, ' ', nc_cropped2)) - griddes <- .get_griddes(nc_cropped2) - } - # remove temporary files - system(paste0('rm ', nc_cropped1)) - system(paste0('rm ', nc_cropped2)) - - if (is.null(griddes)) { - stop("'griddes' not found in the NetCDF source files") - } - - gridpoints <- .latlon2ij(griddes, lats, lons) - - #---------------- - # Compute the weights according to the selected method - #---------------- - if(method == "nearest") { - #---------------- - # Round i and j to closest integer. Weight is always 1. - #---------------- - - # | | | - # -+-----+-----+- - # | x| | - # | a | | - # | | | - # -+-----+-----+- - # | | | - - centeri <- round(gridpoints$i,0) - centeri[centeri == griddes$xsize+1] <- 1 # close longitudes - - weights.df <- data.frame(locid = locids, - lat = lats, - lon = lons, - rawi = gridpoints$i, - rawj = gridpoints$j, - i = centeri, - j = round(gridpoints$j, 0), - weight = 1) - } else if (method %in% c("bilinear","invdist4nn")) { - #---------------- - # Get the (i,j) coordinates of the 4 points (a,b,c,d) around x. - # This plot shows i increasing to the right and - # j increasing to the top, but the computations are generic. - #---------------- - # | | | - #- +-----+-----+- - # | | | - # | b | c | - # | | | - #- +-----+-----+- - # | x| | - # | a | d | - # | | | - #- +-----+-----+- - # | | | - - lowi <- floor(gridpoints$i) - highi <- ceiling(gridpoints$i) - highi[highi == griddes$xsize+1] <- 1 # close the longitudes - lowj <- floor(gridpoints$j) - highj <- ceiling(gridpoints$j) - # Note: highi and lowi are the same if i is integer - # Note: highj and lowj are the same if j is integer - - #---------------- - # Get x position wrt ad and ab axes (from 0 to 1) - #---------------- - pcti <- gridpoints$i - lowi - pctj <- gridpoints$j - lowj - - #---------------- - # Compute weights for a,b,c,d grid points - #---------------- - if(method == "bilinear") { - wa = (1 - pcti) * (1 - pctj) - wb = (1 - pcti) * pctj - wc = pcti * pctj - wd = pcti * (1 - pctj) - } else if(method == "invdist4nn") { - #---------------- - # Note: the distance is computed in the (i,j) space. - # Note2: this method does not guarantees a continuous interpolation. - # Use bilinear if that's desirable. - # When x is on the ab line, c and d would be used. In the limit of x - # being just left of ab other points would be used. - # Here we just dropped c and d coeffs when over ab. Same for ad line, - # b and c coeffs dropped. This prevents repeated nodes. - #---------------- - ida = 1 / sqrt(pcti^2 + pctj^2) - idb = 1 / sqrt(pcti^2 + (1 - pctj)^2) - idc = 1 / sqrt((1-pcti)^2 + (1-pctj)^2) - idd = 1 / sqrt((1-pcti)^2 + pctj^2) - idb[pctj == 0] <- 0; - idc[pctj == 0] <- 0; - idc[pcti == 0] <- 0; - idd[pcti == 0] <- 0; - - #---------------- - # Normalize vector of inverse distances - #---------------- - invdist <- cbind(ida, idb, idc, idd) - print(invdist) - w <- t(apply(invdist, 1, function(x) { print(x); if(any(is.infinite(x))) { - x <- is.infinite(x) * 1 } ; x <- x/sum(x) })) - print(w) - - wa = w[ , 1] - wb = w[ , 2] - wc = w[ , 3] - wd = w[ , 4] - } - - #---------------- - # Put info in dataframes and rbind them - #---------------- - weightsa.df <- data.frame(locid = locids, lat = lats,lon = lons, rawi = gridpoints$i, - rawj = gridpoints$j, i = lowi, j = lowj, weight = wa) - weightsb.df <- data.frame(locid = locids, lat = lats, lon = lons, rawi = gridpoints$i, - rawj = gridpoints$j, i = lowi, j = highj, weight = wb) - weightsc.df <- data.frame(locid = locids, lat = lats, lon = lons, rawi = gridpoints$i, - rawj = gridpoints$j, i = highi, j = highj, weight = wc) - weightsd.df <- data.frame(locid = locids, lat = lats, lon = lons, rawi = gridpoints$i, - rawj = gridpoints$j, i = highi, j = lowj, weight = wd) - weights.df <- rbind(weightsa.df, weightsb.df, weightsc.df, weightsd.df) - } else if(method == "9point") { - #---------------- - # Get the (i,j) coordinates of the 9 points (a,b,...,i) around x - # This plot shows i increasing to the right and - # j increasing to the top, but the computations are generic. - #---------------- - # | | | | - #-+-----+-----+-----+- - # | | | | - # | c | f | i | - # | | | | - #-+-----+-----+-----+- - # | | x| | - # | b | e | h | - # | | | | - #-+-----+-----+-----+- - # | | | | - # | a | d | g | - # | | | | - #-+-----+-----+-----+- - # | | | | - - centeri <- round(gridpoints$i, 0) - centeri[centeri == griddes$xsize + 1] <- 1 - centerj <- round(gridpoints$j, 0) - lowi <- centeri - 1 - highi <- centeri + 1 - lowi[lowi == 0] <- griddes$xsize # close the longitudes - highi[highi == griddes$xsize+1] <- 1 # close the longitudes - lowj <- centerj - 1 - highj <- centerj + 1 - - #---------------- - # For the north and south pole do a 6-point average - #---------------- - w_highj <- ifelse(centerj == 1,1/6,ifelse(centerj == griddes$ysize,0 ,1/9)) - w_centerj <- ifelse(centerj == 1,1/6,ifelse(centerj == griddes$ysize,1/6,1/9)) - w_lowj <- ifelse(centerj == 1,0 ,ifelse(centerj == griddes$ysize,1/6,1/9)) - - #---------------- - # Put info in dataframes and rbind them - #---------------- - weightsa.df <- data.frame(locid = locids, lat = lats, lon = lons, rawi = gridpoints$i, - rawj = gridpoints$j, i = lowi, j = lowj, weight = w_lowj) - weightsb.df <- data.frame(locid = locids, lat = lats, lon = lons, rawi = gridpoints$i, - rawj = gridpoints$j, i = lowi, j = centerj, weight = w_centerj) - weightsc.df <- data.frame(locid = locids, lat = lats, lon = lons, rawi = gridpoints$i, - rawj = gridpoints$j, i = lowi, j = highj, weight = w_highj) - weightsd.df <- data.frame(locid = locids, lat = lats, lon = lons, rawi = gridpoints$i, - rawj = gridpoints$j, i = centeri, j = lowj, weight = w_lowj) - weightse.df <- data.frame(locid = locids, lat = lats, lon = lons, rawi = gridpoints$i, - rawj = gridpoints$j, i = centeri, j = centerj, weight = w_centerj) - weightsf.df <- data.frame(locid = locids, lat = lats, lon = lons, rawi = gridpoints$i, - rawj = gridpoints$j, i = centeri, j = highj, weight = w_highj) - weightsg.df <- data.frame(locid = locids, lat = lats, lon = lons, rawi = gridpoints$i, - rawj = gridpoints$j, i = highi, j = lowj, weight = w_lowj) - weightsh.df <- data.frame(locid = locids, lat = lats, lon = lons, rawi = gridpoints$i, - rawj = gridpoints$j, i = highi, j = centerj, weight = w_centerj) - weightsi.df <- data.frame(locid = locids, lat = lats, lon = lons, rawi = gridpoints$i, - rawj = gridpoints$j, i = highi, j = highj, weight = w_highj) - weights.df <- rbind(weightsa.df, weightsb.df, weightsc.df, weightsd.df, weightse.df, - weightsf.df, weightsg.df, weightsh.df, weightsi.df) - } else if(method %in% c("NE", "NW", "SW", "SE")) { - #---------------- - # Find if increasing i and j increases or decreases lat and lon - #---------------- - westtoeast <- (griddes$xinc > 0) - southtonorth <- T - if(griddes$gridtype == "gaussian") { - # We assume gaussian grid latitudes are ordered north to south - southtonorth <- F - } else { #lonlat - if(griddes$yinc < 0) {southtonorth <- F} - } - - #---------------- - # Get the (i,j) coordinates of the desired point (a,b,c or d) around x - #---------------- - # | | | - #- +-----+-----+- - # | | | - # | b | c | - # | | | - #- +-----+-----+- - # | x| | - # | a | d | - # | | | - #- +-----+-----+- - # | | | - - if(substr(method,1,1) == "N" & southtonorth == T) { selj <- ceiling(gridpoints$j) } - if(substr(method,1,1) == "S" & southtonorth == T) { selj <- floor(gridpoints$j) } - if(substr(method,1,1) == "N" & southtonorth == F) { selj <- floor(gridpoints$j) } - if(substr(method,1,1) == "S" & southtonorth == F) { selj <- ceiling(gridpoints$j) } - - if(substr(method,2,2) == "E" & westtoeast == T) {seli <- ceiling(gridpoints$i) } - if(substr(method,2,2) == "W" & westtoeast == T) {seli <- floor(gridpoints$i) } - if(substr(method,2,2) == "E" & westtoeast == F) {seli <- floor(gridpoints$i) } - if(substr(method,2,2) == "W" & westtoeast == F) {seli <- ceiling(gridpoints$i) } - - seli[seli == griddes$xsize + 1] <- 1 # close the longitudes - - weights.df <- data.frame(locid = locids, lat = lats, lon = lons, rawi = gridpoints$i, - rawj = gridpoints$j, i = seli, j = selj, weight = 1) - } else { - stop(paste0("Method " ,method, " not implemented")) - } - - #---------------- - # Order by locid and remove lines with 0 weight - # This also removes some duplicates in the bilinear/invdist4nn methods when i - # or j is a whole number, or in the 9-point method when at the poles. - #---------------- - weights.df <- weights.df[order(weights.df$locid), ] - weights.df <- weights.df[weights.df$weight != 0, ] - - #---------------- - # Add as attributes the method and the nc file used to compute the weights - #---------------- - attributes(weights.df)$nc_file <- normalizePath(ncfile) - attributes(weights.df)$method <- method - - return(weights.df) -} - -#====================== -# Compute (i,j) from (lat,lon). -# Works only for 'lonlat' and 'gaussian' grids. -# Grids are supposed to cover whole globe. -#====================== -.latlon2ij <- function(griddes, lats, lons) { - #------------ - # Check input params - #------------ - if(length(lons) != length(lats)) {stop("Input lat and lon have different lengths.")} - if(any(lats < -90) | any(lats > 90)) {stop("Latitude out of valid range")} - if((griddes$xfirst > 180) & (any(lons < 0))) { - stop("Please use the same convention for the longitudes in the source file and the ", - "longitude values in 'points'.") - } - #if(round(griddes$xinc*griddes$xsize) != 360) {stop("Grid is not global")} - # no need to resize lons to [0,360) - - #------------ - # Compute i (with decimals) - # i lies in [1,xsize+1) - # %% gives the remainder - #------------ - gridpoints <- list() - gridpoints$i <- 1 + (((lons - griddes$xfirst) / griddes$xinc) %% griddes$xsize) - - #------------ - # Compute j (with decimals) - #------------ - if(griddes$gridtype=='lonlat') { - gridpoints$j <- 1 + (lats - griddes$yfirst) / griddes$yinc - } else if(griddes$gridtype == 'gaussian') { - # We assume gaussian grid latitudes are ordered north to south - # findInterval can only work with monotonic ascending values so we revert twice - northj <- griddes$ysize-findInterval(lats, -griddes$yvals) - southj <- northj + 1 - - # Special case: We are north of the first lat - gridpoints$j[northj == 0] <- 1 - - # Special case: We are south of the last lat - gridpoints$j[southj == griddes$ysize + 1] <- griddes$ysize - - # Generic case - ok_idx <- !(northj == 0 | southj == griddes$ysize+1) - gridpoints$j[ok_idx] <- northj[ok_idx] + (griddes$yvals[northj[ok_idx]] - - lats[ok_idx])/(griddes$yvals[northj[ok_idx]] - griddes$yvals[southj[ok_idx]]) - } else { stop("Unsupported grid") } - - return(gridpoints) -} - -#====================== -# Use cdo griddes to obtain grid information -#====================== -.get_griddes <- function(ncfile) { - tmp <- system(paste0("cdo griddes ", ncfile, - " 2>/dev/null | egrep 'gridtype|xsize|ysize|xfirst|xinc|yfirst|yinc'"), intern = T) - arr <- do.call(rbind, strsplit(tmp,"\\s+= ", perl = T)) - griddes <- as.list(arr[,2]) - names(griddes) <- arr[,1] - - if(griddes$gridtype == "gaussian") { - griddes$yvals <- .get_lats(ncfile) - } - - # Convert some fields to numeric. Ensures all fields are present. - for(nm in c("xsize", "ysize", "xfirst", "yfirst", "xinc", "yinc")) { - griddes[[nm]] <- ifelse(is.null(griddes[[nm]]), NA, as.numeric(griddes[[nm]])) - } - - return(griddes) -} - -#====================== -# Use nco to obtain latitudes. Latitudes shall be named "lat" or "latitude". -#====================== -.get_lats <- function(ncfile) { - - tmp <- system(paste0('ncks -H -s "%f " -v latitude ',ncfile),intern=T) - - if(!is.null(attributes(tmp)$status)) { - tmp <- system(paste0('ncks -H -s "%f " -v lat ',ncfile),intern=T) - } - - lats <- as.numeric(strsplit(tmp[1],"\\s+",perl=T)[[1]]) - - return(lats) -} - -#====================== -# Load model data at all (i,j) pairs listed in the weights dataframe. -# Uses StartR. All ... parameters go to Start (i.e. specify dat, var, -# sdate, time, ensemble, num_procs, etc) -#====================== -.get_model_data <- function(weights.df, mdata, ncores = NULL) { - - #----------------- - # Get data for all combinations of i and j. - # (inefficient, getting many unneded pairs). - # Avoid retrieving duplicates with unique() - # These are the indices of the global grid - #----------------- - is <- weights.df$i - js <- weights.df$j - - #----------------- - # If any of the indices happens to be 0, - # change it by 1 but give a warning - #----------------- - if (any(is == 0) | any(js == 0)) { - warning("Is the point location in the border of the region? The code can run but ", - "results will be less accurate than those obtained with a larger region." ) - is[is == 0] <- 1 - js[js == 0] <- 1 - } - - #----------------- - # Get indices of original is and js in unique(is),unique(js) that were requested - #----------------- - idxi <- match(is, unique(is)) - idxj <- match(js, unique(js)) - - #----------------- - # Subsample mdata to keep only the needed (i,j) pairs. - #----------------- - if (is.na(match("longitude", names(dim(mdata))))) { - londim <- match("lon", names(dim(mdata))) - } else { - londim <- match("longitude", names(dim(mdata))) - } - if (is.na(match("latitude", names(dim(mdata))))) { - latdim <- match("lat", names(dim(mdata))) - } else { - latdim <- match("latitude", names(dim(mdata))) - } - - # trick: exchange idxi and idxj - #if(londim > latdim) { idx.tmp <- idxi; idxi <- idxj; idxj <- idx.tmp } - #keepdims <- (1:length(dim(mdata)))[-c(londim,latdim)] - - #sub_mdata <- apply(mdata, keepdims, function(x) { - # laply(1:length(is),function(k) { x[idxi[k],idxj[k]] }) }) - #names(dim(sub_mdata))[1] <- "gridpoint" - - #----------------- - # Retrieve with multiApply - #----------------- - sub_mdata <- Apply(mdata, target_dims = list(c(latdim, londim)), - fun = function(x) {laply(1:length(is),function(k) { x[js[k],is[k]] }) }, - ncores = ncores)$output1 - names(dim(sub_mdata))[1] <- "gridpoint" - - #----------------- - # Return an array that contains as many gridpoints as (i,j) pairs were requested - #----------------- - return(sub_mdata) -} - -#====================== -# Multiply the grid-point series by the weights, -# to obtain the desired interpolations -#====================== -.interpolate_data <- function(model_data, weights.df, ncores) { - #----------------- - # Multiply each gridpoint matrix by its corresponding weight - #----------------- - gpdim <- match("gridpoint", names(dim(model_data))) - weighted_data <- sweep(model_data, gpdim, weights.df$weight, "*") - - #----------------- - # Sum all series that belong to same interpolation point - # Return an array that contains the requested locations and interpolation type - #----------------- - #interp_data <- apply(weighted_data, -gpdim, function(x) { rowsum(x, weights.df$locid) }) - #names(dim(interp_data))[1] <- "location" - interp_data <- Apply(weighted_data, target_dims = gpdim, fun = function(x) { - rowsum(x, weights.df$locid)}, output_dims = c("location", "aux"), - ncores = ncores)$output1 - - return(interp_data) -} diff --git a/modules/Downscaling/tmp/Intlr.R b/modules/Downscaling/tmp/Intlr.R deleted file mode 100644 index 36a7f11b..00000000 --- a/modules/Downscaling/tmp/Intlr.R +++ /dev/null @@ -1,559 +0,0 @@ -#'@rdname CST_Intlr -#'@title Downscaling using interpolation and linear regression. -#' -#'@author J. Ramon, \email{jaume.ramon@bsc.es} -#' -#'@description This function performs a downscaling using an interpolation and a linear -#'regression. Different methodologies that employ linear regressions are available. See -#'parameter 'lr_method' for more information. It is recommended that the observations -#'are passed already in the target grid. Otherwise, the function will also perform an -#'interpolation of the observed field into the target grid. The coarse scale and -#'observation data can be either global or regional. In the latter case, the region is -#'defined by the user. In principle, the coarse and observation data are intended to -#'be of the same variable, although different variables can also be admitted. -#' -#'@param exp an 's2dv object' containing the experimental field on the -#'coarse scale for which the downscaling is aimed. The object must have, at least, -#'the dimensions latitude, longitude, start date and member. The object is expected to be -#'already subset for the desired region. Data can be in one or two integrated regions, e.g., -#'crossing the Greenwich meridian. To get the correct results in the latter case, -#'the borders of the region should be specified in the parameter 'region'. See parameter -#''region'. -#'@param obs an 's2dv object' containing the observational field. The object -#'must have, at least, the dimensions latitude, longitude and start date. The object is -#'expected to be already subset for the desired region. -#'@param lr_method a character vector indicating the linear regression method to be applied -#'after the interpolation. Accepted methods are 'basic', 'large-scale' and '4nn'. The 'basic' -#'method fits a linear regression using high resolution observations as predictands and the -#'interpolated model data as predictor. Then, the regression equation is to the interpolated -#'model data to correct the interpolated values. The 'large-scale' method fits a linear -#'regression with large-scale predictors from the same model (e.g. teleconnection indices) -#'as predictors and high-resolution observations as predictands. This equation is then -#'applied to the interpolated model values. Finally, the '4nn' method uses a linear -#'regression with the four nearest neighbours as predictors and high-resolution observations -#'as predictands. It is then applied to model data to correct the interpolated values. -#'@param target_grid a character vector indicating the target grid to be passed to CDO. -#'It must be a grid recognised by CDO or a NetCDF file. -#'@param points a list of two elements containing the point latitudes and longitudes -#'of the locations to downscale the model data. The list must contain the two elements -#'named as indicated in the parameters 'lat_dim' and 'lon_dim'. If the downscaling is -#'to a point location, only regular grids are allowed for exp and obs. Only needed if the -#'downscaling is to a point location. -#'@param int_method a character vector indicating the regridding method to be passed -#'to CDORemap. Accepted methods are "con", "bil", "bic", "nn", "con2". If "nn" method is -#'to be used, CDO_1.9.8 or newer version is required. -#'@param method_point_interp a character vector indicating the interpolation method to -#'interpolate model gridded data into the point locations. Accepted methods are "nearest", -#'"bilinear", "9point", "invdist4nn", "NE", "NW", "SE", "SW". -#'@param predictors an array with large-scale data to be used in the 'large-scale' method. -#'Only needed if the linear regression method is set to 'large-scale'. It must have, at -#'least the dimension start date and another dimension whose name has to be specified in -#'the parameter 'large_scale_predictor_dimname'. It should contain as many elements as the -#'number of large-scale predictors. -#'@param lat_dim a character vector indicating the latitude dimension name in the element 'data' -#'in exp and obs. Default set to "lat". -#'@param lon_dim a character vector indicating the longitude dimension name in the element 'data' -#'in exp and obs. Default set to "lon". -#'@param sdate_dim a character vector indicating the start date dimension name in the element -#''data' in exp and obs. Default set to "sdate". -#'@param time_dim a character vector indicating the time dimension name in the element -#''data' in exp and obs. Default set to "time". -#'@param large_scale_predictor_dimname a character vector indicating the name of the -#'dimension in 'predictors' that contain the predictor variables. See parameter 'predictors'. -#'@param loocv a logical indicating whether to apply leave-one-out cross-validation when -#'generating the linear regressions. Default to TRUE. -#'@param region a numeric vector indicating the borders of the region defined in exp. -#'It consists of four elements in this order: lonmin, lonmax, latmin, latmax. lonmin refers -#'to the left border, while lonmax refers to the right border. latmin indicates the lower -#'border, whereas latmax indicates the upper border. If set to NULL (default), the function -#'takes the first and last elements of the latitudes and longitudes. -#'@param ncores an integer indicating the number of cores to use in parallel computation. -#'The default value is NULL. -#'@import multiApply -#' -#'@return A list of three elements. 'data' contains the dowscaled field, 'lat' the -#'downscaled latitudes, and 'lon' the downscaled longitudes. -#'@examples -#'exp <- rnorm(500) -#'dim(exp) <- c(member = 5, lat = 4, lon = 5, sdate = 5) -#'exp_lons <- 1:5 -#'exp_lats <- 1:4 -#'obs <- rnorm(900) -#'dim(obs) <- c(lat = 12, lon = 15, sdate = 5) -#'obs_lons <- seq(1,5, 4/14) -#'obs_lats <- seq(1,4, 3/11) -#'exp <- s2dv_cube(data = exp, lat = exp_lats, lon = exp_lons) -#'obs <- s2dv_cube(data = obs, lat = obs_lats, lon = obs_lons) -#'res <- CST_Intlr(exp = exp, obs = obs, target_grid = 'r1280x640', lr_method = 'basic', int_method = 'conservative') -#'@export -CST_Intlr <- function(exp, obs, lr_method, target_grid = NULL, points = NULL, int_method = NULL, - method_point_interp = NULL, predictors = NULL, lat_dim = "lat", lon_dim = "lon", - sdate_dim = "sdate", time_dim = "time", member_dim = "member", - large_scale_predictor_dimname = 'vars', loocv = TRUE, region = NULL, ncores = NULL) { - - if (!inherits(exp,'s2dv_cube')) { - stop("Parameter 'exp' must be of the class 's2dv_cube'") - } - - if (!inherits(obs,'s2dv_cube')) { - stop("Parameter 'obs' must be of the class 's2dv_cube'") - } - - res <- Intlr(exp = exp$data, obs = obs$data, exp_lats = exp$coords[[lat_dim]], exp_lons = exp$coords[[lon_dim]], - obs_lats = obs$coords[[lat_dim]], obs_lons = obs$coords[[lon_dim]], points = points, - source_file_exp = exp$attrs$source_files[1], source_file_obs = obs$attrs$source_files[1], - target_grid = target_grid, lr_method = lr_method, int_method = int_method, - method_point_interp = method_point_interp, predictors = predictors, - lat_dim = lat_dim, lon_dim = lon_dim, sdate_dim = sdate_dim, time_dim = time_dim, - member_dim = member_dim, large_scale_predictor_dimname = large_scale_predictor_dimname, - loocv = loocv, region = region, ncores = ncores) - - # Modify data, lat and lon in the origina s2dv_cube, adding the downscaled data - exp$data <- res$data - exp$dims <- dim(exp$data) - exp$coords[[lon_dim]] <- res$lon - exp$coords[[lat_dim]] <- res$lat - - obs$data <- res$obs - obs$dims <- dim(obs$data) - obs$coords[[lon_dim]] <- res$lon - obs$coords[[lat_dim]] <- res$lat - - res_s2dv <- list(exp = exp, obs = obs) - return(res_s2dv) -} - -#'@rdname Intlr -#'@title Downscaling using interpolation and linear regression. -#' -#'@author J. Ramon, \email{jaume.ramon@bsc.es} -#' -#'@description This function performs a downscaling using an interpolation and a linear -#'regression. Different methodologies that employ linear regressions are available. See -#'parameter 'lr_method' for more information. It is recommended that the observations -#'are passed already in the target grid. Otherwise, the function will also perform an -#'interpolation of the observed field into the target grid. The coarse scale and -#'observation data can be either global or regional. In the latter case, the region is -#'defined by the user. In principle, the coarse and observation data are intended to -#'be of the same variable, although different variables can also be admitted. -#' -#'@param exp an array with named dimensions containing the experimental field on the -#'coarse scale for which the downscaling is aimed. The object must have, at least, -#'the dimensions latitude, longitude and start date. The object is expected to be -#'already subset for the desired region. Data can be in one or two integrated regions, e.g., -#'crossing the Greenwich meridian. To get the correct results in the latter case, -#'the borders of the region should be specified in the parameter 'region'. See parameter -#''region'. -#'@param obs an array with named dimensions containing the observational field. The object -#'must have, at least, the dimensions latitude, longitude and start date. The object is -#'expected to be already subset for the desired region. -#'@param exp_lats a numeric vector containing the latitude values in 'exp'. Latitudes must -#'range from -90 to 90. -#'@param exp_lons a numeric vector containing the longitude values in 'exp'. Longitudes -#'can range from -180 to 180 or from 0 to 360. -#'@param obs_lats a numeric vector containing the latitude values in 'obs'. Latitudes must -#'range from -90 to 90. -#'@param obs_lons a numeric vector containing the longitude values in 'obs'. Longitudes -#'can range from -180 to 180 or from 0 to 360. -#'@param lr_method a character vector indicating the linear regression method to be applied -#'after the interpolation. Accepted methods are 'basic', 'large-scale' and '4nn'. The 'basic' -#'method fits a linear regression using high resolution observations as predictands and the -#'interpolated model data as predictor. Then, the regression equation is to the interpolated -#'model data to correct the interpolated values. The 'large-scale' method fits a linear -#'regression with large-scale predictors from the same model (e.g. teleconnection indices) -#'as predictors and high-resolution observations as predictands. This equation is then -#'applied to the interpolated model values. Finally, the '4nn' method uses a linear -#'regression with the four nearest neighbours as predictors and high-resolution observations -#'as predictands. It is then applied to model data to correct the interpolated values. -#'@param target_grid a character vector indicating the target grid to be passed to CDO. -#'It must be a grid recognised by CDO or a NetCDF file. -#'@param points a list of two elements containing the point latitudes and longitudes -#'of the locations to downscale the model data. The list must contain the two elements -#'named as indicated in the parameters 'lat_dim' and 'lon_dim'. If the downscaling is -#'to a point location, only regular grids are allowed for exp and obs. Only needed if the -#'downscaling is to a point location. -#'@param int_method a character vector indicating the regridding method to be passed -#'to CDORemap. Accepted methods are "con", "bil", "bic", "nn", "con2". If "nn" method is -#'to be used, CDO_1.9.8 or newer version is required. -#'@param method_point_interp a character vector indicating the interpolation method to -#'interpolate model gridded data into the point locations. Accepted methods are "nearest", -#'"bilinear", "9point", "invdist4nn", "NE", "NW", "SE", "SW". -#'@param source_file_exp a character vector with a path to an example file of the exp data. -#'Only needed if the downscaling is to a point location. -#'@param source_file_obs a character vector with a path to an example file of the obs data. -#'Only needed if the downscaling is to a point location. -#'@param predictors an array with large-scale data to be used in the 'large-scale' method. -#'Only needed if the linear regression method is set to 'large-scale'. It must have, at -#'least the dimension start date and another dimension whose name has to be specified in -#'the parameter 'large_scale_predictor_dimname'. It should contain as many elements as the -#'number of large-scale predictors. -#'@param lat_dim a character vector indicating the latitude dimension name in the element 'data' -#'in exp and obs. Default set to "lat". -#'@param lon_dim a character vector indicating the longitude dimension name in the element 'data' -#'in exp and obs. Default set to "lon". -#'@param sdate_dim a character vector indicating the start date dimension name in the element -#''data' in exp and obs. Default set to "sdate". -#'@param time_dim a character vector indicating the time dimension name in the element -#''data' in exp and obs. Default set to "time". -#'@param region a numeric vector indicating the borders of the region defined in exp. -#'It consists of four elements in this order: lonmin, lonmax, latmin, latmax. lonmin refers -#'to the left border, while lonmax refers to the right border. latmin indicates the lower -#'border, whereas latmax indicates the upper border. If set to NULL (default), the function -#'takes the first and last elements of the latitudes and longitudes. -#'@param large_scale_predictor_dimname a character vector indicating the name of the -#'dimension in 'predictors' that contain the predictor variables. See parameter 'predictors'. -#'@param loocv a logical indicating whether to apply leave-one-out cross-validation when -#'generating the linear regressions. Default to TRUE. -#'@param ncores an integer indicating the number of cores to use in parallel computation. -#'The default value is NULL. -#'@import multiApply -#' -#'@return A list of three elements. 'data' contains the dowscaled field, 'lat' the -#'downscaled latitudes, and 'lon' the downscaled longitudes. -#'@examples -#'exp <- rnorm(500) -#'dim(exp) <- c(member = 5, lat = 4, lon = 5, sdate = 5) -#'exp_lons <- 1:5 -#'exp_lats <- 1:4 -#'obs <- rnorm(900) -#'dim(obs) <- c(lat = 12, lon = 15, sdate = 5) -#'obs_lons <- seq(1,5, 4/14) -#'obs_lats <- seq(1,4, 3/11) -#'res <- Intlr(exp = exp, obs = obs, exp_lats = exp_lats, exp_lons = exp_lons, obs_lats = obs_lats, -#'obs_lons = obs_lons, target_grid = 'r1280x640', lr_method = 'basic', int_method = 'conservative') -#'@export -Intlr <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, lr_method, target_grid = NULL, points = NULL, - int_method = NULL, method_point_interp = NULL, source_file_exp = NULL, source_file_obs = NULL, - predictors = NULL, lat_dim = "lat", lon_dim = "lon", sdate_dim = "sdate", time_dim = "time", - member_dim = "member", region = NULL, large_scale_predictor_dimname = 'vars', loocv = TRUE, - ncores = NULL) { - - #----------------------------------- - # Checkings - #----------------------------------- - if (!inherits(lr_method, 'character')) { - stop("Parameter 'lr_method' must be of the class 'character'") - } - - if (!inherits(large_scale_predictor_dimname, 'character')) { - stop("Parameter 'large_scale_predictor_dimname' must be of the class 'character'") - } - - if (!inherits(loocv, 'logical')) { - stop("Parameter 'loocv' must be set to TRUE or FALSE") - } - - if (!inherits(lat_dim, 'character')) { - stop("Parameter 'lat_dim' must be of the class 'character'") - } - - if (!inherits(lon_dim, 'character')) { - stop("Parameter 'lon_dim' must be of the class 'character'") - } - - if (!inherits(sdate_dim, 'character')) { - stop("Parameter 'sdate_dim' must be of the class 'character'") - } - - if (!inherits(large_scale_predictor_dimname, 'character')) { - stop("Parameter 'large_scale_predictor_dimname' must be of the class 'character'") - } - - if (is.na(match(lon_dim, names(dim(exp))))) { - stop("Missing longitude dimension in 'exp', or does not match the parameter ", - "'lon_dim'") - } - - if (is.na(match(lat_dim, names(dim(exp))))) { - stop("Missing latitude dimension in 'exp', or does not match the parameter ", - "'lat_dim'") - } - - if (is.na(match(sdate_dim, names(dim(exp)))) | is.na(match(sdate_dim, names(dim(obs))))) { - stop("Missing start date dimension in 'exp' and/or 'obs', or does not match the parameter ", - "'sdate_dim'") - } - - # When observations are pointwise - if (!is.null(points) & !is.na(match("location", names(dim(obs))))) { - point_obs <- T - # dimension aux in obs is needed - if (is.na(match("aux", names(dim(obs))))) { - obs <- InsertDim(obs, posdim = 1, lendim = 1, name = "aux") - } - } else { - point_obs <- F - } - - if (!is.null(points) & is.null(source_file_exp)) { - stop("No source file found. Source file for exp must be provided in the parameter ", - "'source_file_exp'.") - } - - if (!is.null(points) & is.null(method_point_interp)) { - stop("Please provide the interpolation method to interpolate gridded data to point locations ", - "through the parameter 'method_point_interp'.") - } - - # sdate must be the time dimension in the input data - stopifnot(sdate_dim %in% names(dim(exp))) - stopifnot(sdate_dim %in% names(dim(obs))) - - # the code is not yet prepared to handle members in the observations - restore_ens <- FALSE - if (member_dim %in% names(dim(obs))) { - if (identical(as.numeric(dim(obs)[member_dim]), 1)) { - obs <- ClimProjDiags::Subset(x = obs, along = member_dim, indices = 1, drop = 'selected') - restore_ens <- TRUE - } else { - stop("Not implemented for observations with members ('obs' can have 'member_dim', ", - "but it should be of length = 1).") - } - } - - # checkings for the parametre 'predictors' - if (!is.null(predictors)) { - if (!is.array(predictors)) { - stop("Parameter 'predictors' must be of the class 'array'") - } else { - # ensure the predictor variable name matches the parametre large_scale_predictor_dimname - stopifnot(large_scale_predictor_dimname %in% names(dim(predictors))) - stopifnot(sdate_dim %in% names(dim(predictors))) - stopifnot(dim(predictors)[sdate_dim] == dim(exp)[sdate_dim]) - } - } - ## ncores - if (!is.null(ncores)) { - if (!is.numeric(ncores) | any(ncores %% 1 != 0) | any(ncores < 0) | - length(ncores) > 1) { - stop("Parameter 'ncores' must be a positive integer.") - } - } - - #----------------------------------- - # Interpolation - #----------------------------------- - if (lr_method != '4nn') { - - if (is.null(int_method)) { - stop("Parameter 'int_method' must be a character vector indicating the interpolation method. ", - "Accepted methods are con, bil, bic, nn, con2") - } - - if (is.null(region)) { - warning("The borders of the downscaling region have not been provided. Assuming the ", - "four borders of the downscaling region are defined by the first and last ", - "elements of the parametres 'obs_lats' and 'obs_lons'.") - region <- c(obs_lons[1], obs_lons[length(obs_lons)], obs_lats[1], obs_lats[length(obs_lats)]) - } - - exp_interpolated <- Interpolation(exp = exp, lats = exp_lats, lons = exp_lons, target_grid = target_grid, - points = points, method_point_interp = method_point_interp, - source_file = source_file_exp, lat_dim = lat_dim, lon_dim = lon_dim, - method_remap = int_method, region = region, ncores = ncores) - - # If after interpolating 'exp' data the coordinates do not match, the obs data is interpolated to - # the same grid to force the matching - if ((!.check_coords(lat1 = exp_interpolated$lat, lat2 = obs_lats, - lon1 = exp_interpolated$lon, lon2 = obs_lons)) | !(point_obs)) { - obs_interpolated <- Interpolation(exp = obs, lats = obs_lats, lons = obs_lons, target_grid = target_grid, - points = points, method_point_interp = method_point_interp, - source_file = source_file_obs, lat_dim = lat_dim, lon_dim = lon_dim, - method_remap = int_method, region = region, ncores = ncores) - - lats <- obs_interpolated$lat - lons <- obs_interpolated$lon - obs_interpolated <- obs_interpolated$data - } else { - obs_interpolated <- obs - lats <- obs_lats - lons <- obs_lons - } - } - - #----------------------------------- - # Linear regressions - #----------------------------------- - # Pointwise linear regression - # Predictor: model data - # Predictand: observations - if (lr_method == 'basic') { - predictor <- exp_interpolated$data - predictand <- obs_interpolated - - target_dims_predictor <- sdate_dim - target_dims_predictand <- sdate_dim - } - - # (Multi) linear regression with large-scale predictors - # Predictor: passed through the parameter 'predictors' by the user. Can be model or observations - # Predictand: model data - else if (lr_method == 'large-scale') { - if (is.null(predictors)) { - stop("The large-scale predictors must be passed through the parametre 'predictors'") - } - - predictand <- obs_interpolated - predictor <- predictors - - target_dims_predictor <- c(sdate_dim, large_scale_predictor_dimname) - target_dims_predictand <- sdate_dim - } - - # Multi-linear regression with the four nearest neighbours - # Predictors: model data - # Predictand: observations - else if (lr_method == '4nn') { - - predictor <- .find_nn(coar = exp, lats_hres = obs_lats, lons_hres = obs_lons, lats_coar = exp_lats, - lons_coar = exp_lons, lat_dim = lat_dim, lon_dim = lon_dim, nn = 4, ncores = ncores) - - if (is.null(points) | ("location" %in% names(dim(obs)))) { - if (!is.null(target_grid)) { - warning("Interpolating to the 'obs' grid") - } - predictand <- obs - - lats <- obs_lats - lons <- obs_lons - } - # If the downscaling is to point locations: Once the 4 nearest neighbours have been found, - # interpolate to point locations - else { - predictor <- Interpolation(exp = predictor, lats = obs_lats, lons = obs_lons, target_grid = NULL, - points = points, method_point_interp = method_point_interp, - source_file = source_file_obs, method_remap = NULL, region = region, ncores = ncores) - - predictand <- Interpolation(exp = obs, lats = obs_lats, lons = obs_lons, target_grid = NULL, - points = points, method_point_interp = method_point_interp, - source_file = source_file_obs, method_remap = NULL, region = region, ncores = ncores) - - lats <- predictor$lat - lons <- predictor$lon - predictor <- predictor$data - predictand <- predictand$data - } - - target_dims_predictor <- c(sdate_dim,'nn') - target_dims_predictand <- sdate_dim - } - - else { - stop(paste0(lr_method, " method is not implemented yet")) - } - - print(paste0('dim predictor',dim(predictor))) - print(paste0('dim predictand',dim(predictand))) - print(dim(list(predictor[1]))) - # Apply the linear regressions - - - - res <- Apply(list(predictor, predictand), target_dims = list(target_dims_predictor, target_dims_predictand), - fun = .intlr, loocv = loocv, ncores = ncores)$output1 - - names(dim(res))[1] <- sdate_dim - # names(dim(res))[which(names(dim(res)) == '')] - - # restore ensemble dimension in observations if it existed originally - if (restore_ens) { - predictand <- s2dv::InsertDim(predictand, posdim = 1, lendim = 1, name = member_dim) - } - - # Return a list of three elements - res <- list(data = res, obs = predictand, lon = lons, lat = lats) - - return(res) -} - -#----------------------------------- -# Atomic function to generate and apply the linear regressions -#----------------------------------- -.intlr <- function(x, y, loocv) { - - tmp_df <- data.frame(x = x, y = y) - # if the data is all NA, force return return NA - if (all(is.na(tmp_df)) | (sum(apply(tmp_df, 2, function(x) !all(is.na(x)))) == 1)) { - - n <- nrow(tmp_df) - res <- rep(NA, n) - - } else { - # training - lm1 <- .train_lm(df = tmp_df, loocv = loocv) - - # prediction - res <- .pred_lm(lm1 = lm1, df = tmp_df, loocv = loocv) - } - - return(res) -} - -#----------------------------------- -# Function to generate the linear regressions. -# Returns a list -#----------------------------------- -.train_lm <- function(df, loocv) { - - # Remove predictor columns containing only NA's - df <- df[ ,apply(as.matrix(df[,colnames(df) != 'y'],nrow(df),ncol(df)-1), 2, function(x) !all(is.na(x)))] - - if (loocv) { - - lm1 <- lapply(1:nrow(df), function(j) { - if (all(is.na(df[-j,]$y))) { - return(NA) - } else { - return(lm(df[-j,], formula = y ~ .)) - }}) - } else { - - lm1 <- ifelse(all(is.na(df$y)), NA, list(lm(data = df, formula = y ~ .))) - } - - return(lm1) -} - -#----------------------------------- -# Function to apply the linear regressions. -#----------------------------------- -.pred_lm <- function(df, lm1, loocv) { - - if (loocv) { - pred_vals <- sapply(1:nrow(df), function(j) { - if (all(is.na(lm1[[j]]))) { - return(NA) - } else { - return(predict(lm1[[j]], df[j,])) - }}) - } else { - if (!is.na(lm1)) { - pred_vals_ls <- lapply(lm1, predict, data = df) - pred_vals <- unlist(pred_vals_ls) - } else { - pred_vals <- rep(NA, nrow(df)) - } - } - return(pred_vals) -} - -#----------------------------------- -# Function to find N nearest neighbours. -# 'coar' is an array with named dimensions -#----------------------------------- -.find_nn <- function(coar, lats_hres, lons_hres, lats_coar, lons_coar, lat_dim, lon_dim, nn = 4, ncores = NULL) { - - # Sort the distances from closest to furthest - idx_lat <- as.array(sapply(lats_hres, function(x) order(abs(lats_coar - x))[1:nn])) - idx_lon <- as.array(sapply(lons_hres, function(x) order(abs(lons_coar - x))[1:nn])) - - names(dim(idx_lat)) <- c('nn', lat_dim) - names(dim(idx_lon)) <- c('nn', lon_dim) - - # obtain the values of the nearest neighbours - nearest <- Apply(list(coar, idx_lat, idx_lon), - target_dims = list(c(lat_dim, lon_dim), lat_dim, lon_dim), - fun = function(x, y, z) x[y, z], ncores = ncores)$output1 - - return(nearest) -} diff --git a/modules/Downscaling/tmp/LogisticReg.R b/modules/Downscaling/tmp/LogisticReg.R deleted file mode 100644 index a85a1b3f..00000000 --- a/modules/Downscaling/tmp/LogisticReg.R +++ /dev/null @@ -1,550 +0,0 @@ -#'@rdname CST_LogisticReg -#'@title Downscaling using interpolation and logistic regression. -#' -#'@author J. Ramon, \email{jaume.ramon@bsc.es} -#' -#'@description This function performs a downscaling using an interpolation and a logistic -#'regression. See \code{\link[nnet]{multinom}} for further details. It is recommended that -#'the observations are passed already in the target grid. Otherwise, the function will also -#'perform an interpolation of the observed field into the target grid. The coarse scale and -#'observation data can be either global or regional. In the latter case, the region is -#'defined by the user. In principle, the coarse and observation data are intended to be of -#'the same variable, although different variables can also be admitted. -#' -#'@param exp an 's2dv object' with named dimensions containing the experimental field on -#'the coarse scale for which the downscaling is aimed. The object must have, at least, -#'the dimensions latitude, longitude, start date and member. The object is expected to be -#'already subset for the desired region. Data can be in one or two integrated regions, e.g., -#'crossing the Greenwich meridian. To get the correct results in the latter case, -#'the borders of the region should be specified in the parameter 'region'. See parameter -#''region'. -#'@param obs an 's2dv object' with named dimensions containing the observational field. -#'The object must have, at least, the dimensions latitude, longitude and start date. The -#'object is expected to be already subset for the desired region. -#'@param target_grid a character vector indicating the target grid to be passed to CDO. -#'It must be a grid recognised by CDO or a NetCDF file. -#'@param int_method a character vector indicating the regridding method to be passed to CDORemap. -#'Accepted methods are "con", "bil", "bic", "nn", "con2". If "nn" method is to be used, CDO_1.9.8 -#'or newer version is required. -#'@param log_reg_method a character vector indicating the logistic regression method to be used. -#'Accepted methods are "ens_mean", "ens_mean_sd", "sorted_members". "ens_mean" uses the ensemble -#'mean anomalies as predictors in the logistic regression, "ens_mean_sd" uses the ensemble -#'mean anomalies and the ensemble spread (computed as the standard deviation of all the members) -#'as predictors in the logistic regression, and "sorted_members" considers all the members -#'ordered decreasingly as predictors in the logistic regression. Default method is "ens_mean". -#'@param probs_cat a numeric vector indicating the percentile thresholds separating the -#'climatological distribution into different classes (categories). Default to c(1/3, 2/3). See -#'\code{\link[easyVerification]{convert2prob}}. -#'@param return_most_likely_cat if TRUE, the function returns the most likely category. If -#'FALSE, the function returns the probabilities for each category. Default to FALSE. -#'@param points a list of two elements containing the point latitudes and longitudes -#'of the locations to downscale the model data. The list must contain the two elements -#'named as indicated in the parameters 'lat_dim' and 'lon_dim'. If the downscaling is -#'to a point location, only regular grids are allowed for exp and obs. Only needed if the -#'downscaling is to a point location. -#'@param method_point_interp a character vector indicating the interpolation method to interpolate -#'model gridded data into the point locations. Accepted methods are "nearest", "bilinear", "9point", -#'"invdist4nn", "NE", "NW", "SE", "SW". Only needed if the downscaling is to a point location. -#'@param lat_dim a character vector indicating the latitude dimension name in the element 'data' -#'in exp and obs. Default set to "lat". -#'@param lon_dim a character vector indicating the longitude dimension name in the element 'data' -#'in exp and obs. Default set to "lon". -#'@param sdate_dim a character vector indicating the start date dimension name in the element -#''data' in exp and obs. Default set to "sdate". -#'@param member_dim a character vector indicating the member dimension name in the element -#''data' in exp and obs. Default set to "member". -#'@param region a numeric vector indicating the borders of the region defined in obs. -#'It consists of four elements in this order: lonmin, lonmax, latmin, latmax. lonmin refers -#'to the left border, while lonmax refers to the right border. latmin indicates the lower -#'border, whereas latmax indicates the upper border. If set to NULL (default), the function -#'takes the first and last elements of the latitudes and longitudes. -#'@param loocv a logical vector indicating whether to perform leave-one-out cross-validation -#'in the fitting of the logistic regression. Default to TRUE. -#'@param ncores an integer indicating the number of cores to use in parallel computation. -#'The default value is NULL. -#'@import multiApply -#'@import nnet -#'@importFrom laply plyr -#' -#'@seealso \code{\link[nnet]{multinom}} -#' -#'@return An list of three elements. 'data' contains the dowscaled data, that could be either -#'in the form of probabilities for each category or the most likely category. 'lat' contains the -#'downscaled latitudes, and 'lon' the downscaled longitudes. -#' -#'@examples -#'exp <- rnorm(1500) -#'dim(exp) <- c(member = 5, lat = 4, lon = 5, sdate = 15) -#'exp_lons <- 1:5 -#'exp_lats <- 1:4 -#'obs <- rnorm(2700) -#'dim(obs) <- c(lat = 12, lon = 15, sdate = 15) -#'obs_lons <- seq(1,5, 4/14) -#'obs_lats <- seq(1,4, 3/11) -#'exp <- s2dv_cube(data = exp, lat = exp_lats, lon = exp_lons) -#'obs <- s2dv_cube(data = obs, lat = obs_lats, lon = obs_lons) -#'res <- CST_LogisticReg(exp = exp, obs = obs, int_method = 'bil', target_grid = 'r1280x640', -#'probs_cat = c(1/3, 2/3)) -#'@export -CST_LogisticReg <- function(exp, obs, target_grid, int_method = NULL, log_reg_method = "ens_mean", - probs_cat = c(1/3,2/3), return_most_likely_cat = FALSE, points = NULL, - method_point_interp = NULL, lat_dim = "lat", lon_dim = "lon", sdate_dim = "sdate", - member_dim = "member", region = NULL, loocv = TRUE, ncores = NULL) { - - if (!inherits(exp,'s2dv_cube')) { - stop("Parameter 'exp' must be of the class 's2dv_cube'") - } - - if (!inherits(obs,'s2dv_cube')) { - stop("Parameter 'obs' must be of the class 's2dv_cube'") - } - - res <- LogisticReg(exp = exp$data, obs = obs$data, exp_lats = exp$coords[[lat_dim]], - exp_lons = exp$coords[[lon_dim]], obs_lats = obs$coords[[lat_dim]], - obs_lons = obs$coords[[lon_dim]], target_grid = target_grid, - probs_cat = probs_cat, return_most_likely_cat = return_most_likely_cat, - int_method = int_method, log_reg_method = log_reg_method, points = points, - method_point_interp = method_point_interp, lat_dim = lat_dim, - lon_dim = lon_dim, sdate_dim = sdate_dim, member_dim = member_dim, - source_file_exp = exp$attrs$source_files[1], source_file_obs = obs$attrs$source_files[1], - region = region, loocv = loocv, ncores = ncores) - - # Modify data, lat and lon in the origina s2dv_cube, adding the downscaled data - exp$data <- res$data - exp$dims <- dim(exp$data) - exp$coords[[lon_dim]] <- res$lon - exp$coords[[lat_dim]] <- res$lat - - obs$data <- res$obs - obs$dims <- dim(obs$data) - obs$coords[[lon_dim]] <- res$lon - obs$coords[[lat_dim]] <- res$lat - - res_s2dv <- list(exp = exp, obs = obs) - return(res_s2dv) -} - -#'@rdname LogisticReg -#'@title Downscaling using interpolation and logistic regression. -#' -#'@author J. Ramon, \email{jaume.ramon@bsc.es} -#' -#'@description This function performs a downscaling using an interpolation and a logistic -#'regression. See \code{\link[nnet]{multinom}} for further details. It is recommended that -#'the observations are passed already in the target grid. Otherwise, the function will also -#'perform an interpolation of the observed field into the target grid. The coarse scale and -#'observation data can be either global or regional. In the latter case, the region is -#'defined by the user. In principle, the coarse and observation data are intended to be of -#'the same variable, although different variables can also be admitted. -#' -#'@param exp an array with named dimensions containing the experimental field on the -#'coarse scale for which the downscaling is aimed. The object must have, at least, -#'the dimensions latitude, longitude, start date and member. The object is expected to be -#'already subset for the desired region. Data can be in one or two integrated regions, e.g., -#'crossing the Greenwich meridian. To get the correct results in the latter case, -#'the borders of the region should be specified in the parameter 'region'. See parameter -#''region'. -#'@param obs an array with named dimensions containing the observational field. The object -#'must have, at least, the dimensions latitude, longitude and start date. The object is -#'expected to be already subset for the desired region. -#'@param exp_lats a numeric vector containing the latitude values in 'exp'. Latitudes must -#'range from -90 to 90. -#'@param exp_lons a numeric vector containing the longitude values in 'exp'. Longitudes -#'can range from -180 to 180 or from 0 to 360. -#'@param obs_lats a numeric vector containing the latitude values in 'obs'. Latitudes must -#'range from -90 to 90. -#'@param obs_lons a numeric vector containing the longitude values in 'obs'. Longitudes -#'can range from -180 to 180 or from 0 to 360. -#'@param target_grid a character vector indicating the target grid to be passed to CDO. -#'It must be a grid recognised by CDO or a NetCDF file. -#'@param int_method a character vector indicating the regridding method to be passed to CDORemap. -#'Accepted methods are "con", "bil", "bic", "nn", "con2". If "nn" method is to be used, CDO_1.9.8 -#'or newer version is required. -#'@param log_reg_method a character vector indicating the logistic regression method to be used. -#'Accepted methods are "ens_mean", "ens_mean_sd", "sorted_members". "ens_mean" uses the ensemble -#'mean anomalies as predictors in the logistic regression, "ens_mean_sd" uses the ensemble -#'mean anomalies and the ensemble spread (computed as the standard deviation of all the members) -#'as predictors in the logistic regression, and "sorted_members" considers all the members -#'ordered decreasingly as predictors in the logistic regression. Default method is "ens_mean". -#'@param probs_cat a numeric vector indicating the percentile thresholds separating the -#'climatological distribution into different classes (categories). Default to c(1/3, 2/3). See -#'\code{\link[easyVerification]{convert2prob}}. -#'@param return_most_likely_cat if TRUE, the function returns the most likely category. If -#'FALSE, the function returns the probabilities for each category. Default to FALSE. -#'@param points a list of two elements containing the point latitudes and longitudes -#'of the locations to downscale the model data. The list must contain the two elements -#'named as indicated in the parameters 'lat_dim' and 'lon_dim'. If the downscaling is -#'to a point location, only regular grids are allowed for exp and obs. Only needed if the -#'downscaling is to a point location. -#'@param method_point_interp a character vector indicating the interpolation method to interpolate -#'model gridded data into the point locations. Accepted methods are "nearest", "bilinear", "9point", -#'"invdist4nn", "NE", "NW", "SE", "SW". Only needed if the downscaling is to a point location. -#'@param lat_dim a character vector indicating the latitude dimension name in the element 'data' -#'in exp and obs. Default set to "lat". -#'@param lon_dim a character vector indicating the longitude dimension name in the element 'data' -#'in exp and obs. Default set to "lon". -#'@param sdate_dim a character vector indicating the start date dimension name in the element -#''data' in exp and obs. Default set to "sdate". -#'@param member_dim a character vector indicating the member dimension name in the element -#''data' in exp and obs. Default set to "member". -#'@param source_file_exp a character vector with a path to an example file of the exp data. -#'Only needed if the downscaling is to a point location. -#'@param source_file_obs a character vector with a path to an example file of the obs data. -#'Only needed if the downscaling is to a point location. -#'@param region a numeric vector indicating the borders of the region defined in obs. -#'It consists of four elements in this order: lonmin, lonmax, latmin, latmax. lonmin refers -#'to the left border, while lonmax refers to the right border. latmin indicates the lower -#'border, whereas latmax indicates the upper border. If set to NULL (default), the function -#'takes the first and last elements of the latitudes and longitudes. -#'@param loocv a logical vector indicating whether to perform leave-one-out cross-validation -#'in the fitting of the logistic regression. Default to TRUE. -#'@param ncores an integer indicating the number of cores to use in parallel computation. -#'The default value is NULL. -#'@import multiApply -#'@import nnet -#'@importFrom laply plyr -#' -#'@seealso \code{\link[nnet]{multinom}} -#' -#'@return An list of three elements. 'data' contains the dowscaled data, that could be either -#'in the form of probabilities for each category or the most likely category. 'lat' contains the -#'downscaled latitudes, and 'lon' the downscaled longitudes. -#' -#'@examples -#'exp <- rnorm(1500) -#'dim(exp) <- c(member = 5, lat = 4, lon = 5, sdate = 15) -#'exp_lons <- 1:5 -#'exp_lats <- 1:4 -#'obs <- rnorm(2700) -#'dim(obs) <- c(lat = 12, lon = 15, sdate = 15) -#'obs_lons <- seq(1,5, 4/14) -#'obs_lats <- seq(1,4, 3/11) -#'res <- LogisticReg(exp = exp, obs = obs, exp_lats = exp_lats, exp_lons = exp_lons, -#'obs_lats = obs_lats, obs_lons = obs_lons, int_method = 'bil', target_grid = 'r1280x640', -#'probs_cat = c(1/3, 2/3)) -#'@export -LogisticReg <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, target_grid, - int_method = NULL, log_reg_method = "ens_mean", probs_cat = c(1/3,2/3), - return_most_likely_cat = FALSE, points = NULL, method_point_interp = NULL, - lat_dim = "lat", lon_dim = "lon", sdate_dim = "sdate", member_dim = "member", - source_file_exp = NULL, source_file_obs = NULL, region = NULL, loocv = TRUE, ncores = NULL) { - - #----------------------------------- - # Checkings - #----------------------------------- - if (!inherits(target_grid, 'character')) { - stop("Parameter 'target_grid' must be of the class 'character'") - } - - if (!is.null(int_method) & !inherits(int_method, 'character')) { - stop("Parameter 'int_method' must be of the class 'character'") - } - - if (!is.null(method_point_interp) & !inherits(method_point_interp, 'character')) { - stop("Parameter 'method_point_interp' must be of the class 'character'") - } - - if (!inherits(lat_dim, 'character')) { - stop("Parameter 'lat_dim' must be of the class 'character'") - } - - if (!inherits(lon_dim, 'character')) { - stop("Parameter 'lon_dim' must be of the class 'character'") - } - - if (!inherits(sdate_dim, 'character')) { - stop("Parameter 'sdate_dim' must be of the class 'character'") - } - - if (!inherits(member_dim, 'character')) { - stop("Parameter 'member_dim' must be of the class 'character'") - } - - if (!is.null(source_file_exp) & !inherits(source_file_exp, 'character')) { - stop("Parameter 'source_file_exp' must be of the class 'character'") - } - - if (!is.null(source_file_obs) & !inherits(source_file_obs, 'character')) { - stop("Parameter 'source_file_obs' must be of the class 'character'") - } - - if (!inherits(loocv, 'logical')) { - stop("Parameter 'loocv' must be set to TRUE or FALSE") - } - - if (is.na(match(lon_dim, names(dim(exp))))) { - stop("Missing longitude dimension in 'exp', or does not match the parameter ", - "'lon_dim'") - } - - if (is.na(match(lat_dim, names(dim(exp))))) { - stop("Missing latitude dimension in 'exp', or does not match the parameter ", - "'lat_dim'") - } - - if (is.na(match(sdate_dim, names(dim(exp)))) | is.na(match(sdate_dim, names(dim(obs))))) { - stop("Missing start date dimension in 'exp' and/or 'obs', or does not match the parameter ", - "'sdate_dim'") - } - - if (is.na(match(member_dim, names(dim(exp))))) { - stop("Missing member dimension in 'exp' and/or 'obs', or does not match the parameter ", - "'member_dim'") - } - - # When observations are pointwise - if (!is.null(points) & !is.na(match("location", names(dim(obs))))) { - point_obs <- T - # dimension aux in obs is needed - if (is.na(match("aux", names(dim(obs))))) { - obs <- InsertDim(obs, posdim = 1, lendim = 1, name = "aux") - } - } else { - point_obs <- F - } - - if (!is.null(points) & (is.null(source_file_exp))) { - stop("No source file found. Source file must be provided in the parameter 'source_file_exp'.") - } - - if (!is.null(points) & is.null(method_point_interp)) { - stop("Please provide the interpolation method to interpolate gridded data to point locations ", - "through the parameter 'method_point_interp'.") - } - - if (is.null(region)) { - warning("The borders of the downscaling region have not been provided. Assuming the four borders ", - "of the downscaling region are defined by the first and last elements of the parametres ", - "'obs_lats' and 'obs_lons'.") - region <- c(obs_lons[1], obs_lons[length(obs_lons)], obs_lats[1], obs_lats[length(obs_lats)]) - } - ## ncores - if (!is.null(ncores)) { - if (!is.numeric(ncores) | any(ncores %% 1 != 0) | any(ncores < 0) | - length(ncores) > 1) { - stop("Parameter 'ncores' must be a positive integer.") - } - } - - # the code is not yet prepared to handle members in the observations - restore_ens <- FALSE - if (member_dim %in% names(dim(obs))) { - if (identical(as.numeric(dim(obs)[member_dim]), 1)) { - restore_ens <- TRUE - obs <- ClimProjDiags::Subset(x = obs, along = member_dim, indices = 1, drop = 'selected') - } else { - stop("Not implemented for observations with members ('obs' can have 'member_dim', ", - "but it should be of length = 1).") - } - } - - exp_interpolated <- Interpolation(exp = exp, lats = exp_lats, lons = exp_lons, target_grid = target_grid, - method_remap = int_method, points = points, source_file = source_file_exp, - lat_dim = lat_dim, lon_dim = lon_dim, method_point_interp = method_point_interp, - region = region, ncores = ncores) - - # compute ensemble mean anomalies - if (log_reg_method == "ens_mean") { - predictor <- .get_ens_mean_anom(obj_ens = exp_interpolated$data, member_dim = member_dim, sdate_dim = sdate_dim, - ncores = ncores) - - target_dims_predictor <- sdate_dim - } - else if (log_reg_method == "ens_mean_sd") { - - require(abind) - - ens_mean_anom <- .get_ens_mean_anom(obj_ens = exp_interpolated$data, member_dim = member_dim, - sdate_dim = sdate_dim, ncores = ncores) - ens_sd <- .get_ens_sd(obj_ens = exp_interpolated$data, member_dim = member_dim, ncores = ncores) - - #merge two arrays into one array of predictors - predictor <- abind(ens_mean_anom, ens_sd, along = 1/2) - names(dim(predictor)) <- c("pred", names(dim(ens_mean_anom))) - - target_dims_predictor <- c(sdate_dim, "pred") - } else if (log_reg_method == "sorted_members") { - predictor <- .sort_members(obj_ens = exp_interpolated$data, member_dim = member_dim, ncores = ncores) - - target_dims_predictor <- c(sdate_dim, member_dim) - } else { - stop(paste0(log_reg_method, " not recognised or not implemented.")) - } - - # If after interpolating 'exp' data the coordinates do not match, the obs data is interpolated to - # the same grid to force the matching - if ((!.check_coords(lat1 = as.numeric(exp_interpolated$lat), lat2 = obs_lats, - lon1 = as.numeric(exp_interpolated$lon), lon2 = obs_lons)) | !(point_obs)) { - obs_interpolated <- Interpolation(exp = obs, lats = obs_lats, lons = obs_lons, target_grid = target_grid, - method_remap = int_method, points = points, source_file = source_file_obs, - lat_dim = lat_dim, lon_dim = lon_dim, method_point_interp = method_point_interp, - region = region, ncores = ncores) - obs_ref <- obs_interpolated$data - } else { - obs_ref <- obs - } - - # convert observations to categorical predictands - -obs_cat <- Apply(obs_ref, target_dims = sdate_dim, function(x) { - if (!any(!is.na(x))) { - rep(NA,length(x)) - } else { - terc <- convert2prob(as.vector(x), prob = probs_cat) - apply(terc, 1, function(r) which (r == 1))}}, - output_dims = sdate_dim, ncores = ncores)$output1 - - - res <- Apply(list(predictor, obs_cat), target_dims = list(target_dims_predictor, sdate_dim), fun = function(x, y) - .log_reg(x = x, y = y, loocv = loocv,probs_cat=probs_cat), output_dims = c(sdate_dim, "category"), ncores = ncores)$output1 - - if (return_most_likely_cat) { - res <- Apply(res, target_dims = c(sdate_dim, "category"), .most_likely_category, - output_dims = sdate_dim, ncores = ncores)$output1 - } - - # restore ensemble dimension in observations if it existed originally - if (restore_ens) { - obs_ref <- s2dv::InsertDim(obs_ref, posdim = 1, lendim = 1, name = member_dim, ncores = ncores) - } - - res <- list(data = res, obs = obs_ref, lon = exp_interpolated$lon, lat = exp_interpolated$lat) - - return(res) -} - -.most_likely_category <- function(data) { -# data, expected dims: start date, category (in this order) - - if (all(is.na(data))) { - mlc <- rep(NA, nrow(data)) - } else { - mlc <- apply(data, 1, which.max) - } - return(mlc) -} - -.sort_members <- function(obj_ens, member_dim, ncores = NULL) { - - sorted <- Apply(obj_ens, target_dims = member_dim, sort, decreasing = TRUE, na.last = TRUE, ncores = ncores)$output1 - - return(sorted) -} - -.get_ens_sd <- function(obj_ens, member_dim, ncores = NULL) { - - # compute ensemble spread - ens_sd <- Apply(obj_ens, target_dims = member_dim, sd, na.rm = TRUE, ncores = ncores)$output1 - - return(ens_sd) -} - -.get_ens_mean_anom <- function(obj_ens, member_dim, sdate_dim, ncores = NULL) { - - require(s2dv) - - # compute climatology - clim <- Apply(obj_ens, target_dims = c(member_dim, sdate_dim), mean, ncores = ncores)$output1 - - # compute ensemble mean - ens_mean <- Apply(obj_ens, target_dims = member_dim, mean, na.rm = TRUE, ncores = ncores)$output1 - - # compute ensemble mean anomalies - anom <- Ano(ens_mean, clim, ncores = ncores) - - return(anom) -} - -# atomic functions for logistic regressions -.log_reg <- function(x, y, loocv,probs_cat) { - - tmp_df <- data.frame(x = x, y = y) - - # if the data is all NA, force return return NA - if (all(is.na(tmp_df)) | (sum(apply(tmp_df, 2, function(x) !all(is.na(x)))) == 1) | all(is.na(tmp_df$y))) { - - n1 <- nrow(tmp_df) - n2<- length(probs_cat)+1 - res <- matrix(NA, nrow = n1, ncol = n2) - - } else { - # training - lm1 <- .train_lr(df = tmp_df, loocv = loocv) - - # prediction - res <- pred_lr(lm1 = lm1, df = tmp_df, loocv = loocv,probs_cat=probs_cat) - } - return(res) -} - -#----------------------------------- -# Function to train the logistic regressions. -#----------------------------------- -.train_lr <- function(df, loocv) { - - require(nnet) - - # Remove columns containing only NA's - df <- df[ , apply(df, 2, function(x) !all(is.na(x)))] - - if (loocv) { - - lm1 <- lapply(1:nrow(df), function(j) multinom(y ~ ., data = df[ -j, ])) - - } else { - - lm1 <- list(multinom(y ~ ., data = df)) - - } - - return(lm1) -} - -#----------------------------------- -# Function to apply the logistic regressions. -#----------------------------------- -pred_lr <- function(df, lm1, loocv,probs_cat) { - - require(plyr) - - if (loocv) { - - # The error: "Error: Results must have the same dimensions." can - # appear when the number of sdates is insufficient - - pred_vals_ls <-list() - for (j in 1:nrow(df)) { - pred_vals_ls[[j]] <- predict(lm1[[j]], df[j,], type = "probs") - } - - pred_vals <- laply(pred_vals_ls, .fun = as.array) - - if( length(probs_cat)+1==2) - { - pred_vals_dum<-array(NA,dim=c(nrow(df),2)) - pred_vals_dum[,2]<-pred_vals - pred_vals_dum[,1]<-1-pred_vals - pred_vals<-pred_vals_dum - colnames(pred_vals)<-c(1,2) - } - - } else { - - # type = class, probs - #pred_vals_ls <- lapply(lm1, predict, data = df, type = "probs") - #pred_vals <- unlist(pred_vals_ls) - pred_vals <- predict(lm1[[1]], df, type = "probs") - - if( length(probs_cat)+1==2) - { - pred_vals_dum<-array(NA,dim=c(nrow(df),2)) - pred_vals_dum[,2]<-pred_vals - pred_vals_dum[,1]<-1-pred_vals - pred_vals<-pred_vals_dum - colnames(pred_vals)<-c(1,2) - } - - } - - return(pred_vals) -} diff --git a/modules/Downscaling/tmp/Utils.R b/modules/Downscaling/tmp/Utils.R deleted file mode 100644 index 3cd65852..00000000 --- a/modules/Downscaling/tmp/Utils.R +++ /dev/null @@ -1,39 +0,0 @@ -.check_coords <- function(lat1, lon1, lat2, lon2) { - if (all(as.numeric(lat1) == as.numeric(lat2)) & all(as.numeric(lon1) == as.numeric(lon2))) { - match <- TRUE - } else { - match <- FALSE - } - return(match) -} - -# reorder dims to a reference array. If they do not exist, they are created -# example -#arr_ref <- array(NA, c(dataset = 1, sdate = 8, member = 3, ftime = 1, lon = 269, lat = 181)) -#arr_to_reorder <- array(NA, c(dataset = 1, member = 3, sdate = 8, lat = 181, lon = 269, pp = 1)) - -.reorder_dims <- function(arr_ref, arr_to_reorder) { - - miss_dims <- names(dim(arr_ref))[!(names(dim(arr_ref)) %in% names(dim(arr_to_reorder)))] - - if (length(miss_dims) != 0) { - for (m in seq(miss_dims)) { - arr_to_reorder <- InsertDim(data = arr_to_reorder, posdim = length(dim(arr_to_reorder)) + 1, lendim = 1, - name = miss_dims[m]) - } - } - - # TODO: add code to reorder dimensions and put the non-common dimensions at the end - - orddim <- match(names(dim(arr_ref)),names(dim(arr_to_reorder))) - return(Reorder(data = arr_to_reorder, order = orddim)) -} - -#.check_coords <- function(lat1, lon1, lat2, lon2) { -# match <- TRUE -# if (!((length(lat1) == length(lat2)) & (length(lon1) == length(lon2)))) { -# match <- FALSE -# } -# return(match) -#} - diff --git a/modules/Loading/Loading.R b/modules/Loading/Loading.R index 2de0406c..cf97efc2 100644 --- a/modules/Loading/Loading.R +++ b/modules/Loading/Loading.R @@ -15,6 +15,5 @@ Loading <- function(recipe) { } else { stop("Incorrect time horizon.") } - return(data) } diff --git a/modules/Loading/testing_recipes/recipe_system5c3s-tas_downscaling.yml b/modules/Loading/testing_recipes/recipe_system5c3s-tas_downscaling.yml deleted file mode 100644 index 99e02c7d..00000000 --- a/modules/Loading/testing_recipes/recipe_system5c3s-tas_downscaling.yml +++ /dev/null @@ -1,62 +0,0 @@ -# ▄████▄ ██████ ▓█████▄ ▒█████ █ █░███▄ █ ██████ ▄████▄ ▄▄▄ ██▓ ▓█████ -#▒██▀ ▀█ ▒██ ▒ ▒██▀ ██▌▒██▒ ██▒▓█░ █ ░█░██ ▀█ █ ▒██ ▒ ▒██▀ ▀█ ▒████▄ ▓██▒ ▓█ ▀ -#▒▓█ ▄ ░ ▓██▄ ░██ █▌▒██░ ██▒▒█░ █ ░█▓██ ▀█ ██▒░ ▓██▄ ▒▓█ ▄ ▒██ ▀█▄ ▒██░ ▒███ -#▒▓▓▄ ▄██▒ ▒ ██▒░▓█▄ ▌▒██ ██░░█░ █ ░█▓██▒ ▐▌██▒ ▒ ██▒▒▓▓▄ ▄██▒░██▄▄▄▄██ ▒██░ ▒▓█ ▄ -#▒ ▓███▀ ░▒██████▒▒░▒████▓ ░ ████▓▒░░░██▒██▓▒██░ ▓██░▒██████▒▒▒ ▓███▀ ░ ▓█ ▓██▒░██████▒░▒████▒ -#░ ░▒ ▒ ░▒ ▒▓▒ ▒ ░ ▒▒▓ ▒ ░ ▒░▒░▒░ ░ ▓░▒ ▒ ░ ▒░ ▒ ▒ ▒ ▒▓▒ ▒ ░░ ░▒ ▒ ░ ▒▒ ▓▒█░░ ▒░▓ ░░░ ▒░ ░ -# ░ ▒ ░ ░▒ ░ ░ ░ ▒ ▒ ░ ▒ ▒░ ▒ ░ ░ ░ ░░ ░ ▒░░ ░▒ ░ ░ ░ ▒ ▒ ▒▒ ░░ ░ ▒ ░ ░ ░ ░ -#░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ▒ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ▒ ░ ░ ░ -#░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ -#░ ░ ░ -Description: - Author: J. Ramon -Info: downscaling of seasonal predictions from coarse to fine grids - -Analysis: - Horizon: Seasonal - Variables: - name: tas - freq: monthly_mean - Datasets: - System: - name: ECMWF-SEAS5 - Multimodel: no - Reference: - name: ERA5 - Time: - sdate: '0501' - hcst_start: '2000' - hcst_end: '2005' - ftime_min: 1 - ftime_max: 1 -#sometimes we want the region for the obs to be bigger than for hcst - Region: - latmin: 34.1 - latmax: 45.1 - lonmin: -12.5 - lonmax: 6.35 - Regrid: - method: bilinear - type: none - Workflow: - Calibration: - method: raw - Skill: - metric: BSS10 BSS90 Mean_Bias_SS RPSS ROCSS - Downscaling: - # Assumption 1: leave-one-out cross-validation is always applied - # Assumption 2: for analogs, we select the best analog (minimum distance) - # TO DO: add downscaling to point locations - type: intbc # mandatory, 'none', 'int', 'intbc', 'intlr', 'analogs', 'logreg' - int_method: conservative # optional, regridding method accepted by CDO - bc_method: simple_bias # optional, 'simple_bias', 'calibration', 'quantile_mapping' - lr_method: # optional, 'basic', 'large_scale', '4nn' - log_reg_method: # optional, 'ens_mean', 'ens_mean_sd', 'sorted_members' - target_grid: /esarchive/recon/ecmwf/era5/monthly_mean/tas_f1h/tas_200002.nc # optional, nc file or grid accepted by CDO - nanalogs: # optional, number of analogs to be searched - Output_format: S2S4E -Run: - Loglevel: INFO - Terminal: yes - output_dir: /esarchive/scratch/vagudets/repos/auto-s2s/out-logs/ - code_dir: /esarchive/scratch/vagudets/repos/auto-s2s/ diff --git a/modules/Saving/R/get_filename.R b/modules/Saving/R/get_filename.R index 1c925651..f18a6fb4 100644 --- a/modules/Saving/R/get_filename.R +++ b/modules/Saving/R/get_filename.R @@ -17,7 +17,8 @@ get_filename <- function(dir, recipe, var, date, agg, file.type) { switch(tolower(agg), "country" = {gg <- "-country"}, - "global" = {gg <- ""}) + "global" = {gg <- ""}, + "region" = {gg <- "-region"}) system <- gsub('.','', recipe$Analysis$Datasets$System$name, fixed = T) reference <- gsub('.','', recipe$Analysis$Datasets$Reference$name, fixed = T) diff --git a/modules/Skill/Skill.R b/modules/Skill/Skill.R index fd27ba75..95b6856a 100644 --- a/modules/Skill/Skill.R +++ b/modules/Skill/Skill.R @@ -307,7 +307,7 @@ Skill <- function(recipe, data, agg = 'global') { } info(recipe$Run$logger, "##### SKILL METRIC COMPUTATION COMPLETE #####") # Save outputs - #NURIA: I think change the output_dir is a problem for future savings +#NURIA: I think change the output_dir is a problem for future savings if (recipe$Analysis$Workflow$Skill$save != 'none') { info(recipe$Run$logger, "##### START SAVING SKILL METRIC #####") } diff --git a/modules/Visualization/Visualization.R b/modules/Visualization/Visualization.R index a6b6bd75..1f6e836d 100644 --- a/modules/Visualization/Visualization.R +++ b/modules/Visualization/Visualization.R @@ -210,4 +210,3 @@ Visualization <- function(recipe, } } } - diff --git a/tools/check_recipe.R b/tools/check_recipe.R index 5b81420b..57bece61 100644 --- a/tools/check_recipe.R +++ b/tools/check_recipe.R @@ -1,6 +1,8 @@ check_recipe <- function(recipe) { + # recipe: yaml recipe already read it - ## TODO: set up logger-less case + ## TODO: Adapt to decadal case + info(recipe$Run$logger, paste("Checking recipe:", recipe$recipe_path)) # --------------------------------------------------------------------- @@ -237,9 +239,7 @@ check_recipe <- function(recipe) { # WORKFLOW CHECKS # --------------------------------------------------------------------- - # Calibration - # If 'method' is FALSE/no/'none' or NULL, set to 'raw' - ## TODO: Review this check + # Only one Calibration method allowed: if ((is.logical(recipe$Analysis$Workflow$Calibration$method) && recipe$Analysis$Workflow$Calibration$method == FALSE) || tolower(recipe$Analysis$Workflow$Calibration$method) == 'none' || @@ -296,109 +296,6 @@ check_recipe <- function(recipe) { } } } - # Downscaling - ## TODO: Simplify checks (reduce number of lines) - ## TODO: Add saving checks - downscal_params <- lapply(recipe$Analysis$Workflow$Downscaling, tolower) - # Define accepted entries - DOWNSCAL_TYPES <- c("none", "int", "intbc", "intlr", "analogs", "logreg") - BC_METHODS <- c("simple_bias", "calibration", "quantile_mapping") - LR_METHODS <- c("basic", "large_scale", "4nn") - LOGREG_METHODS <- c("ens_mean", "ens_mean_sd", "sorted_members") - # Check downscaling type - if ("type" %in% names(downscal_params)) { - if (length(downscal_params$type) == 0) { - downscal_params$type <- "none" - warn(recipe$Run$logger, - paste("Downscaling 'type' is empty in the recipe, setting it to", - "'none'.")) - } - if (!(downscal_params$type %in% DOWNSCAL_TYPES)) { - error(recipe$Run$logger, - paste0("The type of Downscaling request in the recipe is not ", - "available. It must be one of the following: ", - paste(DOWNSCAL_TYPES, collapse = ", "), ".")) - error_status <- T - } - if ((downscal_params$type %in% c("int", "intbc", "intlr", "logreg")) && - (length(downscal_params$target_grid) == 0)) { - error(recipe$Run$logger, - paste("A target grid is required for the downscaling method", - "requested in the recipe.")) - error_status <- T - } - if (downscal_params$type == "int") { - if (length(downscal_params$int_method) == 0) { - error(recipe$Run$logger, - paste("Downscaling type 'int' was requested, but no", - "interpolation method is provided in the recipe.")) - error_status <- T - } - } else if (downscal_params$type == "intbc") { - if (length(downscal_params$int_method) == 0) { - error(recipe$Run$logger, - paste("Downscaling type 'int' was requested in the recipe, but no", - "interpolation method is provided.")) - error_status <- T - } - if (length(downscal_params$bc_method)== 0) { - error(recipe$Run$logger, - paste("Downscaling type 'intbc' was requested in the recipe, but", - "no bias correction method is provided.")) - error_status <- T - } else if (!(downscal_params$bc_method %in% BC_METHODS)) { - error(recipe$Run$logger, - paste0("The accepted Bias Correction methods for the downscaling", - " module are: ", paste(BC_METHODS, collapse = ", "), ".")) - error_status <- T - } - } else if (downscal_params$type == "intlr") { - if (length(downscal_params$int_method) == 0) { - error(recipe$Run$logger, - paste("Downscaling type 'intlr' was requested in the recipe, but", - "no interpolation method was provided.")) - error_status <- T - } - if (length(downscal_params$lr_method) == 0) { - error(recipe$Run$logger, - paste("Downscaling type 'intlr' was requested in the recipe, but", - "no linear regression method was provided.")) - error_status <- T - } else if (!(downscal_params$lr_method %in% LR_METHODS)) { - error(recipe$Run$logger, - paste0("The accepted linear regression methods for the", - " downscaling module are: ", - paste(LR_METHODS, collapse = ", "), ".")) - error_status <- T - } - } else if (downscal_params$type == "analogs") { - if (length(nanalogs) == 0) { - warn(recipe$Run$logger, - paste("Downscaling type is 'analogs, but the number of analogs", - "has not been provided in the recipe.")) - } - } else if (downscal_params$type == "logreg") { - if (length(downscal_params$int_method) == 0) { - error(recipe$Run$logger, - paste("Downscaling type 'logreg' was requested in the recipe, but", - "no interpolation method was provided.")) - error_status <- T - } - if (length(downscal_params$log_reg_method) == 0) { - error(recipe$Run$logger, - paste("Downscaling type 'logreg' was requested in the recipe,", - "but no logistic regression method is provided.")) - error_status <- T - } else if (!(downscal_params$log_reg_method %in% LOGREG_METHODS)) { - error(recipe$Run$logger, - paste0("The accepted logistic regression methods for the ", - "downscaling module are: ", - paste(LOGREG_METHODS, collapse = ", "), ".")) - error_status <- T - } - } - } - # Indices if ("Indices" %in% names(recipe$Analysis$Workflow)) { nino_indices <- paste0("nino", c("1+2", "3", "3.4", "4")) @@ -459,7 +356,6 @@ check_recipe <- function(recipe) { error_status <- T } } - # Probabilities if ("Probabilities" %in% names(recipe$Analysis$Workflow)) { if (is.null(recipe$Analysis$Workflow$Probabilities$percentiles)) { @@ -484,7 +380,6 @@ check_recipe <- function(recipe) { error_status <- T } } - # Visualization if ("Visualization" %in% names(recipe$Analysis$Workflow)) { PLOT_OPTIONS <- c("skill_metrics", "forecast_ensemble_mean", @@ -552,7 +447,6 @@ check_recipe <- function(recipe) { # RUN CHECKS # --------------------------------------------------------------------- - ## TODO: These checks should probably go first RUN_FIELDS = c("Loglevel", "Terminal", "output_dir", "code_dir") LOG_LEVELS = c("INFO", "DEBUG", "WARN", "ERROR", "FATAL") diff --git a/tools/data_summary.R b/tools/data_summary.R index e3de9711..11f365cd 100644 --- a/tools/data_summary.R +++ b/tools/data_summary.R @@ -10,8 +10,7 @@ data_summary <- function(data_cube, recipe) { object_name <- deparse(substitute(data_cube)) if (recipe$Analysis$Variables$freq == "monthly_mean") { date_format <- "%b %Y" - } else if ((recipe$Analysis$Variables$freq == "daily_mean") || - (recipe$Analysis$Variables$freq == "daily")) { + } else if (recipe$Analysis$Variables$freq == "daily_mean") { date_format <- "%b %d %Y" } months <- unique(format(as.Date(data_cube$attrs$Dates), format = '%B')) -- GitLab From 200c9294af4c7137d0a7bc02be0012a06df844f2 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Thu, 28 Sep 2023 11:17:28 +0200 Subject: [PATCH 296/388] Update Downscaling checks --- tools/check_recipe.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/check_recipe.R b/tools/check_recipe.R index 5b81420b..9baa0e52 100644 --- a/tools/check_recipe.R +++ b/tools/check_recipe.R @@ -302,8 +302,8 @@ check_recipe <- function(recipe) { downscal_params <- lapply(recipe$Analysis$Workflow$Downscaling, tolower) # Define accepted entries DOWNSCAL_TYPES <- c("none", "int", "intbc", "intlr", "analogs", "logreg") - BC_METHODS <- c("simple_bias", "calibration", "quantile_mapping") - LR_METHODS <- c("basic", "large_scale", "4nn") + BC_METHODS <- c("quantile_mapping", "bias", "evmos", "mse_min", "crps_min", "rpc-based", "qm") + LR_METHODS <- c("basic", "large-scale", "4nn") LOGREG_METHODS <- c("ens_mean", "ens_mean_sd", "sorted_members") # Check downscaling type if ("type" %in% names(downscal_params)) { -- GitLab From d4780aed769e2680cb2334f9fed36baa235ef1f1 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Thu, 28 Sep 2023 11:17:47 +0200 Subject: [PATCH 297/388] Fix typo --- modules/Downscaling/Downscaling.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/Downscaling/Downscaling.R b/modules/Downscaling/Downscaling.R index 15f5ea9b..59233dc2 100644 --- a/modules/Downscaling/Downscaling.R +++ b/modules/Downscaling/Downscaling.R @@ -275,7 +275,7 @@ Downscaling <- function(recipe, data) { # Saving if (recipe$Analysis$Workflow$Downscaling$save != 'none') { - info(recipe$Run$logger, "##### START SAVING CALIBRATED DATA #####") + info(recipe$Run$logger, "##### START SAVING DOWNSCALED DATA #####") } ## TODO: What do we do with the full values? recipe$Run$output_dir <- paste0(recipe$Run$output_dir, -- GitLab From 283ec851edb8f38d4535602d5becc408ae21b46e Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Thu, 28 Sep 2023 11:18:16 +0200 Subject: [PATCH 298/388] Add example downscaling script and recipe --- example_scripts/example_downscaling.R | 29 ++++++++ .../recipe_system5c3s-tas_downscaling.yml | 62 ----------------- .../recipe_seasonal_downscaling.yml | 68 +++++++++++++++++++ 3 files changed, 97 insertions(+), 62 deletions(-) create mode 100644 example_scripts/example_downscaling.R delete mode 100644 modules/Loading/testing_recipes/recipe_system5c3s-tas_downscaling.yml create mode 100644 recipes/atomic_recipes/recipe_seasonal_downscaling.yml diff --git a/example_scripts/example_downscaling.R b/example_scripts/example_downscaling.R new file mode 100644 index 00000000..4e7e6294 --- /dev/null +++ b/example_scripts/example_downscaling.R @@ -0,0 +1,29 @@ +############################################################################### +## Author: V. Agudetse +## Description: Example script for seasonal downscaling. +############################################################################### + +# Load modules +source("modules/Loading/Loading.R") +source("modules/Units/Units.R") +source("modules/Downscaling/Downscaling.R") +source("modules/Skill/Skill.R") +source("modules/Saving/Saving.R") +source("modules/Visualization/Visualization.R") + +# Read recipe +recipe_file <- "recipes/atomic_recipes/recipe_seasonal_downscaling.yml" +recipe <- prepare_outputs(recipe_file) + +# Load datasets +data <- Loading(recipe) +# Change units +data <- Units(recipe, data) +# Downscale datasets +data <- Downscaling(recipe, data) +# Compute skill metrics +skill_metrics <- Skill(recipe, data) +# Compute percentiles and probability bins +probabilities <- Probabilities(recipe, data) +# Plot data +Visualization(recipe, data, skill_metrics, probabilities, significance = T) diff --git a/modules/Loading/testing_recipes/recipe_system5c3s-tas_downscaling.yml b/modules/Loading/testing_recipes/recipe_system5c3s-tas_downscaling.yml deleted file mode 100644 index 99e02c7d..00000000 --- a/modules/Loading/testing_recipes/recipe_system5c3s-tas_downscaling.yml +++ /dev/null @@ -1,62 +0,0 @@ -# ▄████▄ ██████ ▓█████▄ ▒█████ █ █░███▄ █ ██████ ▄████▄ ▄▄▄ ██▓ ▓█████ -#▒██▀ ▀█ ▒██ ▒ ▒██▀ ██▌▒██▒ ██▒▓█░ █ ░█░██ ▀█ █ ▒██ ▒ ▒██▀ ▀█ ▒████▄ ▓██▒ ▓█ ▀ -#▒▓█ ▄ ░ ▓██▄ ░██ █▌▒██░ ██▒▒█░ █ ░█▓██ ▀█ ██▒░ ▓██▄ ▒▓█ ▄ ▒██ ▀█▄ ▒██░ ▒███ -#▒▓▓▄ ▄██▒ ▒ ██▒░▓█▄ ▌▒██ ██░░█░ █ ░█▓██▒ ▐▌██▒ ▒ ██▒▒▓▓▄ ▄██▒░██▄▄▄▄██ ▒██░ ▒▓█ ▄ -#▒ ▓███▀ ░▒██████▒▒░▒████▓ ░ ████▓▒░░░██▒██▓▒██░ ▓██░▒██████▒▒▒ ▓███▀ ░ ▓█ ▓██▒░██████▒░▒████▒ -#░ ░▒ ▒ ░▒ ▒▓▒ ▒ ░ ▒▒▓ ▒ ░ ▒░▒░▒░ ░ ▓░▒ ▒ ░ ▒░ ▒ ▒ ▒ ▒▓▒ ▒ ░░ ░▒ ▒ ░ ▒▒ ▓▒█░░ ▒░▓ ░░░ ▒░ ░ -# ░ ▒ ░ ░▒ ░ ░ ░ ▒ ▒ ░ ▒ ▒░ ▒ ░ ░ ░ ░░ ░ ▒░░ ░▒ ░ ░ ░ ▒ ▒ ▒▒ ░░ ░ ▒ ░ ░ ░ ░ -#░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ▒ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ▒ ░ ░ ░ -#░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ -#░ ░ ░ -Description: - Author: J. Ramon -Info: downscaling of seasonal predictions from coarse to fine grids - -Analysis: - Horizon: Seasonal - Variables: - name: tas - freq: monthly_mean - Datasets: - System: - name: ECMWF-SEAS5 - Multimodel: no - Reference: - name: ERA5 - Time: - sdate: '0501' - hcst_start: '2000' - hcst_end: '2005' - ftime_min: 1 - ftime_max: 1 -#sometimes we want the region for the obs to be bigger than for hcst - Region: - latmin: 34.1 - latmax: 45.1 - lonmin: -12.5 - lonmax: 6.35 - Regrid: - method: bilinear - type: none - Workflow: - Calibration: - method: raw - Skill: - metric: BSS10 BSS90 Mean_Bias_SS RPSS ROCSS - Downscaling: - # Assumption 1: leave-one-out cross-validation is always applied - # Assumption 2: for analogs, we select the best analog (minimum distance) - # TO DO: add downscaling to point locations - type: intbc # mandatory, 'none', 'int', 'intbc', 'intlr', 'analogs', 'logreg' - int_method: conservative # optional, regridding method accepted by CDO - bc_method: simple_bias # optional, 'simple_bias', 'calibration', 'quantile_mapping' - lr_method: # optional, 'basic', 'large_scale', '4nn' - log_reg_method: # optional, 'ens_mean', 'ens_mean_sd', 'sorted_members' - target_grid: /esarchive/recon/ecmwf/era5/monthly_mean/tas_f1h/tas_200002.nc # optional, nc file or grid accepted by CDO - nanalogs: # optional, number of analogs to be searched - Output_format: S2S4E -Run: - Loglevel: INFO - Terminal: yes - output_dir: /esarchive/scratch/vagudets/repos/auto-s2s/out-logs/ - code_dir: /esarchive/scratch/vagudets/repos/auto-s2s/ diff --git a/recipes/atomic_recipes/recipe_seasonal_downscaling.yml b/recipes/atomic_recipes/recipe_seasonal_downscaling.yml new file mode 100644 index 00000000..509bd467 --- /dev/null +++ b/recipes/atomic_recipes/recipe_seasonal_downscaling.yml @@ -0,0 +1,68 @@ +Description: + Author: V. Agudetse + Description: Analysis of MF System 7 with temperature +Analysis: + Horizon: Seasonal + Variables: + name: tas + freq: monthly_mean + Datasets: + System: + name: ECMWF-SEAS5 + Multimodel: False + Reference: + name: ERA5 + Time: + sdate: '0501' + fcst_year: + hcst_start: '2000' + hcst_end: '2005' + ftime_min: 1 + ftime_max: 1 + Region: + latmin: 34.1 + latmax: 45.1 + lonmin: -12.5 + lonmax: 6.35 + Regrid: + method: + type: none + Workflow: + Anomalies: + compute: no # yes/no, default yes + cross_validation: no # yes/no, default yes + save: 'none' # 'all'/'none'/'exp_only'/'fcst_only' + Calibration: + method: mse_min + save: 'none' # 'all'/'none'/'exp_only'/'fcst_only' + Downscaling: + # Assumption 1: leave-one-out cross-validation is always applied + # Assumption 2: for analogs, we select the best analog (minimum distance) + type: intbc # mandatory, 'none', 'int', 'intbc', 'intlr', 'analogs', 'logreg' + int_method: conservative # optional, regridding method accepted by CDO + bc_method: bias # optional, 'simple_bias', 'calibration', 'quantile_mapping' + lr_method: # optional, 'basic', 'large_scale', '4nn' + log_reg_method: # optional, 'ens_mean', 'ens_mean_sd', 'sorted_members' + target_grid: /esarchive/recon/ecmwf/era5/monthly_mean/tas_f1h/tas_200002.nc # optional, nc file or grid accepted by CDO + nanalogs: # optional, number of analogs to be searched + save: 'all' + Skill: + metric: BSS10 BSS90 + save: 'all' # 'all'/'none' + Probabilities: + percentiles: [[1/3, 2/3], [1/10, 9/10]] + save: 'percentiles_only' # 'all'/'none'/'bins_only'/'percentiles_only' + Visualization: + plots: skill_metrics + multi_panel: no + projection: cylindrical_equidistant + Indicators: + index: no + ncores: 10 + remove_NAs: yes + Output_format: S2S4E +Run: + Loglevel: INFO + Terminal: yes + output_dir: /esarchive/scratch/vagudets/auto-s2s-outputs/ + code_dir: /esarchive/scratch/vagudets/repos/auto-s2s/ -- GitLab From a1576cf84db9660a246611e75673d8a908a4580e Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Thu, 28 Sep 2023 11:42:58 +0200 Subject: [PATCH 299/388] Update recipe parameter description --- .../recipe_seasonal_downscaling.yml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/recipes/atomic_recipes/recipe_seasonal_downscaling.yml b/recipes/atomic_recipes/recipe_seasonal_downscaling.yml index 509bd467..219c5d61 100644 --- a/recipes/atomic_recipes/recipe_seasonal_downscaling.yml +++ b/recipes/atomic_recipes/recipe_seasonal_downscaling.yml @@ -1,6 +1,6 @@ Description: Author: V. Agudetse - Description: Analysis of MF System 7 with temperature + Description: ECMWF-SEAS5 Downscaling Analysis: Horizon: Seasonal Variables: @@ -38,14 +38,14 @@ Analysis: Downscaling: # Assumption 1: leave-one-out cross-validation is always applied # Assumption 2: for analogs, we select the best analog (minimum distance) - type: intbc # mandatory, 'none', 'int', 'intbc', 'intlr', 'analogs', 'logreg' - int_method: conservative # optional, regridding method accepted by CDO - bc_method: bias # optional, 'simple_bias', 'calibration', 'quantile_mapping' - lr_method: # optional, 'basic', 'large_scale', '4nn' - log_reg_method: # optional, 'ens_mean', 'ens_mean_sd', 'sorted_members' - target_grid: /esarchive/recon/ecmwf/era5/monthly_mean/tas_f1h/tas_200002.nc # optional, nc file or grid accepted by CDO - nanalogs: # optional, number of analogs to be searched - save: 'all' + type: intbc # mandatory, 'none', 'int', 'intbc', 'intlr', 'analogs', 'logreg'. + int_method: conservative # regridding method accepted by CDO. + bc_method: bias # If type intbc. Options: 'bias', 'calibration', 'quantile_mapping', 'qm', 'evmos', 'mse_min', 'crps_min', 'rpc-based'. + lr_method: # If type intlr. Options: 'basic', 'large_scale', '4nn' + log_reg_method: # If type logreg. Options: 'ens_mean', 'ens_mean_sd', 'sorted_members' + target_grid: /esarchive/recon/ecmwf/era5/monthly_mean/tas_f1h/tas_200002.nc # nc file or grid accepted by CDO + nanalogs: # If type analgs. Number of analogs to be searched + save: 'all' # 'all'/'none'/'exp_only' Skill: metric: BSS10 BSS90 save: 'all' # 'all'/'none' -- GitLab From 85ffaea0545e6ed1ca0cd87eba9bac58e8ea5d19 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Thu, 28 Sep 2023 17:09:02 +0200 Subject: [PATCH 300/388] Add 'daily' to conditionals --- conf/archive.yml | 1 - modules/Calibration/Calibration.R | 2 +- modules/Visualization/R/plot_ensemble_mean.R | 2 +- modules/Visualization/R/plot_most_likely_terciles_map.R | 2 +- modules/Visualization/R/plot_skill_metrics.R | 2 +- tools/data_summary.R | 2 +- 6 files changed, 5 insertions(+), 6 deletions(-) diff --git a/conf/archive.yml b/conf/archive.yml index a347dc40..72c4db2d 100644 --- a/conf/archive.yml +++ b/conf/archive.yml @@ -7,7 +7,6 @@ esarchive: src: "exp/ecmwf/system5c3s/" daily_mean: {"tas":"_f6h/", "rsds":"_s0-24h/", "prlr":"_s0-24h/", "sfcWind":"_f6h/", - "tasmin":"_f24h/", "tasmax":"_f24h/", "ta300":"_f12h/", "ta500":"_f12h/", "ta850":"_f12h/", "g300":"_f12h/", "g500":"_f12h/", "g850":"_f12h/", "tdps":"_f6h/", "hurs":"_f6h/"} diff --git a/modules/Calibration/Calibration.R b/modules/Calibration/Calibration.R index 171b22cf..d60c369a 100644 --- a/modules/Calibration/Calibration.R +++ b/modules/Calibration/Calibration.R @@ -110,7 +110,7 @@ Calibration <- function(recipe, data) { fcst_calibrated <- NULL } } - } else if (recipe$Analysis$Variables$freq == "daily_mean") { + } else if (recipe$Analysis$Variables$freq %in% c("daily", "daily_mean")) { # Daily data calibration using Quantile Mapping if (!(method %in% c("qmap"))) { error(recipe$Run$logger, diff --git a/modules/Visualization/R/plot_ensemble_mean.R b/modules/Visualization/R/plot_ensemble_mean.R index 8a16341e..a423c521 100644 --- a/modules/Visualization/R/plot_ensemble_mean.R +++ b/modules/Visualization/R/plot_ensemble_mean.R @@ -1,7 +1,7 @@ plot_ensemble_mean <- function(recipe, fcst, mask = NULL, dots = NULL, outdir, output_conf) { ## TODO: Add 'anomaly' to plot title # Abort if frequency is daily - if (recipe$Analysis$Variables$freq == "daily_mean") { + if (recipe$Analysis$Variables$freq %in% c("daily", "daily_mean")) { stop("Visualization functions not yet implemented for daily data.") } latitude <- fcst$coords$lat diff --git a/modules/Visualization/R/plot_most_likely_terciles_map.R b/modules/Visualization/R/plot_most_likely_terciles_map.R index 66006ed1..abd08f7b 100644 --- a/modules/Visualization/R/plot_most_likely_terciles_map.R +++ b/modules/Visualization/R/plot_most_likely_terciles_map.R @@ -20,7 +20,7 @@ plot_most_likely_terciles <- function(recipe, ## TODO: Add 'anomaly' to plot title # Abort if frequency is daily - if (recipe$Analysis$Variables$freq == "daily_mean") { + if (recipe$Analysis$Variables$freq %in% c("daily", "daily_mean")) { stop("Visualization functions not yet implemented for daily data.") } diff --git a/modules/Visualization/R/plot_skill_metrics.R b/modules/Visualization/R/plot_skill_metrics.R index 96496fb4..2698d499 100644 --- a/modules/Visualization/R/plot_skill_metrics.R +++ b/modules/Visualization/R/plot_skill_metrics.R @@ -10,7 +10,7 @@ plot_skill_metrics <- function(recipe, data_cube, skill_metrics, # significance: T/F, whether to display the significance dots in the plots # Abort if frequency is daily - if (recipe$Analysis$Variables$freq == "daily_mean") { + if (recipe$Analysis$Variables$freq %in% c("daily", "daily_mean")) { error(recipe$Run$logger, "Visualization functions not yet implemented for daily data.") stop() diff --git a/tools/data_summary.R b/tools/data_summary.R index 11f365cd..b76101ba 100644 --- a/tools/data_summary.R +++ b/tools/data_summary.R @@ -10,7 +10,7 @@ data_summary <- function(data_cube, recipe) { object_name <- deparse(substitute(data_cube)) if (recipe$Analysis$Variables$freq == "monthly_mean") { date_format <- "%b %Y" - } else if (recipe$Analysis$Variables$freq == "daily_mean") { + } else if (recipe$Analysis$Variables$freq %in% c("daily", "daily_mean")) { date_format <- "%b %d %Y" } months <- unique(format(as.Date(data_cube$attrs$Dates), format = '%B')) -- GitLab From a69a19de8ce770b0f50236478f07b1f0d41f25e5 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Fri, 29 Sep 2023 11:58:06 +0200 Subject: [PATCH 301/388] Modify seasonal archive and loading script to make daily loading more flexible --- conf/archive.yml | 175 ++++++++++++++++-------------- modules/Loading/R/load_seasonal.R | 18 +-- 2 files changed, 103 insertions(+), 90 deletions(-) diff --git a/conf/archive.yml b/conf/archive.yml index 72c4db2d..7cfacee9 100644 --- a/conf/archive.yml +++ b/conf/archive.yml @@ -5,17 +5,23 @@ esarchive: name: "ECMWF SEAS5" institution: "European Centre for Medium-Range Weather Forecasts" src: "exp/ecmwf/system5c3s/" - daily_mean: {"tas":"_f6h/", "rsds":"_s0-24h/", - "prlr":"_s0-24h/", "sfcWind":"_f6h/", - "ta300":"_f12h/", "ta500":"_f12h/", "ta850":"_f12h/", - "g300":"_f12h/", "g500":"_f12h/", "g850":"_f12h/", - "tdps":"_f6h/", "hurs":"_f6h/"} - monthly_mean: {"tas":"_f6h/", "rsds":"_s0-24h/", - "prlr":"_s0-24h/", "sfcWind":"_f6h/", - "tasmin":"_f24h/", "tasmax":"_f24h/", - "ta300":"_f12h/", "ta500":"_f12h/", "ta850":"_f12h/", - "g300":"_f12h/", "g500":"_f12h/", "g850":"_f12h/", - "tdps":"_f6h/", "psl":"_f6h/", "tos":"_f6h/"} + daily_mean: {"tas":"daily_mean/tas_f6h/", "rsds":"daily/rsds_s0-24h/", + "prlr":"daily/prlr_s0-24h/", "tasmin":"daily/tasmin/", + "tasmax":"daily/tasmax/", "sfcWind":"daily_mean/sfcWind_f6h/", + "ta300":"daily_mean/ta300_f12h/", "ta500":"daily_mean/ta500_f12h/", + "ta850":"daily_mean/ta850_f12h/", "g300":"daily_mean/g300_f12h/", + "g500":"daily_mean/g500_f12h/", "g850":"daily_mean/g850_f12h/", + "tdps":"daily_mean/tdps_f6h/", "hurs":"daily_mean/hurs_f6h/"} + monthly_mean: {"tas":"monthly_mean/tas_f6h/", "rsds":"monthly_mean/rsds_s0-24h/", + "prlr":"monthly_mean/prlr_s0-24h/", + "sfcWind":"monthly_mean/sfcWind_f6h/", + "tasmin":"monthly_mean/tasmin_f24h/", + "tasmax":"monthly_mean/tasmax_f24h/", + "ta300":"monthly_mean/ta300_f12h/", "ta500":"monthly_mean/ta500_f12h/", + "ta850":"monthly_mean/ta850_f12h/", "g300":"monthly_mean/g300_f12h/", + "g500":"monthly_mean/g500_f12h/", "g850":"monthly_mean/g500_f12h/", + "tdps":"monthly_mean/tdps_f6h/", "psl":"monthly_mean/psl_f6h/", + "tos":"monthly_mean/tos_f6h/"} nmember: fcst: 51 hcst: 25 @@ -26,13 +32,15 @@ esarchive: name: "ECMWF SEAS5 (v5.1)" institution: "European Centre for Medium-Range Weather Forecasts" src: "exp/ecmwf/system51c3s/" - daily_mean: {"tas":"_f6h/", "prlr":"_s0-24h/", "sfcWind":"_f6h/", - "uas":"_f6h/", "vas":"_f6h/", "psl":"_f6h/", - "tdps":"_f6h/"} - monthly_mean: {"tas":"_f6h/", "rsds":"_s0-24h/", "prlr":"_s0-24h/", - "sfcWind":"_f6h/", "tasmin":"_f24h/", "tasmax":"_f24h/", - "uas":"_f6h/", "vas":"_f6h/", "psl":"_f6h/", - "tdps":"_f6h/"} + daily_mean: {"tas":"daily_mean/tas_f6h/", "prlr":"daily/prlr_s0-24h/", + "sfcWind":"daily_mean/sfcWind_f6h/", + "uas":"daily_mean/uas_f6h/", "vas":"daily_mean/vas_f6h/", + "psl":"daily_mean/psl_f6h/", "tdps":"daily_mean/tdps_f6h/"} + monthly_mean: {"tas":"monthly_mean/tas_f6h/", "rsds":"monthly_mean/rsds_s0-24h/", + "prlr":"monthly_mean/prlr_s0-24h/", "sfcWind":"monthly_mean/sfcWind_f6h/", + "tasmin":"monthly_mean/tasmin_f24h/", "tasmax":"monthly_mean/tasmax_f24h/", + "uas":"monthly_mean/uas_f6h/", "vas":"monthly_mean/vas_f6h/", + "psl":"monthly_mean/psl_f6h/", "tdps":"monthly_mean/tdps_f6h/"} nmember: fcst: 51 hcst: 25 @@ -43,9 +51,9 @@ esarchive: name: "Meteo-France System 7" institution: "European Centre for Medium-Range Weather Forecasts" src: "exp/meteofrance/system7c3s/" - monthly_mean: {"tas":"_f6h/", "g500":"_f12h/", - "prlr":"_f24h/", "sfcWind": "_f6h/", - "tasmax":"_f6h/", "tasmin": "_f6h/"} + monthly_mean: {"tas":"monthly_mean/tas_f6h/", "g500":"monthly_mean/g500_f12h/", + "prlr":"monthly_mean/prlr_f24h/", "sfcWind": "monthly_mean/sfcWind_f6h/", + "tasmax":"monthly_mean/tasmax_f6h/", "tasmin": "monthly_mean/tasmin_f6h/"} nmember: fcst: 51 hcst: 25 @@ -56,9 +64,9 @@ esarchive: name: "DWD GCFS 2.1" institution: "European Centre for Medium-Range Weather Forecasts" src: "exp/dwd/system21_m1/" - monthly_mean: {"tas":"_f6h/", "prlr":"_f24h/", - "g500":"_f12h/", "sfcWind":"_f6h/", - "tasmin":"_f24h/", "tasmax":"_f24h/"} + monthly_mean: {"tas":"monthly_mean/tas_f6h/", "prlr":"monthly_mean/prlr_f24h/", + "g500":"monthly_mean/g500_f12h/", "sfcWind":"monthly_mean/sfcWind_f6h/", + "tasmin":"monthly_mean/tasmin_f24h/", "tasmax":"monthly_mean/tasmax_f24h/"} nmember: fcst: 50 hcst: 30 @@ -69,9 +77,9 @@ esarchive: name: "CMCC-SPS3.5" institution: "European Centre for Medium-Range Weather Forecasts" src: "exp/cmcc/system35c3s/" - monthly_mean: {"tas":"_f6h/", "g500":"_f12h/", - "prlr":"_f24h/", "sfcWind": "_f6h/", - "tasmax":"_f24h/", "tasmin":"_f24h"} + monthly_mean: {"tas":"monthly_mean/tas_f6h/", "prlr":"monthly_mean/prlr_f24h/", + "g500":"monthly_mean/g500_f12h/", "sfcWind":"monthly_mean/sfcWind_f6h/", + "tasmin":"monthly_mean/tasmin_f24h/", "tasmax":"monthly_mean/tasmax_f24h/"} nmember: fcst: 50 hcst: 40 @@ -82,8 +90,8 @@ esarchive: name: "JMA System 2" institution: "European Centre for Medium-Range Weather Forecasts" src: "exp/jma/system2c3s/" - monthly_mean: {"tas":"_f6h/", "prlr":"_f6h/", - "tasmax":"_f6h/", "tasmin":"_f6h/"} + monthly_mean: {"tas":"monthly_mean/tas_f6h/", "prlr":"monthly_mean/prlr_f6h/", + "tasmax":"monthly_mean/tasmax_f6h/", "tasmin":"monthly_mean/tasmin_f6h/"} nmember: fcst: 10 hcst: 10 @@ -94,8 +102,8 @@ esarchive: name: "ECCC CanCM4i" institution: "European Centre for Medium-Range Weather Forecasts" src: "exp/eccc/eccc1/" - monthly_mean: {"tas":"_f6h/", "prlr":"_f6h/", - "tasmax":"_f6h/", "tasmin":"_f6h/"} + monthly_mean: {"tas":"monthly_mean/tas_f6h/", "prlr":"monthly_mean/prlr_f6h/", + "tasmax":"monthly_mean/tasmax_f6h/", "tasmin":"monthly_mean/tasmin_f6h/"} nmember: fcst: 10 hcst: 10 @@ -106,8 +114,8 @@ esarchive: name: "UK MetOffice GloSea 6 (v6.0)" institution: "European Centre for Medium-Range Weather Forecasts" src: "exp/ukmo/glosea6_system600-c3s/" - monthly_mean: {"tas":"_f6h/", "tasmin":"_f24h/", - "tasmax":"_f24h/", "prlr":"_f24h/"} + monthly_mean: {"tas":"monthly_mean/tas_f6h/", "tasmin":"monthly_mean/tasmin_f24h/", + "tasmax":"monthly_mean/tasmax_f24h/", "prlr":"monthly_mean/prlr_f24h/"} nmember: fcst: 62 hcst: 28 @@ -118,8 +126,8 @@ esarchive: name: "NCEP CFSv2" institution: "NOAA NCEP" #? src: "exp/ncep/cfs-v2/" - monthly_mean: {"tas":"_f6h/", "prlr":"_f6h/", - "tasmax":"_f6h/", "tasmin":"_f6h/"} + monthly_mean: {"tas":"monthly_mean/tas_f6h/", "prlr":"monthly_mean/prlr_f6h/", + "tasmax":"monthly_mean/tasmax_f6h/", "tasmin":"monthly_mean/tasmin_f6h/"} nmember: fcst: 20 hcst: 20 @@ -131,92 +139,95 @@ esarchive: name: "ERA5" institution: "European Centre for Medium-Range Weather Forecasts" src: "recon/ecmwf/era5/" - daily_mean: {"tas":"_f1h-r1440x721cds/", - "rsds":"_f1h-r1440x721cds/", - "prlr":"_f1h-r1440x721cds/", - "g300":"_f1h-r1440x721cds/", - "g500":"_f1h-r1440x721cds/", - "g850":"_f1h-r1440x721cds/", - "sfcWind":"_f1h-r1440x721cds/", - "tasmax":"_f1h-r1440x721cds/", - "tasmin":"_f1h-r1440x721cds/", - "ta300":"_f1h-r1440x721cds/", - "ta500":"_f1h-r1440x721cds/", - "ta850":"_f1h-r1440x721cds/", - "hurs":"_f1h-r1440x721cds/"} - monthly_mean: {"tas":"_f1h-r1440x721cds/", - "psl":"_f1h-r1440x721cds/", - "prlr":"_f1h-r1440x721cds/", - "rsds":"_f1h-r1440x721cds/", - "g300":"_f1h-r1440x721cds/", - "g500":"_f1h-r1440x721cds/", - "g850":"_f1h-r1440x721cds/", - "sfcWind":"_f1h-r1440x721cds/", - "tasmax":"_f1h-r1440x721cds/", - "tasmin":"_f1h-r1440x721cds/", - "ta300":"_f1h-r1440x721cds/", - "ta500":"_f1h-r1440x721cds/", - "ta850":"_f1h-r1440x721cds/", - "tos":"_f1h-r1440x721cds/"} + daily_mean: {"tas":"daily_mean/tas_f1h-r1440x721cds/", + "rsds":"daily_mean/rsds_f1h-r1440x721cds/", + "prlr":"daily_mean/prlr_f1h-r1440x721cds/", + "g300":"daily_mean/g300_f1h-r1440x721cds/", + "g500":"daily_mean/g500_f1h-r1440x721cds/", + "g850":"daily_mean/g850_f1h-r1440x721cds/", + "sfcWind":"daily_mean/sfcWind_f1h-r1440x721cds/", + "tasmax":"daily/tasmax_f1h-r1440x721cds/", + "tasmin":"daily/tasmin_f1h-r1440x721cds/", + "ta300":"daily_mean/ta300_f1h-r1440x721cds/", + "ta500":"daily_mean/ta500_f1h-r1440x721cds/", + "ta850":"daily_mean/ta850_f1h-r1440x721cds/", + "hurs":"daily_mean/hurs_f1h-r1440x721cds/"} + monthly_mean: {"tas":"monthly_mean/tas_f1h-r1440x721cds/", + "psl":"monthly_mean/psl_f1h-r1440x721cds/", + "prlr":"monthly_mean/prlr_f1h-r1440x721cds/", + "rsds":"monthly_mean/rsds_f1h-r1440x721cds/", + "g300":"monthly_mean/g300_f1h-r1440x721cds/", + "g500":"monthly_mean/g500_f1h-r1440x721cds/", + "g850":"monthly_mean/g850_f1h-r1440x721cds/", + "sfcWind":"monthly_mean/sfcWind_f1h-r1440x721cds/", + "tasmax":"monthly_mean/tasmax_f1h-r1440x721cds/", + "tasmin":"monthly_mean/tasmin_f1h-r1440x721cds/", + "ta300":"montly_mean/ta300_f1h-r1440x721cds/", + "ta500":"monthly_mean/ta500_f1h-r1440x721cds/", + "ta850":"monthly_mean/ta850_f1h-r1440x721cds/", + "tos":"monthly_mean/tos_f1h-r1440x721cds/"} calendar: "standard" reference_grid: "/esarchive/recon/ecmwf/era5/monthly_mean/tas_f1h-r1440x721cds/tas_201805.nc" ERA5-Land: name: "ERA5-Land" institution: "European Centre for Medium-Range Weather Forecasts" src: "recon/ecmwf/era5land/" - daily_mean: {"tas":"_f1h/", "rsds":"_f1h/", - "prlr":"_f1h/", "sfcWind":"_f1h/"} - monthly_mean: {"tas":"_f1h/","tasmin":"_f24h/", - "tasmax":"_f24h/", "prlr":"_f1h/", - "sfcWind":"_f1h/", "rsds":"_f1h/", - "tdps":"_f1h/"} + daily_mean: {"tas":"daily_mean/tas_f1h/", "rsds":"daily_mean/rsds_f1h/", + "prlr":"daily_mean/prlr_f1h/", "sfcWind":"daily_mean/sfcWind_f1h/", + "tasmin":"daily/tasmin/", "tasmax":"daily/tasmax/"} + monthly_mean: {"tas":"monthly_mean/tas_f1h/","tasmin":"monthly_mean/tasmin_f24h/", + "tasmax":"monthly_mean/tasmax_f24h/", "prlr":"monthly_mean/prlr_f1h/", + "sfcWind":"monthly_mean/sfcWind_f1h/", "rsds":"monthly_mean/rsds_f1h/", + "tdps":"monthly_mean/tdps_f1h/"} calendar: "proleptic_gregorian" reference_grid: "/esarchive/recon/ecmwf/era5land/daily_mean/tas_f1h/tas_201805.nc" UERRA: name: "ECMWF UERRA" institution: "European Centre for Medium-Range Weather Forecasts" src: "recon/ecmwf/uerra_mescan/" - daily_mean: {"tas":"_f6h/"} - monthly_mean: {"tas":"_f6h/"} + daily_mean: {"tas":"daily_mean/tas_f6h/"} + monthly_mean: {"tas":"monthly_mean/tas_f6h/"} calendar: "proleptic_gregorian" reference_grid: "/esarchive/recon/ecmwf/uerra_mescan/daily_mean/tas_f6h/tas_201805.nc" CERRA: name: "ECMWF CERRA" institution: "European Centre for Medium-Range Weather Forecasts" src: "recon/ecmwf/cerra/" - daily_mean: {"hur":"_f3h-r2631x1113/", "ps":"_f3h-r2631x1113/", "sfcWind":"_f3h-r2631x1113/", - "tas":"_f3h-r2631x1113/", "winddir":"_f3h-r2631x1113/"} - monthly_mean: {"hurs":"_f3h-r2631x1113/", "ps":"_f3h-r2631x1113/", "sfcWind":"_f3h-r2631x1113/", - "tas":"_f3h-r2631x1113/", "winddir":"_f3h-r2631x1113/","tasmin":"_f24h-r2631x1113/","tasmax":"_f24h-r2631x1113/"} + daily_mean: {"hur":"daily_mean/hur_f3h-r2631x1113/", "ps":"daily_mean/ps_f3h-r2631x1113/", + "sfcWind":"daily_mean/sfcWind_f3h-r2631x1113/", + "tas":"daily_mean/tas_f3h-r2631x1113/", "winddir":"daily_mean/tas_f3h-r2631x1113/"} + monthly_mean: {"hurs":"monthly_mean/hurs_f3h-r2631x1113/", "ps":"monthly_mean/ps_f3h-r2631x1113/", + "sfcWind":"monthly_mean/sfcWind_f3h-r2631x1113/", + "tas":"monthly_mean/tas_f3h-r2631x1113/", + "winddir":"monthly_mean/winddir_f3h-r2631x1113/", + "tasmin":"monthly_mean/tasmin_f24h-r2631x1113/", + "tasmax":"monthly_mean/tasmax_f24h-r2631x1113/"} calendar: "proleptic_gregorian" reference_grid: "/esarchive/recon/ecmwf/cerra/monthly_mean/tas_f3h-r2631x1113/tas_200506.nc" CERRA-Land: name: "ECMWF CERRA-Land" institution: "European Centre for Medium-Range Weather Forecasts" src: "recon/ecmwf/cerraland/" - daily_mean: {"prlr":"_f6h-r2631x1113/"} - monthly_mean: {"prlr":"_f6h-r2631x1113/"} + daily_mean: {"prlr":"daily_mean/prlr_f6h-r2631x1113/"} + monthly_mean: {"prlr":"monthly_mean/prlr_f6h-r2631x1113/"} calendar: "proleptic_gregorian" reference_grid: "/esarchive/recon/ecmwf/cerraland/monthly_mean/prlr_f6h-r2631x1113/prlr_200412.nc" HadCRUT5: name: "HadCRUT5" institution: "Met Office" src: "obs/ukmo/hadcrut_v5.0_analysis/" - monthly_mean: {"tasanomaly":"/"} + monthly_mean: {"tasanomaly":"monthly_mean/tasanomaly/"} calendar: "proleptic_gregorian" reference_grid: "/esarchive/obs/ukmo/hadcrut_v5.0_analysis/monthly_mean/tasanomaly/tasanomaly_202001.nc" BEST: name: "BEST" institution: "European Centre for Medium-Range Weather Forecasts" src: "obs/berkeleyearth/berkeleyearth/" - daily_mean: {"tas":"/"} - monthly_mean: {"tas":"/"} + daily_mean: {"tas":"daily_mean/tas/"} + monthly_mean: {"tas":"monthly_mean/tas/"} calendar: "proleptic_gregorian" reference_grid: "/esarchive/obs/berkeleyearth/berkeleyearth/monthly_mean/tas/tas_201805.nc" - - - mars: src: "/esarchive/" System: diff --git a/modules/Loading/R/load_seasonal.R b/modules/Loading/R/load_seasonal.R index 12a19c6c..b35a5a8b 100644 --- a/modules/Loading/R/load_seasonal.R +++ b/modules/Loading/R/load_seasonal.R @@ -67,21 +67,23 @@ load_seasonal <- function(recipe) { ## accum <- FALSE ##} + if (store.freq %in% c("daily", "daily_mean")) { + frequency <- "daily_mean" + } else if (store.freq == "monthly_mean") { + frequency <- "monthly_mean" + } var_dir_obs <- reference_descrip[[store.freq]][variable] var_dir_exp <- exp_descrip[[store.freq]][variable] # ----------- - obs.path <- paste0(archive$src, - obs.dir, store.freq, "/$var$", "$var_dir$", - "/$var$_$file_date$.nc") + obs.path <- paste0(archive$src, obs.dir, "$var_dir$", + "$var$_$file_date$.nc") - hcst.path <- paste0(archive$src, - hcst.dir, store.freq, "/$var$", "$var_dir$", + hcst.path <- paste0(archive$src, hcst.dir, "$var_dir$", "$var$_$file_date$.nc") - fcst.path <- paste0(archive$src, - hcst.dir, store.freq, "/$var$", "$var_dir$", - "/$var$_$file_date$.nc") + fcst.path <- paste0(archive$src, hcst.dir, "$var_dir$", + "$var$_$file_date$.nc") # Define regrid parameters: #------------------------------------------------------------------- -- GitLab From df2f33c3f3a5c935d18cab494f0c518af9e3e025 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Fri, 29 Sep 2023 12:56:04 +0200 Subject: [PATCH 302/388] Fix bug in analogs check --- tools/check_recipe.R | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tools/check_recipe.R b/tools/check_recipe.R index 9baa0e52..74d16acf 100644 --- a/tools/check_recipe.R +++ b/tools/check_recipe.R @@ -372,10 +372,11 @@ check_recipe <- function(recipe) { error_status <- T } } else if (downscal_params$type == "analogs") { - if (length(nanalogs) == 0) { + + if (is.null(recipe$Analysis$Workflow$Downscaling$nanalogs)) { warn(recipe$Run$logger, paste("Downscaling type is 'analogs, but the number of analogs", - "has not been provided in the recipe.")) + "has not been provided in the recipe. The default is 3.")) } } else if (downscal_params$type == "logreg") { if (length(downscal_params$int_method) == 0) { -- GitLab From a0c612ae222876fe42648b302338c14f3db34e60 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Fri, 29 Sep 2023 14:27:44 +0200 Subject: [PATCH 303/388] Fix downscaling recipe checks --- tools/check_recipe.R | 182 +++++++++++++++++++++---------------------- 1 file changed, 90 insertions(+), 92 deletions(-) diff --git a/tools/check_recipe.R b/tools/check_recipe.R index 74d16acf..3de1f63b 100644 --- a/tools/check_recipe.R +++ b/tools/check_recipe.R @@ -296,107 +296,105 @@ check_recipe <- function(recipe) { } } } + # Downscaling - ## TODO: Simplify checks (reduce number of lines) - ## TODO: Add saving checks - downscal_params <- lapply(recipe$Analysis$Workflow$Downscaling, tolower) - # Define accepted entries - DOWNSCAL_TYPES <- c("none", "int", "intbc", "intlr", "analogs", "logreg") - BC_METHODS <- c("quantile_mapping", "bias", "evmos", "mse_min", "crps_min", "rpc-based", "qm") - LR_METHODS <- c("basic", "large-scale", "4nn") - LOGREG_METHODS <- c("ens_mean", "ens_mean_sd", "sorted_members") - # Check downscaling type - if ("type" %in% names(downscal_params)) { - if (length(downscal_params$type) == 0) { - downscal_params$type <- "none" - warn(recipe$Run$logger, - paste("Downscaling 'type' is empty in the recipe, setting it to", - "'none'.")) - } - if (!(downscal_params$type %in% DOWNSCAL_TYPES)) { - error(recipe$Run$logger, - paste0("The type of Downscaling request in the recipe is not ", - "available. It must be one of the following: ", - paste(DOWNSCAL_TYPES, collapse = ", "), ".")) - error_status <- T - } - if ((downscal_params$type %in% c("int", "intbc", "intlr", "logreg")) && - (length(downscal_params$target_grid) == 0)) { - error(recipe$Run$logger, - paste("A target grid is required for the downscaling method", - "requested in the recipe.")) - error_status <- T - } - if (downscal_params$type == "int") { - if (length(downscal_params$int_method) == 0) { - error(recipe$Run$logger, - paste("Downscaling type 'int' was requested, but no", - "interpolation method is provided in the recipe.")) - error_status <- T - } - } else if (downscal_params$type == "intbc") { - if (length(downscal_params$int_method) == 0) { - error(recipe$Run$logger, - paste("Downscaling type 'int' was requested in the recipe, but no", - "interpolation method is provided.")) - error_status <- T - } - if (length(downscal_params$bc_method)== 0) { - error(recipe$Run$logger, - paste("Downscaling type 'intbc' was requested in the recipe, but", - "no bias correction method is provided.")) - error_status <- T - } else if (!(downscal_params$bc_method %in% BC_METHODS)) { - error(recipe$Run$logger, - paste0("The accepted Bias Correction methods for the downscaling", - " module are: ", paste(BC_METHODS, collapse = ", "), ".")) - error_status <- T - } - } else if (downscal_params$type == "intlr") { - if (length(downscal_params$int_method) == 0) { - error(recipe$Run$logger, - paste("Downscaling type 'intlr' was requested in the recipe, but", - "no interpolation method was provided.")) - error_status <- T - } - if (length(downscal_params$lr_method) == 0) { - error(recipe$Run$logger, - paste("Downscaling type 'intlr' was requested in the recipe, but", - "no linear regression method was provided.")) - error_status <- T - } else if (!(downscal_params$lr_method %in% LR_METHODS)) { - error(recipe$Run$logger, - paste0("The accepted linear regression methods for the", - " downscaling module are: ", - paste(LR_METHODS, collapse = ", "), ".")) - error_status <- T - } - } else if (downscal_params$type == "analogs") { - - if (is.null(recipe$Analysis$Workflow$Downscaling$nanalogs)) { + if ("Downscaling" %in% names(recipe$Analysis$Workflow)) { + downscal_params <- lapply(recipe$Analysis$Workflow$Downscaling, tolower) + # Define accepted entries + DOWNSCAL_TYPES <- c("none", "int", "intbc", "intlr", "analogs", "logreg") + BC_METHODS <- c("quantile_mapping", "bias", "evmos", "mse_min", "crps_min", + "rpc-based", "qm") + LR_METHODS <- c("basic", "large-scale", "4nn") + LOGREG_METHODS <- c("ens_mean", "ens_mean_sd", "sorted_members") + # Check downscaling type + if ("type" %in% names(downscal_params)) { + if (length(downscal_params$type) == 0) { + downscal_params$type <- "none" warn(recipe$Run$logger, - paste("Downscaling type is 'analogs, but the number of analogs", - "has not been provided in the recipe. The default is 3.")) + paste("Downscaling 'type' is empty in the recipe, setting it to", + "'none'.")) } - } else if (downscal_params$type == "logreg") { - if (length(downscal_params$int_method) == 0) { + if (!(downscal_params$type %in% DOWNSCAL_TYPES)) { error(recipe$Run$logger, - paste("Downscaling type 'logreg' was requested in the recipe, but", - "no interpolation method was provided.")) + paste0("The type of Downscaling request in the recipe is not ", + "available. It must be one of the following: ", + paste(DOWNSCAL_TYPES, collapse = ", "), ".")) error_status <- T } - if (length(downscal_params$log_reg_method) == 0) { - error(recipe$Run$logger, - paste("Downscaling type 'logreg' was requested in the recipe,", - "but no logistic regression method is provided.")) - error_status <- T - } else if (!(downscal_params$log_reg_method %in% LOGREG_METHODS)) { + if ((downscal_params$type %in% c("int", "intbc", "intlr", "logreg")) && + (is.null(downscal_params$target_grid))) { error(recipe$Run$logger, - paste0("The accepted logistic regression methods for the ", - "downscaling module are: ", - paste(LOGREG_METHODS, collapse = ", "), ".")) + paste("A target grid is required for the downscaling method", + "requested in the recipe.")) error_status <- T } + if (downscal_params$type == "int") { + if (is.null(downscal_params$int_method)) { + error(recipe$Run$logger, + paste("Downscaling type 'int' was requested, but no", + "interpolation method is provided in the recipe.")) + error_status <- T + } + } else if (downscal_params$type %in% + c("int", "intbc", "intlr", "logreg")) { + if (is.null(downscal_params$int_method)) { + error(recipe$Run$logger, + paste("Downscaling type", downscal_params$type, + "was requested in the recipe, but no", + "interpolation method is provided.")) + error_status <- T + } + } else if (downscal_parans$type == "intbc") { + if (is.null(downscal_params$bc_method)) { + error(recipe$Run$logger, + paste("Downscaling type 'intbc' was requested in the recipe, but", + "no bias correction method is provided.")) + error_status <- T + } else if (!(downscal_params$bc_method %in% BC_METHODS)) { + error(recipe$Run$logger, + paste0("The accepted Bias Correction methods for the downscaling", + " module are: ", paste(BC_METHODS, collapse = ", "), ".")) + error_status <- T + } + } else if (downscal_params$type == "intlr") { + if (length(downscal_params$lr_method) == 0) { + error(recipe$Run$logger, + paste("Downscaling type 'intlr' was requested in the recipe, but", + "no linear regression method was provided.")) + error_status <- T + } else if (!(downscal_params$lr_method %in% LR_METHODS)) { + error(recipe$Run$logger, + paste0("The accepted linear regression methods for the", + " downscaling module are: ", + paste(LR_METHODS, collapse = ", "), ".")) + error_status <- T + } + } else if (downscal_params$type == "analogs") { + if (is.null(downscal_params$nanalogs)) { + warn(recipe$Run$logger, + paste("Downscaling type is 'analogs, but the number of analogs", + "has not been provided in the recipe. The default is 3.")) + } + } else if (downscal_params$type == "logreg") { + if (is.null(downscal_params$int_method)) { + error(recipe$Run$logger, + paste("Downscaling type 'logreg' was requested in the recipe, but", + "no interpolation method was provided.")) + error_status <- T + } + if (is.null(downscal_params$log_reg_method)) { + error(recipe$Run$logger, + paste("Downscaling type 'logreg' was requested in the recipe,", + "but no logistic regression method is provided.")) + error_status <- T + } else if (!(downscal_params$log_reg_method %in% LOGREG_METHODS)) { + error(recipe$Run$logger, + paste0("The accepted logistic regression methods for the ", + "downscaling module are: ", + paste(LOGREG_METHODS, collapse = ", "), ".")) + error_status <- T + } + } } } -- GitLab From a265c4f61a53520630f3731768710d747771a63f Mon Sep 17 00:00:00 2001 From: aho Date: Fri, 29 Sep 2023 15:26:42 +0200 Subject: [PATCH 304/388] Units module bugfix for no fcst case --- modules/Units/Units.R | 40 +++++++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/modules/Units/Units.R b/modules/Units/Units.R index 07e17543..a143c0a2 100644 --- a/modules/Units/Units.R +++ b/modules/Units/Units.R @@ -22,9 +22,9 @@ Units <- function(recipe, data) { } else { flux <- recipe$Analysis$Variable$flux } - orig_units <- list() + orig_units <- vector('list', length = length(data)) + names(orig_units) <- names(var_names) for (element in names(var_names)) { - orig_units[[element]] <- c() for (x in var_names[[element]]) { orig_units[[element]] <- c(orig_units[[element]], data[[element]]$attrs$Variable$metadata[[x]]$units) @@ -48,11 +48,12 @@ Units <- function(recipe, data) { user_units <- gsub("\\**", "", user_units) user_units <- gsub("\\*", "", user_units) orig_units <- lapply(orig_units, function(x) { - x <- tolower(x) - x <- gsub(" ", "", x) - x <- gsub("\\**", "", x) - x <- gsub("\\*", "", x) - x <- unlist(ifelse(rep(length(x)==0, length(user_units)), user_units, x)) #when fcst is NULL + if (!is.null(x)) { + x <- tolower(x) + x <- gsub(" ", "", x) + x <- gsub("\\**", "", x) + x <- gsub("\\*", "", x) + } }) ## TODO: ## if "/" appears substitute by -1 in at the end of next unit. How to know? @@ -62,19 +63,24 @@ Units <- function(recipe, data) { res <- data } else { if (recipe$Run$filesystem == 'esarchive' && - !(length(unique(orig_units)) == 1)) { - warn(recipe$Run$logger, - paste("The units in", names(orig_units), "are not all equal.", + (sum(!sapply(unique(orig_units), is.null)) != 1)) { + warn(recipe$Run$logger, + paste("The units in", paste(names(orig_units), collapse = ', '), + "were not all equal and will be uniformized.", "If this is not expected, please contact the ES data team.")) } res <- sapply(1:length(data), function(x) { - if (!all(orig_units[x] == user_units)) { - result <- units_transform(data[x], - orig_units = orig_units[[x]], - user_units = user_units, - var_names[[x]], freq = freq, - flux = flux, - ncores = ncores) + if (!is.null(data[[x]])) { + if (!all(orig_units[x] == user_units)) { + result <- units_transform(data[x], + orig_units = orig_units[[x]], + user_units = user_units, + var_names[[x]], freq = freq, + flux = flux, + ncores = ncores) + } else { + result <- data[x] + } } else { result <- data[x] } -- GitLab From 184a10f198c7fe98c3ada970482ddd13848b5ea3 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Fri, 29 Sep 2023 16:47:26 +0200 Subject: [PATCH 305/388] Fix bug caused by typo --- tools/check_recipe.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/check_recipe.R b/tools/check_recipe.R index 3de1f63b..9f52ced3 100644 --- a/tools/check_recipe.R +++ b/tools/check_recipe.R @@ -344,7 +344,7 @@ check_recipe <- function(recipe) { "interpolation method is provided.")) error_status <- T } - } else if (downscal_parans$type == "intbc") { + } else if (downscal_params$type == "intbc") { if (is.null(downscal_params$bc_method)) { error(recipe$Run$logger, paste("Downscaling type 'intbc' was requested in the recipe, but", -- GitLab From 993e452cc4f5a571bba2198a0370ed3191524801 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Fri, 29 Sep 2023 16:55:23 +0200 Subject: [PATCH 306/388] Add error status to autosubmit checks in recipe checker --- tools/check_recipe.R | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tools/check_recipe.R b/tools/check_recipe.R index 57bece61..4a6724ce 100644 --- a/tools/check_recipe.R +++ b/tools/check_recipe.R @@ -536,25 +536,30 @@ check_recipe <- function(recipe) { error(recipe$Run$logger, paste("autosubmit expid -H", auto_specs$platform, "-d ")) + error_status <- T } else if (!dir.exists(paste0(auto_specs$experiment_dir, recipe$Run$auto_conf$expid))) { error(recipe$Run$logger, paste0("No folder in ", auto_specs$experiment_dir, " for the EXPID", recipe$Run$auto_conf$expid, ". Please make sure it is correct.")) + error_status <- T } if ((recipe$Run$auto_conf$email_notifications) && (is.null(recipe$Run$auto_conf$email_address))) { error(recipe$Run$logger, "Autosubmit notifications are enabled but email address is empty!") + error_status <- T } if (is.null(recipe$Run$auto_conf$hpc_user)) { error(recipe$Run$logger, "The 'Run:auto_conf:hpc_user' field can not be empty.") + error_status <- T } else if ((recipe$Run$filesystem == "esarchive") && (!substr(recipe$Run$auto_conf$hpc_user, 1, 5) == "bsc32")) { error(recipe$Run$logger, "Please check your hpc_user ID. It should look like: 'bsc32xxx'") + error_status <- T } } -- GitLab From df207de8a66d848eef6fc4e2240ecd653b7e0e49 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Tue, 3 Oct 2023 09:42:41 +0200 Subject: [PATCH 307/388] Bugfix: Properly call run_method shell variable in launch_SUNSET.sh --- launch_SUNSET.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/launch_SUNSET.sh b/launch_SUNSET.sh index 7f63c97d..dbde12f6 100644 --- a/launch_SUNSET.sh +++ b/launch_SUNSET.sh @@ -39,6 +39,7 @@ if [[ ( $@ == "--help") || $@ == "-h" ]]; then exit 0 fi +set -vx # Assign arguments recipe=$1 script=$2 @@ -103,7 +104,7 @@ Rscript split.R ${recipe} --tmpfile $tmpfile # Run with Autosubmit or directly with Slurm's sbatch? run_method=$( head -1 $tmpfile | tail -1 ) # If run method is 'sbatch', launch jobs with dependencies -if [ run_method == "sbatch" ]; then +if [ $run_method == "sbatch" ]; then # Retrieve working directory codedir=$( head -2 $tmpfile | tail -1 ) # Retrieve output directory -- GitLab From 0183cdb872bbb79c850b6c166c75e019b599f312 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Tue, 3 Oct 2023 09:44:46 +0200 Subject: [PATCH 308/388] Remove 'set -vx' --- launch_SUNSET.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/launch_SUNSET.sh b/launch_SUNSET.sh index dbde12f6..a2bfbb2e 100644 --- a/launch_SUNSET.sh +++ b/launch_SUNSET.sh @@ -39,7 +39,6 @@ if [[ ( $@ == "--help") || $@ == "-h" ]]; then exit 0 fi -set -vx # Assign arguments recipe=$1 script=$2 -- GitLab From b340282dc4a709f6ff09a19bb11337350fcf4635 Mon Sep 17 00:00:00 2001 From: eduzenli Date: Tue, 3 Oct 2023 10:16:47 +0200 Subject: [PATCH 309/388] unit test for the Downscaling module --- tests/recipes/recipe-seasonal_downscaling.yml | 53 +++++ tests/testthat/test-seasonal_downscaling.R | 195 ++++++++++++++++++ 2 files changed, 248 insertions(+) create mode 100644 tests/recipes/recipe-seasonal_downscaling.yml create mode 100644 tests/testthat/test-seasonal_downscaling.R diff --git a/tests/recipes/recipe-seasonal_downscaling.yml b/tests/recipes/recipe-seasonal_downscaling.yml new file mode 100644 index 00000000..1a2a3110 --- /dev/null +++ b/tests/recipes/recipe-seasonal_downscaling.yml @@ -0,0 +1,53 @@ +Description: + Author: E. Duzenli + +Analysis: + Horizon: Seasonal + Variables: + - {name: tas, freq: daily_mean} + Datasets: + System: + - name: ECMWF-SEAS5 + Multimodel: False + Reference: + - name: ERA5 + Time: + sdate: '1201' + fcst_year: + hcst_start: '1993' + hcst_end: '1996' + ftime_min: 1 + ftime_max: 1 + Region: + - {latmin: 17, latmax: 20, lonmin: 12, lonmax: 15} + Regrid: + method: 'none' + type: 'none' + Workflow: + Anomalies: + compute: no + cross_validation: + save: 'none' + Calibration: + method: 'none' + save: 'none' + Skill: + metric: BSS10 CRPSS RPSS mean_bias + save: 'none' + Indicators: + index: no + Downscaling: + type: analogs + int_method: + bc_method: + lr_method: + log_reg_method: + nanalogs: 3 + target_grid: /esarchive/recon/ecmwf/era5/daily_mean/tas_f1h/tas_199301.nc + save: 'none' + Output_format: S2S4E +Run: + Loglevel: INFO + Terminal: yes + output_dir: ./out-logs/ + code_dir: /esarchive/scratch/vagudets/repos/auto-s2s/ diff --git a/tests/testthat/test-seasonal_downscaling.R b/tests/testthat/test-seasonal_downscaling.R new file mode 100644 index 00000000..0353a04e --- /dev/null +++ b/tests/testthat/test-seasonal_downscaling.R @@ -0,0 +1,195 @@ +library(testthat) +context("Seasonal daily data") + +source("modules/Loading/Loading.R") +source("modules/Skill/Skill.R") +source("modules/Downscaling/Downscaling.R") + + +recipe_file <- "tests/recipes/recipe-seasonal_downscaling.yml" +recipe <- prepare_outputs(recipe_file, disable_checks = F) + +# Load datasets +suppressWarnings({invisible(capture.output( +data <- Loading(recipe) +))}) + +# Downscale the data +suppressWarnings({invisible(capture.output( +downscaled_data <- Downscaling(recipe, data) +))}) + +# Compute skill metrics +suppressWarnings({invisible(capture.output( +skill_metrics <- Skill(recipe, downscaled_data) +))}) + +test_that("1. Loading", { + +expect_equal( +is.list(data), +TRUE +) +expect_equal( +names(data), +c("hcst", "fcst", "obs") +) +expect_equal( +class(data$hcst), +"s2dv_cube" +) +expect_equal( +data$fcst, +NULL +) +expect_equal( +class(data$obs), +"s2dv_cube" +) +expect_equal( +names(data$hcst), +c("data", "dims", "coords", "attrs") +) +expect_equal( +names(data$hcst), +names(data$obs) +) +expect_equal( +dim(data$hcst$data), +c(dat = 1, var = 1, sday = 1, sweek = 1, syear = 4, time = 31, latitude = 4, longitude = 4, ensemble = 25) +) +expect_equal( +dim(data$obs$data), +c(dat = 1, var = 1, sday = 1, sweek = 1, syear = 4, time = 31, latitude = 13, longitude = 13, ensemble = 1) +) +expect_equal( +dim(data$obs$attrs$Dates), +c(sday = 1, sweek = 1, syear = 4, time = 31) +) +expect_equal( +as.vector(drop(data$hcst$data)[1:2,1:2,1,2,3]), +c(295.5691, 291.7752, 294.0874, 290.1173), +tolerance = 0.0001 +) +expect_equal( +mean(data$hcst$data), +288.3723, +tolerance = 0.0001 +) +expect_equal( +range(data$hcst$data), +c(280.1490, 298.2324), +tolerance = 0.0001 +) +expect_equal( +(data$hcst$attrs$Dates)[1], +as.POSIXct("1993-12-01 18:00:00 UTC", tz = 'UTC') +) +expect_equal( +(data$hcst$attrs$Dates)[2], +as.POSIXct("1994-12-01 18:00:00 UTC", tz = 'UTC') +) +expect_equal( +(data$hcst$attrs$Dates)[5], +as.POSIXct("1993-12-02 18:00:00 UTC", tz = 'UTC') +) +expect_equal( +(data$obs$attrs$Dates)[10], +as.POSIXct("1994-12-03 11:30:00 UTC", tz = 'UTC') +) + +}) + +#====================================== +test_that("2. Downscaling", { + +expect_equal( +is.list(downscaled_data), +TRUE +) +expect_equal( +names(downscaled_data), +c("hcst", "obs", "fcst") +) +expect_equal( +class(downscaled_data$hcst), +"s2dv_cube" +) +expect_equal( +class(downscaled_data$obs), +"s2dv_cube" +) +expect_equal( +downscaled_data$fcst, +NULL +) +expect_equal( +names(downscaled_data$hcst), +c("data", "dims", "coords", "attrs") +) +expect_equal( +names(downscaled_data$hcst), +names(downscaled_data$obs) +) +expect_equal( +dim(downscaled_data$hcst$data), +c(latitude = 13, longitude = 13, syear = 4, dat = 1, var = 1, sday = 1, sweek = 1, time = 31, ensemble = 25) +) +expect_equal( +dim(downscaled_data$obs$data), +c(ensemble = 1, dat = 1, var = 1, sday = 1, sweek = 1, syear = 4, time = 31, latitude = 13, longitude = 13) +) +expect_equal( +as.vector(drop(downscaled_data$hcst$data)[1:2,1:2,1,2,3]), +c(293.8468, 293.5830, 294.0713, 293.7104), +tolerance = 0.0001 +) +expect_equal( +mean(downscaled_data$hcst$data), +288.5359, +tolerance = 0.0001 +) +expect_equal( +range(downscaled_data$hcst$data), +c(284.0950, 297.4405), +tolerance = 0.0001 +) + +}) + +#====================================== +test_that("3. Metrics", { + +expect_equal( +is.list(skill_metrics), +TRUE +) +expect_equal( +names(skill_metrics), +c("bss10", "bss10_significance", "crpss", "crpss_significance","rpss", "rpss_significance", "mean_bias") +) +expect_equal( +class(skill_metrics$rpss), +"array" +) +expect_equal( +dim(skill_metrics$rpss), +c(latitude = 13, longitude = 13, var = 1, time = 31) +) +expect_equal( +dim(skill_metrics$rpss_significance), +dim(skill_metrics$rpss) +) +expect_equal( +skill_metrics$rpss[1], +-0.05325714, +tolerance = 0.0001 +) +expect_equal( +skill_metrics$rpss_significance[1], +FALSE +) + +}) + +unlink(recipe$Run$output_dir, recursive = TRUE) -- GitLab From a2f96efda73e5e7156d79238b984110c25d908f6 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Tue, 3 Oct 2023 12:00:32 +0200 Subject: [PATCH 310/388] Add TODO --- modules/Saving/R/get_dir.R | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/modules/Saving/R/get_dir.R b/modules/Saving/R/get_dir.R index 915c3f11..a2cbc79f 100644 --- a/modules/Saving/R/get_dir.R +++ b/modules/Saving/R/get_dir.R @@ -37,7 +37,7 @@ get_dir <- function(recipe, variable, agg = "global") { fcst.sdate <- paste0("hcst-", recipe$Analysis$Time$sdate) } } - + ## TODO: Remove calibration method from output directory? calib.method <- tolower(recipe$Analysis$Workflow$Calibration$method) store.freq <- recipe$Analysis$Variables$freq ## TODO: Change "_country" @@ -52,7 +52,6 @@ get_dir <- function(recipe, variable, agg = "global") { "-", store.freq, "/", variable, "/", fcst.sdate, "/")}) } - ## TODO: Dir creation? return(dir) } -- GitLab From fe3b2f93af808ee2d6c17b26bec7f5d1fc8f2b9f Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Tue, 3 Oct 2023 12:00:50 +0200 Subject: [PATCH 311/388] Add saving to Downscaling unit test --- tests/recipes/recipe-seasonal_downscaling.yml | 2 +- tests/testthat/test-seasonal_downscaling.R | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/tests/recipes/recipe-seasonal_downscaling.yml b/tests/recipes/recipe-seasonal_downscaling.yml index 1a2a3110..41df9e82 100644 --- a/tests/recipes/recipe-seasonal_downscaling.yml +++ b/tests/recipes/recipe-seasonal_downscaling.yml @@ -44,7 +44,7 @@ Analysis: log_reg_method: nanalogs: 3 target_grid: /esarchive/recon/ecmwf/era5/daily_mean/tas_f1h/tas_199301.nc - save: 'none' + save: 'all' Output_format: S2S4E Run: Loglevel: INFO diff --git a/tests/testthat/test-seasonal_downscaling.R b/tests/testthat/test-seasonal_downscaling.R index 0353a04e..fde0756d 100644 --- a/tests/testthat/test-seasonal_downscaling.R +++ b/tests/testthat/test-seasonal_downscaling.R @@ -4,7 +4,7 @@ context("Seasonal daily data") source("modules/Loading/Loading.R") source("modules/Skill/Skill.R") source("modules/Downscaling/Downscaling.R") - +source("modules/Saving/Saving.R") recipe_file <- "tests/recipes/recipe-seasonal_downscaling.yml" recipe <- prepare_outputs(recipe_file, disable_checks = F) @@ -192,4 +192,17 @@ FALSE }) +test_that("4. Check saved data", { + +outputs <- paste0(recipe$Run$output_dir, "/outputs/Downscaling/") +expect_equal( +all(basename(list.files(outputs, recursive = T)) %in% +c("tas_19931201.nc", "tas_19941201.nc", "tas_19951201.nc", + "tas_19961201.nc", "tas-obs_19931201.nc", "tas-obs_19941201.nc", + "tas-obs_19951201.nc", "tas-obs_19961201.nc")), +TRUE +) + +}) + unlink(recipe$Run$output_dir, recursive = TRUE) -- GitLab From fb15452d8ba53f731bce7407ce37aa2885c49395 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Tue, 10 Oct 2023 10:11:36 +0200 Subject: [PATCH 312/388] Add notifications to Scorecards jobs --- autosubmit/conf_esarchive/jobs.conf | 1 + autosubmit/conf_mars/jobs.yml | 1 + tools/write_autosubmit_conf.R | 8 ++++++++ 3 files changed, 10 insertions(+) diff --git a/autosubmit/conf_esarchive/jobs.conf b/autosubmit/conf_esarchive/jobs.conf index f9d26634..b80739a6 100644 --- a/autosubmit/conf_esarchive/jobs.conf +++ b/autosubmit/conf_esarchive/jobs.conf @@ -9,6 +9,7 @@ PROCESSORS = [scorecards] FILE = autosubmit/auto-scorecards.sh WALLCLOCK = 00:10 +NOTIFY_ON = PLATFORM = nord3v2 PROCESSORS = 1 DEPENDENCIES = verification diff --git a/autosubmit/conf_mars/jobs.yml b/autosubmit/conf_mars/jobs.yml index aba048bc..273d3d6f 100644 --- a/autosubmit/conf_mars/jobs.yml +++ b/autosubmit/conf_mars/jobs.yml @@ -10,6 +10,7 @@ JOBS: FILE: autosubmit/auto-scorecards.sh WALLCLOCK: 00:10 PLATFORM: NORD3 + NOTIFY_ON: PROCESSORS: 1 DEPENDENCIES: verification diff --git a/tools/write_autosubmit_conf.R b/tools/write_autosubmit_conf.R index bfc708bc..306664c7 100644 --- a/tools/write_autosubmit_conf.R +++ b/tools/write_autosubmit_conf.R @@ -56,6 +56,14 @@ write_autosubmit_conf <- function(recipe, nchunks) { if (!("Scorecards" %in% names(recipe$Analysis$Workflow)) || (!recipe$Analysis$Workflow$Scorecards$execute)) { jobs$scorecards <- NULL + if (recipe$Run$auto_conf$notify_completed) { + obs$scorecards$NOTIFY_ON <- paste(jobs$scorecards$NOTIFY_ON, + "COMPLETED") + } + if (recipe$Run$auto_conf$notify_failed) { + obs$scorecards$NOTIFY_ON <- paste(jobs$scorecards$NOTIFY_ON, + "FAILED") + } } # Return to original list if (auto_specs$auto_version == "4.0.0") { -- GitLab From 6f7842c5ad479fd9cc1b730d078d6229506c27b6 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Tue, 10 Oct 2023 14:46:16 +0200 Subject: [PATCH 313/388] Fix Scorecards notifications and WIP to add custom directives to AS (working only for v4) --- autosubmit/conf_esarchive/jobs.conf | 3 +- autosubmit/conf_esarchive2/autosubmit.yml | 22 ++++++++++++ autosubmit/conf_esarchive2/expdef.yml | 44 +++++++++++++++++++++++ autosubmit/conf_esarchive2/jobs.yml | 16 +++++++++ autosubmit/conf_esarchive2/platforms.yml | 11 ++++++ autosubmit/conf_esarchive2/proj.yml | 4 +++ conf/archive.yml | 2 +- conf/autosubmit.yml | 7 ++++ recipes/tests/recipe_seasonal_example.yml | 7 ++-- tools/write_autosubmit_conf.R | 10 +++--- 10 files changed, 117 insertions(+), 9 deletions(-) create mode 100644 autosubmit/conf_esarchive2/autosubmit.yml create mode 100644 autosubmit/conf_esarchive2/expdef.yml create mode 100644 autosubmit/conf_esarchive2/jobs.yml create mode 100644 autosubmit/conf_esarchive2/platforms.yml create mode 100644 autosubmit/conf_esarchive2/proj.yml diff --git a/autosubmit/conf_esarchive/jobs.conf b/autosubmit/conf_esarchive/jobs.conf index b80739a6..82898347 100644 --- a/autosubmit/conf_esarchive/jobs.conf +++ b/autosubmit/conf_esarchive/jobs.conf @@ -4,7 +4,8 @@ RUNNING = chunk WALLCLOCK = NOTIFY_ON = PLATFORM = nord3v2 -PROCESSORS = +PROCESSORS = +CUSTOM_DIRECTIVES = [scorecards] FILE = autosubmit/auto-scorecards.sh diff --git a/autosubmit/conf_esarchive2/autosubmit.yml b/autosubmit/conf_esarchive2/autosubmit.yml new file mode 100644 index 00000000..03008116 --- /dev/null +++ b/autosubmit/conf_esarchive2/autosubmit.yml @@ -0,0 +1,22 @@ +config: + EXPID: + AUTOSUBMIT_VERSION: 4.0.73 + MAXWAITINGJOBS: 16 + # Default maximum number of jobs to be running at the same time at any platform + # Default: 6 + TOTALJOBS: 16 + SAFETYSLEEPTIME: 10 + RETRIALS: 0 +mail: + NOTIFICATIONS: + TO: +communications: + # Communications library used to connect with platforms: paramiko or saga. + # Default: paramiko + API: paramiko +storage: + # Defines the way of storing the progress of the experiment. The available options are: + # A PICKLE file (pkl) or an SQLite database (db). Default: pkl + TYPE: pkl + # Defines if the remote logs will be copied to the local platform. Default: True. + COPY_REMOTE_LOGS: True diff --git a/autosubmit/conf_esarchive2/expdef.yml b/autosubmit/conf_esarchive2/expdef.yml new file mode 100644 index 00000000..b4327f65 --- /dev/null +++ b/autosubmit/conf_esarchive2/expdef.yml @@ -0,0 +1,44 @@ +DEFAULT: + EXPID: + HPCARCH: NORD3 +experiment: + DATELIST: + MEMBERS: fc0 + CHUNKSIZEUNIT: month + CHUNKSIZE: 1 + NUMCHUNKS: + CHUNKINI: 1 + CALENDAR: standard +project: + PROJECT_TYPE: local + # Destination folder name for project. type: STRING, default: leave empty, + PROJECT_DESTINATION: auto-s2s +# If PROJECT_TYPE is not git, no need to change +git: + # Repository URL STRING: 'https://github.com/torvalds/linux.git' + PROJECT_ORIGIN: https://earth.bsc.es/gitlab/es/auto-s2s.git + # Select branch or tag, STRING, default: 'master', help: {'master' (default), 'develop', 'v3.1b', ...} + PROJECT_BRANCH: master + # type: STRING, default: leave empty, help: if model branch is a TAG leave empty + PROJECT_COMMIT: '' +svn: + PROJECT_URL: '' + PROJECT_REVISION: '' +# If PROJECT_TYPE is not local, no need to change +local: + # type: STRING, help: /foo/bar/ecearth + PROJECT_PATH: /esarchive/scratch/vagudets/repos/auto-s2s/ +# If PROJECT_TYPE is none, no need to change +project_files: + # Where is PROJECT CONFIGURATION file location relative to project root path + FILE_PROJECT_CONF: '' + # Where is JOBS CONFIGURATION file location relative to project root path + FILE_JOBS_CONF: '' + # Default job scripts type in the project. type: STRING, default: bash, supported: 'bash', 'python' or 'r' + JOB_SCRIPTS_TYPE: '' +rerun: + # Is a rerun or not? [Default: Do set FALSE]. BOOLEAN: TRUE, FALSE + RERUN: FALSE + # If RERUN: TRUE then supply the list of chunks to rerun + # LIST: [ 19601101 [ fc0 [1 2 3 4] fc1 [1] ] 19651101 [ fc0 [16-30] ] ] + CHUNKLIST: '' diff --git a/autosubmit/conf_esarchive2/jobs.yml b/autosubmit/conf_esarchive2/jobs.yml new file mode 100644 index 00000000..273d3d6f --- /dev/null +++ b/autosubmit/conf_esarchive2/jobs.yml @@ -0,0 +1,16 @@ +JOBS: + verification: + FILE: autosubmit/auto-verification-CERISE.sh + RUNNING: chunk + WALLCLOCK: + NOTIFY_ON: + PLATFORM: NORD3 + PROCESSORS: + scorecards: + FILE: autosubmit/auto-scorecards.sh + WALLCLOCK: 00:10 + PLATFORM: NORD3 + NOTIFY_ON: + PROCESSORS: 1 + DEPENDENCIES: verification + diff --git a/autosubmit/conf_esarchive2/platforms.yml b/autosubmit/conf_esarchive2/platforms.yml new file mode 100644 index 00000000..78056d62 --- /dev/null +++ b/autosubmit/conf_esarchive2/platforms.yml @@ -0,0 +1,11 @@ +## TODO: Change platform +Platforms: + nord3v2: + TYPE: slurm + HOST: nord4.bsc.es + USER: + PROJECT: bsc32 ## TO BE CHANGED + SCRATCH_DIR: /gpfs/scratch/ ## TO BE CHANGED + PROCESSORS_PER_NODE: 16 + SERIAL_QUEUE: debug + QUEUE: bsc_es diff --git a/autosubmit/conf_esarchive2/proj.yml b/autosubmit/conf_esarchive2/proj.yml new file mode 100644 index 00000000..679cf63b --- /dev/null +++ b/autosubmit/conf_esarchive2/proj.yml @@ -0,0 +1,4 @@ +common: + MODULES: "MODULES" + OUTDIR: + SCRIPT: diff --git a/conf/archive.yml b/conf/archive.yml index efb57c9e..7d5d8bf9 100644 --- a/conf/archive.yml +++ b/conf/archive.yml @@ -1,4 +1,4 @@ -esarchive: +esarchive2: src: "/esarchive/" System: ECMWF-SEAS5: diff --git a/conf/autosubmit.yml b/conf/autosubmit.yml index 8b653a65..3a56e7c3 100644 --- a/conf/autosubmit.yml +++ b/conf/autosubmit.yml @@ -12,3 +12,10 @@ mars: conf_format: yaml experiment_dir: /esarchive/autosubmit/ ## TO BE CHANGED userID: bsc32 ## TO BE CHANGED +esarchive2: + platform: nord3v2 + module_version: autosubmit/4.0.0b-foss-2015a-Python-3.7.3 + auto_version: 4.0.0 + conf_format: yaml + experiment_dir: /esarchive/autosubmit/ ## TO BE CHANGED + userID: bsc32 ## TO BE CHANGED diff --git a/recipes/tests/recipe_seasonal_example.yml b/recipes/tests/recipe_seasonal_example.yml index 33662383..b4933b59 100644 --- a/recipes/tests/recipe_seasonal_example.yml +++ b/recipes/tests/recipe_seasonal_example.yml @@ -66,17 +66,18 @@ Analysis: Run: Loglevel: INFO Terminal: yes - filesystem: esarchive + filesystem: esarchive2 output_dir: /esarchive/scratch/vagudets/auto-s2s-outputs/ code_dir: /esarchive/scratch/vagudets/repos/auto-s2s/ - autosubmit: no + autosubmit: yes # fill only if using autosubmit auto_conf: script: /esarchive/scratch/vagudets/repos/auto-s2s/example_scripts/test_parallel_workflow.R expid: a5no # autosubmit experiment ID hpc_user: bsc32762 # your hpc username - wallclock: 04:00 # hh:mm + wallclock: 01:00 # hh:mm processors_per_job: 8 # use ncores parameter? + custom_directives: ['#SBATCH --constraint=medmem', '#SBATCH --exclusive'] platform: nord3v2 # make this constant? email_notifications: yes # enable/disable email notifications email_address: victoria.agudetse@bsc.es # email address for notifications diff --git a/tools/write_autosubmit_conf.R b/tools/write_autosubmit_conf.R index 306664c7..925cbd77 100644 --- a/tools/write_autosubmit_conf.R +++ b/tools/write_autosubmit_conf.R @@ -51,18 +51,20 @@ write_autosubmit_conf <- function(recipe, nchunks) { "FAILED") } jobs$verification$PROCESSORS <- recipe$Run$auto_conf$processors_per_job # ncores? + jobs$verification$CUSTOM_DIRECTIVES <- recipe$Run$auto_conf$custom_directives # Only include Scorecards job if section exists in the recipe and # is set to 'execute: True' if (!("Scorecards" %in% names(recipe$Analysis$Workflow)) || (!recipe$Analysis$Workflow$Scorecards$execute)) { jobs$scorecards <- NULL + } else { if (recipe$Run$auto_conf$notify_completed) { - obs$scorecards$NOTIFY_ON <- paste(jobs$scorecards$NOTIFY_ON, - "COMPLETED") + jobs$scorecards$NOTIFY_ON <- paste(jobs$scorecards$NOTIFY_ON, + "COMPLETED") } if (recipe$Run$auto_conf$notify_failed) { - obs$scorecards$NOTIFY_ON <- paste(jobs$scorecards$NOTIFY_ON, - "FAILED") + jobs$scorecards$NOTIFY_ON <- paste(jobs$scorecards$NOTIFY_ON, + "FAILED") } } # Return to original list -- GitLab From ee4e06d1d771ddfe9f0a3d09853f3451a7b114c9 Mon Sep 17 00:00:00 2001 From: aho Date: Tue, 10 Oct 2023 15:35:41 +0200 Subject: [PATCH 314/388] Correct saving start message in Anomalies; wrap all the save lines in the if condition --- modules/Anomalies/Anomalies.R | 41 +++++++++++++++++-------------- modules/Calibration/Calibration.R | 29 +++++++++++----------- modules/Skill/Skill.R | 36 ++++++++++++++------------- 3 files changed, 56 insertions(+), 50 deletions(-) diff --git a/modules/Anomalies/Anomalies.R b/modules/Anomalies/Anomalies.R index 386317fb..a2f0c005 100644 --- a/modules/Anomalies/Anomalies.R +++ b/modules/Anomalies/Anomalies.R @@ -87,27 +87,30 @@ Anomalies <- function(recipe, data) { "cross-validation. The original full fields are returned as", "$hcst.full_val and $obs.full_val.")) - if (recipe$Analysis$Workflow$Anomalies$save != 'none') { - info(recipe$Run$logger, "##### ANOMALIES COMPUTED SUCCESSFULLY #####") - } + info(recipe$Run$logger, "##### ANOMALIES COMPUTED SUCCESSFULLY #####") + # Save outputs - info(recipe$Run$logger, "##### START SAVING ANOMALIES #####") - recipe$Run$output_dir <- paste0(recipe$Run$output_dir, - "/outputs/Anomalies/") - # Save forecast - if ((recipe$Analysis$Workflow$Anomalies$save %in% - c('all', 'exp_only', 'fcst_only')) && !is.null(data$fcst)) { - save_forecast(recipe = recipe, data_cube = data$fcst, type = 'fcst') - } - # Save hindcast - if (recipe$Analysis$Workflow$Anomalies$save %in% - c('all', 'exp_only')) { - save_forecast(recipe = recipe, data_cube = data$hcst, type = 'hcst') - } - # Save observation - if (recipe$Analysis$Workflow$Anomalies$save == 'all') { - save_observations(recipe = recipe, data_cube = data$obs) + if (recipe$Analysis$Workflow$Anomalies$save != 'none') { + + info(recipe$Run$logger, "##### START SAVING ANOMALIES #####") + recipe$Run$output_dir <- paste0(recipe$Run$output_dir, + "/outputs/Anomalies/") + # Save forecast + if ((recipe$Analysis$Workflow$Anomalies$save %in% + c('all', 'exp_only', 'fcst_only')) && !is.null(data$fcst)) { + save_forecast(recipe = recipe, data_cube = data$fcst, type = 'fcst') + } + # Save hindcast + if (recipe$Analysis$Workflow$Anomalies$save %in% + c('all', 'exp_only')) { + save_forecast(recipe = recipe, data_cube = data$hcst, type = 'hcst') + } + # Save observation + if (recipe$Analysis$Workflow$Anomalies$save == 'all') { + save_observations(recipe = recipe, data_cube = data$obs) + } } + } else { warn(recipe$Run$logger, paste("The Anomalies module has been called, but", "recipe parameter Analysis:Variables:anomaly is set to FALSE.", diff --git a/modules/Calibration/Calibration.R b/modules/Calibration/Calibration.R index e41565a9..80fca408 100644 --- a/modules/Calibration/Calibration.R +++ b/modules/Calibration/Calibration.R @@ -170,20 +170,21 @@ Calibration <- function(recipe, data) { # Saving if (recipe$Analysis$Workflow$Calibration$save != 'none') { info(recipe$Run$logger, "##### START SAVING CALIBRATED DATA #####") - } - ## TODO: What do we do with the full values? - recipe$Run$output_dir <- paste0(recipe$Run$output_dir, - "/outputs/Calibration/") - if ((recipe$Analysis$Workflow$Calibration$save %in% - c('all', 'exp_only', 'fcst_only')) && (!is.null(data$fcst))) { - save_forecast(recipe = recipe, data_cube = fcst_calibrated, type = 'fcst') - } - if (recipe$Analysis$Workflow$Calibration$save %in% - c('all', 'exp_only')) { - save_forecast(recipe = recipe, data_cube = hcst_calibrated, type = 'hcst') - } - if (recipe$Analysis$Workflow$Calibration$save == 'all') { - save_observations(recipe = recipe, data_cube = data$obs) + + ## TODO: What do we do with the full values? + recipe$Run$output_dir <- paste0(recipe$Run$output_dir, + "/outputs/Calibration/") + if ((recipe$Analysis$Workflow$Calibration$save %in% + c('all', 'exp_only', 'fcst_only')) && (!is.null(data$fcst))) { + save_forecast(recipe = recipe, data_cube = fcst_calibrated, type = 'fcst') + } + if (recipe$Analysis$Workflow$Calibration$save %in% + c('all', 'exp_only')) { + save_forecast(recipe = recipe, data_cube = hcst_calibrated, type = 'hcst') + } + if (recipe$Analysis$Workflow$Calibration$save == 'all') { + save_observations(recipe = recipe, data_cube = data$obs) + } } ## TODO: Sort out returns diff --git a/modules/Skill/Skill.R b/modules/Skill/Skill.R index fd27ba75..7fff7de4 100644 --- a/modules/Skill/Skill.R +++ b/modules/Skill/Skill.R @@ -437,25 +437,27 @@ Probabilities <- function(recipe, data) { if (recipe$Analysis$Workflow$Probabilities$save != 'none') { info(recipe$Run$logger, "##### START SAVING PERCENTILES AND PROBABILITY CATEGORIES #####") - } - recipe$Run$output_dir <- paste0(recipe$Run$output_dir, - "/outputs/Skill/") - # Save percentiles - if (recipe$Analysis$Workflow$Probabilities$save %in% - c('all', 'percentiles_only')) { - save_percentiles(recipe = recipe, percentiles = results$percentiles, - data_cube = data$hcst) - } - # Save probability bins - if (recipe$Analysis$Workflow$Probabilities$save %in% - c('all', 'bins_only')) { - save_probabilities(recipe = recipe, probs = results$probs, - data_cube = data$hcst, type = "hcst") - if (!is.null(results$probs_fcst)) { - save_probabilities(recipe = recipe, probs = results$probs_fcst, - data_cube = data$fcst, type = "fcst") + + recipe$Run$output_dir <- paste0(recipe$Run$output_dir, + "/outputs/Skill/") + # Save percentiles + if (recipe$Analysis$Workflow$Probabilities$save %in% + c('all', 'percentiles_only')) { + save_percentiles(recipe = recipe, percentiles = results$percentiles, + data_cube = data$hcst) + } + # Save probability bins + if (recipe$Analysis$Workflow$Probabilities$save %in% + c('all', 'bins_only')) { + save_probabilities(recipe = recipe, probs = results$probs, + data_cube = data$hcst, type = "hcst") + if (!is.null(results$probs_fcst)) { + save_probabilities(recipe = recipe, probs = results$probs_fcst, + data_cube = data$fcst, type = "fcst") + } } } + # Return results return(results) } -- GitLab From fbbe922aa300d972b4b4828af43c6d216a1caeed Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Tue, 10 Oct 2023 16:28:01 +0200 Subject: [PATCH 315/388] Change 'corr' name to 'corr_individual_members' --- modules/Saving/Saving.R | 4 ++-- modules/Skill/Skill.R | 6 +++--- tests/recipes/recipe-decadal_monthly_3.yml | 2 +- tests/recipes/recipe-seasonal_downscaling.yml | 4 ++-- tests/recipes/recipe-seasonal_monthly_1.yml | 2 +- tests/testthat/test-decadal_monthly_3.R | 5 +++-- tests/testthat/test-seasonal_monthly.R | 3 ++- 7 files changed, 14 insertions(+), 12 deletions(-) diff --git a/modules/Saving/Saving.R b/modules/Saving/Saving.R index 7d0520c2..fc9fe4ee 100644 --- a/modules/Saving/Saving.R +++ b/modules/Saving/Saving.R @@ -44,8 +44,8 @@ Saving <- function(recipe, data, # Separate ensemble correlation from the rest of the metrics, as it has one # extra dimension "ensemble" and must be saved to a different file - if ("corr" %in% names(skill_metrics)) { - corr_metric_names <- grep("^corr", names(skill_metrics)) + if ("corr_individual_members" %in% names(skill_metrics)) { + corr_metric_names <- grep("^corr_individual_members", names(skill_metrics)) corr_metrics <- skill_metrics[corr_metric_names] skill_metrics <- skill_metrics[-corr_metric_names] if (length(skill_metrics) == 0) { diff --git a/modules/Skill/Skill.R b/modules/Skill/Skill.R index fd27ba75..2b3fb1de 100644 --- a/modules/Skill/Skill.R +++ b/modules/Skill/Skill.R @@ -77,7 +77,7 @@ Skill <- function(recipe, data, agg = 'global') { Fair <- F } # Whether to compute correlation for the ensemble mean or for each member - if (metric == 'corr') { + if (metric == 'corr_individual_members') { memb <- T } else if (metric == 'enscorr') { memb <- F @@ -208,7 +208,7 @@ Skill <- function(recipe, data, agg = 'global') { skill_metrics[[ metric ]] <- skill$biasSS skill_metrics[[ paste0(metric, "_significance") ]] <- skill$sign # Ensemble mean correlation - } else if (metric %in% c('enscorr', 'corr')) { + } else if (metric %in% c('enscorr', 'corr_individual_members')) { ## TODO: Return significance ## TODO: Implement option for Kendall and Spearman methods? skill <- s2dv::Corr(data$hcst$data, data$obs$data, @@ -315,7 +315,7 @@ Skill <- function(recipe, data, agg = 'global') { "/outputs/Skill/") # Separate 'corr' from the rest of the metrics because of extra 'ensemble' dim if (recipe$Analysis$Workflow$Skill$save == 'all') { - corr_metric_names <- grep("^corr", names(skill_metrics)) + corr_metric_names <- grep("^corr_individual_members", names(skill_metrics)) if (length(corr_metric_names) == 0) { save_metrics(recipe = recipe, skill = skill_metrics, data_cube = data$hcst, agg = agg) diff --git a/tests/recipes/recipe-decadal_monthly_3.yml b/tests/recipes/recipe-decadal_monthly_3.yml index fc42cd2d..f7ab5fc1 100644 --- a/tests/recipes/recipe-decadal_monthly_3.yml +++ b/tests/recipes/recipe-decadal_monthly_3.yml @@ -37,7 +37,7 @@ Analysis: method: 'evmos' save: 'none' Skill: - metric: BSS10 Corr + metric: BSS10 Corr_Individual_Members save: 'none' Probabilities: percentiles: [[1/3, 2/3]] diff --git a/tests/recipes/recipe-seasonal_downscaling.yml b/tests/recipes/recipe-seasonal_downscaling.yml index 1a2a3110..dc41adc2 100644 --- a/tests/recipes/recipe-seasonal_downscaling.yml +++ b/tests/recipes/recipe-seasonal_downscaling.yml @@ -29,7 +29,7 @@ Analysis: cross_validation: save: 'none' Calibration: - method: 'none' + method: 'raw' save: 'none' Skill: metric: BSS10 CRPSS RPSS mean_bias @@ -44,7 +44,7 @@ Analysis: log_reg_method: nanalogs: 3 target_grid: /esarchive/recon/ecmwf/era5/daily_mean/tas_f1h/tas_199301.nc - save: 'none' + save: 'all' Output_format: S2S4E Run: Loglevel: INFO diff --git a/tests/recipes/recipe-seasonal_monthly_1.yml b/tests/recipes/recipe-seasonal_monthly_1.yml index 0edf4795..99acb16c 100644 --- a/tests/recipes/recipe-seasonal_monthly_1.yml +++ b/tests/recipes/recipe-seasonal_monthly_1.yml @@ -36,7 +36,7 @@ Analysis: method: mse_min save: 'all' Skill: - metric: RPSS CRPSS EnsCorr Corr Enscorr_specs + metric: RPSS CRPSS EnsCorr Corr_individual_members Enscorr_specs save: 'all' Probabilities: percentiles: [[1/3, 2/3], [1/10, 9/10]] diff --git a/tests/testthat/test-decadal_monthly_3.R b/tests/testthat/test-decadal_monthly_3.R index d1b42fd5..3cdc826a 100644 --- a/tests/testthat/test-decadal_monthly_3.R +++ b/tests/testthat/test-decadal_monthly_3.R @@ -133,7 +133,8 @@ TRUE ) expect_equal( names(skill_metrics), -c("bss10", "bss10_significance", "corr", "corr_significance") +c("bss10", "bss10_significance", + "corr_individual_members", "corr_individual_members_significance") ) expect_equal( class(skill_metrics[[1]]), @@ -157,7 +158,7 @@ any(as.vector(skill_metrics$bss10_significance)), FALSE ) expect_equal( -as.vector(skill_metrics$corr[2, , , 1, 2]), +as.vector(skill_metrics$corr_individual_members[2, , , 1, 2]), c(-0.2015265, 0.4635463, -0.1019575), tolerance = 0.0001 ) diff --git a/tests/testthat/test-seasonal_monthly.R b/tests/testthat/test-seasonal_monthly.R index d112acf9..d9b7b3c3 100644 --- a/tests/testthat/test-seasonal_monthly.R +++ b/tests/testthat/test-seasonal_monthly.R @@ -185,7 +185,8 @@ TRUE expect_equal( names(skill_metrics), c("rpss", "rpss_significance", "crpss", "crpss_significance", "enscorr", - "enscorr_significance", "corr", "corr_significance", "enscorr_specs") + "enscorr_significance", "corr_individual_members", "corr_individual_members_significance", + "enscorr_specs") ) expect_equal( class(skill_metrics$rpss), -- GitLab From 57ccc96a4d8642ed53fbd46668827d418525ba71 Mon Sep 17 00:00:00 2001 From: Nadia Milders Date: Wed, 11 Oct 2023 15:53:36 +0200 Subject: [PATCH 316/388] Updated start.months and inf.to.na paramaters --- modules/Scorecards/Scorecards.R | 8 +++++++- .../atomic_recipes/recipe_scorecards_atomic.yml | 15 ++++++++------- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/modules/Scorecards/Scorecards.R b/modules/Scorecards/Scorecards.R index 3bcb01ce..035452c4 100644 --- a/modules/Scorecards/Scorecards.R +++ b/modules/Scorecards/Scorecards.R @@ -29,7 +29,11 @@ Scorecards <- function(recipe) { end.year <- as.numeric(recipe$Analysis$Time$hcst_end) forecast.months <- recipe$Analysis$Time$ftime_min : recipe$Analysis$Time$ftime_max - start.months <- 1:12 #recipe$Analysis$Workflow$Scorecards$start_months + if(recipe$Analysis$Workflow$Scorecards$start_months == 'all'){ + start.months <- 1:12 + } else { + start.months <- as.numeric(strsplit(recipe$Analysis$Workflow$Scorecards$start_months, split = " ")[[1]]) + } regions <- recipe$Analysis$Workflow$Scorecards$regions for (i in names(regions)){regions[[i]] <- unlist(regions[[i]])} @@ -61,6 +65,7 @@ Scorecards <- function(recipe) { } } + inf.to.na <- recipe$Analysis$Workflow$Scorecards$inf_to_na table.label <- recipe$Analysis$Workflow$Scorecards$table_label fileout.label <- recipe$Analysis$Workflow$Scorecards$fileout_label legend.white.space <- recipe$Analysis$Workflow$Scorecards$legend_white_space @@ -78,6 +83,7 @@ Scorecards <- function(recipe) { metrics = metrics.load, start.months = start.months, forecast.months = forecast.months, + inf_to_na = inf.to.na, input.path = input.path) diff --git a/recipes/atomic_recipes/recipe_scorecards_atomic.yml b/recipes/atomic_recipes/recipe_scorecards_atomic.yml index fc88af22..a8adb6c1 100644 --- a/recipes/atomic_recipes/recipe_scorecards_atomic.yml +++ b/recipes/atomic_recipes/recipe_scorecards_atomic.yml @@ -46,24 +46,25 @@ Analysis: Indicators: index: no Scorecards: + execute: yes # yes/no regions: Extra-tropical NH: {lon.min: 0, lon.max: 360, lat.min: 30, lat.max: 90} Tropics: {lon.min: 0, lon.max: 360, lat.min: -30, lat.max: 30} Extra-tropical SH : {lon.min: 0, lon.max: 360, lat.min: -30, lat.max: -90} - start_months: NULL + start_months: 'all' metric: mean_bias enscorr rpss crpss enssprerr metric_aggregation: 'score' - table_label: NULL - fileout_label: NULL - col1_width: NULL - col2_width: NULL + inf_to_na: TRUE + table_label: + fileout_label: + col1_width: + col2_width: calculate_diff: FALSE - #output_path: /esarchive/scratch/nmilders/scorecards_images/testing ncores: 7 # Optional, int: number of cores, defaults to 1 remove_NAs: # Optional, bool: Whether NAs are removed, defaults to FALSE Output_format: Scorecards #S2S4E Run: Loglevel: INFO Terminal: yes - output_dir: /esarchive/scratch/nmilders/scorecards_data/to_system/cross_validation/both_cross_val/ + output_dir: /esarchive/scratch/nmilders/scorecards_data/new/to_system/cross_validation/all_cross_val/ code_dir: /esarchive/scratch/nmilders/gitlab/git_clones/s2s-suite/ -- GitLab From 9f8b68547b0e6d213f3de79d428bde2d7140124f Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Wed, 11 Oct 2023 16:06:58 +0200 Subject: [PATCH 317/388] Update CI/CD packages --- .gitlab-ci.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 8c720372..997870c8 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -7,6 +7,9 @@ unit-test-seasonal: # This job runs in the test stage. - echo "Loading modules..." - module load R/4.1.2-foss-2015a-bare - module load CDO/1.9.8-foss-2015a + - module load GEOS/3.7.2-foss-2015a-Python-3.7.3 + - module load GDAL/2.2.1-foss-2015a + - module load PROJ/4.8.0-foss-2015a - module list - echo "Running seasonal unit tests..." - Rscript ./tests/test_seasonal.R @@ -17,6 +20,9 @@ unit-test-decadal: # This job runs in the test stage. - echo "Loading modules..." - module load R/4.1.2-foss-2015a-bare - module load CDO/1.9.8-foss-2015a + - module load GEOS/3.7.2-foss-2015a-Python-3.7.3 + - module load GDAL/2.2.1-foss-2015a + - module load PROJ/4.8.0-foss-2015a - module list - echo "Running decadal unit tests..." - Rscript ./tests/test_decadal.R -- GitLab From 600e7f2c7afd606c6d8ea23ace29e54c8796e8b2 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Wed, 11 Oct 2023 16:26:36 +0200 Subject: [PATCH 318/388] Add separator options to scorecard start months --- modules/Scorecards/Scorecards.R | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/modules/Scorecards/Scorecards.R b/modules/Scorecards/Scorecards.R index 035452c4..0dbcd921 100644 --- a/modules/Scorecards/Scorecards.R +++ b/modules/Scorecards/Scorecards.R @@ -29,10 +29,11 @@ Scorecards <- function(recipe) { end.year <- as.numeric(recipe$Analysis$Time$hcst_end) forecast.months <- recipe$Analysis$Time$ftime_min : recipe$Analysis$Time$ftime_max - if(recipe$Analysis$Workflow$Scorecards$start_months == 'all'){ + if (recipe$Analysis$Workflow$Scorecards$start_months == 'all') { start.months <- 1:12 } else { - start.months <- as.numeric(strsplit(recipe$Analysis$Workflow$Scorecards$start_months, split = " ")[[1]]) + start.months <- as.numeric(strsplit(recipe$Analysis$Workflow$Scorecards$start_months, + split = ", | |,")[[1]]) } regions <- recipe$Analysis$Workflow$Scorecards$regions -- GitLab From fe647af2204f2c64a3b88b2d3c704fe6a6aa8a06 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Mon, 16 Oct 2023 10:11:56 +0200 Subject: [PATCH 319/388] Remove local copy of as.s2dv_cube.R --- tools/tmp/as.s2dv_cube.R | 184 --------------------------------------- 1 file changed, 184 deletions(-) delete mode 100644 tools/tmp/as.s2dv_cube.R diff --git a/tools/tmp/as.s2dv_cube.R b/tools/tmp/as.s2dv_cube.R deleted file mode 100644 index 019f69a2..00000000 --- a/tools/tmp/as.s2dv_cube.R +++ /dev/null @@ -1,184 +0,0 @@ -#'Conversion of 'startR_array' or 'list' objects to 's2dv_cube' -#' -#'This function converts data loaded using startR package or s2dverification Load function into a 's2dv_cube' object. -#' -#'@author Perez-Zanon Nuria, \email{nuria.perez@bsc.es} -#'@author Nicolau Manubens, \email{nicolau.manubens@bsc.es} -#' -#'@param object an object of class 'startR_array' generated from function \code{Start} from startR package (version 0.1.3 from earth.bsc.es/gitlab/es/startR) or a list output from function \code{Load} from s2dverification package. -#' -#'@return The function returns a 's2dv_cube' object to be easily used with functions \code{CST} from CSTools package. -#' -#'@seealso \code{\link{s2dv_cube}}, \code{\link[s2dverification]{Load}}, \code{\link[startR]{Start}} and \code{\link{CST_Load}} -#'@examples -#'\dontrun{ -#'library(startR) -#'repos <- '/esarchive/exp/ecmwf/system5_m1/monthly_mean/$var$_f6h/$var$_$sdate$.nc' -#'data <- Start(dat = repos, -#' var = 'tas', -#' sdate = c('20170101', '20180101'), -#' ensemble = indices(1:20), -#' time = 'all', -#' latitude = 'all', -#' longitude = indices(1:40), -#' return_vars = list(latitude = 'dat', longitude = 'dat', time = 'sdate'), -#' retrieve = TRUE) -#'data <- as.s2dv_cube(data) -#'class(data) -#'startDates <- c('20001101', '20011101', '20021101', -#' '20031101', '20041101', '20051101') -#'data <- Load(var = 'tas', exp = 'system5c3s', -#' nmember = 15, sdates = startDates, -#' leadtimemax = 3, latmin = 27, latmax = 48, -#' lonmin = -12, lonmax = 40, output = 'lonlat') -#'data <- as.s2dv_cube(data) -#'class(data) -#'} -#'@export -as.s2dv_cube <- function(object) { - if (is.list(object)) { - if (is.null(object) || (is.null(object$mod) && is.null(object$obs))) { - stop("The s2dverification::Load call did not return any data.") - } - obs <- object - obs$mod <- NULL - object$obs <- NULL - names(object)[[1]] <- 'data' - names(obs)[[1]] <- 'data' - remove_matches <- function(v, patterns) { - if (length(v) > 0) { - matches <- c() - for (pattern in patterns) { - matches <- c(matches, which(grepl(pattern, v))) - } - if (length(matches) > 0) { - v <- v[-matches] - } - } - v - } - - harmonize_patterns <- function(v) { - matches <- grepl('.*\\.nc$', v) - if (sum(!matches) > 0) { - match_indices <- which(!matches) - v[match_indices] <- sapply(v[match_indices], function(x) paste0(x, '*')) - } - v <- glob2rx(v) - v <- gsub('\\$.*\\$', '*', v) - v - } - - if (!is.null(obs$data)) { - obs$Datasets$exp <- NULL - obs$Datasets <- obs$Datasets$obs - obs_path_patterns <- sapply(obs$Datasets, function(x) attr(x, 'source')) - obs_path_patterns <- harmonize_patterns(obs_path_patterns) - } - - if (!is.null(object$data)) { - object$Datasets$obs <- NULL - object$Datasets <- object$Datasets$exp - exp_path_patterns <- sapply(object$Datasets, function(x) attr(x, 'source')) - exp_path_patterns <- harmonize_patterns(exp_path_patterns) - } - - if (!is.null(obs$data) && !is.null(object$data)) { - obs$source_files <- remove_matches(obs$source_files, - exp_path_patterns) - obs$not_found_files <- remove_matches(obs$not_found_files, - exp_path_patterns) - - object$source_files <- remove_matches(object$source_files, - obs_path_patterns) - object$not_found_files <- remove_matches(object$not_found_files, - obs_path_patterns) - } - - result <- list() - if (!is.null(object$data)) { - class(object) <- 's2dv_cube' - result$exp <- object - } - if (!is.null(obs$data)) { - class(obs) <- 's2dv_cube' - result$obs <- obs - } - if (is.list(result)) { - if (is.null(result$exp)) { - result <- result$obs - } else if (is.null(result$obs)) { - result <- result$exp - } else { - warning("The output is a list of two 's2dv_cube' objects", - " corresponding to 'exp' and 'obs'.") - } - } - - } else if (class(object) == 'startR_array') { - result <- list() - result$data <- as.vector(object) - dim(result$data) <- dim(object) - - dat_attr_names <- names(attributes(object)$Variables$dat1) - common_attr_names <- names(attributes(object)$Variables$common) - # $lon - known_lon_names <- s2dv:::.KnownLonNames() - if (!is.null(dat_attr_names[which(dat_attr_names %in% known_lon_names)]) & - !identical(dat_attr_names[which(dat_attr_names %in% known_lon_names)], character(0))) { - result$lon <- attributes(object)$Variables$dat1[[dat_attr_names[which(dat_attr_names %in% known_lon_names)]]] - } else if (!is.null(common_attr_names[which(common_attr_names %in% known_lon_names)]) & - !identical(common_attr_names[which(common_attr_names %in% known_lon_names)], character(0))) { - result$lon <- attributes(object)$Variables$common[[common_attr_names[which(common_attr_names %in% known_lon_names)]]] - } else { - warning("'lon' is not found in this object.") - result$lon <- NULL - } - # $lat - known_lat_names <- s2dv:::.KnownLatNames() - if (!is.null(dat_attr_names[which(dat_attr_names %in% known_lat_names)]) & - !identical(dat_attr_names[which(dat_attr_names %in% known_lat_names)], character(0))) { - result$lat <- attributes(object)$Variables$dat1[[dat_attr_names[which(dat_attr_names %in% known_lat_names)]]] - } else if (!is.null(common_attr_names[which(common_attr_names %in% known_lat_names)]) & - !identical(common_attr_names[which(common_attr_names %in% known_lat_names)], character(0))) { - result$lat <- attributes(object)$Variables$common[[common_attr_names[which(common_attr_names %in% known_lat_names)]]] - } else { - warning("'lat' is not found in this object.") - result$lat <- NULL - } - - vars <- which(!common_attr_names %in% c("time", known_lon_names, known_lat_names)) - - if (length(vars) > 1) { - warning("More than one variable has been provided and ", - "only the first one '", common_attr_names[vars[1]],"' will be used.") - vars <- vars[1] - } - - Variable <- list() - Variable$varName <- names(attributes(object)$Variables$common)[vars] - attr(Variable, 'variable') <- attributes(object)$Variables$common[[vars]] - result$Variable <- Variable - dims <- dim(object) - if (any(c('sdate', 'sdates') %in% names(dims))) { - n_sdates <- dims[which(names(dims) == 'sdate' | names(dims) == 'sdates')] - sdates <- attributes(object)$Variables$common$time[1 : n_sdates] - } else { - sdates <- attributes(object)$Variables$common$time[1] - } - Dataset <- list(list(InitializationDates = list(Member_1 = sdates))) - names(Dataset) <- list(deparse(substitute(object))) - result$Datasets <- Dataset - result$Dates$start <- attributes(object)$Variables$common$time - result$when <- Sys.time() - result$source_files <- as.vector(attributes(object)$Files) - result$load_parameters <- attributes(object)$FileSelectors - class(result) <- 's2dv_cube' - } else { - stop("The class of parameter 'object' is not implemented", - " to be converted into 's2dv_cube' class yet.") - } - result - -} - -- GitLab From ed3e15c3e3022eb0aa081fbd1642f0a0073926e3 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Tue, 17 Oct 2023 10:47:03 +0200 Subject: [PATCH 320/388] Change autosubmit esarchive configuration to AS version 4 --- autosubmit/auto-verification.sh | 4 +- autosubmit/conf_esarchive/autosubmit.conf | 42 ---------- .../autosubmit.yml | 2 +- autosubmit/conf_esarchive/expdef.conf | 76 ------------------- .../expdef.yml | 2 +- autosubmit/conf_esarchive/jobs.conf | 16 ---- .../jobs.yml | 6 +- autosubmit/conf_esarchive/platforms.conf | 11 --- .../platforms.yml | 0 autosubmit/conf_esarchive/proj.conf | 6 -- .../proj.yml | 0 conf/autosubmit.yml | 13 +--- recipes/recipe_scorecards_vic.yml | 2 +- recipes/tests/recipe_seasonal_example.yml | 4 +- tools/write_autosubmit_conf.R | 46 ++++------- 15 files changed, 28 insertions(+), 202 deletions(-) delete mode 100644 autosubmit/conf_esarchive/autosubmit.conf rename autosubmit/{conf_esarchive2 => conf_esarchive}/autosubmit.yml (95%) delete mode 100644 autosubmit/conf_esarchive/expdef.conf rename autosubmit/{conf_esarchive2 => conf_esarchive}/expdef.yml (98%) delete mode 100644 autosubmit/conf_esarchive/jobs.conf rename autosubmit/{conf_esarchive2 => conf_esarchive}/jobs.yml (72%) delete mode 100644 autosubmit/conf_esarchive/platforms.conf rename autosubmit/{conf_esarchive2 => conf_esarchive}/platforms.yml (100%) delete mode 100644 autosubmit/conf_esarchive/proj.conf rename autosubmit/{conf_esarchive2 => conf_esarchive}/proj.yml (100%) diff --git a/autosubmit/auto-verification.sh b/autosubmit/auto-verification.sh index bbd06556..0089e322 100644 --- a/autosubmit/auto-verification.sh +++ b/autosubmit/auto-verification.sh @@ -2,8 +2,8 @@ ############ AUTOSUBMIT INPUTS ############ proj_dir=%PROJDIR% -outdir=%OUTDIR% -script=%SCRIPT% +outdir=%common.OUTDIR% +script=%common.SCRIPT% CHUNK=%CHUNK% ############################### diff --git a/autosubmit/conf_esarchive/autosubmit.conf b/autosubmit/conf_esarchive/autosubmit.conf deleted file mode 100644 index 685876a1..00000000 --- a/autosubmit/conf_esarchive/autosubmit.conf +++ /dev/null @@ -1,42 +0,0 @@ -[config] -# Experiment identifier -# No need to change -EXPID = -# No need to change. -# Autosubmit version identifier -AUTOSUBMIT_VERSION = 3.14.0 -# Default maximum number of jobs to be waiting in any platform -# Default = 3 -MAXWAITINGJOBS = 16 -# Default maximum number of jobs to be running at the same time at any platform -# Default = 6 -TOTALJOBS = 16 -# Time (seconds) between connections to the HPC queue scheduler to poll already submitted jobs status -# Default = 10 -SAFETYSLEEPTIME = 10 -# Number of retrials if a job fails. Can be override at job level -# Default = 0 -RETRIALS = 0 - -[mail] -# Enable mail notifications -# Default = False -NOTIFICATIONS = -# Mail address where notifications will be received -TO = - -[communications] -# Communications library used to connect with platforms: paramiko or saga. -# Default = paramiko -API = paramiko - -[storage] -# Defines the way of storing the progress of the experiment. The available options are: -# A PICKLE file (pkl) or an SQLite database (db). Default = pkl -TYPE = pkl -# Defines if the remote logs will be copied to the local platform. Default = True. -COPY_REMOTE_LOGS = True - -[migrate] -# Changes experiment files owner. -TO_USER = diff --git a/autosubmit/conf_esarchive2/autosubmit.yml b/autosubmit/conf_esarchive/autosubmit.yml similarity index 95% rename from autosubmit/conf_esarchive2/autosubmit.yml rename to autosubmit/conf_esarchive/autosubmit.yml index 03008116..0fd5d5c6 100644 --- a/autosubmit/conf_esarchive2/autosubmit.yml +++ b/autosubmit/conf_esarchive/autosubmit.yml @@ -1,6 +1,6 @@ config: EXPID: - AUTOSUBMIT_VERSION: 4.0.73 + AUTOSUBMIT_VERSION: 4.0.0b0 MAXWAITINGJOBS: 16 # Default maximum number of jobs to be running at the same time at any platform # Default: 6 diff --git a/autosubmit/conf_esarchive/expdef.conf b/autosubmit/conf_esarchive/expdef.conf deleted file mode 100644 index d3a3370a..00000000 --- a/autosubmit/conf_esarchive/expdef.conf +++ /dev/null @@ -1,76 +0,0 @@ -[DEFAULT] -# Experiment identifier -# No need to change -EXPID = -# HPC name. -# No need to change -HPCARCH = nord3v2 - -[experiment] -# Supply the list of start dates. Available formats: YYYYMMDD YYYYMMDDhh YYYYMMDDhhmm -# You can also use an abbreviated syntax for multiple dates with common parts: 200001[01 15] <=> 20000101 20000115 -# 200001[01-04] <=> 20000101 20000102 20000103 20000104 -# DATELIST = 19600101 19650101 19700101 -# DATELIST = 1960[0101 0201 0301] -# DATELIST = 19[60-65] -DATELIST = -# Supply the list of members. Format fcX -# You can also use an abreviated syntax for multiple members: fc[0 1 2] <=> fc0 fc1 fc2 -# fc[0-2] <=> fc0 fc1 fc2 -# MEMBERS = fc0 fc1 fc2 fc3 fc4 -#MEMBERS = fc4 -MEMBERS = fc0 -# Chunk size unit. STRING = hour, day, month, year -CHUNKSIZEUNIT = month -# Chunk size. NUMERIC = 4, 6, 12 -CHUNKSIZE = 1 -# Total number of chunks in experiment. NUMERIC = 30, 15, 10 -NUMCHUNKS = -# Initial chunk of the experiment. Optional. DEFAULT = 1 -CHUNKINI = -# Calendar used. LIST: standard, noleap -CALENDAR = standard - -[project] -# Select project type. STRING = git, svn, local, none -# If PROJECT_TYPE is set to none, Autosubmit self-contained dummy templates will be used -PROJECT_TYPE = local -# Destination folder name for project. type = STRING, default = leave empty, -PROJECT_DESTINATION = auto-s2s - -# If PROJECT_TYPE is not git, no need to change -[git] -# Repository URL STRING = 'https://github.com/torvalds/linux.git' -PROJECT_ORIGIN = https://earth.bsc.es/gitlab/es/auto-s2s.git -# Select branch or tag, STRING, default = 'master', help = {'master' (default), 'develop', 'v3.1b', ...} -PROJECT_BRANCH = master -# type = STRING, default = leave empty, help = if model branch is a TAG leave empty -PROJECT_COMMIT = - -# If PROJECT_TYPE is not svn, no need to change -[svn] -# type = STRING, help = 'https://svn.ec-earth.org/ecearth3' -PROJECT_URL = -# Select revision number. NUMERIC = 1778 -PROJECT_REVISION = - -# If PROJECT_TYPE is not local, no need to change -[local] -# type = STRING, help = /foo/bar/ecearth -PROJECT_PATH = /esarchive/scratch/vagudets/repos/auto-s2s/ - -# If PROJECT_TYPE is none, no need to change -[project_files] -# Where is PROJECT CONFIGURATION file location relative to project root path -FILE_PROJECT_CONF = -# Where is JOBS CONFIGURATION file location relative to project root path -FILE_JOBS_CONF = -# Default job scripts type in the project. type = STRING, default = bash, supported = 'bash', 'python' or 'r' -JOB_SCRIPTS_TYPE = - -[rerun] -# Is a rerun or not? [Default: Do set FALSE]. BOOLEAN = TRUE, FALSE -RERUN = FALSE -# If RERUN = TRUE then supply the list of chunks to rerun -# LIST = [ 19601101 [ fc0 [1 2 3 4] fc1 [1] ] 19651101 [ fc0 [16-30] ] ] -CHUNKLIST = diff --git a/autosubmit/conf_esarchive2/expdef.yml b/autosubmit/conf_esarchive/expdef.yml similarity index 98% rename from autosubmit/conf_esarchive2/expdef.yml rename to autosubmit/conf_esarchive/expdef.yml index b4327f65..8dc29b27 100644 --- a/autosubmit/conf_esarchive2/expdef.yml +++ b/autosubmit/conf_esarchive/expdef.yml @@ -1,6 +1,6 @@ DEFAULT: EXPID: - HPCARCH: NORD3 + HPCARCH: nord3v2 experiment: DATELIST: MEMBERS: fc0 diff --git a/autosubmit/conf_esarchive/jobs.conf b/autosubmit/conf_esarchive/jobs.conf deleted file mode 100644 index 82898347..00000000 --- a/autosubmit/conf_esarchive/jobs.conf +++ /dev/null @@ -1,16 +0,0 @@ -[verification] -FILE = autosubmit/auto-verification.sh -RUNNING = chunk -WALLCLOCK = -NOTIFY_ON = -PLATFORM = nord3v2 -PROCESSORS = -CUSTOM_DIRECTIVES = - -[scorecards] -FILE = autosubmit/auto-scorecards.sh -WALLCLOCK = 00:10 -NOTIFY_ON = -PLATFORM = nord3v2 -PROCESSORS = 1 -DEPENDENCIES = verification diff --git a/autosubmit/conf_esarchive2/jobs.yml b/autosubmit/conf_esarchive/jobs.yml similarity index 72% rename from autosubmit/conf_esarchive2/jobs.yml rename to autosubmit/conf_esarchive/jobs.yml index 273d3d6f..a3c8934b 100644 --- a/autosubmit/conf_esarchive2/jobs.yml +++ b/autosubmit/conf_esarchive/jobs.yml @@ -1,15 +1,15 @@ JOBS: verification: - FILE: autosubmit/auto-verification-CERISE.sh + FILE: autosubmit/auto-verification.sh RUNNING: chunk WALLCLOCK: NOTIFY_ON: - PLATFORM: NORD3 + PLATFORM: nord3v2 PROCESSORS: scorecards: FILE: autosubmit/auto-scorecards.sh WALLCLOCK: 00:10 - PLATFORM: NORD3 + PLATFORM: nord3v2 NOTIFY_ON: PROCESSORS: 1 DEPENDENCIES: verification diff --git a/autosubmit/conf_esarchive/platforms.conf b/autosubmit/conf_esarchive/platforms.conf deleted file mode 100644 index 0f6819d0..00000000 --- a/autosubmit/conf_esarchive/platforms.conf +++ /dev/null @@ -1,11 +0,0 @@ -[nord3v2] -TYPE = slurm -HOST = nord4.bsc.es -PROJECT = bsc32 -ADD_PROJECT_TO_HOST = False -USER = -SCRATCH_DIR = /gpfs/scratch -PROCESSORS_PER_NODE = 16 -SERIAL_QUEUE = debug -QUEUE = bsc_es -CUSTOM_DIRECTIVES = ["#SBATCH --exclusive"] diff --git a/autosubmit/conf_esarchive2/platforms.yml b/autosubmit/conf_esarchive/platforms.yml similarity index 100% rename from autosubmit/conf_esarchive2/platforms.yml rename to autosubmit/conf_esarchive/platforms.yml diff --git a/autosubmit/conf_esarchive/proj.conf b/autosubmit/conf_esarchive/proj.conf deleted file mode 100644 index 7322a971..00000000 --- a/autosubmit/conf_esarchive/proj.conf +++ /dev/null @@ -1,6 +0,0 @@ -[common] - -MODULES = "MODULES" -OUTDIR = -SCRIPT = -RECIPE = diff --git a/autosubmit/conf_esarchive2/proj.yml b/autosubmit/conf_esarchive/proj.yml similarity index 100% rename from autosubmit/conf_esarchive2/proj.yml rename to autosubmit/conf_esarchive/proj.yml diff --git a/conf/autosubmit.yml b/conf/autosubmit.yml index 3a56e7c3..4ff15ffd 100644 --- a/conf/autosubmit.yml +++ b/conf/autosubmit.yml @@ -1,8 +1,8 @@ esarchive: platform: nord3v2 - module_version: autosubmit/3.14.0-foss-2015a-Python-2.7.9 - auto_version: 3.14.0 - conf_format: ini + module_version: autosubmit/4.0.0b-foss-2015a-Python-3.7.3 + auto_version: 4.0.0 + conf_format: yaml experiment_dir: /esarchive/autosubmit/ userID: bsc32 mars: @@ -12,10 +12,3 @@ mars: conf_format: yaml experiment_dir: /esarchive/autosubmit/ ## TO BE CHANGED userID: bsc32 ## TO BE CHANGED -esarchive2: - platform: nord3v2 - module_version: autosubmit/4.0.0b-foss-2015a-Python-3.7.3 - auto_version: 4.0.0 - conf_format: yaml - experiment_dir: /esarchive/autosubmit/ ## TO BE CHANGED - userID: bsc32 ## TO BE CHANGED diff --git a/recipes/recipe_scorecards_vic.yml b/recipes/recipe_scorecards_vic.yml index ba62072e..fbd2cb90 100644 --- a/recipes/recipe_scorecards_vic.yml +++ b/recipes/recipe_scorecards_vic.yml @@ -14,7 +14,6 @@ Analysis: Horizon: Seasonal Variables: # ECVs and Indicators? - {name: tas, freq: monthly_mean} - - {name: prlr, freq: monthly_mean} Datasets: System: # multiple systems for single model, split if Multimodel = F - {name: ECMWF-SEAS5} @@ -99,6 +98,7 @@ Run: wallclock: 03:00 # hh:mm processors_per_job: 14 platform: nord3v2 + custom_directives: ['#SBATCH --exclusive'] email_notifications: yes # enable/disable email notifications. Change it if you want to. email_address: victoria.agudetse@bsc.es # replace with your email address notify_completed: yes # notify me by email when a job finishes diff --git a/recipes/tests/recipe_seasonal_example.yml b/recipes/tests/recipe_seasonal_example.yml index b4933b59..4ba873c1 100644 --- a/recipes/tests/recipe_seasonal_example.yml +++ b/recipes/tests/recipe_seasonal_example.yml @@ -66,14 +66,14 @@ Analysis: Run: Loglevel: INFO Terminal: yes - filesystem: esarchive2 + filesystem: esarchive output_dir: /esarchive/scratch/vagudets/auto-s2s-outputs/ code_dir: /esarchive/scratch/vagudets/repos/auto-s2s/ autosubmit: yes # fill only if using autosubmit auto_conf: script: /esarchive/scratch/vagudets/repos/auto-s2s/example_scripts/test_parallel_workflow.R - expid: a5no # autosubmit experiment ID + expid: a6jr # autosubmit experiment ID hpc_user: bsc32762 # your hpc username wallclock: 01:00 # hh:mm processors_per_job: 8 # use ncores parameter? diff --git a/tools/write_autosubmit_conf.R b/tools/write_autosubmit_conf.R index 925cbd77..95ca93f0 100644 --- a/tools/write_autosubmit_conf.R +++ b/tools/write_autosubmit_conf.R @@ -34,54 +34,38 @@ write_autosubmit_conf <- function(recipe, nchunks) { conf$local$PROJECT_PATH <- recipe$Run$code_dir } else if (conf_type == "jobs") { # Section 3: jobs - ## wallclock, notify_on, platform?, processors - # Different file structure depending on autosubmit version - if (auto_specs$auto_version == "4.0.0") { - jobs <- conf$JOBS - } else { - jobs <- conf - } - jobs$verification$WALLCLOCK <- recipe$Run$auto_conf$wallclock + ## wallclock, notify_on, platform?, processors, + conf$JOBS$verification$WALLCLOCK <- recipe$Run$auto_conf$wallclock if (recipe$Run$auto_conf$notify_completed) { - jobs$verification$NOTIFY_ON <- paste(jobs$verification$NOTIFY_ON, - "COMPLETED") + conf$JOBS$verification$NOTIFY_ON <- paste(conf$JOBS$verification$NOTIFY_ON, + "COMPLETED") } if (recipe$Run$auto_conf$notify_failed) { - jobs$verification$NOTIFY_ON <- paste(jobs$verification$NOTIFY_ON, - "FAILED") + conf$JOBS$verification$NOTIFY_ON <- paste(conf$JOBS$verification$NOTIFY_ON, + "FAILED") } - jobs$verification$PROCESSORS <- recipe$Run$auto_conf$processors_per_job # ncores? - jobs$verification$CUSTOM_DIRECTIVES <- recipe$Run$auto_conf$custom_directives + conf$JOBS$verification$PROCESSORS <- recipe$Run$auto_conf$processors_per_job # ncores? + conf$JOBS$verification$CUSTOM_DIRECTIVES <- recipe$Run$auto_conf$custom_directives # Only include Scorecards job if section exists in the recipe and # is set to 'execute: True' if (!("Scorecards" %in% names(recipe$Analysis$Workflow)) || (!recipe$Analysis$Workflow$Scorecards$execute)) { - jobs$scorecards <- NULL + conf$JOBS$scorecards <- NULL } else { if (recipe$Run$auto_conf$notify_completed) { - jobs$scorecards$NOTIFY_ON <- paste(jobs$scorecards$NOTIFY_ON, - "COMPLETED") + conf$JOBS$scorecards$NOTIFY_ON <- paste(conf$JOBS$scorecards$NOTIFY_ON, + "COMPLETED") } if (recipe$Run$auto_conf$notify_failed) { - jobs$scorecards$NOTIFY_ON <- paste(jobs$scorecards$NOTIFY_ON, - "FAILED") + conf$JOBS$scorecards$NOTIFY_ON <- paste(conf$JOBS$scorecards$NOTIFY_ON, + "FAILED") } } - # Return to original list - if (auto_specs$auto_version == "4.0.0") { - conf$JOBS <- jobs - } else { - conf <- jobs - } } else if (conf_type == "platforms") { # Section 4: platform configuration ## nord3v2 configuration... platform name? user, processors_per_node - if (auto_specs$auto_version == "4.0.0") { - conf$Platforms[[auto_specs$platform]]$USER <- - recipe$Run$auto_conf$hpc_user - } else { - conf[[auto_specs$platform]]$USER <- recipe$Run$auto_conf$hpc_user - } + conf$Platforms[[auto_specs$platform]]$USER <- + recipe$Run$auto_conf$hpc_user } else if (conf_type == "proj") { # Section 5: proj ## modules? Info that goes on script, e.g. output directory -- GitLab From 3cdf5ba4893128c7ecf0568219e62047d5b033a8 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Tue, 17 Oct 2023 11:32:45 +0200 Subject: [PATCH 321/388] Restore esarchive name --- conf/archive.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/archive.yml b/conf/archive.yml index 7d5d8bf9..efb57c9e 100644 --- a/conf/archive.yml +++ b/conf/archive.yml @@ -1,4 +1,4 @@ -esarchive2: +esarchive: src: "/esarchive/" System: ECMWF-SEAS5: -- GitLab From 127d318c162133077ec73858e4a80b7d9d839653 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Wed, 11 Oct 2023 16:06:58 +0200 Subject: [PATCH 322/388] Update CI/CD packages --- .gitlab-ci.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 8c720372..997870c8 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -7,6 +7,9 @@ unit-test-seasonal: # This job runs in the test stage. - echo "Loading modules..." - module load R/4.1.2-foss-2015a-bare - module load CDO/1.9.8-foss-2015a + - module load GEOS/3.7.2-foss-2015a-Python-3.7.3 + - module load GDAL/2.2.1-foss-2015a + - module load PROJ/4.8.0-foss-2015a - module list - echo "Running seasonal unit tests..." - Rscript ./tests/test_seasonal.R @@ -17,6 +20,9 @@ unit-test-decadal: # This job runs in the test stage. - echo "Loading modules..." - module load R/4.1.2-foss-2015a-bare - module load CDO/1.9.8-foss-2015a + - module load GEOS/3.7.2-foss-2015a-Python-3.7.3 + - module load GDAL/2.2.1-foss-2015a + - module load PROJ/4.8.0-foss-2015a - module list - echo "Running decadal unit tests..." - Rscript ./tests/test_decadal.R -- GitLab From f8cddaf46bebc0b642fa245eef93822e973cf904 Mon Sep 17 00:00:00 2001 From: vagudets Date: Tue, 17 Oct 2023 12:02:07 +0200 Subject: [PATCH 323/388] Switch to Autosubmit v4 and add custom slurm directives to autosubmit section of the recipe --- .gitlab-ci.yml | 6 ++ autosubmit/auto-verification.sh | 4 +- autosubmit/conf_esarchive/autosubmit.conf | 42 ------------- autosubmit/conf_esarchive/autosubmit.yml | 22 +++++++ autosubmit/conf_esarchive/expdef.conf | 76 ----------------------- autosubmit/conf_esarchive/expdef.yml | 44 +++++++++++++ autosubmit/conf_esarchive/jobs.conf | 14 ----- autosubmit/conf_esarchive/jobs.yml | 16 +++++ autosubmit/conf_esarchive/platforms.conf | 11 ---- autosubmit/conf_esarchive/platforms.yml | 11 ++++ autosubmit/conf_esarchive/proj.conf | 6 -- autosubmit/conf_esarchive/proj.yml | 4 ++ autosubmit/conf_mars/jobs.yml | 1 + conf/autosubmit.yml | 6 +- recipes/recipe_scorecards_vic.yml | 2 +- recipes/tests/recipe_seasonal_example.yml | 7 ++- tools/write_autosubmit_conf.R | 44 ++++++------- 17 files changed, 133 insertions(+), 183 deletions(-) delete mode 100644 autosubmit/conf_esarchive/autosubmit.conf create mode 100644 autosubmit/conf_esarchive/autosubmit.yml delete mode 100644 autosubmit/conf_esarchive/expdef.conf create mode 100644 autosubmit/conf_esarchive/expdef.yml delete mode 100644 autosubmit/conf_esarchive/jobs.conf create mode 100644 autosubmit/conf_esarchive/jobs.yml delete mode 100644 autosubmit/conf_esarchive/platforms.conf create mode 100644 autosubmit/conf_esarchive/platforms.yml delete mode 100644 autosubmit/conf_esarchive/proj.conf create mode 100644 autosubmit/conf_esarchive/proj.yml diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 8c720372..997870c8 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -7,6 +7,9 @@ unit-test-seasonal: # This job runs in the test stage. - echo "Loading modules..." - module load R/4.1.2-foss-2015a-bare - module load CDO/1.9.8-foss-2015a + - module load GEOS/3.7.2-foss-2015a-Python-3.7.3 + - module load GDAL/2.2.1-foss-2015a + - module load PROJ/4.8.0-foss-2015a - module list - echo "Running seasonal unit tests..." - Rscript ./tests/test_seasonal.R @@ -17,6 +20,9 @@ unit-test-decadal: # This job runs in the test stage. - echo "Loading modules..." - module load R/4.1.2-foss-2015a-bare - module load CDO/1.9.8-foss-2015a + - module load GEOS/3.7.2-foss-2015a-Python-3.7.3 + - module load GDAL/2.2.1-foss-2015a + - module load PROJ/4.8.0-foss-2015a - module list - echo "Running decadal unit tests..." - Rscript ./tests/test_decadal.R diff --git a/autosubmit/auto-verification.sh b/autosubmit/auto-verification.sh index bbd06556..0089e322 100644 --- a/autosubmit/auto-verification.sh +++ b/autosubmit/auto-verification.sh @@ -2,8 +2,8 @@ ############ AUTOSUBMIT INPUTS ############ proj_dir=%PROJDIR% -outdir=%OUTDIR% -script=%SCRIPT% +outdir=%common.OUTDIR% +script=%common.SCRIPT% CHUNK=%CHUNK% ############################### diff --git a/autosubmit/conf_esarchive/autosubmit.conf b/autosubmit/conf_esarchive/autosubmit.conf deleted file mode 100644 index 685876a1..00000000 --- a/autosubmit/conf_esarchive/autosubmit.conf +++ /dev/null @@ -1,42 +0,0 @@ -[config] -# Experiment identifier -# No need to change -EXPID = -# No need to change. -# Autosubmit version identifier -AUTOSUBMIT_VERSION = 3.14.0 -# Default maximum number of jobs to be waiting in any platform -# Default = 3 -MAXWAITINGJOBS = 16 -# Default maximum number of jobs to be running at the same time at any platform -# Default = 6 -TOTALJOBS = 16 -# Time (seconds) between connections to the HPC queue scheduler to poll already submitted jobs status -# Default = 10 -SAFETYSLEEPTIME = 10 -# Number of retrials if a job fails. Can be override at job level -# Default = 0 -RETRIALS = 0 - -[mail] -# Enable mail notifications -# Default = False -NOTIFICATIONS = -# Mail address where notifications will be received -TO = - -[communications] -# Communications library used to connect with platforms: paramiko or saga. -# Default = paramiko -API = paramiko - -[storage] -# Defines the way of storing the progress of the experiment. The available options are: -# A PICKLE file (pkl) or an SQLite database (db). Default = pkl -TYPE = pkl -# Defines if the remote logs will be copied to the local platform. Default = True. -COPY_REMOTE_LOGS = True - -[migrate] -# Changes experiment files owner. -TO_USER = diff --git a/autosubmit/conf_esarchive/autosubmit.yml b/autosubmit/conf_esarchive/autosubmit.yml new file mode 100644 index 00000000..0fd5d5c6 --- /dev/null +++ b/autosubmit/conf_esarchive/autosubmit.yml @@ -0,0 +1,22 @@ +config: + EXPID: + AUTOSUBMIT_VERSION: 4.0.0b0 + MAXWAITINGJOBS: 16 + # Default maximum number of jobs to be running at the same time at any platform + # Default: 6 + TOTALJOBS: 16 + SAFETYSLEEPTIME: 10 + RETRIALS: 0 +mail: + NOTIFICATIONS: + TO: +communications: + # Communications library used to connect with platforms: paramiko or saga. + # Default: paramiko + API: paramiko +storage: + # Defines the way of storing the progress of the experiment. The available options are: + # A PICKLE file (pkl) or an SQLite database (db). Default: pkl + TYPE: pkl + # Defines if the remote logs will be copied to the local platform. Default: True. + COPY_REMOTE_LOGS: True diff --git a/autosubmit/conf_esarchive/expdef.conf b/autosubmit/conf_esarchive/expdef.conf deleted file mode 100644 index d3a3370a..00000000 --- a/autosubmit/conf_esarchive/expdef.conf +++ /dev/null @@ -1,76 +0,0 @@ -[DEFAULT] -# Experiment identifier -# No need to change -EXPID = -# HPC name. -# No need to change -HPCARCH = nord3v2 - -[experiment] -# Supply the list of start dates. Available formats: YYYYMMDD YYYYMMDDhh YYYYMMDDhhmm -# You can also use an abbreviated syntax for multiple dates with common parts: 200001[01 15] <=> 20000101 20000115 -# 200001[01-04] <=> 20000101 20000102 20000103 20000104 -# DATELIST = 19600101 19650101 19700101 -# DATELIST = 1960[0101 0201 0301] -# DATELIST = 19[60-65] -DATELIST = -# Supply the list of members. Format fcX -# You can also use an abreviated syntax for multiple members: fc[0 1 2] <=> fc0 fc1 fc2 -# fc[0-2] <=> fc0 fc1 fc2 -# MEMBERS = fc0 fc1 fc2 fc3 fc4 -#MEMBERS = fc4 -MEMBERS = fc0 -# Chunk size unit. STRING = hour, day, month, year -CHUNKSIZEUNIT = month -# Chunk size. NUMERIC = 4, 6, 12 -CHUNKSIZE = 1 -# Total number of chunks in experiment. NUMERIC = 30, 15, 10 -NUMCHUNKS = -# Initial chunk of the experiment. Optional. DEFAULT = 1 -CHUNKINI = -# Calendar used. LIST: standard, noleap -CALENDAR = standard - -[project] -# Select project type. STRING = git, svn, local, none -# If PROJECT_TYPE is set to none, Autosubmit self-contained dummy templates will be used -PROJECT_TYPE = local -# Destination folder name for project. type = STRING, default = leave empty, -PROJECT_DESTINATION = auto-s2s - -# If PROJECT_TYPE is not git, no need to change -[git] -# Repository URL STRING = 'https://github.com/torvalds/linux.git' -PROJECT_ORIGIN = https://earth.bsc.es/gitlab/es/auto-s2s.git -# Select branch or tag, STRING, default = 'master', help = {'master' (default), 'develop', 'v3.1b', ...} -PROJECT_BRANCH = master -# type = STRING, default = leave empty, help = if model branch is a TAG leave empty -PROJECT_COMMIT = - -# If PROJECT_TYPE is not svn, no need to change -[svn] -# type = STRING, help = 'https://svn.ec-earth.org/ecearth3' -PROJECT_URL = -# Select revision number. NUMERIC = 1778 -PROJECT_REVISION = - -# If PROJECT_TYPE is not local, no need to change -[local] -# type = STRING, help = /foo/bar/ecearth -PROJECT_PATH = /esarchive/scratch/vagudets/repos/auto-s2s/ - -# If PROJECT_TYPE is none, no need to change -[project_files] -# Where is PROJECT CONFIGURATION file location relative to project root path -FILE_PROJECT_CONF = -# Where is JOBS CONFIGURATION file location relative to project root path -FILE_JOBS_CONF = -# Default job scripts type in the project. type = STRING, default = bash, supported = 'bash', 'python' or 'r' -JOB_SCRIPTS_TYPE = - -[rerun] -# Is a rerun or not? [Default: Do set FALSE]. BOOLEAN = TRUE, FALSE -RERUN = FALSE -# If RERUN = TRUE then supply the list of chunks to rerun -# LIST = [ 19601101 [ fc0 [1 2 3 4] fc1 [1] ] 19651101 [ fc0 [16-30] ] ] -CHUNKLIST = diff --git a/autosubmit/conf_esarchive/expdef.yml b/autosubmit/conf_esarchive/expdef.yml new file mode 100644 index 00000000..8dc29b27 --- /dev/null +++ b/autosubmit/conf_esarchive/expdef.yml @@ -0,0 +1,44 @@ +DEFAULT: + EXPID: + HPCARCH: nord3v2 +experiment: + DATELIST: + MEMBERS: fc0 + CHUNKSIZEUNIT: month + CHUNKSIZE: 1 + NUMCHUNKS: + CHUNKINI: 1 + CALENDAR: standard +project: + PROJECT_TYPE: local + # Destination folder name for project. type: STRING, default: leave empty, + PROJECT_DESTINATION: auto-s2s +# If PROJECT_TYPE is not git, no need to change +git: + # Repository URL STRING: 'https://github.com/torvalds/linux.git' + PROJECT_ORIGIN: https://earth.bsc.es/gitlab/es/auto-s2s.git + # Select branch or tag, STRING, default: 'master', help: {'master' (default), 'develop', 'v3.1b', ...} + PROJECT_BRANCH: master + # type: STRING, default: leave empty, help: if model branch is a TAG leave empty + PROJECT_COMMIT: '' +svn: + PROJECT_URL: '' + PROJECT_REVISION: '' +# If PROJECT_TYPE is not local, no need to change +local: + # type: STRING, help: /foo/bar/ecearth + PROJECT_PATH: /esarchive/scratch/vagudets/repos/auto-s2s/ +# If PROJECT_TYPE is none, no need to change +project_files: + # Where is PROJECT CONFIGURATION file location relative to project root path + FILE_PROJECT_CONF: '' + # Where is JOBS CONFIGURATION file location relative to project root path + FILE_JOBS_CONF: '' + # Default job scripts type in the project. type: STRING, default: bash, supported: 'bash', 'python' or 'r' + JOB_SCRIPTS_TYPE: '' +rerun: + # Is a rerun or not? [Default: Do set FALSE]. BOOLEAN: TRUE, FALSE + RERUN: FALSE + # If RERUN: TRUE then supply the list of chunks to rerun + # LIST: [ 19601101 [ fc0 [1 2 3 4] fc1 [1] ] 19651101 [ fc0 [16-30] ] ] + CHUNKLIST: '' diff --git a/autosubmit/conf_esarchive/jobs.conf b/autosubmit/conf_esarchive/jobs.conf deleted file mode 100644 index f9d26634..00000000 --- a/autosubmit/conf_esarchive/jobs.conf +++ /dev/null @@ -1,14 +0,0 @@ -[verification] -FILE = autosubmit/auto-verification.sh -RUNNING = chunk -WALLCLOCK = -NOTIFY_ON = -PLATFORM = nord3v2 -PROCESSORS = - -[scorecards] -FILE = autosubmit/auto-scorecards.sh -WALLCLOCK = 00:10 -PLATFORM = nord3v2 -PROCESSORS = 1 -DEPENDENCIES = verification diff --git a/autosubmit/conf_esarchive/jobs.yml b/autosubmit/conf_esarchive/jobs.yml new file mode 100644 index 00000000..a3c8934b --- /dev/null +++ b/autosubmit/conf_esarchive/jobs.yml @@ -0,0 +1,16 @@ +JOBS: + verification: + FILE: autosubmit/auto-verification.sh + RUNNING: chunk + WALLCLOCK: + NOTIFY_ON: + PLATFORM: nord3v2 + PROCESSORS: + scorecards: + FILE: autosubmit/auto-scorecards.sh + WALLCLOCK: 00:10 + PLATFORM: nord3v2 + NOTIFY_ON: + PROCESSORS: 1 + DEPENDENCIES: verification + diff --git a/autosubmit/conf_esarchive/platforms.conf b/autosubmit/conf_esarchive/platforms.conf deleted file mode 100644 index 0f6819d0..00000000 --- a/autosubmit/conf_esarchive/platforms.conf +++ /dev/null @@ -1,11 +0,0 @@ -[nord3v2] -TYPE = slurm -HOST = nord4.bsc.es -PROJECT = bsc32 -ADD_PROJECT_TO_HOST = False -USER = -SCRATCH_DIR = /gpfs/scratch -PROCESSORS_PER_NODE = 16 -SERIAL_QUEUE = debug -QUEUE = bsc_es -CUSTOM_DIRECTIVES = ["#SBATCH --exclusive"] diff --git a/autosubmit/conf_esarchive/platforms.yml b/autosubmit/conf_esarchive/platforms.yml new file mode 100644 index 00000000..78056d62 --- /dev/null +++ b/autosubmit/conf_esarchive/platforms.yml @@ -0,0 +1,11 @@ +## TODO: Change platform +Platforms: + nord3v2: + TYPE: slurm + HOST: nord4.bsc.es + USER: + PROJECT: bsc32 ## TO BE CHANGED + SCRATCH_DIR: /gpfs/scratch/ ## TO BE CHANGED + PROCESSORS_PER_NODE: 16 + SERIAL_QUEUE: debug + QUEUE: bsc_es diff --git a/autosubmit/conf_esarchive/proj.conf b/autosubmit/conf_esarchive/proj.conf deleted file mode 100644 index 7322a971..00000000 --- a/autosubmit/conf_esarchive/proj.conf +++ /dev/null @@ -1,6 +0,0 @@ -[common] - -MODULES = "MODULES" -OUTDIR = -SCRIPT = -RECIPE = diff --git a/autosubmit/conf_esarchive/proj.yml b/autosubmit/conf_esarchive/proj.yml new file mode 100644 index 00000000..679cf63b --- /dev/null +++ b/autosubmit/conf_esarchive/proj.yml @@ -0,0 +1,4 @@ +common: + MODULES: "MODULES" + OUTDIR: + SCRIPT: diff --git a/autosubmit/conf_mars/jobs.yml b/autosubmit/conf_mars/jobs.yml index aba048bc..273d3d6f 100644 --- a/autosubmit/conf_mars/jobs.yml +++ b/autosubmit/conf_mars/jobs.yml @@ -10,6 +10,7 @@ JOBS: FILE: autosubmit/auto-scorecards.sh WALLCLOCK: 00:10 PLATFORM: NORD3 + NOTIFY_ON: PROCESSORS: 1 DEPENDENCIES: verification diff --git a/conf/autosubmit.yml b/conf/autosubmit.yml index 8b653a65..4ff15ffd 100644 --- a/conf/autosubmit.yml +++ b/conf/autosubmit.yml @@ -1,8 +1,8 @@ esarchive: platform: nord3v2 - module_version: autosubmit/3.14.0-foss-2015a-Python-2.7.9 - auto_version: 3.14.0 - conf_format: ini + module_version: autosubmit/4.0.0b-foss-2015a-Python-3.7.3 + auto_version: 4.0.0 + conf_format: yaml experiment_dir: /esarchive/autosubmit/ userID: bsc32 mars: diff --git a/recipes/recipe_scorecards_vic.yml b/recipes/recipe_scorecards_vic.yml index ba62072e..fbd2cb90 100644 --- a/recipes/recipe_scorecards_vic.yml +++ b/recipes/recipe_scorecards_vic.yml @@ -14,7 +14,6 @@ Analysis: Horizon: Seasonal Variables: # ECVs and Indicators? - {name: tas, freq: monthly_mean} - - {name: prlr, freq: monthly_mean} Datasets: System: # multiple systems for single model, split if Multimodel = F - {name: ECMWF-SEAS5} @@ -99,6 +98,7 @@ Run: wallclock: 03:00 # hh:mm processors_per_job: 14 platform: nord3v2 + custom_directives: ['#SBATCH --exclusive'] email_notifications: yes # enable/disable email notifications. Change it if you want to. email_address: victoria.agudetse@bsc.es # replace with your email address notify_completed: yes # notify me by email when a job finishes diff --git a/recipes/tests/recipe_seasonal_example.yml b/recipes/tests/recipe_seasonal_example.yml index 33662383..4ba873c1 100644 --- a/recipes/tests/recipe_seasonal_example.yml +++ b/recipes/tests/recipe_seasonal_example.yml @@ -69,14 +69,15 @@ Run: filesystem: esarchive output_dir: /esarchive/scratch/vagudets/auto-s2s-outputs/ code_dir: /esarchive/scratch/vagudets/repos/auto-s2s/ - autosubmit: no + autosubmit: yes # fill only if using autosubmit auto_conf: script: /esarchive/scratch/vagudets/repos/auto-s2s/example_scripts/test_parallel_workflow.R - expid: a5no # autosubmit experiment ID + expid: a6jr # autosubmit experiment ID hpc_user: bsc32762 # your hpc username - wallclock: 04:00 # hh:mm + wallclock: 01:00 # hh:mm processors_per_job: 8 # use ncores parameter? + custom_directives: ['#SBATCH --constraint=medmem', '#SBATCH --exclusive'] platform: nord3v2 # make this constant? email_notifications: yes # enable/disable email notifications email_address: victoria.agudetse@bsc.es # email address for notifications diff --git a/tools/write_autosubmit_conf.R b/tools/write_autosubmit_conf.R index bfc708bc..95ca93f0 100644 --- a/tools/write_autosubmit_conf.R +++ b/tools/write_autosubmit_conf.R @@ -34,44 +34,38 @@ write_autosubmit_conf <- function(recipe, nchunks) { conf$local$PROJECT_PATH <- recipe$Run$code_dir } else if (conf_type == "jobs") { # Section 3: jobs - ## wallclock, notify_on, platform?, processors - # Different file structure depending on autosubmit version - if (auto_specs$auto_version == "4.0.0") { - jobs <- conf$JOBS - } else { - jobs <- conf - } - jobs$verification$WALLCLOCK <- recipe$Run$auto_conf$wallclock + ## wallclock, notify_on, platform?, processors, + conf$JOBS$verification$WALLCLOCK <- recipe$Run$auto_conf$wallclock if (recipe$Run$auto_conf$notify_completed) { - jobs$verification$NOTIFY_ON <- paste(jobs$verification$NOTIFY_ON, - "COMPLETED") + conf$JOBS$verification$NOTIFY_ON <- paste(conf$JOBS$verification$NOTIFY_ON, + "COMPLETED") } if (recipe$Run$auto_conf$notify_failed) { - jobs$verification$NOTIFY_ON <- paste(jobs$verification$NOTIFY_ON, - "FAILED") + conf$JOBS$verification$NOTIFY_ON <- paste(conf$JOBS$verification$NOTIFY_ON, + "FAILED") } - jobs$verification$PROCESSORS <- recipe$Run$auto_conf$processors_per_job # ncores? + conf$JOBS$verification$PROCESSORS <- recipe$Run$auto_conf$processors_per_job # ncores? + conf$JOBS$verification$CUSTOM_DIRECTIVES <- recipe$Run$auto_conf$custom_directives # Only include Scorecards job if section exists in the recipe and # is set to 'execute: True' if (!("Scorecards" %in% names(recipe$Analysis$Workflow)) || (!recipe$Analysis$Workflow$Scorecards$execute)) { - jobs$scorecards <- NULL - } - # Return to original list - if (auto_specs$auto_version == "4.0.0") { - conf$JOBS <- jobs + conf$JOBS$scorecards <- NULL } else { - conf <- jobs + if (recipe$Run$auto_conf$notify_completed) { + conf$JOBS$scorecards$NOTIFY_ON <- paste(conf$JOBS$scorecards$NOTIFY_ON, + "COMPLETED") + } + if (recipe$Run$auto_conf$notify_failed) { + conf$JOBS$scorecards$NOTIFY_ON <- paste(conf$JOBS$scorecards$NOTIFY_ON, + "FAILED") + } } } else if (conf_type == "platforms") { # Section 4: platform configuration ## nord3v2 configuration... platform name? user, processors_per_node - if (auto_specs$auto_version == "4.0.0") { - conf$Platforms[[auto_specs$platform]]$USER <- - recipe$Run$auto_conf$hpc_user - } else { - conf[[auto_specs$platform]]$USER <- recipe$Run$auto_conf$hpc_user - } + conf$Platforms[[auto_specs$platform]]$USER <- + recipe$Run$auto_conf$hpc_user } else if (conf_type == "proj") { # Section 5: proj ## modules? Info that goes on script, e.g. output directory -- GitLab From 2f7eaefccaf50e8ed6293646f9ba8042333e159c Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Tue, 17 Oct 2023 13:32:09 +0200 Subject: [PATCH 324/388] Reorder files and add GRIB option to loading --- modules/Loading/Loading.R | 26 +- modules/Loading/Loading_decadal.R | 554 ------------------ modules/Loading/{ => R/GRIB}/GRIB/GrbLoad.R | 0 modules/Loading/{ => R/GRIB}/GRIB/s2dv_cube.R | 0 .../Loading/{Loading_GRIB.R => R/load_GRIB.R} | 5 +- recipes/tests/recipe_autosubmit_marstest.yml | 4 - 6 files changed, 18 insertions(+), 571 deletions(-) delete mode 100644 modules/Loading/Loading_decadal.R rename modules/Loading/{ => R/GRIB}/GRIB/GrbLoad.R (100%) rename modules/Loading/{ => R/GRIB}/GRIB/s2dv_cube.R (100%) rename modules/Loading/{Loading_GRIB.R => R/load_GRIB.R} (99%) diff --git a/modules/Loading/Loading.R b/modules/Loading/Loading.R index cf97efc2..d2919594 100644 --- a/modules/Loading/Loading.R +++ b/modules/Loading/Loading.R @@ -3,17 +3,23 @@ source("tools/libs.R") source("modules/Loading/load_datasets.R") Loading <- function(recipe) { - # Source correct function depending on time horizon - ## TODO: Add condition for GRIB files - time_horizon <- tolower(recipe$Analysis$Horizon) - if (time_horizon == "seasonal") { - source("modules/Loading/R/load_seasonal.R") - data <- load_seasonal(recipe) - } else if (time_horizon == "decadal") { - source("modules/Loading/R/load_decadal.R") - data <- load_decadal(recipe) + # Source correct function depending on filesystem and time horizon + # Case: CERISE (Mars) + if (tolower(recipe$Run$filesystem) == "mars") { + source("modules/Loading/R/load_GRIB.R") + data <- load_GRIB(recipe) } else { - stop("Incorrect time horizon.") + # Case: esarchive + time_horizon <- tolower(recipe$Analysis$Horizon) + if (time_horizon == "seasonal") { + source("modules/Loading/R/load_seasonal.R") + data <- load_seasonal(recipe) + } else if (time_horizon == "decadal") { + source("modules/Loading/R/load_decadal.R") + data <- load_decadal(recipe) + } else { + stop("Incorrect time horizon.") + } } return(data) } diff --git a/modules/Loading/Loading_decadal.R b/modules/Loading/Loading_decadal.R deleted file mode 100644 index d8cc8761..00000000 --- a/modules/Loading/Loading_decadal.R +++ /dev/null @@ -1,554 +0,0 @@ -# Loading module: -# 1. archive.yml -# 2. recipe.yml -# 3. Load_decadal.R (V) -#setwd('/esarchive/scratch/aho/git/auto-s2s/') - -## TODO: remove paths to personal scratchs -source("/esarchive/scratch/vagudets/repos/csoperational/R/get_regrid_params.R") -# Load required libraries/funs -source("modules/Loading/helper_loading_decadal.R") -source("modules/Loading/R/dates2load.R") -source("modules/Loading/R/check_latlon.R") -source("modules/Loading/R/get_timeidx.R") -source("tools/libs.R") - -#==================================================================== - -# recipe_file <- "recipes/atomic_recipes/recipe_decadal.yml" -# recipe_file <- "recipes/atomic_recipes/recipe_decadal_daily.yml" - -load_datasets <- function(recipe) { - - ## - archive <- read_yaml(paste0("conf/archive_decadal.yml"))$esarchive - - # Print Start() info or not - DEBUG <- FALSE - - ## TODO: this should come from the main script - # Create output folder and log: - - #------------------------- - # Read from recipe: - #------------------------- - exp.name <- recipe$Analysis$Datasets$System$name #'HadGEM3' - ref.name <- recipe$Analysis$Datasets$Reference$name #'era5' - member <- strsplit(recipe$Analysis$Datasets$System$member, ',')[[1]] #c("r1i1p1f2", "r2i1p1f2") -# variable <- recipe$Analysis$Variables$name #'tas' - variable <- strsplit(recipe$Analysis$Variables$name, ", | |,")[[1]] - store.freq <- recipe$Analysis$Variables$freq #monthly_mean - lats.min <- as.numeric(recipe$Analysis$Region$latmin) #0 - lats.max <- as.numeric(recipe$Analysis$Region$latmax) #10 - lons.min <- as.numeric(recipe$Analysis$Region$lonmin) #0 - lons.max <- as.numeric(recipe$Analysis$Region$lonmax) #10 - - # change to: sdates <- dates2load(recipe, logger) - sdates_hcst <- as.numeric(recipe$Analysis$Time$hcst_start):as.numeric(recipe$Analysis$Time$hcst_end) #1960:2015 - sdates_fcst <- recipe$Analysis$Time$fcst - - if (store.freq == "monthly_mean") { - time_ind <- (as.numeric(recipe$Analysis$Time$ftime_min):as.numeric(recipe$Analysis$Time$ftime_max)) - - } else if (store.freq == "daily_mean") { - time_ind <- get_daily_time_ind(ftimemin = as.numeric(recipe$Analysis$Time$ftime_min), - ftimemax = as.numeric(recipe$Analysis$Time$ftime_max), - initial_month = archive$System[[exp.name]]$initial_month, - sdates = sdates_hcst, - calendar = archive$System[[exp.name]]$calendar) - } - -#NOTE: May be used in the future -# season <- recipe$Analysis$Time$season - - #------------------------- - # Read from archive: - #------------------------- - if (store.freq == "monthly_mean") { - table <- archive$System[[exp.name]][[store.freq]]$table[variable] #list(tas = 'Amon') - } else { - table <- 'day' - } - grid <- archive$System[[exp.name]][[store.freq]]$grid[variable] #list(tas = 'gr') - version <- archive$System[[exp.name]][[store.freq]]$version[variable] #list(tas = 'v20210910') - if (identical(member, 'all')) { - member <- strsplit(archive$System[[exp.name]]$member, ',')[[1]] - } - - #------------------------- - # derived from above: - #------------------------- - # Check lat and lon and decide CircularSort - circularsort <- check_latlon(latmin = lats.min, latmax = lats.max, lonmin = lons.min, lonmax = lons.max) - - # generate transform params for system and ref - regrid_params <- get_regrid_params(recipe, archive) - - # Only if the time length in each chunk may differ that we need largest_dims_length to be TRUE. Otherwise, set FALSE to increase efficiency. - need_largest_dims_length <- ifelse(exp.name == 'EC-Earth3-i2', TRUE, FALSE) - - - #------------------------------------------- - # Step 1: Load the hcst - #------------------------------------------- - #monthly and daily - tmp <- get_dcpp_path(archive = archive, exp.name = exp.name, table = table, grid = grid, - version = version, sdates = sdates_hcst) - path_list <- tmp$path_list - multi_path <- tmp$multi_path - - #TODO: to make this case work; enhance Start() if it's possible - if (multi_path & length(variable) > 1) { - stop("The recipe requests multiple variables and start dates from both dpccA-hindcast and dcppB-forecast. This case is not available for now.") - } - - Start_default_arg_list <- list( - dat = path_list, - var = variable, - syear = paste0(sdates_hcst), - chunk = 'all', - chunk_depends = 'syear', - time = indices(time_ind), - time_across = 'chunk', - merge_across_dims = TRUE, - largest_dims_length = need_largest_dims_length, - latitude = values(list(lats.min, lats.max)), - latitude_reorder = Sort(decreasing = TRUE), - longitude = values(list(lons.min, lons.max)), - longitude_reorder = circularsort, - ensemble = member, - transform = regrid_params$fcst.transform, - transform_extra_cells = 2, - transform_params = list(grid = regrid_params$fcst.gridtype, - method = regrid_params$fcst.gridmethod), - transform_vars = c('latitude', 'longitude'), -# path_glob_permissive = 2, # for version - synonims = list(longitude = c('lon', 'longitude'), - latitude = c('lat', 'latitude')), - return_vars = list(latitude = NULL, longitude = NULL, - time = c('syear', 'chunk')), - silent = !DEBUG, - retrieve = T) - - if (length(variable) > 1) { - Start_default_arg_list <- c(Start_default_arg_list, - list(table = table, grid = grid, version = version, - table_depends = 'var', grid_depends = 'var', version_depends = 'var', - metadata_dims = 'var')) - } - - if (!multi_path) { - Start_hcst_arg_list <- Start_default_arg_list - hcst <- do.call(Start, Start_hcst_arg_list) - - } else { - Start_hcst_arg_list <- Start_default_arg_list - Start_hcst_arg_list[['syear']] <- NULL - Start_hcst_arg_list[['chunk_depends']] <- NULL - remove_ind <- which(Start_hcst_arg_list[['return_vars']][['time']] == 'syear') - Start_hcst_arg_list[['return_vars']][['time']] <- Start_hcst_arg_list[['return_vars']][['time']][-remove_ind] - - hcst <- do.call(Start, Start_hcst_arg_list) - - # Reshape and reorder dimensions - ## dat should be 1, syear should be length of dat; reorder dimensions - dim(hcst) <- c(dat = 1, syear = as.numeric(dim(hcst))[1], dim(hcst)[2:6]) - hcst <- s2dv::Reorder(hcst, c('dat', 'var', 'syear', 'time', 'latitude', 'longitude', 'ensemble')) - - # Manipulate time attr because Start() cannot read it correctly - wrong_time_attr <- attr(hcst, 'Variables')$common$time # dim: [time], the first syear only - tmp <- array(dim = c(dim(hcst)[c('syear', 'time')])) - tmp[1, ] <- wrong_time_attr - yr_diff <- (sdates_hcst - sdates_hcst[1])[-1] #diff(sdates_hcst) - for (i_syear in 1:length(yr_diff)) { - tmp[(i_syear + 1), ] <- wrong_time_attr + lubridate::years(yr_diff[i_syear]) - } - attr(hcst, 'Variables')$common$time <- as.POSIXct(tmp, origin = '1970-01-01', tz = 'UTC') - - } - - tmp_time_attr <- attr(hcst, 'Variables')$common$time - - # change syear to c(sday, sweek, syear) - # dim(hcst) should be [dat, var, sday, sweek, syear, time, latitude, longitude, ensemble] - dim(hcst) <- c(dim(hcst)[1:2], sday = 1, sweek = 1, dim(hcst)[3:7]) - if (!identical(dim(tmp_time_attr), dim(hcst)[c('syear', 'time')])) { - error(recipe$Run$logger, - "hcst has problem in matching data and time attr dimension.") - stop() - } - dim(attr(hcst, 'Variables')$common$time) <- c(sday = 1, sweek = 1, dim(tmp_time_attr)) - - #TODO: as.s2dv_cube() needs to be improved to recognize "variable" is under $dat1 - if (multi_path) { - attributes(hcst)$Variables$common[[variable]] <- attributes(hcst)$Variables$dat1[[variable]] - } - - # Change class from startR_array to s2dv_cube - suppressWarnings( - hcst <- as.s2dv_cube(hcst) - ) - -#------------------------------------------- -# Step 2: Load the fcst -#------------------------------------------- - if (!is.null(recipe$Analysis$Time$fcst)) { - - tmp <- get_dcpp_path(archive = archive, exp.name = exp.name, table = table, grid = grid, - version = version, sdates = sdates_fcst) - path_list <- tmp$path_list - multi_path <- tmp$multi_path - - #TODO: to make this case work; enhance Start() if it's possible - if (multi_path & length(variable) > 1) { - stop("The recipe requests multiple variables and start dates from both dpccA-hindcast and dcppB-forecast. This case is not available for now.") - } - - # monthly & daily - if (!multi_path) { - #NOTE: the adjustment for two cases (multiple files per sdate or not) has been made in hcst - Start_fcst_arg_list <- Start_default_arg_list - Start_fcst_arg_list[['dat']] <- path_list - Start_fcst_arg_list[['syear']] <- paste0(sdates_fcst) - fcst <- do.call(Start, Start_fcst_arg_list) - - - } else { # multi_path - - #TODO: time attribute is not correct. Improve Start(). - Start_fcst_arg_list <- Start_default_arg_list - Start_fcst_arg_list[['dat']] <- path_list - Start_fcst_arg_list[['syear']] <- NULL - Start_fcst_arg_list[['chunk_depends']] <- NULL - remove_ind <- which(Start_fcst_arg_list[['return_vars']][['time']] == 'syear') - Start_fcst_arg_list[['return_vars']][['time']] <- Start_fcst_arg_list[['return_vars']][['time']][-remove_ind] - fcst <- do.call(Start, Start_fcst_arg_list) - - # Reshape and reorder dimensions - ## dat should be 1, syear should be length of dat; reorder dimensions - ## dim(fcst) should be [dat, var, syear, time, latitude, longitude, ensemble] - dim(fcst) <- c(dat = 1, syear = as.numeric(dim(fcst))[1], dim(fcst)[2:6]) - fcst <- s2dv::Reorder(fcst, c('dat', 'var', 'syear', 'time', 'latitude', 'longitude', 'ensemble')) - - # Manipulate time attr because Start() cannot read it correctly - wrong_time_attr <- attr(fcst, 'Variables')$common$time # dim: [time], the first syear only - tmp <- array(dim = c(dim(fcst)[c('syear', 'time')])) - tmp[1, ] <- wrong_time_attr - yr_diff <- (sdates_fcst - sdates_fcst[1])[-1] #diff(sdates_fcst) - for (i_syear in 1:length(yr_diff)) { - tmp[(i_syear + 1), ] <- wrong_time_attr + lubridate::years(yr_diff[i_syear]) - } - attr(fcst, 'Variables')$common$time <- as.POSIXct(tmp, origin = '1970-01-01', tz = 'UTC') - - } - - tmp_time_attr <- attr(fcst, 'Variables')$common$time - - # change syear to c(sday, sweek, syear) - # dim(fcst) should be [dat, var, sday, sweek, syear, time, latitude, longitude, ensemble] - dim(fcst) <- c(dim(fcst)[1:2], sday = 1, sweek = 1, dim(fcst)[3:7]) - if (!identical(dim(tmp_time_attr), dim(fcst)[c('syear', 'time')])) { - error(recipe$Run$logger, - "fcst has problem in matching data and time attr dimension.") - stop() - } - dim(attr(fcst, 'Variables')$common$time) <- c(sday = 1, sweek = 1, dim(tmp_time_attr)) - - #TODO: as.s2dv_cube() needs to be improved to recognize "variable" is under $dat1 - if (multi_path) { - attributes(fcst)$Variables$common[[variable]] <- attributes(fcst)$Variables$dat1[[variable]] - } - - # Change class from startR_array to s2dv_cube - suppressWarnings( - fcst <- as.s2dv_cube(fcst) - ) - - # Only syear could be different - if (!identical(dim(hcst$data)[-5], dim(fcst$data)[-5])) { - error(recipe$Run$logger, - "hcst and fcst do not share the same dimension structure.") - stop() - } - - } else { - fcst <- NULL - } - -#------------------------------------------- -# Step 3. Load the reference -#------------------------------------------- - obs.path <- file.path(archive$src, archive$Reference[[ref.name]]$src, - store.freq, "$var$$var_dir$", "$var$_$file_date$.nc") - var_dir_obs <- archive$Reference[[ref.name]][[store.freq]][variable] # list(tas = "_f1h-r1440x721cds", tos = "_f1h-r1440x721cds") - -# obs.path <- file.path(archive$src, archive$Reference[[ref.name]]$src, store.freq, -# paste0(variable, archive$Reference[[ref.name]][[store.freq]][[variable]])) -# obs.files <- paste0('$var$_$file_date$.nc') - - # Get from startR_cube -# dates <- attr(hcst, 'Variables')$common$time - # Get from s2dv_cube - dates <- hcst$attrs$Dates - dates_file <- sapply(dates, format, '%Y%m') - dim(dates_file) <- dim(dates) - - if (store.freq == "daily_mean") { -#//////////////// -# Method 1: use hcst time attr as obs time selector -#//////////////// - - # Set hour to 12:00 to ensure correct date retrieval for daily data - lubridate::hour(dates) <- 12 - lubridate::minute(dates) <- 00 - # Restore correct dimensions - dim(dates) <- dim(dates_file) - - obs <- Start(dat = obs.path, - var = variable, - var_dir = var_dir_obs, - var_dir_depends = 'var', - file_date = unique(format(dates, '%Y%m')), - time = dates, # [sday, sweek, syear, time] - time_across = 'file_date', - merge_across_dims = TRUE, - split_multiselected_dims = TRUE, - latitude = values(list(lats.min, lats.max)), - latitude_reorder = Sort(decreasing = TRUE), - longitude = values(list(lons.min, lons.max)), - longitude_reorder = circularsort, - transform = regrid_params$obs.transform, - transform_extra_cells = 2, - transform_params = list(grid = regrid_params$obs.gridtype, #nc file - method = regrid_params$obs.gridmethod), - transform_vars = c('latitude', 'longitude'), - synonims = list(latitude = c('lat','latitude'), - longitude = c('lon','longitude')), - return_vars = list(latitude = NULL, longitude = NULL, - time = 'file_date'), - silent = !DEBUG, - retrieve = TRUE) - - } else if (store.freq == "monthly_mean") { -#//////////////// -# Method 2: reshape hcst time attr's date into an array with time dim then as obs date selector -#//////////////// - - obs <- Start(dat = obs.path, - var = variable, - var_dir = var_dir_obs, - var_dir_depends = 'var', - file_date = dates_file, #dates_arr, # [sday, sweek, syear, time] - split_multiselected_dims = TRUE, - latitude = values(list(lats.min, lats.max)), - latitude_reorder = Sort(decreasing = TRUE), - longitude = values(list(lons.min, lons.max)), - longitude_reorder = circularsort, - transform = regrid_params$obs.transform, - transform_extra_cells = 2, - transform_params = list(grid = regrid_params$obs.gridtype, #nc file - method = regrid_params$obs.gridmethod), - transform_vars = c('latitude', 'longitude'), - synonims = list(latitude = c('lat','latitude'), - longitude = c('lon','longitude')), - return_vars = list(latitude = NULL, longitude = NULL, - time = 'file_date'), - metadata_dims = 'var', - silent = !DEBUG, - retrieve = TRUE) - } - - -#dim(attr(obs, 'Variables')$common$time) -# sday sweek syear time -# 1 1 2 14 - - # Remove var_dir dimension - obs <- Subset(obs, along = "var_dir", indices = 1, drop = "selected") - - # Only ensemble dim could be different - if (!identical(dim(obs), dim(hcst$data)[-9])) { - error(recipe$Run$logger, - "obs and hcst dimensions do not match.") - stop() - } - # Add ensemble dim to obs - dim(obs) <- c(dim(obs), ensemble = 1) - - # Change class from startR_array to s2dv_cube - suppressWarnings( - obs <- as.s2dv_cube(obs) - ) - -#------------------------------------------- -# Step 4. Verify the consistance between data -#------------------------------------------- - # dimension - if (any(!names(dim(obs$data)) %in% names(dim(hcst$data)))) { - error(recipe$Run$logger, - "hcst and obs don't share the same dimension names.") - stop() - } else { - ens_ind <- which(names(dim(obs$data)) == 'ensemble') - match_ind <- match(names(dim(obs$data))[-ens_ind], names(dim(hcst$data))) - if (!all(dim(hcst$data)[match_ind] == dim(obs$data)[-ens_ind])) { - error(recipe$Run$logger, - "hcst and obs don't share the same dimension length.") - stop() - } - } - - # time attribute - if (!identical(format(hcst$attrs$Dates, '%Y%m'), - format(obs$attrs$Dates, '%Y%m'))) { - error(recipe$Run$logger, - "hcst and obs don't share the same time.") - stop() - } - - # lat and lon attributes - if (!(recipe$Analysis$Regrid$type == 'none')) { - if (!isTRUE(all.equal(as.vector(hcst$lat), as.vector(obs$lat)))) { - lat_error_msg <- paste("Latitude mismatch between hcst and obs.", - "Please check the original grids and the", - "regrid parameters in your recipe.") - error(recipe$Run$logger, lat_error_msg) - hcst_lat_msg <- paste0("First hcst lat: ", hcst$lat[1], - "; Last hcst lat: ", hcst$lat[length(hcst$lat)]) - info(recipe$Run$logger, hcst_lat_msg) - obs_lat_msg <- paste0("First obs lat: ", obs$lat[1], - "; Last obs lat: ", obs$lat[length(obs$lat)]) - info(recipe$Run$logger, obs_lat_msg) - stop("hcst and obs don't share the same latitudes.") - } - - if (!isTRUE(all.equal(as.vector(hcst$lon), as.vector(obs$lon)))) { - lon_error_msg <- paste("Longitude mismatch between hcst and obs.", - "Please check the original grids and the", - "regrid parameters in your recipe.") - error(recipe$Run$logger, lon_error_msg) - hcst_lon_msg <- paste0("First hcst lon: ", hcst$lon[1], - "; Last hcst lon: ", hcst$lon[length(hcst$lon)]) - info(recipe$Run$logger, hcst_lon_msg) - obs_lon_msg <- paste0("First obs lon: ", obs$lon[1], - "; Last obs lon: ", obs$lon[length(obs$lon)]) - info(recipe$Run$logger, obs_lon_msg) - stop("hcst and obs don't share the same longitudes.") - } - } - - # Check fcst - if (!is.null(fcst)) { - # dimension - if (any(!names(dim(fcst$data)) %in% names(dim(hcst$data)))) { - error(recipe$Run$logger, - "hcst and fcst don't share the same dimension names.") - stop() - } else { - ens_ind <- which(names(dim(fcst$data)) %in% c('ensemble', 'syear')) - match_ind <- match(names(dim(fcst$data))[-ens_ind], names(dim(hcst$data))) - if (!all(dim(hcst$data)[match_ind] == dim(fcst$data)[-ens_ind])) { - error(recipe$Run$logger, - "hcst and fcst don't share the same dimension length.") - stop() - } - } - - # lat and lon attributes - if (!(recipe$Analysis$Regrid$type == 'none')) { - if (!identical(as.vector(hcst$lat), as.vector(fcst$lat))) { - lat_error_msg <- paste("Latitude mismatch between hcst and fcst.", - "Please check the original grids and the", - "regrid parameters in your recipe.") - error(recipe$Run$logger, lat_error_msg) - hcst_lat_msg <- paste0("First hcst lat: ", hcst$lat[1], - "; Last hcst lat: ", hcst$lat[length(hcst$lat)]) - info(recipe$Run$logger, hcst_lat_msg) - fcst_lat_msg <- paste0("First fcst lat: ", fcst$lat[1], - "; Last fcst lat: ", fcst$lat[length(fcst$lat)]) - info(recipe$Run$logger, fcst_lat_msg) - stop("hcst and fcst don't share the same latitudes.") - } - - if (!identical(as.vector(hcst$lon), as.vector(fcst$lon))) { - lon_error_msg <- paste("Longitude mismatch between hcst and fcst.", - "Please check the original grids and the", - "regrid parameters in your recipe.") - error(recipe$Run$logger, lon_error_msg) - hcst_lon_msg <- paste0("First hcst lon: ", hcst$lon[1], - "; Last hcst lon: ", hcst$lon[length(hcst$lon)]) - info(recipe$Run$logger, hcst_lon_msg) - fcst_lon_msg <- paste0("First fcst lon: ", fcst$lon[1], - "; Last fcst lon: ", fcst$lon[length(fcst$lon)]) - info(recipe$Run$logger, fcst_lon_msg) - stop("hcst and fcst don't share the same longitudes.") - } - } - - } - - -#------------------------------------------- -# Step 5. Tune data -#------------------------------------------- - # Remove negative values in accumulative variables - dictionary <- read_yaml("conf/variable-dictionary.yml") - for (var_idx in 1:length(variable)) { - var_name <- variable[var_idx] - if (dictionary$vars[[var_name]]$accum) { - info(recipe$Run$logger, - paste0("Accumulated variable ", var_name, - ": setting negative values to zero.")) - # obs$data[, var_idx, , , , , , , ] <- pmax(Subset(obs$data, - # along = "var", - # indices = var_idx, F), 0) - obs$data[, var_idx, , , , , , , ][obs$data[, var_idx, , , , , , , ] < 0] <- 0 - hcst$data[, var_idx, , , , , , , ][hcst$data[, var_idx, , , , , , , ] < 0] <- 0 - if (!is.null(fcst)) { - fcst$data[, var_idx, , , , , , , ][fcst$data[, var_idx, , , , , , , ] < 0] <- 0 - } - } - - # Convert prlr from m/s to mm/day - ## TODO: Make a unit conversion function - if (variable[[var_idx]] == "prlr") { - # Verify that the units are m/s and the same in obs and hcst - if (((obs$attrs$Variable$metadata[[var_name]]$units == "m s-1") || - (obs$attrs$Variable$metadata[[var_name]]$units == "m s**-1")) && - ((hcst$attrs$Variable$metadata[[var_name]]$units == "m s-1") || - (hcst$attrs$Variable$metadata[[var_name]]$units == "m s**-1"))) { - info(recipe$Run$logger, "Converting precipitation from m/s to mm/day.") - obs$data[, var_idx, , , , , , , ] <- - obs$data[, var_idx, , , , , , , ]*86400*1000 - obs$attrs$Variable$metadata[[var_name]]$units <- "mm/day" - hcst$data[, var_idx, , , , , , , ] <- - hcst$data[, var_idx, , , , , , , ]*86400*1000 - hcst$attrs$Variable$metadata[[var_name]]$units <- "mm/day" - if (!is.null(fcst)) { - fcst$data[, var_idx, , , , , , , ] <- - fcst$data[, var_idx, , , , , , , ]*86400*1000 - fcst$attrs$Variable$metadata[[var_name]]$units <- "mm/day" - } - } - } - } - -#------------------------------------------- -# Step 6. Print summary -#------------------------------------------- - - # Print a summary of the loaded data for the user, for each object - if (recipe$Run$logger$threshold <= 2) { - data_summary(hcst, recipe) - data_summary(obs, recipe) - if (!is.null(fcst)) { - data_summary(fcst, recipe) - } - } - - info(recipe$Run$logger, - "##### DATA LOADING COMPLETED SUCCESSFULLY #####") - .log_memory_usage(recipe$Run$logger, when = "After loading") - - return(list(hcst = hcst, fcst = fcst, obs = obs)) -} diff --git a/modules/Loading/GRIB/GrbLoad.R b/modules/Loading/R/GRIB/GRIB/GrbLoad.R similarity index 100% rename from modules/Loading/GRIB/GrbLoad.R rename to modules/Loading/R/GRIB/GRIB/GrbLoad.R diff --git a/modules/Loading/GRIB/s2dv_cube.R b/modules/Loading/R/GRIB/GRIB/s2dv_cube.R similarity index 100% rename from modules/Loading/GRIB/s2dv_cube.R rename to modules/Loading/R/GRIB/GRIB/s2dv_cube.R diff --git a/modules/Loading/Loading_GRIB.R b/modules/Loading/R/load_GRIB.R similarity index 99% rename from modules/Loading/Loading_GRIB.R rename to modules/Loading/R/load_GRIB.R index 3c82172a..8ae2a74d 100644 --- a/modules/Loading/Loading_GRIB.R +++ b/modules/Loading/R/load_GRIB.R @@ -2,11 +2,10 @@ # Load GRIB files from MARS ################################################# -source('modules/Loading/GRIB/GrbLoad.R') +source('modules/Loading/R/GRIB/GrbLoad.R') source('tools/libs.R') -load_datasets <- function(recipe) { - +load_GRIB <- function(recipe) { # Set params #------------------------------------------------------------------- diff --git a/recipes/tests/recipe_autosubmit_marstest.yml b/recipes/tests/recipe_autosubmit_marstest.yml index ebb43374..24b90797 100644 --- a/recipes/tests/recipe_autosubmit_marstest.yml +++ b/recipes/tests/recipe_autosubmit_marstest.yml @@ -69,11 +69,7 @@ Run: autosubmit: yes # fill only if using autosubmit auto_conf: -<<<<<<< HEAD - script: /esarchive/scratch/vagudets/repos/auto-s2s/modules/test_parallel_GRIB.R # path to the script to run -======= script: /esarchive/scratch/vagudets/repos/auto-s2s/example_scripts/test_parallel_workflow.R # path to the script to run ->>>>>>> master expid: a5ta ## if left empty, create new exp? hpc_user: bsc32762 # your hpc username wallclock: 02:30 # hh:mm -- GitLab From bcd513e9fa7cf1d6f49e37628fce575fee37e364 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Wed, 18 Oct 2023 11:10:22 +0200 Subject: [PATCH 325/388] Add --disable_unique_ID flag to SUNSET launcher --- launch_SUNSET.sh | 10 ++++++++-- split.R | 2 +- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/launch_SUNSET.sh b/launch_SUNSET.sh index a2bfbb2e..eb8fcf46 100644 --- a/launch_SUNSET.sh +++ b/launch_SUNSET.sh @@ -17,7 +17,7 @@ function usage { - echo "Usage: $0 --wallclock= --custom_directives=" + echo "Usage: $0 --wallclock= --custom_directives= --disable_unique_ID" echo " " echo " : Path to the SUNSET recipe." echo " " @@ -32,6 +32,8 @@ function usage echo " " echo " --custom_directives=: Custom directives for sbatch." echo " E.g. '--constraint=medmem'." + echo " " + echo " --disable_unique_ID: Do not add a unique ID to the output folder name." } if [[ ( $@ == "--help") || $@ == "-h" ]]; then @@ -57,6 +59,10 @@ for i in "$@"; do export custom_directives=`echo $1 | sed -e 's/^[^=]*=//g'` shift ;; + --disable_unique_ID) + export disable_unique_ID="--disable_unique_ID" + shift + ;; -h|--help) usage exit 0 @@ -98,7 +104,7 @@ tmpfile=$(mktemp ${TMPDIR-/tmp}/SUNSET.XXXXXX) # Create outdir and split recipes source MODULES -Rscript split.R ${recipe} --tmpfile $tmpfile +Rscript split.R ${recipe} $disable_unique_ID --tmpfile $tmpfile # Run with Autosubmit or directly with Slurm's sbatch? run_method=$( head -1 $tmpfile | tail -1 ) diff --git a/split.R b/split.R index 58b34a87..a7943734 100755 --- a/split.R +++ b/split.R @@ -14,7 +14,7 @@ Usage: Options: -h --help Show usage. --disable_unique_ID Do not add a unique ID to the output folder name. - --tmpfile= Temporary file to store output and code directories. Handled by launch.sh. + --tmpfile= Temporary file to store output and code directories. Handled by launch_SUNSET.sh. Arguments: recipe path to the recipe." -- GitLab From 7f0c9300317c243e259bfce47e77d5ac92aee476 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Wed, 18 Oct 2023 11:45:46 +0200 Subject: [PATCH 326/388] Update recipe checker and fix pipeline --- tools/check_recipe.R | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tools/check_recipe.R b/tools/check_recipe.R index b7b90ad4..e4c59a55 100644 --- a/tools/check_recipe.R +++ b/tools/check_recipe.R @@ -442,10 +442,10 @@ check_recipe <- function(recipe) { } # Skill - AVAILABLE_METRICS <- c("enscorr", "corr", "rps", "rpss", "frps", "frpss", - "crps", "crpss", "bss10", "bss90", "mean_bias", - "mean_bias_ss", "enssprerr", "rps_clim", "rpss_clim", - "enscorr_specs", "frps_specs", "rpss_specs", + AVAILABLE_METRICS <- c("enscorr", "corr_individual_members", "rps", "rpss", + "frps", "frpss", "crps", "crpss", "bss10", "bss90", + "mean_bias", "mean_bias_ss", "enssprerr", "rps_clim", + "rpss_clim", "enscorr_specs", "frps_specs", "rpss_specs", "frpss_specs", "bss10_specs", "bss90_specs") if ("Skill" %in% names(recipe$Analysis$Workflow)) { if (is.null(recipe$Analysis$Workflow$Skill$metric)) { -- GitLab From bba2416fab52f8d4905997b7738d8403d8de93e0 Mon Sep 17 00:00:00 2001 From: aho Date: Wed, 18 Oct 2023 12:27:06 +0200 Subject: [PATCH 327/388] Units: Use asplit or Apply to make dimensions flexible --- .../Units/R/transform_units_precipitation.R | 75 +++++++++---------- modules/Units/R/transform_units_pressure.R | 24 +++--- modules/Units/R/transform_units_temperature.R | 25 ++++--- 3 files changed, 65 insertions(+), 59 deletions(-) diff --git a/modules/Units/R/transform_units_precipitation.R b/modules/Units/R/transform_units_precipitation.R index a24ef851..5cc1e812 100644 --- a/modules/Units/R/transform_units_precipitation.R +++ b/modules/Units/R/transform_units_precipitation.R @@ -1,80 +1,70 @@ transform_units_precipitation <- function(data, original_units, new_units, var_name, freq, flux = FALSE, ncores = NULL, var_index = 1) { - ## TODO: Hard-coded subsetting + ## TODO consider higher frequencies (e.g. 6hourly) ## could create a constant hours <- 24 or hours <- 6 and use the same code + + data_arr <- data[[1]]$data + data_list <- asplit(data_arr, which(names(dim(data_arr)) == "var")) + + if (original_units == "ms-1") { if (new_units == "mm") { - data[[1]]$data[ , var_index, , , , , , , ] <- - data[[1]]$data[ , var_index, , , , , , , ] * 3600 * 24 * 1000 - data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'mm' + data_list[[var_index]] <- data_list[[var_index]] * 3600 * 24 * 1000 + data[[1]]$attrs$Variable$metadata[[var_name]]$units <- "mm" } else if (new_units == "m") { - data[[1]]$data[ , var_index, , , , , , , ] <- - data[[1]]$data[ , var_index, , , , , , , ] * 3600 * 24 - data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'm' + data_list[[var_index]] <- data_list[[var_index]] * 3600 * 24 + data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'm' } else if (new_units == "kgm-2s-1") { - data[[1]]$data[ , var_index, , , , , , , ] <- - data[[1]]$data[ , var_index, , , , , , , ] * 1000 - data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'kg m-2 s-1' + data_list[[var_index]] <- data_list[[var_index]] * 1000 + data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'kg m-2 s-1' } else { - stop(paste("Unknown transformation from", original_units, "to", - new_units)) + stop(paste("Unknown transformation from", original_units, "to", new_units)) } } else if (original_units == "mm") { if (new_units == "ms-1") { - data[[1]]$data[ , var_index, , , , , , , ] <- - data[[1]]$data[ , var_index, , , , , , , ] / (3600 * 24 * 1000) + data_list[[var_index]] <- data_list[[var_index]] / (3600 * 24 * 1000) data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'm s-1' } else if (new_units == "m") { - data[[1]]$data[ , var_index, , , , , , , ] <- - data[[1]]$data[ , var_index, , , , , , , ] / 1000 + data_list[[var_index]] <- data_list[[var_index]] / 1000 data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'm' } else if (new_units == "kgm-2s-1") { - data[[1]]$data[ , var_index, , , , , , , ] <- - data[[1]]$data[ , var_index, , , , , , , ] / (3600 * 24 ) + data_list[[var_index]] <- data_list[[var_index]] / (3600 * 24) data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'kg m-2 s-1' } else { - stop(paste("Unknown transformation from", original_units, "to", - new_units)) + stop(paste("Unknown transformation from", original_units, "to", new_units)) } } else if (original_units == "m") { if (new_units == "ms-1") { - data[[1]]$data[ , var_index, , , , , , , ] <- - data[[1]]$data[ , var_index, , , , , , , ] / (3600 * 24) + data_list[[var_index]] <- data_list[[var_index]] / (3600 * 24) data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'm s-1' } else if (new_units == "mm") { - data[[1]]$data[ , var_index, , , , , , , ] <- - data[[1]]$data[ , var_index, , , , , , , ] * 1000 + data_list[[var_index]] <- data_list[[var_index]] * 1000 data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'mm' } else if (new_units == "kgm-2s-1") { - data[[1]]$data[ , var_index, , , , , , , ] <- - data[[1]]$data[ , var_index, , , , , , , ] * 1000 / (3600 * 24) + data_list[[var_index]] <- data_list[[var_index]] * 1000 / (3600 * 24) data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'kg m-2 s-1' } else { - stop(paste("Unknown transformation from", original_units, "to", - new_units)) + stop(paste("Unknown transformation from", original_units, "to", new_units)) } } else if (original_units == "kgm-2s-1") { if (new_units == "ms-1") { - data[[1]]$data[ , var_index, , , , , , , ] <- - data[[1]]$data[ , var_index, , , , , , , ] / 1000 + data_list[[var_index]] <- data_list[[var_index]] / 1000 data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'm s-1' } else if (new_units == "mm") { - data[[1]]$data[ , var_index, , , , , , , ] <- - data[[1]]$data[ , var_index, , , , , , , ] * 3600 * 24 + data_list[[var_index]] <- data_list[[var_index]] * 3600 * 24 data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'mm' } else if (new_units == "m") { - data[[1]]$data[ , var_index, , , , , , , ] <- - data[[1]]$data[ , var_index, , , , , , , ] * 3600 * 24 / 1000 + data_list[[var_index]] <- data_list[[var_index]] * 3600 * 24 / 1000 data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'm' } else { - stop(paste("Unknown transformation from", original_units, "to", - new_units)) + stop(paste("Unknown transformation from", original_units, "to", new_units)) } } else { stop("Unknown precipitation units transformation") } + if (flux) { data[[1]]$attrs$Variable$metadata[[var_name]]$units <- paste0( data[[1]]$attrs$Variable$metadata[[var_name]]$units, "/day") @@ -84,9 +74,8 @@ transform_units_precipitation <- function(data, original_units, new_units, time_pos <- which(lapply(data[[1]]$attrs$Variable$metadata[[var_name]]$dim, function(x) {x$name}) == 'time') cal <- tolower(data[[1]]$attrs$Variable$metadata[[var_name]]$dim[[time_pos]]$calendar) - data_subset <- Subset(data[[1]]$data, along = "var", indices = var_index, drop = 'selected') - data[[1]]$data[ , var_index, , , , , , , ] <- - Apply(list(data_subset, data[[1]]$attrs$Dates), + data_list[[var_index]] <- + Apply(list(data_list[[var_index]], data[[1]]$attrs$Dates), target_dim = list(c('syear'), c('syear')), extra_info = list(cal = cal, days_in_month = .days_in_month), fun = function(x, y) { @@ -96,9 +85,17 @@ transform_units_precipitation <- function(data, original_units, new_units, }, ncores = ncores)$output1 } } + + # Combine list back to array + data_arr <- array(unlist(data_list), + dim = c(dim(data_list[[1]]), var = length(data_list))) + data[[1]]$data <- aperm(data_arr, match(names(dim(data[[1]]$data)), + names(dim(data_arr)))) + return(data) } + .days_in_month <- function(x, cal) { if (cal %in% c('gregorian', 'standard', 'proleptic_gregorian')) { N_DAYS_IN_MONTHS <- lubridate:::N_DAYS_IN_MONTHS diff --git a/modules/Units/R/transform_units_pressure.R b/modules/Units/R/transform_units_pressure.R index 9712e9fe..58d51b1e 100644 --- a/modules/Units/R/transform_units_pressure.R +++ b/modules/Units/R/transform_units_pressure.R @@ -1,33 +1,37 @@ transform_units_pressure <- function(data, original_units, new_units, var_name, var_index = 1) { - ## TODO: Hard-coded subsetting + data_arr <- data[[1]]$data + data_list <- asplit(data_arr, which(names(dim(data_arr)) == "var")) + if (original_units == 'pa') { + data_list[[var_index]] <- data_list[[var_index]] / 100 if (new_units == 'hpa') { - data[[1]]$data[ , var_index, , , , , , , ] <- - data[[1]]$data[ , var_index, , , , , , , ] /100 data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'hPa' } else if (new_units == 'mb') { - data[[1]]$data[ , var_index, , , , , , , ] <- - data[[1]]$data[ , var_index, , , , , , , ] /100 data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'mb' } } else if (original_units == 'hpa') { if (new_units == 'pa') { - data[[1]]$data[ , var_index, , , , , , , ] <- - data[[1]]$data[ , var_index, , , , , , , ] * 100 + data_list[[var_index]] <- data_list[[var_index]] * 100 data[[1]]$attrs$Variable$metadata[[var_name]]$units <- "Pa" } else if (new_units == "mb") { data[[1]]$attrs$Variable$metadata[[var_name]]$units <- "mb" } } else if (original_units == "mb") { if (new_units == 'pa') { - data[[1]]$data[ , var_index, , , , , , , ] <- - data[[1]]$data[ , var_index, , , , , , , ] * 100 + data_list[[var_index]] <- data_list[[var_index]] * 100 data[[1]]$attrs$Variable$metadata[[var_name]]$units <- "Pa" } else if (new_units == "hPa") { data[[1]]$attrs$Variable$metadata[[var_name]]$units <- "hPa" - } + } } + + # Combine list back to array + data_arr <- array(unlist(data_list), + dim = c(dim(data_list[[1]]), var = length(data_list))) + data[[1]]$data <- aperm(data_arr, match(names(dim(data[[1]]$data)), + names(dim(data_arr)))) + return(data) } diff --git a/modules/Units/R/transform_units_temperature.R b/modules/Units/R/transform_units_temperature.R index 366f0d34..985483f0 100644 --- a/modules/Units/R/transform_units_temperature.R +++ b/modules/Units/R/transform_units_temperature.R @@ -1,17 +1,22 @@ transform_units_temperature <- function(data, original_units, new_units, - var_name, var_index = 1, - var_dim = "var") { - ## TODO: Hard-coded subsetting + var_name, var_index = 1) { + + data_arr <- data[[1]]$data + data_list <- asplit(data_arr, which(names(dim(data_arr)) == "var")) if (original_units == 'c' & new_units == 'k') { - data[[1]]$data[ , var_index, , , , , , , ] <- - data[[1]]$data[ , var_index, , , , , , , ] + 273.15 - data[[1]]$attrs$Variable$metadata[[var_name]]$units <- 'K' + data_list[[var_index]] <- data_list[[var_index]] + 273.15 + data[[1]]$attrs$Variable$metadata[[var_name]]$units <- "K" } if (original_units == 'k' & new_units == 'c') { - data[[1]]$data[ , var_index, , , , , , , ] <- - data[[1]]$data[ , var_index, , , , , , , ] - 273.15 - data[[1]]$attrs$Variable$metadata[[var_name]]$units <- "C" - + data_list[[var_index]] <- data_list[[var_index]] - 273.15 + data[[1]]$attrs$Variable$metadata[[var_name]]$units <- "C" } + + # Combine list back to array + data_arr <- array(unlist(data_list), + dim = c(dim(data_list[[1]]), var = length(data_list))) + data[[1]]$data <- aperm(data_arr, match(names(dim(data[[1]]$data)), + names(dim(data_arr)))) + return(data) } -- GitLab From 33b027e219003d6b5947f6bee4a705d98d429246 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Wed, 18 Oct 2023 16:32:13 +0200 Subject: [PATCH 328/388] Change 'hur' to 'hurs' (fix typo in seasonal archive) --- conf/archive.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/archive.yml b/conf/archive.yml index 7cfacee9..d9d84edb 100644 --- a/conf/archive.yml +++ b/conf/archive.yml @@ -193,7 +193,7 @@ esarchive: name: "ECMWF CERRA" institution: "European Centre for Medium-Range Weather Forecasts" src: "recon/ecmwf/cerra/" - daily_mean: {"hur":"daily_mean/hur_f3h-r2631x1113/", "ps":"daily_mean/ps_f3h-r2631x1113/", + daily_mean: {"hurs":"daily_mean/hurs_f3h-r2631x1113/", "ps":"daily_mean/ps_f3h-r2631x1113/", "sfcWind":"daily_mean/sfcWind_f3h-r2631x1113/", "tas":"daily_mean/tas_f3h-r2631x1113/", "winddir":"daily_mean/tas_f3h-r2631x1113/"} monthly_mean: {"hurs":"monthly_mean/hurs_f3h-r2631x1113/", "ps":"monthly_mean/ps_f3h-r2631x1113/", -- GitLab From b65b31a3b9ecc728265ee50d1b9abda0cc13258b Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Thu, 19 Oct 2023 10:59:30 +0200 Subject: [PATCH 329/388] Move GRIB loading files to correct directory --- modules/Loading/R/GRIB/{GRIB => }/GrbLoad.R | 0 modules/Loading/R/GRIB/{GRIB => }/s2dv_cube.R | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename modules/Loading/R/GRIB/{GRIB => }/GrbLoad.R (100%) rename modules/Loading/R/GRIB/{GRIB => }/s2dv_cube.R (100%) diff --git a/modules/Loading/R/GRIB/GRIB/GrbLoad.R b/modules/Loading/R/GRIB/GrbLoad.R similarity index 100% rename from modules/Loading/R/GRIB/GRIB/GrbLoad.R rename to modules/Loading/R/GRIB/GrbLoad.R diff --git a/modules/Loading/R/GRIB/GRIB/s2dv_cube.R b/modules/Loading/R/GRIB/s2dv_cube.R similarity index 100% rename from modules/Loading/R/GRIB/GRIB/s2dv_cube.R rename to modules/Loading/R/GRIB/s2dv_cube.R -- GitLab From 63b2457416be7306b8239a7c4fc3f23145d4923b Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Thu, 19 Oct 2023 17:00:15 +0200 Subject: [PATCH 330/388] Remove functions that were updated in the s2dv release --- modules/Skill/R/tmp/MSE.R | 311 -------------------------- modules/Skill/R/tmp/MSSS.R | 435 ------------------------------------- modules/Skill/R/tmp/RPS.R | 270 ----------------------- modules/Skill/R/tmp/RPSS.R | 428 ------------------------------------ modules/Skill/Skill.R | 9 +- 5 files changed, 2 insertions(+), 1451 deletions(-) delete mode 100644 modules/Skill/R/tmp/MSE.R delete mode 100644 modules/Skill/R/tmp/MSSS.R delete mode 100644 modules/Skill/R/tmp/RPS.R delete mode 100644 modules/Skill/R/tmp/RPSS.R diff --git a/modules/Skill/R/tmp/MSE.R b/modules/Skill/R/tmp/MSE.R deleted file mode 100644 index 97e4e828..00000000 --- a/modules/Skill/R/tmp/MSE.R +++ /dev/null @@ -1,311 +0,0 @@ -#'Compute mean square error -#' -#'Compute the mean square error for an array of forecasts and an array of -#'observations. The MSEs are computed along time_dim, the dimension which -#'corresponds to the start date dimension. If comp_dim is given, the MSEs are -#'computed only if obs along the comp_dim dimension are complete between -#'limits[1] and limits[2], i.e. there are no NAs between limits[1] and -#'limits[2]. This option can be activated if the user wants to account only -#'for the forecasts for which the corresponding observations are available at -#'all leadtimes.\cr -#'The confidence interval is computed by the chi2 distribution.\cr -#' -#'@param exp A named numeric array of experimental data, with at least #' 'time_dim' dimension. It can also be a vector with the same length as 'obs'. -#'@param obs A named numeric array of observational data, same dimensions as -#' parameter 'exp' except along 'dat_dim' and 'memb_dim'. It can also be a -#' vector with the same length as 'exp'. -#'@param time_dim A character string indicating the name of dimension along -#' which the correlations are computed. The default value is 'sdate'. -#'@param memb_dim A character string indicating the name of the member dimension -#' to compute the ensemble mean; it should be set to NULL if the input data are -#' already the ensemble mean. The default value is NULL. -#'@param dat_dim A character string indicating the name of dataset or member -#' (nobs/nexp) dimension. The datasets of exp and obs will be paired and -#' computed MSE for each pair. The default value is NULL. -#'@param comp_dim A character string indicating the name of dimension along which -#' obs is taken into account only if it is complete. The default value -#' is NULL. -#'@param limits A vector of two integers indicating the range along comp_dim to -#' be completed. The default value is c(1, length(comp_dim dimension)). -#'@param conf A logical value indicating whether to retrieve the confidence -#' intervals or not. The default value is TRUE. -#'@param alpha A numeric indicating the significance level for the statistical -#' significance test. The default value is 0.05. -#'@param ncores An integer indicating the number of cores to use for parallel -#' computation. The default value is NULL. -#' -#'@return -#'A list containing the numeric arrays with dimension:\cr -#' c(nexp, nobs, all other dimensions of exp except time_dim).\cr -#'nexp is the number of experiment (i.e., dat_dim in exp), and nobs is the -#'number of observation (i.e., dat_dim in obs).\cr -#'\item{$mse}{ -#' The mean square error. -#'} -#'\item{$conf.lower}{ -#' The lower confidence interval. Only present if \code{conf = TRUE}. -#'} -#'\item{$conf.upper}{ -#' The upper confidence interval. Only present if \code{conf = TRUE}. -#'} -#' -#'@examples -#'# Load sample data as in Load() example: -#'example(Load) -#'clim <- Clim(sampleData$mod, sampleData$obs) -#'ano_exp <- Ano(sampleData$mod, clim$clim_exp) -#'ano_obs <- Ano(sampleData$obs, clim$clim_obs) -#'smooth_ano_exp <- Smoothing(ano_exp, runmeanlen = 12, time_dim = 'ftime') -#'smooth_ano_obs <- Smoothing(ano_obs, runmeanlen = 12, time_dim = 'ftime') -#'res <- MSE(smooth_ano_exp, smooth_ano_obs, memb_dim = 'member', -#' comp_dim = 'ftime', limits = c(7, 54)) -#' -#'# Synthetic data: -#'exp1 <- array(rnorm(120), dim = c(dat = 3, sdate = 10, ftime = 4)) -#'obs1 <- array(rnorm(80), dim = c(dat = 2, sdate = 10, ftime = 4)) -#'na <- floor(runif(10, min = 1, max = 80)) -#'obs1[na] <- NA -#'res1 <- MSE(exp1, obs1, comp_dim = 'ftime', dat_dim = 'dat') -#' -#'exp2 <- array(rnorm(20), dim = c(sdate = 5, member = 4)) -#'obs2 <- array(rnorm(10), dim = c(sdate = 5, member = 2)) -#'res2 <- MSE(exp3, obs3, memb_dim = 'member') -#' -#'@import multiApply -#'@importFrom ClimProjDiags Subset -#'@importFrom stats qchisq -#'@export -MSE <- function(exp, obs, time_dim = 'sdate', dat_dim = NULL, memb_dim = NULL, - comp_dim = NULL, limits = NULL, conf = TRUE, alpha = 0.05, ncores = NULL) { - - # Check inputs - ## exp and obs (1) - if (is.null(exp) | is.null(obs)) { - stop("Parameter 'exp' and 'obs' cannot be NULL.") - } - if (!is.numeric(exp) | !is.numeric(obs)) { - stop("Parameter 'exp' and 'obs' must be a numeric array.") - } - if (is.null(dim(exp)) & is.null(dim(obs))) { #is vector - if (length(exp) == length(obs)) { - exp <- array(exp, dim = c(length(exp))) - names(dim(exp)) <- c(time_dim) - obs <- array(obs, dim = c(length(obs))) - names(dim(obs)) <- c(time_dim) - } else { - stop(paste0("Parameter 'exp' and 'obs' must be array with as least two ", - "dimensions time_dim and dat_dim, or vector of same length.")) - } - } else if (is.null(dim(exp)) | is.null(dim(obs))) { - stop(paste0("Parameter 'exp' and 'obs' must be array with as least two ", - "dimensions time_dim and dat_dim, or vector of same length.")) - } - if(any(is.null(names(dim(exp))))| any(nchar(names(dim(exp))) == 0) | - any(is.null(names(dim(obs))))| any(nchar(names(dim(obs))) == 0)) { - stop("Parameter 'exp' and 'obs' must have dimension names.") - } - ## time_dim - if (!is.character(time_dim) | length(time_dim) > 1) { - stop("Parameter 'time_dim' must be a character string.") - } - if (!time_dim %in% names(dim(exp)) | !time_dim %in% names(dim(obs))) { - stop("Parameter 'time_dim' is not found in 'exp' or 'obs' dimension.") - } - ## memb_dim - if (!is.null(memb_dim)) { - if (!is.character(memb_dim) | length(memb_dim) > 1) { - stop("Parameter 'memb_dim' must be a character string.") - } - if (!memb_dim %in% names(dim(exp)) & !memb_dim %in% names(dim(obs))) { - stop("Parameter 'memb_dim' is not found in 'exp' dimension.") - } - } - ## dat_dim - if (!is.null(dat_dim)) { - if (!is.character(dat_dim) | length(dat_dim) > 1) { - stop("Parameter 'dat_dim' must be a character string or NULL.") - } - if (!dat_dim %in% names(dim(exp)) | !dat_dim %in% names(dim(obs))) { - stop("Parameter 'dat_dim' is not found in 'exp' or 'obs' dimension.", - "Set it as NULL if there is no dataset dimension.") - } - } - ## comp_dim - if (!is.null(comp_dim)) { - if (!is.character(comp_dim) | length(comp_dim) > 1) { - stop("Parameter 'comp_dim' must be a character string.") - } - if (!comp_dim %in% names(dim(exp)) | !comp_dim %in% names(dim(obs))) { - stop("Parameter 'comp_dim' is not found in 'exp' or 'obs' dimension.") - } - } - ## limits - if (!is.null(limits)) { - if (is.null(comp_dim)) { - stop("Paramter 'comp_dim' cannot be NULL if 'limits' is assigned.") - } - if (!is.numeric(limits) | any(limits %% 1 != 0) | any(limits < 0) | - length(limits) != 2 | any(limits > dim(exp)[comp_dim])) { - stop(paste0("Parameter 'limits' must be a vector of two positive ", - "integers smaller than the length of paramter 'comp_dim'.")) - } - } - ## conf - if (!is.logical(conf) | length(conf) > 1) { - stop("Parameter 'conf' must be one logical value.") - } - ## alpha - if (!is.numeric(alpha) | alpha < 0 | alpha > 1 | length(alpha) > 1) { - stop("Parameter 'alpha' must be a numeric number between 0 and 1.") - } - ## ncores - if (!is.null(ncores)) { - if (!is.numeric(ncores) | ncores %% 1 != 0 | ncores <= 0 | - length(ncores) > 1) { - stop("Parameter 'ncores' must be a positive integer.") - } - } - ## exp and obs (2) - name_exp <- sort(names(dim(exp))) - name_obs <- sort(names(dim(obs))) - if (!is.null(memb_dim)) { - if (memb_dim %in% name_exp) { - name_exp <- name_exp[-which(name_exp == memb_dim)] - } - if (memb_dim %in% name_obs) { - name_obs <- name_obs[-which(name_obs == memb_dim)] - } - } - if (!is.null(dat_dim)) { - name_exp <- name_exp[-which(name_exp == dat_dim)] - name_obs <- name_obs[-which(name_obs == dat_dim)] - } - if (!all(name_exp == name_obs)) { - stop("Parameter 'exp' and 'obs' must have the same dimension names.") - } - if (!all(dim(exp)[name_exp] == dim(obs)[name_obs])) { - stop(paste0("Parameter 'exp' and 'obs' must have same length of ", - "all dimensions except 'dat_dim' and 'memb_dim'.")) - } - if (dim(exp)[time_dim] < 2) { - stop("The length of time_dim must be at least 2 to compute MSE.") - } - - ############################### - ## Ensemble mean - if (!is.null(memb_dim)) { - if (memb_dim %in% names(dim(exp))) { - exp <- MeanDims(exp, memb_dim, na.rm = T) - } - if (memb_dim %in% names(dim(obs))) { - obs <- MeanDims(obs, memb_dim, na.rm = T) - } - } - - ############################### - # Sort dimension - name_exp <- names(dim(exp)) - name_obs <- names(dim(obs)) - order_obs <- match(name_exp, name_obs) - obs <- Reorder(obs, order_obs) - - ############################### - # Calculate MSE - - # Remove data along comp_dim dim if there is at least one NA between limits - if (!is.null(comp_dim)) { - if (is.null(limits)) { - limits <- c(1, dim(obs)[comp_dim]) - } - pos <- which(names(dim(obs)) == comp_dim) - obs_sub <- Subset(obs, pos, list(limits[1]:limits[2])) - outrows <- is.na(MeanDims(obs_sub, pos, na.rm = FALSE)) - outrows <- InsertDim(outrows, pos, dim(obs)[comp_dim]) - obs[which(outrows)] <- NA - } - - res <- Apply(list(exp, obs), - target_dims = list(c(time_dim, dat_dim), - c(time_dim, dat_dim)), - fun = .MSE, - time_dim = time_dim, dat_dim = dat_dim, - conf = conf, alpha = alpha, - ncores = ncores) - return(res) -} - -.MSE <- function(exp, obs, time_dim = 'sdate', dat_dim = NULL, conf = TRUE, alpha = 0.05) { - - if (is.null(dat_dim)) { - # exp: [sdate] - # obs: [sdate] - nexp <- 1 - nobs <- 1 - ini_dims <- dim(exp) - dim(exp) <- c(ini_dims, dat_dim = 1) - dim(obs) <- c(ini_dims, dat_dim = 1) - } else { - # exp: [sdate, dat_exp] - # obs: [sdate, dat_obs] - nexp <- as.numeric(dim(exp)[2]) - nobs <- as.numeric(dim(obs)[2]) - } - - dif <- array(dim = c(dim(exp)[1], nexp = nexp, nobs = nobs)) - chi <- array(dim = c(nexp = nexp, nobs = nobs)) - - if (conf) { - conflow <- alpha / 2 - confhigh <- 1 - conflow - conf.lower <- array(dim = c(nexp = nexp, nobs = nobs)) - conf.upper <- array(dim = c(nexp = nexp, nobs = nobs)) - } - - # dif - for (i in 1:nobs) { - dif[, , i] <- sapply(1:nexp, function(x) {exp[, x] - obs[, i]}) - } - - mse <- colMeans(dif^2, na.rm = TRUE) # array(dim = c(nexp, nobs)) - - if (conf) { - #count effective sample along sdate. eno: c(nexp, nobs) -# eno <- Eno(dif, time_dim) # slower than for loop below? - eno <- array(dim = c(nexp = nexp, nobs = nobs)) - for (n_obs in 1:nobs) { - for (n_exp in 1:nexp) { - eno[n_exp, n_obs] <- .Eno(dif[, n_exp, n_obs], na.action = na.pass) - } - } - - # conf.lower - chi <- sapply(1:nobs, function(i) { - qchisq(confhigh, eno[, i] - 1) - }) - conf.lower <- (eno * mse ** 2 / chi) ** 0.5 - - # conf.upper - chi <- sapply(1:nobs, function(i) { - qchisq(conflow, eno[, i] - 1) - }) - conf.upper <- (eno * mse ** 2 / chi) ** 0.5 - } - - ################################### - # Remove nexp and nobs if dat_dim = NULL - if (is.null(dat_dim)) { - dim(mse) <- NULL - if (conf) { - dim(conf.lower) <- NULL - dim(conf.upper) <- NULL - } - } - - ################################### - - res <- list(mse = mse) - if (conf) res <- c(res, list(conf.lower = conf.lower, conf.upper = conf.upper)) - - return(res) - -} diff --git a/modules/Skill/R/tmp/MSSS.R b/modules/Skill/R/tmp/MSSS.R deleted file mode 100644 index a11c50c8..00000000 --- a/modules/Skill/R/tmp/MSSS.R +++ /dev/null @@ -1,435 +0,0 @@ -#'Compute mean square error skill score -#' -#'Compute the mean square error skill score (MSSS) between an array of forecast -#''exp' and an array of observation 'obs'. The two arrays should have the same -#'dimensions except along 'dat_dim' and 'memb_dim'. The MSSSs are computed along -#''time_dim', the dimension which corresponds to the start date dimension. -#'MSSS computes the mean square error skill score of each exp in 1:nexp -#'against each obs in 1:nobs which gives nexp * nobs MSSS for each grid point -#'of the array.\cr -#'The p-value and significance test are optionally provided by an one-sided -#'Fisher test or Random Walk test.\cr -#' -#'@param exp A named numeric array of experimental data which contains at least -#' time dimension (time_dim). It can also be a vector with the same length as -#' 'obs', then the vector will automatically be 'time_dim'. -#'@param obs A named numeric array of observational data which contains at least -#' time dimension (time_dim). The dimensions should be the same as parameter -#' 'exp' except the length of 'dat_dim' and 'memb_dim' dimension. It can also -#' be a vector with the same length as 'exp', then the vector will -#' automatically be 'time_dim'. -#'@param ref A named numerical array of the reference forecast data with at -#' least time dimension, or 0 (typical climatological forecast) or 1 -#' (normalized climatological forecast). If it is an array, the dimensions must -#' be the same as 'exp' except 'memb_dim' and 'dat_dim'. If there is only one -#' reference dataset, it should not have dataset dimension. If there is -#' corresponding reference for each experiment, the dataset dimension must -#' have the same length as in 'exp'. If 'ref' is NULL, the typical -#' climatological forecast is used as reference forecast (equivalent to 0.) -#' The default value is NULL. -#'@param dat_dim A character string indicating the name of dataset (nobs/nexp) -#' dimension. The default value is NULL. -#'@param time_dim A character string indicating the name of dimension along -#' which the MSSS are computed. The default value is 'sdate'. -#'@param memb_dim A character string indicating the name of the member dimension -#' to compute the ensemble mean; it should be set to NULL if the data are -#' already the ensemble mean. The default value is NULL. -#'@param pval A logical value indicating whether to compute or not the p-value -#' of the test Ho: MSSS = 0. The default value is TRUE. -#'@param sign A logical value indicating whether to compute or not the -#' statistical significance of the test Ho: MSSS = 0. The default value is -#' FALSE. -#'@param alpha A numeric of the significance level to be used in the -#' statistical significance test. The default value is 0.05. -#'@param sig_method A character string indicating the significance method. The -#' options are "one-sided Fisher" (default) and "Random Walk". -#'@param sig_method.type A character string indicating the test type of the -#' significance method. Check \code{RandomWalkTest()} parameter -#' \code{test.type} for details if parameter "sig_method" is "Random Walk". The -#' default is NULL (since "one-sided Fisher" doesn't have different test -#' types.) -#'@param ncores An integer indicating the number of cores to use for parallel -#' computation. The default value is NULL. -#' -#'@return -#'A list containing the numeric arrays with dimension:\cr -#' c(nexp, nobs, all other dimensions of exp except time_dim).\cr -#'nexp is the number of experiment (i.e., dat_dim in exp), and nobs is the -#'number of observation (i.e., dat_dim in obs). If dat_dim is NULL, nexp and -#'nobs are omitted.\cr -#'\item{$msss}{ -#' A numerical array of the mean square error skill score. -#'} -#'\item{$p.val}{ -#' A numerical array of the p-value with the same dimensions as $msss. -#' Only present if \code{pval = TRUE}. -#'} -#'\item{sign}{ -#' A logical array of the statistical significance of the MSSS with the same -#' dimensions as $msss. Only present if \code{sign = TRUE}. -#'} -#' -#'@examples -#'# Load sample data as in Load() example: -#'example(Load) -#'clim <- Clim(sampleData$mod, sampleData$obs) -#'ano_exp <- Ano(sampleData$mod, clim$clim_exp) -#'ano_obs <- Ano(sampleData$obs, clim$clim_obs) -#'rmsss <- MSSS(ano_exp, ano_obs, dat_dim = 'dataset', memb_dim = 'member') -#' -#'# Synthetic data: -#'exp <- array(rnorm(30), dim = c(dataset = 2, time = 3, memb = 5)) -#'obs <- array(rnorm(15), dim = c(time = 3, dataset = 1)) -#'res <- MSSS(exp, obs, time_dim = 'time', dat_dim = 'dataset', memb_dim = 'memb') -#' -#'@rdname MSSS -#'@import multiApply -#'@importFrom stats pf -#'@export -MSSS <- function(exp, obs, ref = NULL, time_dim = 'sdate', dat_dim = NULL, - memb_dim = NULL, pval = TRUE, sign = FALSE, alpha = 0.05, - sig_method = 'one-sided Fisher', sig_method.type = NULL, ncores = NULL) { - - # Check inputs - ## exp, obs, and ref (1) - if (is.null(exp) | is.null(obs)) { - stop("Parameter 'exp' and 'obs' cannot be NULL.") - } - if (!is.numeric(exp) | !is.numeric(obs)) { - stop("Parameter 'exp' and 'obs' must be a numeric array.") - } - if (is.null(dim(exp)) & is.null(dim(obs))) { #is vector - if (length(exp) == length(obs)) { - exp <- array(exp, dim = c(length(exp))) - names(dim(exp)) <- c(time_dim) - obs <- array(obs, dim = c(length(obs))) - names(dim(obs)) <- c(time_dim) - } else { - stop(paste0("Parameter 'exp' and 'obs' must be array with as least two ", - "dimensions time_dim and dat_dim, or vector of same length.")) - } - } else if (is.null(dim(exp)) | is.null(dim(obs))) { - stop(paste0("Parameter 'exp' and 'obs' must be array with as least two ", - "dimensions time_dim and dat_dim, or vector of same length.")) - } - if (any(is.null(names(dim(exp))))| any(nchar(names(dim(exp))) == 0) | - any(is.null(names(dim(obs))))| any(nchar(names(dim(obs))) == 0)) { - stop("Parameter 'exp' and 'obs' must have dimension names.") - } - if (!is.null(ref)) { - if (!is.numeric(ref)) { - stop("Parameter 'ref' must be numeric.") - } - if (is.array(ref)) { - if (any(is.null(names(dim(ref))))| any(nchar(names(dim(ref))) == 0)) { - stop("Parameter 'ref' must have dimension names.") - } - } else if (length(ref) != 1 | any(!ref %in% c(0, 1))) { - stop("Parameter 'ref' must be a numeric array or number 0 or 1.") - } - } else { - ref <- 0 - } - if (!is.array(ref)) { # 0 or 1 - ref <- array(data = ref, dim = dim(exp)) - } - - ## time_dim - if (!is.character(time_dim) | length(time_dim) > 1) { - stop("Parameter 'time_dim' must be a character string.") - } - if (!time_dim %in% names(dim(exp)) | !time_dim %in% names(dim(obs))) { - stop("Parameter 'time_dim' is not found in 'exp' or 'obs' dimension.") - } - ## dat_dim - if (!is.null(dat_dim)) { - if (!is.character(dat_dim) | length(dat_dim) > 1) { - stop("Parameter 'dat_dim' must be a character string or NULL.") - } - if (!dat_dim %in% names(dim(exp)) | !dat_dim %in% names(dim(obs))) { - stop("Parameter 'dat_dim' is not found in 'exp' or 'obs' dimension.", - " Set it as NULL if there is no dataset dimension.") - } - } - ## memb_dim - if (!is.null(memb_dim)) { - if (!is.character(memb_dim) | length(memb_dim) > 1) { - stop("Parameter 'memb_dim' must be a character string.") - } - if (!memb_dim %in% names(dim(exp))) { - stop("Parameter 'memb_dim' is not found in 'exp' dimension.") - } - } - ## pval - if (!is.logical(pval) | length(pval) > 1) { - stop("Parameter 'pval' must be one logical value.") - } - ## sign - if (!is.logical(sign) | length(sign) > 1) { - stop("Parameter 'sign' must be one logical value.") - } - ## alpha - if (!is.numeric(alpha) | length(alpha) > 1) { - stop("Parameter 'alpha' must be one numeric value.") - } - ## sig_method - if (length(sig_method) != 1 | !any(sig_method %in% c('one-sided Fisher', 'Random Walk'))) { - stop("Parameter 'sig_method' must be one of 'one-sided Fisher' or 'Random Walk'.") - } - ## sig_method.type - if (sig_method == 'Random Walk') { - if (is.null(sig_method.type)) { - .warning("Parameter 'sig_method.type' must be specified if 'sig_method' is ", - "Random Walk. Assign it as 'two.sided'.") - sig_method.type <- "two.sided" - } - if (!any(sig_method.type %in% c('two.sided.approx', 'two.sided', 'greater', 'less'))) { - stop("Parameter 'sig_method.type' must be a method accepted by RandomWalkTest() parameter 'test.type'.") - } - if (sig_method.type == 'two.sided.approx' & pval == T) { - .warning("p-value cannot be calculated by Random Walk 'two.sided.approx' method.") - pval <- FALSE - if (alpha != 0.05) { - .warning("DelSole and Tippett (2016) aproximation is valid for alpha ", - "= 0.05 only. Returning the significance at the 0.05 significance level.") - alpha <- 0.05 - } - } - } - ## ncores - if (!is.null(ncores)) { - if (!is.numeric(ncores) | ncores %% 1 != 0 | ncores <= 0 | length(ncores) > 1) { - stop("Parameter 'ncores' must be a positive integer.") - } - } - ## exp, obs, and ref (2) - name_exp <- sort(names(dim(exp))) - name_obs <- sort(names(dim(obs))) - if (!is.null(memb_dim)) { - if (memb_dim %in% name_exp) { - name_exp <- name_exp[-which(name_exp == memb_dim)] - } - if (memb_dim %in% name_obs) { - name_obs <- name_obs[-which(name_obs == memb_dim)] - } - } - if (!is.null(dat_dim)) { - name_exp <- name_exp[-which(name_exp == dat_dim)] - name_obs <- name_obs[-which(name_obs == dat_dim)] - } - if (!all(name_exp == name_obs)) { - stop("Parameter 'exp' and 'obs' must have the same dimension names.") - } - if (!all(dim(exp)[name_exp] == dim(obs)[name_obs])) { - stop(paste0("Parameter 'exp' and 'obs' must have same length of ", - "all dimensions except 'dat_dim' and 'memb_dim'.")) - } - - name_ref <- sort(names(dim(ref))) - if (!is.null(memb_dim) && memb_dim %in% name_ref) { - name_ref <- name_ref[-which(name_ref == memb_dim)] - } - if (!is.null(dat_dim)) { - if (dat_dim %in% name_ref) { - if (!identical(dim(exp)[dat_dim], dim(ref)[dat_dim])) { - stop(paste0("If parameter 'ref' has dataset dimension, it must be ", - "equal to dataset dimension of 'exp'.")) - } - name_ref <- name_ref[-which(name_ref == dat_dim)] - } - } - if (!identical(length(name_exp), length(name_ref)) | - !identical(dim(exp)[name_exp], dim(ref)[name_ref])) { - stop(paste0("Parameter 'exp' and 'ref' must have the same length of ", - "all dimensions except 'memb_dim' and 'dat_dim' if there is ", - "only one reference dataset.")) - } - - if (dim(exp)[time_dim] <= 2) { - stop("The length of time_dim must be more than 2 to compute MSSS.") - } - - ############################### - # # Sort dimension - # name_exp <- names(dim(exp)) - # name_obs <- names(dim(obs)) - # order_obs <- match(name_exp, name_obs) - # obs <- Reorder(obs, order_obs) - - ############################### - ## Ensemble mean - if (!is.null(memb_dim)) { - if (memb_dim %in% names(dim(exp))) { - exp <- MeanDims(exp, memb_dim, na.rm = T) - } - if (memb_dim %in% names(dim(obs))) { - obs <- MeanDims(obs, memb_dim, na.rm = T) - } - if (memb_dim %in% names(dim(ref))) { - ref <- MeanDims(ref, memb_dim, na.rm = T) - } - } - - ############################### - # Calculate MSSS - - data <- list(exp = exp, obs = obs, ref = ref) - if (!is.null(dat_dim)) { - if (dat_dim %in% names(dim(ref))) { - target_dims <- list(exp = c(time_dim, dat_dim), - obs = c(time_dim, dat_dim), - ref = c(time_dim, dat_dim)) - } else { - target_dims <- list(exp = c(time_dim, dat_dim), - obs = c(time_dim, dat_dim), - ref = c(time_dim)) - } - } else { - target_dims <- list(exp = time_dim, obs = time_dim, ref = time_dim) - } - - res <- Apply(data, - target_dims = target_dims, - fun = .MSSS, - time_dim = time_dim, dat_dim = dat_dim, - pval = pval, sign = sign, alpha = alpha, - sig_method = sig_method, sig_method.type = sig_method.type, - ncores = ncores) - - return(res) -} - -.MSSS <- function(exp, obs, ref = NULL, time_dim = 'sdate', dat_dim = NULL, pval = TRUE, - sign = FALSE, alpha = 0.05, sig_method = 'one-sided Fisher', - sig_method.type = NULL) { - # exp: [sdate, (dat)] - # obs: [sdate, (dat)] - # ref: [sdate, (dat)] or NULL - - if (is.null(ref)) { - ref <- array(data = 0, dim = dim(obs)) - } else if (identical(ref, 0) | identical(ref, 1)) { - ref <- array(ref, dim = dim(exp)) - } - - if (is.null(dat_dim)) { - # exp: [sdate] - # obs: [sdate] - nexp <- 1 - nobs <- 1 - nref <- 1 - # Add dat dim back temporarily - dim(exp) <- c(dim(exp), dat = 1) - dim(obs) <- c(dim(obs), dat = 1) - dim(ref) <- c(dim(ref), dat = 1) - - } else { - # exp: [sdate, dat_exp] - # obs: [sdate, dat_obs] - nexp <- as.numeric(dim(exp)[2]) - nobs <- as.numeric(dim(obs)[2]) - if (dat_dim %in% names(dim(ref))) { - nref <- as.numeric(dim(ref)[2]) - } else { - dim(ref) <- c(dim(ref), dat = 1) - nref <- 1 - } - } - - nsdate <- as.numeric(dim(exp)[1]) - - # MSE of forecast - dif1 <- array(dim = c(nsdate, nexp, nobs)) - names(dim(dif1)) <- c(time_dim, 'nexp', 'nobs') - - for (i in 1:nobs) { - dif1[, , i] <- sapply(1:nexp, function(x) {exp[, x] - obs[, i]}) - } - - mse_exp <- colMeans(dif1^2, na.rm = TRUE) # [nexp, nobs] - - # MSE of reference - dif2 <- array(dim = c(nsdate, nref, nobs)) - names(dim(dif2)) <- c(time_dim, 'nexp', 'nobs') - for (i in 1:nobs) { - dif2[, , i] <- sapply(1:nref, function(x) {ref[, x] - obs[, i]}) - } - mse_ref <- colMeans(dif2^2, na.rm = TRUE) # [nref, nobs] - if (nexp != nref) { - # expand mse_ref to nexp (nref is 1) - mse_ref <- array(mse_ref, dim = c(nobs = nobs, nexp = nexp)) - mse_ref <- Reorder(mse_ref, c(2, 1)) - } - - msss <- 1 - mse_exp / mse_ref - - ################################################# - - if (sig_method == 'one-sided Fisher') { - p_val <- array(dim = c(nexp = nexp, nobs = nobs)) - ## pval and sign - if (pval || sign) { - eno1 <- Eno(dif1, time_dim) - if (is.null(ref)) { - eno2 <- Eno(obs, time_dim) - eno2 <- array(eno2, dim = c(nobs = nobs, nexp = nexp)) - eno2 <- Reorder(eno2, c(2, 1)) - } else { - eno2 <- Eno(dif2, time_dim) - if (nref != nexp) { - eno2 <- array(eno2, dim = c(nobs = nobs, nexp = nexp)) - eno2 <- Reorder(eno2, c(2, 1)) - } - } - - F.stat <- (eno2 * mse_ref^2 / (eno2 - 1)) / ((eno1 * mse_exp^2 / (eno1- 1))) - tmp <- !is.na(eno1) & !is.na(eno2) & eno1 > 2 & eno2 > 2 - p_val <- 1 - pf(F.stat, eno1 - 1, eno2 - 1) - if (sign) signif <- p_val <= alpha - # If there isn't enough valid data, return NA - p_val[which(!tmp)] <- NA - if (sign) signif[which(!tmp)] <- NA - - # change not enough valid data msss to NA - msss[which(!tmp)] <- NA - } - - } else if (sig_method == "Random Walk") { - - if (sign) signif <- array(dim = c(nexp = nexp, nobs = nobs)) - if (pval) p_val <- array(dim = c(nexp = nexp, nobs = nobs)) - - for (i in 1:nexp) { - for (j in 1:nobs) { - error_exp <- array(data = abs(exp[, i] - obs[, j]), dim = c(time = nsdate)) - if (nref == nexp) { - error_ref <- array(data = abs(ref[, i] - obs[, j]), dim = c(time = nsdate)) - } else { - # nref = 1 - error_ref <- array(data = abs(ref - obs[, j]), dim = c(time = nsdate)) - } - aux <- .RandomWalkTest(skill_A = error_exp, skill_B = error_ref, - test.type = sig_method.type, - pval = pval, sign = sign, alpha = alpha) - if (sign) signif[i, j] <- aux$sign - if (pval) p_val[i, j] <- aux$p.val - } - } - } - - ################################### - # Remove extra dimensions if dat_dim = NULL - if (is.null(dat_dim)) { - dim(msss) <- NULL - if (pval) dim(p_val) <- NULL - if (sign) dim(signif) <- NULL - } - ################################### - - # output - res <- list(msss = msss) - if (pval) res <- c(res, list(p.val = p_val)) - if (sign) res <- c(res, list(sign = signif)) - - return(res) -} diff --git a/modules/Skill/R/tmp/RPS.R b/modules/Skill/R/tmp/RPS.R deleted file mode 100644 index 75619b63..00000000 --- a/modules/Skill/R/tmp/RPS.R +++ /dev/null @@ -1,270 +0,0 @@ -#'Compute the Ranked Probability Score -#' -#'The Ranked Probability Score (RPS; Wilks, 2011) is defined as the sum of the -#'squared differences between the cumulative forecast probabilities (computed -#'from the ensemble members) and the observations (defined as 0% if the category -#'did not happen and 100% if it happened). It can be used to evaluate the skill -#'of multi-categorical probabilistic forecasts. The RPS ranges between 0 -#'(perfect forecast) and n-1 (worst possible forecast), where n is the number of -#'categories. In the case of a forecast divided into two categories (the lowest -#'number of categories that a probabilistic forecast can have), the RPS -#'corresponds to the Brier Score (BS; Wilks, 2011), therefore, ranges between 0 -#'and 1. If there is more than one dataset, RPS will be computed for each pair -#'of exp and obs data. -#' -#'@param exp A named numerical array of the forecast with at least time and -#' member dimension. -#'@param obs A named numerical array of the observation with at least time -#' dimension. The dimensions must be the same as 'exp' except 'memb_dim' and -#' 'dat_dim'. -#'@param time_dim A character string indicating the name of the time dimension. -#' The default value is 'sdate'. -#'@param dat_dim A character string indicating the name of dataset dimension. -#' The length of this dimension can be different between 'exp' and 'obs'. -#' The default value is NULL. -#'@param memb_dim A character string indicating the name of the member dimension -#' to compute the probabilities of the forecast. The default value is 'member'. -#'@param prob_thresholds A numeric vector of the relative thresholds (from 0 to -#' 1) between the categories. The default value is c(1/3, 2/3), which -#' corresponds to tercile equiprobable categories. -#'@param indices_for_clim A vector of the indices to be taken along 'time_dim' -#' for computing the thresholds between the probabilistic categories. If NULL, -#' the whole period is used. The default value is NULL. -#'@param Fair A logical indicating whether to compute the FairRPS (the -#' potential RPS that the forecast would have with an infinite ensemble size). -#' The default value is FALSE. -#'@param weights A named numerical array of the weights for 'exp'. If 'dat_dim' -#' is NULL, the dimension should include 'memb_dim' and 'time_dim'. Else, the -#' dimension should also include 'dat_dim'. The default value is NULL. The -#' ensemble should have at least 70 members or span at least 10 time steps and -#' have more than 45 members if consistency between the weighted and unweighted -#' methodologies is desired. -#'@param cross.val A logical indicating whether to compute the thresholds between -#' probabilistic categories in cross-validation. -#' The default value is FALSE. -#'@param ncores An integer indicating the number of cores to use for parallel -#' computation. The default value is NULL. -#' -#'@return -#'A numerical array of RPS with dimensions c(nexp, nobs, the rest dimensions of -#''exp' except 'time_dim' and 'memb_dim' dimensions). nexp is the number of -#'experiment (i.e., dat_dim in exp), and nobs is the number of observation -#'(i.e., dat_dim in obs). If dat_dim is NULL, nexp and nobs are omitted. -#' -#'@references -#'Wilks, 2011; https://doi.org/10.1016/B978-0-12-385022-5.00008-7 -#' -#'@examples -#'exp <- array(rnorm(1000), dim = c(lat = 3, lon = 2, member = 10, sdate = 50)) -#'obs <- array(rnorm(1000), dim = c(lat = 3, lon = 2, sdate = 50)) -#'res <- RPS(exp = exp, obs = obs) -#' -#'@import multiApply -#'@importFrom easyVerification convert2prob -#'@export -RPS <- function(exp, obs, time_dim = 'sdate', memb_dim = 'member', dat_dim = NULL, - prob_thresholds = c(1/3, 2/3), indices_for_clim = NULL, Fair = FALSE, - weights = NULL, cross.val = FALSE, ncores = NULL) { - - # Check inputs - ## exp and obs (1) - if (!is.array(exp) | !is.numeric(exp)) - stop('Parameter "exp" must be a numeric array.') - if (!is.array(obs) | !is.numeric(obs)) - stop('Parameter "obs" must be a numeric array.') - if(any(is.null(names(dim(exp))))| any(nchar(names(dim(exp))) == 0) | - any(is.null(names(dim(obs))))| any(nchar(names(dim(obs))) == 0)) { - stop("Parameter 'exp' and 'obs' must have dimension names.") - } - ## time_dim - if (!is.character(time_dim) | length(time_dim) != 1) - stop('Parameter "time_dim" must be a character string.') - if (!time_dim %in% names(dim(exp)) | !time_dim %in% names(dim(obs))) { - stop("Parameter 'time_dim' is not found in 'exp' or 'obs' dimension.") - } - ## memb_dim - if (!is.character(memb_dim) | length(memb_dim) > 1) { - stop("Parameter 'memb_dim' must be a character string.") - } - if (!memb_dim %in% names(dim(exp))) { - stop("Parameter 'memb_dim' is not found in 'exp' dimension.") - } - ## dat_dim - if (!is.null(dat_dim)) { - if (!is.character(dat_dim) | length(dat_dim) > 1) { - stop("Parameter 'dat_dim' must be a character string.") - } - if (!dat_dim %in% names(dim(exp)) | !dat_dim %in% names(dim(obs))) { - stop("Parameter 'dat_dim' is not found in 'exp' or 'obs' dimension.", - " Set it as NULL if there is no dataset dimension.") - } - } - ## exp and obs (2) - name_exp <- sort(names(dim(exp))) - name_obs <- sort(names(dim(obs))) - name_exp <- name_exp[-which(name_exp == memb_dim)] - if (memb_dim %in% name_obs) { - name_obs <- name_obs[-which(name_obs == memb_dim)] - } - if (!is.null(dat_dim)) { - name_exp <- name_exp[-which(name_exp == dat_dim)] - name_obs <- name_obs[-which(name_obs == dat_dim)] - } - if (!identical(length(name_exp), length(name_obs)) | - !identical(dim(exp)[name_exp], dim(obs)[name_obs])) { - stop(paste0("Parameter 'exp' and 'obs' must have same length of ", - "all dimensions except 'memb_dim' and 'dat_dim'.")) - } - ## prob_thresholds - if (!is.numeric(prob_thresholds) | !is.vector(prob_thresholds) | - any(prob_thresholds <= 0) | any(prob_thresholds >= 1)) { - stop("Parameter 'prob_thresholds' must be a numeric vector between 0 and 1.") - } - ## indices_for_clim - if (is.null(indices_for_clim)) { - indices_for_clim <- 1:dim(obs)[time_dim] - } else { - if (!is.numeric(indices_for_clim) | !is.vector(indices_for_clim)) { - stop("Parameter 'indices_for_clim' must be NULL or a numeric vector.") - } else if (length(indices_for_clim) > dim(obs)[time_dim] | - max(indices_for_clim) > dim(obs)[time_dim] | - any(indices_for_clim) < 1) { - stop("Parameter 'indices_for_clim' should be the indices of 'time_dim'.") - } - } - ## Fair - if (!is.logical(Fair) | length(Fair) > 1) { - stop("Parameter 'Fair' must be either TRUE or FALSE.") - } - ## cross.val - if (!is.logical(cross.val) | length(cross.val) > 1) { - stop("Parameter 'cross.val' must be either TRUE or FALSE.") - } - ## weights - if (!is.null(weights)) { - if (!is.array(weights) | !is.numeric(weights)) - stop("Parameter 'weights' must be a named numeric array.") - if (is.null(dat_dim)) { - if (length(dim(weights)) != 2 | any(!names(dim(weights)) %in% c(memb_dim, time_dim))) - stop("Parameter 'weights' must have two dimensions with the names of 'memb_dim' and 'time_dim'.") - if (dim(weights)[memb_dim] != dim(exp)[memb_dim] | - dim(weights)[time_dim] != dim(exp)[time_dim]) { - stop(paste0("Parameter 'weights' must have the same dimension lengths ", - "as 'memb_dim' and 'time_dim' in 'exp'.")) - } - weights <- Reorder(weights, c(time_dim, memb_dim)) - - } else { - if (length(dim(weights)) != 3 | any(!names(dim(weights)) %in% c(memb_dim, time_dim, dat_dim))) - stop("Parameter 'weights' must have three dimensions with the names of 'memb_dim', 'time_dim' and 'dat_dim'.") - if (dim(weights)[memb_dim] != dim(exp)[memb_dim] | - dim(weights)[time_dim] != dim(exp)[time_dim] | - dim(weights)[dat_dim] != dim(exp)[dat_dim]) { - stop(paste0("Parameter 'weights' must have the same dimension lengths ", - "as 'memb_dim', 'time_dim' and 'dat_dim' in 'exp'.")) - } - weights <- Reorder(weights, c(time_dim, memb_dim, dat_dim)) - - } - } - ## ncores - if (!is.null(ncores)) { - if (!is.numeric(ncores) | ncores %% 1 != 0 | ncores <= 0 | - length(ncores) > 1) { - stop("Parameter 'ncores' must be either NULL or a positive integer.") - } - } - - ############################### - - # Compute RPS - if (!memb_dim %in% names(dim(obs))) { - target_dims_obs <- c(time_dim, dat_dim) - } else { - target_dims_obs <- c(time_dim, memb_dim, dat_dim) - } - rps <- Apply(data = list(exp = exp, obs = obs), - target_dims = list(exp = c(time_dim, memb_dim, dat_dim), - obs = target_dims_obs), - fun = .RPS, - dat_dim = dat_dim, time_dim = time_dim, - memb_dim = memb_dim, - prob_thresholds = prob_thresholds, - indices_for_clim = indices_for_clim, Fair = Fair, - weights = weights, cross.val = cross.val, ncores = ncores)$output1 - - # Return only the mean RPS - rps <- MeanDims(rps, time_dim, na.rm = FALSE) - - return(rps) -} - - -.RPS <- function(exp, obs, time_dim = 'sdate', memb_dim = 'member', dat_dim = NULL, - prob_thresholds = c(1/3, 2/3), indices_for_clim = NULL, Fair = FALSE, weights = NULL, - cross.val = FALSE) { - - # exp: [sdate, memb, (dat)] - # obs: [sdate, (memb), (dat)] - # weights: NULL or same as exp - - # Adjust dimensions to be [sdate, memb, dat] for both exp and obs - if (!memb_dim %in% names(dim(obs))) obs <- InsertDim(obs, posdim = 2, lendim = 1, name = memb_dim) - - if (is.null(dat_dim)) { - nexp <- 1 - nobs <- 1 - dim(exp) <- c(dim(exp), nexp = nexp) - dim(obs) <- c(dim(obs), nobs = nobs) - if (!is.null(weights)) dim(weights) <- c(dim(weights), nexp = nexp) - } else { - nexp <- as.numeric(dim(exp)[dat_dim]) - nobs <- as.numeric(dim(obs)[dat_dim]) - } - - rps <- array(dim = c(dim(exp)[time_dim], nexp = nexp, nobs = nobs)) - - for (i in 1:nexp) { - for (j in 1:nobs) { - exp_data <- exp[ , , i] - obs_data <- obs[ , , j] - - if (is.null(dim(exp_data))) dim(exp_data) <- c(dim(exp)[1:2]) - if (is.null(dim(obs_data))) dim(obs_data) <- c(dim(obs)[1:2]) - - if (!is.null(weights)) { - weights_data <- weights[ , , i] - if (is.null(dim(weights_data))) dim(weights_data) <- c(dim(weights)[1:2]) - } else { - weights_data <- weights - } - - exp_probs <- .GetProbs(data = exp_data, indices_for_quantiles = indices_for_clim, - prob_thresholds = prob_thresholds, weights = weights_data, cross.val = cross.val) - # exp_probs: [bin, sdate] - obs_probs <- .GetProbs(data = obs_data, indices_for_quantiles = indices_for_clim, - prob_thresholds = prob_thresholds, weights = NULL, cross.val = cross.val) - # obs_probs: [bin, sdate] - probs_exp_cumsum <- apply(exp_probs, 2, cumsum) - probs_obs_cumsum <- apply(obs_probs, 2, cumsum) - - # rps: [sdate, nexp, nobs] - rps[ , i, j] <- colSums((probs_exp_cumsum - probs_obs_cumsum)^2) - if (Fair) { # FairRPS - ## adjustment <- rowSums(-1 * (1/R - 1/R.new) * ens.cum * (R - ens.cum)/R/(R - 1)) [formula taken from SpecsVerification::EnsRps] - R <- dim(exp)[2] #memb - R_new <- Inf - adjustment <- (-1) / (R - 1) * probs_exp_cumsum * (1 - probs_exp_cumsum) - adjustment <- colSums(adjustment) - rps[ , i, j] <- rps[ , i, j] + adjustment - } - } - } - - if (is.null(dat_dim)) { - dim(rps) <- dim(exp)[time_dim] - } - - return(rps) -} - diff --git a/modules/Skill/R/tmp/RPSS.R b/modules/Skill/R/tmp/RPSS.R deleted file mode 100644 index ab433e91..00000000 --- a/modules/Skill/R/tmp/RPSS.R +++ /dev/null @@ -1,428 +0,0 @@ -#'Compute the Ranked Probability Skill Score -#' -#'The Ranked Probability Skill Score (RPSS; Wilks, 2011) is the skill score -#'based on the Ranked Probability Score (RPS; Wilks, 2011). It can be used to -#'assess whether a forecast presents an improvement or worsening with respect to -#'a reference forecast. The RPSS ranges between minus infinite and 1. If the -#'RPSS is positive, it indicates that the forecast has higher skill than the -#'reference forecast, while a negative value means that it has a lower skill. -#'Examples of reference forecasts are the climatological forecast (same -#'probabilities for all categories for all time steps), persistence, a previous -#'model version, and another model. It is computed as -#'\code{RPSS = 1 - RPS_exp / RPS_ref}. The statistical significance is obtained -#'based on a Random Walk test at the 95% confidence level (DelSole and Tippett, -#'2016). If there is more than one dataset, RPS will be computed for each pair -#'of exp and obs data. -#' -#'@param exp A named numerical array of the forecast with at least time and -#' member dimension. -#'@param obs A named numerical array of the observation with at least time -#' dimension. The dimensions must be the same as 'exp' except 'memb_dim' and -#' 'dat_dim'. -#'@param ref A named numerical array of the reference forecast data with at -#' least time and member dimension. The dimensions must be the same as 'exp' -#' except 'memb_dim' and 'dat_dim'. If there is only one reference dataset, -#' it should not have dataset dimension. If there is corresponding reference -#' for each experiement, the dataset dimension must have the same length as in -#' 'exp'. If 'ref' is NULL, the climatological forecast is used as reference -#' forecast. The default value is NULL. -#'@param time_dim A character string indicating the name of the time dimension. -#' The default value is 'sdate'. -#'@param memb_dim A character string indicating the name of the member dimension -#' to compute the probabilities of the forecast and the reference forecast. The -#' default value is 'member'. -#'@param dat_dim A character string indicating the name of dataset dimension. -#' The length of this dimension can be different between 'exp' and 'obs'. -#' The default value is NULL. -#'@param prob_thresholds A numeric vector of the relative thresholds (from 0 to -#' 1) between the categories. The default value is c(1/3, 2/3), which -#' corresponds to tercile equiprobable categories. -#'@param indices_for_clim A vector of the indices to be taken along 'time_dim' -#' for computing the thresholds between the probabilistic categories. If NULL, -#' the whole period is used. The default value is NULL. -#'@param Fair A logical indicating whether to compute the FairRPSS (the -#' potential RPSS that the forecast would have with an infinite ensemble size). -#' The default value is FALSE. -#'@param weights Deprecated and will be removed in the next release. Please use -#' 'weights_exp' and 'weights_ref' instead. -#'@param weights_exp A named numerical array of the forecast ensemble weights. -#' The dimension should include 'memb_dim', 'time_dim' and 'dat_dim' if there -#' are multiple datasets. All dimension lengths must be equal to 'exp' -#' dimension lengths. The default value is NULL, which means no weighting is -#' applied. The ensemble should have at least 70 members or span at least 10 -#' time steps and have more than 45 members if consistency between the weighted -#' and unweighted methodologies is desired. -#'@param weights_ref Same as 'weights_exp' but for the reference forecast. -#'@param cross.val A logical indicating whether to compute the thresholds between -#' probabilistics categories in cross-validation. -#' The default value is FALSE. -#'@param ncores An integer indicating the number of cores to use for parallel -#' computation. The default value is NULL. -#' -#'@return -#'\item{$rpss}{ -#' A numerical array of RPSS with dimensions c(nexp, nobs, the rest dimensions -#' of 'exp' except 'time_dim' and 'memb_dim' dimensions). nexp is the number of -#' experiment (i.e., dat_dim in exp), and nobs is the number of observation -#' i.e., dat_dim in obs). If dat_dim is NULL, nexp and nobs are omitted. -#'} -#'\item{$sign}{ -#' A logical array of the statistical significance of the RPSS with the same -#' dimensions as $rpss. -#'} -#' -#'@references -#'Wilks, 2011; https://doi.org/10.1016/B978-0-12-385022-5.00008-7 -#'DelSole and Tippett, 2016; https://doi.org/10.1175/MWR-D-15-0218.1 -#' -#'@examples -#'set.seed(1) -#'exp <- array(rnorm(3000), dim = c(lat = 3, lon = 2, member = 10, sdate = 50)) -#'set.seed(2) -#'obs <- array(rnorm(300), dim = c(lat = 3, lon = 2, sdate = 50)) -#'set.seed(3) -#'ref <- array(rnorm(3000), dim = c(lat = 3, lon = 2, member = 10, sdate = 50)) -#'weights <- sapply(1:dim(exp)['sdate'], function(i) { -#' n <- abs(rnorm(10)) -#' n/sum(n) -#' }) -#'dim(weights) <- c(member = 10, sdate = 50) -#'res <- RPSS(exp = exp, obs = obs) ## climatology as reference forecast -#'res <- RPSS(exp = exp, obs = obs, ref = ref) ## ref as reference forecast -#'res <- RPSS(exp = exp, obs = obs, ref = ref, weights_exp = weights, weights_ref = weights) -#'@import multiApply -#'@export -RPSS <- function(exp, obs, ref = NULL, time_dim = 'sdate', memb_dim = 'member', - dat_dim = NULL, prob_thresholds = c(1/3, 2/3), indices_for_clim = NULL, - Fair = FALSE, weights = NULL, weights_exp = NULL, weights_ref = NULL, - cross.val = FALSE, ncores = NULL) { - - # Check inputs - ## exp, obs, and ref (1) - if (!is.array(exp) | !is.numeric(exp)) { - stop("Parameter 'exp' must be a numeric array.") - } - if (!is.array(obs) | !is.numeric(obs)) { - stop("Parameter 'obs' must be a numeric array.") - } - if (any(is.null(names(dim(exp))))| any(nchar(names(dim(exp))) == 0) | - any(is.null(names(dim(obs))))| any(nchar(names(dim(obs))) == 0)) { - stop("Parameter 'exp' and 'obs' must have dimension names.") - } - if (!is.null(ref)) { - if (!is.array(ref) | !is.numeric(ref)) - stop("Parameter 'ref' must be a numeric array.") - if (any(is.null(names(dim(ref))))| any(nchar(names(dim(ref))) == 0)) { - stop("Parameter 'ref' must have dimension names.") - } - } - ## time_dim - if (!is.character(time_dim) | length(time_dim) != 1) { - stop("Parameter 'time_dim' must be a character string.") - } - if (!time_dim %in% names(dim(exp)) | !time_dim %in% names(dim(obs))) { - stop("Parameter 'time_dim' is not found in 'exp' or 'obs' dimension.") - } - if (!is.null(ref) & !time_dim %in% names(dim(ref))) { - stop("Parameter 'time_dim' is not found in 'ref' dimension.") - } - ## memb_dim - if (!is.character(memb_dim) | length(memb_dim) > 1) { - stop("Parameter 'memb_dim' must be a character string.") - } - if (!memb_dim %in% names(dim(exp))) { - stop("Parameter 'memb_dim' is not found in 'exp' dimension.") - } - if (!is.null(ref) & !memb_dim %in% names(dim(ref))) { - stop("Parameter 'memb_dim' is not found in 'ref' dimension.") - } - ## dat_dim - if (!is.null(dat_dim)) { - if (!is.character(dat_dim) | length(dat_dim) > 1) { - stop("Parameter 'dat_dim' must be a character string.") - } - if (!dat_dim %in% names(dim(exp)) | !dat_dim %in% names(dim(obs))) { - stop("Parameter 'dat_dim' is not found in 'exp' or 'obs' dimension.", - " Set it as NULL if there is no dataset dimension.") - } - } - ## exp, obs, and ref (2) - name_exp <- sort(names(dim(exp))) - name_obs <- sort(names(dim(obs))) - name_exp <- name_exp[-which(name_exp == memb_dim)] - if (memb_dim %in% name_obs) { - name_obs <- name_obs[-which(name_obs == memb_dim)] - } - if (!is.null(dat_dim)) { - name_exp <- name_exp[-which(name_exp == dat_dim)] - name_obs <- name_obs[-which(name_obs == dat_dim)] - } - if (!identical(length(name_exp), length(name_obs)) | - !identical(dim(exp)[name_exp], dim(obs)[name_obs])) { - stop(paste0("Parameter 'exp' and 'obs' must have same length of ", - "all dimensions except 'memb_dim' and 'dat_dim'.")) - } - if (!is.null(ref)) { - name_ref <- sort(names(dim(ref))) - name_ref <- name_ref[-which(name_ref == memb_dim)] - if (!is.null(dat_dim)) { - if (dat_dim %in% name_ref) { - if (!identical(dim(exp)[dat_dim], dim(ref)[dat_dim])) { - stop(paste0("If parameter 'ref' has dataset dimension, it must be", - " equal to dataset dimension of 'exp'.")) - } - name_ref <- name_ref[-which(name_ref == dat_dim)] - } - } - if (!identical(length(name_exp), length(name_ref)) | - !identical(dim(exp)[name_exp], dim(ref)[name_ref])) { - stop(paste0("Parameter 'exp' and 'ref' must have the same length of ", - "all dimensions except 'memb_dim' and 'dat_dim' if there is ", - "only one reference dataset.")) - } - } - ## prob_thresholds - if (!is.numeric(prob_thresholds) | !is.vector(prob_thresholds) | - any(prob_thresholds <= 0) | any(prob_thresholds >= 1)) { - stop("Parameter 'prob_thresholds' must be a numeric vector between 0 and 1.") - } - ## indices_for_clim - if (is.null(indices_for_clim)) { - indices_for_clim <- 1:dim(obs)[time_dim] - } else { - if (!is.numeric(indices_for_clim) | !is.vector(indices_for_clim)) { - stop("Parameter 'indices_for_clim' must be NULL or a numeric vector.") - } else if (length(indices_for_clim) > dim(obs)[time_dim] | - max(indices_for_clim) > dim(obs)[time_dim] | - any(indices_for_clim) < 1) { - stop("Parameter 'indices_for_clim' should be the indices of 'time_dim'.") - } - } - ## Fair - if (!is.logical(Fair) | length(Fair) > 1) { - stop("Parameter 'Fair' must be either TRUE or FALSE.") - } - ## cross.val - if (!is.logical(cross.val) | length(cross.val) > 1) { - stop("Parameter 'cross.val' must be either TRUE or FALSE.") - } - ## weights - if (!is.null(weights)) { - .warning(paste0("Parameter 'weights' is deprecated and will be removed in the next release. ", - "Use 'weights_exp' and 'weights_ref' instead. The value will be assigned ", - "to these two parameters now if they are NULL."), tag = '! Deprecation: ') - if (is.null(weights_exp)) weights_exp <- weights - if (is.null(weights_ref)) weights_ref <- weights - } - ## weights_exp - if (!is.null(weights_exp)) { - if (!is.array(weights_exp) | !is.numeric(weights_exp)) - stop("Parameter 'weights_exp' must be a named numeric array.") - - if (is.null(dat_dim)) { - if (length(dim(weights_exp)) != 2 | any(!names(dim(weights_exp)) %in% c(memb_dim, time_dim))) - stop("Parameter 'weights_exp' must have two dimensions with the names of 'memb_dim' and 'time_dim'.") - if (dim(weights_exp)[memb_dim] != dim(exp)[memb_dim] | - dim(weights_exp)[time_dim] != dim(exp)[time_dim]) { - stop("Parameter 'weights_exp' must have the same dimension lengths as 'memb_dim' and 'time_dim' in 'exp'.") - } - weights_exp <- Reorder(weights_exp, c(time_dim, memb_dim)) - - } else { - if (length(dim(weights_exp)) != 3 | any(!names(dim(weights_exp)) %in% c(memb_dim, time_dim, dat_dim))) - stop("Parameter 'weights_exp' must have three dimensions with the names of 'memb_dim', 'time_dim' and 'dat_dim'.") - if (dim(weights_exp)[memb_dim] != dim(exp)[memb_dim] | - dim(weights_exp)[time_dim] != dim(exp)[time_dim] | - dim(weights_exp)[dat_dim] != dim(exp)[dat_dim]) { - stop(paste0("Parameter 'weights_exp' must have the same dimension lengths ", - "as 'memb_dim', 'time_dim' and 'dat_dim' in 'exp'.")) - } - weights_exp <- Reorder(weights_exp, c(time_dim, memb_dim, dat_dim)) - } - - } - ## weights_ref - if (!is.null(weights_ref)) { - if (!is.array(weights_ref) | !is.numeric(weights_ref)) - stop('Parameter "weights_ref" must be a named numeric array.') - - if (is.null(dat_dim) | ((!is.null(dat_dim)) && (!dat_dim %in% names(dim(ref))))) { - if (length(dim(weights_ref)) != 2 | any(!names(dim(weights_ref)) %in% c(memb_dim, time_dim))) - stop("Parameter 'weights_ref' must have two dimensions with the names of 'memb_dim' and 'time_dim'.") - if (dim(weights_ref)[memb_dim] != dim(exp)[memb_dim] | - dim(weights_ref)[time_dim] != dim(exp)[time_dim]) { - stop("Parameter 'weights_ref' must have the same dimension lengths as 'memb_dim' and 'time_dim' in 'ref'.") - } - weights_ref <- Reorder(weights_ref, c(time_dim, memb_dim)) - - } else { - if (length(dim(weights_ref)) != 3 | any(!names(dim(weights_ref)) %in% c(memb_dim, time_dim, dat_dim))) - stop("Parameter 'weights_ref' must have three dimensions with the names of 'memb_dim', 'time_dim' and 'dat_dim'.") - if (dim(weights_ref)[memb_dim] != dim(ref)[memb_dim] | - dim(weights_ref)[time_dim] != dim(ref)[time_dim] | - dim(weights_ref)[dat_dim] != dim(ref)[dat_dim]) { - stop(paste0("Parameter 'weights_ref' must have the same dimension lengths ", - "as 'memb_dim', 'time_dim' and 'dat_dim' in 'ref'.")) - } - weights_ref <- Reorder(weights_ref, c(time_dim, memb_dim, dat_dim)) - } - - } - ## ncores - if (!is.null(ncores)) { - if (!is.numeric(ncores) | ncores %% 1 != 0 | ncores <= 0 | - length(ncores) > 1) { - stop("Parameter 'ncores' must be either NULL or a positive integer.") - } - } - - ############################### - - # Compute RPSS - if (!memb_dim %in% names(dim(obs))) { - target_dims_obs <- c(time_dim, dat_dim) - } else { - target_dims_obs <- c(time_dim, memb_dim, dat_dim) - } - - if (!is.null(ref)) { # use "ref" as reference forecast - if (!is.null(dat_dim) && (dat_dim %in% names(dim(ref)))) { - target_dims_ref <- c(time_dim, memb_dim, dat_dim) - } else { - target_dims_ref <- c(time_dim, memb_dim) - } - data <- list(exp = exp, obs = obs, ref = ref) - target_dims = list(exp = c(time_dim, memb_dim, dat_dim), - obs = target_dims_obs, - ref = target_dims_ref) - } else { - data <- list(exp = exp, obs = obs) - target_dims = list(exp = c(time_dim, memb_dim, dat_dim), - obs = target_dims_obs) - } - output <- Apply(data, - target_dims = target_dims, - fun = .RPSS, - time_dim = time_dim, memb_dim = memb_dim, - dat_dim = dat_dim, - prob_thresholds = prob_thresholds, - indices_for_clim = indices_for_clim, Fair = Fair, - weights_exp = weights_exp, - weights_ref = weights_ref, - cross.val = cross.val, - ncores = ncores) - - return(output) - -} - -.RPSS <- function(exp, obs, ref = NULL, time_dim = 'sdate', memb_dim = 'member', dat_dim = NULL, - prob_thresholds = c(1/3, 2/3), indices_for_clim = NULL, Fair = FALSE, - weights_exp = NULL, weights_ref = NULL, cross.val = FALSE) { - - # exp: [sdate, memb, (dat)] - # obs: [sdate, (memb), (dat)] - # ref: [sdate, memb, (dat)] or NULL - - if (is.null(dat_dim)) { - nexp <- 1 - nobs <- 1 - } else { - nexp <- as.numeric(dim(exp)[dat_dim]) - nobs <- as.numeric(dim(obs)[dat_dim]) - } - - # RPS of the forecast - rps_exp <- .RPS(exp = exp, obs = obs, time_dim = time_dim, memb_dim = memb_dim, dat_dim = dat_dim, - prob_thresholds = prob_thresholds, indices_for_clim = indices_for_clim, - Fair = Fair, weights = weights_exp, cross.val = cross.val) - - # RPS of the reference forecast - if (is.null(ref)) { ## using climatology as reference forecast - if (!memb_dim %in% names(dim(obs))) { - obs <- InsertDim(obs, posdim = 2, lendim = 1, name = memb_dim) - } - if (is.null(dat_dim)) { - dim(obs) <- c(dim(obs), nobs = nobs) - } - rps_ref <- array(dim = c(dim(obs)[time_dim], nobs = nobs)) - - for (j in 1:nobs) { - obs_data <- obs[ , , j] - if (is.null(dim(obs_data))) dim(obs_data) <- c(dim(obs)[1:2]) - # obs_probs: [bin, sdate] - obs_probs <- .GetProbs(data = obs_data, indices_for_quantiles = indices_for_clim, - prob_thresholds = prob_thresholds, weights = NULL, cross.val = cross.val) - # clim_probs: [bin, sdate] - clim_probs <- c(prob_thresholds[1], diff(prob_thresholds), 1 - prob_thresholds[length(prob_thresholds)]) - clim_probs <- array(clim_probs, dim = dim(obs_probs)) - - # Calculate RPS for each time step - probs_clim_cumsum <- apply(clim_probs, 2, cumsum) - probs_obs_cumsum <- apply(obs_probs, 2, cumsum) - rps_ref[ , j] <- colSums((probs_clim_cumsum - probs_obs_cumsum)^2) - # if (Fair) { # FairRPS - # ## adjustment <- rowSums(-1 * (1/R - 1/R.new) * ens.cum * (R - ens.cum)/R/(R - 1)) [formula taken from SpecsVerification::EnsRps] - # R <- dim(exp)[2] #memb - # R_new <- Inf - # adjustment <- (-1) / (R - 1) * probs_clim_cumsum * (1 - probs_clim_cumsum) - # adjustment <- apply(adjustment, 2, sum) - # rps_ref <- rps_ref + adjustment - # } - - } - if (is.null(dat_dim)) { - dim(rps_ref) <- dim(exp)[time_dim] - } - - } else { # use "ref" as reference forecast - if (!is.null(dat_dim) && (!dat_dim %in% names(dim(ref)))) { - remove_dat_dim <- TRUE - ref <- InsertDim(ref, posdim = 3, lendim = 1, name = dat_dim) - if (!is.null(weights_ref)) { - weights_ref <- InsertDim(weights_ref, posdim = 3, lendim = 1, name = dat_dim) - } - } else { - remove_dat_dim <- FALSE - } - - rps_ref <- .RPS(exp = ref, obs = obs, time_dim = time_dim, memb_dim = memb_dim, dat_dim = dat_dim, - prob_thresholds = prob_thresholds, indices_for_clim = indices_for_clim, - Fair = Fair, weights = weights_ref, cross.val = cross.val) - if (!is.null(dat_dim)) { - if (isTRUE(remove_dat_dim)) { - dim(rps_ref) <- dim(rps_ref)[-2] - } - } - } - - if (!is.null(dat_dim)) { - - rps_exp_mean <- MeanDims(rps_exp, time_dim, na.rm = FALSE) - rps_ref_mean <- MeanDims(rps_ref, time_dim, na.rm = FALSE) - rpss <- array(dim = c(nexp = nexp, nobs = nobs)) - sign <- array(dim = c(nexp = nexp, nobs = nobs)) - - if (length(dim(rps_ref_mean)) == 1) { - for (i in 1:nexp) { - for (j in 1:nobs) { - rpss[i, j] <- 1 - rps_exp_mean[i, j] / rps_ref_mean[j] - sign[i, j] <- .RandomWalkTest(skill_A = rps_exp[, i, j], skill_B = rps_ref[, j])$sign - } - } - } else { - for (i in 1:nexp) { - for (j in 1:nobs) { - rpss[i, j] <- 1 - rps_exp_mean[i, j] / rps_ref_mean[i, j] - sign[i, j] <- .RandomWalkTest(skill_A = rps_exp[, i, j], skill_B = rps_ref[, i, j])$sign - } - } - } - } else { - rpss <- 1 - mean(rps_exp) / mean(rps_ref) - # Significance - sign <- .RandomWalkTest(skill_A = rps_exp, skill_B = rps_ref, sign = T, pval = F)$sign - } - - return(list(rpss = rpss, sign = sign)) -} diff --git a/modules/Skill/Skill.R b/modules/Skill/Skill.R index c79d1d75..9903a007 100644 --- a/modules/Skill/Skill.R +++ b/modules/Skill/Skill.R @@ -11,15 +11,10 @@ source("modules/Skill/R/compute_quants.R") source("modules/Skill/R/compute_probs.R") source("modules/Skill/R/s2s.metrics.R") source("modules/Saving/R/drop_dims.R") -## TODO: Remove with the next release of s2dv -source("modules/Skill/R/tmp/RPS.R") -source("modules/Skill/R/tmp/RPSS.R") -source("modules/Skill/R/tmp/GetProbs.R") -source("modules/Skill/R/tmp/RandomWalkTest.R") -source("modules/Skill/R/tmp/MSE.R") -source("modules/Skill/R/tmp/MSSS.R") +## TODO: Remove when they are included in s2dv source("modules/Skill/R/RPS_clim.R") source("modules/Skill/R/CRPS_clim.R") +source("modules/Skill/R/tmp/GetProbs.R") ## TODO: Remove in the next release source("modules/Skill/compute_skill_metrics.R") source("modules/Skill/compute_probabilities.R") -- GitLab From 8a649075f98e9e5436e536cd57dbc81f44e3fdb2 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Fri, 20 Oct 2023 10:11:21 +0200 Subject: [PATCH 331/388] Add parameter clim.cross.val to CRPSS --- modules/Skill/Skill.R | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/Skill/Skill.R b/modules/Skill/Skill.R index 9903a007..fd54f17f 100644 --- a/modules/Skill/Skill.R +++ b/modules/Skill/Skill.R @@ -148,6 +148,7 @@ Skill <- function(recipe, data, agg = 'global') { skill <- CRPSS(data$hcst$data, data$obs$data, time_dim = time_dim, memb_dim = memb_dim, + clim.cross.val = cross.val, Fair = Fair, ncores = ncores) skill <- lapply(skill, function(x) { -- GitLab From a8cd39ae02ca1f3cd0f7bd04fcc92ca3b519c8fd Mon Sep 17 00:00:00 2001 From: vagudets Date: Mon, 23 Oct 2023 11:42:38 +0200 Subject: [PATCH 332/388] Allow Anomalies() to work when hcst and obs don't share the same grid --- example_scripts/example_downscaling.R | 3 + modules/Anomalies/Anomalies.R | 87 ++++++++++++------- .../recipe_seasonal_downscaling.yml | 2 +- tests/recipes/recipe-seasonal_downscaling.yml | 7 +- tests/testthat/test-seasonal_downscaling.R | 65 ++++++++++++-- 5 files changed, 123 insertions(+), 41 deletions(-) diff --git a/example_scripts/example_downscaling.R b/example_scripts/example_downscaling.R index 4e7e6294..1e9f1d6b 100644 --- a/example_scripts/example_downscaling.R +++ b/example_scripts/example_downscaling.R @@ -6,6 +6,7 @@ # Load modules source("modules/Loading/Loading.R") source("modules/Units/Units.R") +source("modules/Anomalies/Anomalies.R") source("modules/Downscaling/Downscaling.R") source("modules/Skill/Skill.R") source("modules/Saving/Saving.R") @@ -19,6 +20,8 @@ recipe <- prepare_outputs(recipe_file) data <- Loading(recipe) # Change units data <- Units(recipe, data) +# Compute anomalies +data <- Anomalies(recipe, data) # Downscale datasets data <- Downscaling(recipe, data) # Compute skill metrics diff --git a/modules/Anomalies/Anomalies.R b/modules/Anomalies/Anomalies.R index c00ad379..edb6a8be 100644 --- a/modules/Anomalies/Anomalies.R +++ b/modules/Anomalies/Anomalies.R @@ -12,7 +12,6 @@ Anomalies <- function(recipe, data) { "'Workflow:Anomalies:compute' is missing from the recipe.")) stop() } - if (recipe$Analysis$Workflow$Anomalies$compute) { if (recipe$Analysis$Workflow$Anomalies$cross_validation) { cross <- TRUE @@ -23,28 +22,51 @@ Anomalies <- function(recipe, data) { } original_dims <- data$hcst$dim - # Compute anomalies - anom <- CST_Anomaly(data$hcst, data$obs, - cross = cross, - memb = TRUE, - memb_dim = 'ensemble', - dim_anom = 'syear', - dat_dim = c('dat', 'ensemble'), - ftime_dim = 'time', - ncores = recipe$Analysis$ncores) - # Reorder dims - anom$exp$data <- Reorder(anom$exp$data, names(original_dims)) - anom$obs$data <- Reorder(anom$obs$data, names(original_dims)) - # Save full fields hcst_fullvalue <- data$hcst obs_fullvalue <- data$obs - - # Hindcast climatology - - data$hcst <- anom$exp - data$obs <- anom$obs - remove(anom) + # Compute anomalies + if (isTRUE(all.equal(as.vector(data$hcst$coords$latitude), + as.vector(data$obs$coords$latitude))) && + isTRUE(all.equal(as.vector(data$hcst$coords$longitude), + as.vector(data$obs$coord$longitude)))) { + anom <- CST_Anomaly(data$hcst, data$obs, + cross = cross, + memb = TRUE, + memb_dim = 'ensemble', + dim_anom = 'syear', + dat_dim = c('dat', 'ensemble'), + ftime_dim = 'time', + ncores = recipe$Analysis$ncores) + # Reorder dims + anom$exp$data <- Reorder(anom$exp$data, names(original_dims)) + anom$obs$data <- Reorder(anom$obs$data, names(original_dims)) + # Hindcast climatology + data$hcst <- anom$exp + data$obs <- anom$obs + remove(anom) + } else { + ## TODO: Remove when cross-validation is implemented for this use case + if (cross) { + warn(recipe$Run$logger, + paste("Anomaly computation in cross-validation has not been", + "implemented yet for the case where hcst and obs have", + "different grids. The climatology will be computed as", + "a simple mean.")) + } + clim_hcst <- Apply(data$hcst$data, + target_dims = c('syear', 'ensemble'), + mean, + na.rm = recipe$Analysis$remove_NAs, + ncores = recipe$Analysis$ncores)$output1 + clim_obs <- Apply(data$obs$data, + target_dims = c('syear', 'ensemble'), + mean, + na.rm = recipe$Analysis$remove_NAs, + ncores = recipe$Anaysis$ncores)$output1 + data$hcst$data <- Ano(data = data$hcst$data, clim = clim_hcst) + data$obs$data <- Ano(data = data$obs$data, clim = clim_obs) + } # Change variable metadata for (var in data$hcst$attrs$Variable$varName) { # Change hcst longname @@ -57,15 +79,20 @@ Anomalies <- function(recipe, data) { # Compute forecast anomaly field if (!is.null(data$fcst)) { # Compute hindcast climatology ensemble mean - clim <- s2dv::Clim(hcst_fullvalue$data, obs_fullvalue$data, - time_dim = "syear", - dat_dim = c("dat", "ensemble"), - memb = FALSE, - memb_dim = "ensemble", - ftime_dim = "time", - ncores = recipe$Analysis$ncores) - clim_hcst <- InsertDim(clim$clim_exp, posdim = 1, lendim = 1, - name = "syear") + if (isTRUE(all.equal(as.vector(data$hcst$coords$latitude), + as.vector(data$obs$coords$latitude))) && + isTRUE(all.equal(as.vector(data$hcst$coords$longitude), + as.vector(data$obs$coord$longitude)))) { + clim <- s2dv::Clim(hcst_fullvalue$data, obs_fullvalue$data, + time_dim = "syear", + dat_dim = c("dat", "ensemble"), + memb = FALSE, + memb_dim = "ensemble", + ftime_dim = "time", + ncores = recipe$Analysis$ncores) + clim_hcst <- InsertDim(clim$clim_exp, posdim = 1, lendim = 1, + name = "syear") + } # Store original dimensions dims <- dim(clim_hcst) # Repeat the array as many times as ensemble members @@ -113,7 +140,7 @@ Anomalies <- function(recipe, data) { } else { warn(recipe$Run$logger, paste("The Anomalies module has been called, but", - "recipe parameter Analysis:Variables:anomaly is set to FALSE.", + "recipe parameter Workflow:anomalies:compute is set to FALSE.", "The full fields will be returned.")) hcst_fullvalue <- NULL obs_fullvalue <- NULL diff --git a/recipes/atomic_recipes/recipe_seasonal_downscaling.yml b/recipes/atomic_recipes/recipe_seasonal_downscaling.yml index 219c5d61..c526140d 100644 --- a/recipes/atomic_recipes/recipe_seasonal_downscaling.yml +++ b/recipes/atomic_recipes/recipe_seasonal_downscaling.yml @@ -29,7 +29,7 @@ Analysis: type: none Workflow: Anomalies: - compute: no # yes/no, default yes + compute: yes # yes/no, default yes cross_validation: no # yes/no, default yes save: 'none' # 'all'/'none'/'exp_only'/'fcst_only' Calibration: diff --git a/tests/recipes/recipe-seasonal_downscaling.yml b/tests/recipes/recipe-seasonal_downscaling.yml index dc41adc2..d7a04662 100644 --- a/tests/recipes/recipe-seasonal_downscaling.yml +++ b/tests/recipes/recipe-seasonal_downscaling.yml @@ -25,8 +25,8 @@ Analysis: type: 'none' Workflow: Anomalies: - compute: no - cross_validation: + compute: TRUE + cross_validation: FALSE save: 'none' Calibration: method: 'raw' @@ -46,8 +46,11 @@ Analysis: target_grid: /esarchive/recon/ecmwf/era5/daily_mean/tas_f1h/tas_199301.nc save: 'all' Output_format: S2S4E + ncores: 1 + remove_NAs: FALSE Run: Loglevel: INFO Terminal: yes output_dir: ./out-logs/ code_dir: /esarchive/scratch/vagudets/repos/auto-s2s/ + diff --git a/tests/testthat/test-seasonal_downscaling.R b/tests/testthat/test-seasonal_downscaling.R index fde0756d..8a52657a 100644 --- a/tests/testthat/test-seasonal_downscaling.R +++ b/tests/testthat/test-seasonal_downscaling.R @@ -5,6 +5,7 @@ source("modules/Loading/Loading.R") source("modules/Skill/Skill.R") source("modules/Downscaling/Downscaling.R") source("modules/Saving/Saving.R") +source("modules/Anomalies/Anomalies.R") recipe_file <- "tests/recipes/recipe-seasonal_downscaling.yml" recipe <- prepare_outputs(recipe_file, disable_checks = F) @@ -14,9 +15,14 @@ suppressWarnings({invisible(capture.output( data <- Loading(recipe) ))}) +# Compute anomalies +suppressWarnings({invisible(capture.output( +ano_data <- Anomalies(recipe, data) +))}) + # Downscale the data suppressWarnings({invisible(capture.output( -downscaled_data <- Downscaling(recipe, data) +downscaled_data <- Downscaling(recipe, ano_data) ))}) # Compute skill metrics @@ -24,6 +30,7 @@ suppressWarnings({invisible(capture.output( skill_metrics <- Skill(recipe, downscaled_data) ))}) +#====================================== test_that("1. Loading", { expect_equal( @@ -101,7 +108,48 @@ as.POSIXct("1994-12-03 11:30:00 UTC", tz = 'UTC') }) #====================================== -test_that("2. Downscaling", { +test_that("2. Anomalies", { + +expect_equal( +is.list(ano_data), +TRUE +) +expect_equal( +names(ano_data), +c("hcst", "obs", "fcst", "hcst.full_val", "obs.full_val") +) +expect_equal( +class(ano_data$hcst), +"s2dv_cube" +) +expect_equal( +class(ano_data$fcst), +"NULL" +) +expect_equal( +dim(ano_data$hcst$data), +c(dat = 1, var = 1, sday = 1, sweek = 1, syear = 4, time = 31, latitude = 4, longitude = 4, ensemble = 25) +) +expect_equal( +mean(ano_data$hcst$data), +-3.466088e-16, +tolerance = 0.0001 +) +expect_equal( +as.vector(drop(ano_data$hcst$data)[3, 26:28, 3, 2, 12]), +c(-1.5654303, -0.6506540, -0.4674155), +tolerance = 0.0001 +) +expect_equal( +range(ano_data$hcst$data), +c(-6.265505, 9.440247), +tolerance = 0.0001 +) + +}) + +#====================================== +test_that("3. Downscaling", { expect_equal( is.list(downscaled_data), @@ -141,24 +189,24 @@ c(ensemble = 1, dat = 1, var = 1, sday = 1, sweek = 1, syear = 4, time = 31, lat ) expect_equal( as.vector(drop(downscaled_data$hcst$data)[1:2,1:2,1,2,3]), -c(293.8468, 293.5830, 294.0713, 293.7104), +c(1.482848, 1.503154, 1.599051, 1.591909), tolerance = 0.0001 ) expect_equal( mean(downscaled_data$hcst$data), -288.5359, +-0.04462092, tolerance = 0.0001 ) expect_equal( range(downscaled_data$hcst$data), -c(284.0950, 297.4405), +c(-4.611440, 5.771648), tolerance = 0.0001 ) }) #====================================== -test_that("3. Metrics", { +test_that("4. Metrics", { expect_equal( is.list(skill_metrics), @@ -182,7 +230,7 @@ dim(skill_metrics$rpss) ) expect_equal( skill_metrics$rpss[1], --0.05325714, +-0.005942857, tolerance = 0.0001 ) expect_equal( @@ -192,7 +240,7 @@ FALSE }) -test_that("4. Check saved data", { +test_that("5. Check saved data", { outputs <- paste0(recipe$Run$output_dir, "/outputs/Downscaling/") expect_equal( @@ -206,3 +254,4 @@ TRUE }) unlink(recipe$Run$output_dir, recursive = TRUE) + -- GitLab From c01a8698ab1625d3e25de6950bfb808684b1fc73 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Fri, 27 Oct 2023 14:48:14 +0200 Subject: [PATCH 333/388] Add condition in prepare_outputs() to restructure recipe only after splitting --- split.R | 3 ++- tools/divide_recipe.R | 2 +- tools/prepare_outputs.R | 7 +++++-- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/split.R b/split.R index a7943734..8328e460 100755 --- a/split.R +++ b/split.R @@ -27,7 +27,8 @@ arguments <- docopt(doc = doc) # Check recipe and prepare output directories recipe <- prepare_outputs(recipe_file = arguments$recipe, - uniqueID = !arguments$disable_unique_ID) + uniqueID = !arguments$disable_unique_ID, + restructure = FALSE) # Split recipe into atomic recipes ## TODO: Add autosubmit yes/no to the parameters? diff --git a/tools/divide_recipe.R b/tools/divide_recipe.R index f4a56fb1..cf9cecd8 100644 --- a/tools/divide_recipe.R +++ b/tools/divide_recipe.R @@ -70,7 +70,7 @@ divide_recipe <- function(recipe) { for (ref in 1:length(recipe$Analysis$Datasets$Reference)) { for (reci in 1:length(all_recipes)) { all_recipes[[reci]]$Analysis$Datasets$Reference <- - recipe$Analysis$Datasets$Reference[ref] + recipe$Analysis$Datasets$Reference[[ref]] } if (ref == 1) { recipes <- all_recipes diff --git a/tools/prepare_outputs.R b/tools/prepare_outputs.R index 6f5f7fb8..fa4d23ed 100644 --- a/tools/prepare_outputs.R +++ b/tools/prepare_outputs.R @@ -23,7 +23,8 @@ prepare_outputs <- function(recipe_file, disable_checks = FALSE, - uniqueID = TRUE) { + uniqueID = TRUE, + restructure = TRUE) { # recipe_file: path to recipe YAML file # disable_checks: If TRUE, does not perform checks on recipe # disable_uniqueID: If TRUE, does not add a unique ID to output dir @@ -96,6 +97,8 @@ prepare_outputs <- function(recipe_file, check_recipe(recipe) } # Restructure the recipe to make the atomic recipe more readable - recipe <- restructure_recipe(recipe) + if (restructure) { + recipe <- restructure_recipe(recipe) + } return(recipe) } -- GitLab From 42ead1dfa08321859bdf53dfd4399106846fe1e6 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Fri, 3 Nov 2023 16:57:49 +0100 Subject: [PATCH 334/388] Move call to data_summary() to Loading() and remove it from load_seasonal() and load_decadal() --- modules/Loading/Loading.R | 8 ++++++ modules/Loading/R/load_decadal.R | 46 ++++--------------------------- modules/Loading/R/load_seasonal.R | 33 ---------------------- 3 files changed, 14 insertions(+), 73 deletions(-) diff --git a/modules/Loading/Loading.R b/modules/Loading/Loading.R index d2919594..315ef78d 100644 --- a/modules/Loading/Loading.R +++ b/modules/Loading/Loading.R @@ -21,5 +21,13 @@ Loading <- function(recipe) { stop("Incorrect time horizon.") } } + # Display data summary + if (recipe$Run$logger$threshold <= 2) { + data_summary(data$hcst, recipe) + data_summary(data$obs, recipe) + if (!is.null(data$fcst)) { + data_summary(data$fcst, recipe) + } + } return(data) } diff --git a/modules/Loading/R/load_decadal.R b/modules/Loading/R/load_decadal.R index 15e5bbc8..a0e85e15 100644 --- a/modules/Loading/R/load_decadal.R +++ b/modules/Loading/R/load_decadal.R @@ -485,10 +485,9 @@ load_decadal <- function(recipe) { } - -#------------------------------------------- -# Step 5. Tune data -#------------------------------------------- + #------------------------------------------- + # Step 5. Tune data + #------------------------------------------- # # Remove negative values in accumulative variables # dictionary <- read_yaml("conf/variable-dictionary.yml") # for (var_idx in 1:length(variable)) { @@ -506,43 +505,10 @@ load_decadal <- function(recipe) { # fcst$data[, var_idx, , , , , , , ][fcst$data[, var_idx, , , , , , , ] < 0] <- 0 # } # } - # - # # Convert prlr from m/s to mm/day - # ## TODO: Make a unit conversion function - # if (variable[[var_idx]] == "prlr") { - # # Verify that the units are m/s and the same in obs and hcst - # if (((obs$attrs$Variable$metadata[[var_name]]$units == "m s-1") || - # (obs$attrs$Variable$metadata[[var_name]]$units == "m s**-1")) && - # ((hcst$attrs$Variable$metadata[[var_name]]$units == "m s-1") || - # (hcst$attrs$Variable$metadata[[var_name]]$units == "m s**-1"))) { - # info(recipe$Run$logger, "Converting precipitation from m/s to mm/day.") - # obs$data[, var_idx, , , , , , , ] <- - # obs$data[, var_idx, , , , , , , ]*86400*1000 - # obs$attrs$Variable$metadata[[var_name]]$units <- "mm/day" - # hcst$data[, var_idx, , , , , , , ] <- - # hcst$data[, var_idx, , , , , , , ]*86400*1000 - # hcst$attrs$Variable$metadata[[var_name]]$units <- "mm/day" - # if (!is.null(fcst)) { - # fcst$data[, var_idx, , , , , , , ] <- - # fcst$data[, var_idx, , , , , , , ]*86400*1000 - # fcst$attrs$Variable$metadata[[var_name]]$units <- "mm/day" - # } - # } - # } - # } -#------------------------------------------- -# Step 6. Print summary -#------------------------------------------- - - # Print a summary of the loaded data for the user, for each object - if (recipe$Run$logger$threshold <= 2) { - data_summary(hcst, recipe) - data_summary(obs, recipe) - if (!is.null(fcst)) { - data_summary(fcst, recipe) - } - } + #------------------------------------------- + # Step 6. Print summary + #------------------------------------------- info(recipe$Run$logger, "##### DATA LOADING COMPLETED SUCCESSFULLY #####") diff --git a/modules/Loading/R/load_seasonal.R b/modules/Loading/R/load_seasonal.R index f2534ac7..a77f239e 100644 --- a/modules/Loading/R/load_seasonal.R +++ b/modules/Loading/R/load_seasonal.R @@ -362,40 +362,7 @@ load_seasonal <- function(recipe) { fcst$data[, var_idx, , , , , , , ][fcst$data[, var_idx, , , , , , , ] < 0] <- 0 } } - - # Convert prlr from m/s to mm/day - ## TODO: Make a unit conversion function -# if (variable[[var_idx]] == "prlr") { -# # Verify that the units are m/s and the same in obs and hcst -# if (((obs$attrs$Variable$metadata[[var_name]]$units == "m s-1") || -# (obs$attrs$Variable$metadata[[var_name]]$units == "m s**-1")) && -# ((hcst$attrs$Variable$metadata[[var_name]]$units == "m s-1") || -# (hcst$attrs$Variable$metadata[[var_name]]$units == "m s**-1"))) { -# info(recipe$Run$logger, "Converting precipitation from m/s to mm/day.") -# obs$data[, var_idx, , , , , , , ] <- -# obs$data[, var_idx, , , , , , , ]*86400*1000 -# obs$attrs$Variable$metadata[[var_name]]$units <- "mm/day" -# hcst$data[, var_idx, , , , , , , ] <- -# hcst$data[, var_idx, , , , , , , ]*86400*1000 -# hcst$attrs$Variable$metadata[[var_name]]$units <- "mm/day" -# if (!is.null(fcst)) { -# fcst$data[, var_idx, , , , , , , ] <- -# fcst$data[, var_idx, , , , , , , ]*86400*1000 -# fcst$attrs$Variable$metadata[[var_name]]$units <- "mm/day" -# } -# } -# } - } - # Compute anomalies if requested - # Print a summary of the loaded data for the user, for each object - if (recipe$Run$logger$threshold <= 2) { - data_summary(hcst, recipe) - data_summary(obs, recipe) - if (!is.null(fcst)) { - data_summary(fcst, recipe) - } } - info(recipe$Run$logger, "##### DATA LOADING COMPLETED SUCCESSFULLY #####") -- GitLab From 3c33fa7f9cfbe39c269932d03d759fdf02f039e7 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Fri, 10 Nov 2023 15:39:45 +0100 Subject: [PATCH 335/388] 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 From b1d732060b0976cf908136427e49fd8a280293ee Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Fri, 10 Nov 2023 16:19:47 +0100 Subject: [PATCH 336/388] Update unit test (change in dates of data file) --- tests/testthat/test-seasonal_NAO.R | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/tests/testthat/test-seasonal_NAO.R b/tests/testthat/test-seasonal_NAO.R index 7a9c9de8..9582bdfc 100644 --- a/tests/testthat/test-seasonal_NAO.R +++ b/tests/testthat/test-seasonal_NAO.R @@ -89,20 +89,20 @@ c(98909.3, 103299.8), tolerance = 0.0001 ) expect_equal( -(data$hcst$attrs$Dates)[1], -as.POSIXct("1993-04-30 18:00:00", tz = 'UTC') +month((data$hcst$attrs$Dates)[1]), +month(as.POSIXct("1993-04-30 18:00:00", tz = 'UTC')) ) expect_equal( -(data$hcst$attrs$Dates)[2], -as.POSIXct("1994-04-30 18:00:00", tz = 'UTC') +month((data$hcst$attrs$Dates)[2]), +month(as.POSIXct("1994-04-30 18:00:00", tz = 'UTC')) ) expect_equal( -(data$hcst$attrs$Dates)[5], -as.POSIXct("1997-04-30 18:00:00", tz = 'UTC') +month((data$hcst$attrs$Dates)[5]), +month(as.POSIXct("1997-04-30 18:00:00", tz = 'UTC')) ) expect_equal( -(data$obs$attrs$Dates)[8], -as.POSIXct("2000-04-16", tz = 'UTC') +month((data$obs$attrs$Dates)[8]), +month(as.POSIXct("2000-04-16", tz = 'UTC')) ) }) -- GitLab From 9b90cd239550f1a8d19d6539354cf6b767ebffa1 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Mon, 13 Nov 2023 11:35:26 +0100 Subject: [PATCH 337/388] Add hands-on use case 1.1 --- .../ex1_1-handson.md | 232 ++++++++++++++++++ .../ex1_1-recipe.yml | 61 +++++ 2 files changed, 293 insertions(+) create mode 100644 use_cases/ex1_1_single_analysis_terminal/ex1_1-handson.md create mode 100644 use_cases/ex1_1_single_analysis_terminal/ex1_1-recipe.yml diff --git a/use_cases/ex1_1_single_analysis_terminal/ex1_1-handson.md b/use_cases/ex1_1_single_analysis_terminal/ex1_1-handson.md new file mode 100644 index 00000000..f6e2e7ef --- /dev/null +++ b/use_cases/ex1_1_single_analysis_terminal/ex1_1-handson.md @@ -0,0 +1,232 @@ +# Hands-on 1.1: Single Verification Workflow on the Terminal + +## Goal +Create a SUNSET recipe and use the functions in the suite to reproduce the verification workflow from the previous hands-on exercises. + +## 0. Cloning the SUNSET repository + +The first step to use SUNSET is to create a copy of the code in your local environment. Open a terminal and `cd` to the directory where you would like to store your local copy of SUNSET. For example: `/esarchive/scratch//git/`. If a directory does not exist yet, you can create it with the `mkdir` shell command. + +```shell +# Clone the GitLab repository to create a local copy of the code +git clone https://earth.bsc.es/gitlab/es/sunset.git +``` + +## 1. Modifying the recipe + +SUNSET uses YAML configuration files called 'recipes' to specify which data you want to load and the details of the different steps of the workflow. In this example, we want to evaluate the temperature-at-surface (tas) monthly means, using MeteoFrance System 7 data as our experiment and ERA5 as our reference dataset, for the initialization month of November. + +There is a template file +```shell +# cd to the main SUNSET directory +# Open the recipe with a text editor such as vim or emacs +vim use_cases/ex1_1_single_analysis_terminal/ex1_1-recipe.yml +``` + +Once you have opened your recipe, it is time to edit the contents. Fill in the blank slots according to your preference, based on the options given in the description. + +```yaml +Description: + Author: <___> + Description: Exercise 1.1: Calibration and skill assessment of MeteoFrance System 7 surface temperature +Analysis: + Horizon: Seasonal + Variables: + name: tas + freq: monthly_mean + units: <___> # Choose your units: C or K + Datasets: + System: + name: Meteo-France-System7 + Multimodel: no + Reference: + name: ERA5 + Time: + sdate: '1101' + fcst_year: '2020' + hcst_start: '1993' + hcst_end: '2016' + ftime_min: <___> # Choose the first time step! A number from 1 to 6 + ftime_max: <___> # Choose the last time step! A number from 1 to 6 + Region: + name: "EU" + latmin: 20 + latmax: 80 + lonmin: -20 + lonmax: 40 + Regrid: + method: bilinear + type: 'r360x181' # options: to_system, to_reference, self-defined grid + Workflow: + Anomalies: + compute: yes + cross_validation: yes + save: 'none' + Calibration: + method: <___> + save: 'none' + Skill: + metric: RPSS, BSS10, BSS90 + cross_validation: yes + save: 'none' + Probabilities: + percentiles: [[1/3, 2/3], [1/10, 9/10]] + save: 'none' + Visualization: + plots: skill_metrics, forecast_ensemble_mean, most_likely_terciles + multi_panel: no + projection: cylindrical_equidistant + ncores: 10 + remove_NAs: yes + Output_format: S2S4E +Run: + Loglevel: INFO + Terminal: yes + output_dir: <______> # Path to the directory where you want your outputs to be saved + code_dir: <______> # Path to the directory where your code is +``` + +## 2. Load the required SUNSET modules and read the recipe + +First of all, source the MODULES file to load the environment modules needed to run SUNSET. + +```shell +source MODULES +``` + +Open an R session, by simply typing `R` on the terminal. + +To run SUNSET, we must run the R session from the directory where the code is. To check your working directory, you can run the shell command `pwd`. From the R session, you can use the commands `getwd()` and `setwd()` to see and change your working directory. + +```r +# Load required 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") + +# Read recipe +recipe_file <- "use_cases/ex1_1_single_analysis_terminal/ex1_1-recipe.yml" +recipe <- prepare_outputs(recipe_file) +``` + +The function `prepare_outputs()` creates a unique folder for the logs, data files and plots that result from the execution of your recipe, inside the directory you specified. It also runs a check over the recipe to detect any potential errors, misspellings or missing arguments. At the end of the check, a message is displayed indicating whether or not the recipe passed the check, along with the list of errors and warnings. + +**Questions** + +Read the logs! + +(1) Did your recipe pass the check? Did you get any warnings? + +(2) Where will your outputs be saved? Copy and paste this directory somewhere, so that you can check it later! + +*Tip*: The recipe is now stored as a `list` containing all the information of the original YAML file, plus some extra things! If you want to see any particular element of the recipe from the R session, you can simply access that element in the list. For example: + +```r +# Checking the variable name +recipe$Analysis$Variables$name +# Checking the output directory +recipe$Run$output_dir +``` + +## 3. Load the data and change the units + +The **Loading** module retrieves the information from the recipe to load the data that has been requested it in. It loads the experiment data for the hindcast period, the reference data for the corresponding period, and the experiment forecast if a forecast year has been requested. + +For certain variables like temperature, precipitation or sea level pressure, the user can request for specific units to load the data in. The **Units** module will read the original units as stored in the netCDF files and perform any necessary unit converstions to match the request in the recipe. It also verifies that all of the loaded datasets share the same units, even if no specific unit has been requested. For this reason, users are strongly encouraged to run it even if they did not request any unit conversion. + +```r +# Load datasets +data <- Loading(recipe) +# Change units +data <- Units(recipe, data) +``` + +**Questions** + +(1) What is the structure of `data`? What is the class of the objects in `data`? *Tip*: you can use functions like `class()`, `names()` or `str()` to gain information about the structure of the object and its contents. + +```r +class(data) +names(data) +str(data, max.level = 2) +# You can access any of the three objects with the `$` operator: +class(data$____) +``` + +(2) Pay attention to the log messages: Did your units get converted? Are the new units what you expect? You can check the metadata of any of the objects in data. SUNSET also provides the `data_summary()` function, which lets you have a quick look at your objects: + +```r +# Check the new units and data of hcst, fcst and/or obs. Are they all the same? +data$____$attrs$Variable$metadata$tas$units +data_summary(data$____, recipe) +``` +(3) What are the dimensions of the datasets? Are they consistent with what is requested in the recipe? *Tip*: Check the data summary! + +## 4. Calibrate the data and compute the anomalies + +SUNSET has a few modules to perform post-processing on the experimental and the reference datasets. The **Calibration** module performs the bias correction method indicated in the recipe, using the `CSTools::CST_Calibration()` function. + +The **Anomalies** module removes the climatologies using functions like `CSTools::CST_Anomaly()` and `s2dv::Clim()`, and also returns the full fields in case they are needed for any future computations. + +```r +# Calibrate the data +data <- Calibration(recipe, data) +# Compute anomalies +data <- Anomalies(recipe, data) +``` +**Questions** + +(1) Verify that you now have anomaly values instead of the original full field. *Tip*: Use `data_summary()` like in the previous example and pay attention to the new values. + +## 5. Evaluate the model skill and compute the probability thresholds + +The **Skill** module returns a list of all the evaluation metrics requested in the recipe, in the shape of multi-dimensional arrays. In this case, we will compute three metrics: + +- **RPSS (Ranked Probability Skill Score)**: This skill score measures how well a forecast predicts the probability of the tercile categories (below normal, normal and above-normal), compared to the climatology. +- **BSS10 and BSS90 (Brier Skill Score):** This skill score measures how well a forecast predicts the probability of the 10th percentile and 90th percentile extreme events, compared to the climatology. + +The `Probabilities()` function returns the probability values for each requested category for the hindcast and forecast data, as well as the hindcast percentile values corresponding to each threshold. +``` +# Compute skill metrics +skill_metrics <- Skill(recipe, data) +# Compute percentiles and probability bins +probabilities <- Probabilities(recipe, data) +``` +**Questions** + +(1) What is the structure of `skill_metrics`? Which metrics were computed? What dimensions do they have? *Tip*: use `str()` and `names()`. + +(2) What is the structure of `probabilities`? Can you identify the probability categories and the percentiles? *Tip*: use `str()`. + +## 6. Plotting the results + +Now, let's visualize the information that was computed! + +The **Visualization** module will generate the three types of maps we requested in the recipe: +- Skill maps to visualize the skill distribution of the model, for each metric. +- The ensemble mean of the calibrated forecast anomalies. +- A map showing the most likely tercile category for each point in the grid. + +With the significance option in the `Visualization()` function, you can choose whether or not to shade the grid points that are statistically significant in each skill metric plot. + +```r +# Plot data +Visualization(recipe, data, + skill_metrics = skill_metrics, + probabilities = probabilities, + significance = TRUE) +``` + +Now, you can `cd` to the the output directory and inspect the contents of the `plots/` subdirectory. The plots are png files that can be visualized with the `display` command. They have a descriptive name including the content of the plot, the date and the forecast time. + +**Questions** + +(1) Let's take a look at the forecast ensemble mean. What is the sign of the anomalies over Spain? In what regions are the anomalous temperatures strongest? + +(2) Let's take a look at the skill metrics RPSS, BSS10 and BSS90. In what regions and for which metrics is the forecast most skillful? *Tip*: Positive values indicate that the model is a better predictor than the climatology, with 1 being the perfect score. + +(3) Let's take a look at the Most Likely Terciles plots. This plot indicates the probability of the temperature being below normal, near-normal or above normal. What is the most likely category for Spain? diff --git a/use_cases/ex1_1_single_analysis_terminal/ex1_1-recipe.yml b/use_cases/ex1_1_single_analysis_terminal/ex1_1-recipe.yml new file mode 100644 index 00000000..7b35e966 --- /dev/null +++ b/use_cases/ex1_1_single_analysis_terminal/ex1_1-recipe.yml @@ -0,0 +1,61 @@ +Description: + Author: V. Agudetse + Description: Analysis of MF System 7 with temperature +Analysis: + Horizon: Seasonal + Variables: + name: tas + freq: monthly_mean + units: K + Datasets: + System: + name: Meteo-France-System7 + Multimodel: no + Reference: + name: ERA5 + Time: + sdate: '1101' + fcst_year: '2020' + hcst_start: '1993' + hcst_end: '2016' + ftime_min: 1 + ftime_max: 2 + Region: + name: "EU" + latmin: 20 + latmax: 80 + lonmin: -20 + lonmax: 40 + Regrid: + method: bilinear + type: 'r360x181' + Workflow: + Anomalies: + compute: yes + cross_validation: yes + save: 'none' + Calibration: + method: mse_min + save: 'none' + Skill: + metric: RPSS, BSS10, BSS90 + cross_validation: yes + save: 'all' + Probabilities: + percentiles: [[1/3, 2/3], [1/10, 9/10]] + save: 'none' + Visualization: + plots: skill_metrics, forecast_ensemble_mean, most_likely_terciles + multi_panel: no + projection: cylindrical_equidistant + mask_terciles: no # CHECK + dots: no # CHECK + ncores: 10 + remove_NAs: yes + Output_format: S2S4E +Run: + filesystem: esarchive + Loglevel: INFO + Terminal: yes + output_dir: /esarchive/scratch/vagudets/auto-s2s-outputs/ + code_dir: /esarchive/scratch/vagudets/repos/auto-s2s/ -- GitLab From 0e8683dcd2005e11f12682f3c60673fbed28e736 Mon Sep 17 00:00:00 2001 From: PALOMA TRASCASA CASTRO Date: Wed, 15 Nov 2023 15:49:24 +0100 Subject: [PATCH 338/388] Updated the lubridates:: function adding locale = en_GB , asking to choose English --- modules/Visualization/R/plot_skill_metrics.R | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/modules/Visualization/R/plot_skill_metrics.R b/modules/Visualization/R/plot_skill_metrics.R index 2698d499..b4c2b273 100644 --- a/modules/Visualization/R/plot_skill_metrics.R +++ b/modules/Visualization/R/plot_skill_metrics.R @@ -38,7 +38,7 @@ plot_skill_metrics <- function(recipe, data_cube, skill_metrics, # Get months months <- lubridate::month(Subset(data_cube$attrs$Dates, "syear", indices = 1), - label = T, abb = F) + label = T, abb = F,locale = "en_GB") if (!is.null(recipe$Analysis$Workflow$Visualization$projection)) { projection <- tolower(recipe$Analysis$Workflow$Visualization$projection) } else { @@ -214,6 +214,7 @@ plot_skill_metrics <- function(recipe, data_cube, skill_metrics, for (i in 1:dim(skill)[['time']]) { # Get forecast time label forecast_time <- match(months[i], month.name) - init_month + 1 + if (forecast_time < 1) { forecast_time <- forecast_time + 12 } -- GitLab From 35335b4f806e862d08239841dfb1aa04e3e1521e Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Wed, 15 Nov 2023 15:57:01 +0100 Subject: [PATCH 339/388] Fill in the blanks --- .../ex1_1_single_analysis_terminal/ex1_1-handson.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/use_cases/ex1_1_single_analysis_terminal/ex1_1-handson.md b/use_cases/ex1_1_single_analysis_terminal/ex1_1-handson.md index f6e2e7ef..391d4856 100644 --- a/use_cases/ex1_1_single_analysis_terminal/ex1_1-handson.md +++ b/use_cases/ex1_1_single_analysis_terminal/ex1_1-handson.md @@ -34,7 +34,7 @@ Analysis: Variables: name: tas freq: monthly_mean - units: <___> # Choose your units: C or K + units: <___> # Choose your units: C or K Datasets: System: name: Meteo-France-System7 @@ -154,15 +154,17 @@ class(data) names(data) str(data, max.level = 2) # You can access any of the three objects with the `$` operator: -class(data$____) +class(data$hcst) ``` (2) Pay attention to the log messages: Did your units get converted? Are the new units what you expect? You can check the metadata of any of the objects in data. SUNSET also provides the `data_summary()` function, which lets you have a quick look at your objects: ```r # Check the new units and data of hcst, fcst and/or obs. Are they all the same? -data$____$attrs$Variable$metadata$tas$units -data_summary(data$____, recipe) +data$hcst$attrs$Variable$metadata$tas$units +data_summary(data$hcst, recipe) +data_summary(data$fcst, recipe) +data_summary(data$obs, recipe) ``` (3) What are the dimensions of the datasets? Are they consistent with what is requested in the recipe? *Tip*: Check the data summary! -- GitLab From 5d5cfb65d61fc5737277524026f718c5fb7b7828 Mon Sep 17 00:00:00 2001 From: aho Date: Wed, 15 Nov 2023 17:01:30 +0100 Subject: [PATCH 340/388] Copy and paste the recipe reference --- .../ex1_2-recipe.yml | 105 ++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 use_cases/ex1_2_autosubmit_scorecards/ex1_2-recipe.yml diff --git a/use_cases/ex1_2_autosubmit_scorecards/ex1_2-recipe.yml b/use_cases/ex1_2_autosubmit_scorecards/ex1_2-recipe.yml new file mode 100644 index 00000000..2de4bd48 --- /dev/null +++ b/use_cases/ex1_2_autosubmit_scorecards/ex1_2-recipe.yml @@ -0,0 +1,105 @@ +################################################################################ +## RECIPE DESCRIPTION +################################################################################ + +Description: + Author: V. Agudetse + Info: Test for recipe splitting + +################################################################################ +## ANALYSIS CONFIGURATION +################################################################################ + +Analysis: + Horizon: Seasonal + Variables: # ECVs and Indicators? + - {name: tas, freq: monthly_mean} + Datasets: + System: # multiple systems for single model, split if Multimodel = F + - {name: ECMWF-SEAS5} + Multimodel: False # single option + Reference: + - {name: ERA5} # multiple references for single model? + Time: + sdate: # list, split + - '0101' + - '0201' + - '0301' + - '0401' + - '0501' + - '0601' + - '0701' + - '0801' + - '0901' + - '1001' + - '1101' + - '1201' + fcst_year: + hcst_start: '1993' # single option + hcst_end: '2003' # single option + ftime_min: 1 # single option + ftime_max: 6 # single option + Region: # multiple lists, split? Add region name if length(Region) > 1 + - {name: "global", latmin: -90, latmax: 90, lonmin: 0, lonmax: 359.9} + Regrid: + method: bilinear ## TODO: allow multiple methods? + type: to_system + Workflow: + Anomalies: + compute: yes + cross_validation: no + save: 'none' + Calibration: + method: raw ## TODO: list, split? + save: 'none' + Skill: + metric: mean_bias EnsCorr rps rpss crps crpss EnsSprErr # list, don't split + cross_validation: yes + save: 'all' + Probabilities: + percentiles: [[1/3, 2/3]] # list, don't split + save: 'none' + # Visualization: + # plots: skill_metrics + Scorecards: + execute: yes # yes/no + regions: + Extra-tropical NH: {lon.min: 0, lon.max: 360, lat.min: 30, lat.max: 90} + Tropics: {lon.min: 0, lon.max: 360, lat.min: -30, lat.max: 30} + Extra-tropical SH : {lon.min: 0, lon.max: 360, lat.min: -30, lat.max: -90} + start_months: NULL + metric: mean_bias enscorr rpss crpss enssprerr + metric_aggregation: 'score' + table_label: NULL + fileout_label: NULL + col1_width: NULL + col2_width: NULL + calculate_diff: FALSE + ncores: 14 + remove_NAs: no # bool, don't split + Output_format: Scorecards # string, don't split + +################################################################################ +## Run CONFIGURATION +################################################################################ +Run: + Loglevel: INFO + Terminal: yes + output_dir: /esarchive/scratch/vagudets/auto-s2s-outputs/ + code_dir: /esarchive/scratch/vagudets/repos/auto-s2s/ + autosubmit: yes + # fill only if using autosubmit + auto_conf: + script: /esarchive/scratch/vagudets/repos/auto-s2s/example_scripts/test_scorecards_workflow.R # replace with the path to your script + expid: a6ae # replace with your EXPID + hpc_user: bsc32762 # replace with your hpc username + wallclock: 03:00 # hh:mm + processors_per_job: 14 + platform: nord3v2 + custom_directives: ['#SBATCH --exclusive'] + email_notifications: yes # enable/disable email notifications. Change it if you want to. + email_address: victoria.agudetse@bsc.es # replace with your email address + notify_completed: yes # notify me by email when a job finishes + notify_failed: no # notify me by email when a job fails + + -- GitLab From 3256eeb3e7b56d14f0c723bc736d2caeeaf2581d Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Thu, 16 Nov 2023 14:47:39 +0100 Subject: [PATCH 341/388] Set locale to English --- tools/libs.R | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tools/libs.R b/tools/libs.R index 3b855a77..2c034dd3 100644 --- a/tools/libs.R +++ b/tools/libs.R @@ -41,3 +41,5 @@ source("tools/restructure_recipe.R") # Settings options(bitmapType = 'cairo') pdf(NULL) +Sys.setlocale("LC_MESSAGES", 'en_GB.UTF-8') + -- GitLab From 092e04edf1a01986a8e765b744e2963391b07a7a Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Thu, 16 Nov 2023 15:23:31 +0100 Subject: [PATCH 342/388] Change LC_MESSAGES to LC_ALL --- tools/libs.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/libs.R b/tools/libs.R index 2c034dd3..40146786 100644 --- a/tools/libs.R +++ b/tools/libs.R @@ -41,5 +41,5 @@ source("tools/restructure_recipe.R") # Settings options(bitmapType = 'cairo') pdf(NULL) -Sys.setlocale("LC_MESSAGES", 'en_GB.UTF-8') +Sys.setlocale("LC_ALL", 'en_GB.UTF-8') -- GitLab From b82ae165cb10e2e70b28bb7326866f1fa65c89f0 Mon Sep 17 00:00:00 2001 From: PALOMA TRASCASA CASTRO Date: Thu, 16 Nov 2023 17:30:15 +0100 Subject: [PATCH 343/388] Added command to specify English language --- modules/Visualization/R/plot_most_likely_terciles_map.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/Visualization/R/plot_most_likely_terciles_map.R b/modules/Visualization/R/plot_most_likely_terciles_map.R index abd08f7b..5d60f8c1 100644 --- a/modules/Visualization/R/plot_most_likely_terciles_map.R +++ b/modules/Visualization/R/plot_most_likely_terciles_map.R @@ -109,7 +109,7 @@ plot_most_likely_terciles <- function(recipe, "\n", "Most Likely Tercile / Initialization: ", i_syear) months <- lubridate::month(fcst$attrs$Dates[1, 1, which(start_date == i_syear), ], - label = T, abb = F) + label = T, abb = F,locale = "en_GB") years <- lubridate::year(fcst$attrs$Dates[1, 1, which(start_date == i_syear), ]) if (recipe$Analysis$Workflow$Visualization$multi_panel) { ## TODO: Ensure this works for daily and sub-daily cases -- GitLab From 74f3370459d7ea43582c0b31dbe5c3717742cf2d Mon Sep 17 00:00:00 2001 From: Nadia Milders Date: Mon, 20 Nov 2023 11:20:21 +0100 Subject: [PATCH 344/388] Tas-tos data blending development --- conf/archive.yml | 7 +- conf/variable-dictionary.yml | 13 +- modules/Loading/Loading.R | 9 +- modules/Loading/R/load_tas_tos.R | 513 ++++++++++++++++++ modules/Loading/R/mask_tas_tos.R | 65 +-- .../atomic_recipes/recipe_tas-tos_nadia.yml | 55 ++ .../recipe-seasonal_monthly_1_tas-tos.yml | 56 ++ .../testthat/test-seasonal_monthly_tas-tos.R | 98 ++++ tools/check_recipe.R | 12 + tools/prepare_outputs.R | 8 +- 10 files changed, 780 insertions(+), 56 deletions(-) create mode 100644 modules/Loading/R/load_tas_tos.R create mode 100644 recipes/atomic_recipes/recipe_tas-tos_nadia.yml create mode 100644 tests/recipes/recipe-seasonal_monthly_1_tas-tos.yml create mode 100644 tests/testthat/test-seasonal_monthly_tas-tos.R diff --git a/conf/archive.yml b/conf/archive.yml index 0b643ae9..cca68c22 100644 --- a/conf/archive.yml +++ b/conf/archive.yml @@ -21,13 +21,14 @@ esarchive: "ta850":"monthly_mean/ta850_f12h/", "g300":"monthly_mean/g300_f12h/", "g500":"monthly_mean/g500_f12h/", "g850":"monthly_mean/g500_f12h/", "tdps":"monthly_mean/tdps_f6h/", "psl":"monthly_mean/psl_f6h/", - "tos":"monthly_mean/tos_f6h/"} + "tos":"monthly_mean/tos_f6h/", "sic":"monthly_mean/sic_f24h/"} nmember: fcst: 51 hcst: 25 calendar: "proleptic_gregorian" time_stamp_lag: "0" reference_grid: "/esarchive/exp/ecmwf/system5c3s/monthly_mean/tas_f6h/tas_20180501.nc" + land_sea_mask: "/esarchive/exp/ecmwf/system5c3s/constant/lsm/lsm.nc" ECMWF-SEAS5.1: name: "ECMWF SEAS5 (v5.1)" institution: "European Centre for Medium-Range Weather Forecasts" @@ -165,9 +166,11 @@ esarchive: "ta300":"montly_mean/ta300_f1h-r1440x721cds/", "ta500":"monthly_mean/ta500_f1h-r1440x721cds/", "ta850":"monthly_mean/ta850_f1h-r1440x721cds/", - "tos":"monthly_mean/tos_f1h-r1440x721cds/"} + "tos":"monthly_mean/tos_f1h-r1440x721cds/", + "sic":"monthly_mean/sic_f1h-r1440x721cds/"} calendar: "standard" reference_grid: "/esarchive/recon/ecmwf/era5/monthly_mean/tas_f1h-r1440x721cds/tas_201805.nc" + land_sea_mask: "/esarchive/recon/ecmwf/era5/constant/lsm-r1440x721cds/sftof.nc" ERA5-Land: name: "ERA5-Land" institution: "European Centre for Medium-Range Weather Forecasts" diff --git a/conf/variable-dictionary.yml b/conf/variable-dictionary.yml index 0bfbffe0..c440eac1 100644 --- a/conf/variable-dictionary.yml +++ b/conf/variable-dictionary.yml @@ -204,13 +204,16 @@ vars: long_name: "Surface Upward Sensible Heat Flux" standard_name: "surface_upward_sensible_heat_flux" accum: no -## Adding new variable - tasanomaly: + tas-tos: units: "K" - long_name: "Near-Surface Air Temperature Anomaly" - standard_name: "air_temperature_anom" + long_name: "Blended air - sea temperature" + standard_name: "air_sea_temperature" + accum: no + sic: + units: "1" + long_name: "Sea Ice Concentration" + standard_name: "sea_ice_concentration" accum: no - # Coordinates diff --git a/modules/Loading/Loading.R b/modules/Loading/Loading.R index 315ef78d..43dea065 100644 --- a/modules/Loading/Loading.R +++ b/modules/Loading/Loading.R @@ -12,8 +12,13 @@ Loading <- function(recipe) { # Case: esarchive time_horizon <- tolower(recipe$Analysis$Horizon) if (time_horizon == "seasonal") { - source("modules/Loading/R/load_seasonal.R") - data <- load_seasonal(recipe) + if(recipe$Analysis$Variables$name == 'tas-tos') { + source("modules/Loading/R/load_tas_tos.R") + data <- load_tas_tos(recipe) + } else { + source("modules/Loading/R/load_seasonal.R") + data <- load_seasonal(recipe) + } } else if (time_horizon == "decadal") { source("modules/Loading/R/load_decadal.R") data <- load_decadal(recipe) diff --git a/modules/Loading/R/load_tas_tos.R b/modules/Loading/R/load_tas_tos.R new file mode 100644 index 00000000..5e6b8837 --- /dev/null +++ b/modules/Loading/R/load_tas_tos.R @@ -0,0 +1,513 @@ +source("/esarchive/scratch/vagudets/repos/csoperational/R/get_regrid_params.R") +# Load required libraries/funs +source("modules/Loading/R/dates2load.R") +source("modules/Loading/R/get_timeidx.R") +source("modules/Loading/R/check_latlon.R") +source('modules/Loading/R/mask_tas_tos.R') + + +load_tas_tos <- function(recipe) { + + # ------------------------------------------- + # Set params ----------------------------------------- + + hcst.inityear <- recipe$Analysis$Time$hcst_start + hcst.endyear <- recipe$Analysis$Time$hcst_end + lats.min <- recipe$Analysis$Region$latmin + lats.max <- recipe$Analysis$Region$latmax + lons.min <- recipe$Analysis$Region$lonmin + lons.max <- recipe$Analysis$Region$lonmax + ref.name <- recipe$Analysis$Datasets$Reference$name + exp.name <- recipe$Analysis$Datasets$System$name + + variable <- c("tas", "tos", "sic") + store.freq <- recipe$Analysis$Variables$freq + + if(is.null(recipe$Analysis$Variables$sic_threshold)){ + sic.threshold = 0.15 + } else { + sic.threshold <- recipe$Analysis$Variables$sic_threshold + } + + data_order <- c('dat', 'var', 'sday', 'sweek', 'syear', 'time', 'latitude', 'longitude', 'ensemble') + + + # get sdates array + ## LOGGER: Change dates2load to extract logger from recipe? + sdates <- dates2load(recipe, recipe$Run$logger) + + idxs <- NULL + idxs$hcst <- get_timeidx(sdates$hcst, + recipe$Analysis$Time$ftime_min, + recipe$Analysis$Time$ftime_max, + time_freq=store.freq) + + if (!(is.null(sdates$fcst))) { + idxs$fcst <- get_timeidx(sdates$fcst, + recipe$Analysis$Time$ftime_min, + recipe$Analysis$Time$ftime_max, + time_freq=store.freq) + } + + # get esarchive datasets dict: + archive <- read_yaml("conf/archive.yml")[[recipe$Run$filesystem]] + exp_descrip <- archive$System[[exp.name]] + + freq.hcst <- unlist(exp_descrip[[store.freq]][variable[1]]) + reference_descrip <- archive$Reference[[ref.name]] + freq.obs <- unlist(reference_descrip[[store.freq]][variable[1]]) + obs.dir <- reference_descrip$src + fcst.dir <- exp_descrip$src + hcst.dir <- exp_descrip$src + fcst.nmember <- exp_descrip$nmember$fcst + hcst.nmember <- exp_descrip$nmember$hcst + + var_dir_obs <- reference_descrip[[store.freq]][variable] + var_dir_exp <- exp_descrip[[store.freq]][variable] + + # ----------- + obs.path <- paste0(archive$src, obs.dir, "$var_dir$", + "$var$_$file_date$.nc") + + hcst.path <- paste0(archive$src, hcst.dir, "$var_dir$", + "$var$_$file_date$.nc") + + fcst.path <- paste0(archive$src, hcst.dir, "$var_dir$", + "/$var$_$file_date$.nc") + + # Define regrid parameters: + #------------------------------------------------------------------- + regrid_params <- get_regrid_params(recipe, archive) + + # Longitude circular sort and latitude check + #------------------------------------------------------------------- + circularsort <- check_latlon(lats.min, lats.max, lons.min, lons.max) + + if (recipe$Analysis$Variables$freq == "monthly_mean"){ + split_multiselected_dims = TRUE + } else { + split_multiselected_dims = FALSE + } + + # Load hindcast data without regrid + #------------------------------------------------------------------- + hcst <- Start(dat = hcst.path, + var = variable, + var_dir = var_dir_exp, + file_date = sdates$hcst, + time = idxs$hcst, + var_dir_depends = 'var', + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(decreasing = TRUE), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = circularsort, + synonims = list(latitude = c('lat', 'latitude'), + longitude = c('lon', 'longitude'), + ensemble = c('member', 'ensemble')), + ensemble = indices(1:hcst.nmember), + metadata_dims = 'var', # change to just 'var'? + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = 'file_date'), + split_multiselected_dims = split_multiselected_dims, + retrieve = TRUE) + + + # Remove var_dir dimension + if ("var_dir" %in% names(dim(hcst))) { + hcst <- Subset(hcst, along = "var_dir", indices = 1, drop = "selected") + } + + if (recipe$Analysis$Variables$freq == "daily_mean") { + # Adjusts dims for daily case, could be removed if startR allows + # multidim split + names(dim(hcst))[which(names(dim(hcst)) == 'file_date')] <- "syear" + default_dims <- c(dat = 1, var = 1, sday = 1, + sweek = 1, syear = 1, time = 1, + latitude = 1, longitude = 1, ensemble = 1) + default_dims[names(dim(hcst))] <- dim(hcst) + dim(hcst) <- default_dims + # Change time attribute dimensions + default_time_dims <- c(sday = 1, sweek = 1, syear = 1, time = 1) + names(dim(attr(hcst, "Variables")$common$time))[which(names( + dim(attr(hcst, "Variables")$common$time)) == 'file_date')] <- "syear" + default_time_dims[names(dim(attr(hcst, "Variables")$common$time))] <- + dim(attr(hcst, "Variables")$common$time) + dim(attr(hcst, "Variables")$common$time) <- default_time_dims + } + + # Define sea-ice grid points based of sea-ice concentration threshold + ice_hcst <- hcst[,3,,,,,,,] >= sic.threshold + + # Replace Tos with Tas for data points with sea ice + hcst[,2,,,,,,,][ice_hcst] <- hcst[,1,,,,,,,][ice_hcst] + + + # Convert hcst to s2dv_cube object + ## TODO: Give correct dimensions to $Dates + ## (sday, sweek, syear instead of file_date) + hcst <- as.s2dv_cube(hcst) + # Adjust dates for models where the time stamp goes into the next month + if (recipe$Analysis$Variables$freq == "monthly_mean") { + hcst$attrs$Dates[] <- hcst$attrs$Dates - seconds(exp_descrip$time_stamp_lag) + } + + # Combine hcst tas and tos data + #------------------------------------------------------------------- + + hcst <- mask_tas_tos(input_data = hcst, region = c(lons.min, lons.max,lats.min, lats.max), + mask_path = archive$System[[exp.name]]$land_sea_mask, lsm_var_name = 'lsm', + lon = hcst$coords$longitude, lat = hcst$coords$latitude, + lon_dim = 'longitude', lat_dim = 'latitude', ncores = NULL) + + hcst$dims[['var']] <- dim(hcst$data)[['var']] + hcst$attrs$Variable$varName <- 'tas-tos' + + hcst$data <- Reorder(hcst$data, data_order) + + # Load forecast data without regrid + #------------------------------------------------------------------- + if (!is.null(recipe$Analysis$Time$fcst_year)) { + # the call uses file_date instead of fcst_syear so that it can work + # with the daily case and the current version of startR not allowing + # multiple dims split + + fcst <- Start(dat = fcst.path, + var = variable, + var_dir = var_dir_exp, + var_dir_depends = 'var', + file_date = sdates$fcst, + time = idxs$fcst, + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(decreasing = TRUE), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = circularsort, + synonims = list(latitude = c('lat', 'latitude'), + longitude = c('lon', 'longitude'), + ensemble = c('member', 'ensemble')), + ensemble = indices(1:fcst.nmember), + metadata_dims = 'var', + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = 'file_date'), + split_multiselected_dims = split_multiselected_dims, + retrieve = TRUE) + + if ("var_dir" %in% names(dim(fcst))) { + fcst <- Subset(fcst, along = "var_dir", indices = 1, drop = "selected") + } + + if (recipe$Analysis$Variables$freq == "daily_mean") { + # Adjusts dims for daily case, could be removed if startR allows + # multidim split + names(dim(fcst))[which(names(dim(fcst)) == 'file_date')] <- "syear" + default_dims <- c(dat = 1, var = 1, sday = 1, + sweek = 1, syear = 1, time = 1, + latitude = 1, longitude = 1, ensemble = 1) + default_dims[names(dim(fcst))] <- dim(fcst) + dim(fcst) <- default_dims + # Change time attribute dimensions + default_time_dims <- c(sday = 1, sweek = 1, syear = 1, time = 1) + names(dim(attr(fcst, "Variables")$common$time))[which(names( + dim(attr(fcst, "Variables")$common$time)) == 'file_date')] <- "syear" + default_time_dims[names(dim(attr(fcst, "Variables")$common$time))] <- + dim(attr(fcst, "Variables")$common$time) + dim(attr(fcst, "Variables")$common$time) <- default_time_dims + } + + # Define sea-ice grid points based of sea-ice concentration threshold + ice_fcst <- fcst[,3,,,,,,,] >= sic.threshold + + # Replace Tos with Tas for datapoints with sea ice + fcst[,2,,,,,,,][ice_fcst] <- fcst[,1,,,,,,,][ice_fcst] + + + # Convert fcst to s2dv_cube + fcst <- as.s2dv_cube(fcst) + # Adjust dates for models where the time stamp goes into the next month + if (recipe$Analysis$Variables$freq == "monthly_mean") { + fcst$attrs$Dates[] <- + fcst$attrs$Dates - seconds(exp_descrip$time_stamp_lag) + } + + # Combine fcst tas and tos data + #------------------------------------------------------------------- + + fcst <- mask_tas_tos(input_data = fcst, region = c(lons.min, lons.max,lats.min, lats.max), + mask_path = archive$System[[exp.name]]$land_sea_mask, lsm_var_name = 'lsm', + lon = fcst$coords$longitude, lat = fcst$coords$latitude, + lon_dim = 'longitude', lat_dim = 'latitude', ncores = NULL) + + fcst$dims[['var']] <- dim(fcst$data)[['var']] + fcst$attrs$Variable$varName <- 'tas-tos' + + fcst$data <- Reorder(fcst$data, data_order) + + } else { + fcst <- NULL + } + + # Load obs data without regrid + #------------------------------------------------------------------- + + # Obtain dates and date dimensions from the loaded hcst data to make sure + # the corresponding observations are loaded correctly. + dates <- hcst$attrs$Dates + dim(dates) <- hcst$dims[c("sday", "sweek", "syear", "time")] + + # Separate Start() call for monthly vs daily data + if (store.freq == "monthly_mean") { + + dates_file <- format(as.Date(dates, '%Y%m%d'), "%Y%m") + dim(dates_file) <- dim(dates) + + + # Define variables for blended tas-tos datasets + if (recipe$Analysis$Datasets$Reference$name == 'BEST'){ + variable <- 'tas' + var_dir_obs <- reference_descrip[[store.freq]][variable] + } + + obs <- Start(dat = obs.path, + var = variable, + var_dir = var_dir_obs, + var_dir_depends = 'var', + file_date = dates_file, + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(decreasing = TRUE), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = circularsort, + synonims = list(latitude = c('lat','latitude'), + longitude = c('lon','longitude')), + metadata_dims = 'var', + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = 'file_date'), + split_multiselected_dims = TRUE, + retrieve = TRUE) + + + } else if (store.freq == "daily_mean") { + + # Get year and month for file_date + dates_file <- sapply(dates, format, '%Y%m') + dim(dates_file) <- dim(dates) + # Set hour to 12:00 to ensure correct date retrieval for daily data + lubridate::hour(dates) <- 12 + lubridate::minute(dates) <- 00 + # Restore correct dimensions + dim(dates) <- dim(dates_file) + + obs <- Start(dat = obs.path, + var = variable, + var_dir = var_dir_obs, + var_dir_depends = 'var', + file_date = sort(unique(dates_file)), + time = dates, + time_var = 'time', + time_across = 'file_date', + merge_across_dims = TRUE, + merge_across_dims_narm = TRUE, + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(decreasing = TRUE), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = circularsort, + synonims = list(latitude = c('lat','latitude'), + longitude = c('lon','longitude')), + metadata_dims = 'var', + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = 'file_date'), + split_multiselected_dims = TRUE, + retrieve = TRUE) + + } + + # Remove var_dir dimension + if ("var_dir" %in% names(dim(obs))) { + obs <- Subset(obs, along = "var_dir", indices = 1, drop = "selected") + } + # Adds ensemble dim to obs (for consistency with hcst/fcst) + default_dims <- c(dat = 1, var = 1, sday = 1, + sweek = 1, syear = 1, time = 1, + latitude = 1, longitude = 1, ensemble = 1) + default_dims[names(dim(obs))] <- dim(obs) + dim(obs) <- default_dims + + if(!recipe$Analysis$Datasets$Reference$name %in% c('HadCRUT4','HadCRUT5','BEST','GISTEMPv4')){ + + # Define sea-ice grid points based of sea-ice concentration threshold + ice_obs <- (obs[,3,,,,,,,]) >= sic.threshold + + # Replace NA values with False + ice_obs[is.na(ice_obs)] <- FALSE + + # Replace Tos with Tas for datapoints with sea ice + obs[,2,,,,,,,][ice_obs] <- obs[,1,,,,,,,][ice_obs] + } + + # Convert obs to s2dv_cube + obs <- as.s2dv_cube(obs) + + + # Combine obs tas and tos data + #------------------------------------------------------------------- + ## TODO: Ask about this list + if(!recipe$Analysis$Datasets$Reference$name %in% c('HadCRUT4','HadCRUT5','BEST','GISTEMPv4')){ + + obs <- mask_tas_tos(input_data = obs, region = c(lons.min, lons.max,lats.min, lats.max), + mask_path = archive$Reference[[ref.name]]$land_sea_mask, lsm_var_name = 'sftof', + lon = obs$coords$longitude, lat = obs$coords$latitude, + lon_dim = 'longitude', lat_dim = 'latitude', ncores = NULL) + + obs$dims[['var']] <- dim(obs$data)[['var']] + obs$attrs$Variable$varName <- 'tas-tos' + + } ## close if on reference name + + obs$data <- Reorder(obs$data, data_order) + + + # Regrid data + #------------------------------------------------------------------- + + # Regrid reference to system grid: + if(recipe$Analysis$Regrid$type == 'to_system'){ + + aux <- CDORemap(data_array = obs$data, ## Not regridding to desired grid when latitudes are ordered descending + lons = obs$coords$longitude, + lats = obs$coords$latitude, + grid = regrid_params$obs.gridtype, + method = recipe$Analysis$Regrid$method, + avoid_writes = TRUE, + crop = c(lons.min, lons.max,lats.min, lats.max), + force_remap = TRUE) + + obs$data <- aux$data_array + obs$coords$longitude <- aux$lons + obs$coords$latitude <- aux$lats + obs$dims['longitude'] <- dim(aux$data_array)['longitude'] + obs$dims['latitude'] <- dim(aux$data_array)['latitude'] + rm(aux) + } + + # Regrid system to reference grid: + if(recipe$Analysis$Regrid$type == 'to_reference'){ + + aux <- CDORemap(data_array = hcst$data, + lons = hcst$coords$longitude, lats = hcst$coords$latitude, + grid = regrid_params$fcst.gridtype, method = recipe$Analysis$Regrid$method, + avoid_writes = TRUE, crop = TRUE, + force_remap = TRUE) + + hcst$data <- aux$data_array + hcst$coords$longitude <- aux$lons + hcst$coords$latitude <- aux$lats + hcst$dims['longitude'] <- dim(aux$data_array)['longitude'] + hcst$dims['latitude'] <- dim(aux$data_array)['latitude'] + rm(aux) + + if (!is.null(recipe$Analysis$Time$fcst_year)) { + aux <- CDORemap(data_array = fcst$data, + lons = fcst$coords$longitude, + lats = fcst$coords$latitude, + grid = regrid_params$fcst.gridtype, + method = recipe$Analysis$Regrid$method, + avoid_writes = TRUE, crop = TRUE, + force_remap = TRUE) + + fcst$data <- aux$data_array + fcst$coords$longitude <- aux$lons + fcst$coords$latitude <- aux$lats + fcst$dims['longitude'] <- dim(aux$data_array)['longitude'] + fcst$dims['latitude'] <- dim(aux$data_array)['latitude'] + rm(aux) + } + } + + # Regrid all data to user defined grid: + if(!recipe$Analysis$Regrid$type %in% c('to_system','to_reference')){ + + aux <- CDORemap(data_array = hcst$data, + lons = hcst$coords$longitude, lats = hcst$coords$latitude, + grid = regrid_params$fcst.gridtype, method = recipe$Analysis$Regrid$method, + avoid_writes = TRUE, crop = TRUE, + force_remap = TRUE) + + hcst$data <- aux$data_array + hcst$coords$longitude <- aux$lons + hcst$coords$latitude <- aux$lats + hcst$dims['longitude'] <- dim(aux$data_array)['longitude'] + hcst$dims['latitude'] <- dim(aux$data_array)['latitude'] + rm(aux) + + if (!is.null(recipe$Analysis$Time$fcst_year)) { + aux <- CDORemap(data_array = fcst$data, + lons = fcst$coords$longitude, + lats = fcst$coords$latitude, + grid = regrid_params$fcst.gridtype, + method = recipe$Analysis$Regrid$method, + avoid_writes = TRUE, crop = TRUE, + force_remap = TRUE) + + fcst$data <- aux$data_array + fcst$coords$longitude <- aux$lons + fcst$coords$latitude <- aux$lats + fcst$dims['longitude'] <- dim(aux$data_array)['longitude'] + fcst$dims['latitude'] <- dim(aux$data_array)['latitude'] + rm(aux) + } + + aux <- CDORemap(data_array = obs$data, + lons = obs$coords$longitude, + lats = obs$coords$latitude, + grid = regrid_params$obs.gridtype, + method = recipe$Analysis$Regrid$method, + avoid_writes = TRUE, crop = TRUE, + force_remap = TRUE) + + obs$data <- aux$data_array + obs$coords$longitude <- aux$lons + obs$coords$latitude <- aux$lats + obs$dims['longitude'] <- dim(aux$data_array)['longitude'] + obs$dims['latitude'] <- dim(aux$data_array)['latitude'] + rm(aux) + } + + + # Check for consistency between hcst and obs grid + if (!(recipe$Analysis$Regrid$type == 'none')) { + if (!isTRUE(all.equal(as.vector(hcst$lat), as.vector(obs$lat)))) { + lat_error_msg <- paste("Latitude mismatch between hcst and obs.", + "Please check the original grids and the", + "regrid parameters in your recipe.") + error(recipe$Run$logger, lat_error_msg) + hcst_lat_msg <- paste0("First hcst lat: ", hcst$lat[1], + "; Last hcst lat: ", hcst$lat[length(hcst$lat)]) + info(recipe$Run$logger, hcst_lat_msg) + obs_lat_msg <- paste0("First obs lat: ", obs$lat[1], + "; Last obs lat: ", obs$lat[length(obs$lat)]) + info(recipe$Run$logger, obs_lat_msg) + stop("hcst and obs don't share the same latitudes.") + } + if (!isTRUE(all.equal(as.vector(hcst$lon), as.vector(obs$lon)))) { + lon_error_msg <- paste("Longitude mismatch between hcst and obs.", + "Please check the original grids and the", + "regrid parameters in your recipe.") + error(recipe$Run$logger, lon_error_msg) + hcst_lon_msg <- paste0("First hcst lon: ", hcst$lon[1], + "; Last hcst lon: ", hcst$lon[length(hcst$lon)]) + info(recipe$Run$logger, hcst_lon_msg) + obs_lon_msg <- paste0("First obs lon: ", obs$lon[1], + "; Last obs lon: ", obs$lon[length(obs$lon)]) + info(recipe$Run$logger, obs_lon_msg) + stop("hcst and obs don't share the same longitudes.") + + } + } + + info(recipe$Run$logger, + "##### DATA LOADING COMPLETED SUCCESSFULLY #####") + + return(list(hcst = hcst, fcst = fcst, obs = obs)) +} diff --git a/modules/Loading/R/mask_tas_tos.R b/modules/Loading/R/mask_tas_tos.R index a2eeb0b6..cc693795 100644 --- a/modules/Loading/R/mask_tas_tos.R +++ b/modules/Loading/R/mask_tas_tos.R @@ -2,29 +2,28 @@ library(multiApply) library(startR) library(s2dv) -mask_tas_tos <- function(input_data, grid, lon, lat, region = region , - lon_dim = 'lon', lat_dim = 'lat', ncores = NULL){ +mask_tas_tos <- function(input_data, mask_path, lsm_var_name = lsm_var_name, lon, lat, region = region, + lon_dim = 'lon', lat_dim = 'lat', + ncores = NULL){ - - mask <- .load_mask(grid = grid, lon_dim = lon_dim, lat_dim = lat_dim, + + mask <- .load_mask(mask_path = mask_path, lsm_var_name = lsm_var_name, lon_dim = lon_dim, lat_dim = lat_dim, sea_value = 1, land_value = 0, region = region) - ## TO DO: improve the check and correct lats stopifnot(all(lon == mask$lon)) stopifnot(max(abs(as.numeric(round(lat,2) - round(mask$lat,2)))) < 0.1) # stopifnot(all(lat == mask$lat)) - + tas <- Subset(input_data$data, along = 'var', indices = 1) tos <- Subset(input_data$data, along = 'var', indices = 2) - tas_tos <- multiApply::Apply(data = list(tas, tos), - target_dims = c(lon_dim, lat_dim), - fun = .mask_tas_tos, - mask = mask$mask, - sea_value = 1, - ncores = ncores)$output1 - input_data$data <- tas_tos - + input_data$data <- multiApply::Apply(data = list(tas, tos), + target_dims = c(lon_dim, lat_dim), + fun = .mask_tas_tos, + mask = mask$mask, + sea_value = 1, + ncores = ncores)$output1 + return(input_data) } @@ -33,52 +32,32 @@ mask_tas_tos <- function(input_data, grid, lon, lat, region = region , return(data_tas) } -.load_mask <- function(grid, mask_path = NULL, land_value = 0, sea_value = 1, +.load_mask <- function(mask_path = mask_path, lsm_var_name = lsm_var_name, land_value = 0, sea_value = 1, lon_dim = 'lon', lat_dim = 'lat', region = region){ - if (is.null(mask_path)){ - mask_sea_land_path <- '/esarchive/exp/ecmwf/system5c3s/constant/lsm/lsm.nc' ## /esarchive/recon/ecmwf/era5land/constant/lsm-r3600x1801cds/lsm.nc' - } else if (is.character(mask_path)){ - mask_sea_land_path <- mask_path - } else { - stop("mask_path must be NULL (to use the default mask and interpolate it to - the specified grid) or a string with the mask's path you want to load") - } - lons.min <- region[1] lons.max <- region[2] lats.min <- region[3] lats.max <- region[4] - - ## TO DO: - ## Fix region filter for lat and lon - ## Fix 'number' parameter for mask - - data <- startR::Start(dat = mask_sea_land_path, - var = 'lsm', - lon = 'all', - lat = 'all', - number = 1, ## needed to add for ensemble member dimension of lsm.nc - # lon = values(list(lons.min, lons.max)), - # lat = values(list(lats.min, lats.max)), - transform = CDORemapper, transform_extra_cells = 2, - transform_params = list(grid = grid, method = 'con', crop = region), - transform_vars = c('lat','lon'), + data <- startR::Start(dat = mask_path, + var = lsm_var_name, + lon = values(list(lons.min, lons.max)), + lat = values(list(lats.min, lats.max)), return_vars = list(lat = NULL, lon = NULL), synonims = list(lon = c('lon','longitude'), lat = c('lat','latitude')), - lat_reorder = Sort(decreasing = FALSE), - lon_reorder = CircularSort(0,359.9), + lat_reorder = Sort(decreasing = TRUE), + lon_reorder = CircularSort(0,360), num_procs = 1, retrieve = TRUE) - + mask <- list(mask = drop(data), lon = as.numeric(attr(data,'Variables')$common$lon), lat = as.numeric(attr(data,'Variables')$common$lat)) mask$mask[data <= 0.5] <- sea_value mask$mask[data > 0.5] <- land_value - names(dim(mask$mask)) <- c(lon_dim, lat_dim) + names(dim(mask$mask)) <- c(lon_dim, lat_dim) return(mask) } diff --git a/recipes/atomic_recipes/recipe_tas-tos_nadia.yml b/recipes/atomic_recipes/recipe_tas-tos_nadia.yml new file mode 100644 index 00000000..466659a2 --- /dev/null +++ b/recipes/atomic_recipes/recipe_tas-tos_nadia.yml @@ -0,0 +1,55 @@ +Description: + Author: V. Agudetse + +Analysis: + Horizon: Seasonal + Variables: + name: tas-tos + sic_threshold: 0.15 ## sea ice threshold for tas-tos blending, default = 0.15 + freq: monthly_mean + Datasets: + System: + name: ECMWF-SEAS5 + Multimodel: False + Reference: + name: BEST + Time: + sdate: '0101' + #fcst_year: + hcst_start: '2014' + hcst_end: '2016' + ftime_min: 1 + ftime_max: 1 + Region: + latmin: -90 + latmax: 90 + lonmin: 0 + lonmax: 359.9 + Regrid: + method: bilinear + type: to_system + Workflow: + Calibration: + method: raw + save: 'none' + Anomalies: + compute: yes + cross_validation: no + save: 'none' + Skill: + metric: mean_bias EnsCorr RPS RPSS CRPS CRPSS enssprerr + cross_validation: no + save: 'all' + Probabilities: + percentiles: [[1/3, 2/3]] + save: 'none' + Indicators: + index: no + ncores: 15 + remove_NAs: yes + Output_format: scorecards +Run: + Loglevel: INFO + Terminal: yes + output_dir: /esarchive/scratch/nmilders/scorecards_data/test/ + code_dir: /esarchive/scratch/nmilders/gitlab/git_clones/s2s-suite_tas-tos/ diff --git a/tests/recipes/recipe-seasonal_monthly_1_tas-tos.yml b/tests/recipes/recipe-seasonal_monthly_1_tas-tos.yml new file mode 100644 index 00000000..41048db1 --- /dev/null +++ b/tests/recipes/recipe-seasonal_monthly_1_tas-tos.yml @@ -0,0 +1,56 @@ +Description: + Author: N. Milders + +Analysis: + Horizon: Seasonal + Variables: + name: tas-tos + sic_threshold: 0.15 + freq: monthly_mean + Datasets: + System: + name: ECMWF-SEAS5 + Multimodel: False + Reference: + name: ERA5 + Time: + sdate: '0101' + fcst_year: '2018' + hcst_start: '1993' + hcst_end: '1996' + ftime_min: 1 + ftime_max: 3 + Region: + latmin: 17 + latmax: 20 + lonmin: 12 + lonmax: 15 + Regrid: + method: bilinear + type: to_system + Workflow: + Anomalies: + compute: no + cross_validation: + save: 'none' + Calibration: + method: mse_min + save: 'all' + Skill: + metric: RPSS CRPSS EnsCorr Corr_individual_members Enscorr_specs + save: 'all' + Probabilities: + percentiles: [[1/3, 2/3], [1/10, 9/10]] + save: 'all' + Indicators: + index: no + Visualization: + plots: skill_metrics most_likely_terciles forecast_ensemble_mean + multi_panel: yes + projection: cylindrical_equidistant + Output_format: S2S4E +Run: + Loglevel: INFO + Terminal: yes + output_dir: ./tests/out-logs/ + code_dir: /esarchive/scratch/nmilders/gitlab/git_clones/auto-s2s/ ##/esarchive/scratch/vagudets/repos/auto-s2s/ diff --git a/tests/testthat/test-seasonal_monthly_tas-tos.R b/tests/testthat/test-seasonal_monthly_tas-tos.R new file mode 100644 index 00000000..1345f63d --- /dev/null +++ b/tests/testthat/test-seasonal_monthly_tas-tos.R @@ -0,0 +1,98 @@ +context("Seasonal monthly data") + +source("./modules/Loading/Loading.R") + +recipe_file <- "tests/recipes/recipe-seasonal_monthly_1_tas-tos.yml" +recipe <- prepare_outputs(recipe_file, disable_checks = F) +archive <- read_yaml(paste0(recipe$Run$code_dir, "conf/archive.yml"))$archive + +# Load datasets +suppressWarnings({invisible(capture.output( +data <- Loading(recipe) +))}) + + +# ------- TESTS -------- + +test_that("1. Loading", { + +expect_equal( +is.list(data), +TRUE +) +expect_equal( +names(data), +c("hcst", "fcst", "obs") +) +expect_equal( +class(data$hcst), +"s2dv_cube" +) +expect_equal( +class(data$fcst), +"s2dv_cube" +) +expect_equal( +class(data$obs), +"s2dv_cube" +) +expect_equal( +names(data$hcst), +c("data", "dims", "coords", "attrs") +) +expect_equal( +names(data$hcst), +names(data$fcst) +) +expect_equal( +names(data$hcst), +names(data$obs) +) +expect_equal( +dim(data$hcst$data), +c(dat = 1, var = 1, sday = 1, sweek = 1, syear = 4, time = 3, latitude = 4, longitude = 4, ensemble = 25) +) +expect_equal( +dim(data$fcst$data), +c(dat = 1, var = 1, sday = 1, sweek = 1, syear = 1, time = 3, latitude = 4, longitude = 4, ensemble = 51) +) +expect_equal( +dim(data$hcst$attrs$Dates), +c(sday = 1, sweek = 1, syear = 4, time = 3) +) +expect_equal( +as.vector(drop(data$hcst$data)[1:2,1:2,1,2,3]), +c(285.5869, 287.8836, 285.9362, 289.0483), +tolerance = 0.0001 +) +expect_equal( +mean(data$hcst$data), +290.1099, +tolerance = 0.0001 +) +expect_equal( +range(data$hcst$data), +c(283.2845, 299.7845), +tolerance = 0.0001 +) +expect_equal( +(data$hcst$attrs$Dates)[1], +as.POSIXct("1993-01-31 18:00:00", tz = 'UTC') +) +expect_equal( +(data$hcst$attrs$Dates)[2], +as.POSIXct("1994-01-31 18:00:00", tz = 'UTC') +) +expect_equal( +(data$hcst$attrs$Dates)[5], +as.POSIXct("1993-02-28 18:00:00", tz = 'UTC') +) +expect_equal( +(data$obs$attrs$Dates)[10], +as.POSIXct("1994-03-15 12:00:00", tz = 'UTC') +) + +}) + +# Delete files +unlink(recipe$Run$output_dir, recursive = T) diff --git a/tools/check_recipe.R b/tools/check_recipe.R index e4c59a55..69a7dd4c 100644 --- a/tools/check_recipe.R +++ b/tools/check_recipe.R @@ -62,6 +62,18 @@ check_recipe <- function(recipe) { } else { archive <- NULL } + # Check variable parameters + variables <- tolower(strsplit(recipe$Analysis$Variables$name, ", | |,")[[1]]) + # Sea-ice threshold check + if (("tas-tos" %in% variables) && + (!is.null(recipe$Analysis$Variables$sic_threshold))) { + if (!is.numeric(recipe$Analysis$Variables$sic_threshold) || + dplyr::between(recipe$Analysis$Variables$sic_threshold, 0, 1)) { + error(recipe$Run$logger, + paste("The element Analysis:Variables:sic_threshold must be a", + "numeric value between 0 and 1.")) + } + } # Check system names if (!is.null(archive)) { if (!all(recipe$Analysis$Datasets$System$name %in% names(archive$System))) { diff --git a/tools/prepare_outputs.R b/tools/prepare_outputs.R index fa4d23ed..54e82095 100644 --- a/tools/prepare_outputs.R +++ b/tools/prepare_outputs.R @@ -89,6 +89,10 @@ prepare_outputs <- function(recipe_file, warn(recipe$Run$logger, "Filesystem not specified in the recipe. Setting it to 'esarchive'.") } + # Restructure the recipe to make the atomic recipe more readable + if (restructure) { + recipe <- restructure_recipe(recipe) + } # Run recipe checker if (disable_checks) { warn(recipe$Run$logger, @@ -96,9 +100,5 @@ prepare_outputs <- function(recipe_file, } else { check_recipe(recipe) } - # Restructure the recipe to make the atomic recipe more readable - if (restructure) { - recipe <- restructure_recipe(recipe) - } return(recipe) } -- GitLab From dca341e1fb6cccc08378de482325d56f24d409a1 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Mon, 20 Nov 2023 15:46:32 +0100 Subject: [PATCH 345/388] Add 'tos' to MeteoFrance System 7 --- conf/archive.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/conf/archive.yml b/conf/archive.yml index 0b643ae9..e6e4a2c5 100644 --- a/conf/archive.yml +++ b/conf/archive.yml @@ -53,7 +53,8 @@ esarchive: src: "exp/meteofrance/system7c3s/" monthly_mean: {"tas":"monthly_mean/tas_f6h/", "g500":"monthly_mean/g500_f12h/", "prlr":"monthly_mean/prlr_f24h/", "sfcWind": "monthly_mean/sfcWind_f6h/", - "tasmax":"monthly_mean/tasmax_f6h/", "tasmin": "monthly_mean/tasmin_f6h/"} + "tasmax":"monthly_mean/tasmax_f6h/", "tasmin": "monthly_mean/tasmin_f6h/", + "tos":"monthly_mean/tos_f6h/"} nmember: fcst: 51 hcst: 25 -- GitLab From 75da4ee121aa5c62672859b4db15e007a78a1c4a Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Mon, 20 Nov 2023 15:46:57 +0100 Subject: [PATCH 346/388] =?UTF-8?q?Add=20usecase=201.3=20(El=20Ni=C3=B1o?= =?UTF-8?q?=20indices=20on=20multiple=20systems)=20(WIP)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ex1_3-recipe.yml | 57 +++++++++++++++++++ .../ex1_3_nino_indices_comparison.R | 38 +++++++++++++ 2 files changed, 95 insertions(+) create mode 100644 use_cases/ex1_3_nino_indices_comparison/ex1_3-recipe.yml create mode 100644 use_cases/ex1_3_nino_indices_comparison/ex1_3_nino_indices_comparison.R diff --git a/use_cases/ex1_3_nino_indices_comparison/ex1_3-recipe.yml b/use_cases/ex1_3_nino_indices_comparison/ex1_3-recipe.yml new file mode 100644 index 00000000..b563e4ac --- /dev/null +++ b/use_cases/ex1_3_nino_indices_comparison/ex1_3-recipe.yml @@ -0,0 +1,57 @@ +Description: + Author: V. Agudetse + Info: Computing El Nino indices for ECMWF SEAS5 and MeteoFrance System7 + +Analysis: + Horizon: seasonal + Variables: + - {name: tos, freq: monthly_mean, units: K} + Datasets: + System: + - {name: ECMWF-SEAS5} + - {name: Meteo-France-System7} + Multimodel: no + Reference: + - {name: ERA5} + Time: + sdate: '1101' + fcst_year: '2021' + hcst_start: '1993' + hcst_end: '2016' + ftime_min: 2 + ftime_max: 4 + Region: + latmin: -90 + latmax: 90 + lonmin: 0 + lonmax: 359.9 + Regrid: + method: 'bilinear' + type: 'to_system' + Workflow: + Anomalies: + compute: yes + cross_validation: no + save: none + Indices: + Nino1+2: {save: 'all', plot_ts: TRUE, plot_sp: TRUE} + Nino3: {save: 'all', plot_ts: TRUE, plot_sp: TRUE} + Nino3.4: {save: 'all', plot_ts: TRUE, plot_sp: TRUE} + Nino4: {save: 'all', plot_ts: TRUE, plot_sp: TRUE} + Skill: + metric: mean_bias EnsCorr rps rpss crps crpss EnsSprErr + save: 'all' + Probabilities: + percentiles: [[1/3, 2/3], [1/10, 9/10]] + save: none + Indicators: + index: no + ncores: 8 + remove_NAs: no + Output_format: S2S4E + logo: TRUE +Run: + Loglevel: INFO + Terminal: yes + output_dir: /esarchive/scratch/vagudets/auto-s2s-outputs/ # ______ + code_dir: /esarchive/scratch/vagudets/repos/auto-s2s/ # _____ diff --git a/use_cases/ex1_3_nino_indices_comparison/ex1_3_nino_indices_comparison.R b/use_cases/ex1_3_nino_indices_comparison/ex1_3_nino_indices_comparison.R new file mode 100644 index 00000000..c2b44541 --- /dev/null +++ b/use_cases/ex1_3_nino_indices_comparison/ex1_3_nino_indices_comparison.R @@ -0,0 +1,38 @@ +############################################################################### +## Author: Núria Pérez-Zanón +## Description: Computes the Niño1+2, Niño3, Niño3.4 and Niño4 indices and some +## some skill metrics for each index. +## Instructions: To run it, modify the recipe to set your own output directory. +############################################################################### + +# Load modules +source("modules/Loading/Loading.R") +source("modules/Anomalies/Anomalies.R") +source("modules/Indices/Indices.R") +source("modules/Skill/Skill.R") + +# Read recipe +recipe_file <- "use_cases/ex1_3_nino_indices_comparison/ex1_3-recipe.yml" +recipe <- prepare_outputs(recipe_file) + +data <- Loading(recipe) +data <- Units(recipe, data) +data <- Anomalies(recipe, data) +nino_indices <- Indices(data = data, recipe = recipe) + +str(nino_indices, max.level = 3) +for (index in nino_indices) { + skill_metrics <- Skill(recipe = recipe, data = index, agg = "region") +} + +# skill_metrics <- Skill(recipe = recipe, data = nino_indices$Nino1, +# agg = 'region') +# skill_metrics <- Skill(recipe = recipe, data = nino_indices$Nino3, +# agg = 'region') +# +# skill_metrics <- Skill(recipe = recipe, data = nino_indices$Nino4, +# agg = 'region') +# +# skill_metrics <- Skill(recipe = recipe, data = nino_indices$Nino3.4, +# agg = 'region') +# -- GitLab From e37467430092981cd3fa5c31807171c394a6a84f Mon Sep 17 00:00:00 2001 From: Nadia Milders Date: Tue, 21 Nov 2023 16:27:56 +0100 Subject: [PATCH 347/388] included cross-validation for skill scores --- modules/Skill/R/CRPS_clim.R | 30 ++++++++++++++++++++++-------- modules/Skill/R/RPS_clim.R | 4 ++-- modules/Skill/Skill.R | 4 +++- 3 files changed, 27 insertions(+), 11 deletions(-) diff --git a/modules/Skill/R/CRPS_clim.R b/modules/Skill/R/CRPS_clim.R index 36db4e94..b66cab78 100644 --- a/modules/Skill/R/CRPS_clim.R +++ b/modules/Skill/R/CRPS_clim.R @@ -1,13 +1,27 @@ -CRPS_clim <- function(obs, memb_dim ='ensemble'){ +# CRPS version for climatology +CRPS_clim <- function(obs, memb_dim ='ensemble', return_mean = TRUE, clim.cross.val= TRUE){ time_dim <- names(dim(obs)) obs_time_len <- dim(obs)[time_dim] - + + if (isFALSE(clim.cross.val)) { ## Without cross-validation ref <- array(data = rep(obs, each = obs_time_len), dim = c(obs_time_len, obs_time_len)) - names(dim(ref)) <- c(time_dim, memb_dim) - # ref: [sdate, memb] - # obs: [sdate] + } else if (isTRUE(clim.cross.val)) { ## With cross-validation (excluding the value of that year to create ref for that year) + ref <- array(data = NA, dim = c(obs_time_len, obs_time_len - 1)) + for (i in 1:obs_time_len) { + ref[i, ] <- obs[-i] + } + } + + names(dim(ref)) <- c(time_dim, memb_dim) + # ref: [sdate, memb] + # obs: [sdate] crps_ref <- s2dv:::.CRPS(exp = ref, obs = obs, time_dim = time_dim, memb_dim = memb_dim, - dat_dim = NULL, Fair = FALSE) - # crps_ref should be [sdate] - return(mean(crps_ref)) + dat_dim = NULL, Fair = FALSE) + + # crps_ref should be [sdate] + if (return_mean == TRUE) { + return(mean(crps_ref)) + } else { + return(crps_ref) + } } diff --git a/modules/Skill/R/RPS_clim.R b/modules/Skill/R/RPS_clim.R index e8b6452d..c93c6747 100644 --- a/modules/Skill/R/RPS_clim.R +++ b/modules/Skill/R/RPS_clim.R @@ -1,12 +1,12 @@ # RPS version for climatology -RPS_clim <- function(obs, indices_for_clim = NULL, prob_thresholds = c(1/3, 2/3)) { +RPS_clim <- function(obs, indices_for_clim = NULL, prob_thresholds = c(1/3, 2/3), cross.val = TRUE) { if (is.null(indices_for_clim)){ indices_for_clim <- 1:length(obs) } obs_probs <- .GetProbs(data = obs, indices_for_quantiles = indices_for_clim, ## temporarily removed s2dv::: - prob_thresholds = prob_thresholds, weights = NULL, cross.val = T) ## here! + prob_thresholds = prob_thresholds, weights = NULL, cross.val = cross.val) # clim_probs: [bin, sdate] clim_probs <- c(prob_thresholds[1], diff(prob_thresholds), 1 - prob_thresholds[length(prob_thresholds)]) clim_probs <- array(clim_probs, dim = dim(obs_probs)) diff --git a/modules/Skill/Skill.R b/modules/Skill/Skill.R index fd54f17f..04fbc52e 100644 --- a/modules/Skill/Skill.R +++ b/modules/Skill/Skill.R @@ -89,6 +89,7 @@ Skill <- function(recipe, data, agg = 'global') { skill_metrics[[ metric ]] <- skill rps_clim <- Apply(list(data$obs$data), target_dims = c(time_dim, memb_dim), + cross.val = cross.val, RPS_clim)$output1 rps_clim <- .drop_dims(rps_clim) skill_metrics[[paste0(metric, "_clim")]] <- rps_clim @@ -140,7 +141,8 @@ Skill <- function(recipe, data, agg = 'global') { skill <- .drop_dims(skill) skill_metrics[[ metric ]] <- skill crps_clim <- Apply(list(data$obs$data), target_dims = time_dim, - fun = CRPS_clim, memb_dim = memb_dim)$output1 + fun = CRPS_clim, memb_dim = memb_dim, + clim.cross.val = cross.val)$output1 crps_clim <- .drop_dims(crps_clim) skill_metrics[['crps_clim']] <- crps_clim # CRPSS and FCRPSS -- GitLab From 44e53a691207c26a179d0c0ebfff635efb7ce857 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Wed, 22 Nov 2023 16:20:38 +0100 Subject: [PATCH 348/388] Correct variable retrieval in recipe checks --- tools/check_recipe.R | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/tools/check_recipe.R b/tools/check_recipe.R index 69a7dd4c..01b790b8 100644 --- a/tools/check_recipe.R +++ b/tools/check_recipe.R @@ -63,9 +63,14 @@ check_recipe <- function(recipe) { archive <- NULL } # Check variable parameters - variables <- tolower(strsplit(recipe$Analysis$Variables$name, ", | |,")[[1]]) + if ("name" %in% names(recipe$Analysis$Variables)) { + recipe_variables <- recipe$Analysis$Variables$name + } else { + recipe_variables <- sapply(recipe$Analysis$Variables, get, x = "name") + } + recipe_variables <- unlist(strsplit(recipe_variables, ", | |,")) # Sea-ice threshold check - if (("tas-tos" %in% variables) && + if (("tas-tos" %in% recipe_variables) && (!is.null(recipe$Analysis$Variables$sic_threshold))) { if (!is.numeric(recipe$Analysis$Variables$sic_threshold) || dplyr::between(recipe$Analysis$Variables$sic_threshold, 0, 1)) { @@ -434,7 +439,6 @@ check_recipe <- function(recipe) { error_status <- T } # Check that variables correspond with indices requested - recipe_variables <- strsplit(recipe$Analysis$Variables$name, ", | |,")[[1]] if (("nao" %in% recipe_indices) && (!all(recipe_variables %in% c("psl", "z500")))) { error(recipe$Run$logger, -- GitLab From 7c6b99f2236c08450fcdb04a6da3c55710ea79af Mon Sep 17 00:00:00 2001 From: aho Date: Thu, 23 Nov 2023 14:19:39 +0100 Subject: [PATCH 349/388] Avoid producing Inf when all data are NAs --- .../Indices/R/plot_deterministic_forecast.R | 9 +++++-- modules/Visualization/R/tmp/PlotRobinson.R | 25 ++++++++++++++++--- 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/modules/Indices/R/plot_deterministic_forecast.R b/modules/Indices/R/plot_deterministic_forecast.R index da107e47..30f13b78 100644 --- a/modules/Indices/R/plot_deterministic_forecast.R +++ b/modules/Indices/R/plot_deterministic_forecast.R @@ -16,8 +16,13 @@ plot_deterministic_forecast <- function(obs, fcst, title = NULL, n_fcst <- as.numeric(dim(fcst)[time_dim]) if (is.null(ylims)) { - ylims <- c(-max(abs(fcst) + 0.1, abs(obs) + 0.1, na.rm = TRUE), - max(abs(fcst) + 0.1, abs(obs) + 0.1, na.rm = TRUE)) + if (all(is.na(fcst)) && all(is.na(obs))) { + # No data, return random ylims + ylims <- c(-1, 1) + } else { + ylims <- c(-max(abs(fcst) + 0.1, abs(obs) + 0.1, na.rm = TRUE), + max(abs(fcst) + 0.1, abs(obs) + 0.1, na.rm = TRUE)) + } } if (is.null(xlabs)) { xlabs <- 1:n_fcst diff --git a/modules/Visualization/R/tmp/PlotRobinson.R b/modules/Visualization/R/tmp/PlotRobinson.R index d8210258..d50e7f36 100644 --- a/modules/Visualization/R/tmp/PlotRobinson.R +++ b/modules/Visualization/R/tmp/PlotRobinson.R @@ -251,7 +251,26 @@ PlotRobinson <- function(data, lon, lat, lon_dim = NULL, lat_dim = NULL, # Color bar ## Check: brks, cols, bar_limits, color_fun, bar_extra_margin, units ## Build: brks, cols, bar_limits, col_inf, col_sup - var_limits <- c(min(data, na.rm = TRUE), max(data, na.rm = TRUE)) + if (!all(is.na(data))) { + var_limits <- c(min(data[!is.infinite(data)], na.rm = TRUE), + max(data[!is.infinite(data)], na.rm = TRUE)) + } else { + warning("All the data are NAs. The map will be filled with colNA.") + if (!is.null(brks) && length(brks) > 1) { + #NOTE: var_limits be like this to avoid warnings from ColorBar + var_limits <- c(min(brks, na.rm = TRUE) + diff(brks)[1], + max(brks, na.rm = TRUE)) + } else if (!is.null(bar_limits)) { + var_limits <- c(bar_limits[1] + 0.01, bar_limits[2]) + } else { + var_limits <- c(-0.5, 0.5) # random range since colorbar is not going to be plotted + if (drawleg) { + drawleg <- FALSE + warning("All data are NAs. Color bar won't be drawn. If you want to have ", + "color bar still, define parameter 'brks' or 'bar_limits'.") + } + } + } colorbar <- ColorBar(brks = brks, cols = cols, vertical = vertical, subsampleg = NULL, bar_limits = bar_limits, var_limits = var_limits, triangle_ends = triangle_ends, col_inf = col_inf, col_sup = col_sup, color_fun = color_fun, @@ -317,12 +336,12 @@ PlotRobinson <- function(data, lon, lat, lon_dim = NULL, lat_dim = NULL, # Add triangles to brks brks_ggplot <- brks - if (max(data, na.rm = T) > tail(brks, 1)) { + if (var_limits[2] > tail(brks, 1)) { brks_ggplot <- c(brks_ggplot, max(data, na.rm = T)) } else { brks_ggplot <- c(brks_ggplot, tail(brks, 1) + diff(tail(brks, 2))) } - if (min(data, na.rm = T) < brks[1]) { + if (var_limits[1] < brks[1]) { brks_ggplot <- c(min(data, na.rm = T), brks_ggplot) } else { brks_ggplot <- c(brks[1] - diff(brks[1:2]), brks_ggplot) -- GitLab From 9e8cb02c88f3adc1b2da570fd23a0382df4512a5 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Thu, 23 Nov 2023 16:24:29 +0100 Subject: [PATCH 350/388] Add use case 1.3 (WIP) --- .../ex1_3-handson.md | 16 ++++++++ .../ex1_3-recipe.yml | 11 +++--- .../ex1_3-script.R | 35 +++++++++++++++++ .../ex1_3_nino_indices_comparison.R | 38 ------------------- 4 files changed, 57 insertions(+), 43 deletions(-) create mode 100644 use_cases/ex1_3_nino_indices_comparison/ex1_3-handson.md create mode 100644 use_cases/ex1_3_nino_indices_comparison/ex1_3-script.R delete mode 100644 use_cases/ex1_3_nino_indices_comparison/ex1_3_nino_indices_comparison.R diff --git a/use_cases/ex1_3_nino_indices_comparison/ex1_3-handson.md b/use_cases/ex1_3_nino_indices_comparison/ex1_3-handson.md new file mode 100644 index 00000000..e310d289 --- /dev/null +++ b/use_cases/ex1_3_nino_indices_comparison/ex1_3-handson.md @@ -0,0 +1,16 @@ +# Hands-on 1.3: Computation of El Niño indices for two seasonal models + +## Goal +Create a SUNSET recipe to compute and evaluate the skill of several El Niño indices (Niño1+2, Niño3, Niño3.4 and Niño4) for two models: ECMWF-SEAS5 and MeteoFrance System 7. The computation for each model will be run in the cluster as two separate jobs. + +## 0. Cloning the SUNSET repository + +The first step to use SUNSET is to create a copy of the code in your local environment. Open a terminal and `cd` to the directory where you would like to store your local copy of SUNSET. For example: `/esarchive/scratch//git/`. If a directory does not exist yet, you can create it with the `mkdir` shell command. + +```shell +# Clone the GitLab repository to create a local copy of the code +git clone https://earth.bsc.es/gitlab/es/sunset.git +``` + +## 1. Modifying the recipe + diff --git a/use_cases/ex1_3_nino_indices_comparison/ex1_3-recipe.yml b/use_cases/ex1_3_nino_indices_comparison/ex1_3-recipe.yml index b563e4ac..495f89f0 100644 --- a/use_cases/ex1_3_nino_indices_comparison/ex1_3-recipe.yml +++ b/use_cases/ex1_3_nino_indices_comparison/ex1_3-recipe.yml @@ -15,16 +15,16 @@ Analysis: - {name: ERA5} Time: sdate: '1101' - fcst_year: '2021' + fcst_year: hcst_start: '1993' hcst_end: '2016' ftime_min: 2 ftime_max: 4 Region: latmin: -90 - latmax: 90 - lonmin: 0 - lonmax: 359.9 + latmax: 90 + lonmin: 0 + lonmax: 359.9 Regrid: method: 'bilinear' type: 'to_system' @@ -47,7 +47,7 @@ Analysis: Indicators: index: no ncores: 8 - remove_NAs: no + remove_NAs: yes Output_format: S2S4E logo: TRUE Run: @@ -55,3 +55,4 @@ Run: Terminal: yes output_dir: /esarchive/scratch/vagudets/auto-s2s-outputs/ # ______ code_dir: /esarchive/scratch/vagudets/repos/auto-s2s/ # _____ + autosubmit: no diff --git a/use_cases/ex1_3_nino_indices_comparison/ex1_3-script.R b/use_cases/ex1_3_nino_indices_comparison/ex1_3-script.R new file mode 100644 index 00000000..59843b44 --- /dev/null +++ b/use_cases/ex1_3_nino_indices_comparison/ex1_3-script.R @@ -0,0 +1,35 @@ +############################################################################### +## Author: Núria Pérez-Zanón and Victòria Agudetse Roures +## Description: Computes the Niño1+2, Niño3, Niño3.4 and Niño4 indices and some +## skill metrics for each index. +## Instructions: To run it, follow the steps described in: +## use_cases/ex1_3_nino_indices_comparison/ex1_3-handson.md +############################################################################### + +# Load modules +source("modules/Loading/Loading.R") +source("modules/Units/Units.R") +source("modules/Anomalies/Anomalies.R") +source("modules/Indices/Indices.R") +source("modules/Skill/Skill.R") + +# Read recipe +args = commandArgs(trailingOnly = TRUE) +recipe_file <- args[1] +recipe <- read_atomic_recipe(recipe_file) + +# Load data +data <- Loading(recipe) +# Check units and transform if needed +data <- Units(recipe, data) +# Compute tos anomalies +data <- Anomalies(recipe, data) +# Compute Niño Indices +nino_indices <- Indices(data = data, recipe = recipe) + +# We can compute the Skill metrics for each of the El Niño indices, +# specifying that the data is spatially aggregated, with the parameter +# agg = "region". +for (index in nino_indices) { + skill_metrics <- Skill(recipe = recipe, data = index, agg = "region") +} diff --git a/use_cases/ex1_3_nino_indices_comparison/ex1_3_nino_indices_comparison.R b/use_cases/ex1_3_nino_indices_comparison/ex1_3_nino_indices_comparison.R deleted file mode 100644 index c2b44541..00000000 --- a/use_cases/ex1_3_nino_indices_comparison/ex1_3_nino_indices_comparison.R +++ /dev/null @@ -1,38 +0,0 @@ -############################################################################### -## Author: Núria Pérez-Zanón -## Description: Computes the Niño1+2, Niño3, Niño3.4 and Niño4 indices and some -## some skill metrics for each index. -## Instructions: To run it, modify the recipe to set your own output directory. -############################################################################### - -# Load modules -source("modules/Loading/Loading.R") -source("modules/Anomalies/Anomalies.R") -source("modules/Indices/Indices.R") -source("modules/Skill/Skill.R") - -# Read recipe -recipe_file <- "use_cases/ex1_3_nino_indices_comparison/ex1_3-recipe.yml" -recipe <- prepare_outputs(recipe_file) - -data <- Loading(recipe) -data <- Units(recipe, data) -data <- Anomalies(recipe, data) -nino_indices <- Indices(data = data, recipe = recipe) - -str(nino_indices, max.level = 3) -for (index in nino_indices) { - skill_metrics <- Skill(recipe = recipe, data = index, agg = "region") -} - -# skill_metrics <- Skill(recipe = recipe, data = nino_indices$Nino1, -# agg = 'region') -# skill_metrics <- Skill(recipe = recipe, data = nino_indices$Nino3, -# agg = 'region') -# -# skill_metrics <- Skill(recipe = recipe, data = nino_indices$Nino4, -# agg = 'region') -# -# skill_metrics <- Skill(recipe = recipe, data = nino_indices$Nino3.4, -# agg = 'region') -# -- GitLab From 026ad2ebfe7950591b309b5ce512df76518b10aa Mon Sep 17 00:00:00 2001 From: aho Date: Thu, 23 Nov 2023 17:28:23 +0100 Subject: [PATCH 351/388] correct variable name --- modules/Visualization/R/tmp/PlotRobinson.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/Visualization/R/tmp/PlotRobinson.R b/modules/Visualization/R/tmp/PlotRobinson.R index d50e7f36..bd427448 100644 --- a/modules/Visualization/R/tmp/PlotRobinson.R +++ b/modules/Visualization/R/tmp/PlotRobinson.R @@ -264,8 +264,8 @@ PlotRobinson <- function(data, lon, lat, lon_dim = NULL, lat_dim = NULL, var_limits <- c(bar_limits[1] + 0.01, bar_limits[2]) } else { var_limits <- c(-0.5, 0.5) # random range since colorbar is not going to be plotted - if (drawleg) { - drawleg <- FALSE + if (!is.null(legend)) { + legend <- NULL warning("All data are NAs. Color bar won't be drawn. If you want to have ", "color bar still, define parameter 'brks' or 'bar_limits'.") } -- GitLab From 1323dc4e4ce3f3c721ff272fc760fb6cfccc0611 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Fri, 24 Nov 2023 10:06:32 +0100 Subject: [PATCH 352/388] Bugfix: name subdirectories when no calibration method is chosen --- modules/Saving/R/get_dir.R | 15 +++++++++------ modules/Saving/R/get_filename.R | 2 +- tools/prepare_outputs.R | 2 +- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/modules/Saving/R/get_dir.R b/modules/Saving/R/get_dir.R index a2cbc79f..b8463114 100644 --- a/modules/Saving/R/get_dir.R +++ b/modules/Saving/R/get_dir.R @@ -38,18 +38,21 @@ get_dir <- function(recipe, variable, agg = "global") { } } ## TODO: Remove calibration method from output directory? - calib.method <- tolower(recipe$Analysis$Workflow$Calibration$method) + if (!is.null(recipe$Analysis$Workflow$Calibration$method)) { + calib.method <- paste0(tolower(recipe$Analysis$Workflow$Calibration$method), "-") + } else { + calib.method <- "" + } store.freq <- recipe$Analysis$Variables$freq - ## TODO: Change "_country" if (!is.null(recipe$Analysis$Region$name)) { outdir <- paste0(outdir, "/", recipe$Analysis$Region$name) } switch(tolower(agg), - "country" = {dir <- paste0(outdir, "/", system, "/", calib.method, - "-", store.freq, "/", variable, - "_country/", fcst.sdate, "/")}, + "region" = {dir <- paste0(outdir, "/", system, "/", calib.method, + store.freq, "/", variable, + "_region/", fcst.sdate, "/")}, "global" = {dir <- paste0(outdir, "/", system, "/", calib.method, - "-", store.freq, "/", variable, "/", + store.freq, "/", variable, "/", fcst.sdate, "/")}) } diff --git a/modules/Saving/R/get_filename.R b/modules/Saving/R/get_filename.R index 1c925651..54bea81c 100644 --- a/modules/Saving/R/get_filename.R +++ b/modules/Saving/R/get_filename.R @@ -16,7 +16,7 @@ get_filename <- function(dir, recipe, var, date, agg, file.type) { } switch(tolower(agg), - "country" = {gg <- "-country"}, + "region" = {gg <- "-region"}, "global" = {gg <- ""}) system <- gsub('.','', recipe$Analysis$Datasets$System$name, fixed = T) diff --git a/tools/prepare_outputs.R b/tools/prepare_outputs.R index 54e82095..f9942525 100644 --- a/tools/prepare_outputs.R +++ b/tools/prepare_outputs.R @@ -91,7 +91,7 @@ prepare_outputs <- function(recipe_file, } # Restructure the recipe to make the atomic recipe more readable if (restructure) { - recipe <- restructure_recipe(recipe) + recipe <- restructure_recipe(recipe) } # Run recipe checker if (disable_checks) { -- GitLab From 681d409c123267df48805680d355200ffada4e95 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Fri, 24 Nov 2023 11:02:01 +0100 Subject: [PATCH 353/388] Add Calibration to recipe and script --- .../ex1_3-recipe.yml | 20 +++++++++---------- .../ex1_3-script.R | 2 ++ 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/use_cases/ex1_3_nino_indices_comparison/ex1_3-recipe.yml b/use_cases/ex1_3_nino_indices_comparison/ex1_3-recipe.yml index 495f89f0..a4231e6a 100644 --- a/use_cases/ex1_3_nino_indices_comparison/ex1_3-recipe.yml +++ b/use_cases/ex1_3_nino_indices_comparison/ex1_3-recipe.yml @@ -26,26 +26,24 @@ Analysis: lonmin: 0 lonmax: 359.9 Regrid: - method: 'bilinear' - type: 'to_system' + method: bilinear + type: to_system Workflow: + Calibration: + method: mse_min + save: none Anomalies: compute: yes cross_validation: no save: none Indices: - Nino1+2: {save: 'all', plot_ts: TRUE, plot_sp: TRUE} - Nino3: {save: 'all', plot_ts: TRUE, plot_sp: TRUE} - Nino3.4: {save: 'all', plot_ts: TRUE, plot_sp: TRUE} - Nino4: {save: 'all', plot_ts: TRUE, plot_sp: TRUE} + Nino1+2: {save: all, plot_ts: yes, plot_sp: yes} + Nino3: {save: all, plot_ts: yes, plot_sp: yes} + Nino3.4: {save: all, plot_ts: yes, plot_sp: yes} + Nino4: {save: all, plot_ts: yes, plot_sp: yes} Skill: metric: mean_bias EnsCorr rps rpss crps crpss EnsSprErr save: 'all' - Probabilities: - percentiles: [[1/3, 2/3], [1/10, 9/10]] - save: none - Indicators: - index: no ncores: 8 remove_NAs: yes Output_format: S2S4E diff --git a/use_cases/ex1_3_nino_indices_comparison/ex1_3-script.R b/use_cases/ex1_3_nino_indices_comparison/ex1_3-script.R index 59843b44..146d0d78 100644 --- a/use_cases/ex1_3_nino_indices_comparison/ex1_3-script.R +++ b/use_cases/ex1_3_nino_indices_comparison/ex1_3-script.R @@ -22,6 +22,8 @@ recipe <- read_atomic_recipe(recipe_file) data <- Loading(recipe) # Check units and transform if needed data <- Units(recipe, data) +# Calibrate data +data <- Calibration(recipe, data) # Compute tos anomalies data <- Anomalies(recipe, data) # Compute Niño Indices -- GitLab From b532d159da5880222356549b7a56aca1db13442b Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Fri, 24 Nov 2023 14:59:42 +0100 Subject: [PATCH 354/388] Write explanations for use case 3 (WIP) --- .../ex1_3-handson.md | 85 ++++++++++++++++++- 1 file changed, 84 insertions(+), 1 deletion(-) diff --git a/use_cases/ex1_3_nino_indices_comparison/ex1_3-handson.md b/use_cases/ex1_3_nino_indices_comparison/ex1_3-handson.md index e310d289..0f3f19d4 100644 --- a/use_cases/ex1_3_nino_indices_comparison/ex1_3-handson.md +++ b/use_cases/ex1_3_nino_indices_comparison/ex1_3-handson.md @@ -1,7 +1,9 @@ # Hands-on 1.3: Computation of El Niño indices for two seasonal models ## Goal -Create a SUNSET recipe to compute and evaluate the skill of several El Niño indices (Niño1+2, Niño3, Niño3.4 and Niño4) for two models: ECMWF-SEAS5 and MeteoFrance System 7. The computation for each model will be run in the cluster as two separate jobs. +Create a SUNSET recipe to compute and evaluate the skill of several El Niño indices (Niño1+2, Niño3, Niño3.4 and Niño4) for two models: ECMWF-SEAS5 and MeteoFrance System 7. We include the information for both of the models in a single recipe, and the SUNSET Launcher will split the recipe into two 'atomic recipes': one for each model. The computation for atomic recipe will be run in the cluster as two separate jobs. + +It is also possible to split a recipe along different Reference datasets, Variables and Start Dates. ## 0. Cloning the SUNSET repository @@ -14,3 +16,84 @@ git clone https://earth.bsc.es/gitlab/es/sunset.git ## 1. Modifying the recipe +The template recipe for this use case can be found in `use_cases/ex1_3_nino_indices_comparison/ex1_3-recipe.yml`. You should open it with an editor such as emacs or vim: + +```shell +# cd to the main SUNSET directory +# Open the recipe with a text editor such as vim or emacs +vim use_cases/ex1_3_nino_indices_comparison/ex1_3-recipe.yml +``` + +Then, under the 'Run' section of the recipe, you should edit the parameters `output_dir` and `code_dir` to point to your desire output directory and to the directory where your SUNSET code is stored, respectively. + +Feel free to also modify other aspects of the reicpe according to your particular needs. You can read more about the parameters and the available modules in the SUNSET wiki. + +## 2. The user-defined script + +The SUNSET Launcher is a bash script named launch_SUNSET.sh that can be found in the main directory of the SUNSET repository. When working without Autosubmit, it runs in two steps: + +1. Running the recipe checks, splitting the recipe into atomic recipes and creating the directory for the outputs. +2. Sending jobs to the cluster to run the user-defined script for each atomic recipe, using SLURM. + +The prepare_outputs() function is already incorporated into the first step. For that reason, it does not need to be included in the user-defined script in this particular case. In its place, we will use the function read_atomic_recipe(). The recipe path is passed as an argument onto the R script. The beginning of our script should look like this: + +```R +# Load the modules to be used +source("modules/Loading/Loading.R") +source("modules/Units/Units.R") +source("modules/Anomalies/Anomalies.R") +source("modules/Indices/Indices.R") +source("modules/Skill/Skill.R") + +# Define the recipe path as the first argument from the command line +args = commandArgs(trailingOnly = TRUE) +recipe_file <- args[1] +# Read the atomic recipe +recipe <- read_atomic_recipe(recipe_file) +``` + +The rest of the user-defined script can be written in the same way as any other SUNSET script: + +```R +# Load data +data <- Loading(recipe) +# Check units and transform if needed +data <- Units(recipe, data) +# Calibrate data +data <- Calibration(recipe, data) +# Compute tos anomalies +data <- Anomalies(recipe, data) +# Compute Niño Indices +nino_indices <- Indices(data = data, recipe = recipe) + +# We can compute the Skill metrics for each of the El Niño indices, +# specifying that the data is spatially aggregated, with the parameter +# agg = "region". +for (index in nino_indices) { + nino_skill_metrics <- Skill(recipe = recipe, data = index, agg = "region") +} +``` + +A complete, ready-to-use sample of this example script can be found in `use_cases/ex1_3_nino_indices_comparison/ex1_3-script.R`. You can execute it as-is or copy it and modify it according to your specific needs. + +## 3. Launching the jobs with the SUNSET Launcher + +When working without Autosubmit, the SUNSET Launcher should be run directly from the HPC machine where the jobs will run(for example, Nord3v2). Make sure to ssh to the machine first. You can obtain detailed usage information by running: + +```shell +bash launch_SUNSET.sh --help +``` + +The mandatory arguments are the paths to the recipe and the script. We can also include other optional arguments to be used by SLURM, such as the number of CPUs to request (--cpus), the wallclock time for each job (--wallclock) and other extra directives (--custom_directives). You can refer to the [Nord3v2 user guide](https://www.bsc.es/user-support/nord3v2.php#jobdirectives) and the [SLURM sbatch documentation](https://slurm.schedmd.com/sbatch.html) for more information on the available options for the parameters. + +In this case, we are giving each job a wallclock time of 1 hour and requesting exclusive usage of all the cores in one node. The shell command to run SUNSET will look like this: + +```shell +bash launch_SUNSET.sh use_cases/ex1_3_nino_indices_comparison/ex1_3-recipe.yml use_cases/ex1_3_nino_indices_comparison/ex1_3-script.R --wallclock=01:00:00 --custom_directives="--exclusive" +``` + +You can check the status of your running jobs with the `squeue` command. The SLURM logs will be inside of your $code_dir, in a subfolder named 'out-logs'. It can be useful to check them in case of errors. + +## 4. Results and plots + + -- GitLab From eb664fab24ca2316bb5a61ddbec99d11dab159ef Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Fri, 24 Nov 2023 15:00:48 +0100 Subject: [PATCH 355/388] fix typo --- use_cases/ex1_1_single_analysis_terminal/ex1_1-handson.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/use_cases/ex1_1_single_analysis_terminal/ex1_1-handson.md b/use_cases/ex1_1_single_analysis_terminal/ex1_1-handson.md index 391d4856..6315cd86 100644 --- a/use_cases/ex1_1_single_analysis_terminal/ex1_1-handson.md +++ b/use_cases/ex1_1_single_analysis_terminal/ex1_1-handson.md @@ -16,7 +16,8 @@ git clone https://earth.bsc.es/gitlab/es/sunset.git SUNSET uses YAML configuration files called 'recipes' to specify which data you want to load and the details of the different steps of the workflow. In this example, we want to evaluate the temperature-at-surface (tas) monthly means, using MeteoFrance System 7 data as our experiment and ERA5 as our reference dataset, for the initialization month of November. -There is a template file +There is a template file for this hands-on tutorial, which you can open with a text editor: + ```shell # cd to the main SUNSET directory # Open the recipe with a text editor such as vim or emacs -- GitLab From 252efc91dc355360a7cf23c33e352db512e20c82 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Fri, 24 Nov 2023 16:55:39 +0100 Subject: [PATCH 356/388] Refine split.R autosubmit checks --- split.R | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/split.R b/split.R index 8328e460..9bd95e86 100755 --- a/split.R +++ b/split.R @@ -34,7 +34,7 @@ recipe <- prepare_outputs(recipe_file = arguments$recipe, ## TODO: Add autosubmit yes/no to the parameters? run_parameters <- divide_recipe(recipe) -if (recipe$Run$autosubmit) { +if (!is.null(recipe$Run$autosubmit) && (recipe$Run$autosubmit)) { write_autosubmit_conf(recipe, run_parameters$n_atomic_recipes) sink(arguments$tmpfile, append = FALSE) # Run with... @@ -56,4 +56,7 @@ if (recipe$Run$autosubmit) { cat("TRUE") } sink() +} else { + stop("Autosubmit is not selected but no temp file was provided by the + launcher. Please open an issue to report the problem.") } -- GitLab From 5b56b359f3de9ff305eaa35db539405c8932611a Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Mon, 27 Nov 2023 12:46:54 +0100 Subject: [PATCH 357/388] Fix month name in plot titles --- modules/Indices/R/compute_nino.R | 41 +++++++++++++++++++------------- 1 file changed, 25 insertions(+), 16 deletions(-) diff --git a/modules/Indices/R/compute_nino.R b/modules/Indices/R/compute_nino.R index 8fd2c9c8..915dc9ce 100644 --- a/modules/Indices/R/compute_nino.R +++ b/modules/Indices/R/compute_nino.R @@ -208,6 +208,7 @@ compute_nino <- function(data, recipe, region, standardised = TRUE, } } if (plot_sp) { + ## TODO: Remove sourcing of plot robinson and viz module code source("modules/Visualization/R/tmp/PlotRobinson.R") source("modules/Indices/R/correlation_eno.R") source("modules/Visualization/R/get_proj_code.R") @@ -227,28 +228,36 @@ compute_nino <- function(data, recipe, region, standardised = TRUE, correl_hcst <- Apply(list(data$hcst$data, nino$hcst$data), target_dims = c('syear', 'ensemble'), fun = function(x, y) { - x <- apply(x, 1, mean, na.rm = TRUE) - y <- apply(y, 1, mean, na.rm = TRUE) - dim(y) <- c(syear = length(y)) - dim(x) <- c(syear = length(x)) - res <- .correlation_eno(x, y, - time_dim = 'syear', method = 'pearson', alpha = alpha, - test.type = 'two-sided', pval = FALSE)}, - ncores = recipe$Analysis$ncores) + x <- apply(x, 1, mean, na.rm = TRUE) + y <- apply(y, 1, mean, na.rm = TRUE) + dim(y) <- c(syear = length(y)) + dim(x) <- c(syear = length(x)) + res <- .correlation_eno(x, y, time_dim = 'syear', + method = 'pearson', + alpha = alpha, + test.type = 'two-sided', + pval = FALSE)}, + ncores = recipe$Analysis$ncores) correl_hcst_full <- Apply(list(data$hcst$data, nino$hcst$data), target_dims = c('syear', 'ensemble'), fun = function(x,y) { - dim(y) <- c(syear = length(y)) - dim(x) <- c(syear = length(x)) - res <- .correlation_eno(x, y, - time_dim = 'syear', method = 'pearson', alpha = alpha, - test.type = 'two-sided', pval = FALSE)}, + dim(y) <- c(syear = length(y)) + dim(x) <- c(syear = length(x)) + res <- .correlation_eno(x, y, + time_dim = 'syear', + method = 'pearson', + alpha = alpha, + test.type = 'two-sided', + pval = FALSE)}, ncores = recipe$Analysis$ncores) + months <- lubridate::month(Subset(data$hcst$attrs$Dates, "syear", indices = 1), + label = T, abb = F, locale = "en_GB") + for (tstep in 1:dim(nino$obs$data)['time']) { map <- Subset(correl_obs$r, along = 'time', ind = tstep, drop = T) sig <- Subset(correl_obs$sig, along = 'time', ind = tstep, drop = T) if (tolower(recipe$Analysis$Horizon) == "seasonal") { - mes <- as.numeric(substr(recipe$Analysis$Time$sdate, 1,2)) + + mes <- as.numeric(substr(recipe$Analysis$Time$sdate, 1, 2)) + (tstep - 1) + (recipe$Analysis$Time$ftime_min - 1) mes <- ifelse(mes > 12, mes - 12, mes) fmonth <- sprintf("%02d", tstep - 1 + recipe$Analysis$Time$ftime_min) @@ -313,7 +322,7 @@ compute_nino <- function(data, recipe, region, standardised = TRUE, toptitle <- paste(recipe$Analysis$Datasets$System$name, "\n", "Ni\u00F1o", region_name, "SST Index -",var_name, "\n", "Correlation /", - month.abb[as.numeric(fmonth)], + month.abb[mes], "/", recipe$Analysis$Time$hcst_start, "-", recipe$Analysis$Time$hcst_end) plotfile <- paste0(recipe$Run$output_dir, "/plots/Indices/", @@ -367,7 +376,7 @@ compute_nino <- function(data, recipe, region, standardised = TRUE, toptitle <- paste(recipe$Analysis$Datasets$System$name, "\n", "Ni\u00F1o", region_name, "SST Index -",var_name, "\n", " Correlation /", - month.abb[as.numeric(fmonth)], + month.abb[mes], "/", recipe$Analysis$Time$hcst_start, "-", recipe$Analysis$Time$hcst_end) plotfile <- paste0(recipe$Run$output_dir, "/plots/Indices/", -- GitLab From fb5f099d5f5cbdbf7b77928999bc5e21af5e5ff2 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Mon, 27 Nov 2023 14:17:30 +0100 Subject: [PATCH 358/388] Edit 1.3 script, add figures --- .../ex1_3-handson.md | 11 ++++++++++- .../ex1_3-script.R | 2 +- .../nino34_ECMWF-SEAS5_ERA5_s1101_ftime02.png | Bin 0 -> 61630 bytes ...Meteo-France-System7_ERA5_s1101_ftime02.png | Bin 0 -> 59446 bytes ...n_tos_ensmean_ECMWF-SEAS5_s1101_ftime02.png | Bin 0 -> 937910 bytes ...mean_Meteo-France-System7_s1101_ftime02.png | Bin 0 -> 918256 bytes 6 files changed, 11 insertions(+), 2 deletions(-) create mode 100644 use_cases/ex1_3_nino_indices_comparison/figures/nino34_ECMWF-SEAS5_ERA5_s1101_ftime02.png create mode 100644 use_cases/ex1_3_nino_indices_comparison/figures/nino34_Meteo-France-System7_ERA5_s1101_ftime02.png create mode 100644 use_cases/ex1_3_nino_indices_comparison/figures/nino34_correlation_tos_ensmean_ECMWF-SEAS5_s1101_ftime02.png create mode 100644 use_cases/ex1_3_nino_indices_comparison/figures/nino34_correlation_tos_ensmean_Meteo-France-System7_s1101_ftime02.png diff --git a/use_cases/ex1_3_nino_indices_comparison/ex1_3-handson.md b/use_cases/ex1_3_nino_indices_comparison/ex1_3-handson.md index 0f3f19d4..42068784 100644 --- a/use_cases/ex1_3_nino_indices_comparison/ex1_3-handson.md +++ b/use_cases/ex1_3_nino_indices_comparison/ex1_3-handson.md @@ -92,8 +92,17 @@ In this case, we are giving each job a wallclock time of 1 hour and requesting e bash launch_SUNSET.sh use_cases/ex1_3_nino_indices_comparison/ex1_3-recipe.yml use_cases/ex1_3_nino_indices_comparison/ex1_3-script.R --wallclock=01:00:00 --custom_directives="--exclusive" ``` -You can check the status of your running jobs with the `squeue` command. The SLURM logs will be inside of your $code_dir, in a subfolder named 'out-logs'. It can be useful to check them in case of errors. +You can check the status of your running jobs with the `squeue` command. The SLURM logs will be inside of your code directory, in a subfolder named 'out-logs'. It can be useful to check them in case of errors. ## 4. Results and plots +The spatial pattern and time series plots that were requested are saved inside `plots/Indices/` in the output directory. There will be one set of plots for each El Niño index, with a descriptive file name providing information about the content of the plot, the system/reference datasets, the start date and the forecast time. Here are some examples of the results: +Spatial correlation for the ensemble mean: + +![](./figures/nino34_correlation_tos_ensmean_ECMWF-SEAS5_s1101_ftime02.png) +![](./figures/nino34_correlation_tos_ensmean_Meteo-France-System7_s1101_ftime02.png) + +Time series comparison between the model and the reference dataset (ERA5): +![](./figures/nino34_ECMWF-SEAS5_ERA5_s1101_ftime02.png) +![](./figures/nino34_Meteo-France-System7_ERA5_s1101_ftime02.png) diff --git a/use_cases/ex1_3_nino_indices_comparison/ex1_3-script.R b/use_cases/ex1_3_nino_indices_comparison/ex1_3-script.R index 146d0d78..c2b0ba34 100644 --- a/use_cases/ex1_3_nino_indices_comparison/ex1_3-script.R +++ b/use_cases/ex1_3_nino_indices_comparison/ex1_3-script.R @@ -23,7 +23,7 @@ data <- Loading(recipe) # Check units and transform if needed data <- Units(recipe, data) # Calibrate data -data <- Calibration(recipe, data) +# data <- Calibration(recipe, data) # Compute tos anomalies data <- Anomalies(recipe, data) # Compute Niño Indices diff --git a/use_cases/ex1_3_nino_indices_comparison/figures/nino34_ECMWF-SEAS5_ERA5_s1101_ftime02.png b/use_cases/ex1_3_nino_indices_comparison/figures/nino34_ECMWF-SEAS5_ERA5_s1101_ftime02.png new file mode 100644 index 0000000000000000000000000000000000000000..b14e72311586239292d447c238442a9b9f2957f5 GIT binary patch literal 61630 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 literal 0 HcmV?d00001 diff --git a/use_cases/ex1_3_nino_indices_comparison/figures/nino34_Meteo-France-System7_ERA5_s1101_ftime02.png b/use_cases/ex1_3_nino_indices_comparison/figures/nino34_Meteo-France-System7_ERA5_s1101_ftime02.png new file mode 100644 index 0000000000000000000000000000000000000000..696de30e0a7a883bce952897b47c82223cb0d186 GIT binary patch literal 59446 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 z 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 N(rI;t0{Qbd{x9_9b7lYl literal 0 HcmV?d00001 diff --git a/use_cases/ex1_3_nino_indices_comparison/figures/nino34_correlation_tos_ensmean_ECMWF-SEAS5_s1101_ftime02.png b/use_cases/ex1_3_nino_indices_comparison/figures/nino34_correlation_tos_ensmean_ECMWF-SEAS5_s1101_ftime02.png new file mode 100644 index 0000000000000000000000000000000000000000..5b8af9efa6878dc51e4fea01bab2a240bf1ec2b4 GIT binary patch literal 937910 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%0A$<;=mJdYaFX<#uU}*4 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%0DsVpB+MeA_NE+Rh5X>SU$4OUKw=ZgO3VkAn z^t*Qxe-p+?_-hVnL-dguRmzA+=_DtHhYN|c0`c~qV?Tsw785Cd8EH_1CpIn(6;_$t zwEuhHx3T0p$dGF>IZ!T|!d8B>- zWM90MpqnG+Lw6p>$-92WE8Ci==o}=oZ|GdiC<+3ewtKs~W9e-BfQZqJrvwLNz(o%% zpuH>LePbmlIS9zL8U57yr?}GLbN_Z%azjf?3xu85K*cBE`LxO39Ssy07v~5V%mHdZ z0HklV&0`%1&bplXD4D-abu-fwTj)qiN&@~H=X2TrW*;aJK-Vpu-T`KGe>5qGX#@gp z6P{mBh;v?02{#BFo5>3zWH|DD|X-AspV~s)%CE_0JgC0ch2h$~PNO7at8xWKMno)OR z%TyG#)P1vM48s#v7){mk= zA1Y02G0KlK;PCsH+g3Zxh7&%sS?DzcF*!%Z65I?*cT(E}4|4#6D{wO@`p@}l&M$}0 zI}mLL6a@9493gS!6e7vGh!L)uz)61%LfvQoDk} zqLnV7Gh(@@Lrjh=n_o4~>4tt2nmlynAs}SjlEF77jeGz$_tDBOkO6vfXd$WLdL*TK znbMYkp^Phxn}xdf*bfn+F2HWFr!Z}afr5;?lsGP}TCb2D`#r4MY(T) zvI)G$-0y_xvP%K`us&1zvauY^tX;CZ1Eiy9FY7<^n3vFGz1L9%!0{tNlD1_JJ8?_$ zMd&PKH0-HqGE#(!dO;wL)J{+FwV)zyfx%db617oz{m#w^ zCNl_-5%f4sluk#Hn!m88p2|h}7{wHJL<11S&+SR4w`>Z8i&I5FiL3uATe({!Lw*Fz&DVAAbq zA!oD}YvvPEYHJ~{;aVD0h8L?W`ic+%0~{y+5~bUC{wUBzzZ)u%Z{U$_4Le!_=@z7KJ4n0wO!PA2 zs>)VyAYvBD7N7O${Kd%5&Af<@>(4bsKvBk*K38dE@$w{S?42{1&ZGyfe`|VvUGwKP z5h6vNZwRDn>CnoTmNrBE@@RNSkPsSm8hY3BuOB;nb3;m_2&=zpid_v76g{Ov4%PxR zm{wE{X6luC7cXt+{)SsRc>-scC~D|(Kg(;Vhe5vo~zr4H)Glx1^2t%#JvPp8y2S8ls!7|UcQ zG;^0-6z+?gmI*_v&V<__IYUpoj z3?jZr8n8aLr$N<#Q%=Q(BIYqLXe%OTWPx_`VnIrzgZ`Bv;}Vt6jM1kgM{L5NYslBZ ziuuimDT+nAf#NHIgO7K1?B61`(m77d_3H_n78$_s2))!-c%*vX#$;N;#I_hy{KU&o z`>la%eE~5x_00d5#ouzEa2$1t%yXJSuT&w z3h!LI^?m~?{!#`yubY|AV|Pch(}%jl$_&-{Y^Nc>|Ni2JVxaThz}0!-)BBo63&%WX z&p=N*9?=heA7L2GZ_2T$J%#F3LoKh5A4qAiK|)2Udk&*r=Z0TM;z=>wM472;MjxKT zdH+x*oBzR*KtzCmU|;~0rED)hS(t8Qd91-Vi-;~TL(3bg)Vb|vMjXUrN~?>ZUB(cQ z?^Z9VsqlQs76D+udW5FKM=xG;+H#a*B|GWYGwSG?O+UQUad2>`>FGx&CIU`>%>#}* zZvYy*O6zBSbMpc=!6hJ40t)=+YY3>{17zp&%F0ZDSPkTGl4N!PcU1(Ckn#-xj-|p4 zn1=@xt_U*5Iyb}cByxIasj2^I9O~-odYmrZE<>06=!X9N`#}FgM@Prlm}!_&b~iMo z<7_kNzt=Vqhsnl-(ABqHtKG11A@YkCQBQFs@>bY*}XurC&_ zVRyNeK(U{`hBY9{&QoE@?lb_F2ecqzKVDu4iKa(9kv(h*UXcfh2QBM=^s!) zDc|Yf^40QFhcun$E!Jb3J%q5OHE@GjQ>$q%7(7&{r7m}xm*mOD$)JJxZGO5peStV` zs+DB6mT*!rzYYhGIa`Z`Xo)W65~oGJa&C_o(2BHsyI9-&{lF{PtNp92&{e1R18=xN zo82@r>e$xBXE;oY>(5`$)4lfvv7Q!~5I&^qXLLNz6$#+s1qm65uVl~LOh-w;MJ})p zu;r`?1dOTWAQnd{zid}LJ1o>^_T)o>g3NlU00;YTeoYAddLR(Eul;#A11uZ$$`Am+ zOkrVuBP9oXAf_Y+Or`ns0995rPaXN+OLpe|6YLx$&F(JJwkFJB5VO0;8gTYLm36%i z-Qic~{$9gZr-{BWe40ZmcMqAs)ZGDVgFrmNIxb%i^_dthPtnEDJdY9@^q+y`Qvtd2 z{nsztswTbz7tn`(HGfC7vLls@Ktf7z@6{dPujgqe+r-?Edoi)2Ew>J2FnloziBeE( z8;lDnpECq{`wOuoPQ0op9ds%u0#U(m*M!;9xuZZjl-P6;(Y@-iw(~g~ z0OUO3YSH`qG?6Ty0tZz32d|tI+4g6WZhhlq)A)vK^Q+hKAiCiDi;I>P4tN0An6=Ix zT5fp(ewed#*l+iucT}AKDi1A1tL|bqx4f&59so<_{|r&}7*6SsM-PJlqKT0)12V%) z5(X}0qwZku&r>sIbb@BT<)A>h)DrPUl&de=3rWamA`l>Eip>^YL4{H;v^>BBk-eI0 zyLg_}-aF=ZB7k7xq3e8lYtJHj))ImfR!f}6TDks3Y_sD=E?q_4d`_qR7vC_RC|kpE zLUR){gCqn2WF)QT#VaVIcS#-E0|A=k%8$l-OZK|XaP0(g6O-vb!RLS4uGt#-a6zD+ z+VaZAjkTIk7B8}1)#9D?=VU(15YKH|)vNPIR+GILG!b#52nO}NwKwJIaw-}*LTF*6 zPG-C7wMyOfV#FN~q$?$zdyjq(-JR;d6adodIhh@(OD395ZV|AKzWDe!f~pPg;-^L@ z{*g-e5`rlJF=P^8wi!gY9^&Pv$9B6CfG0)ga^7^DwTnt>4b#=s3mIZ^hU_azkRM|5TZk}1aw#y_HTN-1Y?p$}xe-(L^|VUGibv(H-rXTT0r<1Pv|(L(tmnGE=$Hm}-}<+C z!vOxf;RpB^;cx#S_xJXF0lecmr>}cpn2LenJyzPi;vrFJLtjT7L9@Im8ldXL9jXk} zu@>jqqKO@4!kqsGMb`+FeYKtifk;gY!J50TuBEr5O#0ME$)Ok6HKWIevjmTd;F--$ zMD1%VO9;59y=!mqaF5y4h$VTbq_n{MMuUB~ToDP-uK2D~&g-+9VhIY6oxvDbq0j~@ zWRt$tM19Qa&7PO#L8^it**t5J-t8YhJM>&-3RfLoc#NU6WdOdPnayF*+cGAmh)CpHNBw;j+3>>~Lp5yRf`Tb)b7N%k)K<#Eo zP;=gAs|2NKnJ&R`Pt!6({!VnAeW{9(BUPD&^9zM4P4e{>xIndDZFlAqS$+{81YHvs zErqH&4}$;=L(*`*`L1N4WjJ>7fCaV~YuaoQlDUSznZ2@_vNk?g9xNTVk0oxtBatMp zh;zXC>X5S<}AwA*7f!znP=1=~z;HBv|m+`Q~YZ%>IltGOTYh_$^o z0r-lcpRdMhRk#r~2aD%jP&5$=dt>Ij5e^nEWwp)^Rgd!h(MbE*ZA{sgWN^K!=$>h~ z4p2S}A50VAq~M?t%lo*CDOqG5o~)>7=7Iw&P=z=7!x&oO4?+g}m$&ZyTYdr_(6<9E z0IBwQ5Tyw@jeZMG_^5Dbj+c_?z4cL$XqKCR(7M#<_3ZFB$#F@|n=QwJ7pcZrRic?p zPv<-Df@kycisdj()JP7l$3;DlT^G8-yRCWURBH2^1}D$FTPI7I9y#1A zD)XqqO5W09r{gp^FUJq*M7$lPoIDhs+u4VMsO&_KTkU@i<10dd$01KC2chS4(%jBY zr1lriR3LbaHF%RQ`NF2vpiReGKVrJ(^H$sH1}Cx6n|`T|hq(6s9KScyfdi9pt@iaS z^XYcEM3KNol7H>ObFuZg7&sB0n_=#fRRWCOijD%k<>mVk)0(EHOv!K7mw!#fn;%;A zYuGad%zvRKF-c`NHaor}3c7zm?uAQYqp-OAy9Ipv;R}<^D44=5{O=m~?xf@`Rj0#! zvy!>%fGj=%J*{jvP^mPn2@WUV=r?WGe zU**rD-Vq*im4q5m7m(LI?Ikc72s)kZ6EYnEB}fCm{UlRE4*%DhPk#F_WrU^9+U|Yxmir=)bk1oTghBQ_U3<4UC7v|*|!zFP?3_JZ2{JXDKyN>B4U^Tld zm$ZnJoI5?YLkvud*-BMY3rjF7-Y&a44N-``;66{wCeP`X5cuxD7;&N@h=OSm{;so~ zFQiuKBP$Sck{1xW%$$jr#Lfo1t{G|P+Ffs}mkj8 z{RlFN&wpgq>)`RMueNoy)l+EY4pGNA*!Cp$W^*}-RLlWpO&%xn4?wzS12u9(RH1)s zc67zfL!Dc>;Vfy%*rR^&rngQD2JC%Rq5vKiE+PT;x-_55BXF#N6-dHf>+uGVl=FKT zyc4)(4*OPnkqhj`yS!uH&8Oz)Q{&<$mzHoHJDQqOdyJA&QUu;#u7ScQ@Ke+IM4P1` z=zUWm;|-Q}m-^&tEJcYGw?UgaIgym%r$Hrqv zX`*S<@h7$>3%1R;#g#v|YywMks0qhZpk}EU33`5Jx^dzj1#rRXT~x@!CC_be53C8V zyjeQavIH5%O`K=5td4L5yviDXre&7@K%TZzwo2ln)%d&0V#cuq0S!&+?yO_w5G%}S z_M5qTlSPG91lc>IapK_CL=KBVKs(+LH!B`5+YmR=@S|T$@dvOt-e28kpO`f40yb(E z_#O;|%Co;dE7YM;)O`ac@J(%^`>xH#&?!Tn=qw3mcO(@9@SuKdW*3UkIC06-t1Z(lK@rv>u2NbVi9>$1>fW;*6qK}SLMisRnbms6 z_G8mNkzOrM8FvwIyeqBuQjTV_NM@3<<6q{S{3^z800Y)gPF!2gJGYx_Sp`lyNt1%t z?yM0eW-vwsElC-d0GsNzpH6~l+OCMqAgjJ)->%MAK*G2MK$ z`F`INeLh9TwTtc9mMBw`5tsk1)Ya1FHMD)_`oq6*A*O%7)$4kEawzxrr+=5?)-(BM z!ffxwHI)woOxs`#0{IC5*_1Ewxz(v(J}qLQuGg?|<3zsmKyK5g4kWI69(}Brrv$SQ zOBjlZ_5p)goOB9Em7i(qn41@^9^v4V67(Z=FFSPk0h~ub($l~+=?$FU)fKSb>DN!^ zwTZ~5Flz2$sSt$#kIk8-#(QF4GFB9w5+W&s(xE@^RHryoX?l%A!S>0!)zu=g?^KKg z4naBU?e+b8z{5C`p#Oa391bvGF-DqC)xa?^bBC^90p@PAqp_-Lq8O>QjSWJn=t^&? z61BIFPmSK&rGljb7g^Hw#S(IRyF3Ww@&0+#?t1B_@}Wh|sX^9n<+#q%j>lW7mD9|5 zJKo{B6(-CZmRc{8*}-on{@h2W4dxj}c^0qj!rsLrOMUtKlAL`Tjr*p)LSL@->V}h6 zW^vC&6axm#@}xVYn@*+#-~rJ{%<9v87%^z?j{A$xTt&+GSLbEKa=uG?c&VKK&B`*8 zoglBPP1D?l8}ByOdEFhS?w2b2j45;6C~e1*L3<95c`tm6l03sNUId~zCRY4sKQjpW z{1TGNwhHSui~H;|hK(m{&C$z;zuwAA>J%ZR zJ#Hq4dev7po2mR1h(NDU)iZZ%Jib1CgXh}$>Q8bl^ItzZq5>V0m@VDIT!T~AK6_&` zNL@5Nu%H?%2`%LH`EIK4$wqA^7@%(x?iSMTVXyZ}>qGVgtntaO5{No=OLRXlACPmfY% zXji+uvgB_n6UIs}Gd)vQzq}HRYZ{@V*22X`q58#IN5rH&Xt)>%D2w+)Fp~#?7tA=b zNpk8M24eP3uEyH*iQ-^+q;Z<)(UI6RwfJuAIyH1*cHE*S%LRKE>n9|5n!L+MlGQAp zjJYqlEK`R`XuCCvNPOSkMcSM1DMrBz2F~dVX#w-Fz_OMbq|iO`||AmS}a=+%F}czkQW)DZb+_xo!i{L3atzw6cT9S>*r$J<-Ku%0Yh z?o=rwRVT7MvDxRaOD*+}+zv{?l521Y&fzdwV^Yrliv_q4gS16iwdvtEfd0nfJPt*f zVbQd8dDbtCzlxT9sE<2}cQ6J1`{JwVlX{EprJ<$%D4=go0bqwbncMZ$l zyiJaIfujR3z;hM+0TNvw!aM& zEss9*$J0JS@q3yku?X`sG&jV-DI12b8SX@;QSx`r<3VMAzsp&*Uork9^UxRE+>k)S z1~cm!OJ_>KKh~T`uZ{rYjpW(K<%(x4(FZ4%N6H8*+?>S57w92lm87*AMzoJ$)xwol zaXfe{WT~Xj7%Ny$3=IHMZ~Wm7Fw9+*P=$v{;`2M*^9i*m`2`Bf)cV23rLaV{dJr?V z-I%-Ie3r&Np1|UXRH(OGuXL&i4bc4EYV(gzIWOWNkYpJBp|P;kC00MI;jpVCKHh)4 zL1X5#vb9_t-hLwm_c<*_QrwE$ZJfTNf~ug!Yq zkq)Hp2xf}q|LLsYV3LxOX8S)K%4Wd>7%fUi{k)k&NRybo;)#vxpnj17yQZ2kn&=Kf zPJRHj3z+pNWbud>sZ^Ag|E)1x_e1i1q#XZXQ0rU!=?5xL^q{1yQN1U4Zv`t)?hdnN zS(c~sn}g>+Q2jObnP3_Ko+i?@LCf;)XJ-z=<4f#aV@P>ydkAMwB*Y%| z9%e<$c_uMMZF=kjcF)%cPjg8!Mg~&h%g0AQLS_?LGPJ9{O(FzD=}ppV{ChyK|NV9S z{SjP&y=qq0CrVtNP}mN~M@)DmlF@aD+jp8!0sX_ieYYG(+5_m^sJzk(*nV6k@#x#w7w{j2@j%lj_P}+Nj4X&~y5V>NuS|;7KV^0ep@s9f zK9tEL1jq24rU|A~LzB329CaJQjS?sO!5Nam#r;<9*Yr)xGrUPm$F9@-RO1kZD_viFzS~F79~~GJsqR`nAo5(TxEY#DYNtg3}Gsx#X5b zj&efXgg>-S@SG>E#zGLBHSNCzDRZYSM@`_up)5WSmAh7kWCg%*om7_)KJ@PP`!H|J zaoU`MZw3cLcW#2nD@Y zSP24a@7$D0a-`OhJNe|F&~MPJJZnH9J^G~``X zdrB=yTFXFz5O#rtQtLWnz=QP&z~qzb{9j0E6W z**yXETQo3XZa+LiylEylVGwFczUU{l7*OD5&L#PkIfMcUVrKwkdrAjoT~)P7VgA!A zpoc<#q*Wl1NYOulYIXGsH#Y_#gPIP8?Z~FT6@dG87#+F!{;E*bmka_muTuZ(RNR7aEco9CVZ5bmW)p664=Fm3m10x7Q6MQ3MgLvmf1k*u zY-;aFceNO|aEe<)#Zk(&<`a?`1Z<56nJFO`dJ-nxI*Hj%i1!wla_XsCr3VrVO*{sb zx+|RZE_PE5H8eB~qJZym_3-#dkcPlEuS3sj2b}B)V+SXIuTGPr#BngfxdZU0Is86< zZ8;3P+WtXrpnwgZjj!(u4kix|&);hOuRpbZm$H3>m)r2(_%&~UC>8pVAY0(;$Wwmi z+bMA)Xcx+S7<&hrDUamA zkPx%DBt(9(^~nK1Cg>F{1JQ}~v$VwOuiWpp70?aP;!_pQZ8{2Z-}%vjTlb&QhZ7SF zk)CBU%AZ|)MC&g^1&MH4eofX$O^E+K!GwjwLG+DUu(89B!9MjDEGSSI6eLmg0yxqDOUn4a zYm{kGqwRnVS%lFqCES42eic&p{{|zd``G=zZTy>tAQQ^a0IGij^y9w|d;dEo z@V^K1O96uu7!5}Dh>@y;?SG#xiB1E!*uUI-S`=nJn!{%PH}gQ^3EW47OVehZD);D-PY=N+LB#Dy)!uab zZphMKI!pMW3XL_FZ=8H*D=@xv4jR;4a_7qW61IqRVkkkhM#1(-cub}Vc1ihN&8N1k zVtzT2L0_15%BIwuTljfSK#hQFDIe|E^tCs@j*ri_VH}D|MCg!J5fVxUXUGKPi}x@{ z6adItyxpqY%2TR#V*;REr493S3J7BuNxH|nst($P(>p+AXadl%IvJgqnwp|ggbCv! zt3F4I2QX~t=q&c~?STCu`N!dZ`mewf{;4`CDJl9{AIL@=LxhU3c*A@UDw#pAhm|*i z{M5V#m@JdVmo_#w76dmS;1h{*-LO>`ql6g)*%1KN#Xw7YMR8AIGPJa6C*U?k6n4pK zDRD-xUd;rr&&hA{oO$4bxP?`hW*Vl`TDg4t{HVT7dusF5lr%RVGShDE&<%jaQG3sc zeV?)-|LwU_YYc^%7jL8Yt3tNdErvHn{~}3lyc?4fg<3wN^fbJur! zF>F&~{RaPXXJ!Ap$q*X)6bA~BdVZTI_ynW45diuGy=fkonRi3cbqf(h43oHH8xbV+ z$Y<^>@RKWn^bN9^59X&-9&xAZu7B;Ks|kygjPn=sow#h_kJDA@^thLbm=eSY$ryxL zf2at~;}SAx5lOzNQb63+d#NrbXi{YB`kx5xY;H`>Upmwq+$W{X#N`V!^;Znw!4xKhz$V_HU2GUT6`BN2 zLB9&s)b&lq}PeR7IV}D78@pGOWG=3cj8%1R1;mZ!f8a{);Os(Z*W(`uhI7 ztapmgkUc;?gkRzVw6GZIRHb%3G^DV-{n^{=bInZoU$zOpzD-9Ym|&H%7XW_-*jIvb zySm;1<+CmmYX<;y%+O=T`b+0@fo3t%U=sS@e2Y0cIs(^SSx0i2#%B|7wDw~5nz0f9 z@*sdx2u_%rhsXJ1y(D9*q`0`E;4axmc(W6$&%9x>iNt6FtX2ha zW97i3V}~RNgngxhW>n!gdxq zAp+9)CI`KtFan5I-T>ItZx#J5E`=`2kB^V$>cjnX5#bH41Q?7seW#EG-hA}gW|g%0 zQvO&|Q7{E701-+^gtbuA6q0@u9WPrL9v=oyEZI?ge#^bcjH)T9ufQ|}5(L!t-vMjF zEz}~V%GFjqatiLW@-!gcfRk!DNNEP_-l97_8HgK!sKRJN*ksVX%~k?7Rn!>=YER8X z$13prx?o^>(nIl?Bb3#VXKEEPH={*=g%2`902fN6BsCnym5@qrhb5d1poOA= z;bP!br9@MIQ;dk5GN^$&HdGBpoFkQ-aGA#+U{PH5Zz)uv_!BNFl6Cq9+*0 zGiSjP_xgMkSr`U)=MXwcleofI?_7r#{tUNVg8(-CWY~|8D(1MzB#aG^aD^7}FJ~1Z zxQ|U32p{8|sZVi36pbLeSO~p#;&rQGn%4cFFSoHH{R3#wJW{S7HEjYumWg#32uh6o z-@4=%EnDwek;!>B+ol$1(z}&`^v9wpfCIN^Wm#vHXi2UGfD< z7>bcIcNx(zc)`*P=^q7sgv0D7^NH$+F}TR6e5a!H!u$9q9j;8YY)u^9>_`&jXKrx$ z?Ah7n^z<`o)FNl~y;J{?r8t(S?3wL^+`1l~a$tx5DNV~@_3}<=)pg)lvUZgLAaf%W z>A_Hx9peanjxxp0mm|I8uTZT!-=)yU`B$g{hO56||jT^)%vvV6PTe5#XL87d3wRx$0JY4ect6h`HBmV4# z4j|Kh$bavFU<)&LlJ1%N6^cQ-vTg}vYR#KHr$$~tq$zN4K_*+fOa6&Y3lf$}h*SgP z`kCC7O~}YUjBymkR2U4>_uUJiUL|U(4?s0vN3RLTr?xXXNH0!FACL|-}6zfXrkas1Y|W2FoX8Q7n|4pPpZ*@^3?r?()6~ zKxIi!&_-z0@(tR$BBA_%fZ0kEE&qyGiqYIP5$N4s9+A770q)y2<3ANuXrtoN^PDkt z0V*09E&GEg!1}_O+8+^?rGZ&C4-G#!~aj>buq&@ zuS?-nDW@#vR@Q{=lIO&9SWX74w;R5I&+7OZ^o!p=SIztO8L zsLby>dy;-MZ{q*LR8QY}sFpK!k`#8uxh`m`V5jgWU7#;6na+r@qs46QG?91w_SW4B zhyM4?kI@Xm47P=@2UcpL%xX&UwcCrd2p`V4I5(UMBDqHhCNx3^hIPhoxKHiXqs^8- zxqvOG*zp}WkH%C&9bY>z)ibU#6g@(`#IAbn0SPX87M}ZC}Jm z(_`BQn5+Uty=6Rh(N_zY3=T{A@f28#I}f}ko*OvGqrOg0m0|<|=0Rcvzjc>39fE^TF zdkN>tVn-zMu5$skjVv96tVH~0hGmFV_Ucm zF~Z!r|6qUrivRQJ@qA4eu)8ubH3gyoKs8iJPp=)|j{vT}Wv#702DfAUz`$0+13F_& zK^~B33r6M3?vAq;Sn<6c`}EC)iuv0*5*~+b^TFQ73R7kd*3^M~#q9W`WNfEUNu*hu zTY%e_H)qqLca|p_4ipr>yB+`SxS5t^YQN~s=J)xRv3q~n7c5XjhROAQqa8#;zV>F5 zCG+6x3Zyb}&zxz^%q~reBbZPhuncdUv$n-5k)vt9++2K2G=1_$@{UO#&K=i@6Y!Eq z&@g2`uv5cT(Zbc$&a%d7wDv|K45wmX@*OVst(mVlW%KG-8?rjgPxf-9oZA)#7~Ig` z{Mcdk2ErOFFmAuo519zn)GydE?tO3`GONu%a>vTpTZS>K=egyfOO#fXi0Hs6KK+tk zs)>o-;41%(K5c!zz@uf7n8smhq`mNFa_!8xFEDhhcue<)J|DNij3xdN8yT9K0GpS) zdaM0V<>4121qTf$wNnOjtl*9|FSNeeQE6q~Y~7(v79L!7du-gSkL}wny=@H&{c2rJe2I^b`!>00j-yDP?WurpPpd61 zYhkr)+itaN+qSj1?B!avZClHoY}@X+cHh7I^?LfRP8ZJg#r44(PB_fr!kRVpX5*`h z&r8k#Wf?A#$zA@4R(6c_^RlN#2m^wVbXd#lV~`YE`E}d;sYtG(u#Im86`S;w%DQc1 z(~f>mT2?Z*xsQWq`+QO3Wq%o~tE{$zp}gwMhF(_aM9ze6Qm6T(lXY}Bhh@m?4>LP^%d(TE|NkIngkiz^6^vlGM3nN4v!Iu z+#|oO>5t97Oy6OfIUPk{sB03Wl+Pr4EC&<9OjQ1AJ>OOK^**ZndPDT?L=pA`*$)Z& zty)=Dma3^13wA5<{-Zj$TWh=6{sKH}C$^Gj&07bL1Re!!%yN>iSC&>*>5PWKLfP0! z?Ph=?+jV~Zo#E(Fr&}am(hOQG#WH}c&TFe`Xz@t{Qz~EBco|L19^KqI;sBc@v0lZ? z=uR_r4fK;ZnYNDoO&h7YSb(=#7lNRiP*{$Ggi6=Mi7s^ODxdju9)M*?G+nsYA0CVu)emGQBbYs&_RU{x+MJPC1>rpkFXFr@LPTrkI}HNL@HA z@lt&^59tSSWOs+ZeWR{mZOC%Mfi~l@-?|dtDmiDrodrX;B7fpGc=~*prdxyLqW+Xh zhz&cDk>$PIihac9ykJWl zGTlA5db`fCDQg6?kG6x}d>75+mNTsZzkm^d5*pd8?lYK;9bF?s8GWg(bv+3|DJecK zTi8Yy+24EFUFT7b18A~GRaF6oH4W`3T2+gSK0U_sj8HW@tdk;>oxQWp^Vy2;zIPqm z3}F_}?_*)fUkV51F2kpE9a);AiTeXCkG)VGg6e@XOK_vmvyih-4tK=j6i{4S(ix=ocqi;ObH5Rp#KESynS!uNm@ z+=>qm_&k&w&B6XhRmpn{C$0EuwYgn3E_a8bk-GroZl^r$77(P2Qr#ks$~P3Qb6gMccG%!bV74?$d7bC|W(sn_;{McQuDUbDzi{ z2(QX8EAC@*;nP70uHc*wU8eMk7rL_QFfn8o`KGsC{xD7JSa+PVs5WG&ll7p8mv}cA zq|6vVfDsw^o@-#7Wz9`#JNH3AAcmrq@TfGyv_iQK(r+avUOa-^zU>{@9Lrdc6`9lwjCBqJaU!WXJfoQT1w~WfSFL=w_)4*1#}Q0 zy1fH@uJ6m+Re!BCl#Jcu*optakNq@XUWM%{?k`drl48k83ns1)kJo!NC;N6y4CwYq zS9$7>GKKJvm>iQm?JE+U-~V)azj{k@EvR?#}8vZsRmW z5K;Vxt(gE_&xhrw5f@NQP#9cDe`o7iSLM1YD%AIYAjN`R{O7}?-RtotcvDAgZziEi znx=9!oH$Hys=yS>CaDH~w5G{fSx(*olN; z(-+^a=u;6PL4kumdJRa^7QB`f%0GbK_4LIgW*e}4D_+{afB-ucef6z{^GqJcqECbN z9Wfc)9A`U#zmm7ll#MfkTHS2VuRF3+;2&7bXko%c$e|sA%3L!!{#eaG3dl8au(3X5 zkl!z;x&U?CtRz-Kll#5gBw038D7%NU6+wGwpkeHOQ8IdHaGjjuol7OdiofE$W>I6v z!a_%@wp{FPKEC(6#Rc?hgaT6{1^4UHywc1k(9i7YlMYJy_ve5gg%uEff1?*{mCoir zw|2gmMbB)aKf-U-gmo@IUNv|gF^V{0wtFB=c+d|%Pzf&z3sd-qC zkAl9D(7_Mt#(8BnNKn$C%=nK7o8|L4tQ~;+GYw4Q=(Ex$yRytKSe*E;DI}$Q>n>Z% zz&ibD@Liy(NHPD>YV`g|1`_lzEMib>H`B= zc8|h z70jaf-wrxhfgs}kD}LeYru|BZu$h$prGtLw+*$7^3l1$0&kF53AWR34rU8$eDwk7@ zX011%G}!s}bli9~!}nlUc>xHyEm}2Xp2eZj0t|8_Un&^?U%!4eZGw|(v7&gc4yIwz z#O1X)zSSu6#^S4@<5m3lkhBpP0U4oSMAb-LgNtXQm#^;B62$+ z<*6?O_+6V!u!NvL^`eT7^%?y+=g(W|{Z@kvES00rx zF3rM%vQd1tO?O@|#`8yhl!FL=+mTO;HBj;rx80f5azobrFxRcJQ5!u!UGTAn0(ocfk*O@Hm$%;;68}UCqdq#Y z^L;0T2>T`jt(0NS`TRp#uW6{9kX4B?%11F)1<-MQ@YEC*7bfoUU9H^|JL5{Jmp$PABJH~Tkhxrx)ZZ#ij->6|6zl7$b;P~g{REKGI+ z@(G>qZ_m^!Wlgt-*I`nvKq3gVhsFASFml0xSd(@_I+~JM2^-GL;%lUJ!&w3*SdG;g z(?&slGWnNXQI0=!u_-SMA^pH+{5QM#5k8C%`b6lW87}*W1eM13(V&BX6^mHmld(~_+&G6Ml`nCTu}T@r+PVEXBfUW*`5Eag~?rlQFln8 z;V8kn#deLq{-8P5he^j~yt%20{X7;Ll18BJeiiRBv{U5{k+HQw{tV=_8>hkb- zaIXxX0v4TO`6f)|wXl*v^U}fHtj^akv8M>ou-<4qNbvg$Bca$1V0<(9SF!P^qC%7A zlXF>>U`?cV*pe!)@LCN zyAideUr?5^O_Ral$9G;vW;TJT+YaMlb zZ8o3=hNnZ!EoEBE3JQb?>;ks@;mJzq2x@R=Pfa`YpF^Orq|N!;7s`rMRll}hU6$k> z;x5UYG#n=e{|*}^C?CCNos*Y0WIJ&p!d9cv+7XD5quH|~`#zpBNu z^wrT10=|THt5#j1SP32LITxi<4;sTMXb5%U+t2$MnBJ@RmDMEQvPoxHRb>|=GiV20 z83U&`UW)6XI~l2!ZmX>LM_CzcPA-{z4Cv0Dy&Lx5{BFDpPe|zWb zV$Lt5lWIxdMn>n4`vxqVmTCJy0F_TuzCI2GpFJAQ8Hpr${fd=^VN{r_uT}E|E)e*F@b&B0oH-bR|QADe)T{BHVi z7w%~4Q+`b4;4XzmDaskFuXFeQVhp+Bw5R(y(zyg_{l@B^`*h++c$}_K+^r+o`mY-z z>WENan2NTlJPwK62ro*EKPpKa$K)ERKaq|^<`;x98*)}UBV4DJ@JUVgi^CpClW$uKII4AumElLkSZ$5 zJMO3UJ)9)L*Zmy#C(_?`NqkHvn5Ss|glle>e^Tpk+I32+z7GQfx+8vfy3FqL;uf+^ zhRcE-Yz;_h0RaP`Mo9?1zeFM=BFgFL=(ztnH#^%mFmSfqcn;tlwCc=a=PWXqjNyXy zjW`>}G4CR8@e&iI9|Q6E%Swx;%z)x0hx3sV2sl|UAUFY-7tH{jt@g_STvwttB)*s8 zCSd*pE&Lq^cR=N0qdTA#`;sn#fZqqGg-DTI2S@+YS98S*K_bXxvrgqciv3P9ZNd8v zCMG7H%;4TfG?M-#h-^BUX>DyC84-bigoFhb1RSbaV>H|!j%9mX$cTW;Y%&H2He>Y4w2E^Tu83VaI@ya(iA-|p9{o&qSguRW1{%3M7c_hGC z;%c8$jVLpRC(+`SfK3PrMbDE@go2wr&0IIIKTw%YX!bm8*rrzES1ICsj~?hN&&{QI zC;TZX!v-f3hAF%Kfj=sKjcfhSGCHbwhnDS-C)TIE z?AyEE&oGt%!An#Lo?)&}fqx1_(tLF7wNObM>axFcSf|ttf2bgzhqa#6b|TMgOJj*9c&W#|D^ zQ=1v{zpEJ?ee_X`oF8CU_gSx5!LbzoOD(L zZG``G&M`!xM#0~TGap)uzFjqG#Rjze=VY_WvoYaD|1Po!U=WMpBmVpS0&TW8>KKRK zE&lzPusT4mR`cJb|J^EKZ2(A*nX{Mhn#v6!aa|_s#)6-VD^-i9axo3di5D(rZuid& zPmlR*0Z_oAjyIE)YdD^pojbVIU}Z0g{6rn?yUOAXU}v%DwA>U!f&oz-fC1G)%r=(B zUg_!|)2-JxI5?TgN=-*cM@w5?UVa)v;Ir7~UMu73UC+YC1~eepxVe|LojCA51#|xa zQPjy1<$F7)3N&rV9e=KdR(g!x|Rs?&W-Gx&K=7CP4HD3dS2(T40btPN}P<$5-6&oTuES#bxCH_&=Iel)vz2+ zUShw|txR+^UHZHpP{4zf9O!fXrkgTbzNRa6M-<4ku1>*@ufj4jsoA~C5d)|7qXXvJ zK^I&g2`+ZUPgj<3fJP6D|J$+d`%$rXSeM6Zv0@<;Gczgbzt_vm%uMUT=1-D@L>Uw4 z>@?Oqi|d*wN_m1-*9Ksf;iCppC58bL)=!D*bo%%30j0;|>6SxUEl|#J`+t*H;J?en#TM>AE8yRpX7CJ^Y(MTtbg|9)-};7ER^qO&@tdKAZI3tD zjQjtN?Ft9hrQ@7yk1vs+8^CB9O`;#&y%G%ggwN$PbZoPm&sIsTQ^5Q0%Z`MX^ZEaU zCa}Q*|{}us9HW`)SuAeI^!YdHPYbpjk68OA@sJMI=$%M@RhJ*1QV$>`nYEl zpCjU8w^snZ?xB5-fAo6-VgKD|(s$b6aL%7-@;e^>1eKRrK!a)yCME|U{?Oj9yuQA+RnsMkjlgC!IQW~rJs7=j$0ILgXkhSk zcRIR%4OlI1R)ky5mr>HtSXo(>m6!86?jgAM3K1fgX*Ji>)+**J0H%-f6zCc>zbgVM zc3z`$>k~4{N}|X>VWDThinrs+0A#=c`_ZBC@zdf?zK07{fli-SKwM9u7>G{ZPiiM^ z)CPAQyq^vMH=uXs-0zPYy}F;J$ZC(JCXXvS-vBKz_40*A93(sr2E8u7f5c1%h6})7 z5{c)cYdC&w|EGs3bO<6om*D_Hz5)QHfQ?-&jorctKZVF+i;BmbW%+TtnYZ>X54@COU$I-9upvAyH}ti$>Dp*yY-W7l z%KC|=&Ly;umM_5$IPmZl&FdtB06C@*{FpS)V2=tMe+TX)t!ATU) zB183T7w4EL8eOBZvdm|-ed$K49=62D&7MXcxeAxgHHwiLfz4n0Ooa6s0JT#;vi0}T zAi9VKlbkPci}$yBx)d#$JkB|q%va@VrLIj6qWHgG>i*bC4k|iq5BHyRcn<+8C?nhl z1Vn_5hk51k7L+HUie;kwBAPH*D@hT6hb$9%Ms%|uw?LI4aSeaL zB2!qaa7_^(CxJhABQ#GHR;amVexVSzQB~@8 z0vXI3!2QhRbRg-qw6OI zwaWMW=~!a%J0gqos^wEzo=XvcM+>OIZB`=v1l-CVF6DE@)XV1q**(CI1AreCu9mJc zU=#tV(}gK96Vo)c%q_sS!^Fdj0NfTlJX~G=!c&CtJsso%rp^EpuMzM#4i63vhJ;2O z1LB9d66MOatC3VzOE@?pGoYo72+syy-N#S#KLWleg z(dW+0l9kV&;`d~N_dod)PJ<-3bzHR6&_xXsKEe&9%r)^8aND-vVt>YnL6_l5%M?(i zM02FT6xZSsMM?tL%16{mhce}^?L(V`B#IGz2qhNU8cYmdp9Y0sv0gv|m=i?MpD`qx z&f2_fzCUy`PE~971FB5e2f1XPDIh(2t@{{9zfe$*S?8Hs zYK$N&Tv4RwYu)z|!zvzlfgSqzPZHQ&r+%drH%;o3KaT_ACFbggxBQ1Wn;(hjWQQ<% zBganx4Z#k8unr7Q-{q8${1_6X@kX~b2?-qsP9;>)c?#RG_ z(e|%?6NVI$V{B2TYa&~UyYgI55r}3jAHY%`a5b%@TmLo~OyoxxgCdEGJosk{SzQR? zu|oGlkUvKMPE5F!1h(Y;1BIa!U4ZP9AK@=To}g(BFUDpH844n-$7~4!9OX~CLWZ6y ze3FJ$uax0}=)#N;B%%H7E5<*F-Mf|W?{6{!3>9Hejim5-1M|GG#V|a^bj291BT33q? zSr}7p+TxO{6&-*CT0>t1nS_+ts%Nb24|27Fz8#lVbtnXy$sT$BC)W}w%y3=~DIOb* z3EF{`XJ+KDl-bM-iPL^LW)>!k4`1AY9W=3L!>Ppp4U&9p?1vPr3U#DPI5EkJ?MmH> zAK~UWZadb7-4_&j)Wm7CdM=@!*MZ3)Tn@7OTw&8j?tH9BW4YY?q2hO zL88}L*d@m-)Tyjeh=xN65u}sR2KLyrtW;2faKWTB?lvN7d3o*1`%cX{21aNmI|W9; zBbs$8rNj(sEFO|B_V0mFE*ZmSXphw)5t6t}RLZ$*0CWX0L}!uT=Vpf{DPE2`0{gS{ zXcRU-uPVu2UE?9F|1Vj@R1Ri(GCqN|68lAMeU!LM<||3@!dX>H1Px2Og!LEl5E&hX zX@$~x3IrnGwY>iR>#qbkiYeS0EHsFQ2X$lpxMGZIb@Lh+VMHH$QNJ#6aFLN#b>#FO z+T~-4^3~ZpP5tV7qQ*DLrKO_On{p%`+23W=Q9hbAQ7^K)>xDF}IIA?9FJ8XkLGiq4 zYlF_Bt6fgN3YNhMP~l=T2LIT7>+TsSmBb@=fbQd~GncZEH}V#39Y2y9f>FOyc-)XM z|Evs`JCB1(+w8kq)f^pBQEH*mQ2ZM3g2~Ui9XpQXerccR%_5W%J8Ir)ye@<&EYO0qhm&blJdZ8SBo^W@n z>X@0GDl@iE?lm={U1Nyr{=>RJA&(FyPErZxq5Q^Mk}WB{@qMj}kN(8V?VxY#Nit{^ z&fZ-AcwLvzMzC|wQnGvr51A^x)&=m7enqF{QcjDaH;LAiYud`EM8ut%veK);-hIcZ z(qAs|Lmr+BzikS~=3sm8&v>68NYJ_TjGVI?rIK*>c|Nkg4pz#jTqwR}9Nv_*Qg?Va zR6H)#KrgpYuUelrH7y6%39M#Y7F+ILa?bqz&HvghEQOhS=YSTLOD*>S@ zqg$^=!SZXl*3p8F-KmbspD6#Hm(8i$&`|RjThsM=v-b?&((TtrZ9w(I z_xtznl3{~SKy>B~SR=HA!QjgxPSU5P@Vbr@;@~Sf9mqpTk0TH;lcw$MMoJ4j3*@^V^gsurE<``arPt%k@Q-wPy%*TV&n8n>ReJOQCJGHR&N)6HS2O1Vad*W(|- z0N@wEN(u< zDIp=TdX41*4QO{4YTET+;GmM_L6aH+hQkmL|qt^r05T@+k-nMSXsWl~G?<7~6BzOXZV|zV!r6MkQa{HRqHo&eQYwLkg{)!m9rN$qMA zn~WNk%20wkh+&%T?pjI;0zV>`EUL*(f-2mtwch?dG(5@V4gg!B`kTUIk?(HF(oKm= zfG)^)%`l*_@}P1dnLD+P=Bwk$zkQaH*e<7BCP4rD*0T!!Fc>&zEA@M%GXg%iKRzxzw2*KO9y^z2fYN&H%R z0!HoSwfNwRWz1E{qgU@GF55?tcod#GkgEbhn5~N+0YCGD+-R9(hU|Oyh|o|@mz}^I ziCk51PfqW=RVw#=Y%Ev3`c&CAOtRtLKL3ML%4ksITqz@t3KNxk|ES@M(aUd*#F@}S zEV1%MwXYcDiq6<&D&lfQZdaXGGmbsnb7Jw`WOw_K8R=*!r$``t2W|1Rs8Pc>*|Rk` zDYBU&`P?DK`4wyqyA7ZQ1Qg?jw%wDN^A#Qew~=*~XQQV5V(sW3Bso7FGeeUv+IsU? z8yBY3RxSkLnUcH!epNw3sUIN(=PoC;%e6mRM7c6ut8%(ra_fiY2Ot{Hn z5qzYWUd&f=s;O{kWH9+HWxD#c?jj*meaX9c~?CdT+L!Q(w-VCV~YnVHoqeW$;D*k0xDP%pa1F(s#MP-v! zQ|4s3(uItUO%ZWFLrEb~-+J(GH*F*C*WBZ~E+1!t*V~TPp=H}^R$m9V`or@T%+C|g zp_1sdpC0#*IXwXSX9A_7&C{=LJ-4^V{noH(-n(Q0!h`${Bwz6t(E!G$3ut6ynsj&m zT^4ZQmjsgh-oZR1f^FDKT_qe{rK3yVqj;1h@?J-Z$;m8sSNnH<>BVJ;5B-p+VbCN_ z+5o8R$2a$dM*vGlOW6+Xzsg5skatf@>-@f2%;a-*#t4lIJAr^4#-T4!GwJ$L;Joxf zF<%OkmyiAiK!Lr#?2>}I%!+(tHd?JsT{=BxGvH(T^@o=0Jo#Q%Z5%&5FTLJ1PW^cc*P($$}? zdrlqNK>#)m8j+8q_=T$}l-4eVGiM&gkD2patRQS>6@JR|#6(Z}Ofx_RvyWfoV$+fT z^&y2j9*qjw(dXp`zCckT)@llg@NgKW#32Q&ABluJv)N9yQV=!3{ zZw>l$UiUEkpqa^G_tGi}vg6SDz(0|s>9cx2WxgUx2=n*LBDj~8pwn(B1G(SCxoGLu zw&GQ#l&RTRSkBG(mR))w;UD~iTB89=7t~y<|;NX)S@TBPJ2nCpg%SX zFs~2vH0xKd6}q4<3wt}aGV8RCwFdKO?ku>o9@#fLo7bKs=}+(=n1HhK&%>4l{Do%9 zkbd|(iW&Xqd=6D-lH4FC7i_TB-h3hAn@|Fs=Od#2B@g7T9I3Z3ZT z13!d&DxIoe5!&f3Jg#>fZ`2a|eHQY0NYSP1d^#8u%YX$XI7BL}J&xtDFXM25{*(i+ zk;_5?ujj2{Dv+6_0#LSjuUPUhTBm%_y-G&XeY!eE^6Ap%@F!HMJsqU?U2WN9b|n&4 zZY{WzoQa3eRIRrJ`Te0DJicnEc(1-JK?R}H;`n!Esn>yd#mlV|driqZZf8Rwv%Zo7 z^QZw_c2~*&pucaq-n9QccQ%7t{_$yhdBt&7p;B&yn?SRz`&iTx09CMAFa4wTO>mz# z)xwF2h}@hm-ycjJ+n3_Z?vJW`iY8cpKT2#cZg!E zqwy?13TtJ#vQRc_4QNQ0^UtB-A&RS}QV@7Oc>Zg6$CJyFWhJwvjf;wk0wu%ey);{| zu|}X(O<=e^5c&4@_Wn5OYvYC`7(=O8AeGDjAsACoP!Ntqf92K&cs&4=^mC*am83WU zvC=ltgCr&U7Web#!mCe%>^jQe@`*jm5&AVQKHpV2sR0C&A<)KjeM8dhWsgldVDma-g(-IEx{@84uYT2nNoWr-yW<8|PP{BXSw$rSZ%OZ*uS2IFU_1@BU zjsvekCh_p1dxTN3X1AQHb=Q})G+mPD!Sgh6f01;pW5@{OfOcG-OXxJ*D`H(y2F z&u`S&r9_&Jd`+#C>&npBD(~cgJW0yKlGX1i)#S|g6aKP&b*?%*sC=JW#Rg|aqqGLw z8q?34AS+Y?UZL(_rRApD8$*5=LZw!FwZOIcqE_6ZbH#zFo+77Q(6Euql5W(s4In3w z_5*9%rBryW2;6a*lusYkL;J?m2?csEcNO-~=U#k$fwBkLoyFWOHYy(>me)u}ZuiOR zenpD@EIB@WVm8lZH4&yb&aLxiym)gm-y+jG2UaRyx$DXPf)xFRbZY{Go?rw4n`>#E9opW0(HKPZ-?d18EmDBYekO-LBc?&bY?cMHttdiemle+6f$_J zql%X|h43SA$$$_2tu}@jITG0VD;~Nc%=l%oj?lPt!p2#LbM9vII%HsM($;o%sVu6% zas#J>zoCJKM(cp~Fuqv6=#xMWu#c-Om%GKQHQuhN}!nf;blEf*5pui|MblKdK2N zFIrXo!_6*sZkN$0eMkPIn4(ShvH+><#mHSwA+%~!rI~?In6{?vYIhZfD*EqUS#%U_ z+^@QN_Ja@5=Z&ycpvlYZAPc3)GK}TY?9vynr;rR%2${Z#kS;8i-5IWDfva{-i^IiT z>Wa!tmh;yuc-_}afebY#?l>p=4+b5$i#tRM>*@ZSA85P)7_*dd6JOu=%o1%Z(02bX z_$RTbZ+HlN+>&I*{%Cxjw?bwjfxTxeX;ymvl?^Xc7u$ailI2bNwfi8jnwn(Fj2 zMgVa%05|M?J#}7KacIh*mX4?jbjek@CnGZAteKYZ5tB6Z7q7u7!?p0y_$4J3R?r|W zd|X~qZc^eh*X|*=lj^}C5+^L6`;m~EdbBHJ-`GaI_K@AK+q+lY9xU-Xq)%h(AF@D0B`8bvC|k_bCv7wd?@95yNU@j@Ib3VJuXG0llCP2S$; zJw>&EbbN7x;aH0;ykPGpC5haWb~%{anl24I>vFq->sa&KTG$*RY0j(~hq|#+R31l> z!cpTE>a1k_9S50CUh8LXnJakgDn6^VY+!N963--K)I>oUkMni>N?Ao%2i1Pk>H#-!<^)`xF%s+aR53f zDtDtWZ%MKHsH`1}MrUe0_ha)kH93x{$As{N%yIW?kTNliH&ml0ObA%RSE|}O%;;oU zpa~|Vf6Yg|+OoiD%QJZ9Jf-vw0wiSkl-Pc7QZ|#}_8A5bSxK%b`HW!UakclXFC;w> z<)!U8QFp9&JOk7PBb6w<9CT^Kp7Pd7(nCa=;4Sn)#2~77bJjd#{k&O^X-Q0W{ z>;5M|TQtNI!J)7Ctm1`T@|Ok%!C99n466ZsjcjW8ue^4u3{GBdVL%Hb4~Kgq~?IFlspI<0H75w zv=KcpgPqtR_r>;=r8VmZGqeazj#`-=^(M0}UMcyf;AUucKE>?D#cz1oQ}bo_!D zPhKc`U-yv(=ZJ*V=JKdmZD59iryQIf7Q9rNXUbR@PgJ5h*zDDiHt8sgvs0MhS=036 zgUAu0wQ6j?i3V*Z<2hnw)U!lThNQMCBW-J!$;}C?=eXWI=apnXKpvC&q%a8SmWn7l z_|YIrXImnF?HLb+V{O`H-s;Lp3zb5p(Q~@(8TzsK`*zn}HLVz&5L@KQ+yk(hA1LWZYvI{60nZDxf;zzfc9eZAdQa2yE<2_C=C zN=CFDz_c+Oh`7A*ALnyAxR_iYT0QxLE1G{PESB$r(YfZl*YicT!viziq~3#S{f5_| z`aq@Ba8MPuV(xX#nUR4(j_&+&j%*uH?rPPqn`AT`@Or&nXy>=A*TAAts{%kyjXX|V zykul#fXW&GreJ1{@7)A|U?#vzwvi|p7f42%`(IU{1g+T8qQx&aZ6p7AF57hjmG1i; zw|>BdtoQvhP^)nSycpb#B_yP!S8I&JRh3S;yMasoQ@!%k#zXFq>*??@@axV2zZZTY z1f>|FoswYrX8IY=#yi=Pjf*KTNM+1Fp=GvX01%4Vx%^?`7*@7!8HKsF8%?&5O%v!< z0Y)fS`CCH;874e(oT!Fm36mhTkvWRt7Iwh#cUrYIKxPn+1l)!ILBG2EL$F@WNm?4K zHH-y^nT;+weLuX{G*0w3{t{8ktyBIS7PH0Ybq2r*snKtF15X3^s@E+;1`a0DUg`66 zat&?|4AlvR@^O)f1^pt^?XCIFxnn3G)gh+X$S6=pLGKKQ?vP8?Y}=a^d(ix7k-q&G zmAK&x?{g9xFeRZfOcz{N+afHh`HopTg1VO2gp|K8I`pR*p|NKeV{ z>8Yte0WZr13HquF5~=Naf*aIjP~9?J{Kl9-%7~Tk`30Xs&?EK$FT3}Iky#x8Y7H3L zFhISzw1)_aA4;uErF{-(Yv^D1YS3Po z&n+2GvM0WJJCCx`0;^uLze=&NYFDY<01za4WL!-@eP3AAeye#_cHK7j_SV3rCL;9P zz?Qn*;_DW#|LvBBrzA|JpR1yDkCm??zu9~v3q@_qBV*M#xcYO?#r%3A+SOK(=M zaW7xl)YNoVc>WJQbU0IZU#Bk!U>Rhy&Z5fHl$81ms)2se{j8$w>Ww&nSBfGyXFN&( z;%99J+cg04`OtMtlp({86R8s_*j(r4N|u*R-8dx;8}=ox)#DwRMAn}@eE$B& z^FvUMOzx$KIu;z{2gq&DVk8jNkJrrt+8t_@(t0fN9-x!!0|30(+eo+jFhkzph2K!0 z?s!F{$0gcJ+wn^Rk!eD3AG$sY#_@}k{;9w(5h5JV_;7)#|52EACGK6&^_N=rN5L8Q zh}K?GhNg%Ih{pS`(y57A=|0yJB}yf@VxGtAo$r88r?P^Azdrjfm9Xsx0N3GhIGqoO z3$OiFGJ;VXY7=7n>}veW{@ZaDc4;;Dv1fGG{uEKKZOqE6?1vH5pz`83{^w?Xq;((n zv$0UFtHijUumNIuH%jZkbc6GP+Qb*4!L+Pj$RO|msv6VN(`(1^&gFo`gE!E+^eu7Y zTS5E7Ubz(jOfBm_*pf0%NFbf+&x~TW=LIuo-odlSm)z2cBHpP3IekPOy#w+`+Y~P1 zsv3u2*$09s_oz@M1||hI(?v*^~-~%q?xX^wzn|Q%ZKq_tTr4h zXCXoj1*Qh@W7AarPq_e46at9<&iq$AMnf?_0FcYWW(eTu`IW6xhE%^lLL@%=n33Vr@%!%d5gSYQ$yV5rm1>vp`> z-Vm&hPTaG5H2!&FHI<)x`gn^x%WE2tCpMk9=>w2pJz9=Uht@B?GCZ!T*|#>Qh|71= z?dM}lS01S{ri)ea76>zjpkQ1(Tha_P~F<1I4ehAQkBfX z8^4UbFoWD$<2idW);1Md+Qru**TbIwjPAB%pX&j_egL`a`Tl%8-UEOf*xOh4+B17* zt74b+4SNiZid%8hty?(Qg9QGznzwn<$_UtGwoaY+NSR2 z=79lwr>XX8D!f1m{D)HX%lR(2u6C99kSE~4Sg*?xATlcP;lUt<{FGC_7cxL3a|x!8 zOyR5Sf$$}LL|A-mxoaqY*7zm1Ee%_*?vXj3XzYQSq`=FT!^qoru}+E_1A;`nE~0v} zIEPorM{QBAc+4!pZ{KS^$#G?BOHz^?TLtr&h_nqxh{%z&lcc`5 zO>}WM*mn&PISd*;iChF`&i5(kn?;xcf?*mmz9agL5W9~%2J5k$I|dd$AL36B-2{p{ zSr&5-YMaY;tRxpCM<}8T6Xk+Q^9er?gO`8C8gvZB_XG0vK_Wj|!YG0P&GtBg`y)4# zPV6f@Q8MSWTtZn%{R)8?b)iGI_bV-nSSCbuQg3Xj$qFqyqd!?=y)Bne=?^T?Ruo|g z2)QKRzMud2b}cE6p}0rE*_OnaGiBbKk3QKveZ>QU@#EmSNxre!>I(%ThvS0-fIqj` z?%BAoN}I*=^4K8_g$$DW8_g6U`nqlHGV022{p#_KOIC{riXgMr-tLd@JYTM{9%rtU zde*x)RIPXoL*r;#Cr&ZlC8j{dAm(+yTRwWK-C+v|2-w6FAY)qHxa6TXcXYfiXK_#r z3=ZZ46ea;ED*#gm3O*VQR$zGgHoL2xVF0%RgpF>>bTl+1&$?^KnBm5N6D*sit$sMr zVzY%n=miueHC0vjoxP{?BshG;2f6=6@||Q$OFa5#Lc+rEA>?t1q@Thu)6O1|qFR5M zS-{jk@S!X75G`em<%;A(!@clyP~!11(@b19jUI;m%B%am7?MNVHvk>i_yFl2xDybp z#V1Vj&3sfyMG~SPz$}$`nkEj&kxatmGfRkx$H?uR%X6yXi5bO_r{VYui1CkXa|Tef zC~D}FsAo%0e8>F7Tdpr9E|<5c*!OqVALa`9*Z>0gli209I}pQUL$}?|Yx1r-2pd|z z=DUZZH9`nXfWnG~oAr%yi3ybsSj9KImb}HB`eUx0IV^X`NlBzFVf^|e4*rFs zMlSkPEZ13}+(m=cq56w|ZfNp3dUv!g%+$O80n z1x7M&01AhE(cW&Un+E2(j4mR07fF&_l@4E9fbMs~ZXjVX>aPud5-0_D)ZmzNpbB+| z4$YyW1O)=W7LN{(GMuo9_hjx5?RF6pd3Z(}Y(Wm4%gYsU5bf=R{3^*s`}QiK2}kbJC(U~*{9 zDUyni(BRJzXz1G(3!PTq;s`s$iur$3y#-VpU9_#+5Fms=(BSSCT!Op126uONC%C)2 zI|O$K?(Po3-5p->-+Rt@m%(5(UDef9wXODE-GgedgGba$VZ+kRvojsS)~)g&u+9oV7z%ON}5)T zX%>1sXHrpnTR-I#=B5;@wr$X>2IzFlp+|zZYJhzt_yzg^KT}m(7)uW(fA^~n)y3^G$X##QrPZm|BY#-@{;BFLwGbm(x9_(G`5TBGc5Aw z5?|wDak|>t7Rk@8PEse@718{7T_E~|VUhbJ4(A^cnXGiNIb#?j78`2+OS7rs{UF?s zHgXsX$$i%%VJKgQHd6a-`ygkAv6ObffpShxtUD|dgYC`t@12pWx_ro>~?Qb>_E@9LMic zsBu5o$j%P$@ltEuJk;~}%jSaypt#yhySIysmn$OgPz$mona*QEqS~H(sAoIh%&5|O z(&@YxTkaEgZzM`OR(-M$vTGnGJpZ`$*1a(&VV$xV3)^nj;#H*9cu3k?rfHdnN`G@d z854r%-PG(Af^2>ih>ze+$=w4kh5zaimSpy&B-Tk+W<3QS+MgFd(LFU z-y2?{tX0jDL+bR{Iml69ETdg0PAFZB-vkh#DAnkVdEzA2dLTj0e&JhMLoQD!;jl7} zOfROr_FLOP5QNA>{cJH{k8=1hOM)ew|6PbhQwf|``TYQhmBXWFEz6fRsN&d~b_1Eu zY?h{~>i+x-roq8qy>9A1qgAHq)-SH4DS3hAe#Xse+1rJD^W6?KufV1;pY}IAUe`=j zO;_|R`O+8Ny%Waj@y8B;d*+hTu$@GlI^*{nDpFhW+nR-~CNcG&fAd_9PeZ<^yq}Zm0wCqK(A~~LPi#a$y^GgVw|YLm=?*hO1waZCCbQ1f3>Vo%3@Ol zYHO3;(`6hF_x*;_oFkf>TZyBaQeV9`RhjqL&`6v2;Xzw&vUL5FneCt-1fU4w@w&#b z;;djNaq;*90G;c@MS%l58JwCBmu0XULbZTRP4=}|6^)KF+(XjYu)j4*dQAJ8d5OCUL_ zN5#xSO+&4FXpSK=-bKGvt^mA=Q8^z*FLaR^p}|wj;y3Z35{eQd#x}pIL@0^3u4ihZ zFzOmvnfw;4nEk}-p|_c@3MppVtyVvz>kJtbLN-AOIP$QhSdiw8O=NLcnOQB}SOoPH zBpwSPt&cLl8dp;8Ua6i+VUh-M+Zm0&%D{aMOKMNoSB-~sUe9hyp(h-8tdt%bQd+bf2j*(a2bmEvBz?LX{l*-y3Yc6Z%R7Ts`X}Z z)Pfg4l#P^zy7vqJTq)W^O%e4e$MeRg03@rv<|md2vIpFx5zTrtrF#lM$v>6H`%TJt zetQUU9=)#-DaW=NUj#iB%pSLNxF9daLMp=%Or&klZX8 zCm$pPR<2L34>%#Ak{dqp?|7*{B&|#9$M*x3DN9nKUHk6b>y4eAc1Gvv&5m~CuVY+6 zBi3<*(CG@ewH6YN@>(WnGFA+#+kgD#+gJ;WN%`gr=E-mQQTf!-91KXcWnz5wNSrH8Y_ zSv5Mnw&^5h&$h>}P7b@pe5QK&s)P9lh#IsGd3qzh%sIUTXhlgH$LTA+nfdr>6%@JF zbV-7EDbXS9!{+1Gg{nq8R*=xx!BK*BlsN4-G-vW~D0>IB&7*r^INUhu^ZC-auMkS(sceqO_;@ zlZ%LRWk|*yQdbvKAuBrZ=+Ug)j#~q`h^p+iX=7%W;?z>wZzbCEqV07(xeL|&3Nwi( za5ybp`7szuNTtpySF87V!d10uQf?Gky*Hsa&mOC@3($&%%A*2ev)R)r6xTdD5dEet zY6Q?O1(BlKEfZADl4Pch$u}p1CpQIIPzj@puR|SCWG-Yu&wJl+?8{W?Jf{V-5#yG; zE)`h%q&+Z%p`Xs2;)h|eI_O;Q+zlr1Gn(M=Av(+DOv9Y*^}ag9vZVF(hWr>+xl8e0 zS83PKnJP)<`%)6-6cnMNH%|cY>s5yCS+h!uZJs1 z{P~}Zr011@vPr4(s!^?Kdu(7n?b?2vR>}EUHD-NzbzL2aJ7AiHF()6_l6Hig$>5xJ zAFb4-Cm+i0=+i^txorLb70g>h&Y??~k;$E){>tKuW2Ec=f-V$>yT!Z)W3z~sn+I~t zeSWpP_rhZg?Tj7K1gMx520ey9e&+Cw8OyIPZAA#=DLR3Sn!W`E{-6Yt)T95iUvq^D zUJLJi*pL8Iu@9-O^fY-;)p z;nFSLs!w-*HGm7+u4wfDr_NLV zUSl$q%e|xa9-vdB0_X;tn*eObq6JHi>`%LYgWM9syH|i_;$3I`S-?<39mUYvQCbt@)`HDl-vd%@%%B_Y?z&hzwSdL#DKa`v9?6eT7MKTC+rA{HV3$q)a$@=Y4( zzs$qkD(E@aov(AN9)HNU_ZLT-#a#s2zdt|RLtD&>x5VJrnbCQED5*i!@4>ZJ*z4N*xd)1HjhcHPzLwPvR>xXHIN zjPKI9J><%!#eV-N>R3%WdR%?@@kt$chtPgnN=85w@#PR){|+mj2D9&_s#cYBFVbr%UcEbGlqB7{gxbFBIQ1}t2**EYP` z@DGt#=2!)ZpU&6Z9ySL=dI|Z|uRSrpes4hUbbDuw7|xc%q(-IkBV3t(&yF^8#LN>f z{2F@Y=H90(*Q!y)EdIN6F}%z2IErNr<)EH4gcl?8;Cj6lFN@tp3%CdfhI8JtN4zS} zKfBp#CBP*kz#i8J{zA2GWYwTh`YiOo#ry~dRwYq39m3vA;c9zq+%{(e;H>l4>aDT% z`Wu>!&yD)O>de}UYdOgOzAq*jcRXz-3zx)+#S0?w5k_07J;5V(Dl9Iolc3mmaL&tk zON=I&DYDCnIP)9*Ybmj2S!gt$WA`%uCGK@{Oy#7-?I}?-|J612;vu`r`OU@PoT5UU z>@-&4Fn*8YbVX~iNZEwh&eOq$-&N_bd1K!2~{wBgcKD0#$(9atjWr@e}@~0Ko zmfch9&stn_b^?oYgsoRITpI{c=R6%A#|~lnQnuGgM)4qLs`~q*0Ac@TiG0ODN29pi z`>#KQ{Z(mZoEjulElSs}ewD$F-M9RtKKgb3N_r|^_PqsY-LE~(13aDc>%>zf5x2jV zOJJwRHq?%2>JFLu8(KACN|Z_FGPzZX7E*t6s!Fs6_Z8s2UBoIIMmv=p)6_wVxO%p~ zrst~X#U5IvTYibWdefaa_ft+0Hf-_?+3zmUWM5jesZc1QXIc2-sHX5M=w)@P)vcnW zR&{xu+{kTG#(NERsTh;3$z2Emed}@T^S%;8My|U1>%!ioN|v>=CXzGdEX?beeZ~4) zdF{r=7VC)G_vDO1`4Wu=YFMZqK$8J45T`Cry$_Gs)kMQ$wGmIV&9zdgh`wR{G!{CZ zwEc0GwedzRu3Bo|rDBH4=k`5Y@ z_;3(0{jZ+Js8XF60)*M$`j|78$<2~B*cVW-PaPk6!YG@iNtNH<>=gw4&SSWeNWcrk z3tR1;I%KK`ta)Y|*S?!82CgJ6>q0}X)cJ8Vti)!yfmd=vqrkXswH0Jpa8vI|6ljKK zb+#iQ;@zBPDvUWVCotSTW>v~z{KMKm@_sLn&YPXnG(&L|4Tsu^@hqx0)3o<=SC9}W zg5~f4EK%RM1?=~qWPIyx$~u{9o9bGwEh82l)e^SO=DyYQZ+M)Kcdu=T3;tD4I=0fb zy1B?dTYU*p8SHd^UQfZJDf&l(yW}ZEGBeaNi{@<>E_uWCw!}=YofCiP#k2J9`yjjh z=6r<0m}bQl6z6Fh)INV>3dJAfX#f_#I?kWM#h0gt zM@VL|67<^Z;=H%ar4?Du_chhz!sJL0wYUYhpu~^7l$o^YP5;HVWR0=ci>>`=vFj~Y zpirv>e&v69wJG4GIEpiO)*LU(MGclG=AC2Bt+9WRu>p=HskIW4!7kRyN3gB^kcx{i zzB=8n)f!dst9dIg ztbNN9d~2rt!JhEvwD4veLs-^hCF-5Y^gE_*+~zc&)oS+q&I%k%jP&vlPvZs=L)p&4 zL|yK)aDj@;A%4gXRjaeyy2DU@jM$MhrV>)w5_y})Vz~mPTIJxGX7;1tm9!^7;?2E4 zZSD4~F8Tq-il7XU{=4&jN5aa|`FdlO(KLpSb~)iKbPHqMe53zdv9YVEiIe12ttP1` zTGHx0Z6=G!PJ#QRyEgi|F=A4Diw+WSp z#Qa7u_loAnoipofHr6YJqoJ7PyXjBuORlo;Y>OSSTM1wQ9 zO~iFVIzX`j-Eu1(AvaqWj`nQCJM1dNR%c{vY%G9vuDrbt15{(PhLyB*qy$F0mNpRN z-MKu`Gc+VwS999&hMg4f8v7TB^*%9WllIe?Pb-KG zcMXoAn~VAsCgwLL+^b=xkItY`pPFxmqO5c^F{ zW?e%O1<(0$MULl}CM@H|oDRirm5LX}+@^AKPo086u(f-YIQ&tLNN_f78mZNRXi%#L zBZ)26&5_3S8+plbmz`~T6wr@l7C%v?ltSyw%gHLug_yPYTSw1jBECvq-6Sc*s;q<* zU^0o(?Z3s~Z2}uA956RlfK}oUsvPkOBha;c-bu}nKs*y#&nx`Ng83kkfU{jFf))V< zWft&f$vps4m?LpG=G6sSCJsm+*$Vh(H}r9RQg&E>Ly>?$D3n8$w3$g%8QVW?f2ISd zjFGW1Pd-4g&KoaFK=7%lsrmWgCOcj7eDUS&(xF3#g?b}|?Geti?fM;H)pXgEU0F#( zF+|aH33MhJk>6Xk0-U{&42(Xlo)H>q0bXCk``fwV-%5J|cN`n>opsjov$;&_{S!YwN2nvQFl z6%6HjOtI4bstYuUD%MRV`Yy6ccIBmtq+(^gb#NvTc@Vu8e^(|9n8#rpFKtgy%i&bu znYpcN*p7U1ivckWdKL?omEI6!Ai%jXA@JN=Q#J1WP(G8*i_mo*5M2V%j(Y5bRunjl zZ>prylL1vnix3<<6wI97O<0Da(ql^f2Z}70T<uYd_=Ye9k+(iqf@q34ae1#+9(fGpg`ol2X_}`%wiwBzxHm^2VjYci zs6)WS6^o3V49{~Yi@oo{`bmKnt$v}D6Cp}TUgZ2^ga!5 zh{!9d9sI*(v;G3*P_ zFXXVw|8mvG)4uxav_qO4=r&?KeGAYV_?!UY9k>%AkX<8%3FKiycQ0GpIY1LE+CV}x z!N);;{mgG*6G3Ug3L=oF?&p@K*IUM4H0lusE1(-?PnQ|nJZoL7zb_032C*Z$)r2Do z_e^AgIpHG`&gu1P{S*u=k_*@!7c8N!RrWRYM@*~lyoZ;>SCvwkKsL1?s@w>6h?M)$ z2a`u!hCwA+kb_7d9khjyUayLCPJ#uJI<3|Ua3u2GGX1MGN9%Jsbd(h3tR;aEW5lRO z!y>t>R==3tB^Wpt90mqW;5$-D1Y0yY4^+wb&#oyU%C(Pww;JEiLSGVm1aRbHfc$P8 zy!Wp5-A)8R60DyL1sf3e8lmmPMn?9>4;C+Yx?RvV9!s5@+g+T6frf5!zo+58jKF%= zx7q)1lFKg+yqwoO2c<-Zp< zABX#Ir-?-{kiodpX%?`#sY%#n0PDsK=te%a`G{YF#%)q~%=Y=Z0ht_70zb?Xs6`(4Ra>A_}}K5*{Z*j}$*#}O+L`#g)SP!r$e$>V`sOBQBkE>1w1$p^o9Vj?li z`|a@^3An;8qgtTLpQACZUHVW{kR^XnF9rH`Z#E=kWPn<7e@Tb}lneSJK11O-^}w;> z(x&rx<4$~gdVCzqZne@%jw^-49F84c5Sl|XvHnRJrX4AP?W9!Ssn6C=4gDu;wOA7OOA*>QM-hLGE zH&(rh9^iC*-aamUtoeVd5%2p)75krR)Kz?jix<@6{D;_Q`%4nWd1BWi#DXBQhl_6x)k zmeUUJw*mJtt=pmpmW*V$AM-_CfD{NMBqUjs0Q}$~1Hf|fuG$~alLFS4>}&nsS8R}f z1I<-d#}yVqqWxXx_;o`XpJy`R&nG@z+= zURXrreb*N22I_RZO8f1o^@o}<&tp-RS1P+BW!jk6WCZ-*o5LAOHgQI(XG(BN$} zeGHitfJ+KaTa(u-Ae5inF6oRGmLy4V7uQvOf9irS2tn|3B(dGqE!4UuyhN=POM8lE9tuVlfEgWkzUbAY#2Nk~j0?X<0k%jEqeXr0t71FxAkC7H%jaqq~G;sMZS zfFf>?2lg<`!6TMmSE}ww>XEnySaY{gJs1rnyVnNgJS_HnnNlQ&W#CN`mo0D8>NleC zygMI*fAF(VtuCn$Al`Dacsz)iU=VNAUB6Fy5$*4mwy`&o0c1O?lCT5typm2nUqldx z3{O&N>R6N!3IDizZKdP!Tm-b0Uo%h$RxfNH=L4*oynhM68^m>4fn=H6Mb#W#Hc)fz1*3{d03BsYlmxqYD5Yj`?{pMKgY;fn0{}Kme zZQ^xZ{HkOSoOmNnrJ_c9?WU1LO>_%p-ebG#rImgZ2NT88!xJ|$^>BcWS>I)|evg`z zmpa&~T7u2nKw~nOVOLccsZnI|4&$WmZH2g26HNKag`j`$HJAx2t>(0(1CL7I`lqun zO5W4@RKU#UfLb9EF8%FmXm2i?Z5x+epbmivv|yc`IEB_qv8uqO-eVIV3T9#sB|XP7 z4+NH87VkuSTN7@KAi=jR+25U>Hx^`;-{ZnUh)2Z+sl~2t`W8te;lJ>BlRL;OW6YN! zz$S!?^_x>+qy%pykXKOX*j9f*M#V$H4Z@MV-eiCgF}Mqc4po%0H+wip5x7jF^%vQn zMqfOWv``b2{W%|z*>N(u-HRI|N~kF5Wa@&Uh0U#t5aKu1Kl`EroC@v~Z7&A}mN`X$ zFfPly>05ZF<~NWmXd%x680RB_cxtm9$pKn7AHgdcpj!fAx%8(XJ6mTn*V9*$^c_$d zKL_yQHrHz{@7G&^d+P*P<4Gd+(|1z9=M|tX0WQ-E#$u%*fDii2KzL85qcd<_851V=@7>_!vyzhRV;Mg?N!<1kBOL z0k!>y`N1ZmiUJ{no3_%vaG#^ZoErM|hkmYPjug7uR5v2{i+zFV88wafAuiPGX9Hz> z*s*J2D`LoW*`{2o@>$THVA*8xMqNNqOXCCxkJ1dJ#2}D6vJib{ON*iK|BGQUdT|ZE z4<)2mh?yZIO&ba7ny+lL%{%6ZP}Sh1M69ZCa3IX=9K}Tv%83JkAd-MPxcT zc_%tSo-Xg-F7?J`^P7Tfa<7hpJWP+9mym2zF)0{uhLT8LZ~x*&cJ^g}M&OKJR3mcanZ?cRB z>0V>5=kC5Ch}JvW2jmB4f@JrJ_DiQMMxSsPDkxeWJur)BN^B|y{%#Lws>PxG<}?@y zK3P1f0)!XvK)VW)LnIvsRwua}3OeB2W-^GQrH zdgtzS&#ZvoP3&l=;w#L$8Fhl9_K_3LP%N6WFBLUMGSA( zg;s>mf(?%k&>=1!EZO1{nz;zilMyEI4Lx;V6 zbmjoeH#;|{+3t3mVw^cNI+{NPq-g>_fYK|Vg&5km4Y-O&NuC{dwqm`j^J*}70Yl*q z1eS@_QHx_jk>XLamIHcVfX8FKM1@{X?2eegmtg+NcBh*9_WHC#K7zO}ZW)(PyA989 zgh&_#jDx7Pw|5bdf$SZ9X0`5XV-cE;3(IqqpBBQt^+ab2IK9fJ3FiNEn;JsV(}5PD zR3?JPPCDUnvvcyW^O4N0QL`l2($Xh2c6Vbus&r;r-CF@&=*(EKsLyClogSZJM#LP8 z8P}K+`_!$X{8g4^;_N788CwZkawwR|r!U$Kn3oMsH!4I%Fa@$my<*nM8x-^-ZZm$b6hK z6dlM^<6JE}6faUP4U@XUV`XF|Ajv*06z%^72~j&RHaa#4ht^0TIL3e)#%?FBY^nqv zj+u&;Y9eW{9os!KpZN4!7R!o-x41@6emt&9k@Vlgf_A4qU1{yewsIRYskMv4Ooni? zBz7EX-PI|*zj+)4&M6@`z)aU4B&3$6sFIcy)|aG=lS-4cMJwLj#g*?3vFsdc-l>KX-Rf)mX+NMstP+YflNkHpW=WrEk z1|8TEzyNg41y$1CR{=x5y6ZS&grsToj!T1%=Ug#b=o{0Me8k99q^O;Lj31-vAKTnL z(!LuckXpZaNR5Rv$Qd_E=S4|-iPUiW@9=&D?J$LeY4eIN(qxYQmG)XAdnaLKO{H8(bgv;) zg`4q7w5=FU1t((GIo`O|)sigcOAi@pXN&Rf~Fn_}(f{ zdlL)uqvXg}z3deP++0_4o@E0(swFd+21r21ea?8!!)EXJVU_q zzM_Ce76;jb_+{4~t;J>sSs|m5H75w+(6T?;?-o+K@$z0}gW0UWw_3b;oHmgOlN*>7 zNPb7cdDtE&QAnJdJcy6$#9c^ZrlEyTk#qupVeSnoa(O&Vb?kwh_^LA9GSk;p>XB zwtfz9bYE5K(mA7#c(i?Fn=sD{18@qee$X|)TNEOuR{Kf}um4#FLiX+ZdOeJSy! zgC&5*#yIA%^Dq+DLazpk5TDRfpc=?eh?2U!F;3M<(?)T=SzWD>*%Kjs{HkUs$dKcr zxQ&bzXdEvXyllvV6|aWg;9#$0CY_wGIW}UJj||UqtEOBZv}FLk2a% zxYxu^B}NPRR5@e$A%{2JbfGlLQX``na)=VyzPnr*Z3VSw120~3k-<2H!+b=AnIax$ zVhSFWMM?o#Vq=q=?O#+^RNKVh2}=ecQt&F5%8pCF6)S*9ECx7HlY~}Pd3ucFW&Z@3 z*E<7aWjK6RR;`_bnp0b`0H1!WxskDqswPqv2C+p#4n$oxp;dQ3BAY;7>w|b%pR&BX zUV&p{UBhDQtPb7Da{Vzd_b?t$KRnz&ITRBVC9T6fTkSs^My;TU@O9ty|X3wl{X63`&V?uw|CipN(P3dMRzLhqMUe z#;9InA8lB*$yV_81RE&@|9i=j)(u5j=)e!ki?6!Q^;G1r)4>#nGntsN$;i}ZNkq`G zN~rZF3PS4_i&inqdVhKgKht>DmU{3XHS%~$6EJ+SIAwb~15)$j+Ug0`FFW2=F^_WqJX#$tNJ4gG?$_FmDPP;=klNuRlxW331}>CU3-)C3CNqF^cBIsS7{bK9{YUlvu}8nP z&n#>RDGs;V!TxqKgu<;tE^qd;piS1QiX0~)E}w3K_<(`ja9M2b_UovT#9Do1;EG2Y zoJ+MS2po`AcMKtv#z(k2TRY}ofP>DpMjGOoGn&pj(NW$KCw6rMBp`rwFQ^V=A3!qw ze4|slZ0;k^>*2T$!`5p(J$w5wgt5Ve1a3;q1?1N*A6Pj0j-RdLCr8kLetR-F8V`vV zm`Gcl8evo)zlW8=^xQs}ItLw7`U_eVx1$DGD;&2ra}T*P?gARcNOY;~p`^;SAN7!! z6P?eKfiiC2@_M8qAuK>IAO$5csoll+VbWFEzdv7Y`jcMlo>f@6ny!C{N5`NjoOtpd zdaqSC7&6|4HRJ}^G5?^tbgD-^)@>&acC#7G%1Gj zl%sCUMC1gn>pVSFNhy}lSsR9Wzlo*1e|ViRLO>;L3@s35ZY5AD6t<1RN+UX6{WB_c zzIzyTRrj0@bPjt!V%F*XHm=pg)nrmC_oEiGZgespxZ>aN+7`8{;gl3(WYoG(X)$@3 z{3X=>;W9>UA`xzsMyp|UT`KMQI0Q3(p@k%p-aU*piW_TSeAU0iRj*bp!61=g#Y4vO z?}G;=Gw)@hR$WQ`wJ75c#0b`vs%%4(KE*GuEtNoOL~YOMGEd02@!w2;15fzQ>EiSf zztBt%>1N6Sk;i@b{gQE`pl{(IpWn1`{wU>)V-H7p9yU&S?MFOD$rb=u+lMCdlXvIF zWW#z#bx%}>Eo8%LhlRo`a3-tTFA8LmJr<=Tc%T!=>r*xLXczT|R~HL{R0g}7S3_BK z8D?^kN~_KpFUE-+@S1*&$GjUQk0q`wa9|!iC}Zi=nzHD$Zs3=;&Q~gPuxvk^{xMHl zA=adcPQ zX3lkWZpz9dIC5)3BAo@_16E{*l2&jcHB>A%n;v^us~m{+bpIThuczJ*=UTc|03Py0 z7f<(DFBfyK;F(0aJ#EIMFK;6i=ACTpW*5cSq-nM$3tw8%6HwIH>K%?1T2FF=$n5)$ zYqd1%*0Nc_L9*a2Z?BLmS`U)cHgyhLffUA(8l|ls6H^yo0_gnSE|yGN(X#*$lJfj@ z|87}GM*D6%smM~JX)KcYrI0tWFyT{p@|@38~d4n>4O=ybyj5rf7o|E9t=D?W52Rk zz1hea->018lQm)wcMk&b$Ar1<$!^B5$c?d z+a}&^e>+E6)AAUaO4)lp16;yVUt5mpmMvda$8&}Lo8Y62nnu0rqxAD}>Ub_!z2jRU z$;v4PpANd(eH59q{8!$sfD%o_%DvgrM}>YO}W}2E7jK+ zO#@r>vi0<9;O5`0`a*}6d%q9CYrXN$Zi(hz^x7j&ygR(^1++TVl(S^<=Xu<-mRgt>gYgD`Ya}T=%lyl&q8Om-n3QNui!y z$ebSA-ENf=Jw26~tl|6}8c%JQ)?0c2t@L`6O)FPBT!^Gb=jl-6{MnJ%WRu?YD3QC& zM(dmz+Q29-Wm2g$PKyrO49qrTSe#SGQvpn{dN;`h!iSAalkLvmo}Q7Bk;@gC$jYyw z%^T~y5Q@l?D_vc^iw9GAosWBIL9S=|p}=UcZ4Z7MH90v61VjOorEeOuKue^a6@RU? z>=Y%5bf|6iCv5#ayyqUd`UR1mJI-kTy?N6GDI~u!YmX&o4Pcu9cwgVk%gecuXbw3= zQkDBY%K!-ukSU6T`bGS9F~;m3$pqmG*uaH_-=4~7zE89eJ=op5wozTq+&9*F8+^vr z!1X@B+joul_NldwMfJymCifv-i2lr{oj-oxyf$q}IA4=%wXoezp3|Iu`SJ2n_UGfi z-zC09r3VWHlHs}>FN_2?07_-I3){ncjGEC{^4GKi0etn zMl`OXeSY{pnvnc@G6^)*u(v^T6=ufP+sfiIKYu$39F#NULH4)io?tlW{cku~EzitB zIimWph2@wx{k5&L>;7v;W`(?0FU`W0_iCDLSXKNcAXIi#RIw=CV$reW?pT4>E zGycArJFjw*z)L>x9DZO^UdP0JOfph?QPGnLYvh-xZ^Q-Cv z5C}Di#kDUx1Iz1=u^2HzOfzk~_uV{gD9^Njw3eL5nTn@*`%V_1p(yA-?yxlg)ry|6 zouz@`rnADV~(~pDkS~{>8dRsM+YW2cLR>l?Ci?DUPv*vHt~RuL?`(Ku*89Jrd1p;_x}QIrYH9!r zqDV~UqZRAU)8_G9JHL9@yUsAmS`Top&Zo^{P1vZfn2gSgX=T{!gke1{cdrRqZBG5g zte-$2i*|UtHm8*>!WfX{>0h)TYaI~_9AF@~S~baz{K?><ls9l z&#x=l7Hxx(%hS7Krq1HY9GTTOgL+M3S+4Cu%Z_&UfIgjjuB~3xb0*K{KDtvC|pI9w2jz~tt}xpU>M zRQ}|`;PZqQJS$$@hBIu7w)78vV#k*wn*)`c60arwvoq&>V*HvmeKG+5%Og>)MFfHJ zdIt~BJ)hUVnw9A1z-4ykyxp(@@+}hh1s<_W22HQEJq0k~6QQFNJnhHdTL*8h@S06t z*VZH~P=O#YX>^=XyZZYQd*1TpU0B+mlATd*rB?kY@+OBwzA2KHqs6DqUR1l>>(mZM z4=~|N*vN8Kg+}uft|3DHT$1r+xBWO~(u$qaBsx!tW106^Xl(1f$ty_AEzirbtdm@0 zJqjZ7n%x8UNWRMmXsnJVs|j)UO1}8NlIb-Cz-y6VVQBHR`)^I{Gt~BN5-H7L;eWBX zN~kDe49Tfv9Ss}xCAsnrO=k>v*cha`4B(v}C8qOamLvg@RUd?^8a#P@yojE+*6alg zXKNm!ZH{?OGo#>coyyKRQ?yS4O}cVgotZWk+;m*zwWx`k6O*l5P#}C-#wjxv?Vm4q zT|#(xT{++Hc&s)$*1Sh$SXUpMyQC0WE}Q%o2$ulr`+*7pcFE>&JA`=FgpNn_w{G$K z>J`Gjc-B-=!HE9P<^uR-yS@O@uCPIHL-#9x?GQi!*Q3{U%%d;H z{9YI#PPTKs-UF>yf3skN?t2QMmDQ+#q4-0ZEtJs6-g{XiFqxm|m?@csJ+8E$d9^?t z3L=D`>7aV_p988=MOPgnz;k%{7+kp^h(WYwy@;%tn2|UUkMF9|oF2i&`z))@@zk-^ z$MX{%GA$ysQkSjs%J%B@%kYFM2N*UKO;e~blM+H()ZBZhqs|nDz&BP8`@XrViqjG6e}M)UQwWv1FM2W;75;AuW~ZE`TQ|(`n-@ zPZph;0Zc&Yrlhj6;T;DBg~@hX5D+mVMv}?obbY!pP5KLrJ-}Q!Bs|<#HUgtOsn_tsWP;HK%`S439VXS@Q z1|dF;SI4i$eZ_j3*#l2Xl*bUP7=Fms{tO{5IQBCwMVw4yC*z`M02%StIJLp z=gE`kC~)Hm!QtWpI@E+`J~V9-UsKfFbr6O0%Fra6dGDuZ~a)-#ANz>o{sD|Z#Tj}vD}PRHcYQ|;tiO0?vTkP zYo(Wn2n9>~g4?~Hw4G6@9LmB>SW?`E3j=2mkqaY=a-7BJEjuKCM$c_ff%_q*eNS^C zPqCUWbMIwg7NG9IR!8Tn@T_o_#DZ9PQ*l86VQd-b{Czw@3H*`-i!1y^*}hY{@%pbo zFiIF=niqM3>AW6X&==yeArLMmov($l5{_fuA4xT8ZYdqQG%4@jO0WciX^{7Rg!JW5 z{JYgS%SeDI4bkLpe)Q!me4O09l&1Kq?{zxFrhZ~Uyd zzZ|X%Xntv!z@q({7dqLf2X!Ur(PKW(-RS^)Lbd|BX8mD?)xfnY$VcP@JfL~Y32X2I zgf@J@j5FSI#!5KDXp_^Jr{KPZNJ z`yRZI5B>%N*z@D#oJaur08kPi48-EI>L;&TU+2GkRf*e6e3Ry?w}B%@pa0))Au%YJ zca_!HlL4@cE=Nc#h(7+HIJ=>=1Ajq{$b$4?IKYd0pvI zn_o#Ofj{S`%f%+}*y+N#4(zDyc31#3^1FXSaS!d^IUvBh0e?eR&h-s>CDu2d?Ao7Rz-*yP=((@5nNoTW{0jKomv+o6`kh;@ck;+-8iq2XLDC4#nL0W85*X zV_#+c4-N?AUrU>vc*xt?)oCir(A@{l`V%X$)T+oB4mt_A#P0RZZ_u^1W93R|lFF}_ zi9a@&+gB^B!*tmUQBQ&jK%nS@-c6q-vAj&uIE|>NYSs0bfp#5b9kFI|2-FT<`BVGL&P%7KuEf(zus>%uhNQ(!D=P!zQcEl6hh>077-SW;q(;;mfgg;Pm* zSc3=-N|MSWF`8u*x)`2qW;@NY?B6`oW9D8O|0@$b+?E^07{LP(h^VGB4X8fDH{J^( z6MxVs>4T8J-t)pFf)DtVAT5F~__ohIpurP^)phk*3>)DuB!LFPkvu**`N3)9#)k*q zn;zis*z@cB5;ATGo7qfJPmk~eIF(4Gu355Zbv`GJ5#?G~Sy>r~z$%*KUhXfzvf?Cu zVt`Hm>T=sCwZub6LKKt?615~nJJoEl~r z0(61$ODNSH_a7*T<=<4@(g^ZqM=jq*hvzfk^wn2H0Dyiz7rx6EmA~P-f{_)(3#Kk| zyBD+OMDS%bPF#O&fW5_)w+VD!BdkbDE1h!nhJ;W!Iy%@XX9M}{(N`p zJ{Svx)sL@RqM~FbHq3~At}U}#!*$aD0l7A4qNs~N0z?Z0tKf}hGtU2ys&k6Yq>I*d ztd8w;l8$XB-Lc)VZQC|Fwr$(CZCf3ylbrhZ9{b|lWCWwuS6Q`cVa|6x?}|Q#xz+oP znvZn@7zpJwVVZs~vBR|qwzJ2tIZD}^VKEI?lW(m;PWqYyhq##_b=+br?%*avW zkGZl|mPs2TvB&*Ff9|2s&lhbO*TD1K`Q!V0zG>BfPC8@#qgn3w zZsmx}}X zhE+v+BA2PI{U}icI>?YNS}GEsm83$<$g_@|w(=CXO>R$Xx^3y4b_4XRaPI*gF9QX; zADDV{#5B~Nc9OBDMbavI7q~b8_E~g;4hI1 zBC}dr)A?lRZ3dud5m||m_VALj)8&i7N5j%q(4C^-5H?axh&_cd!cS>vM(&uTHPFURyYxW>g$3rkvqRdDE#;t3spq?ofMN^`+0J~YHqQtB3P*r#A|R z1pvhweZg(S0C=z}jiz(k%6Po50ZPi~V)?o;%!J*Oqk&75t`9Ydvp&E?y!JF<126_F z{tt&}!|TGBCJor^oudFS2kP>WBXome0?D6nl9^%teWa*_Nz@mh0lk5tJR*_f4E7FW z;}k`8_MW*CZNwcCp?s)}eog^ifkXN@iVEa7&wHf&jHK`b!0ZabNeK@|f>V`!g|3-zBFmnQPr%C_ zeh`>;@n0Zi?2|8F?$1cBg_ZP}vccnICLu~d?1O%v&h#=pW*&>^sK|uyej2P{*twha*?a^(0`hKyo)x$8-dYMNP(hF(70#o_6MjX);`{(MhAA zhH`-x^eP`G;RDOH`ekqfa=qG?+PqyYyc7lh4?2LX0FCdX_Up1P4V1~;pD#Z}puvds zX$&`9urxjRwGG5?^H-dk4L=`6;Emx3(W=!%&8(&NNf2_EIf!!{aj4-4aDw-RrqhGwr1f{nyJf1e`%TE)ep2r% zf+TTX4|8H({9g*TlQ`&Oy;U8xFg1R9lLe-Z=HcdQ+#n>d1j@(L`v0>Fy0wMA1K@$5 zTh4ZdAV7L1L)8rcz>AYv$k~!dkVHQQMD}do97?QZvofd6jwNIZY^{3LM2b?(r5UNW z9REx6d~A7P1heOKs#>-?YdO|bb@#{`TL{%}QnS_C)9#ujxmb34WkiOs=_KuRYYyL` zKd?Ld!JKys_0^%BVv}WSXm3uK%}Olyv^A2#kYy$e8|IoDDp}0eeluRPvo&W94sF_y&#DT50k*b~Va}TB`}ww92F@{*72yX%AJCg3yUo*nBRN43rwfxI zNV?rMf4fyJ<&5QyPsAN5bx=zwlk#d&$4)-xdxsY6^BHv^pljZ>b$Bt8+11EPGTd?Y zwiPnrO8LX=E`S(^Yfm&S?=d6{X7`SXDv$;>48;7cYayTQBuO+jGxKPum_z4!QQXOX z3^d^w3ks@U(-x-as=W96QzE2D9238`jKdrsRip%t0EGYDaX_Gni^djn1(KzK$*bX%tVn6z>=-)0-e*@-W@icM zr{dYJ6#P)SLKA6NPI(VrxZZBHt}l(Sj90NLo1&Bjk}PXh&6#~vn%y2IvtjTeEs`~J zBZVP7PiN`+2he>mv}iP7g5KF4rk{sJOW8hJpmLK>22<`Hmk}!_!-YZ4n^=F!08NdM z&UO=T1!q~qZy1n74%Wvi@EP=&(NoMZ1a2WKk3&FWgGitWoUf!3{r7w>TIe$W8bPj% z2+h*(xp_|N3fPa)EEJ#$t>1hrbs8^SGsffBNLEi=ouduXYqb+T&UnwE$4(|j8ISTX z6f{}H)8*Gz$*^V8#Mmm&75^{oUY5lXHDnyY{XhLx4v+84 zJx_8W7FqKS)^|!p<+Rt~6gdp|nbUnK87L)1*~yIe6$HX8Q|8npW@qunFDW7hB0f*b z1OVl7`Sfr^yT)n#*?`u65CGgAj`aCUFvg6HW~vJINC(AtTy}Dm`t_(HV3d4E|B3WD8pPR-tQ<)!&tFx(oF($+Vf&A_g zj|(^aamhq89U~NfX6u<=YrLDuebw4)wGG%a7QP*{;H#->BozEUTa=V>)B0QCsj4D_ zC!MF%4xza7b7skQI<3yaNxo25tl`g?zO*L4!_|gk!o7jJj2B6`JipIuv3JF{kfM9d zA(aZU2F|l8@C!gh1{i3l6akwc@2ds2BtYM6lrKzq|Lw`c;^H6Ggaz1u7mube;1sx= zzK)S$N@gt9vUQL^RTwcgRO408+{4?|@Y|?Cy+JCW#p}`OY*edFxNPCHAYnk~%S&dc z&>+#zCDQ1Vm>=-0V>Gu<(hYMpjSL$yo>b?sIjdmVXDL{}c2+DsOvee-{d9BRo^6~q zAqJ7xQD0B4$)+brTcL|TYYIti4CCn5;_(thfe@Of7tw3IY1qJu)@AIcn2p?_-Uo(_ z@6*?6$9ZpQOqIa%wf3`Bd^AOdmC?cVwQLv)@lQVp85miAu%e=E!Qf{30_D=5S4(E! zhN@bn{8~Gzji28QQ!I&L&EK~#-rIY6o;JJQH&`4^kF!}!O{N<~G9tJB;al2p)Nw|Y z6~W@|RKvtPm-TGG_sOfp??mQQg-^quo1Lk^(-`~AV+m*`q!Lx*%sn(Aaf%b`+vU3r%3>xFDWq*Cb%8;*VW&vocEc|Dl_g_ zm@7RfxjDD$uSL8&&rm8WG`JDvE$szYi}%?nB9LG~jCJ#n_IF=j)4$_7(Vejtv}ANC z?7KvWm>D*fwwr6)vGOPkz8O(kx>&CF)z!oxjZZPfTq6F`?DneBn44W&9_MDx-qs~Q zM*$cfT{IsB;!btY@f@E?^N>5c*poHoOh@eR4KP$xsZ$Tw(^mPhQ?3{t_iLxK1t-^8S*wceP0^95mdMAFKwhu88$q52Fz3YEcbUgRKqTexhQX;Fs|Y zodKws8W$elVea5k5(VPW6Ry@axJv(2Tx|`0Ybhkhd@*ZU@2)1UYpS&}6g0@IiA&v> zTO7fvyQAr6F@@%S*I-|9VNq{<(W>b;R`_)*JLSBEj{Ou~&#;k*&azZc(WP629p{ls zw;G==zsr)p{NRd|wgEfA{^JMc>z&Bu^fA9bQ%Np0iJ?mF;y`CnbLdzx8Rm<$CMpUt zsdd>!p1fWU_E{#vt%CZscGU+db#y_>Pyk(7IOI0kJ2Y z8#y0`+xjGgBgCo{Rws(cL% z0UdnJcB?%&$gbYe@%5fcJukhhOJ;O}grzr9#)NprSxyJzB9GR*){0D#LO?>MX?1w? zsNI#>*+Pt&v5(4qwscI+F&}FwKB2stl*my=LVV=EQ(6nT4ZqPS4#VG0=kNkj;iXl1 zDO09K(}<(lSm!tvD~dp4N&>ZwL8%b6T zk0#&boU$6aJ6ScSB*WQHuG!?VH>iw|9eOGux0X1{Tal&Kk+U}q?kG|luuR@?=-gc0 zK!8Xy(6@OV-MvJ!vv^DHbyl*~OiM9@gKAj2isd8)u9a6A4<)4~Hz!Acwr448G}~xg z2bh@>RV23)0({n#1NBB$dVZeD9wkE~BODGguQ5lFIxZc)EFtQm@$G?pFC|5XxEj%d zs~bZ028`tD=n2g~-3z?XbWc3!D>8B%NFV-RE+1V3xY5JwDv9w|S2s5c3k!}w zS_LS&EL!hywFT&0m)x_>MqbiVga|Uq|DE1uk0m~c`M2*$ zn1$N+Tl=ir_#ehh5PjwTvdv|}Dy>8O-c(9@Oq)yMSYbtJH2BP_*b?BO8l>c@(>VuhzRCNOmPCDm~zw5IBw%S(&T7O$9dj(m42 z;oeGk78l${jkw7zDtdSTS^Z^ojK+GsX-I+f3rE3Nla)Hyqczs>jF!f0o!Ag3X)5Kp zkvTY7cFmH2IoYvNJCx_V)GE)~E6r(~TIr^6?@0q&KNV8iKJ|@rr9`i=2hvOod-+$u zi%h2<*H6Ae1^9XCOh|h?H{wWrYEz?HggtdwlH~gVYBQ41xNT85snN%rsc*XdwXuX} zWuc``&9s47ox1`!-#39M-rhjy*49=-eZ9#{cC-K^)DXb!X#!4@Kp7|}56?FUuto7= zmQq4~c2?Yeta>oPE3|n&-Vdwq*zrg}tgcS~e`mN^qk8jNKZ=R?e8nmH z(MxNo?;@{8=7QYQ8o*<}+!`9xd*bOCw-pWzlyw)%&}63EFxf@1W=_{qX*J|q2l8@k zPuKJ)>6boQa;gi`_WBL77;-8uZkBTHulG&tUrWw6QXZuKTxv;MXUQP>7U(jKuo#eG zzFltlXi+F4x8_pc-K)mt!(ua^yj-roDR?&cMC%y%2p@DMTbkaS3a8ZwnMrTf-8_u{ z6}b%Zs_C-Lo(+ddVyUA8|s+n@V)n4cu zmfc5Rj49gVQ>Hq+sF=vlcieUI#P2rP7%Ye0({96&-fGZSoX=PDQBk4#w_bwmDUedJ}DTY@H+pXd!5HmxK07fdZRv(Vr*{I6%RJr}LH#tFO?I63e!){?5;u z?(Mtdl58%wvL}}US@^K0!udF~_n8Y}8qbE(2ftX|j}%!W$23R63190io2^`kU-Cmr z3p<`RMCrsedJ1phA1CMKkNk?_ow1@7T;99!vW;=+q2zBqZ^O^raRY`))#L6Tx3P@P zB~sgKcUjysuQig+}Vj{@xVn7LVU-Nf-V>zlF>YExAfVtK!|ruXVdVT?l9YQL1OP ze24n*XJLe_-ef+QqTv6f1Us#f_OVbRrg8rG!D=EY@9McTg!Z;fWkz?jG{N({NA&bBkOV67Q;QH4$-m? z@PL>Oi||EqM{Y=ExNK;yh93ZKzGOj9(wf)fNqUp3YE+idx`)gLas=!aCtazD{tL)3RCa8Y`qMA}W?;A)HL{UXPeJ)MU+&t?K zHBy?;2{=c4FERiR$LVUc=1r9=DMWa<1OMMGt_8Ln9sJ)1(o0StB@T~-)Z>1CEcC_4 z!}C6XBrtfR&eRJ6{+WGxc4lvHZ*IMW_k^BW-{=)8ZiI??<%E3l`zRTr%|jzb=DuWh zhr;)HX~)Bp@Wrh9_)h=#mUq{csljldrx>DFUW)^l*YLw*-3a2&@&%NTJ(W$UPq)7Z zy*|^l>h#JZ-{0~~?Wvl7UN=u7U63{hMkMwaM4uWrzwLu36AgA|bbWV!E9~|c#pQIl zz{_azH}M|MuBf(eJZ%56i{(B#4<`bg={e<4x%$9m&!drE)<2Zp60 z;`0V~{M&d2iR@nQv>TmsvY(@sZmOE1CZ)T9-}i0^D{1(>0WR`p7E%Y&6NuCa#k zV79fGC}AP^q$d8;efGC5qp+TVLSd=amIG8g9=Z zZP2utOr=NMC0#`FpZop+VKym$-?FT7Zh7=+X^17834448?Mk9yJ_#-v>vlhBlr3cX z(>bK?*-ZFLX-=*J=F8`K&0nX>6*=R={oO!GsOdAU{YAa5?ZGkhfjUj?FEfpxEYV7& zGBp|X++#12>YS^*bo|8_sjHJYLyk|C@auOr+(_!b%o0*jQjSrL)!k*b17M`h4IQs% zq;Hw&tlaxY7EP8DpxV^-FklVrgSy?zz-goLXN3wCxKO4m@B1`T$~G9<-qY2_z`#Ju z^djHyZt%x)mF~vflUN%B0r9m|#eLV$zgx@PU3@nfCM7s?I$T99X;W8GynBF=#Da*6RF1kk#H%q0 zlF3jIO)|m^F3%M$=?YY!=~HiU*)B}Yu$zfJJRT=@RUfZpjdwqRKeKJfR)B&i!x@c1 zrpYEkc&0KSSS@R43l#1I0TEyEahmq8niHa0rp$Zx&3{&bPrulIm1K@sKK10`&w3Ut zE3kN6XWi7S#EJ`+AmgsIK4$vJ`cc&fY?ctbnpMaa&Zj9ftPpP2N!)*r)0bWgQOfCJ z-z<3+^su4Yy)}jtz?HbG$jb zh@L(QR(bmO)TmgMM?5?BZn5x3aiqG2Rq{iA5`mVeyFqvBBe!jR#EgyFJ$hTII0AoC z($_C-Ri)FH$icw@@E_aX-@o2$Yp~gB2dD}o!^82{Tn>lg%F5^?>LOy9Fi{tCWGnVc?8 z4I|Ew2ci&UU)N|2@AHhRFKdxc$zGSYhRtg2ju3iGCLnZx4G-Gi!(*dk{bscy(N7lk zM+Ns6rG?hCBXv@~qCPOb*TWUv3uet4U6Gck?8-XN;Dw1tVpK!*)e8D#yRg*ks=S8u ztmG;Gj>6D~vtlUh#s5igx-dVrZROO_F%FVcIEWCPuPV6rF%=t7>nU2`a&h5*p+OG{ zn8A=Ul~)i01M!pBZ?XvJe1Kp#kjT)id3b!tB}ocFc4(8E6z#J$F{nMgBc>&0j~4w+ z4QOydi+gc1ZJfxpnWE|x&Xku1-NEgw2HAV{=8rhpaRZAJ4c8io%>qzDoWQdrgaVC_ z48aeOR15LU;LA~;rE#Rw@x>7PYE@XaNy*Pd3zU-Jc=7Uf3oX)+3oR)43=|#HQ=?aV zN38~n`I+$Qa^lxY6H%6atcq_X4~o9I2>uxtG$|lHmvCiuX5(asf6&2){7$+{43F7s z?X=woI%`jqDJlZ<)6_@c;N}Ji-VGbjww~|p`S;u%#0m^UkKyVf_4dqv4=VnB@J7|Y zSRPup^AkOnj1}8{ECs#;M$ZorEP_1wxV^0xG0_3y{Ou?`r*_|5-R{RRB34eGAXXB4 zx2U2EMR5u^L?k3%02WZ8QUw^`=*Pvy0fk4VjGqN!yf{EJ2}8hq&}=hAp7f6oZ656y z6ogXQ4Z`&6Ta;Q-EZJ9v3)I)$RuWpMP3&Wp!B6KCc{*xA^ijScP+Q2@yB8P}YdJ&T zf#BON>VOiVyFfj-AgC@vNEon+B{$u`a_r$%N*Lb!&jTHdG;1xP2al7Q6`lvF(^BPf zEqV&F?O}l_fCc0cUO(G?h?w~e|`h0JrrahlV4+HEDf@0G|-0iZ`xi)&sB&Wf+A&&PM5DZ_{j&R zZT?G?wH1~gN{Vb`6`5M53O6BI3|h8$6-_nPZ-NeHTdrh2jT&>^Tv;!g<$S#2%k8ye*^p|NL@^{u= zzaIP${2*V~#+E4Vm+Y5nWwesd-@+;8inhxrM=<={fJRPi7X+jb8751Nx7?DIm}%5M zmOE-$W?R62NgVFSA16G*bE1z{k=>?^haVn@ zL5p1!EB{%Afy_~MLXIkTnJ3Nu?;8s}qvkPT=)O`PNs|m|UZkk=<{!;K>wTs5f7U+5 z#RBnvwnEw+fU*$RHbWEB`V|HEfeyi}wgx87%>no=XzUCyD+|$Yji8{QaKQ!-Spby{ z*ldWk14zTW!-Nd+8df^{H$P+o2tRZ{m{z)O`|%qW_wN^obrsqnT>pl$HUT(pK7k-^ z9Ms$4o&Ft7{Fu>n8cPYV6eOwYgok~HE{VnGicd-kwvl@Cg^d<KMk2XHW;h_>17i};Qd~R3)VY>|4qGgdZ=b&V{>ZSrlsRs0xk_z zn67}@H76DeJOeXY>aqWQp_3##orz{E9fa&S!ja{Q=gj{8*C)cH_+#`psvsZ|!Ff1{ zu>ujz8o5_c2u-_{^y_&`^02yctb0G7=Fo#YE^f#kAgPnQx}RTq#i08rq3yf?>JV9G zq}%DBX}LmNiNL)q2Rl2tc3piv7zi)GUwOXX>Ttfm{9FX}^n8zsf(PjZJllr<8yO^4 z57v6Z5{&T_7(hpxg+Cu0xPyRbI{~CI;aI4i5Z{Fp6k3hjx0I| z$p3$t6F2WTQoOJ4Z-o^;#SJ#a-I1_AiaGDb$SdCDr)K3(p+xq#DF;&=JBwKm2bY)s z0LRLh7~m5G1qH=br!%<{;^Ud$WEszcIm@`DL4IzWQYnE00e=v1a#$h1zc+|1QlMvW z!o0H4l4Pmxtoe^feQ0zZL*B8oC|>h!fJ##Y22_y}qIqu{wzwaq-X>_Ek81GuEBq(K zo+$P02|Rn>o1wj%p4BJ@c)==6dz_@?e@mPsH7iNx)lX8Kah|<~5c5S7RE|O;6@E|?3<;)JFRGdtN*2C% zNEh(eSSoaSIoZvFjpeZ2YI=va2m40Ms}wd&{!dSN_*Z%wG>|EQW~4}$F7Tw=E@oyw ziVv}ghaAGHO|1;=vD3${uB_w*uw#IEW_?4$t?t!M&(8Mt=bR(rhn${~QDIkC7vOSL zS{f#p7Zen9czleDhXNS zExZEz?=UQ&7$)jJXBV5DVHfN4v@{8=5uR_Rtl~b%W4?uPcY4tmP*hNfKQ`hY96Ld8 zPSQ%>bC=GA2-fxMFF+4g^{|g&V4#vzB*Nkt-937s0(P-8AP=Y_20%_PA=p4bV2FhS zcf)!4!%AtRCCqHSi1*6M7SXQEek|bya*F)S?#7-GOL(T99a-Gk@Hpx7&vfH`-gMM# zwt590u`zF2Pfy34A1W`Wu2Si6IFbw(-akAXJkV#s1~_fX)EFRtfdh7wP{v`dEjCP+ zT``Gt)+Rb=6!JS&;O<tXn2R1R0I!FQ5 zbrcMBd=IU3p11s9Dm$%oXmHbdk)gIQX-3PLr3uM%gOG^h zik&2IM9h=g=q5Ii>VLOE*`H+9#%;b?>g%R?I?b(c~yA7HBJOFfo38NEfAaaR`tu{*U@eSV$gONbtES7oPfwUIN= zf+B{F+l_Eh(bKuIx+pRuB3N+L1JP4Vo_xeR6GK=$=Ywp$-0Ul87&5f4uNeB+cnKPh zUR3;1s<%erWkoQgx{1d)mjMy}bvkJ*bwV3ems7{Kw8A3nDQypJYi9V60l5)$EYg#8 zAVvzt#hxHf$U>-I^AY(9bHj56+Xs-PqkDD9{2X}BRr=WFULGOhQR>PI6~&`ob)neV z`#FgKRSOlX;_mUabQGgDg_q|Wf@wcv?A_u6oQBd#A2J0m#ud}>G8$T;@#Z8FW?pGocF5zd}UEj1*< zfaYLGE-9BJOQOP~8J$Q|`(@C{ODuysbau|GU)yoKPI~T`ojfw9cNLrVt^P#vwr>td zmQPjI6*alvD|QJPm!1+G@jJVKQENyJe&fI>AW4`~d)us(aBhskQ4?!$Va(|P1=4+D zfPfm@fOOPki-l(Jc=bg^IqmE?*12(3IA^h+66Cv*pEd+YC*TNd@p#D2{5ep!*YSCz z`*g7!uDCkfzv^7dfY7I`e+iWugD~_j>_{1f{b$`)!`ZSwum}-;r~WlOd<6v)^Jm`_ zAK%zSmf4EYsP2quY;}(go}7+<3f$ZBCvsxq8P^^&7635>$e-1kEr`DMW@e@N`TJY0 zJ0C2@uMC1^%7g+wUK`EUM@L7%L8iI68Q{q;0-N`^%e4k*-;@2JNFWaeq&j+D_9MTN zo1w57)x923BxLHu&$Y`PxGY@nI27%d9*jn97stGeDghLMVfBkcO zXaJO1jphlG!PeezaB$<bWBC>rh_~~mf_n7)I@CiZ;Iw-** ze~4kw=_Apx4dsZfLwdUKp5|}iQi6)~RjSL1zLQ|GD4oGucv0^Gg8TDfpWP76uq*J7 zTFK)%Y4AWVqii)Ggw_TqC-DMBGP$IS`Fr#1QEb=eu-)>9%9y^k&4A=6Nq%s>zEyp9-{S^*MBlj&hC_Ub?CowTS| zX6O()ca!kdAQdg0kSNJdseDB7m-~3ZYd)x|_QTSbw7Z`Mz1NoZg++0!Yh$%?DzGKruA{1DC*RvE7NmLPKSg zJLwPpc8WBzpLroP*Te}IeWv(=&X0eT*b-+R_1etN)DWFn2Mb549wakqrEG+|!Fgo; zQv@!Hj%HmjPv3il%ol9{=0d&s_DE3dl6d_^*rP;`o^VE*WJ)JC0w$1@#slgbli(l6 zPc(Sq<%S<)-yjiJUra6uEiq!IeE!m27ML2EU}Q~2>b{^K{dz$Q$ZdVi;1W%Z#Z2s3 z?Z=TKGd#{RLJ62s{aaNy*FY#F0u@Tsvnv62r)L2fVjL_t=T3f#;QuN$iC>2@#>6Uu znH3xXhL`4jY@u9OA50&t`5o@gFB-^cMhp+V1+Y5etl-`!4t<`PfTop>vbr7xE9a6- zvZ4<2WgiX;>(%ac^bu84sa#&fB|1_ zU41+($k9+!|3D3IX?a$29WFuLHk%6%;z&>Fi58CFBc;(S@ME-+-n~oPYpq)Z`ESqZ zCjd1rg!PCwyS?se_VsvQa)X3OJxTi_6gX}OZJWidu{F0&!F~V^^Y-zwRRC?XwBm$| z)1XfKmK6CI>f3GqF3OT2bn;D|ZRrZyx83JRkPigd0$8?g+^$uO_pFOvbCu&}abeoNZB?%-6gd;r>e%KN-`gEOhhM=>7li^} zi{gIG(bKtF%6+)y*EI35Pti0mrcSHqcDSimUn0smYQI`^%S-n-A4$5(MNaNGd~A>< zBL=jmpC1q7e)GIu=YZP^wC>=>y;j}X56caflaZi>F{(eKd%O}f{JdmyPm-HqZ9-?; zw$!gZEfblO^KIQ6jk3QVKg!O=TmhMQw3TZ~ggd_$(DQ5<_I zUs26FZ})zrmQFdLi^%LI@t-DWbJ>em+#*Oj>$bAYj!X49xJ%03Hfi}e;mjjdS=gW6 z(W04dQHk#s+of=dcFmekcxH3clo-ZwSvr}DGNHGid9e{p{_pM)@*6uwnnoDzbra*- zLsa}K#ZFDVeWO*i^$M7^S?BY_`!cuZ+OyLW0uq%GKO%!q^RU3WP!-|X^=VUls`aWu zoDS-M5t9bcTJgWTk#EPgl<1nc7pu&s!`42w;Z+U49c3~w{c44GQl9va_pNufwrPk| zM!g7h-u9WkC|#R0wzjq{uk^a@O^q$=StEzc%5E5$j~G_fw3_L6CdUguZCD})QWeu{ z&#s10)0~xLXh6Qxjy)H3S!#D)b*#4^4Zx-4JQOhy-pAg_S1fK3bS(n{uS{NM)P|s%bOi&ZAUYnmo9!Rzh&7qY_NYw4l|{CoT-7mx@V(*pRxXgT;TIq z5Lz`O#FGvgUZnV?=j9a_i|BoNneer?e`@FUs4MnW%%c>&{5pnTvux=2Ir+zt7^B)l za|mLbnp$0v(Q<@UU6RDdmI-@Gl2Ue~&AT8p$HtrI)PJo(b^cw$O^fvwlWGyHc0#iA zd5vW2j=Q!fD(@)RS)Oyaf0shNCjlHnEe%V=X)8TUM91dK3@i`c&i`wTL%{gT@}5A; z`uv7{0G*SY?{Bc&%Ba`XMusQ4Ly=hSy_7ERG1ghNa;XRR`xQQ2&YPaOmn?Rmh^_f4 zBRiT3ACKi*ymVc(`NtMH&|J@V=f{fs!s}+|r783v)FhOb&FtSmhcy@56bYVT9NzVx zSpF;6#BeaSRn5stI7-%@*sm8lllHI_>IiQ$J98`&!N4(D9)5JqSmRac%Wq85oG83@ zc?4PmQcosxQHF_yn{F+xpM|t=vk4{f(T$=okef2M8#7^X0Re4*3 zT8;mL*B~S3C#z)6uh|{lD*GcIju@t$A8IQqY(z^FQ!94?3(`H5)5Z1KGUf8l0AmK9 z?qP;;ZT`~JtMeAeIuDQMyH%<_C-SPQx`9E##(zUx3z&sxP6u~uz+FycGl;AiGz8?l zngwh6Icf@pDwaJV#&tcs;_iq)@BMPOefGPOQ<&mKkp=n7znUZ2} zU@xn&*@s&tlVVQcWto^;sJ@m(6BGjaqS>oon^7@ELDWKHJLens`tjO$Wxqh?$2Mf(XNXL{GXo-=z%8(M7EYj+}qhQYZ?<1W3 zb*&Ak3Y;bFRR_Z&#Wt^32O%hCRDj#5H_2?U zE)q7cVjWiti}tkulU>u@%tnaB5a5!e?SRd3He}czYeb zp}2m0gb$y3g#ijmej=lzp(&}Vy58=KbQ0#^@Ohqs~)HOG2G<9K#sn=*uupq1RpLIJAG}2X%&(mR-KYv>qq;EeO zDIozX?mmIu2v)uHlpBgYkY<*xCQJqghbs~!Yep_KaStV%c)`Rk54+wq)M;fM7g*Gx zG;noBWL9siH9N_*D+5%T1=b*Wih$yi6wRpm8dIAfP@`(OPa-q*3@7bORG(B!s#!Bt zTjIB}TRI*@BOgH^dGfzAntVeCUTIp$Dg-_)P?ic>&Z1ShW7{P+pe8~rzr;g2iwGb6 zW>aec666raM75rToO`0H!}}+HW#Z^yk>!DbLuVtdwe3l6I9ZR8v6FOjNf~5MQ(h>A zkxUw1rq<=fzUi7%573rDJzxEJVBmh1rbP#cUuXZ1p@{;ZeL$f{8Ipvm+MpggG<@t~ z&YHd*L#$-!a~qMmiZ5r#;-e`9fD^~5k!0!boS&L3x_3kj<$*h{9}fsX%gnH7*8_16 z-N2%Yj7U4*Ug9qOLvy7)Wl|$kYT533wa%tZwz9lTr>#*mXT}d`ZUKJt{y{K0_E-e% zGh)iQB%IJ6xghUfzl|=HW2cuvi?obyOxP`Dth}DGEXA$pD0NUUQclQN_Zm5# zZll!Hjr$}-x@EU9Wu7~LnbE4+^!PHj*R7=ZU7Hc&RhV14A}TEHd~RvIM!6J!bIP>?;{>i=(iF z77_j5MhFqB1tDOy)0WS)p#48HttRod}+T&#dxd+c4zf<@CvERlfI zDKh*3-~^#S4SS*wyxu@$9vZ{)`uEM(E7q22ks=o-CpHGg(7`RB!+Vs!OS0rh{~oB! zzC)j<72ha-nZUm4g(q5i?5~b!E>%@viqN!VA*L)!uRqOoK_>C-H~3ch9)ESwB-OKh z$6+u`R>7%-0j@f?v^uebR&SjPkwur3@wdzUiK}?bFmFZZblU-#DPFU3?{n0PQ+1&$ zwsn*yam;I0=c*s>aSpjke48^(@mxpM&uQ(WVKavn=|5aB_l712;<43auy_9Ya`;s>p1zX_9k_(m9L}svU7V1PeW!32<)C-+=YrYnX4bWkGqsQ7>U!B|60ee)R!N;jT@9mMj0TrE zn7!U2ayvzYy0XUee3Zg1mCp?6aWDc&A3U3?254!_hvB|5gO?R42sFiA(!_?rLUV(r z+bx2I?INdcXVi@_emi{G$VkN|(?{QpsuN~*n3a|Yaq)g{c8$zzB5%|S_lt%R)%by0 zQJZg!NENweGN1Q^ORZ^!rE8PY+Plc2pZm%#Xs8x+xK75<7?I7i=t5*BDr}>GcsB8) zEE2=pn)D7dJ37>G8TWmWnm(4e@HrKDmW2!lp@~YtsLr+oljsf~ruN{+=`Y8ktL6+_ zH-!z5z(mQj{S{_tCByNIGHko+hGEBBLJWpi9*)LfRQKHgXM-)$av#H(S$T_PkLPhi!$wg#*a zrv!uzZhjD6rV#Pj-9G>d!YgnC$8MDZKJUu6)jmyxrmSIdEvN*KSFNqR99!ibt0Oxc z-oC?WCiY$1Fjv>^yd|?^OmaD|i!a3N)u+1afqaojX=&-i;KrlG_P+qykU?}Bre^TPp@eY!1NXt9)wf)#$yw09wc4A;` z)GrWg7@3B8cLm+Ezgm3h^J*Do{p-AiNY4s|%Ez^41#LCT{Ula<IXvD0X>!3WO#r>K&3|78q=x6aP2{2iwT1Xqs}qqRi+G z^W5W%p(Fjfu?4Nrd?r=AdttpE&{*U85kP()DgCY0u?Whz!L?}*b`?u*v$qb?8@SmR zx&*cPhnk%)978FjR_`+(sV;u)(7*}=vEFtkLElxroiMyK%)d2A_U*q-uD2uVFleRU z&%LEvN*{Uwxhcx(OQjSAQ*)T|*A4$0LPg8?B+{)_{jtv--%185$UOAlMo}{^S60rNh7{w&dJ8p~-NE(2L^?C|Fi%tzJhD}4MGfAoom~brjAdILS~DWrjLeAvq41oCyxgufD%kl1P-%kZ!LnF z`RRIa71g1iKD#x~umh|cn$wIm-FGJ>@JnH{%TtwlXgQvOf`WsURjbP*$!P-!agw1* z$jc)~4gvbDm8}j}0MqjKubrhOO~7{(6BD2!0N6qTVNrwI!)XYX-7gwhg0_aQjfqlh zd}2PwfAs02gZj_kAHiIP{V<}LrP5J_e9o- zaA$L=MAyA)>~t-K)T^&!PwC)CU(>FbvD)?ks?DKD3C}Pb_~Gp?&xQH<-W@!k+(=zr z9r)8m4lxxyJ@ES$Vo|f+9UMT#i2&2eHvpvc}|aT4hItmxOEVe(-{7@?7bMo3jy!62ruzaoRYE!-1O z57yt`57;)n_+w$kFDw{5)#0Ojv!k;OM1-sOW`GddVb!4E2r~ycBtP#sF6_ zs7z?iE*q@o;SEE=e@U`DPN*vVg}n@ zuDP0}MM+7ah57kgN$L_Lhv9%QG7}@CL_$rQ1VQ%Mo%9pN%*@R7^|i&buMgvDctN?~ zr_sBhl!F`?0Q`eIEK!C<%BiNKP+}Y@)3gKjfORqKSd;A};1yNL3eRN5^C}4^%s+0h zo6Wx>{U0OuVRKNWK7#c$&K&D$KpO-M3+*Uels$d`byYg$o~t%FkaxMFrD+Cu3Jx$T zmNrM&#IV_mh1)2TgB!yt(?wTx(`JlC%J4|YTa_($dZ;9(sym#V{CoP?$@<>U|3SAYQb*YY%=W=QTUSMiOl>@tDWItaX;|~JARzYJ@ot>o!1Go zD%&{T>cQQsQIz1E+<7xiq7bh8Ht7G)3KlnF{pYpi=0@?ql^td%*b)dP{=V{c_op~- zq(klGu!*xvTF%W4J-X=#u_jsm(x@I(8);AuZFBlQ)rC_^8?k z#Ifqo*fHii%OiYLFieAylGE20c+`#;D#oY(T>Qx$FA`jFn-#poVDA3Rz zki5k2waU|!*9r)Sew=7a!N{Sto2DOW4}}XIEtiOfa_6gLK|eYM2rQZyPVmf^1wE4n z`dI-Nhz}Hq0;WEgaK9=loB+H87^SVPt>WV10cjN_C3eRPwc)jHua>bz0$dX3ExyEt z8Ir9Oyfmi7y^hHlV;ii@7;f%-eI|gi-p$n&IVIzkdhWO_5Ho;iYU18yNdK7zRElnH zR|9m5wa7r=y~B*qN)bYxa^vSAzER>{skbk%GywG+$(-8)_xyy=zHwLEEaE|c4_spz zO(UXleyTfq=TLI$|41P76E2(@VEC)ij)@^5oct7UZ!+7#{Zj0gnRnW4tl$>q6aARp_caX=o_iNg&rMbD>s6nMMD?R;wSn#3XtDwV@ zf~qQm)zl^&-aEjI(45x`1TwxWSAYcae;HeF|NYx%=&4qPakaM>FCeU2-XApy?3hnz zwP|TiI@4-BOnNl{ya?SG4`pYYnr{~Dfht^z!-|AiW1rHhD$QGcW_))Kj}YXUFkp2V z$rPodt;jRquI)4Quo+&Qta}Z=$N|&qUH&>Qo>FW!p&_<)*1?dOEvg(^#YP;DQ(@$Q zkAf;q7JaYhVlfz||5>lmIL>b;MwUArTWpvOzvMtycoJgD5eJnifUdbF{pf@j>77}^ z61a)gjiCoo8HVP1X)ROAe_$?Fu@050&+fvP`YU)@74qsrGE-|%nx3BC*4D=9w=+{} z_@|^q;no*+NZ-ha1vh5AyzE`=Lat_B`_1MZeMbs-v;PR5zICV+4BgS{R@vA^dU`fR z!6r3rH^J`Ncw$POalvE?b=TkCSAtLWdx+lK24iXMxS z;B6;+fD1gg+16qe))&lWiH}cz1II{E>P1Y};gF#vb_#g8?5-xG{m=~DeRGpqrOFEEtc?XbXLnk<(N*ItE}9J8%%-@i zfH@;5=u{wa855(a7FL#Ck4iG^aJ4){B)15PF*hR#_SA#>NHUpy2B2 z`V{6(dM1ewW)v2W860(#@J?Dp!9^y*lURbGx8ol-(R0^0d1T{r}fV5!Bk)nUL2OU z0s6`t0T+OGUI(|>$j&>U1dR)Du0MIcUH$MrO3u8S>1sy90!8?MTc7ECoaaY6z89?* zRg%HxADy^_A?xJCf1va`R5&=QQL6rj$m{OCqZbOOGqdcwwb`LMsA4d z)PJ)?ja5X5hAddQadLl#d{a}8B9(4 z83>qAKNx)Pw*=HQ$05veJa7w#9Sj^}V?|r(-kN08s-(KWC$v>FdBLEf2sOK#)-?eP5NrIf-vdrsrKJ$S^wtO=WQ0Q~>pnzMuXD@5I?~Vt=npg0{R2;6MDRVr|0FT$cl?$M5T1p$KNiG}m z`|{>w>VgH)Mi>juZh0~Y%ir;mGrGg$G1ZC|yY^7Pq5lDuS}ny*_8qUJ508(Vo12-L z*P?0T;2)k>t~lN;Uu~NO$ODZaTl(;6pnfm#26Yf6rp^E3X5df(P>rVI8!_Hi6gm%U zvgrhmK0<&jHDejV&q(M9b%nEM==K*^LbE!FAK!eypw4F_i4I?)XcPvDfSx){VL67@ zC}H?u2XxRm{To`ckp8!FVh;8#BlH#L(0b2r!wmSootNb==AeyF z#MzKe8zqYbSGuXiY-_sx-p&}jl<)HXg>s;kt+_o{nU?d=?!*fPhD?Pz=XoKq3BJst zl}NBJFIi4Lp7mdn0f6fz%3&NjYV7aP8C6(?df?qfYK_ zZra+~>1k=*eSHBp^ETmlI4@sJEB9&fWXf%@SC{eP9P@LsuBxoL-)-!DTk4Gy%S45X zjEe&-1^?3k;9zGTi}~6hMn|^^$c=9vUfKYwvEuKHxUf&Z)esR7?j9fG394h`;$8sw z>hSQ;(7*tbQmh_WPWz|=d;z4;%gYP!jMUK301g$Dl$1am0w{X|&~YwSR$3l>BBEEI z6gdEi` zLVLAFI!eq3lt!m0HS+#vUt%(8df|Nf)P!DYDo#NOvM+l(*wwP*jKu(R;KHX?v5{D} z#!VaxFvjBg*D2ZhnCMV_pRGh(69n>HHt~ILvQ&tiL`SUf7t$c5JX?M`eo_|z*Dha` z(D!@Y7#sU&WMm{S-)rd+`iS6tm%->0$d9%bZcI*0+)g!YXKwxgWg#H6 zBB~OX@=aL@Oao76E=ikWueTzJL+0|+kqJE~=hnW4?!)1#sPQAt%OYT^3Ch5LOBn2r z$0l8&Jx@=@lgHL*b%D54Pu{Ayc8#5_K~I+2-zYOOOF?!YODM zHQAFEsk2V>2h&d)kt=K#G9Jn8AQ`6Q@9jvc-!U>}7%GZQJAV?(4UnQ}?CJP#;=N#W zY@P%0X$v|!zxO%%{^u1b*xurOw!zN<`GVA6Y7mrU$kNW%P(y|Om|8fB&13=uTi}~l zJ!1G!ENQ)(q$rY`oj66O9x9sc11kcY-QZ{-@-zi@bd8G|&av6L&plyK39>1Rt4%R? z{1qIH@=AQP^^jnhT6|d{`+96y=mMhe#1|(s>HbkCoZdBSNPv&Px%k~O%pyYvN6nh8 zZ;rlfLzoQr47{yQp94louG+a41~9I@XEZ_e_yH8Tp8Tgs;rQ*G+@w0ok{be2rMHfz8;bT0m_9!)_=+v|W)gV9t{piO>-E;>3P0pOW~d2bQk5^tz%QndnDzU6!qVBeLAP*yea1a=Dnn2Z_B>@k%)cA{AdXTY z@0|;<*y0b}fpakZGN`%s-%LO5DB+K-nCSgU3v2d_=t@M9(%wUBvzm8(@-}0j<_6+X z*j9SFCk)7ZCl=^$RzQ~YgTe>)&=)oxwdaJ)lNyw>G6{a{g;WkxS9l=^m-{1H@YUi& zsH-4zm2>iTaTXaQiGh_?Be5CAVU=D;O@9}3;%pY{U2rt&-pj#AI?h+*U@V@XLzl4t3bN^1<l)T z11qlHL?imWIj;lhnj88HrCQYw;{4=^vWQmw)EtC4*lHAPQDks(bOJxAh250a#$vQVb23=`GUL!&Ao3h7{GWfgJVOK1=V z{ldV&uma*MP436>$=W#|jeviE2n@jap0+-6UcsRwZT=~575TaqSzXPStOS_fIyyR1 z#cTn7NWgN6frcguqyhA9>l+(SR@(v|uJ!@y)nYjWIhgvtP|DunyLa#6FI<4VNc?&) zlv5G8T1 z@0_~O00TT^?Nt3yl$_Y27&%!Od@4kRwqls6swZ)N$3f+n=9dn__Z@^iAQ>!VpT3HU z3IY3>B|uFT*kqYhIfrMW^`^8?(+j;bY{bXjO{)_kCxDQv4uH%Woe_t;)EUoXxtDjq zD)bc`=oo6~UApm{^b?qa#x3w*ND+2<2i@zb6d%I)uFP?d~OE1ahxvuDMgL3ufH#NRR7CI0D7u z@W|>yc*(g{&PQfI=4Hmu-NhvX5F2hNbegMowg4(7tgQ<*i=Tinh_A0NkTC)ddZnV< z*Dbdzlglum?61DQK7#k-d!QPh7Y+_1D5bA5PJ)EL&J_tNzp`l89~N9{8Yy%A^OAHH z^>CKci>$jcw;_1*OPQNOp)t`3x8zmY>Dws|4&1j`>3 zaJ5NCwbzhe$N=HS9Bgy`=Y?RjU*)6&N3aW^%+WUmbv#hCyriz&hICfXf7p7jViHt* zu$5T_CVL8mT3G(5v=dGGLq*A=^~3T0kX#u&hLYJZ&ccsKu)KNM8J%iTBJ!Be&QRf% zn&h^rXS%#39FSBj2&L+U$B=6irh3_0v$Vk}tZZPNIJg&?aKJFUY!i{iXIA6oa zkCHrKn1Bw%mt>s%f;W&-s4myfSIL_)kqRi?;c0aGIDAqpZ~swRI!!n?6NVthr^S4h zhym3F;|A5q{O2-Ph^7)*IOr%1LPD?1NMboifA><+JW*!BR5p2dt=87Y|7U)6WT-XW z%W>tXxr63&r)!&=PYi}%W?lK`!voDhy7%!dwQx`Y?e8lSMTc@H-zgl2@PsClwYS{_ zwzWVN4y#uca$MSes`tl+%zw>p9zr__oFS#d1+!%snEM-OTZcEvSGOL?#!WNR#VH@6 zDg9g|kZj88{aivJkLwL;WkZc67mWvBQ3o&1R)Qn(y&UUu-cOHgjO$AB*sK@scgX@d zd5&)?{|wWb4~J`+@k{jQ?cT6!6n7v?F2>OXB^T8F&~{UE*rJHojWkLhIEV%^8SDKL zCE*Lvi*-^er$cV<-m`6rx^VzKy1{bq-o7te)D4yov9tPvSRq%)ib=VuW}#`2;r7<= ztpw`rb6;K4qf(>jRU^!y@{j4Q z5GtTYu2TxG)C2k?jT{HbtNsG9`y8+uSl8+IT6xUdQ1d6xCKNJjh{d!OM&^xNqY6RC zgiM#s$AE|o*a@{WQ>40gN7NUtdr8UP{MNMNAXK)D-e|7`zExVQKf5ZpMzICEorF-n zaEgnxl+_OQhuz+h+2dW(J@^2P9RrPRZ&njQI1%7t8p{yX+qXy5y`P{02)M=tV4e() zZ!FS}lFPjtfZRj3+iDbd#9nYBlXa>2#XGHx$bQINXc;nc*w`vpL6r z_NchKr|MVfDbv@4!W?KvA!h)1CYK}37QL}pCxmGYAju?NdhK|Vi^?W{sP05={c6bu zuZvVJ)`*0(uJW}*PMI=VLYA(U{U|s-%dnhQcKu00%?(Ei7l1<03El4V_=q4Z-5cCc z0aCFysRB$dz!!?qqf68*fUYIJ&6cbRsPk2_0EF*DIj{!$R5xSH5_}ZB>mb_t1h++YjF;bmh zX5DZ0AH|_XniwW)3JvpvHD~L9#tKB0{%Z`+89F_zCkC=t zd&(;>H~(sT&`6jxj-Q2p_SBaVrfJ*+t1jdV+Nqipe(Z7Tf4ynXBou~O2g z>9@5jb1dLtQHG_mFBmD%vFcO@3+zpmHT>CI=|JLLt` z>t?sMsZO#aIC(TTiWM;TfqqdRU5ll*(Cm|K@M<-cLt;Ies6iv}b7C3B)!W+RK&8JF=~y_W#imz^8h`F5a@KM)*sS2; zUwKW(5>yhGqXVC`j;Ob_N!b2S4_GxdbU`*5n!lO2s3GB@Mk)Hvp@rl%zSG%b7y~Gl z$tIJA$l44=E}k!-2Bqbd*z;hLg=}t(`c{nhC{K+ql%5{ATqa9guRN^Tt_HPs=(vfR z3@zVmRMn7FGV>Q{!anYA0Rksn3!2?)V+U;0#N;A=@<(yHI;ieq&h92s=soC%z21iKb3}eQgh7-`JKb%4!n3RO7K3F7I^JAg7ZetX zEW8FFqa(e81Cs3isEAbAJ9xwgDh0R;i&sMIBJ>jiA{|LgziR6a-oRa55YXE^Miu-m zQ|mgb=vN#9gp;>6MvhOZc&{)jg|@Dqq|~WsBH^1vG3Z%oB&M0Ty8$~D*P4S$Jy(U$ z#To>x*1(ySTx6-SN!^6R{fN6rk~g4?%*@PZK!f1=TK^Us9Uc9@@{9fbeX*72UhZl= zc8`-K{WkySzxvgH?6vFOSk8a)Wk6sqoHtFS5O|rl02L-8nV4{J02vtY`T`_57jJ`i zc6MYVFgZ+Gp8%5-;MWhH{;oM6g@9dk-Ku{^e{<8OiOFP`b#+fE|eKGO=Qt}3Y(mk^mX}j6^R2TYIJem3(B$X{S!lR&Ng)Fq*6 zvC7xySSbnrJU{zz1x3b0I)4gnLXnFFL9l=xeNyPkTV_y;U2J1DWOakb4{6r~TD*sQaqDUce zBR9i8$;j~!OG@^+)7dYa_OA$VG)PvCNn4~PnXk9L|BZ_3KPRE&cZc0nAx`bH(QaOB zxq|d3#}o@UCau{LmEf1Qf(sAa(UHVC1_dqDDriSkwHM8J4W2p~?y=sh4PNb!-4I`e z;9{wrAEeD0t*+Bp*eFvOO7)vi;$-jkttALtXIipKKy*HSb^g_q{j0c;0xGROc%_z6 zilXMEJA0raUoB>&S;0>$GFayqs@lt9KtPeoCWx8g%F)6u!SI?BdFLz1n40@#58o-D zO^3_t`MJf}EFGE}_^EGz|2k8GW@Amx!wnMAZ~HAm`72RG-_}1-`FT`b)tJGgj9A7@ zSZdGjElvz|<};g%q95UExCGgnxM@b@dpOkK5{C~KA2rgA_p5_tldOi_D0ZjL6qWnC(jT zrSddVsfLyRj|I>mF=pur;>9xFPxn^!LQa*A8ok0m^(ekq1s-Dz@>mqfMTL;Q&u87~ zFvcW*A=VW>+J3w}!PeV;dkaKkz!&!MxbDC63V;@l0C}LNyYp}98^BZ<86EwtSqulK zHA8!L*`8m-aqV0r&-0CoB- zK?8>_yNR>TRMGB_!R+Mx;Q@z!eFL|JTK>HG_?K%HPGNh0pqdR%U2c}y4FOfc*;`7< zIj~7`^A=6Fv2iM>GWY0ye0;ujSZVpJVqR44yD%4hG5yEc62U8Up@u3K!ieAB5e(pz zBXmZ$5+`@V>4}gTiI7n;(;c5Li_PxzzXPYYDi741-QCf2zP_%m%~_KGic_*@fEW&V z+C0XReERrjIHnY-v^z zXTWH3R_Hf7vPRKM9HUss>Ca}ZAI-7s3D*L;W+?a?L*U)+_eO2>EhXp(<4>(>lrcnu10#bFt_oLtG*|!i2545+bQF}gFDs2))ZtUECDH-YtQPHpG z_bOHfls*dy3rbuP7+us&aCGW%p*`;Q8UNTFoJMlTo~+1iMsIpq*@L!HMP$F#wu{r2 zYU_u?Yfx&Cydk+X!ri_7@@H7~ExLZ1%SGZ^r@(hJ4zg*QOV>|Z;`nK8(aL>e$QefT zKNEh2N$4vtH~T4wZ<|vJ)3?kCe4$bQR;HUAL>*0(#u=Bf`=ct&+-{4PBk>or^pMPM zEC%~2aid|yhYp>(zivx`_=Fil-8Jtr-%oTSKBX}vhW1znHGP^we`P37lzW*<2-Abb z?tL2?5eZBU)d=3*^!ys^g3ou&lBm1mnR^i-{d1?=kaW~#0->@`mXGn zqHfvzyDZPcbB-RL4_+pJ{9P8b&hXIR5$SPQ+Ke-*!T&AATY_Cuiz$#HCS&07yP$2hu_cZvH;3C6BD<@A ztKRL+CMU=>C0q9>KiTSeYsj1~%y#m)X_J$83GC6d1rL3iO6?V8Y$!3~Aw^YX5x5F> zYkK!#r{&UhHlwOfH~+Xk^7>gX#b?jY;g7cpc#vLw)&T{DD${Q!6R<{d(2txx_5T6E zycAdceFx$=Zu&+?Wjk=;f8R3?W_XMEl!DDc-(*7P&g6{rWZE0>VB-72m$AEs5y=d{djK0NLmP3KP%iUNds_>%%`C*i>TLCljO4 zjo$kYo&wYS9&UQ`p0psSVlfM(qOt%X^FH->scq?Aadobm;C=SP0dDsW(N3|ZUDHCT zO|?@PJ5q$PpP_JK_j={zL`cB%1Fx&kN^pL;WKCrOzUt%kA=}4p-fZl2SY>JTur~_L zhjz?yzC-2 zRduY$nEP+tC+X%?gk`bP{{=rwG$l-6sgBt!*`RV}K!%AS1j%w2AiZ`{cYre^-xxDrnH zd~&_iMC?v6z<+*rUex#+*@_KZ+;(b4NM260QA-bSk~K(9hW6&y-zz!%g-eIH>aj_>tQ=9>^Vl&|Nw7&lnk`_CjP&SyNI zI~h`*$#!^JO<6*Bjg5hYVNd!Oj4v|JHgsN2KK6m$~2#daK{kCBzj3MDpek+;&#y(q<8Gp8HKHL_WQ65OZ0dYV>Lo!n63y{wS zlBplcW~Zj6rl;S_%TL%=I0`&HKLg3}9D39+83gECIBEul?Yr~Mq-!UkGr^vIE=OYt zo5dF@Y}yvL>79z(3xX+~TIp|f_3#UUW(uno6ta=@Zmvw`SWFU1ZfCMEzG3qWmT4>eiIZztVGr_> z0H~E~GJj9!vr%Ip2W)$nu#5pOIt((9lp<*I%XKc%I5U54#^77I?SkP128P56SBjQr zq(7bV1vn`5Mj119)W3L`)0x_;hTQATO(U-gDKZ=bi#p?m6*~_mu1OyLqLPIvQEQx) z{%|16AZoi9sRv8E$sG_S{g=4$wOF^UtDlW*t)u34o>p1O+4BWX26dc>xr2y<#UDU zb9`h?`iD1eul!+ttZ2+Keo#_Nrmk=MF|*P}`TMe%qeYVESMMey5km;r_g&sj3X(aR z@_GGLi+ILU>}S;wJgYijA@0~`p#0gICH*;O8oprcoeYuA_3+L&dQ^VPWAey?)R<s<3zzNH0OxhNW#e}9pw6$3Kok}Tr&}ljo-@GSG|TrwaSxR=OwDCp zuGc{FW6bcS_@f)im7`RR^0vUWY1{O`rt0c-^c)kbDg3wH3 zH<9Jf1pfduknTgA*yRx4O?88KVc5>+yX8iJ_4y%C-r`PFe*Agd@1&>9B&(JnF#GoU z!v_w+LH*=&>pxLl=5lE4xWToB>^arh#8zW7arEP!ypw!Y&o`rE$GK_q0N)Mi|HAi! z%OCUol!aH{75@r|^e@KyHHAUZNDAmoRwP3LZc?smT|lSd#uB9DXCErx2?oCW7SGhXODDtn4|i+`P(?w!Q)RU164` zqLu@VO;Y8x2L_mtq?ztyLy5}=umF^K;^~F~U;EoSj@j50`n7?H_&0{D^HlUYeIMG$ z4m3i)7`%nnU(>HQu#+uJW5v2g6yBOfmZ0vI^0E8I;5wj?{iMcr;=^csZwe=9m z8z?6@vDlLpTBL1g!b1wZIK$ETzHqhG{&9bJ6%xAQpL_5X1Aid3E64b?(5^E|%6p+5uO%^En+zRaPajDW z1PbU*`znq`j=y!@`GhXl%QT`_f>eW^WOA#^Zrr98EAq>;lMu=`Tb%>S{?N?iP?@|V zy6C)*YnHNRi>8&#hvn!P^RN<{e@tlnNRX-+;aAgnDgFUoL=ZX>q=sv8S?4Pgf-RNm zT}Ks-eKb5rlGkr)l)2js9;=M}(DwZ?z1S~vwzs=mA}q9$NHH+1eX;i-enLnU7B5NpC5^={O?!Twb-*Eg3g^^02VH!x?4s}r>LEn4_-}bRQ&K-CCnueWIw?9*K)`FG$l*<45|eu2 z@86OM=0a=jdPUQASXfv^vO#e5o->~`zX@_%kEQ+1iXFqkVV%*MUmKtgE-fvrF4#C} zjUIohc!QDCtDmA_ZaRmgShSPX9%g`B<`WF|Q3JZ72UTG`b21i;RPX=i$d9eOqKBOUo zD~HryB=Yx(Nx39rES)XX=>w=qEqLZhW|{f7wn<~u-s&xyeS$+FZdXU~v7$z`;92D& zgAZX`bLRsuVv|C7=97nGkTuV5hpiDD>`lSU{Jr45aG9Lp%~Yr~f+cx9f2Zh0ntKR` zKDAVy`A>$5wYaUo^q;;N%6iv{ZHkU)EAMihH=tHymAS9hKgGNz`udO~x&X`K{QP{! z)_d#Vp2vZstcWh@y}-9vj#$zM$869h81MBg*B$!|{4BdFO>hNnUjIeq2)H{V*xeusQT z5`?4Hf^>^!9vLIbiK_R!MUMSe#A966PcR~8rpkoY?R~2y=G30{-~1_*OoiCJB{kp6 zq9uEBPg94l@O$K488JuheG6Rc$Ve;IDIn~KM#Ra^!SOuX_M)w;y9;box4%|bS33g6 zpD8Kf|N6}7DnR^EjT-xi3vk__V`a4i z-fPp-FslI|Gq1y$3g~H3O8DN5USdw{Ujg#Dl{Gc|JUr)bvid|lPK+Mu3GKz3_P0|_ zfK0Bkl2UYJAr+rkv>mM!c=7#`vE zKZOd53D{dj7m9S6Q+yHR(rJEvPYO-R$QU%`4m{WR{27qWaq#)?wlF3kBD52a)8h8J zp8_G{fx*GPO#q^T{{B78H#_GCX`d4v0BNYI_B#8S0u@6@JQQ8?v5a%a#QeOrRPfeG zh;Zz7e*2}cQ-24~?XneVeo_hw3USIVARN_uiJ3e8uM5taaJ0>Sq^VuV@)Q^t?c7ec zAu1mN-@o;fm9mN`AR{52K=t7wf`h|*ybNE@qe6n>16^AapU39@k+2Z<&KSgR#|yTm z&mb8A1$kh@!5yWQ(1-w|K10Eq$94;~q__?-D>Uq(IxWHRel-dh*?cx5 zp$hen?|$9Y(fz9KzfoMUWk1I;J;%$$MudYKakzn({{9i(5XtJR+3s(%^IIXb425tG z?n=Z8E_z~eA+i(74Q;ko!h%>z8a`SUqLW|-9@`Y-_7*OddnwjPV zunaL7RIyS$PW%A1Utab*#*Bl-TtW*vqD|hI8GJ8c=UfpwF_|4Y8H(g;EUL{Wir!g( z+2e9=7BqbAgBZoQLu6w7XB)W+8Uv(p2TS1CVlj_>8aDE?2uy!RhTL1#VHJ*<$}HDJ zGv5nGGm1`6)(rmcQ(?C52kl6Y#2Ak`)dZ0TW6YG}I0h+%L;Wp+LgF>pIl-dz8CYy& zL9X#t>uUqzcq6?V9RuM^D|z5ZJ$Uw&Zt$(1s+6Ua7PP0fGUv^ri@m))PLmY5XT{n1 zIWX54zk$0DzbVvU^&^=9ljQYjSMnA5-eqkS11Y9^qn!~R)hM6~Z_Rs<*o4>|mp;+7 zB}*m@YAPg_I6S=RFZ<5g#wHs;ga6V!WqPcfUtOsvC;&dxrsn46KxhU*xe}Wa*m3@6 zL=9kb_1@P90IezsaE!6BJ|EVwQNsXy;~AJ}TCCF#*M~I7D5s`nuWbN?@wM2lT1MLEF_=?4m+B)Snpo{P_j)(iI(p^7LKwmPdrZ zK4hdfu#!iJ8w9^kxyeoHVDgce8!fnl0XVT0KJcBXjrC+@Q35>E@0K`2BOkU$RK{U9_9Yx6&vt2~d6=rDCZUBO`B2rOt>_2y*G zE%dCvO6>o~M|pINmeeno+cC^9L>4n#seVHuf&-33>EI{aHy9)$%8)FZ$Q;M2U9IH= zk|;P)avslUaDfjG4^76S0|N`Nb1$S}QkG~LbFs?%Pi<23o?n1JmA<`$yS~=&n^Nmo)=63?NVq6^sT4JkvloT%tvPQzg+FJd~jXZC>v{z7$e~y zs#Gl%aViPn-|2u*(R!^ryXMF6t`TWRWT-m^gn(QvN3d$<=air zeWsk|lqjQSCbmT%mWHBG6BXXagZC!3q`b>i@@XSdj}-Yv2!ZTdFnQy1o)O%CYr`Al zqctaN+8`$LS&3|nc^^)RW+>M-pO+3r@Cc)$uUF&HYGZdukHw5w20@a=^BoaF(8l!S z4mdWVZ~{0Zx*>o4)j!dbQFpp$ofRn#L~e+Y;~a0%>Q0)w@SN0Jnj~zDH<-!p#`5^6 zyc}rwlNkx*ByP_c|52^2pMG7tb8nq1`OMRB71CFSEN4*Hy>SKz+URFDQNJ@cgymUw zwe}>8GSYCF1DSLhP}ineRT5hvaa`8HHA#E_GjygV&r&7T{%NC)R-=@^O?qdWz8IGlbQynL9{_?*xcVS zAaNfyx8zF?5E$!Q;LlNc)kOeeKuXRQG3Vaa0CP$|b}B(6LxVNfqhG-FScad7Hey`h zG2yY&vqINo()dCf*xH zQ^SILSbSFe5vsr;h4IMrr7Jx?NC^F9{>^nic>fj2lwIsF#Tb8Ukd?QuaNBHvv)wF z&mG~w=X8qL2)g1tHpibXf#6?anvLWVLZuhm5*GPtFM+}Edr-FX+U4=Z$M|pgI97{& zG4gp-Yed4BOH5~;Pdzb2eZ~OJ?!6vH#Q56N@HPM|kXnzM?K}5^ItlwlEaErvEI0bT zb)NSwbe1bK^CV&Ld>8O}8{)qfL+FfLl!J2$%!=85TlynxQU2mntz2JfnBDSm)Cux+hK3-fvDfZ)y{ARkk*^6^l)xi`rPE6oSd9KY(23zbO9#ih0KphxR+VP%zR*@PT$ed5j&DDFHu7rjn zpoa0@NMj)YQmd8flt4xu2msy&H1(K!ownRky5^AIWrz2e&sUg*Jnx2(34((f;Ud&I z^szfk^|ife-|6y78XedPgpJv1sX042g|fLiYBhhbHpb3p{nvco<3jhV^evdvt@nu; zX;6e6JF zH>&p+dNu(PiB_yomp5{3=7aHI1i`o?)ED=?W{+qi6MhMr(L8X+#ZU zh%c}jK?|Cjux3j+RtuTCTd|dP)ukF}Bn#v+1N*X=?3rs&4g#b%{K0h>;lzF81*&=%k2Ul@7rOLG}>Z9L7 zpx!RgEGZ~9-MH~4x4l5rMMun`nyYGO?kGn3SNyK3=awmDCgeCxh0+S>4X1=yE-KR!M> zYBuc%t_=9x0K6$2+x%Q_7k1qPs;sV?nn2`>ttTxcmlg?&QH%(pyNLYLB?iCxm!?Xo zguM)XXpufJ&)ug491MMfzzDxnebd;WQ6k9(Do{k zpfi4le-G-!CwWNhDcJQF92!G=Hz?RwT=Q8~7c5R%Oy{xv7{-sSP}Kvfsu$)UD}g6x zeuuLMI`sLXH!(fPe?32u3u2ikZ9874KeI2*m;6>|$6ss3?5 zFCywahy&CNh-c9Izv z#_JpB!H0Jsin%KMs7Elz`(0{LAdd0tuVXs1a$z_J;!*p+T#T9CU^p$W@O}BR6evE$}U-P@w-t6w}KA?^9n+aoK*I3(*fUdpXLj zVXhIm%|O7(=x=GWtl1A8$t0#rmqzcGfy~2MxLE(0#`+qPbwN&(ru#)lzvt4ZunPuJ zmy%Ph&!Pc2rKRIsn)T~zv2imut0N{K1+~zY70CdUrYN+rit)33-9PQKy~96GonnUr zqyiWabWXpXO}^h;iluChc7Mm$Q09VrisQxVq!y6#S z)u|W1Kk-J&FwiXn9A$AE&OBNhd8r4Q%9@KCa>7P(IelEM*Q>4`l-w-b_%P##4HIf! z?t4lPFs;G{guu~CXbaCXjU7QbjTelv>TS9Shglw!X3iu7sM<|101Si#SiN`pYox!D zU*?#@SF8*pASxdM{{_S%9eOvo=Up}hk3KJrPZa#MC8gvIXF@)D>FcsiYAE|#T;2rW zl-E&pR68j8*8~S3s2cUUgWq}17(#$mfl?_rhxcDh9pSK1QfZ0(mm*Dz%Cy+|^Nbs= z@me>w!5`rfv1UN3ZW;y) znpTYH+zF<1OAMzd#Bh8zS9-=tXfURSOGG%*<$pABdYsVRFZ9B~l?YG~3zNGYL@H|P z`abHe@bh!yle4W}?~t-%8k*!Bj9)iCL;`I?t0O-76_fzfFhLcimxGy+n%*a9VX=;K zF0OU?aAsTOFYVG#Iwc>e(~O8)_SYs}T7w!ddOKcne%WUCVU{x{q5${YBVwgT`DyO( z53sKVKu!Z~(TGvsyL7~;`)?&85Pm7|Fw*kHs~yerJ}KCf+yj>j>KaSeO&*{UPr1DW$gv2CHAzO4V&)CtL?9;$|$by2`rGp45=+PlhwX(G^4S zp!?96$MsAyKsxWt{Y~KDVt@PQqyG35FzhkD0RSjN#whsjxT|fGT-g)wAx7jCFcdNl z4fnwdRmTkTm$-)0#~9iG4$J9ib|D)-ax{563p5s6xEGr+%*77ml?N^gzm?T&)+USb z{I1klTv=jqU5AKN$l?4CP3Ih(R~N1EH@1z&joGA8V>?aK*tTt(jcq%PoyJCE+qRQ? zzI*5PkIr@XTP_&qLW?;j19%+L_|<2dKXtK>RkjMC}=t!q1|d3Gh$ZFV2e*g zh%Ak`&6c3y>CV8!KAX(O~=yr#zahqWnX?U*~Z=p!8R8Q&~Zoig0oK0dKtO z-A^%j)0#g*!9xD#tOly**@i5dC;zRU5aFFSU|vWWD&m*Vt#fx~)Ht0+j%js%J$b>l zR{9}7tZ}>70X$Re#_F=BG?}lHIvGlT$m)URqPYQ^|Fdj>rNU(jT7lZweHOs7$rfC1 z{f!aXtGcAt*YjNOv2FQU#)U5`t8M4m8-b=8WzT~_^Q)5rS< zVCcX|QWbF<9Uci0v02I91ZVhw_l5p#s_gfPENkA$Y&l@XUn4rrvo)}DG&wv)VYMGn z90WHvJF%-+!cur$-$X52IzYdMT8!a?A;hVn)}4g6a)M8;B$0KpU+DH?{lT|v0Ek#c zlR1cOP_&Avwc3U6!&(AvprZK+TZ}$g7q#6bcisNVpV?Dp1ny{$;GjB*m_8hrv3k-J|n z+JW9!z--IMg-EYXt?U;*5fL9?5zx}YnI&h+o`C=l&j&~+H#9WV#f-opr^&eN^oN&u zL8)nIXy^bkmp8^~GVIrA?#P^W{7*ytAJ;%fx}YR-sO#Gkl?g_!D+@5i~#fGjF|rGR$bK!5h~Qn6Bkqnw`1!Zwrt9bnT!1{w0Mh@*3uX2 z&i4?~Y(FCGbH-cjqjngNw%0Nz1BsvtTfbpWs|&N)-K!-(J#&Ftr=J{d_eRd1&L#D% zo*LyGP_f-E`BL8P(Zb~7MIIxu= z2PQ=^0=<;i)$#K>aKvn z(WX4G0`XiWMFl_K#K@*D=}mLg7G@<=$lww;r_+~}bWaaIu`V2!4dLK!t*7ed8u6ZZ z-~xyCN0x;&ghe9<5UCB;cW(D>e0u*o)`xy9NZ&v~K(C>qsjj}HkHpTTI1y5;(Bu9H zvFgMIKN2(Nk~o1}yg<-d8wNWxTl+5iv*Zb!3Hfk9~t!y4j@tA=;<;HUW75X;M%Bahj`0aE| zbAnPD*iqNYUQ;5qsWc}(BXCH##VCG-8IZEoZC7zWq|D|{)W{DTQ(~J_-gtR`)R#7O zN_Jg|8vghT1WVe}rx}4eg=MS-YF>8(N~W5ciGN5`q$FEPgzWa$f+>xmR0CwQ(D1W& zoDW~_BmQMTjtVH+|J=FTDh^4{=+?$#KP6-3VKtE@AiU^sc<^#<<|a|eWG9ax@6~y^ z&&(5+-$m1Cw>G?dzCAomI$7(mdi~AM$@v7x_n)8EhbSEr9|0zP#@ppPPhQXYStC3w zfqx;G-W;k$l{h4hj_}^;fh2}e8~)aJ2_o<>A)i-E^WqCje%$#^?>&N?UF^uU^DP$j zm?lu$zeKf{X^Q=iMV_@e!b==&sdMid3I3f-N^54|?)GXj5iQLSPV&2@#5TL~>_>$a z(+|h%!%&s+7LN}Hank}G#Z*N?#_L?|m;FjHZMy4X3Y?HZ<4~HhjJ6-1+TIkvcVy=V zoKD&{X|p4y_d(3`wQwTp%*?XQF!}D?lhahqQXzKi2sxt%%sqVn` zDHi;IHq|mv&?P3$d3b2|b>j5>@G>J)R~`6Sf0KWFWHf8{@Bjmm?9S+_;11a6 zw2l$O%q(pjNU_BXqfBBBjpxDgwiDQZnXnEq&Crymo~A6#+O4uJ4cQ@~i(zw#Vn3Q& zhI*_FdvWNC{FYwcO4jgFmbAEe_9g&%oH^G|f9zRX}V`$ZGGK75ye zDvEvwfJg~!@nAfT83lX8gi6d=kr)~S*Q+S1BboDmX4aN=wN~W+sl(8740H^1z}}Ha zYoR6f%fw>gyAGE5ywl{kWHa-e=nzOTpVi(q#nVU(TxX!D zu4nELNN;dknx5TMiT%n7N!t2nPSk)eX-%8bK!0zhtlFNH=M4*T9f{O^iGye5Yk3a` zW8{+ZXdgg@?Ay#df0#Q`ze~l4?p{#dM~yhk=~xgReQ%(xqu}P}luoY=qr(2i;Os@D zPMAFS3zO?v{9h=oyH$e-S|98%mgwHBOe4=q+%QMnmsD~ob-F0}gW=syQ@*e1><~=I zd9(+>Al;RIZ!otM#C$WfCriL@f@BIOc|EBAmOaFrMfDXuVPHDWd zV)K3T{<5n>!9__n4?UnyyPT!Nbw6`RUsHqDCHZl89CJ$lDgIj0s(6?J{NuDR6SE_SAtIdZGQhjCae zHph-a)6})CT^RB`FY=CZ^mjO|_9t{2AcP|V+Hjdi_z34JCfhIg%x%v%!stfVv+o(F zPQ2Rh;515Thv_UFEfsy!dB=HmBmOgt*UL9VNgseyh&B>08I_5Ue~!qYd8t{W8tC$; zy-2yLU4W;z=;_bT+DHy23PJ3QOGiNT{Ul;lL3u_fbQKr`E~v=U*C{ws8|1eszZp`f za7H=Z=z`}_HI$oBCIX#OT|FygMQVSuDZeU2O+JcEcvEMDZB z|6#vHX%n8pb~u=-PbNlLF6hZErLRmy4|H=mbPS#6^hss82 zFnG89lT5+L-24XXf9z}Z#?EMl6g9sPU%{;Kq_3^vEwW1ugSB6O(g>h0lWW-s50Et1 zSFViRDwY)*V#BQoO{*nEG>l7;mVVMe4uG!8oe}ZZfV)9uTikG(@9#yCYWdlc(9|-5 zuf_BLv8{llt8Q7j+z(DYELH9VDUw}{U+mkD2)7;1BQ8ejRw_s8?J2mwG2NaM&x=~z zB7tZg0{S#m7ZW;7h}@iDwbF{3nR)c^#r=o<1R|H^;@NiihpG=y!z=t&;!=f-t_mM5 zVLCe}WyuDP3K?j)uR68VkEPHQ$JuRZYQ1x^M|)&*34olg?FrP7F@DQx1^zdoUm@Qf zPOGk$Fj=}dm=c9|XyX7z?-ih)cce(R|I4V0WVL|iMW#^bc4t?$WjnXZ`jpZa72ZT& z4UMZ{;X z=)*@4xmK_JjA)XXO`H~>j6B8f7>r_Fv~kG3E` z9~#D5_xZ56I#YqCxoH%eN$OytrmXgBRzG4@F^r<;FlNAj0n42_-n1EJiu^3QtKjo` z=Tl=6!|qooxu~XOB5HK>@BkRWT3fbZ4ESht&Y6r1s}gcD_`c$JdE!QMGe!C8VjT`1 zBjtQ*L~!KLnZ}2hKmHdE`u7YOLiu6N?LG?&7!bv+Yi&PKzKUL)u{%FboAt1M!;&Z2 z1?E%|qKJRCzg*Jd{Lhaq&PPjAD@s4zM8{*%jK-b4-V?JKlm|^`A9O7F;+@s>ss~tD za2?W}h)rb>D6z?xsfcDrk<2DjVZli!j->?n{Gy~Jzc0X6NnU-8xn;3sUp0e-Jv*%WlIZBNu}g#pY-~q~4XMfGF)}V$ zr^ztVwcBS!MTsf6^u&Y}b3KBg5a|x-;a+XI7BWh|w5fVc2jjzXTmV7O{Oh{;_oWLc zke=8`rF^Wn!R1REu+uFe5$2u!f4mX|$S;Dx*^!(*#;lii%Y;gg6i}}b8AU1%K8FgCA=S`65Fe3nFcVp`9kHvgB$A;T(wXZ%iZj#i%A$hD(CRr4( z#RNg!fnbFMNX@G{~ zgUI9E7(J4#>q_M_6@9KT6Ys)gD!T3<5;31c%xPmX?8{g*k7j_L-92KBCI^#62G zW_V8^Ntn0aCotfpF1XANin$_Pn0HvSs1FhHWFe$71is7!(<8>vKAcx~>klQbxSWb> z0%i)ZUk-CAk`GPKO8-O+Hi`UJBMD=_S677wVT!fvLCWDmzKQP~wd0hJT4_rjkeAXd z3Q4Ns$*UVih7a%jyyJz4`x{B62Pb0XTH>692m;IXUh=U*iE(XrS+Q|KN=aUgomUi- z56$bIVpo|}D@-o7AF_bVkPj=|Nw=;%h%oc!4TOGwGITCG!b5f54_7xgeSJ`&R>b>7DX0)I;Tup)VubRF9oX@ATu?Lror>itJfQUo zPGfVcK_oUqEF9xO~BOBjYtAw#5C*uD-Om4=@iac)`$UV3{TT z&?#{v;H2oE`c}28#0@PU>b<_ce&KWhNY|I0ty}WMee9Aw#C)PnEIZr-Xo!sH)N}oU zyO#=0{HB%FFx5x??62K`cf9l6(G36iSyhvH|6h<$BZ0mzrO+>n-*LfGm>;*|tNg z8JkAlPe5z8j%$5w&BD@hNXNCu|5Z?2TwF~pRnhzweweo)!jU6@#H{8)MuA`C$VkaZ z*o<;C@}w)~1MWsXip2xSfEUA;KlEg$DmG%B(t$m?c9<2g9-)Ev-$*yGop>Sz^eA!| z&@;LFT}T{(dF^G#$?r+s(}+%RaqGt)Mb%&`*#NmvrQ5x+K{ISn$NfWJ@O8ueFzc&y zGEe8p{jO~$ZtFjY1~w3TcX4Q_xUw=9GcvI8vlo)$_|I!e@==+CGi2ObSC!w`R}{J* z73{_BnJT1{s{q`_8C-T+cXD#Fv9a;7HDPLO?6ew-3Ozg&g;)o0oLK5E4!dwfa$o*#q_>i^67r`@4oYm-pZ81!7h9J zTc2Hb-OZuLE8XyZzhsqq)Cm8;Kt9VqZn&n8kBdREr6t^K%%_K`skiN3&Z`t)dOG#^ z!^CtC*)M&{3FNG-QK3qYE2-N9fC(NTQuT!UQFRW zy|H1E1s+aEW=OO7M8Sl4yrjAYSsH{dgx~G~zg2FRjW=ZpIk~RW z>yQ$;EPUXPCxDiH2>FrV0`jZ(i@Jc@tPdbM2q;_v0Fwnk)o!l*fCc#_B+LS0yc@os z-m0oV00>yNVl!ym0ky5t`4d1}EhHpFoXDL5Pgak{DGGb@mbG| zA6;)c)%1w`2N$qDpCn4N}D&M#I`xP>S$i`(%mxIevlm^J>w zkDT_A`-*XWMq}Y5@jEq2$C{nsw~=oaUKkas>Avl)Q=m7=6VOWy@Qwf365MQCuQb2` z{mVtthm%E?A_v>{}QqoIpvv4GFM&QW{8h)iBc=-*0)r z()_;&1a<=So?r8Z$Ei;T;0)pd@Og%vfq)R*=cDf@(6Vx8>IMS_Vn$KxZf{ic8z6SI z{T#g7`MOKKiSmdH_AUm3T0|b^)T8BNJvG#e{oJ)O8A~nl8*yWtG5k)9(EE~|j|bcS zB{*GcC}?BM7atntf(266BJHo02>Z8xUfGb#+BX>`oT6k!&fg3h;b@{?syE6o2mizV zwz^S}VMx(|YX8GX-58q@?F=7HVy_Dyd|_=W8-?3JUC=M?WxnG*M8n-k{S~g?G6J=E zTOMT5lEHPYJ#w8ux=L5XV}1r3EM0)L$CA(k4~f%( zKPM9V5)AE0sQ9$KCjzgi^}BaU0G7YfLSmaL8q24p<&R!3QxF0_&WGYvkS8qvPEq8R z6(N|6-r!)qco)9eHDB)vJz8Nk{*rjbt>si5WcbBxpZ{wi`)`J*3_atNHf9l(T;9z=)C{o5g zFHT>5En$OufeAah@9-K4C}aUXHy;%dd%(+DnCy39Q4th0^v5FN7hFV>?cQK#XJ>#* z2lQ=y0ayWO*U!w%95z}K@Yoyv&D8yNQ$t$_@j0*r$bH80ugE3z<<_w}aO~QPfIwzW zOHT5py(V@%VAX-q$G_cLpacT}y_cSNPVj%3f~e?Qc(_-qqB_hNKv(h~(kNK?FU2DE zS$goKktnlASB6fiK{~SfJ@^rH0m~{fL^1_^JA<`(`o;zImCBBWLG9Chxb*2Lbm6jz zFx_SYAusf{@*d>AuDL2p$vr$<3b4X8)O*i`B8L$r?h|^ra~5v8}y0G z`cr8!sBZ^YXi1*3!qY^&9(UWJ#6-`XfEpOUap*DEiaq_Ob^URyd?bO0=|>4sD~^MW zz2RJt)JZ@D0wIpB;Jcy!n-dzh1?bP>NybUT5y2i>INxzZHt;|Of#CQ1tRJq$MMcrx z(`uD!b^rNee(`(<{su%Jjp~;TKRrlD+|{S_%gs5msv5I%%1-L6KI~Kdz|N|aNujJb z)FcSi+P6!YXW>L*k5kpuq|sA_UMbN2iun&I5n_zsM%Ukq(Bp5xW}bZ(A?R6&(2j43 zQuA~Mg5Xh3zlby~@k#DToF(9rokhn&g}@SEhgmJ1_i_4rqX!4_dKCKAmUtS=y|r}1 z^MFNz5ntodFI`FayRwa^UQc(?ZPRe}FHK_grT?C69Xg6oa}nMXkEy=O-xyLuVj{?l zhR>;=zTyg#$R}4}K&|LP=KSA{WB}bYnv4Ou&~5uQ1@cj|-8|Q;ITmB6PpR1~{tgDH zc5Ohl!t6NqqU0<=h_>8cxw`N6V_dgxlS{_9sQy5XOavtM3UcH?{Ge!k8Xxc^lNcJ zpevTJXTJYu0YuiCQj+-}XDH#b5CLc908x}8V!rDjJtu!Y9+s`?5vuoIUh#Nfqp^=F zXFL^)BYy86B)(D+^S^S`X}GiK*Oaq&qp`4c@BqEPJBfW%4+2EFK(flwPbQ4 zfi27Yp1(%^vh!^6p=*p$Q!TlR&HP_RZfPkjY(8}z4{Q>_gw+0i ziexOe0(Q>$ve()nCUvnd%00>xe)Pp z4cZ{>>bTo_`D!Uz1~;}aELwi;Zcn$Fc?Jqn(4;1_;c-h&_$^nT!@y}}Bi3a<`pX*f zLfV`s|C;-I`AF0{P2!dB{o(7S`;AEmzTnQOOO@M;t>#w;eY=52qBX1pPBUUttfI5` zqnY0DKrWO9mQh~fi_C5hd|_FVgU_4$*9%XV?-=^MaBnf^(m9@|f+LFxX=RavXIw3; z?CMjPtTzb{Usk?b+-zmtTLcdIYMLLqlE$Xf-X}KOx4?0)Swdw;4|qKKvYZvzg)p$}`>u%e#h-zvhc0I$pLzH|-{@b5BAS1>K#Vs~gUU?FO7p z7PoKfFikLlWf%vT=e#YfERNG^@{{c6TrHMs;{hb?7kste`^Bw-2bQmUZkFm|y@{MyGW69y~# zThvwS@g_7D(lA1_h|3e@e4JjwAfj&M#XHnRR`**njTC0S>86L?MBf;6T8^-dkI8+_ zhnH^L^Wi49^HeCQ%LH*w>tjLIasl-6d}{8xr`_T>0VU+}eOb4S_U94&V9-~ZoeSOS zmwAFmm}Tcl*&^VI=7x|$MjeIm{5wz64QBn#zuJRAf-Vz8No~LxpLbzU>W&SRf#YTRp3afn0;4_g$mdPh zR}C4y*=qP)Z_9^j^l>abc){C3H(Z?tB?;UfZDwL0=6A7yjlfv?w%s<=_K)oihIU(1 zvK>zU8XvpsdfU*t(|~y3?gxvI+Z@f^;ea0z@_tXDDZjf(+1RXeTCW6tWHT$ww25c* zk#VV8`%1hT@OLhJF?Pk(PE}}d>p($DZfzs5eQdW3EPhOczHJ#pDO8RI#+{ z^Een!+gutve%pSe6T9Y*{4W_VE6IkhQRh5lj2?vqm8G>|HODHH!$iA8%l)}&VhJw` zL=G0{SNE}$oJkd-v=UZ)$`mCxWf(U^PtT917&q0ScXUV$k1JD(+d%;pQjo5v$Ni*o1A0}Fmu z5OgkBqQy)xl_`!K5u5RV!^S%kQ>y1GHKH(>-wtZCP0pW>@H8#Hk)Ih&Jg%o*!QUED z{h)K}#WR{Z|4{G=_hCBQ|FM3>iB3=M#T5Ov(aAKSYj6WO*VmW7xG-x{4%}lK_j#yDU7JkJ^8J979p-i;9T<3Ki(Kbx2(hulW z-Qd5zFg>^u#RQSS%4Fu;Z+(c$^!(egu)gyl${6~a6zD!PCpHrJiW8H;dNc&rpXr(1 z?z3EM4;c;y5;WjgWA&M>Uu3zO9X`{7!TcW8AlQpaVPGAquW zBB90P+z;i5RM^&~Zr{&PVjo!Go5BNhUjv~$Mx^@csY_@Tnw(3)ceZIButS_!p2__X z_BA>>I%1zE{T4)zPQH$%LkkE{U1qoOQ~*~qHZWiB`;->>SQ5sl-W!_rx9EH<4z;Ib z5TL6ZrFQ;%#(1oh0i47}%#a+lP?N8uPF)s%1E6C0UZ}nJGr1fOZloXu6_u2_se*~2 zN7X18)?@T2Fn(+}A6BYnucebvX;eAoWcawRv+>0ufH>j5F@9^LsJZfg+%pd(_@*T) zv%TPINVzc%X=tC#>H2PYOy@HI38j!Jqf^V^J4;ZgH~qSR#YDUILZthn)QAG^SrnzK zW;m5uLe_?Q?MBDy*cvtf95jiwzwx{pm61Il!3ZM3{mtnr{lV)?E*i+BWr1+W;Qpd5 zdZuS0ZhaGmHAN^vP1y0ETRO+!dz01sY>A2q1&XK2e4YMCd*qY1a|8M5xn19Q!n1cv zddtct@B^fcr%+#RH+{qe~# z2}@dQAa~FhIZhSfcY6))kUTa}h@p~+F@u`I@HRRdD7q(1Xm-IHA<)0M!K)8gA|-ps zqb)1c%MYXZ_KTs%Cx?fO-KJhYRhd@VY-Sx7VRV)8IH-2>-Xp6^D{y2pa|T2rp2;kJ zsw#1Uwji7Ks#zY9Pb@$nF;z=L812`7tMevRTx}#!?sNpvTDRHF4k09%nCj;J-kCB= zVtl5ccBk1FX;pc3HHX{x#h!FA;C-f`B^?G0OTK;Y)~Q1*rw8dTpRUQ{JcFy*oyD>y z9y6xZufW9Flq*Udc*K()T z29fG?I?QSz_NB728Kl{bWU)5XNd@%VgOhXh#}i<`-xkEKwrdu(uw!Jgmpk=WVqvVy zp|G+ZlVhY*XY4z)e04wr9m$*!uuqaoXi=k)z>+1xW3RC@P)bV2aSHB0ippg3x4BtV zZxU}^Q9}yeP#I0=aEJ#DpQugr2Zq2 zX%D`i2UGM(Xd^R23geq0a11U;IlWy|tf*ES3R#qFj!_253`eE1sZ&!*TGI6vqjQ;b zBA%_%X$kDARyleM_^)1=!mZ#Jl?0T9QDIax0Xy-yF-ck+4sVr0AXHd)P@GaG_v@fy z_Y{+I1gIy`K&|0`8xpUOQb`iHZ`oq>$U<<;z80R7wxZo{w-}PhBijnpA=vU0U-;W$ z1)=3tjIk&uTFcnBP=zBg^w3K%{hSW`(c; zuwUQQ>8Or(f03od6~e|-P)^c}5+qFSIzo~W1(1*rnIujUL}TFgK}f0>16Pm_+Z#kM z5B=PsSqvM*6RZ-FA12V>ZnMlO9H2sh5lcIOtD2W?Weh&}&X;HLTlTMF`@QWKSBA^O1G2+mCq zI#_*J(QSlegx)07U=cnL%?Dwm4(39FS~a*22NmmNO8<>1AnsmsDPbq~m*5#mv80IS z;c{C@+58Qn&r6-UGF8!cIDVVKOflH`1FRZ#I!fRQxe%$8!+~&5r#P|n4jyrclgHs- z$4>vaTAAYbE^B0}5*v*;^>*aGkO`XfVeEmOq>0%ego071)IuN@kLn0Clv<9|?gma>UcU@@cp-LsnAdoF18 zieXoQ1FhiBJ4*wx0FQ8H$nVn;1hG?tB>aMS_5S!{cXRh^sVW(g19I4JK%P@NLf-!k ztS?S7tu6t$1BBLbe~Ba=7Uyf+ydYbd>0IhwoNLM{;;P75vnZ(u=^aQFp6^WFM)^W? z7-Nv2IPFBOU)(}uIJC|VpfGvXs4kHz-p+7m zPoonO^aL(NiBsydv*ZR9K?WI4^Ghf^Gbgc}l7>(etw?GZ$02^UF^cu85_~H-EsJu& zPgpPk`t6ARwN%dFNfIa!QEVdZlSS21VyVbaOe*G9A?o-m5o(1;bESd58m9GG!oQyr z;!{~M($&f&Mkl`D)X2v{`2AvtD+{J^e<`$L0KxVXCJ7oyB+~7!Ip6EDv3Z9(OeiAp zvqzd)^DAk4CsJ~Ag3~wt{C8PeS;?~l&xT5upur1R8Dd42}8A?J{1=kQ073L2CoNFQe>78MyQ zs{-z)HknWcS>_&+$io{z#sgL~7mjp&gSLxq2X5}FWp!NUbI@ukhFP>)rvjQD9CZVi zo0-E*5(EcHRfRF_?8QWL6qSPsQ1447z9sSqdvu|RqA}+DG827qbKiJ^4CqxrR3`Xp zz~wtPhnbg%07}QDNs%{+R%io9N=g#9y3l}hEy5~?Q&2VD|IO%#w*?WtOj|aipzYXE zbpH!r)xXL^&%K-p*hQ{FG-pDtF_o&Vu9LFLn3AO&!sKm?#Ae zseekqzbX#FqwfzfOJdS_!24JjV-*Q7i;cXGJAkDFBdXw?sX>OrvhW@F=FmnArL~zM zV%#QJ77DR+11U>oFD3|8@>#Knv!1!tNP|dD4>RT0iP4MOL}Kt)FEkWUH0?@7>g_2l zKL2Z1r#f2Xl*}eK`rDI|UthN)-JS=oANhE8Cq1iwIG^+b9Z`k`YWlsJw%Y5P{J1Hy z^78y1cV;>|I&Kj7M==6lx$;lf)4g3UTizdQK1knE7i)a(D}ZS&Dxu}&#S@CboiCEW z2#T|Wg!E4ym-t>(1_B;*yjJCmLv<+6drb&Vw}tO*BgE8xtn?V|OaevBcIvN@lu}67 zn$?~mq0n&`>-Qp39Sl&n6cxFI*UC=axaX8XTHM%SRCc;1Ck=t10%HzcJp8xY1myYd zmqUyxqSB?ue=sPE?7F>*9+lHrg@AIq&+F=DeoB`AEBkl`$K{Pw!bsta8DkBxPMDZ2 z^P0E*-GMOZ>R_gL{_*oq(;@;WQRt7J$7CJ~|FCqlq!L=>x2q*w@=3HonYLi^SqPAL zIaoToT#FLsF!XK9Zp(3Xa`OO1KZX_xCd}}j0sc32}v5T(ElSXNK-In>=Ufn!@u2KzM{Fn4c zsjjP#4GI02tg?ODG1 z-FwxTi;mB#5|=LDyIHB4)yIoXx%VA^S0c|VV&V>Gu`=|1>@;d*FxWVXn1rR$x^OZ$ z98e3-zukKrKt}b50wiD$8@rhD+gQM(6NkUF?7g9^GoOl7k^%b9$?i*e?8z#l)3MAS znn*`CA$UQ*K5{tpjMj2L_fBDwotCqWG>(HIQ!|iXA5|9nWB;?d`am6Q1S;l*^Q%}? zI9(TG5`{hC&`(SSf}+{vefWMY(AJd%rtrahQm(cPHU~$yd>yA%P54+_FG*fXxrhT8T;j(x4l|g6ctv( zLm)LxrW9V~?NVcUCCZiAGw@B&)>K#RHE6WHaZ`+eg|(@;l0^-3EQm35^&G!L8gc+N zSZrZ_g}^F~@7wiG*|gdp@uKWcGLebIeA`k)<8P=D&pNSF`-EPI1=RWMw5tTdDxN0# z4$CQdnjiI%ijz5|h}eecjk4eKFu(JFg%%%g34akp_0B9Vs(xSf$yQGFB8_TcRGHtH z`?BYSoYD(7&W_3rftiwDgL3NSVt?{n8!j~^-}a;&_7xDRmT&)>+8VtRhZ#%A9I8e} zN?zR5L8BIB6uuS|!I~%fyW;D+NygNVmN3Y0gnln+SKnGeDLJkE)@f}jy838 zuN$mYufFqRe+9M1rW(nZI6UqYc4w1j5iN@tyVb?72wTnbD`4ocQL7IjVvp2wdLM6e z6jE`%+I+dvcuI99j|t4A7@!_t26&xpe+TSM00+3e0H{3IHb9tV3TSIBaAk^qM-CL+@)HsC+0_g@ z(21rYUD2o+{d2>{h}r@aE#sRwf_P#I3AOKAoA^{KW;uGk_H&W{!Kd>`2P7WC9KZzf zupV4i0!FGO;K?P{Y>+g+Km4MIomS35ivG%|t?kP)=a>!4<$G|Hbar*ta>DFNQ^I+^ zb{(O|(mUU_hKw@;dBFUG=R3#8zqGh@zI@JeE8IrdA6gVxEm_&jKM0l03RVB~Ef1c! zu54@SYTqx1`vQVL&Zi5P=IsBi1Hcw-9^`uR+xYJEl^F}(qFQ1pK8xK*z%+mZkmJXMG zZxEn#b@z&aM@Hnn_Z!&V`j+!d;jqJ(<|hQrxg1>*3%Lr*CfO7d_phgg?CSL`yJnpj za+}8Ri#F0<==lDCuJi;V{y5xUchkfTVeGNB(B1oGGBFo}dgUBZd!*C{j=}g>jgk)! z)0>j<5ijM!I8U#0&!*knU+5#|peVmUFm;yxY z*TOzt>i?37=i6&~ntkR{>Nv33%O@!@m{boO7C5> zgzOfw5*8_sK<_t7#E&kaDuT9&P3)l!6?`fSE4b+}X#utujWARA@f30pkl%5m{fa7^ ztN3KNOi#R0aG1woMkU|1j!B%YLtDxm5sS0$gxu1#sd{cW_F-Y8_m3a%zO7oi zekf!XJVYphTFH*o5jn7Ucz8HWI!1grn3!JA`zid^zWHHf5hOfB@*W-@*49T*DJi-> z?tmGSQnAc4Fv$kyhWBs&Q#B(+6~&|n%q0Pzx=>xl333Y7f9%F``bC9b${Eo8VOL$v zN?!{9?p}Gjw%ZDkY*mzT$<;?y>wiyJ5{;&mr0+^E_yr5jc8=6iJ`p;Lr6kwz?p|o3 z-`!508e&K79Vy`I+PS=T^IrD8xU`LYR1y4FAnPaf+Urf1tM4)(c?yg{B?oFm(+0rJ z02Y&YZIdykD%l~pjeo!CwDP@A^50nm`5I4pO)Ia_3(mirFB00hDnqL+HiLAHR&Cd_(O&JDx@r zAM0MaZ?|e^p!p3QUWpH)f_^Gny0*Uy=SH}_-R+8dH6IvYLKFXjIVj0Dm_(WI9akwy zY5Tc~ifp`(2NtZqN+BtaWq6c?E#3O`U1v0E`=$MpF#W{S=kdn0vK;pF#UfiMhEH`J zE!m?(W*%imvpXW^hc^WA93NwGgNnSW-@}k3ym+~~!dr!6iHfGJ=IH<(TZ`5_ai!IKnRnW{wsz$H1n!3Jr5~rP6i^l4f>ySUyv8^r4+ALo?mI1AI zqNqa_fB+JYAyjX+(RSN+Wa9e*A_nh)S_nQLOJR!Tv;kBA0&`$^vP^$$p1U@qxN$Q& z5hE^;``rT~#n~6^nouCNyDaYIkK*(cTzo1|yeASAKNP5O7$T;Yw=I9$0H}1$?EnHR z)i7iLC^%oPKV0qV1gDhCbbDNP75}v`Kkse0t3NbTAntm;;=FtFl?VM~!Y9k^YWfgs zsl89^@_F=eYK86;?WKNDz?{$mm5g{13VGqFwI6kEskY5zxE6lORq58VyWnplSoh~2 ze?;ThJ%TV%`W@xpuQo5LAQ&76J78h)3cP{|^hrlp*(*==+p2;GZt5;HZ&hjkZ%nEn zz$SnT7EdO1h!wgBIUB`_I-=%7838U?*A$pm2@<3z#P5w9gtT`1J;H|z89;)W;ymNe zE{3OrXhLI}%UY-7wtdaj1FhPF#B{Q&X6qsL(-1uzO3;4zN)-VNdKM2FEnyg6T8nmU z$k4$RN-z#GL68>~&Xbb-fGdXAR))KogqhIvPa+JdAqR7vuZ@&Gn(0j)l)nMB;Li4U z_^QPDG&bzUR1t09{89gV{!qjkxMCSo)T!b@qwfd-lGeD$j5!17XpuxiIwC9ZVm<%Q z0$5klb_`S4Bi88u!wC7{-Ik)yGht;N3D**#+%`sKk*rJ$mp4{0jPHZ`TX+KeuWzeR zXeqtvrD_jk-^}p?d+ZSV)FY`?b1|>YEobIOoJBUtbd1`ys@;1(zqFdv z^OZv+ zYg^mP^K);&bR+HT=eGY_sbcibYY&itsMT%(uBCtRG5<;-azscZ4V`S)BbgVa8w*Go zR}S%t*3rX&NS42&Xlk(gQsJGR?3PZw>G{_XPQ`n>q5@PjAW zI!0_|TVtVz{0y*lgyvyZ56Q@rQ22h} z*i)bTOujUXfb9cX3;_pYhoJZ8$bo-7+m0)Y5J!L%*UPT8?@RfvZ2O{&0Z?XSp|MQM zBmh#C%#jEr*nTe-vx#YX7z}van4f4Ljf16-em-U}>_*@4ZmWShZ-H3!3V=%ifMBB3 zS1n#tNcW4@;d&YZ4x2Z7WVDZ$#cn>wgYinJv8kq~JA*r`)2$ua9d%PF>JgImWY<{& zWOtMW$n>h|Y4L7_k9(|kq2x=-X-awKypk0NEZ#c_hBiYNtCms)GVFFT*pMCiB&@e~ zK?@I+4?STXOSD$9WIgZ*14wCt$V7UZppXoq!}m?W@bb({$mdT^1t!#nO; z<1g4nL7734SB?TQnOZ#yaSmTkXHc(kcM#MPqVgqLlDDL&!y}61ob4T4eis=*q9?Zr zvp`a*ji!yn69n=34+x=+rcoK)PY~Ea-s_iJ1?Z%HHRZp*gR7im9zh7)x>6q>*&TC3 z%g8B)Ri09uENg{B%TWEljC8l>zo0M&Fqp@VDA`ldHPee{!%R8=lo8l#hE&~~7`IR; z3Wv^oOf?mgkKeB0o5w2VMv2^w`_?i_GP%8G7HkjUIGb%XJua1+Gx>eW+Sj8Dj)1+D z95-)AC1*`xpaV6EFy**iftPAmyoc-{P(!7r@ z38lj8-6kMjmEmlu58XgE!iC? z@c3@7teXJ6=Y{6Ov{C>V;*uAn>+)yi^7eFhPQI(o_^x4XR-BRhoUu;EZL_|4-QhDp zDRk`B14aU%sus^eAFH~ZikqtP5Cr4k93!&5Pr;-g1)S9(WQ8?!dI3;@rt!}o3}u}f zd7O%u{nHF89sZNMZHLf_uZdS2?=9fox!;NQ|-p1Og_Hy*6vDVZ z=0=F#&j*+3sIp!<#@V;F;5aRbbX*>pRI`4#l$G=aY%iT9CHOp-OaS@}(aP4KpUkAE z!4Rtu{yjyk&S1VId=pP=t0+bLl$pFPBj-2NZ2!J=tMmKbHvrG7(%XeGr~buX^pUsy zWi5R4VnGK}v|5vWd!*aSyxQ6nU1BeKV##|;pKyp)ZvN%{W69_p7#41z(w|mqGpAe((>E|rK#Id@Mh#J?uZgWri2~i4p2?p>FuYq>1Oyq*`n)i z130OY&wm3+fYBiT?kv4sc*ZKu*hXj*uGM1v_=RJG_44k}_}zqVfK=5gv)=piC9=d~ zg`gc3k|s;_ZG4mX=)86=kz!~ zz%!?7e*p$Ni`QZ1A1g4B{~B3|m%F$BEqhSH+}#!@px+N3ww#c_~ui;tfdP*zvEMWYdbOdRdBPc=bfvoDzG3G zr=zozn_sg+&s0qJpP{)?B}TuUe+)gOQmnT!(RSL@NHKj5TyjjP@m<_)e|z;yVA`u* zZQQ9IQpx6ZDQo_37}t~&h(C7^+9GA6v~c7`-M5KXJBT)m>KnoMza*YI4l%iFWiz)j zHs7zhgP%NDk6n15Bs=Q0FnzH<=w~UKnL#!%T}MQf$wzelU(oa>b|L3DY^>PqKbmgBNjOv6pN-y4&E;k z?z&ST!R@hysTBa-!fg#sy${Av?y_s;>y1C14Q0}3d##~fyx(^4{)nWl z86rqL1?JVcN{K+f_Gcu);{VX}m0@{vO}9acI}{2OcQ2*5yE~;g#ogU$p}4z4ad&rz z;_mM5t|!m?UFSC>cQV-{d-j^O_?xe8CPVke_|iJ}btvas*4+koZ$t)fn+!e@CTJzr z>^wc>W!woid2h+5;?rs-wI&HRmGfxs-@|SxA&^a z7uuiEqinM!%QIvb8SBQ)0L2`!*KgWkTPD9jQq_?R-e>UWs0$BTFyDBsc!xsy^UKq+ z7(;7aW8FW?Qx{UWn0O1V#_Yi2l3(*}J-t9`!#{ zjp{0U9y%WTF8&RbL5#s7uPmIgP5nc#Qnbf!s4-7E&{n=p~^d)d0CApZM$N(PJN1|-t0OGy7NpG zull-z)!$iP-kwTj<;TxVtG~@VKfkt*WG^syU;`mD@h+}B*21m&$L)D$Zut%av|4hJ zDl}{DHmljJEbY$ugPQg9FLK;zJ$W#%$Izo$1m30HySCCh*|0hqHTv6W(_lgwRSgj? zUHNwY*OuG!?ZBqKr=$4N&C5O3e4>NTeG&{adEL($h>M%#qV(GQ$D8ZWuNFyP3J#J5 z-<=)gq7MAt^x!Dc*x!tZdC-E)K$^w<;|LuWqJoo8^kWfaKND*gNgIJmC; zK&CkmK`=ZxC?PM88mS7dm(0xf)b*GCeSFY;Z`50|mJnq^?iEx<^s7KJb8bv3IhB%G zAPN+n8{~3w!C~i z%HXu>-N9rLXEt!I`slePZDIlSCZHAa_SitgrFvN*J!;~$F%&K5zBS8$Xr1c)Wa~E3 zvG#IOwlA-eVg34TYcQtkCpe-!YSpk>4>FvA!WAHOAJV0DWR=0d+a{_H9Ck@@F*(M+ z$cvx$clU<5d96MdIpDwtA61*)XZdcy2O4Er_SZ=(R?XDmUnoKPHHc?kp>*sS{I`Ae zKAfL*0AFd|Up{jm#+;^NV?_Uy5X$RRj%vB_{5*m;;Lw7lAXo!oh=|b8^!Nx2Dh*(-+++VH zens9t@RiS!#&f&Z%?tjJaKxmrBpMv2-q4Q4{fOeQtGF~9=-_r)b2i#|ncTh<%jiJ& zJF9u?4^2b+-nq@yoeC6SM6JN^N+xB?d%91&(PLyc^q~Un%Ac;h^P=bUsyR(3rZ*W! z+>@_k^@vh34ZTOAB?u;URCM~A;MQeuaejbK;Aps>gtuLH8U-2m@-su5Gaw-|N#E48 zaC+qg3bB4GblS>ek4zYPC=16uk<95K>b-lI@TLPB z@HZCQxZ-^`EMaLaLJScw3};(?zw)eDo_8(cM#~Bh4tds1v5`z0DuGDE>Be|E}BT+#65Hra)jv!tzSW$q`8Z&-H{=)BO7j<0>r zkpnrAKUUtSULKH~W|Of4S7~A{=lQ)~txD#RR3u^=^I+7MURWtg>JwBmZH~>(5hs4x z)v&PhaTk;{Rn*ll@89R+^jfd75Rp|jU!g=Um$Ck1@A$&RI2sQm)FYetj%t7 z>(3%S^gPNIBV4-F`g0i3qWf-CD&uK+Zfx(YIm9?6;3Rvd;Ju!8%jllkTgUa5-Qz&u z=WX@j`s&TTU;22*n5SBU^(v}I9YqLr!0!V#b#jek?&Z{G2;bbGxHJxE(PO4MS6)77 zK^YqNa79J8@-;mdC|@ZiX#({3!(U9L*mQuzPIhVc4)|k~tc<#Yqtp`Bj;OWl&QP+L z_fXLK%E>*peOEW<0`u}MgtY3Pdy$Zq zPf_3Q72qqvP-x2Ga`n!*V95qVQHvCjZGlxl88$a?A=+Bo>R-<0;L?H%NT5VV5n{qk zl-&||XA%jb8T?i)#+cVNx8vdki036_X`XyK99FEI0ADpmnSa3+rPjwLh436^O_vF0 zZyC-k02(=ZqPYNCZrR^Z$uY1{|IVfEWfVHFt4B%8IO_V6X>y`U1%S{P5F|GDH0E6s zpIo?e(g+b+)-nnSaQqseJeCYGEju@~CZFh~t`qBnt?)UrZv+I2K|TcBaUaD)5Zo3l zHOA)j%?b5J1H!i_2V*L{9>T+=8;~_O>_mC{-sYhnl_G?d zXkJKTQ;p042oP^k8TUKa-DtSO0KPj>c119W)62@0uaZ*gGhKQ7LHMeWu=QF*5OVF>H-kuyy<{b%bOzp$6ni&At>VAy`UYZBXpJOt z;rga7EsN*35a0^`QAhzk9#V_cj*wT{)5(9^zrfAH1w$|SmOj1>06<9$lbl+F`HaMh zG;l-tQEqG1%D98QQzlM}%*y8Iu8}va@?iVhEDl~$^c8gL0=c$)VBee#ED$36X^WMy zprFFVHy@%;AzZO*S8??eJAh)xJXne9{l%~1lQ*W+!xIO%zfBxIga8;b!6jekc+WBe z7c!ALqZ3(CVd9%_h9#=v&Z#?idRY0zg+LlhKTpp2==v)qbFo10bgBw3ct^ZIal9>7 zs67bH4!=$3a7DrA|7`RN2qz8_BKsKfxO!?_F+YAlT_>nxmp^xU2MNdz&ZergrF)G? zaB2;qRaD(_mm;x3D&u3p{l2+Hns@_1ms5&XS(w(le0~AHA)Jc)A)amsH5LG~-01ZD;yH0fR49UY6yjeKDj|y#CF)+Rx%@F|! z5CD+_1DhDoe;@$aX~M`z;x8e7ETWn7^3y+yPAgu1_>CXm*K%31RHvnn9lcxBqBeTe zWiwMq!a?2!rnW4@Jdo0|D3+*(Xvo#i$GiOGDBeO8izjzVxK;7ike?P|sl}VI=~7xI{G)sFs!{tk|mt57FGaX2D{pVD!X2rv9>@9b z`U{CBsqUT2>bvFFc3&x~9?9b@f~>3H$}znsFKcyDMj(nzy1aZ@J@*7I)7i^>I)r+mvP@d_n9&mb_oRM?fIWi zYAoicHlhhEVt>vq8IacVW`4|dma3UuBJcqZPUrJiq z=k-{3-EM%OE5#(k&3L;%9Gyxq5Z&9uWt`guo7J;^W43(=n+O;oNIyEYDgVMv{?@-@ z_X??vAZF|3T{6zOQC;gb)4go_lUNJ!2?_v=Qd4-hqcV_;vTv4jN5J7v&Zr-G0e zyi)EwB*XD#kS0h8sx@YrcN3*MM+r9Df6f!D4%*vC9(wf+Wu5UX#&MNCu z$m6n1IA+{EYwuyFlB7?HF(q@!YV^537nm(k1sX4%e>_mGye4|)m5Z!fwlc%)GerOV zYx($U>6swC?kJa@hpOM=jug88o)rOU`>TDdmMpJtmS<}^opR#I(~6OqID8D&AcR2E zMFT`&GKwqnFFb%ewm!Ijg}_$BHkvSs=$5d~m*4h+Xn)LeapNAg*8N}W?uWYX+L^D{ z*~5n)rQKNe_aQrBZ88rVI5@QQS9WT1zl|>Y@GY+C3o?IenD}O<(JV7|e)jp|+03B= z`GZ2SXt)!vw{9obMyiySs*qy3K79 z8ub+X&Lh*fE6QS-n#sw3O|Bm@_wy1H}rzvDagX3ISk3!(hGg)V8;(CMXp%d+Ee zX=TJbo@d`>JqLDGCwYyivWXD)CD>L%8wc6(ojlHFS2tm!AD!|p^*3&9-pb8SFPCDG z!xm@NPIWgWvTEY@k85Lm*S?J>DxUgcVSO6vKbB?cqN(_C7}mdtci!rja)LOUJC^qu zqeYH&o`+lx^JEiTno0N6WjSt3In-~nIzu!4nCWf%Ez2Wdq`B7ZH;j}zZ1^!d#}>oT z8~naqw$>~`RAE(YcHit(hm-mMDW{ZBbTVw7IX}w~?41_AiBwc4cc(==}~wQuy4b5C_llMd8SB)oO2IoJHSa zSU8q*`VvN~|Gb8kTx4OVfT41_z};2;E)-wrN~q zxb9ttqze)#;nw;*#u+||QP>QG2M)DN$XJODd)M57UF2~L`Z%~!ufHA=`mwho{|I4% zajRJM$iCz6q%*X2kxHWTW%6&JF7_$qEnx7S{ts=&BVPJjiveC21kgd~txA+n3?>L+T0 z++=Ev(crqbl~GdZ)bxUs8)jSr6j^5DSUr~;cpwJMTmnN|6}n9zr*z+2>Z`bFgV1MY z#6(Th#wAe>ub;XLw6oEeH^pG=iUOXbNfv|EdV|y{;KK5wH|R?KE6Lrtg^n?pPth&# zF6XHOHaN!oQ$Cp@g+wIK$+WararN4uPj|1#?$ibvirXkPu=!K62|3?frpz@*{EVjC zXg(>wFvAIQt^Z;cB00l4>yORL%#xo^|7{A6Gp{jsel&)lN@jtG@-SaTSa_jU+!Q`f zb*T3icLN&b40aM4DwTP}alWy9YcXoVYOiak#5pMxrP?5>!NkiaZ)uY6FMq z5UtYL`nwYlMUN5wO2P}n728}!lD4cK`YATcsu)>WT_~ald&?PG&{fE~5rc)&G}U6c zBRmDf$;~Z%q_=O38#slBKH%c84n$jr^p&9mlfXF0mr4?1fzbkDj;ajAD+jkP$uT4y z99SHZ_5Rn7?6G#@e_!aj@Lv}~pXd5wDnG}b*ml<-{#(}z1bBS-@PXeRHRnMc)WG9Y zYjL(xR#q1AD)xMlwK%hD5y}tJqB%H4QOBVTZ!94*Y!2#O`SljX?YEu8kCxR_N>7++ z@2~EQP*+&MVrV<{+J4o8+?6fTb$$$w8}%uG7!Ggj6oaCpf_tVjDc7_dMZEy@cunm= za}24*xpswh1*9&!Ft=&zN)`=8d5=OC{|TkL?+3tQycYtrVB`9xa^(rBS6cJ!5Z{N? zHzU3ep-Z#RSoAh@-879FnWWvAts0p^Rtk;*&sdhQRNaB$7c>f3e;esDg-n#{SpAX4 z;J|Z__iMZaLTIurn$tD`bKJ2FFE4&8A6o>qp0O{PlHT_9kGB#ds1pNntaoRx6+ z4q~jHhUhAQPAIwz@8jG1;?3)evH#j-AOpc`2JidZ!|S<^&-ExfY$&uKNLh>2Q+^Tq zH|ts+QTsL%+`b9>DD4VTmyNCZ`dHQ48*(LblFtt;RZ{V}c$1~i??;m&d==aM3&r|( zj83VQ_wRRs$01+d9b-~z2)GGds{I^@BQ9tVU5AM`RmOnhC)&=~w}zc9hLB6BIXEhU z22H`?Enn!N^=EPsGlumqbI+0%A^p`i_=t$5pXmF+o+xwqQpWiycLBNZi7B250cds6 zC59{+PyIy?|1K8?KEB^8nyx_$MU3K2wNVF<0&ibFe3}#}!gdPeb-|+5lm8)6?aDK? z33tl+!SmOVd@88hlKX{{CbdL3v^+e%o;^S{oGSP8T-0wNG~%XQ?y&YH;zLXLB4vZ> z?51L>6HPl4X^ANG5lwZwEd=?HB$3hJ6nWSzKPXZH!(5|$e|{R$yU~D0Nx?1HW1a9p zGR(elxW30^h|Kd)sP%iZ+Zw<;rOT6=iAi2wzQca|f9Mq`fBMh7jz?q1&RRtuzMeD< z1cLCX{??<=eqZSSj|CV>jqH&tgM8bCa(VcnZaXW^9?)bnKZo}wp8txM%O;{#Z!WCS zulF&1Gow(?Xo4idG3n24imLkhDl1}bZD-R(3aEq%wjiU(AFcR-e1o_Xp6YY z*=mamsEEoh3Bsqgd~ml&Cj1);XG4`2D`~%e!7rqS-!VOW_J3*#?P^c~P z6BfjUi@+b;6u=kNp5N6!tJ;rq>tn+PKd9{$I9(8EZRXIV_4xR>yStmn{w8+e+B!h! zVfp%Wo62SdYX2twz6Akng^&OIv=JUG%p+cXqm%y@ePr~XFV${IAP#EKdGg;+{L%IP z$7lEc`5m*uCmxjeGqD;O8shSKd#QX!^z-dmd65a3747ioI=z}wo|X`=nBETN0fw>$ z1lRA{=kH~8`=z5-r{R!9rZLlJkS;GS2s z3HfEBG4Vf+Uqr2a-!_kn%X7=R)tZmjK&s*QrqJi*4R33UKEL$ufgEM{LM;oa&`T!D zzvs903um5QlmB?&xq~|3<0JrvJ|yn!A7RyK(PgjpNVAa!{6c{TP)O%%uReoo2HAc> z3hH_jN>##4MBXbuoEBI_QLPH+<3jO+H^Ui_C-ow1I|4auqN`a%oC(H~@r)NC{0XH_ z9Ms5)q7Cq~PejfJk<4=Wt6^#dZA2WSBMU4mR1)M4pNC(R z%(VOIpwngLnf-)qdBS^)%`m{S8ky?N#1p}N@a(m2PdUr?kXRWJ*LO++I0f6*69SMp zz=OYv(4mIa-wh(!X>fB;R#=!t9a6Mu%K<)tj+vR6m)Gn4BX?j=mDzOu`rBQ@=DjVX zK;5qC7l9yRi5(HI$iFb1^AL%owD%{A*Wuwl_eU1*e}_p(W8l8AvxBTco#Vmh(M1i8U!_SHXr~s0r$HT^){>6n(M z>)bk6rv*P1j;oeRw0EPTHDvvk{DE2b{dG({7wQQRfJ0!EXx+f`MIkZucGWGvlKi## zUgXgEKR^P%xJbo<{@Wd_)GL+Xd?JI`mdhk z!*L^n@(4^vGQ}6iCp3(Gn6};cpD@*Z5*0h2+_+jwXw#99YeeBfepWLc{C1MI&0}dSyMj;OvVj;e}X)s#QC;usJ z@1s2K3H2n2+^Wpi#_W+gNMVj)RZKoHn;)o}3mVR8^rUU=M;rgD{FN-g|A zi3WuPttOwBF`o4lU052oE5*4<1B0*@92}%Kk@e8e4_;-*uFD-+xX2b^3`zR$k88wE zBA%|yIZ>=i$_O4yqS4dkY}DQOxuW*mC50yAw2AU|uBB#?jaYm_YNXK01}c??fuxT@ zgeBMi=>MyeRMuFl4zgMeZhZua#OIppKut2ZI z%p8kRj#l|8i0_M>EQ1Yt&+~>Y2RJ|9(&`OT(r?~JivBklp$HB6>p!9ekS6m6<_Tk) zWlRe$y+4WudL$4c^-=#8r^`K0DLFOu*}&ynh{dOYNTTua@yH+)`=%B26!pBSAtG|ul7jNI;5pf=XW#F{xL`?~-epT-pRX{4-@@ zUqhT+2mnD1@MNrn1RJ6<3E^~eWyDnzSx3jm|1s>@a@pD0ef;>b##p;=F$Dybmg;u! zwdVKe93ms>#0C+Yo*kTA*pPW5jIuvsS=lmgmCw-qd!>MtC#p{}m3 zpkUW8DA@9slIG^-NdC9RhKBp0QBsB317O* zgFeoJ(LYXcNeodmtfSW#KvxJsXlF?yJ5LC{Vsed_d1+Vzc$yo>z9+ouS4=<(R+ zo3p$7c@^2)T?p9oW*HRS7&7v?fd;(3?GE}Iz_#@t#W%MVYgERszNb5l z81JOf1RLiY5-L3Z_B|)5p~bX(BS*%l@0q?TLlr9aY}Pz@){3PFbz){CF zf|!YcY8eXaM)#bu_Pcb|@a-oPh4s|wp-zT*E2ch8IMPKzM7^+;B+vEwd+A!zD-J*#o?T!#iS-eE#Y&_n@N{sf+D zGFZ+r8}l8|yWSi1aVB~b>cqTg6OVI96+x&9_(=FPw0C%n(wZA%3Vr$&BbY;PZ6clO zhlg)Lj@&`7mX}z%aiAF=qe+VX8}bAkTu zB<3caN;NW_rSOzbzTj&=rC2F&?$w^K3@Z zod(HyKJfZ;z0NW(w`*CmE_2F~Zd@WI&sdEAIL_Yc);zoX{6%T5;ph3`Jot=Do{0v` zLS~%7njLC)FC{tLM<2|S8F^CLZps!*?#5y-;<8b2ALpM3wa<9A+vPoz1i(!+dQCW&jO$*0X_atkdNt41?dNhYMb_|H|DVNMPWbAK58~F!?i*psIQdxj!i7Wk zDl$hbu!sK~DX?wlA;+?NH%idWdo1!X8?|?6s=I6Y##|zOT2^xfuIjhefPalu! zLVoqhx^R_JYPwrb-I381FybvLGN}wZMl+x6w&pgHWQfJWb%n?ZeFYrT^67HTiY993IuIVqoU-$9VooFqkLC7UfDJ26T9NvWDoV!GN=EXYBa{?JW38E#%+kZS@8fRifKk+*h-L zzn8J{FN6|i6X<|*6kOsnLK zwi=`^Tvra%pf-FBDC+Eh4EuGtCUnXxpOl>{L7 z1E;tzTH|ddbK(QyweE{++&<@rPHh2+tn;=bFw}X{-StcfqiSpk)5I#0b$W^;dECYo zYwYrj3h>LjhO}lw!(^a;Vu&)!`AwYKg95Dv>&ds0$#z!vkIr;jQ!FmvBG0VIm^Ph# zJMIfW#s??$uHW0FoVM=CC@CpPNw;1euiq-7mn`ei$;7})n{T)KzeF;QU`*zCvT%8} z>M@eSYw$KaU9QujlQhj9CrQ9p?%G-D*@iN8oYkTGB9eET&RgUC`UC+5^AhZJ)~k!K z-_FVJJ^~lJxTDKyxlsAv_OvGu73W(?nHUFUbe-*T5QG83j8u)3VeaH0l=w#^B2E3T zOS_)w1E+^`+zwke)`X~0S2th$cM{0u(zS6v_QYK{Vz==!Gw2VUguHBtH1%f1YA$S& z7!)Mj6DH-Trp61A{gFB1=keL`R|;Ju**;!LYAH48FQxE;7iq1O-R{=vYnxK-VCTyr zj#$sF6*e_@zNz*yc#5Dyt1p)2(iD+7Xk`zO(b1y7{4|3>7A{E0UNP{ytcM;(ZD@Mi zHtW8yb@x0hhlTn#HfsO}BAt>d!KX~+gh3nCMS2M()twR#G1L?-dh2<-nYl{p{?qzW){2UYtePMedK74nK}1wYS|{|k@xE88i^ z3L4H^cmE5Iqh=Vzxy_Z-b64q1rAxd&Xca=Z3=L`Bj<%w?Q7U{-!DO@pdTLmO=l(DG zu0K{1c1B}s6*|Y<#hMlj>$x@L#=X|Bo{Oa)x7|kd|ETpu{A66>GB|xp#L};;l$9gJ zq+`>6+k9l&Ea<6 zwN5IzY4ngkE#)&2-=CLXcHDP=1i9tQDbOxousKnp=wLpcfj0qTVvd|Yr$A!%3|M1C zrc8F^=)fgUB;^*~o-?U69=hqJ%FqQSolJ0+40M1lDrgX6TZi@4X<jtIcapL(c&C;a}^bUmV%pb{!?nQyT{DyU6Eo%Y7XO+E-gHKPp4>%gL!hiS@j0%joOwW}KZz znz@I#_s#_0Y9L!kMdK>!R~hV3qq$P`x7bh#ayhUu0;+x*85x1B!nPcrH}1*k6Y!4Y zj4MsI_kYl@vwSc3>gpAu$O3!D*_I%b<2VD42CKnb==wg7AL4GvzP|lm)(|`@kF@}g z%80lw&-i^Rz`3Q~{qluQ7t~B41iMzmTb!#U4C|vo|S*H4^F^w zpwUzpkcAtRsr_$s)Rm{bwDe>$LGVkmjHINbGx^3XYvQuS=1V&7#6afGDL@o!fW zWad-GJ1rS6jEVPwUvcSh76!l8GqX1N$$-&#- zY&6k9MBFA5<;oWD(4HP`fN(l*prhCRF*0Y~VcETFR9}X6TK)0NQf-1}t) z@F-)!@UA1S6Ly`7%j|j? zOH*1sAAkko1%3ZU*{zmDytE`t;O9h=lhpKW$7+rG2>^s^o%>EoudmJxIs!o3P!Q=t zx-Pye0|wx`Xj&s|+f#Pe&rQ&|{p%E^ri=C@YOP%%GFuMt)v@|&#_(fowGNMji507h z@!j?Z&7AAI=;wn|#M>20W}wr&UJ%>kT3fEC%sFxyY8fqdjdYjJ=2a<>O9AjzHLLuT zHO#*PmM;KMrxK_)RpjkN|PbsJ{Qw+4Yf4t@{dLAi<=CjD7Up z-nbJAcL;2+*=izAc<}ShMxsU@-)C|UdMqqEo%d&68hLo&%MraZT)R(MUReSn;7eb* z2-v0e-j}nrXj{+xIhv)clkwRu;9^>yRcaeW(B*ZRA9k*j3FMg2+&>THKmdFtO#(*l z0yIwL(y8##|5I{&oQG-0WK84@5n8%9(BJ zK0f}fYACvS`|_k#4+LQ(!S7r1*d)3RmnL*!X24gYoZWnc-MhFh$r1qaMEp7<@cCzH zDKr3IIlW5Zh`DFa^Tk`$oKefl`qh2*)lJtG!j{p$%DB5i-$(Ockh)qu>+$}Am$)yM zN11;9V!yrrj8FvwWGUm5glbbN*x`!;Kq&lI^HBoi-~F0agblD&WEy`2X(m^jCN?T_ z03cq(f_cgM#c@5083KsIDC;?Eyp>K@0ok=au~LH1-8j3ZGXM*yjXJk2_1eVGteb*O zbH+qzhUp@sW^NojP!T(%jxF@HfBfEwHYc%>z<#A|fqIV?0uU?vm)ijD6l!NL+fWrt zz6EiHEFG80jePKxrkFia>HoirgJzuRJdZuo#r}d3$;dsmZ_PQA=_m>cK;o)Vw6Ja& z2RD3fi{*-+3_XobXDO+UZq`<_m{;2sY*?2803mwFx^Dd`Plo{nS=QRO%^DsT;#_F< z0zl20zCtPoa(4n=#=v&f@@Lv2Rhqdu9cwXkBp?gTOve2fT$R{<9|2;_VoTMBu?pn1 zz{2l%BkrLxSzD~306+ucNNyCg`pJ)!U2^j#C0-MM^UUR<}RSU7V@wxX1;oz?ouuU0DvK6 zT^}6y3Kc(a+qCOavYzKPC_MkT=p4`H*K>J$v~_YxMFFA^zeg=P-z(*)>Vf)Ay&C@&6~W}6KLDMDtQJ@>ayf;sZ+?M=SQdtm-&ey` zk(?mG-;38VDsEcYF=~;?s!p-`Z|ORSQ%vL58P{nsnZ`l@GF+ij#k*{w8fSLAgpsS} ziHNfZ(fMcYC5fj>?L&n%b6VEbpGW}TxQZ|MR`=!KX!^hvs$u=bbVRCZj|dfAN%C8_ zv-&k}M&jw$Us4pav)VSopQ!jYIG=wV;3ipyC6}#D~H3tuK`6uA# ze2pW5M0dPqm?{7iNcLJ_AJ0;TcLP8a{P%DdE~%0$!Uuf~ht=DJ5J8G;l&0lV!JoC8 z#w}ucakd|Iw(Ii($Tn&6JmVJu2;iY?Dgp)~fQ!|h01%*T>t$q5V3Pwum-lHYD(b5ZrWPwwo=T+%&FL9^D zt681;d2I_t$vQ1QDpMghxP_zffSsMa1ywc>%Q>Ryc6;5*6LQ1o4YglWb*sr;X(YKcBRH7a`_Y- z2fObnleJ>gR92oY$n8DsaQpa*(aJcV;)sGwS;ddnWM%$g~>YJCDaN!tG$ zeqfZ?79#`h3go8Rb|yH4!_HwHb^@+tF=OOvM12^%m2 zsoY)0!qQ*;2EsROp?!Oxfb5Lt&yDFoAe4`}IU0~PuOaVcH|#O-Q^~yd!EBd5qio+{ z1^}EnyskzNT98E*s4jq}UTRESv_Q;y0{}>e*>WnJp2{i3h6SA*>&63P*eDfJQCA4(f-8M@y{=!t!UrhJsCF53sD{-uZ%G1^_y-2Yci9*F#@#%~=2e znmMhPJ7;6>5cX0%*2VI)5?rplNI{D`m{)7v!uh8wn|Kt4KJ^?$GH}h=)FIF9bLE9*(vQti@$NMv!Lq4+BDsKWUEW=mBIOA&nn)qS z#+)`Vg3P2K_(*i7&D2J$ELljl!N7v?XJ=Fz)U(1llWpQn&`|rf+*0cyNQ|K+m&nhG zmkzn?)fO%pc9V}xs30905AQXTw22hjH2}*)xbF-*s0SBoT=TF%n2A@0_K2bxAs>9V zH}W=_bS7KP7fejYGjpu&hCXuFD-o~zqsXzihj7CQO%j@F58u)iX*uhziZnHDzTq-ZPU0`-9kdZ`r+f>*fTlqgg6m>(C; z>H=SOStNWhm2!5yEhD9aRiA3o1#2E<<2|vtATKH&4nRyEw>RqO zj-H6ID{J8v9fe2cQ?20|ciN%M0L^1}5u^bZs*mdvs6p&OhKGtyUL|<-dF0Nt{tdP8 z&(B9B6+{l6G0akINMrXXLbxdm9|Z=i?>nE{nx3D}J9Mk`{|FERkv~BQ3dl*mnRA=| zFbw%SD=qDFlh#}19@vTWgGGJAY?%p`dtu7T5w$xC)dT=;%QoB7BqfGH8KzTB=3oie zO6|MGqTRk-8XQI~xRglhkQj;F0fm#^_fM+htJi0n;YrITatedB`(g~^QpX5@07;mG z`pJ4mKXFggcztk)iTOvq97e8RyQ2%d^~|olFFz|yqj0^acG0V3+J?l_gvdy2eHV!g zbD4V%vHiw5f+h7!^7y!Ec|!Cio{&f|l70U|7=KrgRdWnd+^+fJSJ-rEY@K?(N=X{M z;m9`{93&f}BAIEK`vI>cl90Ra=N|#@J?p5*&nF_#cvBn9aw3J2=PXkg(*~_(Uzn~! zq_t7j#nKIF(Vd`^UZF|Xc3n8|=}3D^?+sK)r5UbyMVzsEb_SeDlQ(V*s+UjW2G7VU zy)rDx8*fTRZ=ybt4VfmZY-=&KRY&}no>)`}jvSRM&JAR-ST~cWAH9|l} zM@2;?CpWoXZb`;c@|Nx}8-nkmJo8HR#&Eo}Qj&A9LG(?&;tw zMY>uIBF|=-aEbj=k;>3MQ0sU&_4<78;WKPlJ+JHYI?UAJ`M^X74w+Oi(bK=Qc|DtK zT)H+p9)jtb@cFzy93Pw)LjX*ztqIvIlRDBLQ#&_pCnqOC0N~-_VF#!@X}}wirZ$9% zC`5GT8AcYx%ZLSB+_^1_&u@w^^Y=y}y~J4eGUmBqiQH9U5MdnFKjw3yh~KzEE<}(` z@+QfPqbI}5h1!USI9E@TUn=HQucE9Aizsw%KKc^@0@=*W3qN9iB#8TZrIS?0q!|~T z&lv{5{&``F)OAhA`e@reu8T!zYx-V6+Z6dx51mAeKV2C0@4{=hdt`t6pkelXo)43n zo@34AJr>w+ru2)%(-&xDe|-pm0-&jPq7*_#j|!?W7Bo8AKa>T75>wCiO%)!{Y0J9> zhTW#BIr39!t`r@k>^Q%F(?$j}yr@d-Q+44GZsY?nki?J?NyoTh&jZYAf{Gj$5)xFD zBuWhPkIINhhtQ>Dk>=Yj9jgmImir~y??r|5Ot#$V4ILi)<7b04(0sRD5T^_b3~p|2 z@-{2May$->lyFcNhY{1TY@Z)%JT95GlGDu3#81_S`dRpp9wRr^Ge=%z{_!psJgkSB zFl2UYhuypz@o3h+*KJA?h`wyD+(*8mMh>_*IvN@q^WCk>y?g)#^k7g4JrAcS-lb3i zW8>p*bEW?~XXe55{GqL>OXe=+m-hRC#(|bew|%9<$LHPsuR>Bv%9G8hCe_>1f2GF+ zNzbY`i6t%P&L1;P15%>2mHcho@24H-aTOhC8CBQV8!>~13~Z^J|H^!Ds`zmQ(zaB#5OR0mjc3H_ZobW~MUeM2Ntf1^Z^fx}f6LM*;02tJj_WWkS~cYxh}R zhbn$cM^Moy_&WSv#QAUz1UkIpia}{{n56DQB7Z3&o&m@KU!jZId8`bE{xRIz+t7Ca z;<(pfGMV^9gerscqGNT(2mWT_=QSOit7oV90mlo`6D4ob647%vK_IGUN=K@OfX53F zzQ%;w8*z^9c-*OA*pr{-!1ntDIYRSejnOkvUVu-+Oh#Spd(|m1WQBJ>=3_-KH6)2? zp$|#j1?;}u#O}B%pB40LY_;Fzc9B zs8uikP+^F=@J%w)!g0$77Nm(JV7E^5agGY2iaf13(Q^i+;>g|t7%nZ-gG?-PKP(G& z#HuMccvh~yJx@Wt8?T>6Hc9_VY~ht34t=5YPV9T2#`p7L@77&l>)!-`N#amwLd>l! z1?unLzoUkNu$1uOTl}!T?Mo0w_)NvUJ&FPeWas2S03;nBjp5sIy4VxC{9yT;sd!KV zHQU_(lg|1Njp(BbKFGyUNd@1o?z!AwkNdM%7em+aeTB|l!CvJW zOd6G|9(`&$axT6XJ@m+dkKds!n-p**%1T|@eV9oY60n85)N)yi+xdRS4N;#v6o7Oe!ts&g{*%l{G@WEJ3=@7|7iNgsLUGg?IzokZQGoT zY4T*-HYZKCZBMq{gvqwuoz3?=zxDq6RIAqMwAawv!f5@Tm2z6Os{_21c9PB4r`H;6!)$u4JUK_y_bFj&vnRsB?v440)TgVy ze=`R+&FfU??M-CcrQr~64xKeh1Yg$EO2(gV>CI18J9rs4w^1(Y!IsUBPh{VFUvodh zpve6)58rP7+#tx7LOAwNmn}|ZwhvVnasgyC!4iT$84-Olw4}#nC{%o6b_=cYYo&f^ z!5VqT`B0VoRX#}ymEa3P&&306^-WEdD2~!D~>dtb%RBT)T^ z3<>P&IF(+q5Dl<89OZJCe`%~-nU{&=@T5idv)?@}Lq0}JgU_X*$IUGA-E8`y+nc3l@KG^si0sD_|Y)O+n20^?eG#Ar+oZ1tLNaJnV02Nc5od;t>q&vHV*US4+ZjeXo4V=n@1!D5wudQUtSAu-W@NAUp# zbTbOeY@k42XLUfgHfH449elia@pENNher}?t`W0w23QxeejETBf)eQgF4Uv_>k`X^ z)eKAG342eue?*m-lP(Ay4Zru{d=`wksm%Nr;(iL$6)9bgO!2Eu!qrt-Q54T7w5~S{ zO9k8XEYtBOWp8*G0)pu)=(j9s@d30zlYzCH!8g_piis_EV=1VJo6Iy z^MDhb5Uo5{X((v3b92=4Sx>cP3sz^Rr$n|`!9e0UYtci#keZcs{zFV&mt(A_yU1Mc z7e+kh*KP6Xkq?Xp?H0SwH^N-TRvkN6*LxK_o0a+@t0ueE#*_3dzO3KcYl&g8pdEb~ z1Ij&V7ig%z1s{@Tza{#53b@*OR`}50CBbe3x zGTG5io#>GNJLTW=5YF=XP8+@7^?tviEZ!NHQTdDw3}m8Mw6(#Zb!QRnnwSmd0i{f*k+2DS?TJ zmHfBYf}HY?p*&7jR`Njc2SIVZM0BhJ6-^!irb?P`UmkGL9F)yg$Vmx5mqn#%7?}W= zEdjE+*4MnqiWgTH;A9O5*#QkqF>aZhq$rW#E5R&W6r;--KF%w=PV>z;gcu*Ip-5c_ z-0ep+GuD58?|9Ik05+4`{-fdb3L89G{)DqrXPSuIPVQAwC!O%Yo@R#ClzbN97X?5Z|!K;mQY>E-`?FA=l}@G@mEX$Fy;2P zPHGghUe-`_L}B}Gw9*d!aI{3krhu;*nlYr*@-Q-BBn1Idyr=yEuXn}1JiK<9}T zjm1YyQ>;7N&)6g%Yx_agF`=ZK-f=shA%hV5{aLnaH7NnN=OmF5VKdEaUJFwci9eyu zV*IY@l8GcSJdg`FT{MHo|G1es)f}tH0WX*-weqs;qN8#N8ArX(7HjQ~gP-T(B!+bf zBM~EZg{!QwkJZ0n6n)LRL&VAzrXBh;!>H%8QX8Hpwji0k7U?jG{3bShbZRX;%$=D1D({<#Bm$jMR&BFlw zVYRP(;WRzv>haUnLB~<`x*+y|&Mq=-W_R$wM&Ez9YD%mbU(UY*m%Km624-+%%0705$H%Gr1QlJ~Yt@o{=)Qp^D^x2{s;w)Nw zvtG_NPz0YJN)I-5Vr1q&mHb)!lE)U?s$F9VKKm}i8d+sHcSlCvq9WWuk!T3>Y$E=K2u`qY`NG?s9|?uxKq(`zzeH zJ2E3;IVVe2@iJ07u3?WKR^|Rt!ToCVLtJiow#BSw^|b&7OsOMEv{261bU!nf`TJzl znFS^|Hx5s?(^7d8%7Un)=>=1b)^_=wm5P(udWu3SlZSDJl6gGB!nyQe0VDfj_bYn1 zIA-JbQOw!k=YeMbHh~6`kTn_y-VI-=$7NruiQenvPApcFfd7wGvmLc)lP*-j!I(AT z^1B)<;5OHgi;Jo;s>fxv&1wgbhEa;`c|YYS(Ek3zYuq~?d%Ix()Ih9GPi)*xy~aCA zEADh&SyxVZe)auUYT_&;4>@`er@yGD)~f%Em@y^{ZjUS6(PKUA=(Wq&##Qt3Ek;tf ziN$*x;`!hAO~=7XEEm~uCIC7!bkRodKIO`{VH6XEC7Rvsa(<|gGDsx_7-Vk{zCiiW zMWQtwbg~1!L@gohS#nE<7YIP!Q0Rn+Sj&&g``q3Z-*U^%R7T6jb1`JxpFU_-K2H4I zyY6@U4=mg1Ft}|gDF5>nS<~}+2;g+?TrO20zWhF&{e%)IS$MM5^I4ew8$gr;`%C-# z`vMOY@-DkQL`JLF^(yH=D(bm!ex)py-*oc?j<=;{v z0`q`s;`aG1l+y*?S-Hk_VE9hE)lJQBcV_PJ=TD@mpYTX(h2*sKPNS3Y z#`@=m^WVIRLkK6*n#_9tEWBsSr;1t>O-qxTC3kh&dWbWqj4gbLEp@WEsP`?5^eU0% z(Sme4Ord7-H~-gr6rrkIs0jn)Va#6EgTW!mW?j1EEi41abE%K%U3MhMDEmGTA+iK) zRd)x3Ybru4*3SSr;w>ne2v~38i{pY4psY2#P-1&CCV0>2x z-1LG8b46I!f#j7ycp?Z?4koUcdBzShX6y@Lc2 zut8kj2Twmjv80B7J7x~?5ZEmzZQAE*sBE_UTBC65weZ~P2XI}{*@Dvj@%XMOfGY(_ zsr}RCm#O3^qi7Gqd5G9>R=-F;bL)^GWW&p5a~(bA7WU>8;{3fvapTdO7cS_Yt)tCb zMBgHVxJFPc=nR-tCXauaT;6Qu4_Zw}d%y1UVk8wguT0HIiDAj^PRp?j_rpYKagod< zIZ_2J7Ms0%sBl~*qnKgPjSGHU(_40(={q2CLPW##kh<~5XxtYc_3U+FGGyoQ}+2p}ssoK44yj)37t3zPyv~)E$n6 z&gWt^)dGaDi*)*n>21fxi+6apY%Ks7D~ziU$qTC)Qf}{eeVX+X<4(3=VH>#grB`SD zP~URIqg1M9XB-lupetZ=OZ^>aCz|+>Cy(Lqz26FEHo( z2<0uI?w8jde_JkLo*+dU%xd6Xw*EYoKO&H~|96nv_;YMrcCE)1l(cfoZNKSsFqUlY ztxo_JS~BcHd@nk=9!pyXl~(e#l~rqTyX;7)_$Z1(Bw;VrL!O(+Rp^>F%hug?wVu=Y zrGp24j>6I{&%^B`2|%zZqqp-Rfyd$(nj%LK_|p^_bgE1_^2#M0ua8_4v(oE1iqf@c zN*WA@qHGKkJ+-f$IN&{bumx#e%kCd{1;<%5w5|lSrc+`RP!koD+yxgg#z7U7stx^k zC#$xCuGmZ5D48D2>Q5CK$7w)sun0r;ls3^hOajU5HGcuqF{8~v$6EyrUCmsgu8acV zB6J{RKQ@}+la#TmW{&2L$I!~Erp%ETePvVuZ$tkJGR~ee2QrRn{jp|S9nK-gv5g5` zx%wwlA(dP4%qU(HROkS93gwTqML}9l(LxS>R(Gw`V;KOp=K5pNnz0rsGR9Qiqg#8b zdj$)@hIJsHVRf2SB1rOUdzM`gGFhTbvM-yI0v!TUal|SoGQ09Rx#{X#MW>z2rYU`m z_HM-c-b*aA>i1|f!K^rU z{*(UnA{E(RpwVdtm-CBQsOoYOqf)lwhUW*_V1VnTdh285lH}wu^Wj)mT@9g>I@bM@ z0?$r8hC;77vH!MX$I%b`2Xps*O{4LTy-ngsEXIh42rsWaAdaRNvWwsVv_Q8*)eXYg z?GdDDYKE|;AspUAsNeE(OI6ST&28Y0J9pdY{D} z&r1Smv61`YpKZi8LVfnhd9W3z}ge(OKR^KacgjV!6W=O=*Df~ zB|jcq)ByV)IJ>H0^STkUH6I$c<16@jlB@$bR9*MS{9AnIVJij_gc@?9`>!>`oM%-m z`_pvMAsY=_YaXh@>IKMhq_as6|M;&rQCzvTSRqxyn#y^@o76M?1^jR&ShB}}9Jv7Y zVQ8|UcEXT#u%qQC;P?EZ(1a6MUc8z%2+OMO_)^%Dk33)21YBH!j{KNO!BA_MFbj#+ za<-FM?Kq1qE9Qfg{E2QW^Yh|}e+oc*7>B8l&h94_>AyWZ4B6Wo!iMkvv)TLQ=wfn z*{9y>R{T`Chj=!rJ?5%>zsj*U$Q&>VHo!+uMfWurfOwv#xf}Z0cG=@NPoE1P-`-00 zdMD-oI994$@MAK&`Js{8~_#g<$By?NLpPQxp^3Hg{G=ZZMr=8X5M?LL+_c}=n80vO!s%JkDX0CV8 zt9L8K`~k5lS-W+tBVxTzrzFO$02X|YrvfNgK(y2XTQ-Dbve6F!EYIwgZCiuIsT_zwQ80$G*dpnH8iJqz)ES7GtLiLaM%Q0n0Hz?g3Zdco{OBedJ zt3N2h%2V(oy!Q##UF7;zJaB)iroS&p32*eQp8rGu7GnTll^>7SD19yk{OBHZE=T}E z3>okqoGZ!=7@KPj;x$}-T;h~7DR=*P8}F0yengO!>EzKJZyvmoqwK4Y&J0sZ-D*?l z`@0dj=6N;2fqg4fL9wlD)&v2fn9pc{SKeIn5U*t6IS&*4Q;w(PR`9YsP;5A!!kC?2 z^eMjH?pj%2uUxJw^n(4{aA9FVwzwYPl*NQUn1TMUS;ngBG)H}@_os`|;!iTiyezs( ze`QarD`+X^kndyz|1C}9@Zi?g|FxvMSkLX1FIJi&3~E(Hf8DA&ad90J=bnoI`SJNx z9nX5m)m@?!*;SR{HZn-v$_^Iq^84vU1n{^iq8{%9pS4jH>Y7b~)RYXkH61Q|8`1@RI&Z37l9KRn^4agW}14 z4a!EKZP`X(noILOQ~bi^28$&rLnF?qvP@KY+l;&4&b%%L4{NHL zq2cd2B)a2Nm3yGdKLg?H!XuUDK5tXmNEpDfTI4mprOjRHE>->s8z@i7Xipma1dRxa zRN{&0T9wn%ve$pK=N+o&U^t&7V`;&zm`V8Yxe>b>s1*`6=f^wd>v#D>)bkK7DV zNgyf4zZg=GrmrF$rbQB)9)3%$)Pr}8|Eg1uQq9k1?#9DZb07Dof~E6RxOvA>r7Y-~ zwnA(rn3A6W5Xgk>UHD+T#28SlW?leg3PcaUQ^RT%mq7sgsGhp) zenP&WMP^qVAefwv;55tS-DJG;C8LS4m}!gv&P)ueW5H%_tVm|LHf5-5(VK|plmK;Mi z=V`jW>(KvhN3^0Rils&m?@_yzhNN-`A#u|Y)f#M@%G|&K=7(A?7fh7l!i1L1r&pNh zYZVZ5I?2K^;?RW7ITZP_`OvyclueWd* z9*Ki9KFkmkJ_dE`5sEh>jo|{Q;G`5 z*_7mV`P2P|k+XE7sHNfwgvwZ~CuZe-5csBv3xS=0gQoZnSC)^*gN9x7;GyHew&Aq* z3%{w2kSg`3M9d_+{s!nb2hqO^4)`#~4Lo^Jd=nQAQe4K;q%>X9=39(ANGh?f1ncUm zkp)^l^eEeCHVd&cJ~${mUn%G15yyll$%dL-)@#zjD>eTg5kmS`gmOz?2Oef{07?s-yXAV_6S`CGOwTr7YbX_cy)I&&*(@?lF7PJxZGfM3F$m-x%S)9%%P2}e%m z(@Z9Hv{u6g{P(Ad-H7wt?oN;rfT2wp7yoyXaXmLm4?x*jAQP{Wl^k~pkXKNo{3Hm| zBn=%5nfQWUo+lgJ=mCdil`ho50~%nYzNaI%aSm&X*d5C%eCVw=ZOylHR^SBFZQB?N7i2uJ|laSA?pjW0zP~i!UoM@XY6UffAl5!bo)Kfsa5?;JPzY!l zgW=b5Jdk-kRD~d(3D7V~)L$b2j7GS4;2f?4i&(7>w5)-PXt3l*%{VoGg5|7c&U}k7 zL+%b=a_lO5%2Y2kvY(0&Mt_r&|1%;d{@Z*%#{L{q7U6b1##8$QcpWJT8GCha+1+(| zUy)eK7HO`b5<}rb`l$KzK@#Ru&eQI|ZZf_4e+$EyR@qMoyS)Jrz-7tz2{VAz325hx zjg865%YW#0n7IPP6XjRGVjpxB>3v_=lVlpSe9kb_<-X07653%l!m^2$$1RlF<08UC z0vK5Rn%q{mqqC3(;Gh7AtK;Al#6CxDGa`!+a}|T5KU+md&d;AYup{7Av({q&cs#Q= z^CJI-Z4B_U@VlLR0C0nk*seT31D4pFrX5E{~$!G`x zBB5}!>@bElIDH=iV)HH9UWcPzwYi)B*?4a&kIq_5|IiG{*cdI z%hGaic~fcr3tg6{*qfIqeDLF;V|9Ub0be(>+{E_4U)YxQ$`wfZfYG3!mw^(y7_Ro2)knVa=OVc+%` zC67%-;?t=p{eSJ#(+1knutp7TPe7NkVnrg}1J#5Ae&SAB zBE2^I*;Nfnn{>)rn!+kw%kql%|0(JFRW8n!oYz=ChG}EExh6IE`U0|Ofh6V@XMbDaFa}NIJ zAV#egQqlGHHKlob7;sVD!Q+oSzbdrvK#x@=HYU=H0i?e<#ov(h=wbZa^Uq3{8*lKF zpUa3baAq2La3sy-}ihx+8sp5uq-f zm8#=ScD#1$tti584q??1k&(=LK8Nm*U*fR91eqzmJqISS^bjO1AUhMt2PxBft*$5- zK$m!372n4LTw|2f)F_T)moY$(SJU3Vm6MPV6cya`yw56deQ0ngVBC)^ZyzaNldnPu zI+m*orcSvDgM^Ph4IA1v!tkBF6=l|KZ}hx93>i64nr;yy z$aA&7;!v$v{_|f!38HsY<*gz+NRdKnF(SXd{}Z#3>so=R?dC}L!l^|~NVVWBHb|t# z^0M_lRp&+Fo0d%fS+3njr4(zRet10O4y@!=hjEcbEYcrtX@5FY>7pSZz1R+s9RNoU z;m~Gm#qDIU*Z7q!a#3w63A|Kwf~RwOC}6F{+h#=Jw*5rwsb!+ z`(_)dyttH|x(%~z%qXQGYD2-&nk{vq9h=X~WQFC%?k%d^o_Nrw?@jran?4xJUWqUZ z6)kZJgIE|nW0683#kJP#;7W)GM{0_W>|aNg8>Qrl?@B-`V~Td*`n*P^$LQ z1+?U)-LCxM)ob*!0iS#y50I-5hN#{@e6t3hZr$;$VX;RD7f0@LU!DGy`E#IA*btg( z-32%1JzO;3fNFR9K60S{(%Qctnw_B;|HqXg4_4@$W&S;f*|=ilDKvyx4YCn`r^(Rt zFIu^@Ur5+N`?uVdd-(?#A;Wi{$5Wf>48uf2Vqm|B1trR{xxQB;vOKJ}IinB@A)=u8 zFNVnH3UvV($JfWptq%98l@;9P@42o3v=GonCI|lIgx}zbfvC~_h`!9yzsMk9C{d9K zt{*-cjxhTdk9gz#xR9$%N)(U`q<>6OqLqCSs(UvPyS;C~ez^b4QM*TqULPp*FWnZ?{(3d|apLI6N*Iy3xv~yLMhs@sC@pqICCmP4%W{`0QCYBdjA_+-^=dY9g-ZU5B8%JEEnQlIA+#T(=Dd)OTxuBq=*Mx z5+w^&$?_lRh3gfn)@)5ASdl?dx|iQl66uY9QOrrB$xKVON>h+||Cyj@UB51@8V&vj zD}cr(wBDIst*7`C2^@|%m&kBKsC3qhMblX2k64xxZ69!k8T|T*lugqx;ZE{0BCs7FGx&4in1<(^M^Ppuhu0noU*Z4`{5} z+~jcLqlig#1qe2L^A;#P$e3vP$J%}Mk|(N6Q>n@0QP&1AAj;ho%aNq8y)O+Ozo17B zL@`A*olK-CofL;JhRi^a`)=RhLV3z6Br0TX{!USV_l@(3Y1sKUeKUIF=5`&tpD6ud ze1PF*&GL*GPFUijhD4d`m!E@3<@?L0+UKx$pPhPDO-MJ5fxd}F?m6l^evVIn&Z_hN zoNJs9*2;+a1@P%>`AsF65K5jerTSer6NR37xbubs^5wm&iAfz{a5^q&LiQ2e}IDsh)oLHxi-ObM`ZN zD{E_hK0e9l`k7nur%UME|CZsJyjf}#`Y)M2F2^ zv~!V-z3*^{5wT`H?1T{csimdj%XmJeM<_)|(877YaCNOjh-=gzUG1}@P~`^nNC+9W zq{P{h=d#kqb9j#kJM{|IJ#$KGrWyOORhn%xH>~I=Dw3eW_OgGYN^G%Nar$_Bo}8Qn zJezRk3fSE@!W1i&97DO$vit*fE7jT=E?Ogddz23y3l1&`uh*jm5>}p4X^SQL)4Wke znZg2?B3-h*+^$+?&ita>x2uMC9KhsUfprpBCnqBooVvO?fM5{;0pV;40Bo1hMpk)~ zKbe#MQPVRb2;zuJ0|42AuDwguTeS)}`h*c$iAL=4;IC1ZUkSQ#z-kXWZ~DcuU5zA) z8wlD;Mm@!DWb74N1_x6FWLP|-@DP9`_}2`gkS$l&){wwb#B=o=!<-fv7&HThElS8F zs)fKN^~Q_Syh*0^>rwwo^2MJ0PY~7@Q8F9E{5V*3>)G+8FV>t*A$C$lYhq?!p@VK7 zTFSE#*ejLC2T;{s=7jr0Oeo#lDI&fEEaa9y_@09PY1N$ z-Q;c&9nNe{`!F1m8=Sd`^|F#MHfEL~7*bdzuDvJ!Fs3K0tc|MEH}$dlc~AYxZfzAW zRz&brR<}Ql48@+()Bi!T#VpG_Ui=}Q@CtaXQRzKe$z~0;2PdC4JMoSdYLY@`azU}Y0Ld- z)5}QGwy*ip&jl=5aVMGFb@pD{*ADuU8lp&X67LQu#FCBK>^Xo?Xza$!P3Ul2=BZ+} ze1N5m)S3Y!!b;vx}CRy?d@! zHFCtmhO^g15v3_zvDz}d+r7)Gi^WXV{ZA9RfQ{kO)kL!%7QY4h28co*KD-qih7u2_ z;b!-g(o_l;E@wGt6(cp(jTKj8^P_vmA^7lF=5^<(SL+f6`X%do@R+cZ!`h35wp;F{ zW!~v!+b&GtepN(-Yt2-wG`x+qLE%hU=P4_HOw9-pcSU9KQXczY6mr$8!N!y4Gg*Kt zm9hs+om*#%(`rQ>Rzv#V3ulLB?K=0vf~v%9L4uA9UU9Z=GsElQAOwI&W(|KCh~o`p zmP?}xP#BVrjkhlc&Ra15Q%~T2cC)bsw%8RW4Z zM7>RSwBPfzm{4?1eUq-1ReN-|nn0Vrj@&I-judlW$=^_I<`}MAjU{rU8A5KrOXve& z0o~_xisdlpg4MW zMYF+NzC<`Knr*ZVB-n|m4DiBCX=#(7|Maf*>6f7S;v%4T(m%<%|84yBJX`y2UPTx? zoX49D?k#m1$e5T4$~YuE-&`3PMyoY8Ke!(^_g0A=vXN&DTk|%vJ!w4Ov!i;CXo1DvWf7HrcJemzX&5J>eB|QB2y~ z_xOydigqU*O!%Bs4K*yO8^USGhyI$(n_S~C9Lm835-(7+4Fi$3kf8b5jAqVwfi{qa?S(apN;Z{`OIAdHN=m^=UQAUN%TAm)z zR*Y6{=jIE}3m+mUjjY$=DX-}nE+5X8J|XlWpRAH#l-T)|txB@coKJ;WSMcrq;L>1V z4Y+6ytg{@uyr{qk2Y$+?O&kKe18Xh$f%|%T-8G9{pu>y({(5H<D|Mrl#Y{G3& zE1^+hA13Bst!pdKi(rdz>GC8CO`#|WZ`m<3s3=XH@3_h!@)i0Qokc(#JSQ6Mqc`dNal3BRuI;jz zt@mL-E=ASW(WrLjj@7R>j!^%lEmcbDvGspg01SME!Pwl)p63aP!kYr^vyK2L0oK=2 zGbjGsw09s%XSTMgGX0ErdN=zlSYcL03v11B6Ur7zZ>Tf-x$*Cp!{vjdThB_*!SQV4 zZt#O-^NNZ5Xygju0fzn%5WR-4^t`@vs-z@aC*g_IEU#=h0-^Jk>qp*-%5s$sd^Vf! zL@OuE;qT$s7S39re3}`&1N~Ju`B~&5V3vtk(t3B*-oPA{o65W$@jCGVko(4DrkZi2 z4f=$1k$avZXwIo&vuqFy2|x_YlzSU=NJl-2Si7AqypS4PfHf*2aAtV#{lF7~Lb@AQP za5U#!jTD>&y&fXvf}T(pee5#jxJk0dVafD$9G?0wO_5fc#)M1hk{xqdT4r#6-iud} zD!=mmu2Q0!Y3nnq*Qx}M0G+YUexNOslCh7MR!A?n(X5Z!IkN&Y%H`fjBVCX?tn&)J zsf3C#r);)rnTt!|#7cs&ogX|9>>G+P@w$!doO*ofwL@?iyyP^O`*lMcas9H~;#W-I z6t1-#^BAmsg5zrDM_h>lV%~4c=h6qkp@L-6+ej;&MCcZB2G6iCMq3kb;n=zNpQHdC z1ibXfZ2Qgm7^ZyavD%qCz|wUh6B0WZ*IA_GNbe^9ad>k?Hj`MN3m;ODpKrK37(P{1 zuBfig?IA2m0dCn<9d>ejbK)=G>aoJP;cp{paZ63bu%elhg|V|i&yU(s{=b{?wE0NGJOuKZnk)8->;u3140wE=uE20l2XL|pu(>X6a|=vq82a+! z6SLoYQro$jR~R@DVehhA9At_0W5h|?`q$hq^r!yG6KbO7T*iY{~DD5 zVbo^!`2jJ7ciTpc$7Q!!fZ-Yw>A0H7|Az>R($Y)>9c4#Y%N2H`Lcgth|rX1^x+iiY3F(CyRg*i8F9=~g-SDUImHW( zA0m^Y-Rm}WPf)z-^72vPj|s91d{uob(R#eJtd>!^diJVgoGyHITYtz+>{U7dZb{iVTsximtcy`#P%+S~Klw+Z zvyrXhwWGm`ds+J2pUUO(l*rh!p8nej4*(oem8K5E*HKEqSudIXmz7lG16c_Vkd;uc z_A@4?fHE!!_h)8ChB1Jwu$x?cRgrav=-k??Hcu4UzsJ8Arr8q26a|Kr%g zAoIszQPwe#n@4A6j~gQ-EC2i!{8*h>S#{(SyGc6x?{J0ldCL9;U;~7pe)VV2 zX`PN0&wWO9pt*(0)1SKW12Gjy|ZwcnF5 z`$mA*2k1L@cXz3>#VY=aQ+Rz>`B4yek0LFHfSdkpkUSaO=gaWpK6-Jhg4?52kUChU z-2s|NtTdC-X4mZY*X#;F4mzWj8vNiv1`cBC5R%)W`{;IzaW zWPu2;oo2bKs52Wp?I+!{(sIdHT+V0Lr{77S35h^U?=FrUVeH@wj=~)Iy39p?~)^={A z`PN=vnUi>ykWyi}6qT||%R`RPQ@U*aPD4oSr7J4!;1U->>i47sp_Q)6 zXuU6XuJo}t%f3$Krxy#*DE>>_Ejd>0O8~t#{$(S2*wc4n-S?>w;-Bz8+!54!(GWZn z9`$%@5-OnxlmIr-ao&jAt5QYS`Wx>s{Ng|zn6 zA8NQ;*C?0xITVhrY+UbG=B~FX*C<{dm zqagerc6$GO>0{wN(bF{?A7z7pe_jCgCdk5w-t-jsO>6u!LOy4ex!qk`%(=4Z?FULn zQue;Z$`&3QzP9%p8U%;;KQ4iT6LsI*F0~3vd(Jk$NlAc)H_h;e-47pPOrY>3 zJGl;2sli9PTo1adceidZ=Nbh>t@ZhT-XpxLf|zp@M^udh?)svs+=-6_$75l=hX9lQl-Jkx z@2tw#7s>gRWwUJz=R5^1IFH5d!WRf6Be?6>jj8&ZS$-BwYNB+ zaGMK~HDF7?lY{5Mlb@c;$5WX%RcSc@f5fUkc7~PXajyc9V{eCLTr{hIMqw6-62mc- z^WOk#zWk=P5kdZLwexZRmw`ByoPTnD%SP!xEo(BaO}k`%ySx9pqzeB-LE9eaQ|J`% zwZDqxNqrZY+P)z-YrqX9+nrDqoEEU^>Tp?onH=8KvrN@t#uQ}x!hUn;jw0;;Dg1sj zYInwY8Xel4qc)~W)_u35Fu_C=^QuOKc1_7vxBK5q7(7B)zb*v60N;wKj{47azFh>! z=3CkuSgW=V^H%}V_|J+re1R&A1MeNs8~AcrhPch1&Et!+dh=&(-F2?!o&0+eR-AvQ z3zeUPHPf(u^vDD}S0|;pLifyM@xW<1J&&Cb0ImR#vH_IH1OgroV@b3?mO{|35Y*@J zaJ~X?T&%9Gb+on$G-2%mLpKyr^~|f?Q1=D8Y{@Ef_i)0reSduq8Z0_jE%H)r(L#)B z|E<{#()qI}U!RZ_n-eSS&7OtgC0tYGCXJ%{w0~Rg9U`Ti6-j)^+M?#D-2$KAil?nO ze&^WL6=EE0~yymWHa&LS%ah1&fW;mVcL2v@XC-llzVw&@DeilpD zu@U4lH$Q6G^23k)D{OrQG{J+0j5Gl%6aLFib_dAl;rS#xOb5A^YIhzsT75q!eKOUP zMrh#Iwot#jbm>y47s}uy_x%zttoEIK8VK=Ewi$4@(GpF?@eOUpC_O`-n$Y|C?BY-ec$D5$DQlR1 zE-*!t4V5fDa+R5vB`p1McM#5xm#oL2_|OPf=W!R_^{F)0=oDUZFH%$4@;;Nw4CnpT zDx~_qFH_%7)R|kjuQ=&^%@cop8`5o?cDP-`ik6)+|87c_99G(T^`L-P{Qqb=%dj|_ zU<)rEB)Ge~LvRlc!QCB#yF0<%-GaMAaJS&@4#C|uck*V> zY{`l31=$>|Inp}&Ni8LR^K0FBxY&Bvl|Da#caiMRyTMHSF%b z+EX|8J>sl@co|dVWji>7S|J(0%{Tfyl zBA+KWV=vznw(Qi>8UAE$@xR?|*u6~n%E3(KaRQqAiPGu7eEkBrwqKiEXn9MHB#uzX zd#<&dNP0nNQ~cYNT^ySP--pZveVw|u&Xz2lqg&QqvUPl8ODoc4THFMh{?#!}8u0B6c z^7eg85id*qlmwi<_)s1+kQ zPqka^xAHVs1Pmo-zd>Ng+{3*3o{d-6~p;^j+)1NwW*l&hAyK zC#4+YnD>0|D`&=~13N8$yI7cL{)L`xw_}}R!R({ML7!f$c-h~pzt!a!p6QYs zGdJr$qQF8|qDPCu*J0!==-fb}BY7>2tKI z$WGDsdK_M4ha(DNYctYbW|Knh@A4~;#D7UjD|3$}heQo7Zj0|5QZgz*d#jJLsQfeg zdueLJPmMw>ag^Nhg(Qqx%%TWKuau#ti(l(60eo-jF+IbszJ8}#1*f0Ofv|tc*rW@* z-gEgW3XIfeY_nU_U zrv%yx)Q-Pc@~1L5*cW?WU-JWu;~efU>+o!d=bNSIGsZeS^RvCN84FP-vdbNUWkA@scmzer3QZYS+P3h4$n2_E8nCO3iq?o}+go zJyZlwig#s`9gHOcXI`J1mD$s%?C8Ln&F;AxK`&kkx6EpRw!-)P+eSQ&{HlV9sioJ0 z=bGDPkzf^7zlH^>v?jlE-fwPes*d-`FsUN%q%}Ssk9SKF%y3?E?Lw4__1a#s-HviJ z>Og4tAkL94z23eXrb3hFd77VQn6>{x3-FCYSz&Of#=DVQFq(BFJM>$H0rl zpM2dA>_QvKsL$5 zsPu_2U0msR-ej(}D4u-J_b=1l{Jb#bqMy$1#R`!Z;4EOFPy?9P1gtd5oJnzN)GT2n z+aOde7w~ez=E`$59S9Ltg#%>CXicXVju9eMAU9|*V*%*_+QOKjylCh!MHSw9ouA&A zuvUE7TzqQgF5I|5v}nRD(0C_KZVCQ%;6v2dcrcfg;O4x+d1^unGTYWIJ_A7kqWR-$ zGKL1Eq75a#2Ndiy@WpG`5N7aX{S9xViV_c$=$ZxXO8A$RLpE^3rBz0&mOnZeI6skh zh~LXT|9I!cuC;tMp;e@5Ns%v~mnOG|tdwI*^6ry5QiqO-|Or?g-x|ZW2DY7pFp ziinQ`WJ5gC15R3ba9M$APy-Pye2jLj-DApD8-JqNU`D|0XcFcte&rU_(&7e$2n`>} zlH|3fQh=^a8msB=TE;quy&(qeX5x4$N|gCdfKs9_q>xGyLCZd7b( zMWVz8U(|@c@qtw|k;YU1Sh*X&dB>$FOE6Ty--oN#{>J1Ry^f>o~APZr67o%Gol5wfrFK2@JpmJJ4~ zlx)$GdfcnOMD`myYmGeQt)lFsj{FXE5pcKTOH&V^GHjwf(oL*b^IDm1HtFthYj7Z? zX8+mun6zc)G&OJ(x7rnsXB~i4u3|+wv9aoQ}Aw_;ocNPY0 z(O-6$u4wvL6i&`&;kl=%-K53tR**y6+Ed{1`uUcZm&nO>b2|s0D=j|$`n+Wekp%!5 zCCMG#+(K3N@cjj`gJ96FD!e&6HRm9^0tjMbW4i%69HI;|omR&Kx|$Bwr>8UYz9DZ^ zP!HpyspYOWNXXRmK!V8UZeA{;;gF+c%htC0eclgd?*z_^lLr+rr5tf9_r27dn2*lA z_u(RQZP6(7EZ*(Q@A1OW0LKM^YSBaVNWejrZ6@yYxF=tPN#lXyeNAa87hsN>!k`Vk zn4s04EG!OaIR}*bZFs-DW}Ze?MvEb-NQ?huF(bRj{orcI=%yLpqe%+iXY%DtaWEgJMBVdwbIXwgul#Z#Knd0yOx9(~3v3Mhj@ zg{n~!+IKRB=lQYkIt5i-A0P&cOJ4;?dXu?_Y&Xz?uC5ii96w5{pOdJLVx@~*l>p=d)i<@-K_7;COR>cFrYy`1)#DX zp3fi<_P;-B<$yX%Wdoo}emai`+HTc8>r;|g4DbT^|A%i8Cc%bKKwHmhfkv#o@K*aF zK|KkUi!_}7`!cgLKvaR8aI5&od-tcmgFv8h*4jx#M8XrN$Mn!T5jf*^2D}}{KL*Wo z)*Un&c3;h5z(8heA|A{r^^*Ya5aN2)OAHn=TH=C;fZ+KB8sZ_zu*J+~9PHmK04hs_ zy0|t?NC^TpW3?zD{s#p8`){(%@ygidz7<-vKAK6hTZNdF4MBjRK$R9YpRh@s7PgW= z=r|&HMGGuc?Ubc47zkFu%;02EKonF6WNG+T z32<$x{sBHv$s*?21dt#Nm>duY_?f-LGE&B`GxMtn|9ukd3{)){KR>_to)h}hr;khn zc3ge$Yq3)@mK{xq6=9J7(BiUxu;v1(yYTn4c(ZIod|AYJ;N!N-xY7dP@S=WL8JqGi zWh|@|$5f)p1o0B7cz|7~YWy2c@9J+OPgqa399b&MJfh4_cdc@eXRSSztb_JZ?DR1v z|6SGLEeN!@B76nEZ2Rxu)FvFAn!rUW>u~Qzy!e_Sm^ct z^55K;Z_Y;2Sxv;m+kwmty{=h8D%;n>q{tG3CE{`ibiIRjkJ;X!dkmQW$>Ps<+xxHQ z5kwo@mE z4K+xAZ_bF}V6&*@cOBa`WpV)vi%(hCST{_1zZvSO`BRwyqS7z z7oLmT$A&jF;1&qJ92JldG9s{sYuQ#5%zyQ5hK48}Xl#~-H7gv2;^+6HvF&++uhS1zLS@zO!GkJykKVS&6}=T#NrI z!|UkI8Cst#PamZ?wPpjd2itmqg_6atw5Yl7EeExZ8=n&l0>b-A>L&puCQnCL& z*1-R>S=fmOEx)(V^3s-18H)@Uh+cZ2N4Qh(ug(}8sMfGQ1n_k*sJmJchEaKUx{MN{ z5^-w`B;wl6N4IC_xzX9003SCqaE0s&`deO6!IqhuxbU>_bk&apBcCUG*O!$o1@GiR zI%Ltt3)=2{-1J(^S?muUMG)}FYr1&T6q@4)fs|3NhAEYUvU5MQCc*;uKZSeTC`7#H z(r5wI=Z~koSU|5BCgxXbYc`)pLjO)r#4tE047>Kls(%w70mJ+ja$_SGp9319|knS01 zL19{A+ggJaCmG-($>8Tq!Q+kFM_Q7`fx?C2nO!9z0g36__h}8cNsu1<_D_(Hcpg;?J}S~=}%dFl4o#Y@NX<)?p~|C_uaxv)jh z`gK`XJ|RS5P=l_x<}3)%j-fkTo#!GHtm#?Z87;#%y@d3Ehal|;G$t-cxe%JDkS6%Y zuBzI^f3tIftDGY=jzG&=$A&0WN2X(?vG~W=4kofeOG1JxHswvXwbZdWeIloB%ud5N z{`1)fTvK538Yk{vo_I&b+(bK9uPJY2HHjuWL%3K(c>zFI+@b2BB`L>9nuuNf2X^ZA z%+@LwYpNM)o1t&0qViXip+~l{^}Cs;z!G{3%~i>f;w%t6-@Ngf)mQ8JD@fCOe=J`R z{lUS7x8ag)DA`|%!ujuFt0tW99U5*O+()#&O~ksmx?vOZgRlP-7mjQnRWTYx$7_}^ zZ8G#aj3-7Mj#-56QVGijG+WIqb6FUp#0AY zv*lX{xK#yR0Xv{bT@JR3w~La3%q66BJ`#*J2Q5jCs@T+1+!CSL$^|~~pxDa7NT`r( z1Eh|YXA}nFL`jn5#&C&&dYGzBezdpT6s6)P2$QoT1>g-}vxEIC6r5)M11Pl^4UUyC z%1u2X=VEAcWv=^Rtn>msoRCWJ06v6M6b?ZS9a)_PZ=UpJ&52fGgk(8$9MFnbB31r?$SK64DQgsKF3X7AQs%@mO|0mKlBZ_*YZtU zuxHD;xw&oqaxgX&&d1Cb1!pHz=nxVSvCj~snL#T235E$mMt#L^V%89-S`c|yPC6_N zhAkiw&yQ1W3N`_CK7st3P8SiEvhjNL!3A=O@bKCJvQvNdS53|3a-A{YC(UL)>8++w zQc+RS*ys#AT&IgwyuNQ-xl{U$7Bk4|m$}~s{+%)fp)3$Aoz?R07IKX*U|U$&u=OWLwjWcc z4~o9J+UfuN`E!3~4ayr@{?cg`mTQ4RY0zIcW`;FNbNp0mvfLd-!o?dL{L70SBphIj zl|-8Vg2IRL>MLwGntrDv+Yl(pj(^T$A(mNV>zScKuaCUqlC`HMKmSBdx~aD6L^Y@} z%xOI9jXfC`w0B}kgbk4`SGYZtB-|1rMF$$FxEK*)6c1+c z=-8g!{LPFvElWjMUI=%HXh>YJ|}DAs~-09Gyk#KlZA~X~{RUkHK)_VyfrE z&}+a@Lx)YGkXi)z?Ti|myklr!Nfb$B)|h6K4`9+$UFG(d5k~L_4R&tQ)zNIK1QTzA zN+05i&N0sRF%VSG3zkt5Zb_Ix!6JX;YL6Kzc)){#brOEb3i6gvAtK^FC#^r|9@BvQ z*=VL;wt&3@8(~Tl69B%|YVkK!mM}u)pv(HcRw2Jv^0qa=xWYdK>-TKV383c55fWqP27(AlCrY0 z9vpm0Xrhl|@f5c`43JE8O!{LP*J_U5+0v#vkOn74k%un7Q$RB;6S}td4 zasT`HCv+k!wb0>TdsWW7V~IOGKjvwIBal7?fMZd!vvR8Xh6f5GZ2!iQH&+m-Te>x49Y8 z59eu6W_6xyH5mznfhw#Qm%c)BA$)6CPN!@PTS{ z3hV)GFbDH*KnqlLp-Jo$B=R){W6tV#;BDuv^s%{U z#K6!CumyO}g&1}lvB3la<;41ewhV4;dP+C%lN2(U8>+&4SJ)_M<-5|j&XUEb%*+}! zi+!UaH)N~V_AyF&T9O3V4#NDziudw1O*XaI+t{l!+j9y<$uIDcYV#Aa6S3!(e|}Dn zM9mhSUsh9RB{3eM95;o84demZn*cFYGlvV*Ab|eQ;>!|&I8EL{Mqv|*Hf zR|ZJqadx*_?9M7tsYACUnjcD5_&Dr#Onix_>D`#X$461;VX&I}%P>+YdGdWvlb)EH z$`W9757?Z@eH@cT@UV}YPWMkvpn^X^DgpfQwezaIeQ%QKf$gTOD{ro?eEPk}!p~Hy z;i6zS4kvpqYr~1OiBPP=7{9&;fCSqpQIE||u81o~XH5n?Ut-WIEHTjy9W1~k&dx4s z9~N5Y)YRNzT3uSMso8huF)(D@zRCO!zwjIvHlE>5E@&py)nYb8sA&hPCF0R=D_)l0 z4%WS!l*rKNI)gNrx*Iyo6k)?f&dgtb0|UMo1s`^IV!M-2HgFO=SaD)jggM~SWUoN2 z;;A_sVmAS` z7%yn8w}4l{Nib8=4bF;Ez7E9_w7BQF zub+#H4GDNS`VBc_P7K~hlfmyB)|6Pb_H2okl5tPNw||3MBH=7>(fiQwUPaNmr|jix z_L?(iMQe5dFblyd2TM%n@Da7{2)Sg=u1*@SCmm&Ubl!oQXN!7p+3cp8&o>)$iB3NO zAlm|gr-ju80C3mqWW?or_5Os5G z`6rHg02V$1fSP%mh^yPvBSlH(WD;HR^%dE;}_RP&6&?J?J{}HeO%m)6x5xN0z|QSc^`w94o#CNU0Upc0LfB#eKL`5 ztk@jhYY;b?k!#3psqBknLqTU2A*L{N9ivFV(F*5Lg{kqFwrB1LcO=_vn*A2i< zT(dI|J9PMlTckL1ZxzC+q^k1jv&*IJvANgE4L_TbV*!u}oW@p}{H3_Isi~-O+t647 zdCA{U?P%L2T^1jXt`|^weo3EOTbd?IalPyl!{|EpIGNE}%u4;crQ!f~ZRspGQww=% zVO;oU9FA!?@0PYIA9v6c$}#&(t@~g8k|njtv8Bg`jVYJQx(Sz>O8|DtLE;beC$Wk? zX&}l~!X-B|ki8kr<|_djm1@vq8IEj^#fXs$;Ee!rOI03z?GdlO2Vk91nP6g0A1Cb^ zn8<8>o)}C_Nnzd~;5z5~$IB~E1Tvr*D}Ci5a4b2|2l#Zb5W?%6Q4(;9#JJsdRjfvp;)116$^cPAg2R7BBfLsw1v3%OItsvs6By zH?Lr?GlH%ls9#6S2hLyU35t1GUM?!)QH92Zr*m{AnZsAw$lGWhAejxwR4NvL{!2et zC-EzDBcS_j(X)xU+xudjTi`>Mo{%iHd{jlmR%)O$O2}Nj4fybWV^k%d+cDDjpsZkU zDDYqeIH#(tB<6DJWdjzp>`%S0gptiyW~$B}_0!g%# zSR78lLC*2uHIiO57H-v<2F^pE=gWb200g@`>z#T*_l*vTlawA3#@m42YNokwfW?=x zL8@$ijYYC(5BT!;QuaWVO3H-VV{Q^|Q z&mZ-TH}>fYMT)1LfoWq8$@^*&n*L&>D%`EJe>#%XxxU04%N;hDn&A4Ltruose9sTR z$Z}=D3?)oL#wrVxx`m8S5WEs4;F=Z&FD+R#P2$&S8)Yy|r zIC%BL6Eg5oSE;b{leV^rDd-Fv{9hxc|OS+t$4Gq6#=va_$pYIO+xa4ZB zG%~AR@fS{$3_$r{A}FiMN}aNIp8q{VxS12_CY#k&OiIrvNz2U3vQdt;U$e?-tRie} zu8ag1{F_#O)5B49rqG#CyL1T`I0&9jb}_rU#)uas!W|HPFs^OtsdeU!Ook7gqcf-7 z4XzbWY-kXqY;Ua$kR*KCJN#qA^^3TZU9*o(sSFV~JvVo@7n*1lYlZauEJX>=2f8&T zE2NllzB$JK4j0SquF5k|stjTao=Q404b~x7 z2jxFvQgiS+Hb>WIVw5ai^a$su)m+0~LJJ2XMk&YFEo;ypXUM?3JTn}=Oi?%*sOJt( zR4WW6Z*y9uz{YoU{yq|TE=B_t0F?1ptP#T>H2|jA$@+&#xguTT#Yc?HiL_&R0Si}S zT8+JdQgO``ZFYLkjmyzFIvUN>&tr$VMKiHt_xr|hV6{@xo8H|JD}W1v!Y`Y#K#VY~ z;!;Ra#VJd$N_LE{Kr+6*__+={0|_TLki5nnPgOGsFw^@ue_RvK@rF{A*JCApx@T|- zm`3{%+@rnM^wBH(+frkdpK|LM=}4%Aj9C?QM`y0{Q|8 z>v{R6Y`;?*a}t1Gi4m7xK0cjG#XVA-$vC{8kc5~h$mEM=tms1iNo(KmFJQQ=aL z3)s=lm=wVJe?QBI`&BIo!^)u9l{W6Vq2PtrDe9?es8|l?AIv4yQMgI7cvo zrd}AEnR`ai2h84U6KmgZca;;|GvB+`5m`{fqb9Djn`@k9rE23!rca}McP8l&lT1~` z0bVLtWwX(EhUHd2=NKEc_`QlNO$fAjkSWHg9cO&jI_GKiT+iYo z$6Xl4;P&FG_OjUog6AAC;PAq@5W{L?ItUyGQQN8q4p}Em}&Y7@-fu^zV;A^J5jOSpbax1%g-@c)J+^$R%x7)m% zsEMKCM!uhnqb05~jk9%oj^kzKs5}F_K*~i{v(;$kyO#*D;s};rrknd~y1+%E$Sn~0 zxBIky^hOu^0vZC7Gb2;X!^}W4@1Uak;<`1FY z0e*|j^j4mkqQh;_WB|_wEDp+M?}a&{01M_uM|xsP(uL;7-!ok|17+1U!4)rdsl*uP z%g#r=GN4d4a_YcWmkAIrkt6ok{ zUk@JDb2I0hrhFznhq$Ml6vUM*_Enj%&h=dFkG=;2+H%~m)gy994z)~YE2a%UZKaZ*?u$9GiPEAuqZwbXTKA-@JvkR z`Tq6>#M@1JGm%wged7~F40ZLUCTj(M2%NZeP3jIddF{F%&I>y%%A95LbFH{J#KpnM zItm}$W%PDd70*~c3MKdItW)e#YG{obZXvP4;?gII-^_ZzJH%o^N@V+P?c(_ zdAnIVmtdXcoK2rF&gQ0_sE0rK{x$EYjZ$k!2q;5m~jE3uZ6)ReP zKYlkcq93{qB-_o>@dd1w)ad)@uly!D|l9+jNZ-Rkp-};aR%Vui5&c2)892PNF z`_}S0Q(Mlt>Has|evMSC%XP`C+kSbaej|L4*x%hwI@Z}~5h@ z0E(E&UXiYh+#sllnq_5sqpiblUmTHuHf7O`g5tH*0}1JD@2ZLO&oSM!f>C8<6*--J zhKC6y)+Na5-AZq>5&a4&14X<}0^Htp7mA5dQ4@$K7f0=$4>3`V4s1@>E!_3DNl_|G z`{>p3K87>CIDpev-@gIXbV8S=(rkA5ct)xb_^6T-4=H|;9;QeYXeA+=Ac%S^(A`?4 zeQYW%YxtczwqAF|5O!|$h|%43Eb7*tbsl`GRFmC)`>Ok#fPs7}p07BW^CT{gt9c?m z3GeQbopmnz)x0Q+dm_w-!sJ$i%Sg8r#B zmoSA%vyD<~RLqb`b!0`(SV65r<(Jc_uVw@R0<>~n$#$puB>U3ul^iupRiEyQP&?n` zc*YM7@kLK6{X}h&raP$H)PXZSPst%y*5t;Qq`M3#4I=i}R zX=_*5qJ1pwZubU>iHXg9n3$Ub-W6Sd4<)zi^2*BSfn)CdX_a;hpaoR?J~}vf@NmB7 zQo5%Ey$+@9AVs5g@2{a0Fp1m^{ktmJJ;+3+!)_UN9w zPczEBeq{L6US>p@)Y2S}y~S9!Q_IK)4;tPq!T8<1L~qKqZWE{1#-K+HemUgZE7dg@5+eDZu zB)_D{>*kynaNUQ&M8_hbyne*YL-)JjF;-xKH>>%~)3#@IJ-4oYo8m>}zH`2Eir$J5 z&O|Q`*FwRhiXY+}VcHINp?hrYNowA%UwJRIHL_v1e^XdjRov9RX%4dw_a#$8hVho~ zZJk0>M41mPwS{E=oqtOt999|2W9zNF{v&=}bq~i(fQ8%R)VnBZp7XFBGSmAmLub&S zRFO61iE!0bF{J`EwEvIIrw{wB`z}V0wcSX5-&Q^4_sln$Z1AWugxLi)$JE$nlqJE% zmnTB*wePaCZx{g*&HDI6$siE3hV15Q-V~zG)&eb7M}ebm`NbFY4|1%%^A3dhrnFRn z1Ue{iT~~{Y{`U6j9&3HHr^%R_{KhbDEAT18*SbzcTRP+-ZuTYDzpgTjL)vXezo;}e zyBH7gBEQ|=adNx8m}@>r^MPRzn!D}X>gSKA_QrDvZd4zi#7$*q3g&Y89Rs?|L@lC% zv4uN3AL@vyQbjjX<^~1|nwnC?Y&fXd>VY`tjil>Up_8Rj<+#E16Ra z=H=!6CM)ad5h|9ij^pp0tM z!nj`Tm_7ua*pu_z{58M1NGNx%Lt7YC3m3)vekgWHUp*lZ5WX(YiHSEW zP5*=V)dlx-F68bIs}l;S>(cp{PVh>e&J8LrRrppV$LG@s0G3`VG*5r^+_|*nCCOXl zI(`B|3k4WW;$3dz@W!F`gLt znw2RP!I=_DniT;=tQf{xvp_FQiWcwTuh@hl^&>rTtsp6s#<~RYbI(tP2&B3BkU?TL z>;f(}_2xZ$4U-46dF-@4R|+SfTXJlj;bt{0i3F-SQCvd2lNzfm*PlZZ@vNR&lgLzk$(l zA`oSckfn$~S?Nx8B?YpW63m#Yc=58>Xj9?ma892W!XZg*y{(64VvKl``B#BoTJ;K1r17u?PDbrU9z2Pw zTU&laS)n;eO!O^{_4Eu3P#{rp@f>a^vj=W0)hAvS9-fS>tf&Zo(IO>4ZA=h=`hX0Y zr>Ey+S2I9#TCe|d_`}-${*W0RJ<%vQai*gp9Q+qh?FxGoa6@cWMwW6P@qhpkqh1?_ zHEA8EL<|~*hP=9U$<&^mnjv7Q{$&>C#pg_o$ z-2@Nple^#8ypIsmn<^fOl82W^_m-TrTGFWGQ)eMd{i;)>2~@#;)0OwsCZyI86ak|! zjsGrsjl7PH8VvFXDemyV&HKSa8_g9}`gwt)NC-9yo#(p=GUlwO=jrO&iMc+Wbcqm6 z2yTWreet66-$(QaqS#%8U~zn5ZyL0kN`XgWV!RU2j8?4uwHQ&$$=JWp?VnTtYy&Z*1fb@TG{CERoA*Wn)8&90bg{afpa6kB&6DeRq>d7XP0G;I9uscG?Ya z{-fR=n1bF9-_`a}j*WTIR7$6 zWiMMQ{qd9NLNX8R&o@8k5}|jV>8+Xd8~cz|vrU>mwmwSC$oUK{5%9#I?dhd8U5Imk zxW96x_&;b%uTqU|acut{Dn2`X{vDBT&1Kp^Ux z> zOc;nmZKm7dmHv$*(%^%*Da;&PC+Rmjub&Kl?>e74NuL`)^A+(JU;>FdgFyc2ok0fD z-Fcp$2OogHfbh1Tfctlvcc{QaphHKwdmvUHt--D94kxub&8b zU7wzxTie=beF~bI?wbKF({76qvp`;+Nuzc<2uT1N5AXGEPJV55H7Y6!92{K5K|=LO zU&PBw(6U4*J!J@e$+AfMWMBX?I7*=J@0`5gdpJk=m45Vhwr1Ru)u&%nzdyuBp9><$ zEFU%jG*gsbxD5gfM2)J7m(D*(SjFWZ4-BK}71ASZt5Q$~@4p)WIxfz*`SaZ$^&|wt zDl>5cOBRJ|FbGa$bz5jF%kt|nI`tQ{*v!!jB+$#AViu0#+w8x=i}=6CxL7%FImU8a zrwNo45@_@~t_4aDMyv}f|K^&F4lZ3}%C>MwRr&X6EEOiiGj6Kl)VIs|{#U3n`>e2r zrY5%+Onz?e7642aR?hEpVF%#NI<@m*bA4Il#mGLIZN=;Goc zjkY1o{Kr6&3)wUf4;zB$FC#%BI4PneB`6wXG;aUVb`?!ch~dLqUR;#_XFM`zl7+OJ zekC!sYt{2_m-jb90)pt6n4F!34B4|i#P2?_?Bjur43>`lSV7X-+N!E9z|spS-s-kF z!%`r5-;7cLnZxj?sQugL#l^)lm?a!E|EoK8%HYavXU@pT=%@XwJEqz9I7$iAQZua=AVRSTa1*Ih z{>EOQAL&aZN5!SPMYL+?qBk2f9=Jx#T=s5QCI=}%VW=p81)d1}0FN78GbN5g5BwfS z4Hx)p7M`M1=9IiX&;s7{F1z`Py@{qPrg9mZ^t+maAThA{lS>uT&WDVX3*sSvf@_LL zxBA*CLlZ_G+)}U_GWgzUEwNDibSZj+zf!&YBsl8&7L^^AOSYzHC$SKsJOu2|S~E`ewG(`;=DOmCChTpiB1ynY^AE;L8`x9p&Wl(P)#bh(<;!BM=1W_ zX3{K`Q?Wn@U|ynt|FRnHlLz&@UlC~@zkh$abg0q|=f~#Gms3&#oUwTIeeM^svhb-p z09`k3U_l*E{WLK#0fcUJw6tb>1WAT~k+_eK4-(N&`N4lq;cabgX=!WgGm>`_aQ?#ztdNtinRXBC+vQVV`P$4fA+Hna8`CSBZAAOFcKv$U-QM0_ zK7lRjE-h}46P19PftqTt&`BkEz@ij*BGm&ygI5#vPAy| z2ThmKQ)WYe+@GE}BJ+_E4dp^PT!F$?rjhFQ3Fru9fC^#`kH7N|aaCA=(W3N62MIyw z@NbhtHlz1|gG7Iblkv7SHMu;Tr&C}fK%b0mAKg`B{cKwqCh|jwCrAB0^HZ#pwYaz# z3=FI^RH-a!!VC`=w_3B|&uWtuz{AopF{SduG}Hp;zQzSjI{s@7gdPK-kS`Y|q}Lkw zI|bys<}?FnumkLL_z5x}o*KN--|xtnQZ-hHun~%_h0|vNBgNy~BP{vdTHxzV+7eEi ztu}OeX|9X;tQPTkUB{P~xhNOh9=H4iy#z0ape3>cl$K#FXsi$;5yGWKYtGSwo8D_SXcR)=Nfk#?M*S9FOiapn zOI}nJgrP7#TJjx{X?uEf(lkC1#Tb{*z%LaFkz+>Etj0yGf1kw?CvjTy48zazt|C!d z(m>P1ix#HQNrj6Cezd&}Z8D>vFgK!j9~-|*6nj3nobMtb$pdm((XhNeHf%iL-DdAY zt0YFFkvMKJN6gB|IWP?_&}w#Sdx7;i69ALA(q)WD5+q5{?Igcm9JSJ+t?*Hbh7>(# ztl$V01{cIrui%k#d%L=dk&5nK{Yv=!edJxhOOsFj>t|93qm3%vZzQwJT1-52$fW6( zck8O7$l-%V5lbZ`1R^*GGq^nV14uQ@R4{f=A5A%Bt|DOg(?OF!t3oiZ;*cxcXMtZC zN~nzNKlYZ|U)I{7da1%2@1VY$!dWwE zp-f@)ND&93@l|E*IA2h5yu{xcbONb~{VM4|NqR)>4grkO2aiZ&NRhO20Tf2y>yXRr zD5It%YO}@YGzyqkBNypv`CWtyn*%_k8{p?U;MOEc7Nzl8xM1<uv|;}P{zHh1KZ%kuj(YepV+KYxd_*3TZ;?XiyijlkR-LiV81o(4JCPcsbU zBUi=@o6*9a5h{R zeIyCeR9MyDgzG!)ZQ!DX14ae{nF0G8k))v5Wb;xoQOlEZ^Q8U~1u1l+8JxT}*_|FjBG zn8|HgD;-8kCGe}=&twtDS~fkcLiAOi?4TnDfn2~F&^$swK%ic!;c&exrV;=&k=1Hc ze*fzRjT}AzM8{=Qc(~}*KO+WrfkGLOptjlS@-Z;j2HG8}%FC6++|+lr;4w2#F02sZ zMNv07m%)!kuVFbPR=2X(5xDr=%a*=u;5hU`3}V?>y0bzGHpwNSItN5|$O<~=ustxYK@ zh?PcHU(%Z8YUzbd<4|RGAV`6lO5Hr#F>=I+SC*?so3vqS(QJ(yPOiB^064Y~dZ+?aonGHQC9!ftq@24#}F5>D+nW}HQZ zDM-fO3~@Ea*M3*L8k&rC42Kk!+*>IeYt|Gy^HSWrH|i#)e*Q~vvKpDyXE&6}$hu#R zM|>Lc0DK(|&leZ6eRkkiB!?1zJh0#oWhWu{l?_HCYKe6llCoDCELm8ZI^e(_0h&C; zla!z{9|zH!q$7OI{YbmD*Ba}nR;&yWS?VV;sx&|Pvfi0+K3%P@GLcz(YvOb-Rm9B0WhfU+;LBgmYgOwKhuTwP+i5-5`VJ29L&49pEz1?8AY#G!O5$*8i&Q+9R|z zvw*dd2WLo0Ca82#`c8fca`!f>!`?D*GO@Asr9_}y=TMgUmQNTe`;&VuBn^if0@T>_ zgKSqAB&05XJ37admfnjy+8~YrmxV*7h|fr&$w}qq<(gea5B7kn9se#=Zyb(W8ys3{cst6p2WW@~ z=M*!dUnVH$zPMS54NF*Wfx?SKC5<-K3vveH*BsVlTEmi9R(7)uj zZ$R#Y-}BBwM<=VI!phO{CIW*_;AuMuFp3zhz6%ZsSzTQP2L*~6hP+&%mY5P59c|Oy z0@0=gu6SF3$8-%j?cPz23lt(3qnLoGOA~uaatFyR3H48ZJM2k;%`;M?WSVCJMx~mX@^S zhw#B7fB-LW$^gP0O_c;dl6MNwS00HcYX~dmvk< z$^`t?;ZWAAO3Ec-WSBVMu(>L`+;eg$HuvVP5l4Jjm{^3jz2SN(a?IHHD47UFP~!s{Lx&8#tFruX#~&6cJ@_%?yc_DYGV=Bog=HJi~HIA zpI1O3thdYXt4wy2T~cw9=ydvgb1~y*k{WLbHBZf?^dQ6jJxu6G4m(BX-VF3D$)#0^ z=oT#jyM)c|kK3gMpU3)y+o9pY2R%%@O==lhL_7kV(^JA}HneK5PWD!=tO?_$FV3Y_ zj+nNYxr&4~2S!?df29xQ6{m=!SIOVUy4aOk_U<@*%-CXh!5KLPu4T3liw|4t$Z~cx zF}HH*(8fQwKAfgoRQWbhmvLp)4BC|09l|XaWwNni4sy9`E(%%}&yI#e!{#*`=DI zf*wM(&8y`FY{kHZD@*s?Pc-6HXs_sqZJ?8jC-xsye!D}kEBS8}KZp!(jOvU<4qcd497jn}5_pueo#`aW6XW5bq23_jfqWe2 zTH0#ru!XvXRoX|*qLBPO+!!ui%n^PA(o@Gkx=X@LnsvnK@bVOMc z`S}1ao@OLmn^yDu`?Nt&OhND;j`7utlC>E z2zdtyku|bAAo{goF<|G#`K2x$F7jLIl}s}w4ty+=jCLUPmVlGI(r#{K%*}!FZ`?u)iMHKnk*) z#xjq}^iy2f-etvWLw&rgAp#ga&dgvh+^K zLZPca*SrebhahN$nENBuke}()xS7@$HA{DQF->hzTY@%T_gUV}5oK)Hfg3YZ!;9Or z%kilV#4|I)O=k+s>5{TKI9e?(8CHIFr~ex|oZ}9#?t+iDFfehc5M186+|Zafum{6` zDpD@{{BdB<-}uU;D39$w(5A?@9=n@$mHK#Sh(v&<#&JF zO9bEiB`VqvP^%5s<8pAYWMO4hS65e{#@vf9$?D;UCR6e*kPnyW!B2+IiA^6XtCJaH zy?{<@K%wH<*ccE5^`_NjJ^}LW^tD^juMGv*c)aPtI7p0aAIbAt)s~NukV6Is^HPKy z^#e-Fed!@$eSLEi_Sp{T(*-&tzQoTM*JWj8c^yfAe?Y7T2LhnFW)qf_B4+Ru+t{;$ z%+n!5pXPWK`Br++f+ED!6i6?Sh0TTwzn50@RN1OPm@|fr^4J zzJ4eIt0X!uCQoifD5f9?YYnN_S+d> ziR#n_a*Ab3>=zdmrYpw-Zp0R)%aeH}b!gkX;QoS!2QL{01_l>QTb>KOiet~TLa?); zj8<2WoKu6%T)v{jKaXA{7*3XziT+Uu;n4MYP6<+swYG3@K~Ua_87#q9@U8NWl^J^k zxfLyw!;enoX}TT7Tf#e`G8ftoi=ZqIX_xAH1UdQnHzadqZTlr06(hEb6r+eO;L)-2 zV&W;pnP#?g4NXXQ<~P9l_H#Yr)2(6c(K8*J5aD4-hn2mTzUy=KQHj#WdCih^D(gW@&sx7m)zCHGr&8NokSam}O}Vmbg~s`S(=c}n@w@t-P3=WLu5_rZ z(oKSg{A(2^t;^>DnjT2s{u@V>Vzb)N#sC<~r7QoFh5+pXJPH$Uqbo?AkNktLC`g$M zVG{@%w^9{ebqBhr3Bzd4{-D#B2Bp+ZN}N1A2P?i&Y56%VlI-oiHFS(ZNp$n&NaFSO zmCu;Pc%bX$3YY6L&Gywop9Tk_rl~8ONSkV&=wG|7h<9SA$nA=stL*31Ti6G9`^*h> z?TvMn2a_6&o$^%kDE!4vO!0RSaGK40MgO93QLgQ;5aRg~#P6h3&rObeZ_F>i7w>8b zOo=}YvPNM%Gd(3D%4Bq!(FQL@HYUWw!?r}Vz_y*xiS`%6LexO1MdNAy;RX}~x2`|k zjy;suuVZq3cF#~+7=ge?ZQoBJq(wQ#GjFptij&T=QCjP+-Sqja)o&kHAo| zO?{V=saNrm<=y;@Y@xkbl6VoPumD+A&{G56qnWUK4y^;-V=QJ_11>}L5;N26@`{od z0sk<&GNMe~um<5DOk>h+xf+M0Z|}tNQ+sJo>H-7A1_#OUG*0ql*lD;ekg%Cq7)Mlc zMJPBqn~pSB;NV3FbYihEE%&zdjF0ogbI|5ESWtChe=|yJQt?uz3K>N~`MO)JJv~Xv z&iDDf_$WJBrM7UPwy3jmaz4I3pMzKkV>2_TpZ}S?{>~N}H8X|zqL(a)h_j#kOopDB z*Gwee6GOfYlNiVYQUHTzQvi*w*VXF*DiMEFyorfPbz`HImDR!ZBT$J!jRZUwWX=91 zKsi|h5i6&sr-n=}36gy}Zl|ouB2VQsS1ujWOMIio4WFG`AO`2MR`b2c94C`9eQ6UC z6A$+HVIUq3b0d3td#%=*{!95@U;lTpB@CINd#;P>AB{suxNpr-Q-y8Flq^E}4#M8y z2FdRmWQ2c1L3fX+e}8|!P{FA&St?`2KGvU;zdKI@_*TlQs*Uya?;u3<(3>?Q&<;(N z9X$S3F~|3voVnp3C5|==QQP^eWfUTcn98#%(!- z;A(jwjqh}3$ApFmE0@gpCH>#0AHr?)01X6X3%T%QekhG6svP~;vi)|UT1iikl?2Pz z?*9@mLkSB5a|U|z0S_njgh92Mnc4B!m<%jzAd%OLO+Z?xf#QXo?BKMSR<1icyPQ>q zbb-d9V~(JJn}>nZAVh!_!D?UZwCBv}G2 zkFrzG&D%ur(uvlmfPWh6l-HWEK^(jm-U3RitE*IBzKl$Q76#t;IJuw;?VF9jDYk zpWBf3s^0no+v44yOO8d|*nS4FRaad5MwGBf*`yV-N@vyu&M8B8Wu_^b1*Si=Yq(&> z%NoVDYQQcX-8_!I=wJPCka4D~=LIvKWj$NhcZhe$qzZ9VW%eS{*6nOv6i8?>=uF9d z4i|MBp5`_JW!&K-P>Lh-3%Pb`K}}EhyjwYkmCk!aBU~2;=ZwR+)=}M5oT? zO~{BpHQ-1E2^%bn?GN2wDj5qa8niDjit=+W&rnrh`kO%zL&Y6mw)a2*6ynach&xGT zb3=Ns0d~0@&3c;NmhlhOd69w`{Td%OB5jt%C9N+ns#_P{?37fL2s6E}e*<3Pm#(gC zmWe=HIxkH%11#m=zZE_ih;NmmR#ZrBzOT-AHdwh#oD{$v)vxhAUw4+*q4;=ZzCQk! zb|w6pe?-E8E`oab`GLmBkUUz1dL`<0V8B4$r>@7Ln5gaYr&lBoj+01>&fX;JJ>gpM zdwvKA`#Bjk85L=*LdvQx2-?8OhzTT)r4@@S5Rg*-$M*nwJAoCa?VvGN*~Wj}3n2;T}y zWj()*FpSjK)*rlndi={HjQ9yrJeMKTi;N7{T*Fm;&ij;T$gEc%+kAqfX@`s&Lr=`* zCST4H9NmT`BKB3_a5 zsii-|cRHR8?sGNo|Jk-;=KSh%(7I`um(bBgGk2N$@2YLj@XKef?^pP#k;3U}EuVJ| zr85PV=fDA&-~HN5xSl61t38pzU#iXJG9wHV&PCAXj7s}iNGxWk4_relb63=(zMNYV zsyh$9C3bSM+ymGb$HJ0*z1*-m$FB-IwH2N&;$l}Ub3L;jk*D#;640a_h6Yc^sS(1Q z5?71lnJaJKbsBj_8>yEI_w|J5E9;qN);8p&Grb;}o0rN9CPGHxJ>434^8RBht3Ll5 zFQ>|WIN_xEFwy4L+^V$^>|K3Ehy1B?Gd{C}y=I2BewyFuiW_%WIkzxQj9}$5yA8u; zX+{zNUas(NCln(7zZ91LLKy6g=MTUliYeP5cJ%L6!p@~o(Za@m(*+2to2Ryp_k|5d3jPj zP4V^pfs6^qX5w-RaTNWvio#%WwbeAx8V&EbAR0+i#A`XECRih455DQh{h(Nrvh zGQYM4!?6yvu5sx4)Wo=EnP;U}C)JQVUd+~dzSC25gN+t@hsgAC+<%j#cw=_+=78Hl zSk8_qS>5dR9;uOK_$Q+SGNq2M%UeboydlE${Onq2I?uNE z5FB>wTrV**i}FhGk3|#jdIf~v(-li{#H-lHjYQad@|ep@(KDj6Rv7h9G1$%?k7w!8 zg<)5rwJzZ9%vY(fNm?+?}EzZl1Qtiq zjhA2ypPqLum|6BBBPH=o_w+df#ewX<@hnIvA1%>yKzjkmuyc=zu;^%XpnihzGqQ4F zu(=Plx;i>K^8dSuRovPIWe8IA?O&+rd>kA~Uzm6Z8KS#}2h?b>Gbhi@PcR~etoYPh zldPdnW_8?W;0lIy5#9y%f>=Fr8X80hc_k$bLPBkIbrUnQ=gUD5XMsO?5eWfNtQ;~( z2?w^aJT5%i z0s;`R!_W}!m;E0{6X=v&^Fh1~Na~Q&Y-gH%ZZW+=qa6!Mq$5on{Sj#gnK@}?X6APB z$2&eA>&it$r0=7S`&azS@1)UfAXewR?fRR81FNZ-0Qe*06A~aPOe*6t31A@x`TnhJb+% zqOH*KWO=n8x4C0<{;|BUO4n$6h+hH)VVY?_B*7MFYEIc?r(~%{jAp&zU7$+;f|4HT z;K1zu=5LiXSK=MahU#f-UY^LH{_AeV5O3??xSlDdwA&h)jrTsI?JEGFv-_Z$Ij9m` zGu+Mxw+a!ntm+(Y|0NVqT~UlKiNy}*Z~POpEYZI<#wNUR(vCy)2D_NE!4tkj>+(@v zBx=U_scXTy%&Ne}Z6SN+!hp;WB4-U^Lu$O`gtOV`bJV)|bi|1dtMwEU)~myXbwfs! zgk}21vmExiLxOvfEDRyVOphd3f;1xho22-qxvq_x z;j7CBe?OUaY2s~?P$pmB^fSVhC;Bx0Rkf9 zw{SjbCT`JHQNxz?QgO1I5yX+^5N3`u^e;^8P*Do}Ok9x<@2)^TQ;^|y5>5rOuL6_& zR~&zWesU%~%xF@=`QW0S|M8RQ1?wYBf%>(U<~_x1z!&JDfC4_;4m5p zS=w71CKoL!=L=Lr_7|BP+#-Ph6XuCyPL$wIXKjpuLEVWL{Oa*~bgx8$pNm?emWs;m?+bIy(HGw+n?so8@I?oo}z$U*uB}-spq+ z_2>GHF`xpAqV%zSVId?Y>}%ceKHC`U+D|qxP@z4uX8ev1>#Z65@gAQRhS@s`^+F`g z5Gf&L|3_*LF+e%0)R1cSM$D8j8Sp)gPtAP)QQMV=3-pDP@r6qa2m@S76d?s6jzE-n zYe0N!MLwPeqxT&QA|<*zMbyPkuC;-Ddln|ON*13*1>RTe$aI0BEpjGLOa*+D$XKcU z937f3I@EgKjYo}+nf`~e&Y;U@7Sv%VFg7kojbF-ZpMAz=(0(~8tt8DXDlV2JkMZ_? zcQ_1|9z#I}BY-O#YG|y0b}JxH(asKBr#0YZ)&}c_31V)WFB&6+88W7j&YgFHtF_a< zsuFeF(~~Po1UJwF*ldd(eYZz^`jR<$JXXqc3{E1xw!#RWk0>%o|Jm22Cano z!;!;zTNF{FIm+xckGh}7+nWcUT*Wb4v}I*a=T&uNB_u#sX*Eg7VI&?w!SE2y=-!&C zE+~jROz+DPSg$d{2k-#Lpix&;PypkqZ))las)Y23+`V41q2Au!fQcm)cKrr&39mjz z1mbNY%@x@212_Z`k?q%quj+7d!!~`van1>BrSp4fC+J=Bdo)-HaaA8Q*G?rvG5!oyuJ}Mxv03D0)v>s+&cV3u#hXjtFB&Y- z6ZvmCU;E3a%JO#KAIS0xdCho|@}Zm~y8w=+XYUM^!OH9DL-n$j=ON0{ zMXp)CgRoPK?2fZSr&(a5Vt|Cum6_J`y&(k@Wk`9^W^@Q{(oC?_Pu;j93YC*SKudOG z4v_wbjB!eGLO=xPjC>J84sLdaE$sMon{RgoA_C><8>cx@zyyx`?6_UD9VM@ykfez3 zN;%Qb4OdVl#1rbm3l%s1|7R_Y_5Ryd+W=%5+LF)bpz!eYCwYG_G7w$|Lg-ozhhv;J zTn+#g?=`?p9W7Bn*b40aAa4nz)2}pI=>Va2XD~96R=r1;v7lTJCXL$(bQ!e-JDGuj zU97OO{8r|B`$V$_`5*02?M&`#AEM;WHs8vNiVo!(rTx7=@V{I@#UP=Mr6yK=+y4X| zVo*@%hPH>L#ON`hRh29shbliX!ns&L4VP_L#rb&Mg?VXPBu?_X`-d66>I+LABC<@h zPXQ!_I7z#&5)FtXlN9X$mqu5Lf%<(2R*_t4sTfZ-bzrV(Di|3Vg%0_iFBweixKR0I zV3K|V6Z(F>sjd#w0kNd85Ecv9dAa7NeAk%KJKt{ii*DFX;PVZ~X9sQFvI`0Tpvgu? zmTQ8@FO8J@j&%+LQl8Mm!_ZLVKeT8L^FQ|VKim(@8YGzB*;!^bHkEyG5p02ek$zpq zNrZwgt&LPr$ubG~FlFWC9x7SU-P)JHg&Zw+baX_>?@9ZNKQF#5=zl3p5ptQ-Jrnzn z8UUGDg@shi%*?#J9^k`52uxn=rZD@~Wc%TpTwmX2G%Nuui^q-^yr;x@R(AH*>1yNK zZ*U8O97_>W1!?I~f5eaASkMlv8sCud8F`po8%*^tA1`Zacib!``CO>WPyJnlh;;!8 z3h~&>OR{bX12KNxY# z3;(~3Gsw^ct0uw#J`(uV!njs+68}w+qY`o8?aZaG+hJJsB zW`lsB?b?ROkWh@8R-pP3wH#~&^}#=g{4ec$68zhWVuAEPArC~YOX*AKw3ro4PRVQ< zmVg2IBIH0-MSPS(#+YIx|COSU^dc72ci*ZnSqg+KF#AzeU8Rt))(F;vG5blfk%rpF zAt1Oyxq2(51jUfy`@bpUC49O)#Z2jG%!1+9R;S8&@(&^W5Rx9GG!tC3m@S6se^VbXj3PYW`Xm>0!-b8VKWwzS)z;R& z8FFNGcMHaSNli-PU|}K0M98KxXLAG10mH+?2P26#s}01Jl`*gIKwRrrusTahs<*p3 zh>5|J@b2vFfQ2z4Bm|F;@Rj)#SOYpSG`J8{w8CooaqC@Uhx~}o!-Bfpk@P?D*=+Yk zlZn6fh?QJ834Mv*-`^+AG`>QPCbu2Cc#w&!5+tP=(l!38oIK?pLm|HstJn?mKF(QE z(f*A(-eI~P9c!fa{Y`Vdtb!kz0w!O$kWv(?jdMOTItAL77jE@xHrj9So7Ewe!mKd! z%K1)~^5KP3SbpE@#LARe$v!hC^vD;5OQfVqM`o#Il&GZ|iX@9_R@WD8g_|OMGoj}d z{g$I*kk81@F0O6Q{PpW{gN3G=nwq{o>CFXj$^*t8l!4c#>sQ@OClY zvk5#OQ2!Q9-)2q2mfEp^gaEsenAk2Kd9m^nxZz2>_H3Icxv+x?D)g(9B*WJ<_S*Wl^+xdX1vFKU&|JE z*CdPp(Pf7eLFlmv_CwRJhJ{cNH@CMgJR7w~pfNCr&IOe(I}4-_hD@B~TSk;_;xON{pac&3OEgQY1;Wo8d4#!z-!-XUmsmcLjdOl4@<9N!ekU^E zf#2aE{hFr{jgtHnIQYFSuCn4iRV%$(y7{psO0?%Ry-jmBAT^3xo!ziSnC1^@?y-fq zaj`?y8@T0^KBCxU)beys4}v&M2uxODT9oyu56R2ON5@_1z-<8qmD|s-E8zcE#+4R~Y?P@%%BoZc`%if02Zb9qABQ39z z8k!tE!ZnIhfCQ}7Xd1$UKw|)kRe$JX6s0672F)Ed)4XoI<5mML8O_o>Ug{@Iv}2U$ zg^B`yGbIv5t=L*yxp%vCfN`O@!>n?-_}d1gr2V_9&m^?-+_YG13#r^V@s?77608mj zBfS1mp8mZ%z=GN}``iD#$Kmq=z4e#BSN4VtU9C53JV6!-?8m5m z^uiCaM{ST}@DS_q7>1A}ZG` z$3Jb61twqL>fP=!*z~2H_Fw(4U8f_OCyxu$i|n-r4d25IjI&hIXbVl6u{x+ZDF3H{ z^`>)-w{0jr813JJ4+5kt?I{3#<)El0#KjR$B9>phSI03j$I zNfH@Os`iW^G1ZXukJ6GgP@dyR$MXRWasM-YiCAB#;o>%QVEVEx{90@|3lOc zvTuJ-j(Jj0t^CHjUtCWY=~x(u$l~l!LAxc)KBVO&F(QB(G^&o@ zr`sDQMR&iz?8`q+H8P`R2;)^8FE#@y*JSZSAe=(SIZ{LS(-x z0nw0+gOt?SqmuM5UN{lidiH^bZ*@K{hjdWq~a zkIUtI@{#F)de6k9ic3XRRaISm*pLaFUPE}g=BB3p?Cm-141_PM(qM-IZ)vrd8TaSWo2bN)}V+L3v>)11|XW?z00#x%CocG^-GG2|7|h5gH&}`P|$P8 z_6dcA;Ns@a-1{k_Wtp0m_VRRG3C?cW7q`@9OUlp?0-|A!4GERfKqD(isJa4S3jz~n z*pZSpnk>CkGWh8Zziz^1Hp*}(`4-qY0uKDnrsiim9gY{`X;jzN*Nq-3!C|hUvC)nr zt(YG@xG$DU4h9-p=HFjbUl~dUt(Llif?vRUVrn{hgP>E9u4e1mW?>xD#cT*`?w4T@ zY+pZhz$h|Q=B1)A^G|<^?)#z$uSYP0$c*}KTD|vFGCVCxZ2gztrSDRGbFQ_{3C=Mz|V7j>d-KspEgqAERS?1JQnB}@H8ye9} z*h`m`g7|jJ|F@~V;WvS-?zdTshjX7P`QG8dmVG_4WTCL33ptw55Q%$05&^FzAg3m^ z(KB0!b8_>IoUQxD7P6cTT%UTVkzi)$SIUcfCw0=}ls{A$lr77zkL)teNRcT?^{)G# znh~-^4?R>VZ{A!T7P-74M`}{$DH?gDf)EW8MAFt3*8rHlfdyBP$04oqlXZdpz8+=y z?_*r~s3biCGs~h0VCAYzKKE}8Q=n^;4yKHVk)jjD?6O+f$jGS33pF0 z!$G^tw;AovG$o~F6;PGO*aWv1icSaA)y)LGo^`)&ka#ek#*E{F&;@(S^7`!9!s3Kl zQj%hhv7U{pI|b%&K}l*jSxvORM5h|pRp^m}kAqD{43Uwe@Fryz_(Y!?9oT6$qB0tY zZL_SJI^6^oMM}*_+wyW4u>+@nY))WU*CY&5U~3x~d`L6xz%qmVb8E@OK6dP>VtKmP2_ zwJ4WZ3i5op4C_GK)nVL>#3IBh6)L_YxsY0l&caMnm2#)+BSdYyhqS8Ox$aw4aQsHj zCw2Ju+0Hy2?ai85y>u&42~i9)%(IrxYa_a|Goz$RA4PyWVDV)`f_zI@$-PFk50s(U z_)OxZ$iH={AU2H2(W2ej-yz>2<7*t!u0(%I{3uiqwSvd}sIdmhftQaY;J&?$O!-Tz zA!Q;0h+5U6S&%_<0qri4qqF&$#g{KIG%cA(uzaW3)@-Zix#754jGa`C_`=HjK#FpPTA7(W8Uva{mn(QtI>JG=c8V0^yRxQm;8!uP1 zEv-dePG6qgX=i5-8W#^EP42tT6jXx|sX z|CWqId#)+J&Si!IlyD$y|NdRTsN+HZKD4X^Rm+Mi>n$|6fS~4Gck@v5E}@>5FQ2@p zdsT|9D~HL~R)rk8-)#sc$t+9j@vbastSe$6BikDtL-QX9;mNIq{E8zZF5Or_@3qx1 zmUKe=Nq9V9a9jq(<27cf?tL^EYF1SIU~(bn7M+a}kXc?CP_iE!4FAz9Rdn(|#0UoT zOF+Is#@GBy=k=AJizZ5-3m~Cj2d*hkuI3bk`PI`>@(U)F4=hNo>Uq+?EyjCcAm0(C z94R%iiN>9Le`^x`63z9f!LXkEF&%4eb)J8U+t4t(b-TZ<=<%H#EKZ^Qbz9S#t}vpW z)^}!K(NQ&=cm={e?A?o9Jt)FRM9G^kD^ZkEca|k4@nMoDJah@?6Oj{0C+E0F$GD7) z7!}Ud#HOAQ@q#Ah=kklYapp3SlOL0p4(GqK%_Pmu%>=nfZ^wiPm97Gh*FC(cQcy$$ zpY@-vOn8yvp11#m4p~{`$iYqKGBOx0Ekd7VF4XD97BK!2UGNVg3=R17?(aYK(hm ztVc|9@OSAzHUO7EV#{Cr>+$kB9NLiPa25NQ+=_RT6Y7x@Sr zZ%b0lba#KHk0ivkveKi;lZS8T6=vc3OguKS+$*oub!bXNj&_M+`Q)v)Ams7Q=>TXw zOFziChKHxrJgfzH*eItlYj$SS!pB(vRO&07Yx+aO(5F2=eQHBAvODJx_loobfebAR zffn)-K}tc?C!AkR;Df6f72MSElybep>Z6%BV}71crFjNkPRGl-!LSVwlPt$~zORLC+9HpLS# zVn@Bg2D#fd-q258AY3wgtjK3`zdlaEv4K26-yrU za}1N{R{Fj%?bh~cAlRDhaTP z=}Te{$69v-NfM3*`S*Pgyon#^j`xB1#xw*7U?UBA=Yf5aT=@8%1D%7f#$K zuGk&XtWM+Pd6oTJ8&_~7?AdRjzYSX0kZ#(2gf`N#(TOanl%}ZC!{);{$2IjG$XZEt z#pSWxNV%9|F`~?zQJyyu>=`(4kyFo$Td_H!;hr+ilZ$K9H7iROnp&CSWy-5og3E9w znO>ITSz=$ibEr|D)}3pEdks5Oypi>8YB_IhJ{w)>$1%0UpJM$5M0X9tA5 zL>*7{ChM)F*c`E)wPrh@k+P8kH0?f7sdLG$O~Rw6LrhlNbD~S)94N5%Z%-~?Iyvv^ z13S%b+g&kXu#yR@EZ!7hJtRy(#kbc!Sm1$+G->Me>vNm zj|^)csIITv{?)JhmJD0GaPUohN4hVmlN`O{pjH9_0+>=?;(-IWr$LBy0G0ox%51S> zY;0^aam$35|8X}K^xx&Lc0~&k(H9U9(9_EnAuTR1w=gFlYqx1caCeZq-Xbd3N&j43 zchy&<+$)l-d$daK0uAY{e9w|qoN!ZQK`u%^;`4PzA-qqCy5suq7QV7WBA3_3hTEg? zxbDYjAd%zJ z+3)5}-bZGheYV|(KqOb4K$5mguK$uoQ&2zWWLDoL`&p}lM$~-t%#uhR8AeDR>3iJkJvP_MRa*3F#H;{?a z_m&X%z#rBUQea;BQ|t8U^v_;}3SM}@&9C@xd9}r7?;@xoGv>r zdLDYu2?E*LP^2$AT??9W^QEaq(#VZjj?U_B(J{WCQTC^r+GpS??cS1bqI_{F4{=CUz$^*{sZ;vLt_#eJHDD)IodO=nH z91DGX^3BXH(;ZQpbX%m+I9hec5uwkT3SytwoDC)q5w*^lbjnPd35J6vZDqWiT|~BP zoW08Je15=;!<}I7X+P4oFbMY)P@>*p=A1J#x((=f4^I@0eQ_JeFKj-GP33u&;!WqE zGItN_W%0N26cQQxH#Qc*qWrv~&V1SPqTijg6T!_Tn#LBiwVaTQXNTjF_)8>b8e6vkZgQZH$$!b0)=v#F*nP{n*y0) zU`TX2_%>I|H@C+77b{BJ3tL1oJ-o?uN7DL?yqa>1dJQm){5&ovY=qarXS>^Pl)nmV zI{CBN(K$D}T!`_h-5kahmga2kNCZ3b?2n1vlcq-jHWGF^7x&TB>L8MXX4=D}=B6O0 zbWQm-@QTd@U!tA7eme%D zN?tWz4z}OzKOY?t_iR-+RvwB6QQODpkQ+w&A z9jupP(ILA!#IL{yWA>CIJ{6~vfB8zialKU7DP(TFmx=#xTpY&XHqw@XroyDcY&Mt_ zpD$gu-BU*^*icBVW|N&Lb1vAR=s2y&AoCT{BJ><%Ur}iR?o^+lYTNex*k~u#u?QqO z5v%Cq{4**rPA8-D6TW(6$yHVm3VxHVFL%It>id=OA)+h9ZEFrWJ%~(qr@-I6`Az)L zKBcP52xxz>B@?U4M)%uJ>Kc|Xk?#x*K%gFbCEj)n3i3B^=-9p;@5gu=Dkd- z3m$m3&8$zCVtm46n*SsJXwlxn)XZW;^vIxdtYyXmlb%83U>zy=SV%9$adY=o;*o3y zivFK%ZtZEuRjaxQOG*s>Q$xx?jx!8rI)}b-Df7Xg=dZj9b;O;}JKQ-|OO2tLM3A4L z6`srF&gTW13EJ(CC0oBKGLJpjWh)jhl&ROc-CHhQ{+FG=z+g3|G{(5o8F+Pd_2EbY_Fm?1O&UbAeY5;m5Gb%X$KYceAVNF)I25HG$6}YHEtT-CHov) znEZ6Q72`$-x4)13@zfjjcSPL8Zc7H&u!y4>e)No0_;c)|(9=*=OTMHRCn+u!+SfCz z<8oq51Wp6NsJig z&;h!>mSb&ksjO9u`bZKqPr*sTt04Mk4)*-pWP?U9d<6Z~kx0Ui(dw3+?k*To6o=Tx z-#q|{uKu?4_yHz5grU9S-V%;HO||IchTT;O+Z&>KmN(MF9$p_YbKCXlSf9E!E3`AO zqb9dp@NKD?6fgXz&3#A)vX%F3c+8vaO@TMv;`LG>Ov99YV(sR-w{p+4=A7cp}#YVP7?# z;|wwhc6OY3v`M3PCqLty)%g%;SF_f(+EvwRRaPjs^!x0gyKQ(H^oL-@mheD&3*=6N zn!-*Tr^Au5M3A1v*>bHB6eQ%pXH?(v@^X;QG!Tvt1vNOK|4_ICN)RAzq|J73BwspF zLt|iqu#pSm6Rnv3Fl}SdP`BGXEN_%?jkxxtXs_6w;pB3=D&LIh&14{PByLH2(b-}o zk}k&`9JFhZjLxs7U)U;cTB_`p`v`)=kHrs9k zB{j7+*A)xjZk8awti~w1Z+U8l4?_1XXY$xWaq(IPNRAT4Y`+Xf-orfKt~a&^X64pb z7HjZ3_U*>99tPO)uM-*K^BOjC{H%yJ$|S4NPZ!x#TGIUFZ|Xz>UCamF3FKu!U;!BCnz zkEZLdP0?(H*pavh2)Od;31?$kSHnZ}B{a$-@9vzy@TDl~ zxL-`G=_FAS<6aV)GV?RN4Vm zPr9kBb-YULR>)82q5UBB2_5bat~^)^&%ISjJ^tn=f`!t+9WAgoo!3nzTb}2T7A&BV z*(D_-{r&lXKH*{lzvHy|PX{|R=~4~QCq!duoERT~q(55drp=}Lb>cH)7gFl*iZ0{Q zl3n4X$I{kGs;X(ngL4>#AX=IElFR!5WYA~w*k1jexm z!5lQaTk^6h1@ob3J>hkEi9A=P2AZ|vzN~=oV>VoA9DhNszNFnMzf$P3Ba8)$AMaDk zD3I*%KP&fKgK%sp4 zjmdcJZh~@25E`-?R7t>N%^Prq0X2vgoBw)@8L+SuQ&Ukk$rTm!Ov_dO3`9l!>+4ya zIf&7M1_s1X0-0^5J0Ud6?*NpzQD-un^fqxV@RQ46myPnX);k2`IkEFk!S7Noa|#*d z-9Jv{IvslIv^igvH*Ns>t=03NtLXbShEz6-70|a8G~NY9v3gL0uv%}q-KxA&{WBHl zg{f1T-b4UBdxzmKRw9mstZ_PDFtL(R{S6<#>MNRBC5z`V7sry)cZYdDWIj`GTsA_8 zv>&~wLa`oBM4vSM#~xI>2#8sF!}ve#e@C}wQI?&k^c58$q*wzXPsmz8ja&B+4g9yTOIBb=Uj>?diT z;wiEklYyV9%J$Yb^V!3HxOj4|-tv#QmY1okD329#e053ptRVUarUgF)+h6TU+SyNq z4Z?xZalJhPF5W-Z0Z6!C;=hoPY=QWu$ZGvxNtaGSq|xRZZOacs0I3~Zh8Yj@!eqf4 z2a7l{m_xq|4ecFoepg3|F@4Y{>ma;0L2X33CFFKKmYo%KQ|CH!<}$Dqxy zDmRymho`Nk#J=gxn3D?gLxDhCe_oRM#&MiL6dx0>wqlcGx8 zUrBlcUWEG)Bm@~G6FVOT3}nnjzWB041a-?)!Ox%-w0=@n^$xYjl0vK_huOk@&_)h; z7T|{XEkuU*Q7oHkX^$v$5HFOaAb454Af-k&ju}FZQF2w$MEeola zYf5%G$WZ8GQ6fa;yQz7|5wzT28a;PLRm90lYm97&vu5EiVaSdQj1BO!AITIbH_^k8 z@7AoLW1U#=sO#YIlYf=y%3y%pTBw2dE6PyA;B1~^3kX z>HbhDd(O(mb5vZ(6;(*g{_-Jo`?jZzTU~Q(hkQ2RmC^9HancHbE7vq--CmB>Q{loM1Zdj3GY1WOoehb(~yw zGXLclMz*3hY-5@dt2CZ#b@lmrn+LrCy6&Fcg(RU74u5ed13XT$Ss5fA#F*fp+}S$; z{i*+trn8Kyvg^7qB2v=bAl=;|NVk+A-F>KsZjdhNE&&1Q25FG)?vn2A{gE0y=CdujYF{sgClBHI~WV9+_mH?1qI?SDvJWcYEmb!!`kOBM@UVJlXc=E77!kB_Y7%l7?oN7X z&c3@)$-ISTSC-P0a`&IAjlp7h2@-StU`AhFUY?wsT$tkS4ICYm)vGh=TxugZpZ#xW zH_Nj;Cnu+=NvmYW=kd5Js$Bgr5vHwsIGc^IVHrb|`Nn?q z&bNt81pzMhE|U~!bGB7u8Z=sXN=S@N%NvpT@okHaCc6r>Cwp`%dp&VDl%VlZ%85Dw&u)()_QtT5q;g!))%BZdd}0P$|QEZr%>{ z)F<&*;W%7hoGE{2sK?x!l9SiYNNFI)Hi~~lMC9JNq2QJ+x%q)L&mD*s(!_TD zOD+aQ!!k%!WnO&3oC~=8LNgo2{l!^{a1z;hFXgQ=Kc1cyy8w4+sBLrS2Cm z#k~!i#+bb=)5mE6SZCAoy?+mKW1mJ45J-iqnj2fDN^?C+mm7|vAK0jY8%s@ag7MAC ztaj9NVrR~=n;qYhO2re1s2*DFVQvc+@69&EvgMP|ex|FgAr^lE47*z%1 zxCY{{qnP`|2v`Jl?qfzlldM55C&8sxjchS^aa%PH*Z~(qL_JHlECJJrqBO_6mBT7l zN^=T!Oc(5F{%qC?9&;owVFNO{47@ySO?=pe#SX}Xd~f75_4SiUSQvk z%=+V|Z=h7MEo{Zm0@=;G*uZ^E+5mBDKAMjs$n2hYj4Bq91F%YlY~PV^5TMQu8(CI` zYp;`QLWBido_lS)J={q1hlRThPBj-QF(}rA{bW8GhpvFoNJCL&dnHVvlG9rw;o(X zvyNY`ibF6Ny+8-^zP?XX8J{}3-^f{8`GVR(#I>)&}9q{Jdk7OP|Y+`6n0X_PpkuZ;z&R0ZI^9-jqlvg@jk!{J|8%orU>xXt42!i59 z;+Mqq21qsRi%CZnRISKTw-B5jhs)dKmKbrvWep7?4{&Kk0k+l($3HwE9P)WH=U|=A?JUxs=1bC?u**sU`3C0FSC^)=@I&%|@ zm4=~)hW798?|0kHbOooIpV}?(U4W_t+svrWjxO$hjy)hbrFU!Ef)o7RN{f39D31WI z9w6Q7WxT=lA28Y3-6aJ&Nf(EzvT;fbZq`!oOQ+YMgLRv=+tw?>w8SR@j6w|r%A{^t zALNnWYpP^1k@MyV>|F-v3k=yC4e%J}7*sMjq+#r%UtY-oYAtl$jX5wd03gt(yp^?V zDASY-YfHDeSOn(p<-yLsz|+~(8&(njJb3l(0UhIAcHFT9&Q6(QzGV6G0d3#u8aqv!? zHi8ynXk8O+yG~BE@3tCT3ipwV zW0=)g2Q&ivfTzgFhz$ro2Ya6Vy*)ev0$^qMFKdp&93_50r^+ZuHva*$;@6Co-D*pt z^C2h*^lzSHU|?kVJnVxuVtsM3mA!o>us8oCE)DcJB2yo=Jul=vT*VH z@N5j4AmF<+s>Ls>{gb`K!FOSeh8#(SNF~APR!d)Xw3cgQiXt%XFch~}_}`O%w30Qr zD3#7unww1jB2B4+zlqMn#LLE0+VZ=gtf8p%baH5{rRijUJD@D|re2Yuk(Q3d>tWI) zN^9yL4>w-w&C67Lfc<{X=V5AzsVkAWeAK#udG{-O#cESvpXOZ<-K1GB^(Z_;yKV^q z(SPTOG>WJrnsL)#mjF>kQNKE_jBf3?*R^MNKy)68lSK_SE|NL+pHTvVURbOIN**xh$k@+ zMb8BFqI`nTxQ<`5$$w%M)7ouN(O-HW1}f#+gaV-10i(WL%cl%}torJtYswKNqnL%B zl|^b}%EH*L3t-zkcIdcE@`Ngqe4gT3tuo&Pa!W}!6+Q8p)~1)$H#DEqr}>mq-#HwQ zWD+y!dePAs+sf~J<0T@|(3k*yFbwk*Ot<|1X8{5Wccq3hC{265d?n(hryv8Lq?DmC z5G7lteu%rCm4TbZNzqdLv%JE*V^ueajfcO4tSv9Uq_r`EW!q#pVju-KfM(-xkdO{Z z1>D-JCksMznT0Yd5D^qh5|e<7j<>7nQ6rl-@gVU#e;DcWV8k!xqSM3u2G@qs6vFgI zGSF~pE~|=X*^$>o6EM{SHm<+urm7@73SPh6?R6+DJ0txe3G zBz^&QI+omm(wv6owb2=?!Ee9mE{&T6JhTb<-N;?Q{t&Fa;)qrCrLp2v1;dfj>6oUw z%nYrXL7ln(?wz?LY>#L1YO#9B%&K8|kz=kC1T-wUnJ15e&i5VjJewZ02^Jeg)zv?F z9UMs`MyaVTisWL%U;a@sm*S%}$>%9?(pMN94*d&rI;lN#fL>=F>iDp{_p{{;G%T~q zKN6Zd+~js&J?*`$`tLlreD_POWBuUlLK!7f#9Tz7EFTR1cEp1y9}}=O zP)j7S{1r9dor4iVXsy+>=vj6YG?h$UI2^8qjKVcjTYW!V^nNqmT(Z)wcCgu59OIJ) zk2$IP!iW_N271y)dJ-vd+LpGu4#!Ud6&PN5CVA<81j}NZL#xx+c?2^?IhoN2JQ8)D znOau2+M_>#U}Ql)=3OY3y+g=Oz|G=k80_gQ-!j9-2!oe9R~U;%P`F@fSIq;{!=)>j z4Dhls7j@?TO%Ji}FVufhjlye0{{l{xcsgLCE2^RgqtRddTUCr~!`a#KvZmd&26O-d zsUFRSBM=mB%6_YI@Um|0SSL4g^4V%h%Xxd6TQ|(B$272WvGM4X%yO#Ljq^=g1|fjw zCdk&j;ey-=ot%Ih%S|&lvsQj(#wFqh-h|T+ZB&bC5eo2Y zHHmX4)u`w9?FL%;*XI%{v)Vq`>ZqlWiwt5&<*m8`flGMLJ-)QT* zmjI1io8Jy8Jt|@YZslcP+g`y|eGG{AE>@%C?(}vp zNvpBr{k>D$!`<*bM{e;Zy0YL9Nv(q>I;4nUQB&z+4xDJqUq>Aq6X>eTlkcA_Au8Sy z0^`sUmDi=tu{!8wjpcGP!baQOnXhV*)3HlaT;mIiW7v~BkVt#f+T3tj3j+0{KO1%r8s&H z*d}KvC<#gF%JX>8l%Q(*&rOZR7x>F3#+8ntf;3LK+(~2>KE;AtgWrh&3AKi z$t~=@t}Jp1lANBNMvH%Ed(#RuK@lu%e%;@`LCbxpsLRP~&ePbT^|4yR08^E#l%1n4 zu-DVNpUn7$wB0{0Z6onERyLzi(0S*;iIGIxxdJ6fQbIwwe5ut>mS!e_2c;-j2%5No z^y_G{JusJT;`b;c7T3NJT0gK}TbY>CnH#J!Dfa@TEQiHcF7SM%e|{a-O1pm|)Q01i zWK?5>OKUHio?z$?lBeKGYCu;zvNt`l&OWV7_z!FYz!dxQ=1vkUgMMm`&VB>$MqVzjjO>(TvBNYRXy2BZGMT4CqL_(%WhzqBDQ zvz_TQ42ul>WhNP=PkxKl^{x%icRkwXLv~!U#J_Q1Ap4}wiOGbOP+X=3+48u7Zk#y>vGgFf8&qGMBQ1Nc^r>*>>l^q;c~zdec7Lfz0}t3R4gyHoFuN> z>757}|B@${Raqhv4aXdAbf1$m3Q|!ppO;my6DfD{%4ogn zp^RlJsVS={sf+HR*|iJ5h^jx_$Fl(NmdaVtuI`Hl-Wt`d|1SbXQlI8 zUlS=HoFO-qE-iNg=Ky&IKXGw&POTCABNYJ-?O1lo3E(R|#=jr@?*Q_3>0IgVW zKeu{l2hy12ua&rxG|lT~5K)bG~M`3&K_Lc@8n0&Wb`9 zKX!c!tza&j3j^u_ivIoO&#?9LrGHORUl7CAi(U%b_~C5CPqs`|zf6uV<$sV zGTIh;R*?g586d)M;KXDr=ZiYmd~Jt!{t-`P+@3+DZPi6!5~5*mRAbN7aWBL%x@^(9#M}9JyP5ofn~+AvT2;!t#77Q|AbuE~^;DOq@?EdT%f-k& z+zb=#>fuqeM$WK3yOgr0oU2rX&kkAQr=75`t`+;PyHdF^o#(5CZ7-XjoZm-Y3%YI) zbeoy79G&dhSRYJ>Vet>B47NJvBmMhgAKj-rV5egI@W$TLRD7bN1#=z=1vh&XZSBrV zn^!h+7%-I)XipbMo^O){+*=6-qtl-rQ*XFY&Ol?Xn0eG;NFUwJ|BA z0d9kb9nx)|{W)z|Zo;9LwodiXD5DQ`xT}H{w{2+f;%>!j2*&lLKQ`fzA#Lck8oupi z1k)kN;_Rz`JCx*Fv!bM_`-ytyUVpy_hmiYMHIsRGT5g6tPYUjA`#Ed#(_gSx5NL+g zvvGT{T6CLjGB�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%0AiftTuontZ55@~ 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Ν3bAEJmIfA!w%umv7Bccm1 zGZ%q&=ddK)9cV2hu|HzFE)k-3+Sj_-8h{8GimLX;6X?9qU~=+c@(3twRXt`HQ`26G z7=n@T)7PQs)?1P*h&FO6x_9X(H?64J)nL715q4QLB&JkFF3K^w zgTh+wM&*jkzQSQDutm}k9S3COs&rn0$!<~lb0{d$%WMT{pq5c0D*wFF;WI)#8pz$bCkP?+|~w( zPz+Iw*5BNLDU&__Yf(@mE29jYi(^aZ1|uq*tPz(~O2+k$A5da@CnXOy91j5@V{Cj@9&L8^powY~CRLEM zyo@GB(qLKRTRaI>h>VPsvf06L;{4)3kQ-cp=}wWgc1CAD_U$h=Y`F5K{6;xfNAvuR zlLs$I6C5fAQB{p>d<3Wwr<{}`nkp$1M=Onn$iDpIGOKQ?MyOkJZ6x{e&_|VS1=csQ;-S41Y#RJ z*qJKJ_y5`FK_S?-TA^WcrMOi&O+AG22~ciOt^7No6DN2X3R$H5>uOXdvC<^ItWuDo zO$jf5U<@R^+P{FK9?oWi?h7K0#+ocu%ur6&V)@ooGqCdri&n3e9LbvUz4DQ#OfF*~ zDVO78c+8e-@wM|k{!@hrowkSReZ-_ZBu&lX8?oWwcRlSkkBvV`_@*Pr_LPyFEqNE2 zL54;?QU4`pnwe%i*^Vo|`d%{#&C)%jD({N<|Ka%B*ivfmSU3JC&8J zq-7%~qi%ypnirg{kFBbmnIDPz{7<-J5>T91926H@SXsH$51pCSmkwcsr+a$Er*W_w z6{tw_gs|{H!}JS6R1CH4ZjHEI@^7qvPZ?|b0(Q!r+;w~{a@x!)z8h5A$L28{Ew5IT zRnSx|GpiT^8_mklp|jn%h_HBD%}5j_I9m>al5o{=`(}P3O8nhpSND{!CsE*KHA99G zUBh;iH*IH8wr}VVui=6Iq z!GB{C=Mj;qLxZw__Ccb$+RLDQiC95F)A2c~kllPE5CJLG@#ytox`oJhH+oqyi#J%H z2?#>Bs*I@sf*U^kfGw022SLR-Zg=T_{q&|0kb%FIBO@pC)R&46Ktt4MgD78>$s-Qv z$L;mfOXTArVMxRGu_k2=>dNG(Ewm>U>XcM9G~5Q-b@cO-XbbC;EBAaRGqyBGibn

    !7S>Tm&uEVw?(sm&TX?3G%d9R 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%0Diz_NBDl7S&Pc@{azkv5L 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≠4i*EuK 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ð zmg3UE#6≺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%0A%0MTopFUyl9y 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\cloSrAtx!1!*)R|T=-J&?3+Qu8H zNco7Z?O=;jn!>m?Ni$&mN+4{vG!xr6!m)^vDrWiF?@_s|smRHoTFf#0JfG#?J}?zU z(Dj2_O6=*U)NlNJOI4r!G6;DAJ^7HxLBSAtIju_>0PYZUZG#NnnhTgtcN)cmXpe|3l$d%gY);k5ulzjlf$K0o}^3XYo z78FPrPUH6Nbf}->u+@_YSFu^lar^U>8%cS{8Dc@KV!b%*dSym|(6)DWc zUCzy?jq`qeR0@L^-a7iSSrf1HK73eL;@X>EMfCb;I@aCw2c7KR=TcGd-XubNyy%3N zJbo7oj6|yoPY>NHwu6R&#dkA5SDIep1f6$ud1XJ9-cn<*9pNKHDm1uIF6)gKC=!~h zKyCZ#(dMv%SlND&jMXw@@iJ2k?U?-{F`0o~>SZUZ&m(09gEb+a@`}gAE3&={(HClV zQj+l5v*VAr)pL+(z8oqG#rH=T{~*UG+EPVw<44iY3_e`ew}9=F8f_lJi&3#%SlSEX z=#JF@Ax=EDP9v|+0dk{nh4>o0GV{gw)d+%X8x`_mIFH{ledvg+X6KZEU8@i&r$ypf z_d~(wi=b#NLzd&aYrR%ag|!NGGAe$dT-JuyOsDAQ9ZaiWS*7=lJG$5PX( zw-}mIc%zyLL0d%n3ANT$7t@j+nlX}92f-A@^xgu^PGOQ&EY#1bS%z1RuI`vsP|RYq zXLFzrzDv+Ce~M}7nOdq*Yi`~_&i=T?hJhTcO*gokT@jNn^&V8#Co!hLcZvOnN z+KJ9={accOtK_@P=I~Fb_gkFCKM;N@ONIV?kOT7Wk!}RJSB1SUiT)!pnWucF2nV>v z2`+-LqoH{FoCm5N8nKFukXYy(1|^;Y=@kW1b!tX4r3zEjO)PC+M3O=ABL(36%a_MK zt{ZsHZtB^BBXJxE@O0rz+yu2if5A}zHM_V@kmsYEmO`T>BP3`#pmu$zVTA+~ zb(X#=r`t>y3TId2=94ktV@^awG>IU9Au1se5)|ZpHGr*FQ&e3yH}$te^d_n z2^rkn$J~D~y&Ly38yx&o%sqFBc=fFpZJvu~!}rw5JF28n%k5kVLBIRuGP4f&?}?RY z*UQ?`?vUfnkEGDIrNyRbFOP8frf zBCGo?Ve zZa~O9DNw0K_z#u(2!}`J)$(Io|GH9(D2?^$9m<^^n}xJQ{5Mk71`gQWKfPRXo-I#O z9ZE&EcBsJvP#v8Xo26C0ir-Y%35_^o>~|s%o?X2^pQ?ZJ_^#C;w?gG>@hI@QgH^Mu zwhfqkC)W^gPOol|0KRSBRg5acwq#Asvrdvm8CVpj3~q0KTE7|kP4k`BP`j!-&~q;^ zo8R{@46rNUq!Z`h$pf(Z!bRfk$oJQ9Jwt)ysf{l-p7O;@WejAbZs!S=vaTx_tj^Ll z5-JWy2+|v^4o~WZGVAky&bR5lTn;vEdO0aEs@}tWHjOU@tBs}0`%+-i6&M9IYX>OR zP??>dp-WM*rdaV^PpGuH(}hoMeYBNuk~(6$aanIy0Gf~oPpnfY%d?4)*X1Zf zxa{N@Lj=|7RcFFe8%4`b=MNoQy37>ggM@F43Zr5p7u>5z`=adn%JN#}uhKLt?z}kR z?2L}OC#gW7{VGop5&yd1q`nq+wGg;cM38k%V{Z+p=tvarLClO`gA70^B-8$XT6_ge6oEzHvrx#tA zmszNfssPQ{YxGf1@9uX4E>D^$?}yVHzM;;?qXOV~&rcSq8zx+NHatwbD)dRu;}KRp za1c+F9rZ8JB~@4%W{-Xw-j~1~3%XovWC8|%rW0vER_}&1S{mecaBu)<)9nJ4IsJiQ zVPVB`necFMk6ew4QIU~=o9?pwb*-^RC0)T>-@t-rfjPu=wK5usJI;s}mj@FB{+ znw_yU3{ffOaB>}?#&{UqU(jx{b%wp7(7=lL{N>9RKwz7x9pPV8oSRcsbrCCJy0QqZ zs5p4?I7Q@sST?`g;Ziii6Y9HlS7#I}Ogg{z(4x6D@OJPjUD?n<8}u9OQ9NSZ;*s}u z(1HcrThumJ=joH~X?=O!lq=_)o21K`8rWLu1MS`_;!Y{}M$3!wJ0Kpj+g-%}lqX2f zEy{6uJUMoG{WUU+*PvP4XjzL^_;n*;1=g`ur*mR(_4ME_$WuE`C7-t}l$)b%@oWf` z8ba=J)GM40Yr|ZW=W>VnA>jUMma6d?ySysH`WAVM(C4|mS~V}h!nb2u%Gj{D^PvGO zo~)H?)yfceORIfxuk+BU2J9MV*r}b15bA@+#rN`Z-&d#jHsZgtx@P;Ycox|w*I^zP zBt3`kyqmM6%HKG+d~A)bjs(12>T0wKl#Wj9TxbecR`4^`^t?Sacp6j?KX-x1Wt4{vN-*xr`1lnbxBkVhb9h{Vkb1^NrK36p^+?VaG zw5jvlYRy(6Oe~mMSDxG0p*~Bv>$P6jb)-iV3jihV*4&xMAdOZh8vCeZY&N5l0*mUj zszn?p%0h2PH-Euu>t$B5yVWJf*TBAa1A82xQHZ=w+ogV=qmMGZYh2*dKb%E5*77H+ zRJ1y^PxAQvo!=PiRSOd?>v(iT5HHku$Zfp$D3;2#YW@riI>NLlusf?%>6{3ocG}ce zN}X;`y^~epb?u7JM#DU^NqTy?rbeFU|LDy#4Ow{yLg{xtOUs9-kk07v%@6M>O!;^h zUo|RxUR=<-NC;Q8Y2Z_rV=uvMZEWpaIn887)aO}Qr|6QRQ^H=ssPbW^qBs3>%u@y)Hzoc-;3wsNf4 zmZqTWgzoOHtC70!r0U&Sm`0gv-YMgGTkD(2oP73NI+9AulGE|fV9BjttLZ>#Lp(K71{JVQx=tK#U#-#s1PRT9kdIVo=&XY9n_jmL(%a@{<|Q|*1%ZNMm)g)Lk_PR}i3|_Y-wT8sR2B;>AL9-P ztvVm&(@L?~!tR{)`{;?ckG&Q2Im%AsRf*Y7IXD&>o!5BrCxdM7(!%I-bQnWOsHxds zY?a$|e5RsI&Pz%%&Mb*M zI%=)Y=EcK{C3mrw6kI3ad(Tsq5;P_4Uf|3rC02Ky_L9m8>g;k=9qoIkb>2@p!YsXA zF$lDmf^FtUT7$4ra;>>$_Q`<{dIV`W9Gaw5wSkiUZannl#C^lBy4`$D6*gS+yH6_qs-d<0A&Vk-EYeiE}-~H(s1VDw?XgDsx|Nht_`W z73H_p$1&RYnjKCNv+;^pb*)mBRV6t`a5EBpz*0V}M6gkpAM@}OYmysV_1UlWdz!>H zt(4jH)>ih-=tWV}@mQ=##Cyh{Z$dHLki3p~XD{`Txt5!+oKlGSwjUJ}`8q-QJ*M@* z3byc6Yx0=8DrNq4<$!JQ%``&qcjt4ZCfz)Ooh80JDS^O1VuxwvIEk&o`dh|HJbl|k zlIFTuTtm67Pk{RXP1QM@)T+#=t@EAX&(WkTHz60Wv&}Bte$*>v&@VL2lO0&yA3gBc zLJ!ry5)#;f+FBr4a(92fQ9cgj@&MNjI>uzrDhS4xcaTX9Vx0O26!sgBA$yt&zpIMK z@L#!nV=W}c+Ll{Y`N(#4WE4eUsx(soErtYR={CLG_CwBT_&4Ei@p5K{c%Of-kw;!& z?w+j@;sl3f6DwL!vj_lVGhbKo&Z4*gGVwk>Wg!LggcP)%ek#m9Y7b${r>xbTEG*tr z4yi&MSUCIyDSNZxKK^jjz00jx9QH~)`BtLj1e>{?>}Q4J5;VgRLWXVW~8E0)piJGG!RstPGygRw-b-{`+PCfFmt3*DSjx552wOiG`m)Zi%Z|C z6}CtaU>GrLD#{Y>Z@^4Iq%3DHjun!duv;FC2Fa3|!9iY{nMx2G{)4+T=36omENn2n zX*(eee{>9cS^`-gw##`b!q6LM8x*Z<# zlKw(ysHi^x4;2C7xOJd98%R3>CdfcBy76FSja<|#*H(TEzsFvz1T;euP@8AB*?D<+ zDJ0#x)tmjXZsg?zVUq^)!B50EM~j31EFZ^+gc1}Cs`jJfit)bLwav>i>g%@|ChE%EWZ~?_=YNL8qi2+*>61W=l$t?FB8h^H6rZuWx~8yEfi5GD z6aWSLEo=Ug!^=srE|ce(@t>eHizZ`%g#a-xsc;D4$IB|C1xvw0adN-* z!v&MF)mOs*Oj99)>2TYA5S+}1Nd-NX#oT6)mQC$dZZ8M}=I z$@@H7;2%^RsfmxBSU77%3R^^SgixiLHeNIu9yPO#y8uC%-?D9z&KDO1`bHhYEYj?t zB*SN3oDe0A7x!$(oekvZfoxNetZmdY zf>GX$?qMhVvxm;X&lw^39F}u{ut<<_?(1-wYWaffc=Ou<0hL(~^@Mfz1j_eoBwDXl zKVf7121v?J;(oLB3Csa$vXC%gJsc%h+WE}Q;sM`iU)oMWlk=yS#gX)I6GqrdE=_;Z zsMO79qRNK9q0;sh^pPtk3~*6j;fItW)ty~R+j|W9*`)2#N_<4Fp2Yg@;zrT`hyliGGRgrFef0RZ_of@ z#Il7!u@QkY0s=j?5iCG+|C7lATl~gn90u2n5 zO9;|phXIKvqEKMPBlgMvEoA@_NT5$*RIb+IWB^w6V-h*w!+C`RZ|0oDBp|NiH^5Rx z^>3g5-!~zO8<945y_*2VHqV;Cd%lV{5*`f|6{qu+27w1SU2E$zK*?>>Z8wTWx#;C@ zHSoa>pI>q{JAiB)Fv0-Dk?a|y9k#n5<9s;&+h1T4AotpN2oQ*G$0d#kI`D(ekDj2e zuj8g{EYBqHvw>e|w1xx&hYvseZ@*Fh?UNEXNA~c`8*q$0ejmbzF+YGp0idS)D-Y~9 zAykm1gbnRb?jK+YM1scY;xcW*l5z3UUBZ=4KNz7)tnG&j+WHAJ0kfM^q;Mr(7o6Bt zyOX~6ovOJxwFNjbswHp}g0Vr!=wAy05t}vV^B7YXMG_!(dwpz-{clTx`%43&EP?`dMo%cjeg#2L00~ODij&ym@tN%V6gUxQ*Q{>izIx{J*~N`^W?9=Lnp* zf@ClMwdoNxaxXG+Gr|A20`Mkc=$lOR3-P~yefjUCg?6u_`*(f-TQui|+ z{P%+5-<4qFxkZ==JmI0R!7!+hK*@6Z!%hU?-JwRCh!s(opT9dCOMY`WkuYG{JKFc#Qgb9xx~U&8jVg@`9G=@=xciIXle z{YOq!upQxNCh`0c1&#!^=ngN~ViqVWTp*t2vuQs5p7vx1C3i%}W@RNdWccA43+ia? zIi+cVdSeDC=MqGV_f?p6n7Fyf6l3^tPwx>ACP8M&bP={V8Sfu9(by8imTY-)=~qHR zKH-FR8FTc30V%FOp}+8-p;85%Z(X_lPd4ls@CJl=lg^(36o@~7uCA{BYDNLv?W@3j zIUuc~tTgN>*o6=!UIzePfLAMulyDpHSOf%pq&yIQ1z&A?!~M|MoA_utmG%0|>L36Z zP9FpJ90?J}O5NM>R#8YMcAu*ixwD^ zF(>MD{GU0TzO>XkRnEtp8C2Z)1@iA{ah zobf5eOGlSXSPtIJZcrpkEN-F%Y0(%^$}~AbMsJ7C>%YtYHdwQBaNIrJoyNw-g8Znm z+yWjJGkIKBI07Lb3RobDzRV#B6EW*Ko*CiTH*=)ye5t$g^BZ0vSTqztdBEY`z>^`J zi2ve=c;~^|2lI6@S-7C}>->FNgCi;dQm~2KNB`?U;!6j{<}IL4ntyct?+g_(Gth)W zb3qHp8DC>I@?Y!y_DNDiR3pL60G9u|yqQ6m#RnHO@to@x-2Us&sw31w+M)$q5rNP9 z8=X4DzPycwwWU`h&76?_vvne2E2Cy+sK%3P*Ba5FcSusQ87}Hin+|Cs1>%Elt77os z1!i9_3Gxq3dtt%0$oSY(6biv2;j;nxFXwr_C9ZN7w7F%sS2t2;WRODSMU<$0?K_fT z?9kwL%6&-Br(I9^kfET$!(Dc`kSRQ#x+TV5Se+Ix_L{PItVG4*=EmM|QoT1fCQ(Yr z0ka)_%`3iU^72dP3XBA$784A`)w#lbQSLG)sjPJDDaOIV5Q)#b6X0z+9DdSOMkR}- zy#eHvvZN?V@#}mu3?&=-3I|=Gy$h-{7Ou*#ZW7 z+T6a`D;YG$=psg5PSDHLN6<4mt`P{c^(xF?JLFx5A&iMEg)00S{f@j+L{B71K_VeDeszhqG;owKy~OTiSe1@lW#aH#x4+~l;WP3I zZE_SPYxMpsyc?LHErp$(n~Z;n(F3L#1wZg2LAcO39xIN!Fk>kavo3s@mv>U0DHJ9A zwl3l=cSDo>QpP}r)B8mSX4U7p(v_B$w%g#BRH3`Odv0#-N1ARxa1bySav1(a+Vy&r?ME?wkh<(?_#v)XF09PV_RVTbXHN@6=kPnm+ zafBzg$Aw63G3+l*pBqQb!$!k99&t6M96};Lb_euT!8bfw|H9xd^r2|N)nYP6_Xv%S+1LAV>pX0p5&_Cf=ui-`zf7(O;IRvrc|MD|e$R&0%4@<6}j}JC@)btC* zC&sim(ZbzH4NIYv5GFAHV@Qic;SMrNg!CA3AP*@lMDj$pwWHiY^;NfN(u!Pqe9xtw-`oCal7o+_BW`h9E1Z|?OA?#P1=f>)R{Pvm+EyDVG_)v!>4ULIFemf(Q z?9h}d3#jjRx3~3gUw&+Xt{yxux_FH6HfWfI!3n^Tvfyn*;trtMZn&AF;_Rcv9!03D zb`LWQ30R6!|5$bk*;g)9r4fy0_EbS!MEYydx8ogP{3AK+VgygiC?brS85%T=J8v2> zVpL-Qt81pjh3i96n+{}c=^2Sq2MZpbLw3=ULYSzWafm2AtAC8u8v|k8Mf;7Mx%tsy zwyzxTZ;02AeMzKZZf!G~8a-cL21#+G#$Z2y9^8U{>%M^NuVVO~`|)F{UJR^9KH-Q1 zF&GQK4iPy$wZ+QA5M`8JWtq|XZj`{zeE07)ug{3}?wPzzT{+skDU)LS*WtN8(Ds`^iNvv(Fq~4!dID^2BST zx?EaEf?+4_Aqp21G1Z!rHKXDSg!Qd{sm!##iTugma9NE8$>`T0Sh6WR z=Dz)RV+MY`*Ws0Wb}YrvQSBQoJzK z6Ek^|qmliVbyEV-5|cYR=J(iQG+-aO5*?ocmv#O-=exw z!zPDoK0&_1vKgM^ z4jvyFt1VZt)El%63mt9=5Fi_eGU)PEIB4S3(Fl? z>N>7OS*^4&`;b%HMFpUy`o`f1=4|14bwK3>PL3AxSs1qw!%-*`I?jvI0B==G@-CyxKr==|PVQy0!)D(#!S zCeZ&}<4d1bQ`XxzR9Rjba?z97W^tWn-ZS;bWAr-GpGQ)hbo1z$=VIwJzQ`vy&{d8%{Wypl>f)T_8C5u;Y#MuM-8gYXK~ z7!{!;9{HZZqcqauwJkD=64}L729F4A$-K&#SoljDBqsJLiDRSLUXB*xhDO@D*iiWx zF;gq8zPeXG&nA;>1A7wE(Cc1jW%G-Wl)ojyw{X)_Ubg&Im(yX6n=H6ipr3=aB0AP~(D& z(y_+lZ7;TfhAy+|H_!ZOqYonC@h)DC7AD_)fTW$;F_1HC0_$_xPX0iszI7e*3gjbR zZ8(aZ-);Z6)}|%O>k57u0!nJRsSLlVSm{z_N)qyvyWM!w0jEwA2P|MT$|$@1HZoXS z`pBni^slS&8h2--jLk4{ktijrcuB?&kDHQJD{*$gUBiEVi?dy064i^jvh%5G{JD_$9YPZvP;!r9eS z>!#z9;G4%p9x$21QNO@VOy!&0^K{tgy(mBLbG2?J9>3iiw7Iz&GPZx>ge)Bh7#!Pe zR^GmUW=6yp@OdeajF*y@26SKf0A1Ji_V%6senv+}J3IM}7KlOJfSa=z+04;QKJhJ& zE)dxSR;MuBapYNb)!+W5UFTcgj@|GG>bz6qg5L@+yUoa>Mvho;YZ)tG#Yz}Vik63m zyE!^l%%P6^g{Q&tnSpk)sZP8s;Yh3PYP=KhBlt(eJFj=^yIBG8cW+k|kbXq_`zi8j zjCP!$9^~5aGh^ zJ~c=k$y7LLosgd*C|`?+*?hwBXNw@m>iWX!Yn`D{z>FsoJK_^#OU!0uS*vHPBE{ij z2p-eJ`Fb78j`uOqiSALaLV^<`Dl;7yXM1Ly(y-cMpKZ2W4V&TsGD52WHW-l*t>x&k zHbar6LpW%}Bw7+dZd#XI%}=9IIXzYvu6UBKVvxtJ0>-L8=c|^ z{HwP4w&sSlxMElu2am!!F-JvevLppcJ{gfA;^aIbl_BXNS7@v;5hXjWAi;9p(p#b6 zu$Cczw5XU2LxWb${lVdo?`yl4OK=ENQ_9ZqNv`$dM$%0 z*epr(&gB~eh{804ev`Y*TsW>>zj78Q(3mgThGB{^e2(tcrm4+Xw5imKu-vu-zdkT3Fr7y~`cR5me~eb#t`iw;LjSJ*~vv9X1lmPuX~`FKfjM z-1wyHKNW9m=QDL{y|%-n>O^fmB}k3XMr8fn3kAAQD?j#dN)8u`{~~NBFDwiThnW{g zG4&0Yxz^K4rM)y!RQO{1P2u3En_S-)8G0+-t`it+6R;Td1HMV;FwTPZ;QOnY7>v;; zOuRx)+OJMGSrWy3+*kp*Z$zcOp^Jly*m7D*d)rei#?`(R&p*X9KcmOJ1g=rM(&9y_ z>99IY23+^=p_Yn5fiSR+IXsl4989aFO4;ya_}|*YOOI2(8gdurcC?0A`VXlU#bjg+ zZqE*oK}}_HxNFL3elN2F$&;xWs<1P#nLHf*48^gt=)w!g3B|d%4l5lw7Gg$ZNtxS= z%!%Dqj$;cjcfuH;j;+}+rYg37e4pgpy1Tmr3>*OS1}k%OLB;S96QV?Xt~N_vx)%7} z6iP9!(W`w-zL5!c49uT+-_Mz&hDLO{@f%~Y(##U-g<%IniFUu9e9o>INqdts;H>Sf zRrhhyE_7(@D#T<)%m%8(0qNQT`LBQgcBA#O5%%tA#5KnVlTgXIk8w66E0SFW_zCMF|-<8B~6i*~I__T%Q(I7F8zq?~(I&&LCJf z3Jj|8RZM2tQ__5R6Wv~7;6;bI_TZz%yy-^*NUfvC34Tv zlY||(v<)oyOyF~Bw{wSl$`Tg+=ctJ8l!=2=?i@J=MS2@noaT?)xK}qDur%866Q=?!dNx0VS#^HO5$S+09OsmKOxjGl)qpR^RAsjA)d<`T^K;-%PkTyS#TilW2Q z@4|h-?3ER(Msqjh!Ib0A5(*<^bwXw;V=0}AS9LDIQF>9+n%ov#vRl|3kEz4qNHW>5 zQO!uk*MZVl60#nn44n$Ii{Uvbt{!4%k;&e5#g?Ci4Ormw96ud^;qhvQ3zSpq;TwIe z*Tyr!k7K0p>lG(LU*6jDhFaXq6>R+!XP{=GGDs2JA5SfWG$}1$auiZ)j34^44F@Ax zXxsb;gb_xuBG(4x-23yCH6ks?+0+zTgLs_a1gWtaQhE{guz?=e4XSRJfkzwvv5Txb zN~aO>SeW)b6IIG=P<{_vU?7y}yOPrf(2VdkWFb?nQjvDOQiNiJ`w+rtqr#U?${+>% z?^TW4RItXtl4+)nyK&dkqm&;Weciv49;zQ|2r2+%U=xmKg$cg zk2=QcZ9l0Dlq`IY5Y&NW;nfDXiQe?)rL49m;?2AIvEg-r7^qRaxxD&xQ zm(|pHvNDFIuf!aA?RWdo@Ed5*?@DlOc-BTnsK$jO)ky_eraxw6=;QXO_CkRXGh(6| zMdr&}G#`h7p1sOMm995mV~m9n`U|4CvUilt<|ih7Tl40_AhtWT*pa*gEV0+iI|i!- zVjO?zA#%$yFD%VYxAJiY7+&+g#IRlg2=`+eIkG=Eb}71nu=&s_`N6 zTICUGY>BC#|5q) ztJG%tl7Xk+^-xt-O}GjkxAAK=iax)Ed^fZ4dUgJL>&m8$Rnwocgh5NiJ_hZ)>jzSQ zZpTF~;>`MRV5$YPE~M+Ro}m~oURJ;5`~5w~g_d%U5Nf^4Q2SqfehP4-O^(3pOwFRt z@82z^V=CFYalHq1J`cAQs=(wCp=#p$y<@h97*=x2P7v=_pt04h0RCITP0G$AdW4$ZxQd4AP#y&xc*kEN0vBi98GK zRve~311dJZzDE`FE4?KZ|Cmuu-1PNmZ1_D(nUyO2!De3cgTvVydO1}Gt zoZtI&b+c82+41f{eWB~GHny>q>$tb`F2CnWFD4W3^<$Q?F2lN-{o2{~xolp!ne~)~ zgNuxY&h+8MN@LqC@{cMV&Zh?1XX}-trIm9>ea)^#V2gK+%P<=c;&U5jm{be|n(tOO z69}%AMp{1Yz;h=S#iusBvqum8F!^P7#8*>{JHF9l^^DMJv#!`cr_LMP<>IqUch(f1 zI3~W?sp9!ud;XPBDPs>j@P5Cmtj0nzZU$HcHf7bgbJ8R4&Lo?nP1wEC-P~LA&21X9 zb>WuN{?6$1{@Xh7;xPIr#rmlxu#t-H%V?L0!z38n+L6qf$Z^?`?O*q>ruogkxJ+)o zLfHB^F37(;K9>XFjK;vrOe!oyHm}jx0xA}^1~aAO#e#^MqPU&S>>4!4z;7EWFX2a3 z|5>%>>_smU@nzSVbBR%*Pk!KOC!yf2et?p;yi zIBZ-u3oQo=D|+QAtn`S5B*{MYP<}p!wyAyOoo+)1wk%)kOJfeetJm?%CLciEudMfz5{M?vT zEuIVu@qB3c)?!zz#q<$W&GPqa;u!sUXD^mEZ;C2bp(3t}Z)2gX&-%sy;0)7Od5S8}6-FRWlJHqZ#Y@G<*)`OixeaqEuTce!2^&l#w_<)p( z>Uf@vRX)5u!{*rQ^Ri&djDbOe8~@|%RKHTUg6oL?)znei3cVW0V6avDap`@XbJo=L zT*q4MH-#)nkl1*ccyWUew=^9NyRf+rG)hQ~xPA$=&Nc)pp2F)_Y0&@`e$w+MMRj%8 ztMrp|t9uPGK)>rqy3VCy-PrYl>q2*Zx~#E_G2|eqiTy5&+hziXXg^4ChNsC|K0FZQ6Em~&!0bl&m8X$xJ*E1V)pp{ zE&?#yNtV~MeYjLCht02F!qv9o_gTyGXKKA}Ss?yv{$$NBFSt#hs;=u>d0vVwy3g!Q zzAE2ohj|SCAViL}!FQRUDq0eGWWluHb(_K$Yj}3cP%N`h;yqJ}uIr^{`M2DfymGzvn;GajAs7${6@$y$s*j7uS!or7sne>W z;JH#rZFbiPFrF1sjz#1hG7h&JtyY{X$tgVt7wcBfJZbin9pw>gC>;-NAt z+*_Jmpjbi;xRT(d;(N^FQzdOO2s~K~9Q0W|!4mI4gok+1zb&O~~)xn}hD z;^zmjx03i}>87|qq*Q9dmrX7|--{dF2W>Jsz71=3J>KgRecjj)xGzhMscO#795gev zKyDHaNQ3!)=zKamxszt-C#T~~gkOUx>i2w5pmXNQ7O*5UDU)CcpKp2BMGJtgL4_qN z;)S6OMs+MO#>t}!Wrj?JnE_-QF~ks|U!0WIJ*=MFP6>++GCvk7g?^nnMpVfkbbKbo z=r?IM)1uGRTmR#gs38A^l5^3dzg)`Lz~wg@NKgnZfBQq6b?oRYPDzpi7rZ#j$px;W zc|-WZ0=`^5i-uE!k}-Cv)A%IC2N1~Q?&}2{q<!;lh%Ck`wC z2tnGgL#vh#$``Yl<8k~Z2qryDJtW1cO}SV`C@71w-E*z~nnqljivti-lG6us2G9`s zc`ljop+a5()2<|%T|pti$Ut>DQ#3)pk#%O0gwZUXTE@t4bwK0kAnBB5Xm9Fm%xximqj0KaiEOQ?roX2af} zKuSOe)#-Ap2XL3NV8=u3;|Gjzff*Rj@)v#o5tB3ys|BDe@?63I=WRb(|Ih4fX2yO1 z0t#BD&8w$NW_<)@V9T3m#EhWV=dbOe!od$Le3zN|{R~RmHuyAd?fV>7_w-~ZCnscN zWPU(`^RlTomRw>ms_$>x*k$Uc{u-O=M?o-OrU=p)3JDSE*N*e#pS47ozb8sP1yCts zLNVwKRKl}R57t6FQBq|@i?JJKwLl@B#0kdQM?6hkJs2H5M;L@nUqG0SVIEbYYlHOX%zT0(GE?PdP>b_G)>|hm) z#*Ts`9ZQWYHX9*BqPpazPh2G`Wqy93Fj0r>rWT7`V*zlhG-AXzus8VUwjSxvauib^ zWR_&8`iu(|snD9Tz*jf%OTPSJN%Syk+K4fHqVt08t`MMkR^nraJe2Qc4j&v0ag0-d zXv_~aQe*rt0s1YpqfOxG)7i_Mwa6ob`gCbF=A3IuL1hz+XJ!?@OAhAi-}b_z{-P z>V|YaW%E@$6$2e z%8q}DPsK4N2rF*;`8@0?+i%&r6QIw4v^sz?&?IzirHjRRqCmHQ7bfQ=)=c zoZM_8O>C`X8YmNfU;<{%mK$x-b$^1+2D+8w`G0xJ@BZpCB>UQNtrxNmMGT-_A9=}? zs&iZs9f9kO>T3sZ&`Uzh&28ci-5FMGD1SGE=Hlxu5K;Xe*#)>fP$6^t0iek*(EZau zQ4wWcv*`rhX(uvuxVYzj!Zw0q=l35`_8)nL{;zv>f4O#$JF}F^8gy+PvwA`s59(H41U#%@3!J(0K$h4sUy5&D+%e=w# zxo(!$(@*RXu-6!151^l**~bKr#F}8*)`)`! zj7G-CF<>DjVu;r3EoLv005Px_zWXI$f*hDYw_r^rdV-<-NTn`mhdYzav3T;2DYCH#Zs<(z#kbjuY>&r}2zD zQ?8Il^gHZMg#*sPua0i>xt{2K$rWmhV#XT~s$=DQH0Rv1qf}uW8y!isdNCV8FKy(L zL3(vxb>F;&lY~tH!#d2V@gE-=_Er&gX=e)aIzCR#%(Th$vhRV154r}N ziGKzKEyn=*{Z~vCF$nKgm$%!W#AwkS->x~nGCGjSb&0oO_Mi$64A&(Q`#cx|z#+g^ zy!@~{`^QR!)cC&p7>RF#d@a3A1?T)PbTDZ7N*STk27hH+367o0j8%P`Y@Ohfaq<9#s!#8CS64MY3g*l> zfQrNEX8}5-MkES@;;St|L@ZtIHq}Z8zn(98nS1`)6Jc`3$4FWT)gXhJban^t7}?c} zlegK+KZg%J3}Ukd?aK^{jE+@U6<_xprE^d`_Sw8z;k zH7}a)w=$Bjle>pwCiVlD0c+~N=Y2&*MI>r46+Sdb$A;}22Uh6LCC104Wk-qp6~u0H zXsR?~1B+4(daQ_ng-u}O8auXM00AGA*Vw6OMuuY>AF&FLojb$Vv#j~XIJF^^P)DEt)H@U@XG;Oi|!WL!PcJqAzoIP-zQ zI5a|-6_pkGsO-?iiSIe9hrI!)JB-`Agh!7rbSEc@Vq?fDLo}Sm`EQQ1SxF-i;fTo8Oz?I@*BM)QZ~pAdxsgGE#0&**9UwlI z-3+;@4K1`aGUgDvJ(S`u0;%W5WRfTs!i#R8n%H*>ZD$*^;8BW;$+OOfU z7Ld#9`Xc8jG4ylLeU~e1E1nI06E^6g2an6QL|2r>Y?X7ML(b(GUZa#@vyMXv1hM$ZzOh`4)D)7 zj5*#0P%b1JMrmE?h-nI87K=HOV{Eeyb zGzqaeE>Qo?Eh<_ZL-ou4tgKzldzYcbL`sZzYK~j0pcafpv)q?0+gYq2z4%|oZU2D2 zl^ZW8QBb|lWaG9S<}~V7_w!>jpmLk6kscd55y6<@XJ50i!H`^Q znroOpRrNWol$N#v3KWsuPVfA+*gV}N#j6YzheDYMg7qtvvj;}&o9dWA=x!7um8R zt-N)-e5G&`@OXHq>h-pDh87NZ;aMehgb}D%h#>HrBu`NwAc60!efcr)4H2$*j;`nz z_*E`^7z8r-+XLT}KoHsgAG1<$9-g7e;Pl_dT^@PT$b6;o`r_g}uGUcCD={2gb077l z1l+p6Zna5>VJ|pdZloskvi80Y)>|jt7Z>}~1MTqv2{;TTLjlei%^0w#>-0{p4yJF9 z7cWVh-~R_C+Yl>I1DyS$+$>HGuW#14%K9fvhH`9{HL)f0En?u$ahYZnE*PMg4LW}>{Oh5bOT z1G&dg4AAb_*KKN*D#-h<8DE;5f@3m~pcYfH;x%I5ty=^sMtpj3u&vS0HdT&)tKA2R zwo?~Gf=vN`@(cK!x@Al(r>EN9oja+>@sWq>cDcZ4bX3$5ta0&e4|@yXpsbt_cN7Ox zgZpDeWnV8BUZ{?ntuzRU-09P4YwQPcz`cOWCM0+5O246RF~v?eV84c!f*#)222RQy zi7?9q7f3e+^fjSIsQjfHAJ$i2a<)`0*eRl&Gx5n?$c=xld!-I%OET4z}* zLOP{|owR$^lhr|v+y8`Bb8}ZLIqJhLQn*uk)L?%RB?-=4rE#an^`U>TaOX@d?-W5MMR#_nSMLx7QJ-)S5qEsQ`1_3ggbx-Q5Nt`wMtH z_YcIq$7cX&uy)VYfP`&oDgo#Z5Z$sK=j#{7E4juP1Dw&$f^Lo*wxVr z2G)5tgiX+VgDTDDO1ujCo-CX{i0yZlwyj5ZAoq%``cjI7<%I%I74s*k7XGb9QCPMagog zMEBd5`kQX;nt$ItOI&dKM`HLSZ3}t7P92Z?aMoJ7WV*ZTLfFlwrIis~lJuNsT!dOR z72f2>6Y09Or4{NMdKIY67JLeI_(HlhkgJ;cq%}J`d2$G0bCLf2C)v;=ucf(dtUFA^ z^h;9$SLcm`;n2gc1d8g1uPorC_-N z!DfR+ptDnGaY2GXC4|ntwq{qEHlnI-b6(J{#C@fAi(MKwpv5hOfi!VN&{JZ1I)RIv zkplLv@J6u1l{ELtLJ@h$IKkGA;dd#xV3M|Li21UyXt5-}OQ*wI43W!qwJ1OTQs$r znhBE5BB}b{;0muTCq8A>aT<|PuXj4j6k8)IUm7%VEKkAihT1)$Q0LP(iT1}Nd$iaI zA`BIkhEo2by=m3-_Pd8{+)+5#pScvdg>0-> zQiU8>y@^VO56LmGQuk}O{(aI7u~CQG*hf$G%sVXS?2v!_9;vswG-G-~W>jlsbQl1R zVk@nv8S0JT@f>S{Fv#c%Bx}dd)HFwwK|)JiCmb#vetT&t_{nVy`7EPW{t9g2nrpba zrWbljZy?npi6zs%DPBqyfD(<(`|yic+G2%|lvLVsqF?Tok%~C$HWais0ka&l+#QuQ zy06r&5Jtf+;9|v(lD%Gc0XH-DmRA=xS1Rw||82Yc7xvdJrAB*kZR)c_jZR}Dt-B&s zT2EP}Eg%4Q$)lWF=ayfP(NvS4XxU37#NgZ~V%2odtC2YKi*9@H>QA{bQyefj4KBLJ znYAuv0n|=(ES95#Q>gt(jdR1wzk9!4)eS|Q@{X3p83UC%=iz`{Bn1IgO*y8K5H35r zrPz$=6>p+p1#3F2?@rQ_iM}k?9~~=8Z8hj-YtZJ2gSFxMMp|1v`1M+C4VidO^zpJV zhfSskO45{=;KLh~i3NDZ#Le_H^+qYycQD>-dVsqzKA7V!4Zw;1lfJ(Z;L z^mer@Xk`e!q9PSGQ0}7SC@$f%ii+ad6W6z7YZa)|RE#6Cv9MuVz|q zhGh9X?itST^1zW-HV!L~*pzy?*;;-|VXLXlvSvc+mf@2uk@7Wih zT9vS?M`;f`ks3i(t);c8*;&}hHr?XGSpi#$m<4@vbz$F1zf+%QZB5bV5XL~w3F}C> z^rxN0+W9EQm_-p^JtcD$^?vE{XQxd20IS(rJtdJ3A?H4ilQnJFdlGsY(nAB=L8k@B=5%~t!7>%e zN?e6Y9^o`B;U5)TYR_5WkrujVsXV``*d{g>V0TvM_=|rYd4^(gv_F{dLjh@R=#`F85Vt2&$mBext84JljKgvgpI{B_y_{`;bq$P`S1%+m_;ca#cI+D)tZ1u#|oOipwD zo`BPR8#aiXlUu4l(tvH*>EDmK?o#NX=GzS-o0oa=9smoJJc!lH-Hzv9EvtoiQ>)7x^Z0@%I_ z@TiVm;!vlh3a;_glF5?TX&cVHRsZ{kx5yzpuUl=Ez-CE9J~BL7vn%y3nF!))Wo#wW zn9x2nGwZ;{r-qO=XE0BW=FpENMYTO-n=Vzq!^FtUWSMI$?UT(pT2WY*qWBY_G7m6^ zAt^aR%WSoaxhgue?n}4KzPDi$w;N^%Y29=`&7M~`tMSJz8LZQ>Zbca4rTn6)|Bf-2 z*jUvZF*D?Ip#C=BH1=@nD|-S_>~SiO2%}Sgjkjg1Ub(|@FYghfC{VWkzsMR!G`QtYv=E4ljebX!p7oVx59+l$#Ug*$GR9%Mt8ooSL8limYUW=1|l+)tRBh~e$zmFA|#*CzY>;|ys<-Sw!V&vW!NtG zMnHHL7-;6(F6By%5&=yhXmQ|Evr2IXo)7+Tg0!OyO*Fjp<0V8$z)f4WM&l^mn+`D- zTjmTJll$O>0V+?o;qsY7pTJyYlkO_h)N>cC5%zMbRT7%#a7=%>kB`NzJgalRlfch7 zJUUudTRXkB_R<@Q37E_OyS#h^TnuB{6_S`EqoNT0bGY3H$iOU&R2kCG$Nx~x8bzg^ zIX;c(#Ip7c$Uab(ma>Pvk&wqrb-{|(Pf&g@QTi}|(0gI{Bn*cMT{ zu?@LFE)WZ$wY5Hxyvm8_KFDyBsG%S&wM8Bz^@^AbMP)p;ai4U}_D+M? z>C;%`k}Z=2CuRgXN(1q6R{`i1Vw9e#=lYO{3F!OcgwVVhd*4QrKyZNztqEJ z-)?wefRQpcuQkD0?LyEz#a#T$a(8l7M|$T2Foor!QI7MF(-M}zVx-Hzup0;>Q_sLu z!Ys8{SiOB2)rr#40=_r#Scy?!Ok~msm??5g^|1bNq6ghI+|p?vJgfmhW-T!p#TsnvKjsG$rUNe zi5-)$v4IxPDU4Bc^AM7AaMoE-FkAOgi7z1Z0O6VV`uz0vkt_A7tyiR#tWw=(?Oy!R z{N{Kus2bh><&l6n;OsR&UjCZql{cKxiUqAksZSd9Y`>6qavv*8bUEBA3mk_A7ud)D z`hAzJW~SaZR(YIA94DhWn` zxk9lSq(}63axaM#DL!&MTmIRWIm@>sFNQ27c=m-!#0H_8BVX~Kkn6G0p6Hcu7VYCh zSVP#RG<0gJt9NwxZfT-#iE257BxU1%)k?cw4g<;Z3+l^5PxuEW=h*cLnKPIABd`w) zWp+ZpMBWL}Oh@2TAkNB>l|r3d6dNVu*z?`qe4QK~HEiS>L& z;}4yp;iD`zv-s&!!U5w&B-6<;8!7g7b)XD5znnJc}lT#+fSB&_om1XLE<K~5xbrp}}JX}#DD1853Za+W|YtmPbI>o_pxY2@lUFQ`j ztKaWGHk+c_VbK z;B#bDljn|uC8V7DVE1TnleOZ-OD2tzZA+@)J;{TLOx_f298UB~`wIhWHb7+Yxqi8o zZEKHbLvLgjD)A`ffUG=cBqJ@&I=a@&-zXBS=}hzIj-{R z?^2@dz?NdoLxCh`<@N==ecXflu{{w;oD(&4rR_>6O=YPLJ5PB1oD1WL#nF1DlE!XE z`ydlO>zk`(<-@prbe)`Is4U6h&8m+f*bX6FxbR!=KpO0`@F%UPwZ|KDst=okkdJ$v ztxGC-o;Y5Vf}Sm&XNE8?Firynr0VF_IDM8H$SvdRRR?-e0^toq(3NxHcw8g5LaYQ=DgajKp*KlB=&hQYXg_j}rBb*Y|<#yPHnL zNWrCY%x`lw5xIlumK&|r<+-J~{LaqK+_I0L?780~^p#n6?#2@4$PJ*iwYA4vz=wrq z)>p>a)fFf&3;MnYGBPTb&t>2PLP>`+bj2F-c?XT)WHE&2=8N0gP7h5h-CuGuSOb=M zR(&MTe=*FI@|Dg-y!W}yl;Eg&MSLTwsST8xz2-8EorT^oXQi---1R50Lu29M#Pc#H zvV1}U;y*<>b@()6eH`37h3cx$F0K4V9Q(}8^R?=CfwJ?e9!~J?A;jS%cU4%q zeUg2a6w+jZP>+e7yFzZ{i~ zy5cu7FV5(E)hX~l2W|~zD24(fzxg`l)#S*}`+vV;FPi-O9+2+iRBuoYcs`Ke?+F&C zEK<4=xOmfYY9lT77d6XRW?Ww~=+U168+o=x3OA!|R1Rw@?p)g z&kGkr?`8u#L&FU2(`>C)*R%eL+g~QFza+5Vg3>K^(Ih>*BxEo{nvKM`MM!7yg*Ev3 zoO91$sIXaB?N>OT##=q(=!!l3ESjSL&3zkjiv9PZkEtLK9zMtCsP1KLXWT&XpYH$< z#&j`b{)0TP0-qkZ9uh8VthrKRJiHJ?%3D-=KpHWa)WfXnZ*lb zZV7|aE=c)LP1WvtYjJC@2EiiB!pnTtd+SecNK?je)5a+(=bK5fZ|`%u;)*&kp5!_13E`&i;+zlDXzGsJiRMfdMXg zACAWg)5&0}sFsgAxB5N?LMq%CjA@>a>x5Z6414J+W-_b4HLM*RsuL3IZZ-hRo?qz^ z72%gaeIBys6egMb@bG|(^Sw@>?fdykiE+o_(afreIK)g@-BKp7!qyfMw_&0BCUyKw z*7UrLf;yhW7nd&8eD0!1hKJk~3yO)z;CnB=SZuQ{Sz{q3p(|4`UbCyy!Y*~=Jl{DD zTksmGs-Ez&FJ8o(LB{oPf*YUb!cF`kqfIiM zNsE<}!LwU-Ay(cm_j23@%C5J~VvhXwUWErIlhi485bye1jj@)(H0#}u9Pq0JR?Yy< zXE8o*K`tQd{W>SnkPM_NFk}AK8iL=d?>T^$`C9TCkZ zU$c==x^ee+6Kd>Hj7TZog~FLquE!2hVN>VxN%}n)lX$ncmN#yT!-x6FoesGygo_sb zk#)rfiBk6YJAE>ndkdn)s!<~)*oex76}KnXsQ$*X%({>oXs19n=BCF# zpKHTF?ye{I2YVzUcf->aP0@x>T7ScMt0IDT_?6lMFBJg<_X3I(&!erj^bd+`h{D|X zW~Ovqu)#vHk&DK>NLmmh`%EB2@aAo#e9_egSb{6lU&@X3V{}l*81YYOFx&^!Ym;K4 zOc6$Di7s4h?30D+t=ZRSUr9g`DTN!lG;(7E$Z4{&{{L}vK zqtJWtGrOinxcx)Bbx#vb3H8q|c_}H20OxXSbkxXY##k4S>H-*>ou0R+fPZ|Zpu3u` zZm6Ub0V6?VA|Uzd{pdoNW{S{+%)VclJv=OL;Y0%JS&alBQ)D1HNihu*dm<{#0(G#( z4#P4vT$e_yej9N^4B3LygNs5Haf1&i)9|;7Ng~}$sVyKC1qWeW6%kho9b2ukr2Ofl z=pud=rE;$QXG2f>6SCG#Zm>FSm6`|v+{0s5y$y18*VCdz;U_IL(O-+uef z$Y6x#x3v-3P&c)-ARr+4JRB7Hb4B{f8*w018jimJ0BCmhKWy8JHA-h%LVGeVAm&@*QbQNo^HTTBj5uy^K!bskM=3B zy}jkV7odhK;Cc!Ns#-j*sK6a?eVU-9M~eF?T}clAU4&XBRD7P+bCN2w?EW2RvbeT6 zgjF|hE*yb!yswM%L*Z4aF@OFav)B`={gz5==hr;5Ky$s3OJbSss8#GHm*03W$&Zs#e=WaS~QO4^=lK(Y}55J@uIZu8AEiy_4X*u2N>g ztJ~NvG4L<3O2gN6X0I!mnVCsGCj?}l4{0VU$U=Ws=R=P~RrXm;%Q8(=iZu=!=Is7q zaB*RT%j0!x)otRm&5tk>r;{E{yaVm;5EG?mi4r~(tj)^^ezX=;%IlJX%$0^`tKDFL zbp}8nQI<0@JSXfb6l~BBqct(s{iwsfBqbKqm2mJ~&B4}xx@HDS|67{Ao}0vOz1x#( zU0wJ=g~%MI0z^u3v}u{^hP1&I#T}eaQd9<5-XfoXlhLlp(-pBm|?=P>Q zg9D^Zz-MG2vPmw4w6fx2cir(a~f<$$77Xg*b0yR39b^(rt>5>1g`QPG-9nMA4<~9iXhAyzw5?s!hH1Z56R5cqg zgG{yuV*rp4{x0dYs)WS5E=9Myf2Q*C!#g8M0Op|6asb>Hpnc!K{CLAKdt zknYeg6EK6`Hy(}+;e-#n={fBu>{gVb)Vs$jwJ8T6xR;sZ|d`6(^U|s@l zBOw5DJ|7qK>WcH8r!tG1D)I|WCfp}v*IZf+gZapB1i>g#5;^P;Cxh7qX-3=F@!k_+ z?imzpWAz5~Qw~l9MD24^%G+O|oCb@@ZUm6Qi7#(J7N0Wv`w}9D`jeo%fQr=$xo?Ox zHL8@k1KtAFN0P#OzmJ?Kjv?FsIK2?4J6Hp1&|f^NKKRP;rmHwyRB?JmFmyv`49vta z*>nO%B=hl~$q6=gX;wyixK#qI0>`_Bl8Gpw$)*I|c>^XWy4*{woSA&gojQyp{I9Qt zANHPVCxj_i+5vmWq#=vT-7(MC=Ue;Lmg^y!EDH;Z-rn8_B0hFnT3PBiczAfFWL8r^ z#t3*b5GXp74U!9|*4?#F#@5QzHy zd?i`3n*`6B_6+%{U);nwaU5k_Z_JtGKm3#ARS)U!V{sXd?)T`pdXSj`$);;FadiD z1ZIQu4o(d0q^!|yDZiPtpb2Hu&0%R;KC#tRHxZ!(ICWnUC76WMlmzQ38x5?fsojE_ z{1NRN2sA4mHKvHI;P75ug#hj+U02y753^zO_X5Dv=?vreeyQGuoSgi7^V8#5=j$pO zqK&XAfIQEKIYiPVESQt-MuPc5?0<2_Kc zQa{`ei{!~Q=SmA7-InsP*+R+@#Z0=VXshA8i3=64;)0ea- z!dMsTjLrwG}QaIg!Q zB5`!{ghtTS-wFCpYL@tIw)bO2iN-cCCn7d}k+vRY`>Ldi9gNqA_A#}JQ{EzQYU=Wx z;M>XBHE)U&%>Kb&`3ZSd;3F)mp`Gfalhi0Tc3D=)P?VSB$CjC)8B4wn^!;487|5Gu zj>)PwH>Y!#jf(q7{ih8$?Plpm>?*7(L&`mu&sp;8sfyz=4WA4Zu)%}@9}G%@sT1d`GkkJw$sxPvp zX%{_3-AlC{L@rk;nuK4fia0$ZUbUU^wij73Pd%wa{|{!a3k;y-8sxjkvYUT5FmU-0 z8;{UB?uJVCty zfFMa` z2>9XLw}e^!7k)ya(Dx|W4#j*LQK%65SexX*>|_?NJ*^+~W5p=aH@vtzqc!Vs4U#j&R9WcbNs z#lw6avlwz!JZdF95-5fAqq*+1zk%1}N4Xb=FKm4KO||s^!Bf1Ba(IJ{x-vpa_$t73 zYI}$6EfSN}*Q(mlw{i%*0y5E(J@g6&iUZ7|5CdVyi!i+5KX;6Z)JjI^G^`Sj=6tmh z>G`xwtgz4Y)0lEgEusCRGKNmleqwby)m{;n8TxpK`_L#V|5!sx_DM|3J!%3W(b`S7 zcM%l^&ADnDL?6-M+G{U~MSN!rkmVc@l_e-YFMB3OW)g-`MJnm2YxS%AZt-CZ{G{wd zIky1!EX>HfiujoNFIL~v#0V2-?&-JNs6w!Uvf{0{uxP+gem>FxLq(ii(X^71Qnfxm zP_MLKD^n{5wrMe`sY_E+7xH9n+;%IxZst-_edk*P^_|nx(*XZj3a|JKbZsCPU5e`w zT2AE`qBFC(MZkeE)s8;Fobp!LfMjeV=SymJI7L~;q!l^Y)KK5M_TIS$YNL+*WKbyF zXDfMhg21;lg`Vvd*HX79%fa`QQ-FTBwYBw^41TG>n?-vemr}w?LG3B1xDE+r%n6#} z4vpq*p}}@FQnouxdj7 zDEjMYLCMx}=AlX{9ZIhx8cUrCb19aRjkWxG#_xm3UY7gu&F#?EnV zgJSUCCwz8sB5cJkV2fO#IU(cV{V)by(JK4^B{@;YO?Jx#lKNbkTS?JWkisu^<~-z_ zpQaa}n>U&zsK@_+9X#UbLj6~1r&gk)8bwg9C^6?viUOJ$j{Cp>S zTg9$HUTuTdb;9{qT>T5Lw=lv#|BHUf%KrjJRYw!dJ;qdiGP_8uG_j**FISXP9@w%Vc^0v@+!`4E*o2t zW`)>MAr)6-Ho3h{L2-z;Sri*;Ff|gA;;}`{E_0goYr55hQVAHcRyyCSdrD(V?~a9^ zp4c?|9%)sUa0!k7G+Yf#_G#@e>ahXEeA(!|{Z8T9jvR{_d8OSUO4u4fvh#v1;D`y*Zgnv~K*bqX-`M zoCHC49sTFg?#%Y5cTD9P3Tdr;44i#=1HxeTm1>9Vk1qI5a4)7`)g`<;L(TO<3(3zDG z)j*iMQgBq_hOnjus` z-G!9)YgJPN7qG9duc0NTF__cQd2ME=nGvP7rY^B7w@4{M_wrn@MR`>e84G1S>~0w$}-CwJir^-FMBBr0RR{RvA`ES!Pp*i z2;?AcOUqjaY)$@~x%3?fZeV0xxM^m|sEjEseAH*Tt042`%R4UO>=@umX(ph)$4L36 zHMc3KE4M&7O#i-;k3vBVK#hHP+jV}?h{{;+!f9V(bE0|$pvTsQtB__et&u zysiu$`h-i2(7sZU)Y5`kEzS$2=Gys)v?{VVD>DrvgB}wYJM}M8@2;A`FgtN%4#gKZH<{59Bb{SrYvssQ5nxaIUSt9631+>PrH-L zOg@S0bJ!iXadybcjHF|9I?X#N2mnP`COA>q+=*QloaNRdu-*4ZrdOjw;%#;n_1Z>Z z`iOC)!YNv=mYPUH4%dJ`5!x?xsYAI|ilN32c0cR=-7V!J6B``X#buP2gHpdjm3Vxc zB?*p~mRCy!>{}7@IQ(ffzC+#LP0WCAmd?#T$s{99vKRHT0HJX|Ok4r+%hh6&eNJ2w z)Lh9?Sv$HkdJ7nbg1_OT#{;kq%8&d0d+ZX>B@1F~GI{9D-W|l5IGK*oy z^;;La`C*Lk6ImJ@x^<()=ZKAa%Pl$@So7A9qg$M6ymVjhJCYkAb|57qvV(o2jT1dE zGBGhRIJnT{kf%Wp4}yb-UtC%OY~_z#IRK2D8;~neP*7lCV8A2!Dqkx0s_r*LWp7NV zULBLt?4T2&@GU>CG&nG_UB#sP=3`wr;RanbZi~Af-g)xrT4M1cy8_|Q8D%qz(JEJr z$ic+r1w`++(8zm6hEOu{v5~Rmsj1X?o%N4mzv4=H>3WvOVRh~G`UM(k`sXs+gTw}s z@&zrWwMq8f%!~vwIX~BZTK%q#=4WOAmMb$4kL$nmXb}Z(Z*L&I4NxJUw&Rq)r1PF% zPKcn6zw4>W%Zm$-n;9Eop{H=r>xu{XvG9+dALKBn)cYBY^y=IkVt!b;AKgT*{nTs& zN=Cv!vIgL{V_{>%4jz;!SqHOU{TiUlK^c4Wjo}W?@n0v9!iFzu95A#JxuB@5XmJozOgK*ieC+)<;sSnBeRJ*|q0o~p0BHLnqvk?j~^BkwTHXh&ng z-g%$AroORGnSx0jN3e9eYe!jap~9g#am=CV9<6nmJ&o9}+E!k{@v+tAntI(FwGyVX zJBQ*-61CF9;7CiJ5;_7}Hibh>>-FW8$2+sYM4Ze+yAxYA!zD>8)vfOZLt9>g61Jsb zY2+Bdpa3gyS(V%o(Z${^TYf%%w$(FtZjJeopo@kjG&QoM z8!{Q&Kh!R6%MhMsf-yw1L~bLk@-4PBad-bSi9Qxd%t3M9;=cS3zVkTDp z<>e(<{;n=ZhE(Lp^%nw~Ta*Ni1kM;)s&#Pi=)q5NIy+~*)W-Ydd(#+QBieFW3icie z1rD4l_Ck0mE6+vVkEJT9(XPMqOWb~Fq2a|I>lwpJj@1P`LN9j%r7Yc@k!PHoRNX8J zixR)m)zI0r!V28Z)xL9ns{Qt)?}$4NRBlTvZKvm)uActw#~2x&2oXb9&1{U;p8gFo zDhD;#QkMax;eA_sLaVqED<&lB&(t!hzi5&I7c~>Ofl+qi1*6A37rbyYDH&QP^iS!b zCH$pEtvWe4J<_^54^00J$5Y%HAYD+`K+j9$A)6m3_($uIW`lr@$Uu^^X6Nf}KMUhw z={{ga)8ce6wODHfK=Xi&g*zZ4H#jJ3Ti2}}Q(RoEK@aSaKA0MM=cpvd$LBv2qoMuX z+jG6x9y+yi$~1V4<`@t#;q>tk7^6I6l zt(271sAEV$B9lm9VDu7eGQ4%3@*O6ZVYKf&9Y#{RMlU+kx9)Th828Q1`B4dvEK z)wY`A=ruT4%+r@k?M_?9kg6(cIx$A5XoUT^Jod`Ip!mQ(D45HKK3U>>Nmav zJ&@l4iwxM|5em34CdeB|&n_%1EH6I-gk(4#Zn28-sG(D8VGK<3O7sdkj?b!?*w+OF znk*A+e}oHUV|iOEYvmSayKw~gEf`~ZztBuCt}0=3n#WK%G*G$l4=hQj>MMS&DyN`c z>fH{v7&6q1Cd0!SQvZC;QBFxsf0zZ)Xcrt1eT=_vkaK+CPt!0gx2?|eelU|;K}zmF zgp|xo*=~M{uoY~z4jV#haPEamTkzt@ivL0k4WP1Xah{>dw{;nEgvNb(MIRGWh8{vt7|L z<@4W!CYd2ohHB(#E6gUhdc3VmQ~-LeDCRe#rYCmF=gm81F61#>K85CIYzoJp&{0X% zL5uJo8i|L^#dPX`-XIS5EWgJm1w*=RvBVmck>o}0bH{~vlsBaV-HT(?4kSF;KO`+n zmP&_gIik)iD$cM<1`THoZ9M@%j*h-UFZDbD)Yx*X>3%W&S0MpnOjV&1rNVzW##xfBraMxrn2O+98u-W$T z)i}JXn`MkHTX&b}q^@std3D-+>C4KR(Wp;Ob&x~5I$ET$QWkd8GO!=Ds^+UB>`chu z^EundpeM+nK&yFm+_tdi(NI-|O)V{~ud_HK3O-s6p*~jd%sDNzgf6AEpd7b+vz@Rn zxIHQ(Qj%qL0*>Fmo{waNTZ$u6nq$tTNVs;aIJ`^^$slnv(f8#Q)!!cM$XnWEjVfcL zY>t~wks7$I=}zw)T9aU$nVp$D{O!KnwK_@MZOhiNS~qDe(k`_o<-E{|_yZmYk!&mp zMxL;rQ=K6rTVdm$%`1X0;PXg96;NHv?raiXd-my+j>}5o^_uI9o@=`dycsxNtObDV zlPN%9vmTM%%T+{2wYUvT&}OlfbCv39ch%g=8uG*8(h$)b+2d|of&{M?dT7kGY%OR-lQ!vXDQ%f190jl~D?E4m4BIyQvG1a9cWOnV^Uvd7IlFewN3{0F-;sk2c0I z;uFb4yzjK@Y~e$LMI_(9oucl4`gi8|VN7JH6;7cRx3*a^pxj&<7lwi2>$Yjh z*-2Yzg~|X#pT>52ODPVKx~O*9b(50o>cPHZHhRC@J^*D0%v@zJXOf(IX^%vqlHMs^ z!JD3=K3b-s+Zpm1@K8!-KtX|0h_J)ow;0poJl$LOafd+!tMpa?8m zN8L-A#ETBv8?Yb8o4R*Nqp6cx9SVCcRYud(30p7r$2F2CB=x=^lfV3UOUqJW_j?Z3 zi-Er0yZ^!!54=TvFaF#o!PEw1GWhQh#p8mTHRET@Aa8SE?LTW^DRqPBZ)m>NZA*}n z$UwGoeFdKoF{Z!Z9BN&cRdmSTqNgwP&q!K$-F^y6#QC<#fCQDE%0XqdB*eYm+Au~> z6`U!@P{vF>KYhBv%aJO8fBKQLGcL;?l2Z^7F6eznq1S*mf4GP2oX}G5Jz5qh?)b7g z!cPz>7CH2R|K-dPPw%1&buzUuB9hm88$&z}p>-~P3tWifCy+!!Ubi2SP0GqCt`s*Q znR)+UX5SdKOT4Y8y{MwkCR)qRR?ph(h+oiWfk6CvaXT%U*u9)YVg~LS=oAdk`Aph9 z!%4@oS@dck4mJ{FM%Gl~+G#1&w}4PI;H%y}}C-koa$R8FpK8RYKDuN{TKq>e?kDc$|34|NP5Dtp_AEJa>XXcs? z|355%kMw3$YG~v`{Ne6TT53jaB`R)u?~SfE>h#IUNlcnA zRXR;lp~iW2?^^RW61Atmocay6?vE#p!O36@oL`n!Cv-`VF=Xr*lYo+Ciar6Z$edCv zbqtxkaax-8aH?L3h)`8YZ8-0vN*?UVaITMi-&gYFQA4NYctP zIdvbMYuGEEI}3M7MKd!B z(~W(gKAoRW1x*($C;OmRWzq$}^6TxhY?98w#1B zY8IBj&@+W5+qL!;t%r|)44}UEbC)1<70)iE;g_h+Ejy_7&5$`odyflSD9-VuY+L~Y9?HVl+Y)W6jwLnbCnAm$}3q_ao?B-^b4w1+^p zvZpuoE0r}-C}$6i$Br$P0EbBH;YHEpd%J)=YjUYuyieoN_~8(fD>m;4E89_ zjn=_jY#=RCkb3Us%RH@;aPcLAyt(JDlPN^&rDX0C(wLgy2@QsMGS|s#)S=duch#2D z;~)JXn_kvUHils*N<52C$A=J~TWR>%b)Lb~r2@4Cz2+C<)$fvvBu78gc+OYlzOHF3 z7iUnv0ih*3DE6)l@HmfA21=uZxIXOYbMo7+fES~UbD*-|u;l~}SW?8LiQN1*dXkWp^Hc`q{~t}~7#K+xZS81+iOmTnwr$(ColG>bCbn&R zV%wS6wrxAN-ur#`XVTrLtE$hb+Gp=)uSEkNykNzfKZ;0&8wv051yv1}SL|zx69^~s zjsRqejrZ2hJiC$Y1FBBW3Qs&Yp;?%c{+_-OtAj4RB3qK6?CfcFTA)#BzW7Q6u;6%K zBB7KK++9K7007z-NR<61wCC3tOJ5qc$Xsp~6Kyz5X>pch}Ny-^8(Ojrd-vX*1LD&u9uml9VDW6oLLaY7cMN8f9=`9x5 zRl4opVPW-yjAI4AepG7Ig0;6bwo7JK2sA%tbrmBCiZH|HptV8=BGCU3xja+i18g`e z=I-fnCkYqYQKK=_gp?@ttzth@EQK>RsiyA=Pg2^d$fcYSBdBWj-GF_<^q4Ulf~^Ol z_hyS3jkUfPv=uZ64ZJ=pRaA$C^Jooni@qoT#t;A|0NWQp1s^az0$?+AboAupWI8%J zUS3|MviZ$TAA2*A7y^D5S66Yk7obdjKF?JNXoPutd7Yk})#9rE)u=V>hnz-q`OCjK z6D-I0w?%DD?QOR#Ge9&iA0 zNl6$NV-1aEpj^-}*%2Qf5A0uvFy0|RdPuHa$jDd2+Fla<30=O~%IoDMa-@+>L?N2_t`W%K9O>IvV(%BQy@@`o zLrW6=equ4b*kDm2#TF`3<8m$C`t&$3_s007V6p@SF>u0klVV5$cc|9kU-aH%kOtqU zLxv*sr{JHnvY)@w=dFOL;w3EHzdIQ5FADdGO8=KG*VFxcvup6M09Ktq`oI3Ii;kyf zbr6B3yF+z)qFxnpI7k#NGjB_VZ)$rX!!G)%69>%tze@#u5wYgD@U?Y z$@o8x#e0IhuL9OO9|Yu{H3xFWJ_OaG+>bs(PYRp^Z;_rAi_dH2nuXL40HCf#P5Xa* z{{K~#?!)H^CR_F{{Dce2eheUO>6_rFZa9licia{q!gKdG((uKUZ`ZC@1VzZB#YaE< zzg)p&>2p>L(sA^aJKx;{?kYk}=VHV-m;)?c7ZL?qfVk7mw&;*vaaC0nEG8XcL5qXm37E5r#-pM1`-O-ZeG=oh^oF3uqa7-^G}onAu*1vFb=&w3*ZhPA zAhzy)0k_JAJXt%Y+;$kF4Tx$kO%sbb&*M9>V#Kxq2%OLBE0q0P!w1oeZ{%ac>Y3UXxumJ}!IbUCXqWYqu1Hc1tZ+Dl9YMN365Hy<{ zAHTo3>HUvF8ji=U{yCaEx4gK@D}n-$ROQbb2z|iSh}#CZsPpAo@UrU8&JW;wA|fKx zE46~Wr;Lgg|14~|(sAUsZ&F@1gsVNQymW+PIM>g~RC!CNsGucqcCZUAsC^S8Tuj5+ z6X{eglG=)r8^x^6C3IR(%j*e{!F|7oxJv`g&2hCyg8yH5@8}1_pKas0?XlvN8F8|N z|5z)5Zk#Kbg)wdpj_zz0XYC>%-zRhE;2mUQvEhSTAQH*pac5$5c;?g7K4bXM>x=z1 z%X1qkT5D)LvCtJ>YzRs2z%ro_;P*OdMKnDhu*p;zr3(p__aE|sq!zp*oln71he~$K z3G&A_Fd`dFIhfN@1*ht4=wL^WhlVa&3_n_oeA*s%5!nI{fdGz@3mo$?n0!E#Z2NZk zxegw6+!6^MQzN6lpEifpM)qVpZ*+)}Y&w`aL$6_H7lR>`#Y^^~a7L2@Cr5#e7|gaM z{ZyD3URxRCGWusG`=fR74nDlMWng+;tJ|u57dDwTJmff=m?7dt?+fZ1T->`);+#s^d5T1(&U>`~XL#8Qh@B0+)0p!os)YP=Ja17so=dYKycdhoaO%sp~ z1PbB6lN$19sl1?s0Hnsf5C+8HzQi`7`;x|5sXg?hRr#<4urCb<07rq8Kr3GXr0XV< zs}W`=^d2!52{M237G=t3(AY`*U2B};9T{gTOxOHjxOZ70oWqfys1{SOQL#azc&{ya}+eVYu_0$1;qA?PswG~QXxvdihFi9mLR=I&CE{P>~#eV zKl4TOFJG^Kk<*WWL^bRZ%o*2D_eG{BF*!Y8C1M;rEdF!4X%N*|9h$=6@LW5!AhCF< zI;ka|k^k*vPBx_xl{`T|>ok$=4m|;Y$3Ru6tBkS9hE9n)u<3lm(qV;T6(}2STM$hB zn`OJu{xh9w!{yg>zv2I!sgTG*%#yF(KGnZzmqYSsAxq*CQnV`ZlmbBPqMCI2krrq@Bx-=qnQ*;x5U_}F z-6xMm5J#9Am8V!|0R0ans$r>ZwBPIcrm_0k37mfZg>u5}PleU_=T=;DLS0_X(6v?h zqq$?1z$U{ju)NfmSw3pVCub20*k*Z2d{j=f3)Dn2Gt)Z5Eula$^I7Ny(Y3o;pbyYN zBb{a0`JzNrczW?7>uRT@0I*qb)AkwFNK9trblEHpgP!0X{-&)QS2R-W4I6ZrTIb!? z)4v6iN9*A!b=pD^n9N7%@@d9%k>Jh(DYe#-BS76Zi_yhvI`C`}n9Rm#_L(dRJwZKf z`cZO+oL&|L%)g(?u)0s_L%CI3+*`~&*m<6S|rVM!UpG@@%|Y$d8r(g9?#izQ=$A7Z;bEogLS!O>e{OFjR6r4+WlI^IixM;{Fm0 za52MiYn=I;(=}Kre-xldPR@U2Goe(Lm0`0xH4rE%tCR0GBLiNys{~X@r|&O!OTb3K zon5NpK!FN}Nl@W9H*i2ai=AHZWBI^QnaB{Wz;{xml~U4C#QxuQi#Q?I8R z8CIW#^e|BRI(NvEyr!1OJ&sX8i^R_=tepTl2=c)ieL3x{=tUAz739U>!7AfiM?F?34Xz7eDI%M&+Ncy#8G;499e(> zODyA+@pSc;Z+0|xl7lm9Lq`8?WXu+M@=rQVV^5+O_a9h0VS?WilN>aJ`Ishneq zuxQm!o$Kq{1>$xMf}I%tPdA{UV_$|6R(Z~ndXJ>4ZRxv+KUp_2YU-cO_nQLK)}T`F zQ>tc}sRzNy48|PvjNLG5y@vX<*2&c%LJG=_jKN+`a6QrP&)2gr<0~%kjF!5Gaf@<~ ztBH8ik>mrtnyB_Dct~T0L4$Od&ZTKEKN=FE6&4ADdJ}e2&pOFJi76m3Bk=;j&aQZQ zsPjp$=&9eR5L?;!k@QV%i#}&2Ys&R9)9JF+^b!UE0f3WZLO$>3mE|`cFpwZ{ac~d_ z_`C>KqX-tkL8dp3fF6rsBj`C7re(xs-F*bZ*Lo9oBttX1&%M#{YgI#yV)nj1tdlX< zH*)!(uy0Y5%>8;nX-bRjlI&FL(g@BaelS_$?tJT=#EF4gkRY76a^)* z&DN-Q&wr@6f@7Agy&vLsTC;Zos$M*mkqc?_}x&dkXx;| zXvMbXD>@fL2{xiM5wuR#+!=(<++%DjgBYp8ZeOeQE1Y=I zfWbMiXa32~jtTMyh@nDS$Ns4!V-*t*{!y@%3g$nlQ_(V1lcQ*D4eTc-lYu?jTp0!< zjwEL*j@{DzLm1o6#z-`lV-kUDm(|MWr!#+tpg`jd^!1W`Q+m9`{1>*LDTq9{Q#2KQ z1EUmY!@M*^E@R&s)FN~CmmGCtC7D;=Q2Vh@Bd)L2Ceq+~SGRzmMRNcgk>`558$J@q zFMQ29KQH7pS9Dj^6;-xs=N-{|yF|+8mUopm))r^cn;lez$&VtmIMaTOw&r-e;v|r- zVes&F)&0HSO=F&rMF(X(C4V|}acR)w^K7ciSJ>;{Xt2Y{h|%q|?>aW)Q{UHk*@ft~ z|9BWnxuw?)oSwwCMirk5rR(t70|spKI87jXp zJ21TY1lSS)1_FbzJBePWjQBUN&Ypz1fFwghP4C=aamT&NHTJz6&xMeS_IZULAb)ai z^G~aye{CUMZTM=^FNIov8RZVKrX7XsiZ94h^~tQO*)!fO=VTB9i=$L zH8=GM>>X{n?e!&pb4P!liK)P0E zC#fQ3Z)+;-Y{{!XpxNTQ+F-huj=MSvTcH4l%}#CEUjggU{xmpSw@W-`Er;@gE|9Sa7!P!bZ)X3JDf~iJ~ z70*cQ&~FV3^$IBkO9l1%BW}cRs;fEJzzBV?@keD=F-Y~%rgjA@w&Z2_9x!-$ZBi9Gut7&Txm!)CL-`=2pqJq10HU|$H zs-Z3YZg5Gr(c|9IJTO&UQe#_GWu;_^m#wCa9D}wiw=JV7+qqqFVwXv8<*F#CtZ2yn zF1T}_*%IZ60fvyR@wUv{#YIW=^ ze1qBhnSQ249c~R&>&_biIV`#3%X7+3)o;YtrIfW9k2GKcHGgx5GCV|lwc!=8T z8mcN=`z;pu?n08tGP=6TYn$p6i%}|lP4#Agxt^QSBW|2rGYOSA{ zk^WmY(KppjUT-4e50`g`B#EJF zx(aJso2T0a9&dvn{m|OH;@0AP!M|u#fFb65VQN!x^ld&BMhd65=;1ni0u?of1R(T~3FoCpQ~e zyhYy@WH8uFXHs7>N*D~pZlWAPAW)dZZC2}JCybLYfo1-<{BwK_@vj2zej_@(tTQc6 zfzepkU@zlha&Xh>ELUD)x5>ZANNkwS4ez36DhDz?%bnvF?P5X-C9h6Ake=t-9o#3H zeHhLFo6nu%65nneW0iSTR@Ox}>&WnlYI=mIJ3zgmg02iz!cDsAC^{=`d5L>CST;R} z&36n9PCUX+g#%CEJhcXxvNwb4z@*9gu>m-Yt@(5dSt~87v$M{#RKSPJdSV6-t*xeW zl}lN@pj__S&J9gS;U5!Fv}*bx9|yLU!8RXm%bY(xIEH{@adQ3MvxW_1@)1>(1;n=W zL!TDeQ%-14gHI2GPsx%}ynt7UKG!$5RHv4Di}+* zLF?`rC6PG^aQ+6swMG;FHzlXn!b)zXG7Y4dMtn%v*x0zZUN=7?p?(jWFcr)^_t+JK zf`AAzu(Puh5gDG$76C1Zpn?iN<3z;8O8`N*yPPkQ7=R|rEibnMTCo7(Ci^YuD?ccH zL^wz^tnxWe>3cDU(`Arufus@jOLOJ22LCw8!(%rBztDx5#f{BHVx-!5G40NYy3bF) z;vqTzAhCZLG@n#K1CBd=jp0&KKl_=@C*Oa4U1`!pFPw6_?OK?dA0^Xj7t5sGHg|ti zHr)G!6@|c5jyC-MoWyQ*2New7Jlup8hs}`E{_si)+j}2WlGBx~=)Yu0Kd7a|ND^C~ zU!IxUAXmOkn630ED6H>n?ySuCXHHi5lKz2)5K>T<7eF|T?6A4v9d#KIhiyFcs`=5@ z)+QE>_i|o8g%23Y10gsN9Iw_I{{twP|48=a^V8GSPEYoL-q5Hh@6>Y+e79?fE)mz*C;^N<K>;pF@E z-%#SiG8y}MAU;ual-^9=^tiCwoY!mjE$&D};e zdTwrYWvyKWMS05QJEoISky6de7musAW=(%2GB8lsC*=vvk}%l_v5ZZESt+@Dw(03R zHO-s3{lz_^(lJnwE>u<5mlsydYexS~z{E%}vM#wc&AUo0bkw>dGZxT-Y?o468^T^I zDhKQhX^T4kau)>m?_j%P5mskZ6&%77lmD88^xI%~VZ8;(xD#aHW9K-Nax5*~)Ic zjS_43-&_PiteFDZFjVkyqVm}cXK?W7KNPy7^V`!R%FdR`=AJPrnp_@c8uwVz*2?P2 zx*;NyKX{pGT>cV7GFVBa1KQP;+=P5%`c>$O8|B7?k)?`<1Lq)H_RcF&ZJ(g+U(mXz zi9OdO|BWTC9WyD;O18FpJc;b$9ZVZXPAXNkYx!n8~R$ zFhp6W7D?mbWZ)2zN3!tN1Zh3N$}0)b~yKtRjrsLWYpXT1_u8C*XpF8 z5c+qx?OKT&Ce5GZb35h4|6Y;XP`DdGOn~op){`L5w=y%s*kB?iHU!9-hv*Ru0JY`I zoUW9C<$)U3w=N<$7(|*ChljnPsl}$xn(FRG|C5AGdN`^sx2obQOcnBBF&Wmu=<4>Y zt*yDDM|fBqUS^B&@#OTn$>dI8rBIb~CLs@rSxOB$m|7b=XM9w=c!K#u=Xi>(Nm&YQU3+o+UY zRkVZlVa>%)eoyuH9DH2R1IKe&r%txa8h*@KUa}vXS@RnKPyJlUtm*J;I`y0M2&^`I zk>3qG@*|wzQu@B*m8_3J?gmNjMMw2uyg~*m&L0!n!D;BE=ngVRuFG=xO$B)vW^#}P zxkWwGeqOGRJI!*$;5D*OW#_%c85p$P3-8G{G`cCfAV-hycBJS`ooYoV^Pl_YZ1GG=Ka3f{LzXBAv$K0LLz4?g@ucu$tL_LNtC2t_}t_jm96cq zRk{=hkyxhqyv&g!edS~6&=?qTCQ|8W+onlLn}5xF6s9GrQyG(oRh&*L+dlc) zCIWYKLg0y98H2rtn`B1Usk*gg{RE>FNag`sbPmN{1=VfzzVq~k=knHJiI{=3!w<%- z_c69j094zOB#v{gJ+^zhako3=lAo(Z&9$e>Bb(E$vMd`I@n%v7zNP58*F1n;rx4(g z5AMS#>U*ERO7K&xvVZ9q$~QX|G|SMsaNq&)n;aWhBLp^GcAH$X{Al>=>voxE7%1^L zJKZLk{6z{y5FB(lU3IrI`#k&nTi?^trD|H>_^=&94wAY)7U zK$;fbAd+_AO9`sFjty!-_v+*zAhO_2 zuEiGfR*PAv64?;m+p(uoBrdMcZhd{>Ygz!@L6GVX+sQ~UA()&&($Vi(69~li7MTzC z>Q%hmlq-z?_)M&t~8@$-S|1z4K}{L~)@HcO<2Sl2UY@Dk89p_09AtbCUjN6T`7KBx)iD=GKwPs{WLG!Lw8MCG7v_x9ji;0KH zy}o6hWFhKS=hjq{2uVcVo0k<&UP}|lZTYV@DKf!%EcA=YEFfr>W1~|xjooV5#D-wJp+CKyDS z_$CLa*5Q~LMxV}`>H1}|u^tx0tHdL4aUFK+nF|fI{G)))T%qB25-$uWdirvFG(!jk zY|D?EmUcrig12ea=HR!RYVRh_lX)69&$2u>Z)_WR_yacl-+p5Dj)TG(GU zD$E2w9zRm(nAx?Q8_^$ZCtSyM26iG^2id70MMFWOBoKJq2TTuHl*55v!ug)ZGF41p z)?2o|-B1dxug|)OL|et``bob9*X&-gnfwPc?|)l*L8QRUpfo_}h2ZlVswdz}8&Ibq z;^0ViQKUdiPDEk z8%Z5jJe(8P*~zgDyj)#jQhG7P5mXnKw=Q7*MYNnM(@#I?I;27f9Y})Z%XJxUV`;M} zu@U8TVDgi+EPZQkWoh;}Qrn)ad>%Hus&!ciwPOmO-oCadRi419_9eI+mQFoRvuaRE z&-Y5e=_3o7+Rvhcl6bMkl3b@``~EI+<;(8M8<^UT6&7ryy4UA)t|3l!(4sDp-G z+-Api-B~DF4na&SLK>VrV;1M3(H)E$`q9$8%a&n+0|=5usmqWGG$d|i-PsY<`mzjv z+XjA|$?J`E%CW675WiiWxFCQ&D`AWq%&T)kaYK(@BPbl^I3ILI;2k)}w*>Q%*5ki>J zgwfDdk*`2{$|$j+=YSl9_riL5=kp-zNBfZN+b<)O)?YL_Dy8zwtc3`ZCtKI+m&tLON@Xp`P}Skic=|(p^JA zSE2BJ?ba+~!431ia6$+^tuQ~A+7LqUD!m>f%bY6+G!1s5E?vC!PTGEa@MkwRp++gU!)%^d1Iv%?y%GSN6J662@Ojo-XmEbBwz4Xm73WBv07txxsjI8Y%_U?CqJ_&d zhQn2aOkhLuRGIF#fyTj-`y(FJ8?4Py5Vxm}yBFeu3OTZG*Y-p6m0 zjvSfQ-Jj_$>mGn(fPjF2pr19o^GyDK$e-`m2Ei?TI|fQsPS@|(c6vMTs)d4sdbV@- zlz7zDAAktfVZLZpP*t2na|d6HP(KdiC;;4K;e_Ur}0}+nn&oZm8BY)f7XQ>BuQS)fyLS24&d+msGzMD6<#=3~U>G`GW z`=iX%wg!V%zXr@ULP!IGNr{{t`}Qm{KBm$nAl=k|vwUhcU9UNAh=(j$feWr$ z-3qzW@wR?*CbAQi&QI_h?Gd%h8oY-H<#DkTgWigGfDLEgGqJ+=I)FC##j8ZHw6LJ1 zYqAc=&o#(7q}nu~$L-MI!kOYuo^C5N?L@AFfY|E;aM$*X_^)}hlCC*%(*pFX zlEn+;6qe(I6ZuyQoqO|IL}OwWNXG%xU#ywvcZzoYxeL7r_;ff zso*Ti9`kJ*@-GA{iN`h#ZM;7*8{ZX5Y8@ZGKT!j)+#jfJh)n>ZYnQtO@&%b34o1h$ zh&*mI$LGg+`uQI4PnQ~`PuVGN>&uDXAST=RX~zZLCm8RF`QHW_blJv+dlv)^BvQn| zQ;2UF1B(X^>Bc;1N!irtW-9hKEn%E6#@z&|7Quv#z>)I3jz9`x*tl|QInSe?OGo;7 zh<|^)J}4KQ)*AF-!ibc-}^OxKm-pM z^jG3W*}8#l?wQuF{b0xa3SxrBC*#-t5R~82mGkg|X!84~!|v*k>RBcTxq!;&crO{p z#qDuL3*;M)DBYi&(kiFtN$Is_txsH&>! zos(|Gg5z3SoUYW;{p3>&+MB3m1=MZ#E?Dh8oaa7Wm+<&sV&2vzj4YHDe4Y8y-=fn5 zv7&~6zKW%#rRJt4pf&eeuOh(r^DYN4Ipp~L-_OOF!`Z?G4FZAyP6Kgl+kT{Utgy^Y znZt~5udL_(wQ*lmH76MTO+FcZoMU-Oj_<>M@ebrq6CTIkgbi;r?fevGyt;%hwa5ZEw2vR%wtWXghu^BMo--ht=7o{Xr{C-8e zI}Sy%Ui`sbCbdr&j-FV3=&%cFLxXT&fq;`CA!jJe=uraepZf!g0(=q^w4}{X4Izf9 zG`4K;GG9STGM^z4-k(DF8$ynw6i1XSVV=#ikOEdNSYh1_gbEvclB~=M$JCz_&RRmq zL3=kLgvMWqE_)HBHgIh-y(&I@58ZRiEnuTx`Hd(H`zt~7$#F_+QT-(y#P$@p51pYV zXl$$6xt%w8|8C|s>m=l6K-0Ts8XPDXz??BHSLKY2>%!jZXKZBib2ai4%~JnDrJ_uX zTk83XeHt(yDNxC?JCz$6aTEbcbGZ|iApO#364BRxl0RZzXs=dCM86I=6gG@&s*~J z@GzUqTv_w%rX)e+d0v^uC2iQu94UTwK}gvhfg!`d;ILX*@5}=&gO+((0|8;cvNw{M zd?oeGWN~TK+Ueg_SaCyRgX@0dferwTiA=4rShT~Oa%ZIaO%t&5yN|}IjV!U(J_q&c z%Bv?GZ{lM%p5MVOQ0kJG&-P^drHCK#s`F_Rioh#2CFQ@#H)TkU4~Lq;X3OO~>U@he zYVZoZ2l<6DLfH!vA+31W4lx8x8ov`p!H6CebqEoR1K~gW6JAP&G*NLGdQlfIh+832 ziM=auNDL<2{t$eb!M~3zR^b<>LOr|T0C=&H;B2_u8eflRHw()HG zZdJG1BARZ;Yt-8VroPt=Ae#t?KmLq^_P^w$1yIYwPX`is9}Lusa2AS-D$=X(ecXe( z`$|XfEgYS1!uDjSpr9brH-vV6^^>X>lSZimJ9?>pyauQ!l^|rfGEO^QQWZkS;6sND za?VUb-*LsvJ$sh%$Vw4nM;FI(;RXbT6hg!lQJ_oYhV3bBLgz7y^j*Q&_tn)h6I)$dt!RfNTOrVS>$>UV8IR<2Mp*HNDZXuXP!@GN_pQ zH7ARV#Wie9s)st>kS0-*ZwTQwbWTtF*_m~2;|3D&#Mh@A?%JCgGF2;)8Amie48L_w3 zc?E$jkveFlVR2`U4YO93c(jCSerHH_H~}sr1=GrN)zjj*Cc6WJm><@3zU`b#N29-v zyi^w2-Dq#gFuK$h(q4A|nhe`VE`=hrK6e8v5woKLiN zDT#cj$Hla=$sZ$x`_;D*HmBUXRJ2;1>(gG^5!8H0(abR3yT@{%28tl&hy(%Dqb-lx zD@Gm)2X2TT@m8hi2m#G};1KWN9fIkFD8CwowUx*R;li=}E}#2HMc0bsY=HXu^1~*M z;|d2IvDZ{y$?yY70U$tet!AC-ghd>Ct@m+Uc3)O2$A-7@cvwfu?Fh9bDu9$(YxRET ztNE|3o(nwzzwKz6jp>o;+3FF0(<*`mG29FJC@F@`e4i}VM*E3gv(_48gw1wk8T0d# zq?HRj38&*}nk{HC%|rdDVAaV@+aS?Y0Vvy6do{SP|1AW#m{?jn8of?#J9`ZT|Lw#< zW4-r(knyxkoc2?BwrKr44YY2BcNJb$e?D&c*-Z~Pp$wqE+pX8zZ%EViXEqRi93ZmQ zUeVYGlP?1YB!yEvRJ!bBp{>zz7r=m!^Kko?K{hE(yt3HIV%J{*e1d`f;lTG7*#r;C zV%rhn0t2F5gv9T|YlAxt`gi00M9~5$Q7pfuj@agx2hl=9vq?FhhyIB|LrBrLHr!$* z@(m}8wa`RD@-?J>otO1<+PCCb8)I{luG<-mSq5-14L$yjC>EJkv5uqZrsIZK!MH&p zmoI1U%Tbwl+Z8)An~$t9266ca--CYI{n0ev7R#$0TQPq2{&y4YbF8CQF&Vbc^_-;% ztpw5Z+1-n|W&#a49JAHLWp(~ytiw(DCigdP#EV3VAWsC_2!bOPC;y-;FIU;kgq6$S zmvI8M_~0}q#@EIGy8Z?T>_@y}oWs0I;FXMK^@%l}!4XJ5008N@%Tg^g1hRH+z+@{l ze1$lE!rwH5alt8;81lWj!Udty^ST*KAeRTje@B@<`R#Nx`NN~LurQEK{16CLVIfen z7Fuik%z}C@Bp+2)NSQI zZzcdNXP5QvO6xp=zKa7;BhdwVi336apK-72S!w!KeaXj(ek?%Onq_kr{;e+RbJ8t_ z+5`Yqi98~iKd}6JVO#C?>#hjGL{ zY+E89Fy}N@gfJanW3w9KYDPY5*j}iPCSS2pY>RrUBc(c;maIazS|iP>m-8dVou9oBDJ`v(A9(Kv!De$| ztvQkaF4?q#n{dlUo?s)n0($mnQrjZOw#D!;zd($X{3Afq`w?H~Sfhq>jDPl|HxiglaMs-p7uTB(6v~`LfMwZAOFWuC01P+EiR;U7;j!Bg4+0UmCa84re zVKCZGi)xL{f;d;O6edTPfom7bo$YH9y!G0N$^k~6(JaeoZJ8-@=v9J;&*=RNt~D{p z=z8D;S@EX0mjO4hCs5HREkS75r5>`}=~k@fvO_sYE0!%f9*lu&bARs$PoIz?GYNIb z#89o`0npCax7T650)%NaH8t%zZp6GhsYkZrNu}4zerHeGl+v1fMWnyCD(#R%%f?hzhPF9=6aW?+AcTP(k&Bc>SE9$64c;ftT^YYVai8G-(29~OKWHXFv& z=TpEGVv9HXQie z2~LV?|G+^(3`XIQ<$Xx*oe?gO$@qUiY&C{Wx?%Y%p8eg@GXKD6t0$Mt;9v*-k5oKY z71ULWe8x{gJ(YOczvN4D>vUQ4C#_>z)pvoE+tVu6?|EYRg8xVr+TpZ>%+Tfd)R&OP zJd>D3T>S4>DCrYE8cZ#l*F}iYmk2p-FTCarruS)nuQM+2Ik`1c;9N|U{~ZQbx)T_3 zUuYSG!)bpZYoF|ypq4#2eM(_v+8~W$$iMTFdu2N*BKg0BWr$*Te={V<9pl$#deIF% zG3ieviZAmO8UXTc>XehKz9~QOzF-U-YW|kx?KjazbTg6Dr>{4WD&H1QM8#3RnCxV7 zDt57@7@En!M9J2|rK3RmGlub@76&Cb;h6Cc0+Vip7E>$1Wbe}^AjhdIh}@{k*V{;? z&FK+xa3`o6o7Z$jVs`xBVNkV~170gODM|11{-=#2f5@tK$BpaCCR@pYBg6nOjF?%A z$G9l>tfSgcJn!K$Cvo-{wW*QS)lTL9qdt8^IvZo--o=YUnp(W==3GH>b(rgwFR`+B z@X{l`+qNIn*VZ-=#P#pkH#DiTH|bH+@)tC~$!OuMEG|xOdRMgUi|Z`M){}h?1Zflu z-YK0d)OniaNfV<{j({N}i-$S1%|^+#*t^!`Aqp8ZHJgylYGC*wW>Bm12h~DHY-p<{$4@g7EHt#5U)1lrrDOeQv^!J0inmdHgJUO-g)`QJEu zr74<0JEbY2ox3Y5LNM}21${6o`ACynObhJGrSp=UUKk-$li4}RT$EyjJ7MTT{$Zq1 z1dL7#ZWtkDvttT)@ZpcTb;KzKyO8>{!3A6d3%9!UB1~N=qOuH(wK@#0dnVSYl4U6l z5H@TvtcJg=RueVy63G>z9l)XpFgcx^F(St1vGysVAw|+L?Q$kfP$BiZDiPBW#b$D|{j4^3727GTa5w8-W1}-f$8&Tr5StULJ&#by_?42kcM#yk#Tq+~4U^&|8 z!p}$n<5^*-mEUBf;RRhpLxb}2z%(VxKT>jw_}jfo zh#A@{!xoo~ni7{mq4*tLYb4iyLXX>zdi!|73Ql~&PcNcLcJDi9F$iyP!S^haokhIL z=01xBMotL%fwVRfVj3a=V-;v9RU=26p-7Q3sls_l1-vMU@2QPuVDiJ*HWUdH*1gJ{ zLNH5sr35N9?it0$6I2P^(SxS9f#)Nz;^HLVtYoR;BIRqY=g*HFm=g-AX11l_2fGDW0(?$r)_d`_aa*E(Y2-x zJ~cHxDHp4To!XenPyevNn27&|SdwVi3>W;C0i1|_-yO`nF-Q56B7lubmZQ7`WBqq4 zfOS+ieT6s$E|Lyt#)NTnMiN>U#;&R2*nGZVP68*lW?s^<*L=WtHYev~iJ@i)Tn0Q~ z+1_T4CtH*FEBM6xt+kc2+TueR?jlleBc>w$nQ`r3EKo7Tv<~&8T zR=*6hdK4x#giqckFrep#NRi$trrFQsK!Lt7&G;Q$qXr1vZ$@+x{W2LinA~LJ77HWJ zN|At&Nx;7;Nk#V&xUO`;Z)3V?l&ar>Z5eP{oi6^X(q<71%qtwgFWEu3fn#gQMP>c8N5a#V?^nw401uG!b~~$V-gMiG$^$z0 zZ?idrd9MvpuVED`SGdfE{No~)ie-F%ic#&QdmT^&Bhk#$E088R(fUY{;R-V@?^COn zLYVOf2@DwZz}ZDuU9_ogc{zKWy>3lpHSGmmTvh8n{1&K*NohtC!{XtaqZgo!bMp2= z$BN#T8DJM6RlfH6NTOj2&aD|yr&ER*S1VE&H|v3mN>Q+j#gb7fQXBq*t%N=GuUx?r zLXV6xlA*<`Z>cz*s)f(zJ6wPRSgnStBP&1C!Z>EV0vJr>&8)TwhHsHZpJ5MNqg*L- zXs3))qgu}&Y!u3+fAV?r(2;yhScdj)E!EvpWJhV0RCwa{V2p2+B#zmU{Z%~5{Su5B*nm3!BIFG||#9!)H z(*a+0EnY9T=POR@)i$dQ?yu*PG;~8I#-DLqNrH(yoC*|2xmZRps$|}$?Y*tF^g4?g9;q|Nu}ug`}lgP(!z6iC>5@#g%vc;h!;`^h-b%}D0strQP8)@ z6;24sqNJGjWD=?t4 z%wHx6MNJbl>yAOPxk<2DPmEs_(%CeEJ6L7WgtjD_)EN?~BC6Vv-%Xu}H3s_9!YDKu z7O&==MNDz|1N+1?l=JtCWnu4-6p5)TzlA}ae#NlvanP*%i)-s-9pt*NDL{#5a_it+ z>nW>lg{-Z&>33{4e*LGK2wlZw-aLrrCpbhfqI#?7piDN}5qcr+4;8OSiNZ9I-Dqqi zcvJiWIV0G`0W)n__Oabvej(b%W=MJ4pZsh zT$<6jwZc@2IAUbtX(H&IO5mu{tNOm*WJ)Rd$8!b;Q}HKw6wAIvh)=@+Utq_if@2tS zahS-rtWk?A0)_qvjEx1FfG(pop``z=F*kuaN*N{igx0jBVFjx~CD%~b!r3d{`2}dT zEJ0QFQTA|97ax#rhhVhwwqOfc#S!z>ZNu&t*vz&8BKyN8r}l{rNTBrJR; z1_3=pm$gOQIPD&~=dS##jBmMRvAv*fE_YM0mw+^qnvUALf}!*W!HnX9((|F&-G@GP zcaV+M(bMZXRrg!1ckjgZ)pPY189+ii1pqiNpN`Ia=i}Qn&V#7__wS#MFDvx^#z-1o z>%(!Bzv5=$v*lOY-(G2es-G9Zt1e&x!5Bf2e*{4kEDfwIQku|lDrHJ&s6lK+gs(K5 za9PCkt30lmM7={R-nx5aO4dPfWSwa?6BoHx%}pE^TRb_V1HyqWo&WTJ$K*KV2(b;O2=zF3_t4h^W1Saxa={%%+`x<@Kax@sHu7_Y_EU( zrQo-|cELR{Z(LVt(EVZLJ(6Mo9Hbn5SAfUQ%ggBH-;V0|;EWKZ>pz^S} zRK)0wt&N64@^`pOWPqPIDi4iS^y-b04<|j@tX>LS;z@>$wwl88^ErDO?scnc<8?Jw zLk_hJT&9KROGdaeIW3g51KS6+j!pIxhJ;BlN@mp`Vu<0?R&^UWf0WGMM~c;==mIh< zq-0R8M5dc=*Eaae*uh|5$r@llcNh5N?<*v8H70= z>$0?s6hb2L0B$0g`tY=>m|TD(`xquVY2yfPjeAQp z&|3EcnstvCVwhenIP|FcsI*gZFdE<@qO?I|%EObY!?M3%k;YJWfQz76k7$NFQXphb zDnBs~wp~%VLW-~2u!l3yVjMa=g=a8}5yP0&&cKVNb);ej(clEarjmuifbslD_FObQ zzI#lPkq@VOLt2hit?3}oxX#-RC%d8Q>e&Yy6QkPq$Qd^yP-PH^9J@&CxmosaOJC~l zxZkYLKtBIGpM8_T)XVCG{`7r#E=0AY7=-($iy`p?mp|dx^jc~qTR190vgH#3RBAirmVk0( zZmr@_0IJ1ZrJ)IouDWAW^^TKb(>Bpe1glHUQ{6fHvp>_Gz?qhg!gNjyj5kEICXZu`L z#b#m_qM3gkapJsqpR&e77n)Wy_&@gDCs9a}>+2`Q*7oP~6veCLti|Hy6cdGlJ`l$P ze1fXg)^G%4K~EwzrLI%m#9GeJ`p-7uh&;y+f!1)(`nHDLcv+I6gKs#@1x0m}K=N%% zeRFbrkg*Bkvwpk94w=xB?{ia4836OC6}i0oOfjbq4k>}#mRl2G2%&t3#;ML>A|DT> zTAA{8PQ&<8;LVghMkN+3zoxjku)fF31z~Pv!&uQZhAE}f?^B)KdTcDyki~UjTrZZ+ zl+!hfw6GrV;hS3n-U0#gM;yU^!|YeePSw%5SZl^+?(;ql#Vf>)vv{42p2R)yxv!*i zYttmLu|Gb#_?cZ7V;m;QSV~()0S_Ves?T}snOqC8uGLHhU_9+~JLJmS1pCgJ4bLfEfbe2O|&{AP#i=N1V zwuxgZOb9?=LWm%SNe92(3jgck!-^ahBKFZ;#*(dBk|*S7&;)n#9&MP2fLZZ58FO+4r_#MJaE;bZpg zbE-4iAxm}u9x@{(LJD#(yyd;~oxoN;$qvff2TX)o4zvDf(gVs*kFEb9SFk>=r^-$>bh8cY6EU#bxM_;C6}7fRBj_2o z);ASgTM)2!9j*_=HGDCm^)=Nu+?m*0BMkIbWzBvW{h9gj^|FsmKr|NQ1)Ej9d;tlc zQZRO&JH6GXCbq(y1ptE&z4m2RO@K?n(E;nQTvSizkjSj#?cG zH@DU{*UuZQA%3-j=jW}Nh8Gk6tAbB@G-iFGi>Pk-z%uANvAR4zc3NYLVunz5)f0<6 z)e=_am{Qw_l(UaZ+9)M4N96=J^RxF`&f;}Iz>cSGSv0LC`DI_qytl)oxLhpU2Scu zeJ}f~CMT<7pg%2XClv&||vLT@IQ^Onz}-l4ORrkq-T*EXTEiwKIUS6y}6fEtcW*hyPP;Gi6$ z#n}-AC^x_DZ;t`{+=!bkr~CVgtuh5Rf@JZIM%#V(cY-VUWnG>!i$$T6*>;Z+DqH&%*PEEj?6G{dH!sU zx{IWt^@vItLuc=_#`pAPk*A~eF9OZ3u&II9ykO1kH3`IUOMZ0-T=Na;B&0yw%G>T~ zP3ww#$nRuQ4U2$l(|5h|FMMtx4a^a+7pcFQ@_tXEO#QOchWQKg2matd&%s%WoYAJXF!Hi(MrAw!{6+s5+ zV(>l3(LuFGP8;PhAR?bSTWq3C9_DgR9PC81Ro_Jim0tHrEiVYU8~5Ne?=<-Z9goFU z=XHvbSXdty%3hCB-*N>gB}ZP|a>0U`cR2!(Tld2ppg4jQ)#DW1(lK&x0dQNVTIH@M zb+a0QO0PfkXWjo7)b9s0efvLly^m6mkaWV_fP~pE!N;@q{vW@Hf5*EKKoD`Ma0ese zwp|v3o~FP!U;Hn?ay8)G$3eFaD};m%5;&B2(RM2?1?3PBTp|4rm#X1AmIEkF64SbJ zrg&R2g~q9q@?NPsU7~H${te{o{l@=&sA1-A?-(|XL%F`E8a{mC+;(ou;cve&{+*5O z`q{hZmjNyyo#lJcdI;6<{jPv2 zRSFjmyO8<1?KGVZCO8`o5P-71k_iL%T95e?~K1f4mGP)i)R=Ca|}kQ81lv3cempTYT5=aE}{wDi;1v*$$B9v{cou za@~uteO>lJ00|;G6nu4XiNmi7?kVG)OQ5&be&bMlN zOXlO})!*KUiHX;`&0c^UsjQ+Bs;?j?=cAj`#6hsS=K13G_|jOi+;yG9KqY-H(~n(L z71PXw@D!GtqP%n1efilnfdujofv4sAt5SEjkcte85`-T!%&|d8h_@-D7`l$j)_cfL z%u~k0?9#$}d7Gn`W`NB2uKIGlJ+)B-q4sQ_Q+{NT%Va6Q8^W41zrC%a>HflR(?8&_ zT8iBNV~;9hJ2Zqm@cyp=WHzKQ08l%-;uPf`;iDHoZm64gF#moQn-IN~hZK8Wox}pp zqALjXB@7qF`)RS)tB!B%T-7l(04B*U)d*3KB4qTx*=A%#_bwGG2DL(TYV+5DA+Fl6 zA6J^sEGhRjbLaOg5UOqOqU5mBHx2U$y{-7jqYC1nPEPCWYZ1I9`48{K`MJ5cc&Ov@ zJ_!i=eS*%%YB4YCLQ+)yQI4{`&6)is`hTe>1q4V`=!j+9*1IJ3o*Y>N=nJs9LvFyS z;keo3Z*S+01E+eW<_`ZabM z|Ga)8{!`)Ii{{vH{t6CK1e{}jzP~}`LV!RtfBT_T_Z2obH~$0HVCOzM0)mbg#()TB z`%%lSnw^`Uj?nxl-Ms-J-IjCL!HnBKdxP>UKe9mO|QX*36h>O&?#J+#|sL z4+^vK9}tT$;CvMVbAg3^6e^e%!o0k{D)=y$WU^(XZsX zxVG%>n_JwV(H!lxKMh#EqZD0o|k5vpl8Wp@VY0Ck%6V1dm+6HAeCF}g!*)_0`W25g?6qe_e_r)Ee z{PzSx2rz|EmH7PQdWFaSYm#cPsk|`!Guuq34KX_Uu}p* zbBIwSa!a#*Tm6|t?5vI~Opmn@Dp#FHjV-SRBp^|uZnTS}M{kQ>*Yc z`~%=g4uQKQkfd-KQ#reYTDpNl;yV68sOGjhp5;&_jtu$a?9$gOfUF}Fpqr9c2Y6ij zygsxVz$PhR{Ivps_O+!UsMS=2IRnLFDJ&e3V$09r_=4ps3kOt1$k4HiYGElbnsaBA zGD9Tgama|VeReWkgVpuLeU$m{{SXm-SST5w3V0)hC5-mMsR>~NkNHD$xhcvb=BBbF z#e$5>rBKHGQNW4^RxxrwvwIf)qj{XNX(4_@abgSzfp>Dq`22%3h)S?6vS(i z(Q_Ez*~8;+{&FS|>c=BFpn#`KThJt-su-|Ds9@w)Rh!h()$yE}Gx~ZwjeO`7QIV07 zA_0)mojyo>H@0!W4(|it;UIn>2L1)g(h-2RBd}Xc9XN2(22|Jz62SP=_Jn{}4^K=_ ze*)677Rbi+s~ci@i8o(0jROr$d>*Q6WF9vy-VV(6y76Pc*oKEdI~mbbFXw!+EBEx; zNv5Z3kCajR{MK_#9c4V*FXP4AeqFonqg~Y>>VFUtM3k7*hE}J}I}s@u1hVXXKP|4U zbG}}1>%1#G-c~efp95~M@Vwt!bT5wQOG5QIu#eCQ1n>ZQLjxW0zA_qux#;tlDSd6% z{HjDO^9?X3!H9>)RuW=trkG)1Q#|{reF~v^F(8K^t9KNpLAlF#;6G-To1x{CS3gra zPm!X^$6gK_J?38lA;h~acv$kF8Lvw*3{g=bfB_F6q;;%;cEN&q)|3w4An9HZy&-*x`EJ1;0Z!BK!%lJ}Du zF&iDN%?+X14UHO!G#NYVkDHHv7x^QJ^9XLhu}o-)Hdf-qxZj(S1T7!-@epD26e1Gu z%=`BpNtKxeE)wRcaX;lHNlftg8`q94dW6UT8!i6;ch;X;i1rCO&Op>CLx|5D7Bpgn z;VS6rtX5-Q4yJIaIlfncM*tEP@#;CM79R@8Z0=|@k0u&}h@U$$9`$bT%3e8Rc>{^- zYtr0z?|K6rMZ5x>W#)1|_h&Y&sT>#XVAo3cH@crcPTjr1K|iEN^E56z_mSPk7tug} z;|4f61p{gC+$5B94c-@GzdgetfXXPXzhztVHM>WWGHaO3U-Q zc^ywEP5U{y_if|_txKiV0atDVZh+6`Qn-8VcCq<-X2$qJfpXm}(6lr9_~>}yiy@L? zlj?Dk@aq^-MEu9~LI-*YvVy*5ALibCe$MOB-?noZ2SOy!7|e4Vhuh|39|2k`3g}7r zCI-63@1_4sW;>Bs9OSYBpW}<6x)Pk5*G|w`LJ6{*0ecMHP_ZcABQSO=joy;v3v&`5 z4v#?JgM^E%;Y1P>w}nZVow#@az>^|!xitQ4Qe%ilLP zl@L)<{nv$1Xgh(1WRJ_nMAx7$)`y}ObA9~K}Iv;)y)cA9_4 z&!3u#+P}%~_>l@cd6Fz1w*w^u)6T##bh3Rq0ZQ%T<0WrX9DGN3QQxM*=FNbYS4$~E zh{^H>`{lqeGP(J%V{^(RqvuD0h-rOfi?NgIMtCey%R!R|HI*UvKlID<)%OJk<1!E^ z$oOMZ!rpUt`t`dfCKcK^$0WbwOF%;h#Kl9rtb~!YGKg z>g{N~9XWG@G#L?gMK5;aYQX@>!ek*+l3rineSix2$5*6D4{?Pt58(du$p}^CVKR#X zkF#G+-5B>WTj8S5fL;CBEYUTF5nF)%K3t;cL&S3Ao?|CHC3is~ig^o9i`Gijls zUiVLpLM7BCvXJV2nJC?j3EGIRinw*8r(^&8|;W)=AUyD6Q}Hn zqe-M8W}3;9G+|oxmfk-zBl5ID%uIIG)`|2q**Ow!FRe}X+Z7lMeAhWI&}ovd?frgi z5yVa%;@?3a>p0!6yd#GcX2eU9*Hbd2<6_14xR6&11o{!wbiJGaB8q`E`-Ae)2{GXQ z@i>;R2Ks4So+GYuV=)`Ab7NAG&L|jwLww@h7W#P2CVL!SI4P{hc;4!I4AVZTAZNg2 zx6#BF7N8Uns+(C*QherRX*#t+vd+d&W_%e*S5h^y*QZo2Im$Q9*y($Sp)3djaFAO+ z4ToZ=u*MfjLyQzL(&~#HE@kLU;uq=1Yw207jORX5H2$Sf)YA7e%i5HiT}D=zRWtS| z2ANri1sz?KByY61wF!#OATXeyoj%I8AEp&Wz_5S}vAOrs1AUmPB4qIX@ZAhi;JbT> z?G%!TP;hH?ehwx%FMV~?7Owtk>*sVm^lIj0#H%b=xyj|RTtBYLO#{ls{^sJb)wNwM z-Lh{n#TdT+cr(T_A3_O)i({QkmAbXQ2+aq|#b|asZC6YE&Z5d_AW8nZm+J7xY|Y~E zcyLf4X~I|2OD_*or>WnKXpo6gSYu)+)EOzQpG8S!&m!|_4dCxUM}!<@9%|5c+v0Pmpvye# z5T+3oJG*w*#>4NCz(i#wb$$Lz!Vwc`vUaMr+a9N*VjLs<8m>pBu3PT{e)ttjYIG8L zYSq&_PnC-t4W0wz(!(f;(bpnwHTAd*T3bnSCLwuG3Q|HcBS*8{v%JtGFtIOhxa$VwQuLRYH)60JFm;w@iOGQIN zLsbz22|o=d^APg{AU*o4d4)D<4A9g5ypHw5fcr%zTZvln!@rLuztY0#D%Ep0oQfF3 z*ikZdXCmb@Y+4Xkdm0QRWXSq;fAe-i8F`hAGSNByGL6kHnEe~tzgKfgo5&PQii2{y zEjB(fiRnM|A}nx8?zc;j&30R^ggv*oaTSExhg~ZgfliVsp))JtBu^;+!lTt z4#?q@VsT*-28d7p##L`)D^fcB!@q<44SBUjtBM|dpU%?nR!2(%V<%|Cp3g%KO6x;k zgmF_e{=C-Isc;ZeLxH@Dx{fZ~SeJPt;z&U~kaL-MIrM7}lr*uTN)UtLL0TD+Zl7vs zSwL1eg7kfCmdITqa-NE5tjFp_OA4?IyXYR8ZowIJzz~Cw)|+i={=ejWS>>hs<74P+#&g=yrh)x}Gg}Ihr zRdZVlg3?K#MDeiZEBKPs{teg z5<{)yXM1lFkQv?zG2{jHh|=EA9je{t2tI!U3Bm+;kJ+7{2<-mB27w?j53AynKX&JO zR4@oS2!7|K?VL@4dj3={?;&r^AKWSwGL|EEs26F8^UV-qt770! zByiAJnE#X!b_f%>-3E`(@VpELF3b2gYPkAp2JeRjpZ@uC$9g!0Y<^DPsow%rG;|O9 z!^o9e--z1xr@1~ZviTIYX_MigbH^dSB+iJ}f9MyEeqje9E89$$-MhTIw>(4M!|Ak! z+$ZIAz(?w*!?|AM6^UQW*>$rk0cUHlPVyvHybe*44Z2r}&68VEA5J_m${b(=3p$)+CO#v7G=Es3T2CIYqo#F7^)ce^yLA?oNU z54+a3dYcPLN%Jilm^g?J&V9+2G-i{yIzRK#EtIVPd zUO%O;7kEwD(|FV<_~is#q%0N8iJHT7@T#)wIwtH~JT~}2C{mE5J1Q2X-lKU*qE_B{LBL2?lN@9-w)b9lVCB*hmRI;py#5 zryUXKD)`6h8EKOIXeUiXK4ekaYJo~f8O7m1Yz9|^2^r`JowS&d(E7O1X7DP(2CpJkMcSXzfi?TX zE!A=qg-i~pVWny;cXB0OHiaA%BRmIU5THtrRkR;1cglh2)R&V=$Y-Z+)NSbxUn(kE zLB&Ars;QUB9A?^g?Hu9m-FNyx0wa8Nl^@Q@ zPvW!9Snn+*i;L1wP2uf1A)M2pNe30NO27_+*Q`ep`|oH9X{j4~HrP5)lc;O^3JYm1 z8RlRLDS^V|=b|&%#;hD2)DxxYa+uv3mRWy7R0|F;r6n_|g>@1V0o#C)hsk_G{jSX~ zc?cmeVlE!ng(v!q!Krid87k4_DST5r2ZscYB5`&*^_?pm3vVzjUJ8XgB_I@n5L3dK zq>-1IifPu-!_P_hW(*9{Dir=kvZ!9A8PH)!6$#cEx)cO%G)`YYy!=YvStQWQ?mWGz zBl4-^wNew)Qw*EATQwqO7GrU9Oo@IvMTbYJr%Yl0bMoYZS13nGk{y?Dj7mTul!~Gq zUl_9R))$D$hY2jiA}{_&)rL(gJ}Tm~<%w#3 zX9;B@)k+pqg6OZyWU-uu)$Wenee00Ya!d;zB}_>vD2`qJDnIhj(xJPco);IL7C$~S zfx?E`?ckj(Ng0$UhpB0%ByAIseWQXM11=~mZewQjXL;|CvmkO218CRggU{Bg{moMu z$;q++)e_NPF=uxve7NX@6+Xd7UjWM|YNkRwdiutLh7pQh zMGENRJZ$MJm}+$3;F^Ss69@`10=i^>Xt?AUCw&JOJpn&SEphkpx%H?(yo8>5{Ob>Ee$I>4Qq(0mYubws<$X`mJ^xZ=u$Qf zqVN9x%V;(4Do^vbN+u=7t%o;Z1SxfhX_RzCl)BM>ErHv?%Q{7Jk(w-OiP6yaM+^Yz z*3u$i3YsJo=nMFrE!HD%zMkCM``~2r>_6JSA&Fl__5!AxMRPs!VgFgGo7+sl_zp6= zB4u(ujEZ=Dc<*<0dtX075hACI03r5HsV)T?jAWUt{|+@Vu?8HZaJDMtUqqi02xC~9 z_$x?Z;PoXeOo;^p!F%Bfw4n>~<|j#j2Z14on8L*g3Xbdtl3aEO6Qjf_w;GNFGweiC z6iQAUVh|euUxDZS-tUWsKu)0v0tX{ef#IT)DMo<{F65RTJO8FCAwA&4Z+qM9V^+$w zIQQ;?{G>TBjNAQfG1JQOb3<_b4LeZNih<3~*78NCqDYJS zrC{&nRrPjs05ZglH)>Is(wXuKGMGb5T}HW4B9k{;xY$?)j)4G`gAAR1yt1ewuTG^uA0G0L@O zveeY9qs<{K3@A))QP&tF#<-MS`)khEfLxe}dyl#5%f5Ca55*vo7KJZKJQ!v})U?=Wg9SCR;OJrQqaI3`JlPm%^zg?8 z`JpR}#MA;=nRtV?bOW%NMw)sZsT6=7VNP>HHfx3shIXE$skI%~`oddqYctp($%*FL zj89kHbtIv4;;yG5iJo5M_P;-k{ zQ9d-YxnGblH#J2zD6#b1Y{Tn|fzWMr`p=tZettf*=E>r*L(u;XT1XVoHF)DOD+2J*g6c z5NeQ7DxST*&g@HBN|$o{F<@aZmCg4GhuH-m%lDwUk~EpYVKCSaTU696VP6%oc4v8) zg}M8-_(K&;Ap;iV4>|>SC1*i8X*eOYjlT*LN%QfS;xy^6xGHuk<+xD5T){(cH zdCDzr61Hn>^DKsUNS2s3TEVYi~?^M%J8Y})#MijK%i-b)Z#SI^hqr;;@Knhya zBrwIQn#%RLgM$ola5Y5}1QMv!!9m2S+g!ha!+SSpLIGu;P21b3hpAZFaeU>^GUX#x z@`D5U^u#2RaoH4cOY8vQEIwO1`6fzMy?B)ILnE7)M6uT3aNxcR>}-iD9MM&E5Q6s^S1XT>1Im)NjQdztUzy`P;2!DiOPd{@?nV7n-rHwVhDo_ zEtb{}X|vR#@O0&duEtsn3P{Y|!~47sFkM|VxhVhO zc6f3bDlJ@tpX?t5FkuHL4}hvaMIAC{$gNEtHf=o2*{`V`IN0OaDi^)}!HK@Y^jk11 zSj*X}`v5-#~WeiaMX@T;Z?D_+#_Pm z-=Lo|H9>K}yZ9J4thV!UyOh$!eiCcKB$7O9}QvMPwT3S7yKN8i@Ou_*s0 z%H*_MOCa z7a5?&g^r+*TzS>gL?5BpArBxer#mJ1@mxC;+Nr$~N%#FvFTYMMx}z*HIRX2!L-5mg z9~~e6I-KCqMxiY1B^u@66(eWJSb}g}o5qz;I&#yY@5>M;<}uRMuqOkliKSD-0jSat z{INMV$aMrlD8b@pEXYV2Fz6$-9E-ye*lU49F~5IM4;{kS@{vlLvO|T4c={UaU9Hea zRwADS*9M5kL*&9>WgO;4MjqKA^D=f4moZ90^@X%*(_OMc>O)XD#FJ;n^sK6Qh9>(~;c(*L;F zE&z$NdbWalf7pk9ek_&&`)Qx4`|TtLfZ%q0zDIqF(gbW9FMT;M8V4OWjO&7m)^U1a zd`Z3aPge4}+w{QxRmS|jOZ$>TqSuh$PG|V5j4i%vtEbzWf9GDQ|InKhh7{#ScgjDl zFg)?@!JCS$Nc+bz{E>eAz&i%|h{!L0%>g$~@NMfVd9xEF(Z3kVJLcUrFuZiqOV$W) z<7AG>h@*i8bJ8zz0Yd}kq792s7-qtrqSku3rC}(@sbAPJg$!Xro_N8mP(9ODQQUQf zi<=sU7S2oGH?G!qA`ho?h}dXrkt`v|p42n>yj%gVdsi<(&ZNMVMf8hfOZXMEaIH9o zMKBXJtePV`cm#^PphFj>yP~>Z#KZvU<{j+xJGkA_)(FW$X_jTB6IAe zOT4M2Atde-*^tXjzTnjzjV2JPe_evvqZ>4ohNj8xJlR^HM7}oX43;};W{(5-eM=w} z|&d<*cMT$j14+^{rV6HB2pwff1sz&R6~~htMGn;cQM<2 zmBRlzXAM#W3i$^UIHu!t1!DL8_a1G$25wxBuNm?u1?s((!--`QKU9ctz%*%+YjfzD?(hb-&U7^?<2Img3)m zZv;IH_Yr)rX4AH;pOb%eW&Nhon* zW9#z_SSl*`SGp6ka}?cJW>RZo*G%~Z@q1?s1;kaogX$)EVTR$lf}j2SYRtvF&D-OlXd7beB&!~>j@f-wi;?#AGu8)oiR;K_JK9JuCGbjR0&pOE@eho zTFG3Co&(3o0|uyqX!|Dg7gK+B#qRYC*qd~*Kj=vKj|*ZID5$7HQMtUIt^mh^e#Tvx zSYsa}Ec>?OV!$xhX&qYN<)~n_-aPbNnjFSya;{V9B(W`42P}8;#ijMxM_?~9=>SuV zQ6lbg6zrggfT)r1eonp>3<;r9{o>E>cDl`z4d344d4B>Z_;WcQ0H{&4f#!{S zk+`HJH5C@(SW7EcT}+N`6J;afG3=+z^6b(V?KAx+*?k#IJr``_TSyj~!g}SX(S| z#kA~QbliZ>!6=Dbh!%yGaDYrqNl8ggwp;x}!O1OYyn8)++MoXmbj7+hrQwzQ%(w5m zJHL`MKlY-ps|V?>R`$;9d_%SPq)ta5G&9@w4?7TA!y1Q|=ZMYs>Uh3)RtRKaYdtkO z$_1G7YO2};E)+%~=pbD}z-bgvCn+v2?s{0WrXQb5W!Y2kdr`44`CYcBK72ACYR+^0 zCm)gq`fCwBc7e`)CvYWVmg|i|FD&v)yb6O~c|nur7qvd<_#Y6UgnE{Nk? zCzL3g({WcV90^v%6>|8(iNq4zIYU(HEFXYo_g ziu1~y_yw8cpnLL>=l_B_^nvjd`JIZI0Hm3oq_y>hErO5!lBQf(w}j<~Y2s$C;_a&3 zlPuhblnxe&Lt+golcWqqeF-G~W*R0!&O&woXFE?N3WWtJ94~{(j-VzgseG}2_M5`q zvh})ma0J`MAx;8Kx4hO!^eBm>*+5!?SCp5d(AFwz4gxXy$`VWUd$0NZ$aV|4RsYPO z7zCDzh`quXoMpK%10tg_=NN$;e-scS!!#<2Qxt~&%oimz#wwsDjSF>0-<_{s2xl23 z$)Zk#>EmXpYz$8$xkOuH_wj~NDybk#TM%f-)G!;{AbOMfmgJFbg$@xW7BP zH?6sFB%S!KUf9>Q5+)E+Sxf>^r87gJu~`!+$4M2!Lr8&n8{t>|FeWzGjZY0T@`=Ip zKB6e17I)Y2yFtN-mRc9g*di4? zN(T0LfVpY7C@6}4))Y<=w;Y5nym+ag?oYCtm5g^&Y^3||S_Fd_(l>>QcXG5Z82 ze`wutqvk>QmjXMm=@FRMYAomNK4Wo&bx}>9#Mmy#$e9!xmAhGK{vw{j& zh^rT7>YE0MtsFIDFdFsfi7#zC(i1C#jN@6CCzn(%O#dB0qLtSpU|1~lJ3mRH_D^L= zlYwtSSG16fr$!EtdK*bA)se{08q_3lD6E77e-ux@v+M)0_VQ3rLnafGE^>%KF8iXjJp)RW`P4Lg@k2AYbv4< zkzWu6fq{bQ3mZXyuicyMHn~m5Fn*CZWRd{_xZR&0ZWMlE!hDkA1=nq-)$3h8JmY_E z4<>osul`;c(2vhW5rG^C33G}F>|kT!uaDOZNp*{-jedg@rkLV`6e0GEgmrg6fp|Gq zn@C{!{iSS)EbN$^)j>@>- zGzVsJdc`bt?HrVHVNo^Op^;@E!oo!cVzE$#qhT0~=YAh^1>T_W2BlM*bG@YyH#7f$ zs+tR03H9bj{S$KL1kX%b==+k2Vx`-*1Y#pWEe5sXm-dIX=7S^DgFMJlD?yOpQbGLt z4~b__e~ni(qQTEFLC?HqBFDIuRv749}Mwz|6^uxHKZgPMuyoh6x_wD3i>*C{} zTpoliP;#`=-Y$k_G`TG2OO(Vydkoa{qO%iKe2b?n-6RIZ@ZCQitnD%k9GkX`2@^*| zIW7%4_l`n_#+s^=2{S_(v^m~;mz$6u)^X|9u|pWLlpM~o_~4=|Un<0NmUEI*9QLEV zh9+t01yl}eTLBzd=d_)^*K&TjbF>fN7vu21Lwa-qhbel!%uIRzx1FMk3$C0b|XuhQXGw%0%h4*6`M5!tbwoj!nI%4?`tl z0&lMb_3Coe0xH&c4%B4(JcQd0;~$G`hZ%BuK85~nn*{Lx;pL{js_5uZ1rn>IMDe^l zbkdJ60rJvsKetxy-kCO>?t(@7y^9018|U*#*^Fs zt8zwqf2hu$+B!&Q1f>GC)FU1*phV}DH+os{N1_DZ$K1`=QXF`!l>P#R8UCxeCDRNu zwM<*=qsB3e_(^2l=JVNmAcFzaM}>A}I3~Q08VP*(l8eicl8wgAun4@|nnfAQKiWnw zZ%eSq`97AafqK)}^aA&}onEEqXZU(er;pI$YKZTAt|sk9gWKZN9$rQTH+M$6Be;RX zdt&IP!=nRLvh29P$Az6sVg5-46fl74cz*v4;53fUwQN=YNko|Pg@@Vg{d$V3-{QF-M+P%m7i1Y)g$%t;%xnF`VU@fDq3e2 z0Ql;SM@935-`^shXj{HX7d;qo6|88VxARTvh$WwS+2`Yp_`BilE{+Q7qFvdn^*vfMtc6r$4^6)07(07w!(5S;+bZZgqnzb_a0-HyMZco~9M6Gs6V;{El0xdzTkG z@FVHB|E(Ui#G9w}$FGT|$vI^%T)e=nMecAv9Md^a&8})rtwL+Hxb<1K^*b9X9(w>* zPhcn$fMLtqzN}4!N-yWe38Bg2IssPWKWV9d%hA3y0(=73BN^>O@=U<&JZxwsEl_)v zx6!J1Q5yVj82u$_*IK;(0jNr=@{2Q@Z@Uoe_LGTZHQOe54&T+9X1}ZOvRxkWw3FSH zpVZ)X5*kR$zme5kW`6gReNNMEUo2XpaTV}6eaRXx@3uQ*(-t-UKy+hTf1fyLdYO8F zA`3C8*O24A8R8>MY3}MsDo*QzT~+94=Ae|)@c3`>Q2ZF+1r`r$a!OK8Sv?}Bs`m4g z3CCu~W%@}CAZ7gSP2#bc1%ORIVy4VYtbMQoiRV*dcwUwm)6Gs8n`SVw0IcNMCLayg zb&~n%CZoM>`Nvho`aw;aF2KnGGM9PDTlXV~%>=qCZh5Wk1u4T+>bBXBJu*7c=f%lu z@}M6#eengCXG5@+55lbfN}M9*V>;`3%w?^fQ(Wvqsknu_u9|gH>{7L^O*aK|?=;YGoOOlWiM)Nx$Gs`t}-Z(rr9p;?(Xivf;$9vcY-^? zoj`C+u;A{&Eyx1|PjGh+9^C!z`&Hd4eo(dcZ0}6Zboc3VcvYb0!P@t`cw04NAu}{q zlQe~rxw$#8V#yK__@;4y^=$M$_%+~sNexglH0-b*Bd*tbHg5e7#w^H5s{CP|P!K*F zox@aIDf_E{gG6rI5Z~lkKWCGf((|`t*$&dKb#juC2KkC*?PG;-i-rz|kU~PI6vv0m z?Y~-1Hjx9z7m8NTz9X{nIY}1(2wfLNX!8igcmu}^pG}g-rq9H=cv?BVmNG4BS6q%- z8d$TEiuK!qerVD2c;gTln}ulG!cgEbNzb7MPOCCM85 zY%B+7p4WHFSh&B(W819z-q&W?*YeNcCadEH-f1d&T>L5h$9*1m?UQRuh5O{By#!{lrQdSPPON^&yaBf|SB39m zN1g$89{H4>^L6`6yWT^Z+`g(&%AB5g6UNVhcfT?_7;4+yB@J`h7Hnxg1nlv`wTcM0 zPT0QPkF*NUPJYHgLP8?pbG-L`@`mjeH|q3pn=Y0Ii3=qb=|gM-N4E<*)LM-w_t-j0 zJYI4Sjgle<(WHI|ai!#&8xG&U)gLpOK zKk@7xx;6M~9%g&JAl!dW1iw*=k`~{Y5fms;`luM}-2vA(+2BjGlE8NPGr;Kvf;wi2 zKkzTWPhL7Mn?&eQdUw7EMbWyL*N6x88tso(A<5l%XV6e5=+R1RM7xqe(B0JM{j&qd zcP(??RE&aw`iDC%XQfQ-uNEvaQy`3GXk#Tgn@smt#s!l)h;I&Dgifg{Ss^zL?i0B( zaPW^ivCfVhHx}BPN7%n5c055_!#&~1_}aDen~pJ}X)coqtPPf}T>Sm^m(=)U_|(p& zT>o&3FptZhhR)JYAM+|qS#gY7oi3YK7@FrY{Lyr>BUMc^T6d=&@RM^!o^?5y4o^2& zslufdn=>wFzy#w;o>8_s?u?eRhfv@V;~`t*-l%~{Wkuo2@)>r_1B)|>_e)I$85*Q? zTq3)No?{HMGYp+IFt-FUo;jM>^(K_1eZcG8t0eDEOi)Z*^m0@;(U;tjDH_?*wx`QF z&Ej=gJJ|bk`q`vRyx-98YVpS3hA{KVUl5*?G^dWz;dly;y`#3ME8TqY-}X;%+!Q9H z@M(KJL9~<_{EqA4WHdE1ncH*t5{+n<>s$s40^JZAV-Ds1^Dsl zeSFr!t-JI75a)aXH+yY#hj=!}M(By`?Ax0o-s5dG#TA`pwPmKXRJt3yb|-7eD@Xol z)%2pOb=EJHA{c9KM=z?5<4~gPQu|m|S0f1xYq}3!E!;i%5IT zy@kS+8QHUO7V4TjId9>==Hf}_rN2EbOSdny9McvN#lXucUVgmq-L|Vh!;>uo-9ap9 zzT2m6k=a>&fz=RE(`2O)hl59W2`q*syL$L<R>MgL5P=D!bh$3jnQXliJp*o}t!tr@sSY+pzA%g3pK=zWqP*RYFLmv zTOE&>xkZ0WI#=|(4XX_k2G-XC{l`v9tB48L+zUOfXcgYOujPl{1}p5Gx8%7WvN>J+ zPahe`2K`J;xfA7V6?JgeE{JzM1<|x&{|sx6#I!)@;y%CQV>vTZ^rn}TB$!q zH!8{_?*jVR8>^D`X4^(uU?eaCC2l1YNjv87F1i8#?fsr98z<_@#<4i2r7ad73JgAj z4AaeBa&{YfnGV3GYH8nqG+DQp~a9H;v{TCw#+hMQR*Y1AVP` zR0ES-W?V~dsChgr?&I5`CXHj3q?RvAL2kV_-YOmj5O6}Hj#;Pop9I)PztfmDTH3kN zn36xL9>T|0R<`T3^;m{{x=Dg|tT?UzP8uLuzd5)ak6=w~$hPK$k1M6PZ|RC$*W9wQ z<7N{dz40)sVcgkJu)5hKREVu*n8?nYle6wKWqU}L#Q5dddqU6qt`n?uisXRtLF?Xl z_+7WFzm1}55{4^5UtRMC&kSyk;WsaEDX(ZlO0^+bRZ;c$c3QCEl-KQLzq|DKOEgP~ zZteB}4eUnP#Wh3l`}OPg$+kApH9rJNLey8nt&W1m-{WY?`*e&=zE)WGtf8Z5n+6>c zurM9ZT{X_DH>y)%)VVvkT%GvCrQDXgDHD;r>$;Q(qpKa#x-xAvgT!jc*KvOD|6f>l z@?f1ek(ZWtexKDrEkyvExY>=uk?oUd^&M?t^s$ZP6R+Dw{lZTQu=jf2R`#zu?3>-@ zhUxAbkv#`b>#P^h`dO9k)EybYq`PL}CIRPTVh*Hy1RyeOmm?Z+Xk{N{VV*BR!O z5F9`aH?@NH?S9j!_Un}eO*TzeV;c#832Vu0=O0#3P?%~31%(*{ho04VWE3{Bvu_gr z7iV9rszv{wQDB9}W%pU29eE-Ar_|!xth5Arnjyw$quDw8N)8uuLVOvlu8@7VwyNtiL z^s-IWTWRXCG_DjDY=!W`W?efFVy^d9>%R4_tLZy@TT8T6Z^WgJ6pLIuo_u)D*cw|i z8S6*`>j(`}$DBSGbnf4{XZO1{T^fZ2P9gz3V~BL2?r(}kj(EGz8>{@^Y3 zKSyn>Ionq{+knP_V&F{gGrm*4a^17Z?gx!zhyZFmPse?rzJH|9h71OQXb@S(z1CR| z58gXe2yq@K$s>i)ppR4dTlr(9`J@E`kXaaR5wtdd-&lYF z*hXMQ4TJBPPLOG(9~ya=^+Q>k40X(P?dVFqnIN-GrI;xbHwg^Q;h+AkW?hC`ezfve z)ujOHP!*AVa>hhX;^7mj2oun5m%wm}F$Ve+3f0iPV9CiFCS*hPA{?Bw$}kWeAm2`h zk~XVyWy}}?^i1;nW{7htO;DUw!>u%8Z!mmv^R%7`l!?^Ifo=3Jxt*$Uywsk+&iM;Qj#EwhWU`|ny|VAJ!- z724&8J;lFPw^>)xW80%s-fMT47|N)&s_v>11n`rT*bSPyH_v;zeH_}q;YOV?TH9*q z5U^*A;M4WidvrA7$R}K$oBqhB2lS{;^+>whiOXqXfc+C=YC+4puFZ3v4}n3zc{`Xg z;nDSWJ(}IWEg)PrSm0f>fdjhJB{7SunulhWhHjXoxbd&dY}~E!^MZoXK!C$|6o!u}Y4v@&&}>=OW34O>{5m@JPU5Q9E1{&d>`E2=~R z1CD$I1O&QTTEmtNXYCGP6@8%~QF}dLfv0t4XlHA6KJu6^%~u5M9TeD~3dIX=B-rQX zkperT7_+|dc}d1h$RWWBi{}qbZhJmK^&FS1vF8n)c((-rn|Cwpkqi4bLZl{Up9_e} z`gZO#&^sbai2&F3fFO<&51#;0V!+6`dqJwrSQMjdG9YE-@XF^|C6WMm#sv=tn#8a) zpdN$gnRGXA9NuXFW{p3M(eviEw~2R}d`bB*q`26@lZDyA!@HjzonY93^9S3ify0Y? zM|^^jI)D@8OZf@mi;Znm0S~6HIZ(LzuLc3Gi=BM2$6Fi!)D2=0AZw=cZ%$fa>>oYi zoO;lJltkix?%S{}4_iy#qU*e)dL3)86vzEo&#jyB{OfwH&TFoi+t^8MnrUlqJun>P z_Z?*L5a;f;5rqfa^feTKXW*LnhjZD&$+bEz3Xn$LF}8i#_L7nZ4LEeqSTw)@HmE;I zP2Bg*JihsTxEDzQI&W1aN1<0~~(Wf<}9CDF_l#_0Tgb-<7MF-H%1s!#bVyH~!9Y3BO) zejPt_VqjI10zCG z6A;y4hYyU(9*fr|mlD=E!B|HwnaQYs(IiH%TA5s?NG;z^i5S}DZql=jx%7QzMFH&# zUg&7@M|B1j27t&`4OrUfrIiu_ga@AA1>pxiLEU+j&CSfM=A~5cn2a6Yk{CR`1pPTH z(#O|JJF#nh4=>C!=GvNtHs9quj#(n`^}xCDgO-}E|KRN0!cutNn`DYczFqlSdvgg9 zz?1iAZIZsQuCp}jgAYWhKBe8p@nvL^5Rcynrpzn|mWhtoAJ^8t_3~|U-XT>^9CORk z&CLbbIdYrlEb8W6G!C)f_<>X5>K?3?uc=@tPqFqju&zuku5EmT0#xSiJg&X?yo(4G z9vA__e~rA_tyN8z5s%zt)oY9qgTV^8D)BCMU6a!qFu=F&6#~aax4WC6x7Q$n-h5;c z-=o<^H>7&!L>K^{%}7gM8w4W?3;Pfg6O#wsZ-F$1F86=_{!Y#detjSTiQi30Q$ef@ z2NTm$oq3oz=AySl^Ihsfz}IY087|FSFAXlu3U%zIC5S(il64FSsc=teWF=!vdM2t8qDrzAj>zjJk;<;1^s!2{AM&1%h?@+Y1y+$K*| z-N7#rB>bOHC<|{MCtiaDMFq$J&RoD8^ci=a%gZcW(T^CW7(vHjDGIy)1R4uEp#i=5 zGwwOg8mPI|p%iZP2GsCx*gz8ahK(2zW}umwPQjz4cTFUL~MWRZ4jj*VmCG%L+~VM(=fK_$#$UM+hQ-opv>{A4xR z@eS&|FGzb>>pJ}e=rlgl&F{kkUl^c)f$OK;RH@h@27|A$#Vrm@^CjY7k$4|FT8460!Gs`)Cqv#3|jmGOy>XG`8R#>97oM)V$yEF2+I) z7Y;}q+E8=OJ}hg?8A2TcQw*RBYMq#!4VXW^)z4AJnVzW~PEE50UT?%IOIew>yat6bpil>F#pO{eA!Rw`nW z+~q7hc!*fW=N)dCom;JHr!MC? z0IVZ?IxYMRBe7?}917LJwysP-ESDZVELT@v4u+|EW z04ZnNw#Ll~+UG0&YY^e+VD>9hje0YCt#9)yECJtUezb;3%pw%fUnbK!hagPZPN?i{ zbLRS$gSHJ=;e@3Y-9MnHq#&3IWJ>T9;Eh-L{qQ1yDI9vK`D=|W4XLdTKN4(KDKMkG zD`iqYiT~`*okCnu!k;9B*~gh?MMy8MT>4G#=|rOSxa|NP!KriGW95tzmxz-LfgEt% zVq^~)k|;@ahe}nfEu}!dhw9mNB)E#Sh)l;E^r|+odIvjBCI4Zj6<&R2&{j#pkpZrA z3m}O+`{@5+WmZte)SI#vPsNO9!07YIRJ0&Fc^{Qh&tLmPGt-chRj4>AD*l>Kg+Jjo z@B2%oJz;MQl)fdPAh{FDUG#ve+Y68|UJ=P6t~3Ufyk3x9hLL#dEVW{s&0cdM4zpJo`5oa0~Q zpR63^fF#V8NFBuF+waB0<9j`7$o@P8@aX3L#f2Q@7v^y>F|nNRzq7*%`rQ69 z?(iZL4Il*DRfa0Ht4xAlZt7xb*7!qBq2qF37!u#u?va1>g=wdy5H-sFKNdiVstFy| zBa>Nj+6A3aDLTca6;6vkqJXCl_UwZ4;mZO}T`aD`R0!RP0mRbST{GmiSxa*V1x{F@T2-w>TW43( z_1NOH~cA?M*BRb^Ifs~Y^j1d6P`sYXku0X{0;BXsn&FS+>UsR+>W@(_) z$$r>=syY3JRhrkAf)j-A0bi$%axs%R`a_h){>Ya1KvlwG?1Y+-5=L-c8zJVlCggDT zSs>$jBKG%tRr|48)e7qV@Pfwp-^fK4CZzgluvJ+%5M^sHaS6vA125kdV$cy2bpiZNGkieP#T_?Uz8(H9fpAbG-WTSnmWB z#iTg8@b~w6k=bL&y;AWG+1}pH%*+%Mo=vzIEa4QowOXD>=@*}7iB;od;_%(kz{$LJV~o+RRo4M z6w_{@EgDKHKga9CdyGEJ9P8HFP-KNV=A{#5qxq;hx18>T9aA7|z4JKCoiFh(9v4uh z-Enq2=~_72Cx3;}YcEXBvp&DLXSTYT8J8;{6h0lqqnEyPx;Qf*^>9Uj5G3-&&jaxM24whvI6EOUj4LUY&7|bdlhj?5M5M3hA~VX9 zokLd*0SKp#9IRnVj>mo7h$1oWWPB?xrd}^=Fo#M#IFao^O-)VDTO6~2=UW(kx|Clw z`}b}5IUfIU2$7=BXE>mGJGn=4ozpgy!4IrR^_|Ty@v8PAlX)ImhR)T;w#c8@9gY=-xA}E6x7h{3VhPh)%AA< z*^OLmZGGn1MeolSHZL8AJynWPt8Yq}kfP?;o z0G&gITfGtv&%f^hCeP_*6hSZbinlZ+IOh|qiVoz>0JoXLthV~S2y z38_h6*LBJMZQk&0;EmV0qp%(hsfq`O0zux02(`*QW%z&K6IO)7QJ_C9RgWi6imLY^+SW;!UdO{Zm!!0 zH?McXU&TN??b!%l|ImiCm{fyIk6ne!rgp3*2SzRan%i_+B^kPqsGQ1MhJ%x}EVS=3 z`N}{hq{Xz|{lZrEctQ*pXL)^i}N067Eeoz0BKKTwgHYX}Oo3xhAzS-|! zvY^#j!dlR(aS4pkiTNDASAq0=py*qfY92c)>nOQN^Z9qLCy*i4J1#yTYX->?eHiCw zrd41Ac-r~Zl@zFl*_5|%E7!X(+?Da^!vkhSj|b~nnzSg@L!}$twXCd#Aivtn$hlG8 zNr~gEJDbLSd%*g`Xu6V!M-8v@1REs)j{^M_Ktn(TLWmIsSI_i6`nS2eu|50+>oE75 zVJL5ZIawr2!u(aQbEQC<5{pY7 zD;GL^(w*ra(!;8#fYAC32_^jY#p~&z+@`CZ1$@6U#}Sh6MgfT70z#mJrYIS(JXn;; zLL@d<-UhIqp+l+cRY$_gA;XF%bZX5*k-n8=VKNAE;&bbCc+(_W>H-6pyb-c~6=XzM zB+w#$vIrkX7(ZM(!iU5AREY2~VK?|=MCC%R)3V9-^}kWU`c#Q9;k+x6SLgWP0yimu zv#n8Nl$_EYGVlcV<=!8;c$dzP53+r>! zm?-X7`&@z~4fRgGV%T45G>r16oA(x5ZR839~3H;!xU8jLs09y87ojl(uNPR?`v zUeLv-7vwuYPxo0;CAq!S_jC~{iGK+NxsxSI^x37?xs}7XefAipbRFWq(dEhijM& zG^YGA`VYClLFrSSO$)AE|7MhPHzIuG0Ih#L8TMJR)Ncwbf-mRiO;UYD&_W&$?H)BF z2xzW_nuxh$A(*7g6KjUz;;vc&KK?V#t@OL%r~N-HhARea#9!%PA0K?*C%MA1z9WCv z5=T9JnxQ5m!w@MxmoSJW5{HV~Un=RSRhqsWOF4GF2&guHto!gr`J)VM!2fA8%hJo@rKyUx3v#{W<#N63O$u#*QwpVitkp#L z_t4~d$V35DJn-^=+)PvSEXYGb2}53v)U-)n%r&xwWQBrXJNqt1r!T>MQmVo($Ti;A z*Oy0k#ky*JcIQ~SCuQ+v6ESL8ozPN^5LA)#mQ0fbfRxl!GGU*jp&fyoagbFsJvG($ zb)`rS19fjg;c=tg(_v>YUe#H*LJO4rrb(sp zMN|`9({yXmK^PR*7)S2KUzdYZViO!To+X6bRF9MWp@8+^w?J5EEL|?L2v-6REL&F1 zmu&MQ5%OO@0eaJk5vwQXdu{7E1ZPXfZ)w zV2gZ@BKq`-laxy)a~}EL?kiW)zDfW#Z6X#K0#~AR@Q<<)0!$giXj(sHpEa@!HHYl) zaBZQl5_$`nq3o2H=jVFEX77-x;JH!kfvfgCQH~J=Wqye(a+9(9Cff;*8O?@(w&c%Mr7jv4gQGb?R z!~~lJsrgcjhUzk%Ady}xZk?5mYPuR^#%0qsp7JjTlSfFg5$`@2A*qsQV7|_;!zuEs z;<%L~%VIzhL`L4k_I$a`FtlbZ*l`{W}+{N(1LkY2K(g&QJ$$r>A5 z-1esD;%WpP6=U_^^j9)Q`qE0nM`Z3g&RJ{(m5aDg_-Fi1GP|XLBVQS5OQMmo&4&Be zR}!knSe5AKrsMtG@49?f601pg>b(s`r08afEr*l^Mqc?rJu^d*zC+hrikXi?7nRT7;^qz7)ooahQX5YWmcPzCsgq{aIt7scKyxv71B>y6i3U+xeuo8p!?!i5*`dd;s!(1i_qlA$tme#y2@R9l62qZ$}3@jn#LP+hh#$zU3mjeNrGP3i)fta^L)m&94TwnE_#< zNP5cq9qVeMr&ssYOwVc z^Lw3Tb-(z`^5SSw0GWXeGXwmibphR@f@P<$vIez3{-x(KDg^L;0x}P zW|!)>iGh)PA#e_OsfM@^Hp$AeAjC_==ZM)Jf7X`Rf^xc1s+wE3k^Y^qqrLXDmrTxe zZ7=0~ckLv%5SPOrwceYClmaf$B%-FB_b*J6311Wm;9#-#x= z9glHQOY|3on8VojcvB8fXmKYC7(znPl8KfghvauV9}*Af!%CWhw{CYFp5jj>oXzb2 zF3)z}vpwl58w$k8Y(>9ss4L&pUa_fN7L}vdX<&k8CFiz!7{=%_j2@({P-ZRb6R?%6 zbsCzt!YgT-pHdRkbjy1t8>)g=WiI1sNYU`rupTW9WU;O#8!AA8b(H_$)6-DRJ%5^6 zrgQY&l6@J2*L-V|?P-G+c60e?WzIxfElnm!n%_1)+$v)wL0fzLK-FbySmw{q*$?T< z4@yXhRLF=oruXZAZ{Cb;Co>6Y*|FmZMQkP`!SO5yt8ql6Qw6c`X(eM=XZEcQ(UO~~ zLIXXFsAz-r^YgDbof@tDC>7L=^QA(WtWxA94RqrJim1G&`FrnfBa3D|yD?H&Y_3nT z-HC}mqUB>K7r0pI6(=N&y|VRmMSqaACDdpiamRiW6aM*lQ$nNXB+R9YPefqQZ1Z|q z&D|dW7fIiPYP4N@gr%ZyjvVsCc4& z7SwF{ODGvm3F|+jQ*~XO9v{DTOqTOc8Mb}EwYdKGnS$Jaj2LfLXQIi#X}7QaUa5}v!2V`dUzR9>U=bB8H=z5dB8 zJ|FaFLV=fN42;@n#RS?pu31?k6i-#_O|hG=>S}7B7Q+pJSXqD%-t5A{-QmoTwflZn zOiYaR==TeL^xp^+0H8-ID9R*FKSg}KSN^?6J-IzKt&GW1uzC6e>NyEdgIQ0VFl3%K z{czIO((bJ3kNg1Qdm~mYCDO4mEH>4!kAIw;A534WePFZ{OJ>OreI=aVx^gJ@#ji}eRmmB?ck;Y z(x4+?E85gYyyFhInRR<~^iFPve{MdIASCz}MJkog9gjh6-Md|lSi2CKz0pi}{edAKct-OA-zn01!EWNzrY^LTFjqbl6q`b{ylH_MDN~-cIIjwG! z{UwlM$@uR@y*Mv}tgJW(24Ie8nKw+bpj0*QmEVMz;uWcGg$!p1Y<)Wynuy1PJicA; zaMUAxZ7V@Cicz8gmBQdSmIXa#SFy2l*|w@)!p>{E^+nx{gTv-WZHCnd|K`gZrv(V3 z%JtX%)`(nNst!KN>X5U-9pse9P9D!T!Gu`oTIEgo2DB^DP094bK`wr6*2nrOJlG@Y z#$%k5bQdqIdLv|_>98wDNcKI&bLc%@MD=hAS7|%83bbn#|5!H8FwE?smPa+v{Ny|v zqslBdb~;ju*o8<)u8#~cxZeP4>AoT6;4i2Zk*Y$)02@nteCGsi9WElz_-dPQDHnf zpYPKwvW!Y=zqbG2HF55MBTkHOVR?Uk359k-rY`d~qn;MKC?MkL*{$z#v*0jxjbDmm zO~Th~`Fp7E;+0S(Yu4G_%b(42E?1pMrv9H!y}FGGN1Vxpyw%2(uW+Uj-5h9i_ItD8 zpE6b&pJjX1v7lcDIZg%c);`l0rK%>=BthZq1?n-z1a+9*4VEi`7Kvz zu+jT6ho<)*-Ar8XHn%l~?tMuUaQtTQH zjL@V|LV?gzDit)Oz7x0rVYLZbGZ+K&0i(9 z^SKT#P~f|-ZlEoIwCR4Hqvo(kbS&ZzpW6JV6p%~MfPDTx$wlq&9ugUJCy#IXBG8UE zpM(if@d*ghb8-SfVReGeV9o8z6k?>$;(8E!wsiWiK68lN-j79rcke`_WWMQ*wmdh0 z-(S}AB)QjdS26tCecU;okQ`c$39H%fO!>sc<@VbeP;O$O)-+LEn7yXBtZX8K+XhrN zLPJAyb91ASja!8H-%;ETUcg;|Jm;bg8h(*|SXfwKQcvB`P{_RZOM1@U>?xoSmdxCo z-0w9sbBl(70VbCjp+EP)enBYlnz=Bj_Omim;D1hvHzj**3j>>HHglR4pRZYgFs#c# z1dNr3lr!i&G{r3bBnMr_;={!SAR3tVr@z2p6H1hRFWrNLE#lLR8AQj?FcOr9`kVGDp01bnO8+1>>@Tj0-`gF0|jDln@qEV(24R@)vj7s(#4Gn`rkNO|q zqx0dA3vRGWkOj9sRpT=~V;tv4{yR zAICiXRVOACOr`30@AOn($>ol~_1lQalsuUb?QS!gExFXY#Yn81V1QhrT}Y^iJkn4x(D9jJV4L_HH2NfMKj zJc9AiNXuvvaw;h@gd)rWSsmSJ-B*7N z1Lbb=dEU*va{?P<=3%Nn<>%SlpP%)%ng;H9yx&tHe-4-m##rA7T)g>su{~gJZcc{s zv?)~v^APa$jSfslvxu!bb#7R6w>HQ}pC z%ck#fX{89b_T0zM^;rg~}wk;cKUp8 zMcb5RvmO}HjYt`INcP`soRXl?n*qvmPD zz2gNW*7L7md*7C&`hAmii*)|a;F4eVEeiLSAdcCx2J z4&?>&YtHosPLgTGB@x89N5RMcq#CCz_zZ|ozaFyvLm6^upI5EvR@~+qD8n$uaVrKw z_K1-a>AGGOc}u?TdI%EHvNuN$lp=%OB!+A{Sh~yCA=v4}o;$4w?9B@sR9wGTuZEl} z{~7?|YsT1lOoHzBf_Ze%0FPL)n{B9EtHFoFa`eb#Wvr$-ZZM3vnS-xdV#Zi1*qWlzd`x|*U)U(;>}m%M0EbxdOM^Dwek$|gc8raeA{#i^ z>BKfaeu4}*YDa0u-whj&xYs^=ER@`~8&(@-p07@2z56;X!wIDr@Vcl>pMe5^!}_q= zC|r8ZwRX(9`68om55WmseNL_tjqGbXq>gw~+#e!41VKZpd3S_QVCD+>N&QLhVEknh z!;$?{#>pBAAY^k?paEk^(e^cq=4Dt%yFL*OJ&*J1Mqc)2vG%!MN;mf0&T4ggC?L_f z_4506qnrz(fCe~7!uZgQeaM-8&>M zTK@|sy)(SG`ke^Gj=@`G6uJ*NUlLgW;)-bDOM?#JU<#CWUnFCV$={{YE}ES;a%jq| z)+lH=^>R>gTW&TbuX>pp!$;Tlx#)LFUp_wlcCU01zQezy1!8NphVq;1;8^89dS2Z|cP;mJuB;9xJ`TtmeYT@?tOAPNt zuo#(tgO#(~|1CO28H16pDqaz1cEb*gBktJwK|Ff6w6Qy+qB!{1T;AC+FFYWA5>L;r z?0Ps$R-v}lUfagAm6~@tWheju_B63Za;+<5H{QR&nY8YRj*RlteXD-ip@#RCXzJx? z;?9Fv1jyg>!%1iF^to*L&ae}v12ZZ1PzM%LU=YxSJ&$ISgCEWl!xc*YD~Rl`YJQ;o z1QPcI?<57B7m!6WnY*XoIJva&oG&V6tT``~$7y|I6#kQ^@>P$`i=}R6x!>1#o5}L) zlo=erS)q}kCq)yRf-C~^WPiPCQ^=X8#VsfGD$^=7R~ta@2pdRRaq_AjRH2LA#+I~o zvWQ)R2lBrSz!~GD>S+3?FakXha*Viw6$WQ{+h-WhUq5_NDsg|GUC!v}sD~Q@6>UK9 zV|L|vi_4e>0FWEinHCPQZp(XJK{ct9q?qPJXHG2*G9bS>Vu)Um_>2<{wQUB8knP)i zq>(U|loRHnBRZCxzIQSfVT?nCwc#jV?9%OlAR9+50C=yrwY1!FKu|@WukshZKc*+N zsS575aiOM@vR3F#za3{Bn=~$wvNkMQyPp$XE+2cqVyo2bF0*>2D&1|q9$Y+G?JKNz5DEPnhppWamtr!jcqH>F z4yhI_>h*D3GDlK+O`_xP^kgA$!1;k7!*Nn+;+lM@aEek#5gf19&NKHp6b z{+YbOc5+=$@t%hY=(%R=ehT^7$e_wU&kKqZA=s7lVb|n#d7ll^mCgJnXtGX&FH{?@ zDpSo;#;0$jV#PwuF>>4co5-924}>h2DRH0*xIZ%pM#BJ;!6S!UtR*FxMc)oV$$`72 zSy`%zG?q=q9CU_e^+lgZJi-W@rk}GlKe`t2F+=@-c(qkOVwaQ)x0Pf%O=ds=%?pQt za{K%nHY_E6fcP;CdYej5iNXVFTi>bWw|-B4qWTK+CfS0qy`=NmyNOnre%O|I*J|sm zImfE5*?CB?fg-PAEf)-M9^_9>5QwNVyFzjX%JR!;g0Gm&kXAg1136zyUTN zYv*Wet~>6p9v(C8fe>khjOOil&nz9EHB;g?^zevL=IcHTF^{u#$WBK?XD4a2v|pF= z4QmgOJ?;cj?83n(lYhD)PF6e_ooXwNG|Ete0c-<@oocMzm#&Wq#@p|SQlU9Wv^-vi z@_ZFCZCvsKZ;6n1A(qCjuIHLIvL{A}u%Vz2@}LYEupmPpN@3D`jg!ITcV3N>6$4vS zS%by(UV(+Po8tvTp-$u%lVcovd+rP^0D!rH?lSvkDyfffX%g}=imJ~$5_RLmUXWD~ zr*+vGJRz=$#rl;dVEsM#H(^X|lXK%3p&Sw*KrHOxe?ED_AsW(+DjT+Y(A8m-Mhb*5 zm<>)aR##c`3R}VeNsRqT>TvW$H%D#w9cxfwzuNB<T?>;xHhdKPnzXNdQXwlv3J=Iitea=MSF*p~_@2$;HJfH(N3I4aWE$$;bzh z{m{n>`H-A+I*fim9vs~5gR~4qHXNIvX?}WtHsa$+UZ$L^hyz08_z6WKFAmwLqs4bT z-v3VY!Kj@!vt4VxDpQ8%PF}*qv?J;^JAa@E{$#cOFHb@9N{am@pgq1H7AP09@j4;! z-dRnJSndFT3#d;)XPgGykx~SL{}Kl6FX!@3>8u8t=eU39kVG=ypKLZK4fm8HXvHp7 zCY6tqw(IcamtUAjrAJ8K2Cx;!HJAHo%Yo|h5NJB|fKSY$qJ+s0)B3Jq|#vR2{^ z<_gW5m)lUMTo7u&h=y;Kp<`Ov2E(+9&}7v}d8!hPnG$JQ8nu!z=-V4NaO2eh*)!NV zac|a%jh`EAHE{atH@H;9|EQDJG_T>LlNCktu=~UU5@yEV{jT|Y)CL|(WOAr-Svx%N<#Zr~B7W<^BKa=;vYyC-0e{NRh z;Ts-LDr)voZ88ri)&6#7kqPL8&3%PtF>)ox@~HhF7EV^dMQusf2rng^nF-Ly&ve*IU#>Yb{Kft;-n92gAifiQ16YbWNmR# zVJFh#pY0=0=fZ`GjcX(Otr{AYe?QjIvel|nI?xds#Bk!1m_v^g5?Q}QL8Ncb{ytQO zPr<(ZVL9uUITUh*|2ifIT^PeX5h;0o($8I*9Z4DTk56(J+`@u-m&ng?F(^2GsC!lq zM7T$_0p>x}n1~%@g}1s}`^h6V-lG#yi_s^d{7dt~36r#@){!&YkVo0$B z9IyWxCxlz?A0F(Q4QQwD8d5OcSP4D$R7KxA+_}cP!p5-(oJxvgs#JSq`H7J(Te_0C ze_yZw@!0B!S#wT#(XT-U@hiY1f(0*g>#u$@HS0z^VG>)^X>Fr`PJckB$m^_TpX9se zsqfrm5M%7`N}dbEgQTogmqH`~{er;HIPWToBvyj#$B(x~-r-qRvznG)iX~L^rIU#^ zF1Rb=QdRLBdBU!CsBDH(pj*BBi9|{&p%%5aE~EBdoykpzkC63`J%0zIB{Q(-NCEijz{kCp~>|!{9=!(r$ObXW8UlCOlowpTdELYV{_h2$zO! z*XUvQ5wJ7Ky}~(VIPZJNKy?<{+|3Z%3bsINPgrH{6jQ;t5ThD*wKn-Wvz>d18!llm zhAFqk!c2AlbSUhoW!u!Pv^lRN&Zz?8-;U*FK(s)|7-T?tJ1uRceo-f6xVBW z8<*o7-7M#X-`?_fch|Ri{#olE2ng8ylRAOtAh*z8ApiaHmVSLh^~^1r&6+G(d!Okn za^QQMH5z99=OJ#>2yrpRu8)iyF0-poF8(+P7m3D8 zuu@xsi@O`4rmC~^B4*9}FVAZ9i5;)<-N@mR1|p$GcF9JgUi;LN)X|^5t_*`VR)vn0 z>sS}^Jvx;zhb@_X!M$q8)5!`S2-vi1?zFJ4brg5?$?v7fJM^U9jE-7oS-`3+9b$Z&nK%B1z-0!fxfqa-ia=mzUQNi0_y@JjX+%T5Nk5Zv8uu;A{&-Q9x+*AOhYLvRT0Zo%E%-5mz__VZSqAE#>m&Yr2Y*Xr)o zef8Y|-pc{^-!D|a zqRNg=V>;60@+P_K2YxB|Gbxl^CvN;M;;`mncYY_G9^v;iCjth9kANhh*Y!^Efu!G4 zK-_2w3n~%szhgICpB*q_tCV6$&ld67y(46@_u}?nkm1EO8{(hyG5|U zvu{fPh@4#Y)2D)osit(hix7WFr>_P}zbuwN*MfCk2kR^+f#Hr%Et*Zc>1l|p5Wzi0 z@b3em=oDywi*fHEAzb*Rs7*mF`mlTQPF)?(&xbi5_}I;dy=LqK0|UcmwKN~SMy!B# zA)wcXfQ+mlE9-sI8eAPjBILc+{{8k_b!`I>%bzW)6{!l{8{&HW{PL5@O^Jbk@05|c zag~%XX6rUv6Mw)}u0JW!f7tI`+wp_;%_8@qCHUONKty$?I&8hU-lECP zqTn7d6<7k&?sc%Fgx1jg$}noaTnp3y5Njn>RTCp4{NHc(3*ab@2%YajP7Go`@&a;(mH@#i1{h8ka6!pd2#Hi*CcQWZb*7 z`GglK%aWl_R_F-%v0hE6w=I^wm0riMI|M^&FGjFkZQ}Zi_prh7Mpd=q21ec`5%IfO zwzw4oBJvteBr|I7NUrB+_Rx#DhxRrm9_&rJRs* zt!i&gSYQDAjuUUQ9&_UGoK3?}9BJIopTd4GZpB)#@zQ&M-4aMWA{P*NZ9%lIewMLq zLKyV~j*PNYF4=I=MDF#rcc@^W8AGKsP@UxJ8~uG7s^^eBA%}?1 z|6^Dty8%+zXfMXUU*z#LHUz@gMbpj)6DBwrnei^E8V^1#w@WuiaMHTM6oVp2Y~6Lr z_}U-;^DjO&Z)Ca$yWgnccbZcan6b`Mj6f8Sr{aK$v>QIbFdTR$jC8}SeVO-b0?35D zIXR#T&@z(I_jH`lVT7LPWS`P)T0)z#0^E$(ARgWFHFUtE9mcz8NJ#zB12qu}!!fJ| zR((@~|L1IHQ$5*wOKTjZ{yztUO+3b|+LJx{0!Ni{mqe5!=XhTSLO+MM&HwDluWS3` zJ@QBbqamQK0#wu4{2gG~IN5307v9X_5n>qub}+eMG6G}LqPpkT#>_3IGj!L3g;7a> zU9A9wI2k%XJ%}qI&*)lzh$*qqvr#NW=g6cHU(edwv5YFQAS9!Pqm4!97*7L@=2sJY zmS2a!V=`BJmLjav(K$tLh`FYxsW~ddw{?rZQnoDjZlAtwd;#6IT6$e`kW&|SJX3-g za*GefCxZ^JZ@FkedAQf`{)28~lmC2U@C5zO=ioEthoIQ3)PjeW!yWu?I-ca9#AXs=$<|GZse&OyRWA2wqyUbXNE8Vv zbWA@j9koTE^-ksoCj(ihgo`5d;N&?IH1w``!CF%`E(j80U}^)wo9g?4;_i%CjaO5m zB-~ZBywfHlfZsJq{F2X38qw@FX96l;Eio{gxp8%z)2-hDr z)QX4-jAm)_X)pG5-sGIL5dD^5`Gtv}4_eAiS5OcgGjWfE5D8_JMK0v-fuR5Tg0G~1 z_9I3i3J%HL6+-Gtjz#(=>5|uh6YZ`}qp4jw-CjMqQ>%mC6|s;>2q$zO+t@DNzZ zLGhge<_=e~HgUcwS5``4gy=q_>myn*&5scCv>v}&3I=6q`SLTDjy)bhcDU#e%6&jW zn$Kaa`KM5Ro9Cs+Rdr993$Hx{#E&X$h%05ck$GQVn*rx+)bzrbxnE8^uwbXuGiG2A zCues-;45UIX1P|ym4W0ni-@?m_^Trx5;q_Q1r!Jg2{TetmpZ9;a1DK@TVTKDDZf5m z0__>LLneTF6tA9CqA!1DZkYXPr+&>|$O6{1?b(@z6=!QN zALoX9Jf(;TZ}#^m=N8=LP=PPS;#?x)Wu#HA>jxo4dE3L|Mf1>9*c@7W(XSGEe!aHJ zk^T#&<^mCfI%fbqioQ-EL#Bwa|7fGGlUOdGYE(k^e{Hm%SxVT+%VSXbUoI3EfK`_v zBECtF#85#u?|Pb$3A6RR%>k86bEsTvA*=rNN)}50IE9~Q60g9$zR;#r1Ra~Sar<^4n!6Jvysw25k}ZPOay_K!y^f5T zDr$N}k{q4l&*OS~fJPi-=pD|_d7Ja;E~nS)GL<@*t2C2X)r{XMfA6Qt(#nT`loz}b z4hg1SgU@>c)9kcAElRQy+0LI1zL%^?oT39tW!)t>Xy2*+4N_tQHGl@n>aR;31L_E# znI!}~0TB@t8Y6SVY0ep_6`6Go?V6@o&V^s%MIHSGZ3l+x;NE$0LgNNZshRNKFH+=c zqi3xY>>!}thLZf;%oILq%#kn_%~)~o{;l~}*zD{WV|0o!YYrAmIs#na#!I9{fkrnD zY&Z<#i_uBhd7U_U5CBgNq6z^d-(#1)!5l}%Lca&^nV+QFCh+}#dk83@)r$l!t$*wV zG`Y-|rCYSAFzHP&C^lbhh6yhfYgdT{!=^x~%|?CwWkR$ z>mJt;csN(WrT#NCrLzP_X>xRmO-iCS@9Lx_$uMNn_&+4CzZEE8A}pyU>m?=-cinH5 zeX|`pp7TbRA|N1c_dd)t*R?dd_O~m8P`b*f_1$YTWSpRt{=;2o#JU8eCPDnQe;m!} z68pLE$AMCR6KQq&)gT(1R@tvIpyP)-pv&b#7c<5?@fQ;^3aVbG``}2NB}@p~H?wTg z3CEq@FPDBDj7^lm3;i(N%f+>BtJ4j^)OQa%#p=1gq6Kzng8RRkDi<6gt=;W_<>6MZ zmUlu44a0kk^wOsibM7>`Pk?(eq3VAdWW2h65`YQal>K)iwLJ()<+|l{*ufpuxnRL| zg5Jqp4NP3oC%(sXc$`F7kmndmB%Db?Gv3)Hm~k|p%hljl4&ui3)}a7qxyNMOPt<}2 zmno~cx~JhH#0DEb0gwiJti)AnPPEVyUz^RDZVvO!-r+*9qxY@rgb1WuzGgco2sY;O zetNs%9DFvz-~*6~ySO6HEhrVZSFZG%SR4#fx zJpB)-Gh1)6){gvfn;kbhCtnc8fh&k+wZR*ZE^Lq31ExnjoUb<7E>;1Z-~>NJl9H01 z{&3!HUw%S@8J&pc%BZ9+;1XmvT1w5oc~1kfYDKJDS4YB7b+EDjXkd)YO^`7{X-|Ih z+Ne5l5-XB4tB2tp0{c z!Ng?EbW|v{P8&^^#r8w2{hIz z`2ze6CZ&HtSY1~_HrQz}2LE#!l}<7nHQ#@{j?^Rr*AWwY9yM#y)k~DHRKUxFOehkm zaC>d-O?4NVFj${8V;s1@0J#vm&7iNCVTVkloKj(c>_9`578f3oAgh^mnR$hX>e|4lJU^Zg_BCPnj)^R^iWnY4j9Du=j za%-74nY_UHIJk&^qsBs5GWilmnuS+ya)_touc*7~IZ`I9{YkPr>D72zyx8O0Uu!29 zMapn`D2OB!dBaXqv*B(e5^)E%8TCc3yJn5w0g#n7H)y%Z_SX++_3V^ktNAAP&3$xJ~42b)f2crz5WDd;-8e zYQKe05_O3Si5(JuT7ob?<{_feylm0tp7W% zZUIk@_3p)?RA+a()T{o9N7##Z&N~I^KZSg>pq&I%(G$*vZj99EQ~=@SC2x(x-Q~Nb zjbiUYFfbMvzg+FOU+2#G(jrmkyzylMwv z9QVr{MO$OKT%-I^zl4#D2Lc5=f4hsOR}p4-0%gkx@Ya8pBg2o76pH93hflkuUfKvSXub^ za(+LK0MOZlb*=^>;T7+zagyNLqe{Dum8mw%ug^;rn-d?vd^C7jTdbT*jRjrW10UwL ziG3F!x|x}o$!-=U4VI?#zn|CQ&N%<}iMhF*E_@a}F*q7^;;Zp5zrj70XD2H~nNKP7 zb*sdo9SNG}_(FI08`2B)8qN-B9McC^a~sM;$4Wr;KI>5rg!xc_PC+b?(|%Ou7=xLW469p zK4#&nudnaJ#7#z)TVL;XcQg$IZq+3vUOT*KVDRmvfagWMj(`p~FK?hzvyN>eWK_R@ zba3nU)88q9+KdK&jUdzH73JmK__KgG&vG)`-rjz|q^75*CwqdGo)L;T-68pxu@kSb zrJL2h0p84HIZsA{d7*)uj@!S$)RYgM%ET||Wye^Nv&WQAuK*%qW2zfHmCFMQvunhf zx@=}|i%xIW+HIsK@9QK2p-8?!9)Hz)0bf9kLsJwYCt(xbmzIvt=b$4ay6A2mNY;!sWL; zq2?4rq+H@^#Y6kd6OU)Cx4qtvr0RuIg__blxu#e=zT!3m+l1(P(e02l$NQZ2e4=1c z_$65ok_50e)glNK2Ev3E-=Tjyi>k+!j76%y=eeqEE<@OEU)pva3u6Gx zPix{E&qOW{JYT}Eh}?bB3BBiQ`42L|^4QDp+l+dvBOgPS(c^4ITY#l_(R^6)a69k5 z?$9>tRB;?*8D8@DT`wHyD-@UjIMx z$rH7Z18A}PH8T!qyOBZ2NQkQURgnS-a1=zuQ|+by`b0ZFeSt;^zn%3&(SN_L8aBfD zOQ~6>Q84A-wJQ}oQTVImGo!P%+rMo0&GJ2hN?9da3rig8OM^$^xG(HS@=21K-Ud58 z>s>&FHx0>xIuaM}elKYTV;sx_^+ z=!rW*vs6;sZO=V@e=p^7s1klVewKOl1W&22Td=1B_=mLF)p~Rsb7r$Sduk|Aq=84_6#3R1(-y^>&t+IMoh|J}00`B(pqeRr>USh`BpA$EDyfHT z?vru$c-7uSSZK@#2i_8u6HZy;j^xDnoO)ns#D31@a;Xxe0#ePd!u<0$zij3*@R>5N zmZk`cN$YQCEow^lSKe4gl>Xp?f_rnpa|G+)r1yzQdN|Nydq>WG&t#%uW_ioTo~pnG z>Eg?;huKcWU7GS(&z)OW2mhDdTyV^0!-D|ZB^!tXArCAc5qLGboh0^*kAXhN2I|^; zH=Tt-^*1Q#aN2p`cuqsBDL?V_=N3AkNufRq%;_R-J{g{@7JS0L?3v`I1zC@u0fr){ z^Zwwlw0hzL-Jjc4@Oii>8nA^BBa_`|y#Wj2PtU^yaGGZB@$t#cGJ&nb^MhNU z4|ws5gdEo5%-YhNvW~L9)nqlZKf82$xAF&2bGM9J^TGj{Vp0f~z9@dt08WH#0S_p# zZddSWxDPXDXfozVX~CD~H7kdz8oS=f1~uzx!?gscW`8p=*)e<&yxE>N<|F_N{2S#d ze;Cko;8ywiq$RZmJLh&AALSZ-1-&`E9MwXFu_bL}w?QX3y#cXK`nl;MAIFf?xZ~Q6r9E6obQJnN&Qk67# zlrMG8EyDXqFynb$_WBK6{glNztF8lfg60zfzo;0)c*qLplR55_Z&v@&9* z!vk<}nDvgH9bk#Vj_^4!Pmy+&3!O{9;Kt222yX#TfK>Z2P;fk+Zwum1kJSv-E?2|f zc6utEyufp}s2rg+qR&qVLUm~SlW-Et&(WrkkVNcka(V9IFG&-o_t8?i%{^;ZAGIV4 zjWDgP_VG4B;Sw3~wII5=H=<<8!~e$Wrn&xC@M_iQfKI_iuT3Jg<=4y?Fmp5|Hz5G{ zF$z*&ZG3h)*GONsO1_#?3|FI@&f>e8vinkncNV_ z*C3p8VM-iRn235c8y7AW$y+2?B}o0Iuj*O-@#oz?OOM>fYYHuq=za7(8duRELGG)) z0%h^+MBa7hx`#9~dd)GCu-q1D$j8%o2f47)zum@#_?a6FVZ8@Zf=F^~M1nFxpohG3 z$!)7=oS;R0PJI@Q1k>etD5HynpCKixgvl(ihb)B_v{|o2jqZ{v&z($+gZ;F9^8wdP zgr2hq{!3NIdR%~=)5sNHXkz^K_Hx%A0@dbk-Tb)pfrNlq(z4(MsJ8-ZxF?OwpEzLm zY;iig`KBZ)uewKL``7|j0{l}s?LO!f^)FrA+hkH^GiFYXpI5H7)?DVno^PubFj6)y1NJ9Lpy{u{@b8olI9}rKPp%4urJg)Tz`2if30X zhIwpDSRE@8(9UPv*1q0HEx`?YI@!xs*sS}!`J3xYJno>>_9ooBEX^I|5C>{y89>5JpC1qx21}bcK;iUdvfZ#@s z|I6{L5=hAX1S?*8Y;@E$8UEZmZD&ljynfu8OPk6}-HL$!(+zU@%Yq^>s4%RNqxFRX z=UrTH0dDD*x*MDbXhuwewLeZHbzJIlAB5G4Sgp7Q#SJ&9xvmLq`0BZ90s=QXl^i*R zcIxMDPe}ign|!LywAUPQ$B9;8oC=ZptiJijS=*(2o;lIx?Qbfq<;sMw8pUDRvVuv2 zx?>YBid`qUc`3BLi$@(V`fevrS0I=~qX_9>n$;Hq1TV3_jW4`w@8G zofbRD9!|o>^_v*`m@X#wUCN$4I%tBjWcZ#&2I560uC}apFDnloBwuYNhF0DR%VpIXvLm)gviy(e1`XdO$W@yB%CQdJ;ixt80YMaHVMuI1+-~>EPOu(^9izk5-r)ysB)ov@DUoF5|iQ% z5Poi0mUVddz0r-%3!TtC1U(--C?z~&h7XNQ=J@FcZ@c=kE#XF`mi2?+_F?icWZT_D zMwE4Kp3bs-_OCPcszqp}8G|$=@)D(%iPB2ShL0}8#5aG@N?aT*ao(H$wSpuSPLZ-y zU50W>aQXvdnhRTntkiuyh^~Czt4zu@85G#sLLXaFu%PC8VHN1%;ir^P1PvIQa!j7It%bxrXA3w1RpY}nV zlYl88FuqI-A3r33IFFVb9yFN6T+9g*j{fh>6Ps(rh_nJ9+kM4|g>mO96@J4lsu$C_ zo$aZGmFoyf=pBv!B}BJ`~JI)JsTsVsf3EGwPaL=NXHoRTT9(~eENyIXuvf=T2r zoC0CLAA?pw8eDj9LIG+Y5^IRm_e$vq=1+!mpzC(FmLC;Mskmo35!R5?AQd!9RrMs_ z53ImQsjULbH#BH6dYxG6Ib(=*m8l_EJp|<;$k0GOj`5tRH#O%>#lgb&(p*bK*n&%# z4I9UBrW4>+4rr{%tL0&Qh?$w2>jT5TmDW;|l0qa4(&P_H)ruh?=;-KVWMuI1@oPm? zWofTH#TYS2mmVN}(6WIcjDnWX*(c6kchHWl!$hG$5-xT>qkO86s2L=qxH ztP#pfP9ytLET6gMoRPjwl!g{kTlbi=)zgtxC2R56C!Zlt;S^?^&WZh@o_is|?hpf& zh#5w2T|!E-sAu4*>)Nr_A^jd%LfYdW4_1rkQ-TQ!U{@~{e`Bo_yYhgxO^=ZQyXw43 z$4@K3^je6bxzh);lPkSqAM&t9#*;st*qu{w!Z2Y8fDpNv)zq}Fva;)6O48dSTem+#XOjNp>) zZE=^MMv9RAZED(Vax}EEI=XGL0eDa#pP}Zze{%Bj_P8mI=4L7`_A;nDX?U0fhm5=q zXoog7Hg2_bgoK^eo&p*>?aN7W;gr0>BxDlZ)t8_E z#`DeUE&cD;KoAWast547kJ|k9QV&ak8x)0lu>S|99j{_Iu z&5}CNLOQmm%jf%^o}bwyPx@4!e%M$YaVk9HLPL|)5LMdP`gHHt7SmM&KY{L-TZ##0 z4lrMzIi-c0pLu_6u|3@bQu{BbvuO1A*_OdmG88@X1C~*PcTEqE4f35R5L=LnLQm@N zBfyl_)8k`4^X)FU&!0cn>dU|d0rNHSkivW+^OSj?$wmRWCVf4<3Hy%QjR8^zo^$M| z&tYy_2wA?>+Y0?lDG=d(en9v^LPE0j{MUJR&^qV`5dAQ-uvGhX^%aAfn7aTOA4UYu zA-)qM6#qfL1*S6dt&NYUoBMp-@_N8++)Yn2#8pJ#1njQ1h*2;zztUaS2w2 zr!wGI=D>Y64EmG3a`#!8_H(Rp4T6MI<8#!MRp^Sr6|yIihy zT$-(#Iu=Z^GNH}yD6uct_hPWa=;=LUsw!|~*(-L~pRqK4^w7p(-zVSRN zeQoHPd*@qSL;TQqbH!;8g(yNvlYhoW$fXU0huDHLAbeUz2vH3z!;5GYUFXDpcYjku z>JNURmiPhWHKC~9%YlK%*A>1Te6$mw?zB5H9*WUciU;o}HcHpMn8iv%aAL zKy7Y-lixKrNT1j5Mizf<71J9NF3BK2QKyg+X@pCAhiDEj#u(&vb7oK<3XzKDg4PDe zg(W0l>|bns5VW?n0s40Pp0Itrz4;xr28D{yx*|wa(0{c<7j;8Fk(k(#Ipmx#i7Go| z;qN+uH?7#fMKr6>C5dgS0GC)PE5S1_lPC{!gAn>G-6iA2*{co8G5P&z?8~CT!6IVo7VQ?x%aJ ziHV7)CnxF+CHk2!@sS270b7rqaTi?e@DQo(0&ozisj0kfM^m>vjxYVN&(F{9?(TT$ zKfCB2GHebmZPi)KW`Bnz;Kktb`#vMe{ql={6K4RuA+35|=7KNCAacz`Qk{RU3zF$i zv8kWqK3C#G#wuoZLbz~CBH;{JL&~KZrxsY$O^v}J;nYmgR$)z&Fk+A$aE3@7O^)YS z1#SoWqa0mI@c>)c?jcn$;0D4H@9r0*EA-u6U~z;ax@`|&8A)TH$QEF@`MZCA_P2)u zeL-m70+*JS^OxVq(&mL=e01flk*SM_DMo-v@>)@5hlgaTcdnLF#~?y)z8l||SVi%~ zBhlD2I&m&=%_K$ApSZ=L!KOtF=9(TdWQHsJLr%1$|KUu6#V;QbTX`SL=x$D)Ecy`V zoDxZkg_VLyZm8?)@mDbI3dz-^WZEphGxB$6aJ)RF3S8c>!A%p*0UdO6#0XOV$Tzi# zPVSQxCv9H^KP~}J-XDC~fzh&Ba1l9$B_&s!AVKsAD$`wyDtn06Ky@zsDo7_@A0!;i zjG|w;0&Fbm1}Z%=24?i~kmF}acjHFvvX-iTOQ`T5$)?og!__edH*ED z5rxzUq0*%D;)5`@Fr(3+sp#JuQor}yNDMLk%Pxf^Wu0T2srTScj)cY#CZE@O_Xx=+ z=lFCDt*!FYK$E~lP*Okq_^5IURKNk=cT~!34A9|EJ0eh81nnL$+?DiOzZMV6zi|jl zascmB>&LeDM{G>dq1|}R`}@Ou{g>RO?)k;^WFM6QRp4c z@GyCH{8DUq2Rwj8*aJaSS*)tpQ2b8m(I_1M<&Y@!JyKcSOcDYGRUpXnA}3yLC;}I9 z8|?@h$T(Af3d4(_6qR$5Xm-JNZ}quie6dt+KjeH%{3CW9=bRWB@xF|h-FS=jQymaw zDkvznYsdIdynB39^4R?6bh#k}0YI8?@bEH9N}isc;bbK(Ezf)mhIJOP;o-2*qMQD& z=W^DS7_#!HpU_XYZRrCBrq`7X>Khl64WS#{@sX$nArol5C^)>Z#q-E~aG{=8v({qv z{ETt9SG+z6zLnXkYRqqaP8aD<`_@;E2Q8{th0qXM$TxDC&ih25f`3I`VxDVa1<4a8 z(%TZArshl#(Pd|0(P%!3liUA+(Qo3csj2BF1fB^0@uR1~b}<3>`Cl8^x|n<<){;<} zWqz4Gw3;w`?A9J?j%1LsvQa`7xEh*rY2;B!3S|2HZf#?4V(dtX=`2w%7ty=?C)dp9 z`!vsjq`%zYib7l-45|-1Q(^y{;tvc|4+#Ci$E1qofan=5fL$tSYUAXdTe~$vFo|A&LZD#cYtCnQzXcz zEvr1X6W*?iL%r0%CH5DAI}w?J=7D}_GKN<*;)g#DpyFN{vb z$>#uLpLsemxD$IJ&rfMIJccaN5s?sb@jw8gig;MvZh@Q2Xtrqei9hP!wq3z+luy;) z1Tydl2=XC-umzC-R+;JMmIfv|GOK!vTjn2fn#Ft4-Ic)<*{~P_WRfMX-fGM{RSw)9 z*xCXXWX_(Psu2&7q$~zcmGlI4WW9p{Mhz0_4gcfi*>oQpcYP+r^r&Z;rb)!X%`ZGP z%FVf0Dx}5NMV}^5;n8@<%7urm>ng`>_KhE(XR$7V(pT1aZ^hL7z2<_+ofsnGEq~q9 z;2U}l=FIFg&mex22iv;4y}6|IS${}wm#y@ow(HyQO}jZAy$z?P8jpCaW;=JCuUunC zo4K04Kz2mzB>bvVD>?6U`MGttH02F~>xy3`^>mG4E=uFjd#v}fl; zQ{2h{`_jWf>FNsl^ABN)=?LyUQFCR)&lCRK<8j}#iKyu*{yylLdzBgLil>N>IU)Yt zbnmcGG@hI4{`arDq%^kYVRZD6Nk*h#dj0&3ptX$aH5#W%agk@<&TmF0FY!=|nt4onIZ%E8^3dl4x8I=7TfivRrRJwZlxuMxsT`g~jCB!etJvYi-KULYGoUES~LbKDl z@-kPiUgpV6tCL}DW4oj`M6L#ROvP4?n)39ug?q7v3=Vq0=giCg`&s+e#Y3kv^W?&~ z?_{iotDMPT%kJB{ouAsdf+d4%Sz@W1s+4P76n}x;EVx$Two-pAowNy4=4me|!hLA; z)2@)t$v2alC7K!c#fId_mOMXVsLW|LTbjfyEiE&~pSwzMFRfv2F`SFUhM7%*Up3T1 z=a;@}6=8QK7}RhrPOp|7I}4!1#g3vZd;KBjTrLLIU77X<$$1S}cXQ)@5f&e}2vZBo z=G}(SXbY4!%QCW196aSd!ZY)fFHCMj*U8H_#u!Ui?de=-G-6t`QTq0zM zAAd1vbGCE)nc2V5r>Z(r4Qqg859tv#L;KXRt=`VxoE#?l!r@YF(U^I)?(bD{OBhZo zlM??wPF2nC;1Q^=2F8lxajR2!ZdSFxoV0S&+D`(yuU@-?uu7vsJT@~?rhF8p!5wzu zu36)U<+bGr@MgZ2w$)|Sro)ZxJNIcohHKoN5#w`?4pzf~RcSzsk1H{v2pQRe-{CyA z^KEe3>g!-%Hz4K_8Kv)NYoREj#WI{O8_IV8)4fESJ>i zO-ixVQAs10+e~VGX!#6%(;?rh4$pkeUtW3O)vvfF8@u|h67Yw9%G3Szc5%vZh$V?~ zj~s{OGG>R|)YT|hE=UrTOQP8oR&`Pq9F3q^bed+>Abg%XHN31LGy2HvhT7=pJ=SY9 zy9LEXfb>7L5;rf=UEa|~Xx)?p53P#q6f|gEVh%Max#?zIN zkhLiiO^~PC*vhiqVgojQ^zM_Ozu{tTRs6wAB6iDYLK=aarYWv|vQ9mBor&Df;1rG7 z0&YP_+#Jl>Yx%Fz37)5kC;*v{eNun=GLjS&(Rq=l!acOMVKtPDod)d7_~s^45nV&S z`S=9D9v}VfUkNg7O@Q&Y#f#}DZ#X22_i{GWY)M0cHU5SAZc zN!Gqfg~3WHR3bMTR!x*ii6C9A z1D2;nC#e^Dxw}=6g9O;zxMH`IUUT*;yJ_@O zo7YOsBsj6b^G{VPXLuLB#4X=5@T+!3M`-KBP z>B)gTdk?0Q(d5J&Bjv=-xL|&f z13|QVO^3lfyEw58J!5=d39jA^-}+Wa$XDU>r|l!SxE@NHKP}#{I=|?idLWtOV~~;R zek!^*x-INqQKx#>2lB4=HlSz6<51|4Xe90(S=M^l%3l$M=WVE5&`wUN7T7q7-T7*f ziM>7TDv9gynk{s9i`dwdH9mkIZhl|{fG##V+MIVK(;_4b7B$b@Z(Z0Mr#b6q&a6&` z68~-={|qH0*AE)wCwPH`UJDxkeI^5^SaW%bcMz+Px?-(yt`sxkvK@Q9{6?hUC+Tdj z?%N5QEP7&1n$I3-ZQhxd{KMj5r6SCq2$C?t&QOnVAKhWXh5#*k;HUqf#%lt`jhMH< z%YSeAKSN`KapT*ZIeicYlTQD~P0qw6uc-{DvfTZb7zHKs-N-i*yZy4&Y2Ltrd?*Y% zxu!v{uR0zLNbsRzx~Rb?P%?Seif53_mR@7sdX*+xV)BiI2%p}BDCC)JHctK~eciBW z-D`!7Q^7MZ`QbSI;sto$K`DDYB!2esfYtK(Y5X7d$XQ_c&bsRRs?+iroUe7TQcG_X zgPPvD%*dF&J++?L(QPqMqU&0&a@0w#p1}DGa z)jag?bbCz>4gth{msJzs>nQib-5VaArG|h=_ffArO_u;j0pEL~p5R$mf@*j@zeSZ% z7gXjY=E*YYC91SAE%waTUaJuPjF9^WzwBlqqaEexs^2C}`GDk}psnkd6%1H(SD%6` zElo4#pO{e+9mG)o`8|{r#uAx%c6CRe6&X{&?-c`n?})%?@yVy$EX8d!v?%`Azfy_+ z^QRxSf$JB9|Fh>0wNhcc)C(}H%o>xr3BZ-NZRLg2J$1ef7pF4K)+%pSbuxcS`WrSp zhHd$_3Ij|miqie+gN?hLrn0W-B6Qs4o_)jVOIgdnbYF00-n+3l;yR!fd!R*)G2B1# zn}katIjZtI6(KtlQA|2Xoivu1j`Ll5f%!X|14aYvfX@XGW{5dxTgqMXdaeOs#^Zmh zY}!I$3e{ofhgpei`P+;|A)mvVSYe(1q<-f9TeNN6`5IF?NfUa+)86OpQ>El^N^c$^ z2h8Y!P8DW>ss&1xh$G{BXUV~eOnFa(%3<2*{aa{1eJK90blbS(eWsj(yz-TWDH*jq zX1(M_x5H0Tj;Fw@;uYi;7BHJ#9*N-WdY^D6|FMmKQh)B^t|GG?P}McPx=2Cj*&fM; zh$z6paU1$IZP7sw3$CyfQkqg#R(9l0dS55dsjAhY3j4a#h0 z^mM@r#__}P9KPI8XdNA$%dQW9DXF14gyxo(@nJ(*)+@AI$tf)4GAUz1p}U=;V-x>B zg@r&CXmoB)9S~llqZ?jde>=^AjRX*2!Dswrdt&-!6r?>5AmoOeI@Q%Y_6+Rg-CImFz?Xf;7t`NA1iJVCyhz z(D4=jvvp8o+Oad{Xf(c^@N87np#=W>9ZBRNz=dUWNw#~;YZ-@)}#KJL$c z_(G7Fqbg%fH%n@7FqGm#(#|&C)$r(&%>ZnhB@NM=5qIE%r|}l zxdWy5klbop4K#n8(ffq;&;I_Hsj#v#iF=jPyi#jy(Ej~FGU7#$xIXQNE1 z*AYNR3`ECYjY zDO99D6Md4gdeYNt-k4|!M2&WP%hSJ88qlwZ1?E4%O<^@9GbutIc`(W^lrS14)_D*R zo?^7}sPJ|4W>HR%u^yed14-#nr&|Plw1**IPZ`H639; znW88|?x%Dubiq^!a3f(pYoYtr2LbWSaKI^O_XgItCgRwn)v~pmon0;bo`*cO=U0Tgnua_y^g%!I(?SYI;%uwe(b*@YzCaqZgvKcqbK5qz(3{drU=JJ zpcrTZ0rmrP3e2YRqOs=r*rv8u1P?b*x7w}&>>8=}zKK@GoRM}d(_{3b|I>AJI0hR( z2jD~3d9OPq>Rq@MMo?D`oW;n?N@i^zaP4*6q!S?UV?}|V_RoKyuXu1z0|mStt;PlX zj_8Rrc%jz8{rE>^ZDY$?E!f$3S3>z#D{+}>Q>3jJN(iAOYb+E-=0eBRDS=1cAc zuC;G(Ol|Xz?7UT;Lb}@ZPv`BunW)troJA|w5^IBM*gn5=&d-wun++Q+w_z8BKhCr7 zSlw0qOQfMUI-R7*SA29N3!l%wc}SLd*dNU3BXVPrgv|T5?p!h83g{MPcAD5uq+D*M zlnU8YfiyzBcb|Mz8wAoQaV6{+K+I~dz{QL(8f(tqWwfCY=D24Npf&^Es@^l=3iC*U zFa(ju-I&ih=+J@W)gg<_uhOg$vT7ln)|NZkiU(8kl!vbQrxFEK;U@l~efZParmn;? zq2A?*z8kZ1jmQ$mGW}-ni@~qqlr}UfaHmR1qvd}4Jv$ke!oJ`-&H`<38OFANr@m7| zX^BM$flcYd;A-jlD*N2dW^SK8G41nHC5^L0HJ|&7pjDnu@V$Vw?`VI!GDL3EL;xfD zxgcZy%$p}j{9K#J;;r%5S7{yCCZYqrIJ%Itl+HWU|-U~wwL@Dm@O;BD*V5Mz2^bAe^$e#_?gPxS9j zo#)?~&)?Jf$d`~IAw-}U;Y*Alvh(6d3Ghhvq`Q#aqaWSjI=(+pl&-9g7jQs%G6^xE z&)2K}K4)H121t_8#L~B;)=^@nnN?iJiT8)y95b6Z>0479)+&>Vht=!rYmvwg7~lfI%EnfcmuEbfaM}6lATKX( zYinz7e-0G=|1j41zj;GJ0mD)SxValm2BMA`Vj?2&@bG{E7J$ba&#`XBkOe0{-6XaO zT*@4Z!z5y18NWWnzG8fe9LUF<(Fggy_8k3dE)+2f>Z=AdxYx_z=hn5wD^q$q8MZnd z;j`PH-8*#Mijb>Xhy3LY*Im3sga#%m5CqFgySClFSNDmVCVa|c^H3sjZ{P;Ln^pJT zotU?(RkYW$B*{TL{Jypj7yf;{DI@;7M7H2}6AKHNq^C_0Y3YB!=mzurHjmaXCS}1NhZO7g_HG(!wOe(0Wa(y}lLT32J;o$N&+xb1sh>~O5ACc#ac|Sj0er;;C&a<+@@qzGtT0`qfqFDpi`n#JR-J7K9 zee3WT>&f3YmHg_yw`WpyxxTutJj{Z;J-fk{tmknCA16IcGsQSLm@$$Cn}UzwD>Q1I zLZ1l{J}CF=+&Ht<@ER(?%`w2&wJW;ol^BKVkS$h1%V$Y90uVUPc~MPmJ8s(wZFv5V zr?-r%virilHz3{Jof6WW64EWwjdXW+cL+!eh;)}UNJt|k-QC^cyPp4h&T;s`fsD=O z-fPXZ=A6IlnoUz9+L;Xx=sy(mQ|8FjjTXVaFc5Jq-^l-XvXB~8v3sh#8k*6Rl5lgO zs7X_h8};d8aTHZ5;*D?57i&YWZ~J3c9%k0cEYZ8Mj%!_)8IrEI^@x!-d^Lyd3MZft z$-^u}qag^@{ObD9iM!`5Xl8Aw72xpw75~6LIiP?AFQ#ffjTz&uWE2;>>!7T@bUxPV zzvu28}HN>P*Qil{$^q!}GbU zuqiGs7zm-s$;rTzirSr)g@t9u(9a(;(eck#UgvbPQ(g7x93~D4OiTL<)?Z~s#r6oWwEOn$8)z^Z4==`(@F%CGg`dmCNEX1OlllI8xs#HT zssq*&7qgm%e)l7OE33Rr<3gJX-DFa-$qqP3v(wYm{G7i{YU9a8{r|oC!N7!Qlz$>5 zl3Ux{yc0d?Or+SBQ8YI{wl9-Eb$PwO|DCYLz0yiax@(3c!Z>+xLM$qm4a302C^EJ) zU_(wSRO|ai5C{Jgm(X7vqwJS^pM&`egl3hw{4SsOhd(&kG!wG-e7(2qhL)A`v622t zWiOsndW6D5#PahCP?H?;I_4&6NTXztg?00;U+yy+LdGWV#(!ycMUo)4>S&j-Ea-wisy1UtTls;rLSXKr>l^z%oRRQ2k$Qaea& z7_a`ES!vjCedw7*GU%LGdwG3L??MZ)N9p#8Xwk}?@AOw2A4!K7)TA{Kf!#YC0{5co zL7xZz=fjOzLHdF28l*ol2+^;l56C6j$S~(djI3*i)U=JX(naI5d*_#=-ae#wyb|YH zw6BdSyA&VAqtej;p9by!Qe~g3+4zjhj7Cj~gr!1g7PUeP6(znM9}hYOneX#Fp_S?~ z<;2wUWkwMZBWa!q(s^h7)aR6Gwtn+DdP#yb%08I4-|O8^9vm9Hp2nn7$*3Y4sLec+ zT1ye~46+Yo1SmS2#L25l^a(W^OG8{(76eKR!5<1k#W6j3FszG96C>bvW|b1>r=~D%H_Sq@@W$v zp*Kxll+DJ}QjI)~?lCfhH!to(>CgxMs49svTsZ|8anef2(J!cC7+)0~q-VlC8B&5& z1WlqPToFmgID4{`R2jH*XucffaZ&kr{)7=CffA;o=q?=GqKd~wu!3Gw4YU@utc6X2 z`KE|KS0a}3h9Gj0O{+o7o{s_!c{775_ufpQ@YdYX;f+k3h7g&kh=@r4i`?^*|jJb)ixp*ZS$MrWgB0A|{G; z$B(F{6YeR$3F^bH5o%e&q%zUoK#Sw`UwCJjWosYMVZXDzhJ_SXKbBtD7eFlnh8M3J z@i`a54RMJX5@p3J^tyx_!$tPzKVVNgnZ7xrQgbvdWV@nNMO?=8)Rs0?5rV(V#8(*y0c=rK$+0jwBvLfYIp1|&FRm6X4!@N;e6PcGo zOB6T)ULS+3m@p28?w1(IznYnhT54j++&i6eDq{6XWT3oBk`{6$3gHlXGZ$VHNe`3n z9@-zL($?Avl~Rf!jR`qd>P>U%LD)3We)V_zVZi&eXIi{5m;uZ_Qv!b9X@jB^x!?8V ze+Ey6WiIaSuZQK;b#-;CzE_G1QV3#?-C<}A-SsC~n180>{F~s66S}3vDa4=}5F*WB zz(Ay}wzJNxTG;?-{C9d{Z{|ZO_JIZ%m^?=&gD82a%Jiv1tJd^){N?3kZv?t>mHP)` zY>1=1EWxDD#>3TKTU#4o%Ge2F%gb%d&3`oB%s6bNe)&Qo>aRzaJY+_e(Cq*6xHAI8 z@}k2Ocrm~v=5dHVFI&j#@;7-vb{!8Fksq+70+Shs48tNK0N?zZ12asVUwi-g{%1~b z#0Rgz2z(L}-=%AYa<{m!XUU*JX_L^~w3=adUT2WEa$6?!ryo?ecI1ReT5p!c5kio<;fA z^%ny%*&Koa7d5b^b3l2g`~#cMxe+y?MnI6LxP|onl*~t}yMQ=%B?Z*F8eKA%WZoDYh8Fg!u2VjI#xEaJybE zIV8W^)4s-h19-;&jY03oJ$#5$Rzv&U=}zoU+Pa(H~Eb}f7Z~{ysNVgp|F&T*a9_D9i2t`Jm1R-Vqj*m zL&^Z?&V<5K+wmKgYD1i($aN>10~MzujM=KwO7QM*)hjWNkB(YHMmt+eKec; z8R17ReApH8bKitK6GK&;BHx{yDLD+KX!>AmYzzhN60%lbW7HGuviF^pthBV0MenEM z)9pzlhn83abPt4LZ8jyJ%=ZUs#Uw-!>5*m$=JLl0!#F$LCF;QwNLJ$J;wLF0MuIbo-K%s{6~eS1%4PSaxU;62;SCU4riP^wbm{ ziw+k%dwxLy#{)ApQrO}C{-2r9daF)gWd@$(f0N8(QETezyn#-1`^etj{_afP@Itb1 zGKagL=un&Iq8M`U6A&K4Civ@as zfL}(r!^!c1&8!-)oU+#K>r%C_)sskH&9Q^!Qmm!JztmpB$70=!yZ0!PEbFfb`@q6G zFm0oL1(uVv>^+r>({h?JFSzFG8xyW|4#!ohB6Au0SMHVleQ^qav7p{^_+)RMAUJ&(v~UC0 z`LLdGB~?om=@}mWCPZk2MpN7yp{1{g0i}x<2#phU0aX5^ zs!K6tq?1b)t$vTI@%>{}&D2B*0kyJl+%GhoHjPY5$dRv6nW`E{VwP|bzYigTWb2zy z+OYda(8UK1(y?%TV!3t>(k1%-`$Oaupjfzd_24V=Z=*M2Wo1PyDuBJ@(>y4C=ySuxI86vRFYW<$v5rSuCX92R-Sh8y^c`r<# zz4;iQNqZ-TA;au1z!TGtiK)5$HcyM@Lq6_u0>SaIC2lZZ(p#MVMFYAWiF^y2_2$_F@=dFVu=&93oqb-c=W_hP-TiRs(De!>Z%%<1CaqUtbDy7jqa`ox1_nRW z#n|#ZbqB#rtP$wy>Mrbcc6JT{lnx?7Kny*7b{^F)#)b6w@s9umqG1#Xdron3czkW(z`3uNNe#YbVmS#D;mx#dlK-j!J5*N;_pa&n`3b(MrySnhSl9KgRwpWrYG7M2(gu{|kiwK7*ZryH0$tNd$R%qrpu$1dGXm8PdP~PBD#Dw3;ecl5()GhF|3I z$0En%^6H@AvNjzcyh~#W{v*YPwbQ7S>2}iwR0z+#&&ZGLO)6QjI{yHi~DuJ3|d1QThh@OQ} zmKlp9)wsv3m`snYjT>dgXiFSQ=R^GUZJ99i4>VUg?hdW@C!qI=J4+_79(3ZeW~r%8 z{56Y6XCIE%b6657?n?`Sh$_N+m3QJNQb~-5jylkHMm|gy>KP?A6@(e5^w@|r&(CtO zQac}MhwH0Asl|;{>jYpCx4AWo+^!m1&g(Mxd_s7WqV-HE2sB?uK3KpFmah!=&#?S4 zpyS{sa6zK_4+0pfQcBbGG4~2?UzA90-;qtt$jMj!Ua%;?4K9<;>0?QnKHjpi?Tar3 z%L;bJjl^G%LTS8)`i870s+5u}65k?IXAqqSeQKugvBB3m5%`d)N(jZ_gwzNgou-ek zeMxv#nS$$eo$GnL6lg_QSS9<~U8T_smV-)HS3IV#|MY+F4B=B-w1A%y zu|iJKX^N# z5y?%t0(C zRqp$&Nja-T`3EJi9u{E=25o3zvWyutM{$n>D(hz;9$qeKL}-C{W>9)n~tn%;UR zv(~OE_6m1-3-vpr(8Z0__^w+)bb+Hhzh`*;kH7n zI!B7>H*SB%#d`9B&m0ldCRss!%jHQl!)ta()crB^1HC|NH!?h2$SoS1W(iBT!s>?o znXQ;bclp<_`l?1^1^a`t?L_|guXIq5O=sa6zMlbbvsMGg<7Uj%-KR7C7lzE6i|#Em>gk3hm-Tza z#~78)SgW^d%gOr-s-4jX3~SlJk$c6yZ?OD1c2X=B5&82GhWGX>OWfb=Wc4-RzRg>! zU@)vI2ue}?@$L588>z-6f_tf6)(VABKI3&}UX8^pYAS6Wp)oBTNeWzS(`br8hEcgm zR`je0>a(GA|{eMrguBvGu+h=7IHWk&A!G+a- zM1_l9cU-Wjt};$|G0@Rr%=0+c=Fch)Eh^d>4TBKC=|cj$`8=rQJq4vS3c)bU|KAs2 ztWRf6bO0674e@3^w?X$@jC>4-SPFE1dV?d*efdxyxqL5#ffN=Q8vHw+G^J=PD;Cg~ ziUwc$r($DbK#dLzHwM#y)K~Y9k7MWG&(KKp3U%l3lvD_b{CocInrmUPH)L2^R<^j* zTeuEN6p_$~h=@Qe!tZlyD;mY9|G1Y9?p8yo$=O&VA!ih?l#z*=*AZm%Gc-U6=3rt|^V-{Pf!LG|R6E>X!262ji7FPm#KW0&v2`{p@tW$W8spg!U}3oAoMZ43%2TK zpZ0vXR%oD_GV+*?HR$}_evW^6sqxnH!K6O80d<`uEv3VE2=-jHW@vo2;?fhA)i8Qy z1Re?p)v{&Y=U%eAo;^oaF>7^1vtWJaD#l5|^8w3c<3=A~b%3qA1}?U*2RzR)ko<3h zu3b*!_vh;+QH?#1>bRiAU4r85;nVd4t=?JM-(4fQF~;g>TIs)d%jfQ7rzDo`185fj zC1ZWid9HJfalcv}0&A#@U*Q%Zi_T0*>g>hPrq0saOln&2YK_;kf>}Oa53fN_3)xyt|JhFWP+O9NlAYCcAvd^&zw;z62P4pz zDw{XgAXyJXWQKQiCsvm~b0)W1jwyb?=#Sq@i1&v~P{bbABdK;MTUnjyS1DrAOZ{{& z*XmPadWDS_6qqoCRKZ`v09p*?rMk?}r|)kY_n1p*Sad9?UPw zm7>@*-Gi+X(jrOPrB`jUh?D^R%eSzYy&)vyY;(U>WiBylJ#7u=0@FGNKzAo2W-GSx zW{IeEU%`5{?h9B2tHw$!H>BVUVqEzLx_zpIulfKin741!%2C7UAtfXx+x)snU@M>t zpixEeoR^-s-7)~(Fm9M^v|~91K!BnYKv^L4rPeHm|GkHBI(G#uMJGI(DId*=*i1~#HH%;=h z;LEgn@vG!qkQ;2uOfjQE@3Rv%BBFcu?wh#Xq1ev> zDeP=zWnyrz@{i5JZ1mTp=TZM5zmzHg^N(s5l@S%w*`CeVIxSPC7Z42vQq)vZKDCRC zQ1|6G=7v$Pn{dF)k+8%m+?`n-0+zx)$bHFBKdqg@t;w#+htF)u8t1P1r028&;OCe6He$bUL=SqD_575F|x8w z%+6{^OVe|3ID>KCOHFnup}lnt4MKj8*Vk6jAWIVw0Va6DV19VJ^s%<1v-9Id1o`6P zBF5z6)8iu^vzA!#H24VyJ|~SpPmdVVV`**8=o63i4~N;#?Q5AC3Y?wo56rw>lf8;+ zhZ3ZG3OoJO5=nRqbZU8BQV7%!qJGhtVeofZr>)E34ea|gp2fG?r?>CmsC&1dJ5{6& zY27*_>a##=Z8QGz;|v3$%Zi?GoRuqQzBv6%NRtjCq@qB=#TabX%Jhc$D#?AyMHm|l(t~o0!D|@jP zWBtnm+Of%*(AYh%=l!9AVXv}QE-~?=CCgD=A{_p?g>JQudap!r+P>YE2}8W?eVdsD zp}>J}?S&P?O}{;*v~O#}L6k3wS)F=842p6$U5=XEaMCy3-6VCQEJec+$nSEIl*-9g z$0kYNv$rjrUEmP=zFxT7vR#SdcFB8cO(vO7dB+wLopYh;0y7}}M^b2dVZwN%|MET? z0|jVoagcpt8h_(UOav@yr${g(8C~ z_8`-=ZCid@6%pS2*rvYNx|L-eh(SZQh14)(sLBV{`ha45CdK=}F7>piiOW+>fL4N;pURjp6W z%Xm4{<{mscy5on47W1a?rFX3I!|3#h=N+UkI^Kue@X>X{TOg~^$#efhFmrs^H+=Gt zo38}eX%sZ#`(jN4UB zBB)?c`)TlT84Z)gblM{txX)#Urd&D zjs#U0K8nRI#m}WleSUN6h8FKaZ@WASSTrDiz(kUQ5e5K#I{e<3U1y* zj}_ptlXO&O9)bIe2)n57N$u3S=fvM)QjEZM>TIA}AWOmJn&<2z-O=XHIBsvH5}|(+ z_Tk12^^nM_f?r3VndWb|LUBiJ%=mY_3OUv#t_kk$s+KBJ^pR+cphh7LNEbP^D5$q*R*QD7F!-~8IEO%NDxpniTgWuG9Q#Ejt0Ze#H1Ygrk zEgPSLS?gL_jJ$-puRx|xD7eYwja3~nZSBIw)$#XAkYL-qRHl~!;Jg&YSyQ(&uhHwmu5(W0iz1W795NUu!eBt2pE`&UL}d zP3q$ZF`&XApq={2uwFzOyDu#ASGF|^Ybq( zPMxOAk^5fU_9o@ClbUKE0NZ_|m48j8%@*6KjT*uoj&zft$a=Uhqx?r4BlP!Hz{5^@ zb=QXv51pXq9#1Oh?c)Q~rN4gta{U;oc%rWd)rTLQm&XLgsDdKw2PvtS$D``xmM`M@ z2w~#DIT>jDGc$ihd^QYtag!Vf1!b!L>a8FJiH(nc$G{+?tPIARmK-mE)+z9u@L%in zOMj>DeYfJ_u+lm^Uy^tYzG)wjdE;-H(c>ZyE1pi92MB{Jn6+xw|5oa95mgoyeYTXL z6rwXk=(Jt`w})99RQz&KoQH;rT3TM7GPFJ9jS+LdytYR6a*%BF4YS-F&G?5;kpl;4 zzP_&doGCt}5)gUa^&ZKW;g^)KaW@_qv%8;){8(&7fdlmnN(MRs^BtyC##TPe_eN%> z+nDC6b#E7W2joH}l4fN;oqEUEnEIO9-TQ9rQ)rH;6uHVPSY{SRyB1N5Rh}!qy=AYT zJGCUENOa5xDDn}tKD0uc4jcu7Ga6gva@IQbXYLu^VSwn(TLKjMI-waChHZIbcE%LP zE;f45@zZqvT|>Q*DQo4gl1?fitDaVk15 zI7&*|?8>&_^;yc-9RV-o^n~aS`;3;`Pd=c|$!}58HKosy9Wu;qHS?*8$y2QF3m!)* z1DcTReQ;^QL+q~#y7jT20YVWY^jI0qXw7um?eJu9y8aFPk$ZUAfegT31v}KmTvrvs zFAqTJaEtR3Ua(;X=q7CMN!BW>KSg}^^x(QfdJwlT%o67PBxM2T_+bEWw*Mi>tRHE2 zBiO$-fSBY)YQ7WS4x$JPse(>k4G@=@YcCIn!~ke2Gtc$gWXZbZ1Zg!3y5hxw{n_5t z{cUa<5cR|kp=1;6)jvt2jJomU=qJ~)scEPe)i+8j#%P1P;|7z9-3kaw+5l>9WN;p< zF+ zGE;t^d;|wPCDxwDi^Um|)lXk&L_>qDj_TcZW)}xQ_spSnuB@>Xaf909O&6E&^G1}U z>vhu<_oVmPWighjgeG?*!{NU70mbi)T99>+>bV8+zC$HZZFO1=Q1Y8!c^7v~&dFL* zSo*YAUBtd-r#A-B=v6*HU8*u`j$Ia6p`VYzl6^+(@*cb7zB>iXir$l%EobeIR?_uf z^1_Nd(b1hxSNte2$4=t(UhJyL{4}XRjq`!K^vPyiUI2m=r_;*$Z$5mEFTjj#+%VU9 zZ_GhA&sCbK#%t>RvFrgV-XgxEm5_c z>*IenmfvX{^|guNaqjGp>>u+^X%&=vnGR!fwfwZFC25#6uN>Ob_{iM}(xtq;S z*^zj+ltrp?4 z?nC4{-@*Q)`c)yHwsOTs3;=5Us$h<3PD7v<7o`V}ryAoxDKqGL_|5$9!C-TIZAH5DO4jaxmj+_niM zaL^DjjE{}f|3+_#kD*FY(=^Be&Q3#$yBcLA6ELJ1b6kOi50>hj7N-E``Ssr;tRxw_ zFLUE-ZO~+bsY{pdPJLXyNej3G`OAy{zo9~MVw!^bytuT^#V5`0P7e*&v&qO*33iF` zq(V^5X1e3AsrYoBQ|bjVykl+d&o8U-P*GnKv8VLbF4mWRV@-~)EYJKsue_S#GP2fT z1Ogwl>J~6QolgPKu_4vn=uVT1qq_KKt_?DkZIQ13Kn>z4PaZu~hd%?{1N24TH8K!b zH#~oS`}8R{UAV6-=Rta|gHgV;;~U*g;ar!sO(NVVqS84DdDi_dwUr7!P+nI%7LUNM zrbTk$4*!}x0E=>HKxsA}mfpHLzOHDfcTbbn@8%UwNo4?xRUc(BF7-)~cI4X1;a$zd!MC9&e|_-(IWg$d!tRr6Cm+;jrj1 z6nO^zY_qpbSvgBs86Q=mkY_yW=yV7O*s(p$?clsyb_v+a&hSYm4Tr1swz-v_@Ca-= zH9zzg`VOPOi1;*j<`N-E_sL--$tf_4BcbC#-y_TQ>E{C4pT1B3?kPiID&kk$9{r;3 zQQ&_H?DR?3z@W%Ek{^pe-t$Hl2K?6VBw z+)J+?FVusP;1kO+vcbYWV90SUT?I1;I5|1@ z+7?Qok)E?C337b*ZmwQB)Q~J}2l6nZ4y}t;HKbCFEq}G$rnsJQaD=UsTDm{>=|>6n z8?gmpritcwak0PCuh#ECJ+f}|Y5k6)v?h}();%YZI3*v?5hq{de-Zvg9#m1}g`bFZ zH{vECkg%{Y(6XgY84?TnhpV8d=m*Z~+S=NZ36>U0GCX!!?$z{hIYQFhKo_^aq7AR` z8(+8>Wc1hF4hO4Ygw>v|;~K4P_I)n1W(rU$ABfXlDH|9~;Wyt#_ zw0j#{i_6(!jR=pEcP%YZHYz8u)xYK@Mer7Vm!DIZ9n^Wbrf;UDQja1^-Fu#_y28SY z=r#X)?_YN})%W$wd>?L`!NaSnX8p{SAS{7Wyz*Mh6aywVs>c0?0`xmy+S!48khXfc zEeNVH2KO_sW&{{=vh}5mnoLC&M^$zu%dl-K-}tI^7`s zO+l3R3DfCn^M&4{D97ox-n{0(B3}Lo@36IfP+_gv-y#r)sKwcZj^j<0|J%L7xz1n$ zBVXgeLc=4nXR4gC|5j3Kdy4dTkMQEsWEC9fux>24`^9JvN+QGBw_EkRT@eIEl0OV> z^nW{O7KPYvSelttKJ5q=(-v?f{g9`DmqzC=uOm#2>6{3+5(Z` z&)shlJlsh_;A(wM2TngnU{X4swpIH=g>?@BqZoZJt*5Mpiqn15p^Z9a@-`Y$Nz&Ot z=6}siGIy;M>arTT^|#Cc_((zcXUv_?8dpZu4G#W@e_0ZIa#vFg-pX6F>ia&mP5%a# zK}6CtxtOu2z@t7#saW&Vr{FawK!8~6;S1AN6%;^gyL*!Xo64`5Uur3@;+n#%WZ49u zTTz)CQ)R4CyJWU(sG0Po9byXqJ>o&w-Uwttwa@K;ZBpH5!TAl=<6b2bjWdsD#pBZuDwPGbRxThh|g@vZB}c6ZHLSSoXK zbAc@WXs#Ocb%}|I$pzhy`vqI9XUpPl>&w^CG)@k6o%u!9aZO+|{p|npbXuhsSCVyLm_u z%Y_ey+xTB@4*{+QIDyH$-dwBBP4;R^a#AH(?q*HH`*(OKUAAN-*#uf-rsnW`HFs^0 zeaTO&y0n}gR9=(05*@aV4W!9ZzLTY=3ksdk+Ps=%+RN8qE*idyP_{>RmDgkknauc) z*WZ5_&HLv#HgliEiF)faER8eJr0--x)Q1?|uV-UYu+=<>)VJ?9IummDAd0rvw##Ei z@Fl-SE29GJ`hAj-(`gE~`MPB{Qpvx2p@1cM2bLrzT8*dMVfo0KS1!z`4uK2d24p4p z7=h-wAG>Rheb+T`N@!pN0bYyjVrd6n2EL^4^S?mHK-Gm;2m22K-N(X_BovHESz08m zr;79SZ_g7#Hc`Z3aqdU*88C*8%v9E^b750aA&`#(gu_oTkVqP6oTYXI1j%-cTE#bE zN`&O30jmK}5EF{bH_%w$jB^{Gm=5Pkxh}s#PKnVHax!v{2!$hIWW|0Y(hbmWbgIg3 znbrXD=bry2dPsky6oTEysW+QPU~nZ?KFQ5=eNewKEmUO#C)d>Gk(IGxq-)zlgp32D`9F9+Ys%GkKpdUJfaR&wBBPDhEy}M--=DxaDz;>SOOOiBPUSh@>%1#Bl z>KgE4468jaYu$y?2_~kd`F&h(uxZJe>1 zD$pv#_UMV*UxPe8G%quBEK8D7A)dNnOm-{m*HCykF-PrJ=AA65t3yIjmLmXl) zI4Wo`U*Zh6p}7?pHshizw@vKf_#B85qH{s0$7&a2=E0AXhMjSax~q8qrR9W%!`NA* znUp)Sgt(~E^gX4hhsPVFnD0Aft#%G{xnkRF8WA77>5B&dl4NRPlK2@H=+ppHp;9`t zcksTTrsn)lz69$OR!o0c46~Hj4BDxLJRB;66_oB!eh5Zf9$X4~Pr@JkyR$XJPoHk7 zL@zc0j#OA!m}qHkX%{3PA(_b`HK7OtVPofaKkhp%j%&^j&~Nvg9Fg}9ABn=Izdc=f zy1y_5Ms9E+POr~i+sYp`G)`99@F8sACc(zmZN?!*HF;FsS1>(77 zxC)rWh^<;hrrfQByjOerZTYP=?$MdU;enOElij~h@C+WfDPyLi&Vd}0t;?~S%V>!* zR7#4&W;h9JO9?_-AA$n#aA5ymSXu93RaPg(e=YVWeb|kLt5JiF-Z|{Tyc{+|dS+2s zc87hnvxM<@>T!Xo3`52r_t#Vi3ZMe9Sw~lw@?tANR7qC$!L-c(^)VI znwlC3DQQG_I4HY-iijHkqH47&N=vOA9P)r27ba$YNhHJh*>CzY13%a5m$fV1;Ma?A zru}E5>GMir(!2tZMRFJe-jR8-TWq7dr}&JGT| zc1H=RlKAA|iNI;d`nr#ch9PC7gR*W7MV5FS$cg!<1`=WW0C{G+dXfzlB0CE~7g5pB z;O5{UA|>qrhuq+x%*T&7mql0k`IJdAeH)GjHS`}D-F!*>W%_$Yb(P=DHGgqi@Ri4f zbSG^skjyxsg6_F$9C)+|WWtY24qdXV6Tn;#$nLFeZQnrtST@|>-_y#c zl>jiYq-5QZquJHm-27s*KRI(JCgk^)o4Y$Srk^b<1SpdqQsHmY!6c5o0UKuq7?wD;lGXK}~+#tm)o)ci_Yh(n0 zbniF=Krst!8;4a}3yZnQ$w~10X=u<|wK$bt?;KAk9d{b~gvn535eck$MXs9C&9I&g zoT#IH*yvgoJ}J$R?iR5q59#7enq2hOq#*dRrWB+-@8zm(S=RjQj`XZ4t_m!`g1Sg1 zJQYv=aW%kR0uhUr!k{Ao?>OoLTta~!znCv>tlY! z98p80(*7YF_O1{$B7MWFK4_S;pbE!pUJwHDT7Il=H2&O>RQjD?vV~A7`*=e2Gb^fB z=VJ`St5wi*fMVRihZkD*1F_U6;=|@`Xg8LU&W>)1;mDGwSTf0q?5Fsom7q5_Zdl$J zJC?m8?qqIOG?&lzg1KzzJimnCF}e2{V5mnuFjQUOxg)Q#1#xC53hbXM^i5R66g93X z)OL9zfAYg8@l9kzx(AjlDP^zO<@sPZd3rU!gpqy|sM+57L&^K5pULna@z?BZ$xrZ5 zko^3BXOxfy{!IMiUT~!{)YtEDKUtgu{hQ)Ee?U9@cU=ObB!NXT0WNMTIN7cb)E}a8 zRMuHxm2+r|!zu)6F`Qf?UDU-mazb_b2R|0@OxwGUjAijMky$^JcZ1K=LK7Z!zAE{U z0wTu86PMaZ_#=9>P0q7`q%0OXS~=N@Lr?sjmlzZ-PGTv?;% zlPRNi_)&X{2^P+tNDw2tUHznp@n&}q59+fGFaY#F`kP-L3Ih37S{j7|Y+p&@q{JdC z(4ZlafjaP2D8W1wf{`?05wE9*he&8>O^uC3la@kctjx^JpjiCt7qmC`35eLB9<8pX zR#sJ&=0iaRSs%|490b211q}t#TO|}_2;|LH?|)zTR#Fl-7p|3y1HP- ztBwo^VK>*;$ET-om)%?Pnr7s4l5qNu&?V*NM}P@m11ThEv&nw?P^*=lm*-$pybE|2c-WGw~z%^q_fPkBd};S*k`H8DNK&S63U>nMH+#!M11ZGtd0}yIU=I++nd^ zE|`LWNpZ=%x3mGG5;&TpK*FuHys`pH-Y2>sLUi~vmz9+j7sI!tRvn%-uPlxdL)d7u zzv`2|f%pcTp3mR2r56v;T~s%8tZ`5YY9ZbA2xkX zMZ=h#6+M7N)hDZd_}l8t#rQ1{B<}&i1!4>^AO~yVN5*=~)(l0xlU-j5)&G&X zldW%xa5cJTd|HTci5v@P2Ib~@o>UVD`wm$aWC{%H-YF`|?^^8}m48$;3W1k|bi<66 zzMqBP5_|lX5lvL=D?vAtEY`<5pBbko8S|;w^0559iA-{Yd>|@K=KOw zKXL&wpHP*z4PFkS^tu-}qQC%ABJkEbCWJdPF*d5ospmt(${_Iu?~XwMcqz{6)@jSJ z4UOm!*jOUgOMq*8ARn*H4A1snwM?)iQHWX#Eiz-fG27SZu?)E~M>UZmp@ofAW}THk5t!;26JQ}s^t5Sy3d#eaDF88fkD)Kt?p7#>r(Thngr{fCw?rW6qD z5(&PppW?kK9*V7S<;3d~qteY#t$mAK25sUrUskE@iic{QSkLu-0tamrw3|Ap*CnX0 z6}Vl}e}%|cOfoi`QNq_+yWkN!xw?FC`@$Y9)dIT!OY1FGkOtM|h$|HNQJ}@!2CdFp zr;}Yh10LPP+3IIlAtnuACq9_ni&Gh9>DKX}V#(r|%*wY6E=wLfa%rI6&jigci|KlB z$~3rh$FU-WOIEdFIb%f8h~Iz@-LBEnExPp`I+ldGU-nA{<>crpMI&^spj_E;v|>gb zP``zjyzH?m&+w>4^aW~Z-eKI&Qc1|?RD_-93o_Gwm`$@?ct2|Hy#ABd!YMY0|Jk!t zx}?yd0h#8Iz-D{4Pl75(wsJ8UwaAl=Kw)QBp$Um3uK3f3uZxEg1@eK4GIjVg)`#V| zRl&RtUg0py6k8DNXmM3EHlh;kr>-w7oRLRUNoZ`0OKaoU{z}7B3w-$q@8(NN zoQ8SK#HfNIt5-9_Tm!?()wr(L-%Ij~sq6ajqn*>vLzzI#d&6(=Sq*%5wVl90S1EDPP6J#H7h?DJ?biW)#k4>;7U3cm#sID78}t z0pp`$`8YWs(BrV}y>_DNabweV9%%CfCr|l8OeZK{$${ z=MTJdtRW2xx-UJUiQ@D{EZ4ub94Et%R67w=Xr3}7OFg19l)ygut4Jv zyLM1nVce>Q}z z4qB_5WC&`KHYraaaJta5$jtEWg_(5=Wfv(ZR^A3XR|0CsE(tvhPS-~-sXUWMAtf6o z&QAD-VzOI-+6PmiU0W`8cuZRcPOF7Bt0&yb_cmF}kMk#Iu5rAGDjUoU_vC1K5U)^i zz2&U#XTo(lLb$I6gr7}dJO;S`@bF=Fax%cl6s43m?T%tX)8j?x2=s8R{uemp!$G}B zF-#IGOzTArEgI^Q%NULzXUkzP$Rv<5aS$}Qs4RuRr?*H&3|%dkW*j(_D?{X9ZIP%0 z_1lExUAc)%I5W&>8e&lTP-yon`@0ehK4M&GhxdIZS_(I53N&#OIyf=Qzs9L&dRXDe zB<-kgo_C@WWh~Un4U-A`z~Uu&r=X-ZLalhRjxoP5A;1Oe{~{%kp!pLCEeJ%s8+i^& z$3tibv|r8eGz$a^-K$!^6K%G>p+eRfhd$mwApc30-@O}Dc0XNydsoQ{>6T~h=-Y9I zf@m?jgV^*?2S2HcTH5Bfex--5jExxi7ZnoKNvjq^aSKWH2N#e z4&-PNx~;BOE-o(r0hKBA0boSK!di|W-pw#e>f(T&3>Vi{mQJZD`##YG@ZW}l&?{yC z^t>QUr3n&S-`WbP2m%()?J_ys3{!HKBrvJN4IHWC3*Z>T#lzd(*=cEM@$&Q(^1in8 z^t_)el>S2;?eeX%@&x>IB#k8|E-uVE6dYL2UH1xLlEW@g2!Ml9++PdyeK+AHE+3vX z4ZL=MlnZEEl=DP@C3o+YP7}%~GanDu^<(#j%~m0faJa-O`952j&X4kPA7BGz=>JgE z(17z$z0SZSdon!V-LpLCh8DJkT}bX%-!s(j?^yR@zPAU7)VPoBbM`2KN{Ut1-H-GA zNmIHkp^e(~W=%^TTX24lV4(z_rk9;LLSDHvxX=w6GregrMlxv6t!MbncNi4Ki_9gc zG>2rTKn>l`pvIE0LB6$#c?gMu!&}sjSr>v!k*How1_2;dm*WrGpXU}dmET$t@i5ET zL9T&TxL0n09A2??HwStm*)R(4kfm=GpC4ki1l7D^2hJV_apn{hj(4;$5=j{?k~ ziZnGOT5R=ooV9%pX*j+cTxzp%`bo!#Wb zt6Rq;+QMb4$HvdaR$x(4d!PE;x2clGQD0spEu~m$W(QvFYif$qRtgVMNTwc9ZU@b{ z=s?j0a1o5SiF2=-|3a9BKeI5!%gz6J$3(BboS~G))mn{jUa-Kf&#;{ncrkq$*=yi+ zW4hu4VOx!f%63^Hi>z7w;7jPQ_4drrK+onh`V#`?0nX9d$D)d#&+Dg6olzHWUEq5& zHDi+Hf0_TVc=QS9x|zW{8I@;1Qk~uf1Q?T32JA@6R2da%I}3PD;E=bqH|iPwo=8)@ zTYLh6G*h&N30`g@2Ya`{4Zvd4H9d|Pu*fkZ_8YPL<-i=amLWIq(BXtx6JF{b2`&te zW*1!$&Q1a&$+$*4(B%V$l)^Gmn^;)JY5p6pGYammWPchf}laljVNJR@{J&HQPeN_2K@p zRBf&?T3mt-qNKP=fpq`Cb)>@D?T^!gQbIxW`b^<4@LqzGE|P*&_0`8d`$TUc2WOCc zu#iXB)GswL{ori%HKXJG6<7}`nV&E->bb@Rr;2Kua3g*{{BHeZHx@sPv~PKer=+CY zMpQkoOJqnO#LmM%!&_kbz4myvVE)`c7j-GlBzafUwZWrV2_rXS_rg3SlXiZq09#*~s z!2}ioM+1vISWyH?8@iqB)LaYojaBL#)#+WINV4#`=6M+j@CbAcs{A{+=vWgKDBYWZ z#iA3w{X`rS3Qx@+E3d_#?LYN+{pPIkF35E@o-=Y3n;|J3Wld%gKfIe?M5;Ak%4y!Q zTADf9ni>)GraeXjL-?~2!0UX)&(uXm&7ZlW3qj+p5bcet2L1JYE@6rdRTbN>@p zxf{N(jdeMfIBj=&a)u>4v&o55_ocdSzWrP6WK{kurZDzcs*k*>GmJK4Z2T_SyFB$4 ze$G-FKuFer)j06&`xj}v3YqJ8$45VdHfDc*QI6i`!XgW6anRvzHxKYqF!(cbKVx)O zla@blIVWf04D-`hNw=_%W(s^<75a)`w=uXnt2tRt9^&LN?Ct&rHgSKMe$|?Ls7i)A zDEqAS&3|bL*;wRdEO3F5pXY-!u?;wy%lb44}SJH62Wn8NER4fb1_m`091@g@#s5x!OQdW^MC%Zv5rko zPyaW-?Rr|-&enF<6G=DdAHu+!6wP-+4-d}z4tJ4dM8GR;wRP3;LC;QJA}<*!N1Rfm zb5*;5G6<8z z*owZ3Cn(g_*G-$(42Hl!6Xk4^TOS3a^l!(@lHBQ3vr0MVGH6?5)ZQ^DuLRim$B9s|5OwB$#a*;dG^m{7)z% zYibFVs-OlKea$UKC{iR889Wk(U3eNco4K#Chu*9a#I$P!@sJ7RjD?7y{C_;1by!u+ z`}GeU(jXmzh)8#*Af3`BNH<7#cO%{1-6bW`-CZIb(jD*ke6QcjUwQ%iY|fe4Gjrdc zwO09xLz$B(*DV1+r{xg?c&JtmGGZBo`_%cYt4%}$$7$5@{t#Idl=cFoGrMk}rnmB2 zuXP{C!7=KS3&j}i)DK&okcOf!&WADTlpM};m2U5by5|*`z_W~{z$pK7!`rEMzXC)l zE*+z3%9zhp5$^l7N)Blp*-$5v|Ll1r1=u+&xkq0A^JCm4wbuOc;n$K*Rg-~>v8Lfc zc8i``yjlPZ>2ROH0`4{L;Tp|Vv~vz?aYhAy>A?_t6%Kfw<0o5i@|)$=neNX{zD{ES z#>#|bO~21>eYlz;gG>2Ej{eCN;-=@U3wZ@f&!QYsiL(fgi00Vm79PibZcxf6evki2 zzm$^n8TYGc$@F7>Aqq8mPDjY z{BXT(D{vNFj_KSyKB!ifbK&hwO;w$@Hj|mLP4$yRq;5o+1m($J(y0kGtrue>msWJOjOn$B-W`@<&U_Qb zP}aKnqyS@PZYbL81nxV{h8af)vn^`v^7H2B8-?KRO!9w^*ow8NX!Az{of>r+n_Zt) zH0M#G1h6icFKJ7fs@C(g=zaPg=&v}vrHYk;pR(U{9f|y2@UZcoAy(q($fV&ouK=7z zM4kXhX&|P`vn)`47VY>JN^Dk@0_Pjhq{;$^td$$sz{W-nh6UWn9wQ4rEvZlq)RG3#QT_fEmwEUQhao;A+ReE_u*f}BNt|F_dcJU@b4rSPO zKx4DYCTDJPCc0;f_z4y7B#fg*| ztkKmDY~~ezq476J^N zlf1BZ{OHnRlKd7o`1qJ`W~ zy4u7R@xQo%nEH8fN4At$x~9O=?wO+@B9khrKE@z9Vm_xcw~_o zv$Md8I(dNS(dML^eV8ji(5Yz00xI(u396Nja|H^Tiv>REp&Ju9G+!r@jbhP>0Zp8X z`!Ro@{A8Nnv zMxB_WlWKD!${^+`Uq#IGqI(e>Iz=y08f;4bn!C}hu87QwDv3lp-?{IL5j)`0(+t1t z9j;4=qQEOv^POd6^ow?qF@M)4yncEwh>9)|jo^$_e{A))%KZ)hYnfpm8@(LQ=R<%h zO1jR^wb6u5mYE7*pC$^m2`pYMCEI!%S?(!FZ z1ri0gB`C0`OLNygC5wKM{VDF=nVA|-nvM~>`Eb#~3w*$_CZ`4w!+X|Rs62n94y)NA z)$^ZqYlKR?`OS*gN4kcDu0Qs@Ir_%?6$u;3_an#Mr980B4mCBm5GshX(fOVV8$5g- zYWIAeF^vTZ#wLtWo+b$8^cIRoHBBACQ9)=S_U;aC9Tmd&zz8&fK|Jsdyew91#R#Iz zDc5x(8{5y{)vm)>Yl~=UqHZdeYJW3vBP4V^&O#lmi><7@DEQ|j)@7t+rMHLBr#9lc z3j>QDylP*xN;v4KY+QeDl2l8AO+z}LotL44x!y_lbp}2E6}lE>Zewg~X6Q~J_SCMB z8H$vQ^+v2`weL2gJm2H_ZtnW{iX0u>A$bKAbtp2hUI%KMaSXRQlt==rZn`B%k6(klV2t(pgKdz!alsdTlSvWO|~d27F^%eV|E?Jj)f08 z=O+D%W_6_#*)WBu3Q9ssx~SLOGUm#SFO&1~|3+h6C&k&R+ybS7KtKP2_03rVa5Drk zPtb@!8UN$qq)iA4&aeh}fq<6LTfsY^Z_Y?hH*WF(4Li_xTV7rke0jV8ec%*=eV&5c z+}xs~-Hi>vGk~_N`^Apz3?4wPfQt-BeY)V(@q@nT{S$DyVX=GfmVX#hi>wnW?S8Is zKq_hI7wLaJo>cG(stY177&p92CL&(K-MYWtw#sw%a9&|j%)`SoIsM@s4Y85tB(yiO zqnG>rlL|f|G4Jh?Mt8`}g~b6)xUuLl{b#BXL&f?lm6InL9q%)j^tz(%gp1QP{gaNq zc}D(>ltec*TKD6=*34M)4+IMHzx9|G=5_=^C4hZ`QnG#4dV=}e4GKHrPB$&7(}3Kw zr4&Z8*%$Z^MM}w6vhuH)F9dPst8|?m19f}#Fj~mnq-88;99P(vwestOyD72zy8;;t zOs+6PnycyhtI&0VJ6kXD8{(7dEI1qmpSsk@jH z^wu`l`zI_N-yim`ZXD3wohEzX;U+KGuI%n}ylHb=%D36v!?!o1JNGC0Y++(c%>dOW zNE$~-i546==KOqqY@xtJl6h=;S@2cR z!_BN%*DX&Q+R}{|;owBtfEGkby`^2X*VTyw-5Bl;rawLWww4K<6#M+5mald3J#aC# zK+Pcv1u3Q`p&)J&J!FBVh3?T))H0!oZnKA<=_+yzsrm7VQNhw^%a|rT)$268KBl}h z=V;H$^?VO5^p>J#HuA!`Z8=}AZ)y@FykEE`A&jt}e&IRoW?VuP8WTL;PclfdgqLcQ zetG(ZRQSd5|NT<-sZSM$hp1&t?f+PSJ2mi<+A&Vg&C0(vs}#e1vd>)h%je7Bhxh!#Y4&i%;Ha*a3BJ%> zBO*)SG2ylG2l!nSRf+xFgqrH4-ZKDwaZF{to8;e>yq!{b<=^`Y7yQy5Pd!Rt{-VzP zwXfc-vz5R-ortQoqYq^$bZDYs{ZC4aZ|tRZ=P|E_UgI z(`SPA_4%0d#sUikKCiBQcVn&2|7j`}J9?Z#2}#y*sw?v2JG;|-vZzO7Nb|h=f#Q10 zt`1y^j908PPpmpl&W1D?1p>3jKU^Y+`}_OiQN*s9a<5*6 zgRSDoFy)RID8S3gj-GAx@0tQ5F?3SCJ$XLHX4;GaeCWW<7)}o>!5J}bH?mc#D{kZ+ zkazemH#sCEWS9NaA#{44wfO1E7dNJ3rB5|y(dFRF?dOAcr?A?hm0M~dM$|OpcQcb( zO4y&>ozPi5J=)rvL=JQuWmP_~{qE7t&&(@ zL?%LV)G={fk$}{u*-PxeP+clwgK~U)EkMZwv}6a2sM~1{4sXUH(4>#2X;(`2C5ht4 zCs}9z92S4!c9f==(x@LmS&xprOE(G)#{AF`UwisjpaU^**;@Eory|57id=VG=I|$H zh=<&liP&~s>Hi+Re4D4kxem-~kPJgMsw( z!)9H_4Y3ve8(bL7WKwt?Y&~V4{hW}+1EE%oV07} z+w}CsL{QIH6JxzOISTCem`k=Ubnz%|qxME(>v*&kpZi=g^h|VibBHXuFqdjA1 zuzbo7P!J5s+Y(9jUwS*77KoyJIFRuYK_GVU&;JnO@h1Q|0e2^0Jlfaa58TpX+vGxfe~$~k z{3tAh=i!F`XlHj0ykm4lTcEu;t+gw8T_3NBQ59BT#Jfh{sH(>|rAKB<&^qgGaT7jz za(Vt{sNHyvN39!46<|L_ym@=MRTnv6gxC=F^)#34@R^-y65dna($MW`w=8T+?WyxnJJ3Hi8uaQ*3 z{%0P?^VpLTcau5av_F{AZ$kKv>RZ!p+tTwZ?+xgzV1W3=#$vLwH-HaUN&q~G?m!|X z9=#?d24dz-MNUo*uk(qEtLx}ft~VAy!a!o%Ja9VDbeD zKIX6ePKlK@qwg&}GX|$$TJgb~SP2hMXu+8khRZ}kM~?;{QEPK^eo@g2(6KVAclB(Y z&CSjIYdrsZW&dtUDyp>>dlP_Sisp{+8UopWNqG1$W9Q?!+VvM-!GPy4+@TUUH$tz; zcPas8b^nl=mif>|elw*YbZ5>+o__JMsIN$I7{mNEw!A^c%y;IH{I#w3(F%-5G^f!* zN=n$ZJQDA0Be*gl5DJ~0X5Gz&8M?Tb6yA$6H0XM`-1<@QP8%x<#J7ym5~gNmepJ*Y z54(Tn&h($+_`4t#qAyEL@$^0~M^G~Vh4|lm^VTLJmH&7}Vw813B03ZKDeVxTbs8@) zkT+%ibuZHS!>6c5Xq{X(C4c^cWl@5Id%gOrh^;MC?INJZK&$=kw+@f9+ztsB|As!A zAH8sL$3O;>OKMjlaz47Z9+VtvGJhT5tKLAhB2UaiJE^|;i7cw_$7HaPha8c)=wdwr z+1$4;`Y0j-7F$InEU+FRre-;fJmbRa?FqSF?}7;M*%?u?--r-XOG{!RqPA}$g%b-a zD||P8wCTw~GJdkES$W%JU7&F;pU!pmbaN_JqRjxRK&B@KbsBVY-TnyQxGpgx+}zxN zSJ55szp(|7YQTgGfaZI*9~?2-Zi>}fo50uRnt4MY;(Y(se@p+rvBbI(b^m8PyUumu zcB+A9&n0s4X$Nmk|0cC`4OGf6RaZKdN0*m-@VH3Tb!|ollwcU*0 zBHO8kcu}sq_J)-O?IrFVYDEC#qCV|J{p5>*O2ny@AM!qX5gpmZZ-kr~x zAOKb79na@{1xb5v5;$e|_(sylEhk%>sD6lIM!}TP3Cg*pA=9D22>gLu?g^_uJ!>Is zF0s{j>)$1a$x-cVHA2I_z{47dq4~`HJyct04O(Dpd6d8)Opy; ziw3f>?ItfMCj1ES{eM=TR8%aBHDLRepPwHUWs+ZpbL;$3>4qRhm=aNx;6^&u(bP_- zJuzyE>~J9~xG*YRx@U+XmQsU7sBi#4pm=C3{vk>2ifn}uRfQ9wGFan5M4^wTfLl!U zJSc*G*>1KK-dV*XvW7(xhk-<(4*a2&l);j7ast>Zm2d*Rf!;T}WF+&-9Fz!|xY?kD z9+}hH^3cBcuW5#hR=&Gl?7l+z*~RC&L|V-8nZx#(p&B)_+M@UJ{i-ZWf5b&(TC1Akk2?z)Vi~$vLaCivA2tVVMpxo6B1r5Ou z^{w%3g*vT<#=QQe{t9CVZk+#{ld9#XBvTRg9taB3goEw1>YI<)d^hBs*z-}jV>mu~ zCMLl{Xu`1_G)#RXg#XgrySs&%UOhcMMMXt{T;t;Lt!bSvOG#JHCPeP{S>MLULggr* z1wsfNq&fCm*njT267hW*`}IC{!pqoAQ!ermghz|3eg?Y~T3TA0mF6?&zt2|s`n90{ z1TF|%g12}7IRcMI$rPD%4L-!x*q~j@4BiswroMw06pZFklec7tKr~S-7)L#zaoe-Z z#dTM0R@ddismQJ~+Ltd@yF_W_=A^TC*x}lX2U8ZP-6Rc0dv+BDWa2rLRbff2$62#P z#ENbWr=ksq9?!Xpb;S|>UX1PzFo*ye&@PGeA5r4_qNad@I9a@uI;s*J#}e*@tKRlA zpQ(e1i-QpZ%W8EL_t?jIaKo&$+$)b5xl6+E_tMk0hgC8S{X(MEU${<8{Dkc!Wi0s6 z#IZhU-48yZ47z5=zILWMlo)4aH%S(IXW8%xX{;GfUkiy+e=^m zK;z_cv_AVfu7UFM;6M1G_wkicAT(ge9NVSr`MK7AAGy?dKY{5TT|hC zvZWD$iicbJH_X;*PE}j*LQa=yDXVI`mxqbWuDaB2AJFCR1@F zW|-&H&)hyJM+2750$sUUB|iW^yqC_qV&RtDOs=U$y*0a-A#q%yD7%^NOWom@#0{HXYS zdN1Sf8TYHE@ooFLN9n#@x|K}-bMCJ7)Cq$JV1Ow zzEIqIc^VE!yHmfQWFysF^P#(oc?)T>&UFqjt2HFy=)x2?r=XVwLT?a zlA647Wnu}$h}CtSTO7p`KSg|e{|G`30$^{VuR}c<~Y141mt&!X%Ax$sJJUge@zXtcky8%_XHmQd) zEKiD2lMGsg7)exn@?NhJemG{!x))X4iG`b+K*jd+MkfJCc>raHAW=HpBC(_~JUqd- zTJLrCblv(&HKaYs6+`=}*L;|eusUo-ijm3Wz8TYg102V}>ty2o(6N$gNGhPUJU-bp-qc`no@L$LuDA@wN|t$Neio#MtRpr2 z&Bd~N=}iZkcCG{+NZs|LB_0#*n}lOhoMhjrSkQuZMM}gn7$suiGnqXskjPZ3W`G~7GClOl&)E|&Z67x2Wl&k=Th$k;hNWx!Wv+1u{4%0 z>X;g%_p6#ED6-TfWI1l*Cf}Ryoz1-|W(3nOJgNd2l)^rKLu6^Jyi<`IL zo6Tps zion?sqiI!B3F)AB*dQ5MUkjX4bKMj5z3%CbEzFU6K7bT22pN2THIE>|{*ew%shUb+ z7^B0+Yf`l^kx819O@*~-(!tJdsn$pu^fE8GLq+caxDWXGY-D&n&Om_gA|0nAqEl^vnL#h78EKQ1H5FF?f6+0+6`!{1M~(*ie)%6@)|_ zIwdvf_2g|sI0`!9X6Dn?^C2Fv*+QFOgYjMJ5@5`2<@4GOzr=<7^BJ#2-DjzpZPZ4v zk%mBCS6}&*b+pRdodT{BI2n&CU!89D01*|maG@6vzll)A5^A1!Uf#_SOhyD&6qY5C zdzfjaKdL}s!Sv|cLK(YiSJJrP9vvT>cn=uY-Tb|C`F57J|BV*!HHo^ykDl4y*R#gg zzKeXM=s%c120IWUb=s^87#VR#<36c?a|ZC~3`Qeq^|-UMuqbP5dpP2Vd}5775F>=o z|3(%hq=LN4(3$)EQ=;Vh^A76)Le)I_Q@QA*;lzYWQxS}swX^p$zbYr!qF1A9r%fxv zC1Vs#yQwFW@{eE_w3#6fPwOz5(~2x{x;N$q@)P5a_chm!*0vP3l~gZIRL zsoRcvzr~nZR z_0D<3cin9{?|%H;VU#|N4n&=LJCox=?;)2TRntdfC=e{E^CSirOxv!Ak7B%-Nui|W z5;&@kLGm5tug4*lo>C2x+?m-yS;ZP-+_=WGCNp3?!Ey(ITKQ+kIqiA-7g{=WlW2QN zeVGC)H2twWE=**ahJrWMy-%z!vfN>s<}E9(=&PbacV2{9wgjc&w*YVhVKB!%?tyBek!i??t%Vr%ecB@0POij!bRf5_1NkKO13D(IGP2x0d+^C+d zR!#R74>`?Gh94C}K=#ho7GOHDGO#gpF^)*}bzidKf_v_Io2hVv#f%=<1_e=1bn0b7b#7~ghH$71O zY*dga{tGXNQ0tI=rtz~`KG5|8GA|3Us1<=8pYAlwR*D8Sd=S;L;xL&wtJaofNE;_k zlT?834gL|y9NWe&Lny#QjjGM8B3FqSSPS?lI^Ha-tYtrceU%~=Hgq1&h;kNcSLr|? zt?;vsDi`Lz0g##CTAp~%(8%((fbQRo4fQsI8;g}el)nI-x2tf+3hx;j+;AOetLd^_ z&{g9}ZS5E9kF>hHNP16+8;tzE(2WOpIjpRt-Znq#RknT}o<=Lg;;*5k%VApR8!bN( zeibW&*eqw0JU$j2Zi&6+s_R_Xc(os+5)igR9yY)@ZvzUC-w)~>t zto5=N)77QjW~(CQ@wHl=^2F>=X;yhq1B)yT4>Sxd+*agF6yv0RVj+tV|DZb{t;ayT z1y$zw^N!`H~$KE7r563J7Ke{8R0o%;F*9gp5XKR4&2X|zaF!bse`#f)XBp0tD*DGl zm(|wc^@AZppn1T-XI?lpP;=)iS+Hr{-FStr$)q0P9AH0}yD))MHFsY*cqaMkeICG^ z6g8fE{QZDeCOu4tC{e~IE1SLFwi+7Yzx6NtWXi7yNjc&^{7L@N6<=$6qxWzhOb>zK z1EIEwzk&;0n%JE{PL3=I$`GfasPTPNqzstQK#Y@6E*&{^ZeoXjjGAHj+Ia3~GN662 zwVuFl8zM9F@V)`6D%P2rXT?_-;j1Df=ZWtE3ho`)oFXITl9%?AY=%NcF5?J0(W)GD zG(`)^f`_du{_4?APUHRhg%^;#NHhZ`Oe~UO%5zCVEP$uLg!x5LqZMNXu+0gatf<7y znt#AiJ5X@M5_n;6#Q~304=d~a`-l(}-PawT0ke!7oT*BZ@g^l1JuOu9qf3yDm`c2J zz(r46bXB7l>)W712GGg{=#gr=e0G;N1{)zgE$u5%avvrKl3a8$fry9*QKM9xTUL-^ z!&x>$Lh%;Fo5CW5@D{q8|v5sYUZ;Sw?b+Y_NI zJvYtrf-+((D=WiN4gmpn0V?GkmY@2TGITRFE=LnxTp7aGs4PuRGhe?Id-A^(rC6KP zS)UzN5J{V!X7}sXlck?|>Y=+tRR+lC^fZMmNx_6V5f+m7zUA@a-xEQviEcy1WXqw7 z!^on}7WbQZV`AL0ArpSjnY$;o&eb1FOadGQmA(5X#5`A58D)5xmsb&|>IFK_MFDeCC3zmR%L z)|1kb*8sP-%#RG|ThOMbUXhwta5OcwG?)4{|0ke-kudc%AZ|MEEw-hRrbI+!N&!!7 z0MQYi!an6+h!U@fj?rs3n;S%5pE}2>t8>oT3Dtu`QcReL*bj_cQ)2TmynI{&?Cg1k z-BBS;bq3TB zhIC5e=k5J0y^8$4JyZNQil@GkjiIkeHN|L1BA+07M?X-J=i!LdORt@2d+KRDL9J{H|cwy9G(y{grEFfItpQ?wE91klqjF`J&{*(d>3 zC2Xbt=G*MHdpJ1a1Dr-n1W!6tv6?)SnO7ED#I?Wo@@zTHMiXf(V`Qq(Vb(1=rplvr;a0AQ}kxKG~ zJ|aMs}H_;47dLg>rMO3m&&K-=Ha#DAj)5Q?q04hj&<9P zb!`_ZDdQt29_bupZcA%Dwe2l+ZFTcg-Ifr9{g^mshza8)X zPE+EYXe%=T#TAB#wLzV}ny_eVlc>4Cf^4h=y>VrFVjJDqP&c6uU`%7Jo-oW=yXF%EVIKY zIBEuTGg%CbeiZmS>LP@WbB2zhXf>DwMb;J6M#~i;wfFF4@@nHaZTue#z$AY{d2&d4 zbh3w+W{+nT>WIXIKsYfq(aW5>TY-iOA{ST(QB_EA2$`wo`7OTr#3GgD{2=)$`~_3> zg0p`pBhZB-)aa)z8b{WHc6>ox3`1@#91gAgVER>T)S5BhE3`~mCP$XcXNMT?h>Xw- z%kn{iEaC?2s3w%Vw|&dFmB?}2h-a1*!vUK(lxa7X^(&IUFs28^lxfk= zj;=5nI#@E{UiDL?@*vgXA;9%5OV+ayeYtdKs$UeaWN4^pz=I47$t8b37N!)qzaT{P z17Bz)JTvq2MXPoocjo^79%Lka;~fF|%F2q_-uQy=W(-r1(3aCh&P-(KGyiW2I!4%O zJS9k7(uB;>t!ySLIFY3gX3 z>K(7_w8?I$>6se2pM_!UsP}%KL{na7YG_Yzk(H6z$rotx>)++#KJ4E~E~8iF)k^#& zV2s>6kn zoQtcuwiZjWboK!JEmNPB$*WvIb}n{`}0+%rdjFcBQ>osQ%t5TTPT zGB(AdUYae)#3oei`vEI>xWF)|p~$pO8l2V!GQ5#5?hoe6?aPjAJfS@WtIe9O51ONl zcpdQ3MSySE*wBMO0C|46`VQV-Q9)s1ZZ1fp?KNa#nbY>DiM-G%Lie0+D_-qPTjQnx z=2(z#-T4Mq#u(G(TpXHAiH+)R>Is|7(=pqtlbFCx8Cu z?#vymD#io7=&d! zA%-7KOSgXf#^(v1(w;6+gfa163`rh3OF z>MXQ&vY4IzN=Js{ok6Vk0UsGl;DW-eFy$6Z+!2^3cv7Na0zBa#&?3&fHdhM@?U3Yp z-eE^*|Hx?kQMb@N9VW%%r)(+Bo7PY@8YOX|ST=K|B1^|$aNRm`H*TzC`sV-vm6C;= zgZK8XXLylM%+n}Ns^l8k-tBD5Q9tFIySH6$$A5rzTY@?$7V_a{;uNs79&<)4fB{77`~4KqZkj!gGY z_74)4)2v^z2lyvCI-RpyI&@5b>fRjq{UX>TL@h3}G_>1eO)O$qRu#&LH7DiRK)M~c z^f~@pVf>BYYIbypyuc#+iT1@)OrPP%a{uJysG&OU#Kk)yymQrXs4M>2sr_olD^io6 z^ZoVTv4Oam9W{Z8XZ0U0XIW3O*YSmHpRr#dJ-_(hyCbk@C#nig(60ep_IPDG$*Va> z_9s((44KpKRkGMECFHlAF1rYSINM39XEDwLzY5tlX&r!W&feMuC@NSbz1K6Vg zCWA>wb3l3~5ADH4(^Zc6Z+nr>yIZ>2(4>TZJD)dJR+(Fyna)$)=~oJkJUmIIa7a>O ze*Esy@$d)lDPb(?dBq1ef#7l)4=+}a2rW}p*0EyLvGq#j_G8q*$llz$j4Yuyzk7=A zJTE3SU^HiTgRgGrY4|sG0UUYQvfQFk&+g1VxA#T)4?&$QT>vM;$~4s(tcP;ziyGO1 zNQrD3$yEvzy?*LCqpmK=(fp*P_DI{3`$1W1gJcxu@XFkurn=Uu5+JOTQQauX69mz= z(q}EVPmzFk|E!o8W$elSv{@Tbupc&qP&Im@jY+RtZHAEgIS`Oh+QzKVIAjYT8UQ;%INwX9?Iur)C& zmMYKokiWyXOwCK04g6bqXv!3yOm-dUoAMq{)az~yeSq-kdGdslG2znT09rIfGxRHd zDfMJan*-Hs@A~!1e5Y9)2JE|0l$W1fOmQY+z=Sm#ag=lF>Za@lvnPHi5EgoKlRx9@ z6h6+)o8Y>l$~X0Y{6eODH?3o2L7(f-_!A021ibvW!SdsWsMGz0mARPA_HU8KB?j)E z4m?RBWl*Fp@1NuB-Imh##@ASwF3Pk2U3q`cXjXms-hH(Sb%WFnWEqb3hT|<-K9#L2 zrB1CE|FbxoyFx}mc?67$I0HI+fncFc)OxeawZM0Wi$t9^ZC}dc49bEV!WaxH3Z$|o z=i)MvCMu#xx!>pev#(o?=Jbdy|I)R1RuFQp&MqI_8$D6yMCRRom3)h(wWR)w5MRNe z@sRKXP2?{;rqUtDNL~~Xv`VTbFV_6QN}@lbeP1q5y;wi<6C$OAk*kQORmSEjg!WOW z_QL3Fp>@Z^rCsjK((sQ;J3UFkVI>X^$*JE}!y%+SA%l465+b*HU1TYu1g zHtu9zQ|ZL&U6_gKt1ilB90t7K_@4BTv^L9F8o?~XYZ6zxei++4{}HLJ%A~qX$s}2s zr=+ev?+>RAI%;sRXP(tq#?&q)UC%zS8jZz zwWDzK&V+gI&YK79kl8q22Y8|SPp}nb3A6>e97H|mRz3d>e?QCI=TeUARQMS?DTqcV zE3A)FvH5tnWAZN9+o|8>J~!gfBsFHBT+XXD*qP9+%|VTZ>Fey=s*8)-ID<-G$fxZ%+_Uo2 zGfh7KoWF@tPl)m|W@B};iMDp~9n4kO&kxdERqDdFP2~9L-eeIw%^bKsIs50Nf``(E zs_@74b>^BiNo05K1i_zs!VH-3{;l$(KxdmMsXFJ__>~gzbE(S7uCWP-Oam#TtLw;EMldHDUc;&J=P`CQi7);-d&dJ^2kXNqjqXdX#*W ztprbcSg#SAMGz4KQte(Idl)$%I$)xwfGkS#9`~u2qKFb4Rj>=6 zS40DCvW&5iP*?7!a4c->m;02TAVKUHWI(>$jeDQ0cSbL6Z*5`Y;;PzTh09#<;9;+( zH!0qemwFB%j%-QgO`f`dH~+c@J&q-V+i-uhFpgZ6H9~JSOn}b-K3v@Mwyknm%Y;l~}ZW`GS`cM}K}WgFa`ioW;#(BiM*UFD@0)@$V9am?Ps z=wEbM6_-_%r&;pD<#D@{_pSWrYMCbOp$uMU(A4P{xc!?Tme&Fdpnw_J{i^f&Ki8+G zCN)Yd;N$_YufqI%+ZJ#A{D{83K9FjVDd_!te|6Yovum7dUtByPv0R)K>pHHyGTnJoz z<)2HngaeVO_qsxScU7sq4WJDOH=O+3NMo-2I0#*|4}TiM2m8M#M8?nHoJsh}fa?@7s@U8x-r?pWWa$^kt$Ho(5TuB6g4*@%0*keAnALGzbJghzTmOf0!6KI7gT% zKLruhPr*s_%?1v?ch1-(<}! zze+tAn(h6JmXuRg?@1>{O=}uVx!WSzq4x9fP1!=^N+3todF(U!I!c_;gp|tN2V!Wa zilI9lp)-_3DKTtTJB+NXPz%`#ydzXAwE_J|EiUl}0~lQ+uzuqz5X|;{&cO?pCsZv; zUUJMmX54YH%?{3~9*LMxb3B{heP=Ef0~0~%5c>lCo~*=nIz(QNO>SJTMI z8(tnN3{R(zBnDJUZ?N{aR?*O|RN{3%O+JrA)wHzG#tz^gZ=9SYw(>lsGx!QMRtwRG zA#Qzbn5srjRo}&aJK~wv{1Q$hlpGvVG6<(i>^r*fiZ!=wk*WN%e4)xmf>(u?QFIS* zul$V?^U$&_*iyl98WdT^ZS!QP9>B7{eXb}t4x+BxymW5Fs9uH0`dSNboIS21xs@9{ zbV8;eve?uXu&o*dGlfh>^NBzuh@0Ce8XY&4AXq(UHvp{YqI+f*qfrpdiMM zTm9$9nmOak^K;EQV_7%1dtE`<;z?7GX8FT(k|OZq*XE2~{o0MSRJ7TWqJ_pj7YIag zk2=-)9{nX2ko~a|L36<6*!Z@jSd}YTZy5EE)chL9xND-gMv=LfNXtxSY~;*E{Z8DB zCgJ?+-Mb!Wu{Rs9gZu@tkA?*HeLpCpa!fJx&#jo$X0GwrKW-IX%FoWgZmt)*-<%kk zn5_SBwXcWymsAdn+uq+|)q(j81Vi3059@&Iq&UQgDD?610jk*Lp&|359&kcZVn(bn zuOxauz|luS=!}&M`-li(g2{vxQiVF|UfR(`f+vS;K{`ZT8)0UCLt&yzATu$+-mB>C zov}s_ju;lAc7@Pp>}|xtuj+QOEf`F=bjcvE$oTTI@FGGQ+pmk zg&~l_v;raBebLY?mUHki4oERDjbj<;m zR1y$(zxlOXtOUYEDVS;hLaehop7_NqTNinhJ4vaB>$TgLNE{v2rcWz z2Z-uUmpCA3>i`~#7Bl4A`N4L649zc=^e{v+gkge7Qw})Sq6%h`iXdNg-6BL{P}wkj z{cLYH;Ay}LXK&Y3p>;l%h}THr4&G@COG`eRwI6^xm!|x#h`%wf>peO$@^4B2gMNSl zuPpJ5Ei7S!dj!eLuKNW^Ov}8yZ98xZxt5{g36tY$AZ^0T#u z-voK*LBD9{kV6H_U&Fq^Kc@Y>kHd!A;D!|L??#T-_m%f+vf6?v%8X9$1imF3YM)cX zSGLG8(dmF<+JZU-ckvDxgq%AR+=F#yHp2VPE<{2!&tn-hl20OnaD*gR5n{*}+D!7O z_UlaY9{GrSEIm6pL+=ZJe3jag*qq!>85Q3~mClP0>A|P!N6g@Si({3aVi3UX<3ENH z94)2)e2>Y79M&h2#y!W>&uWi+-xtLsqwL#_-FI#R==6Jah@z^mr!f-BDQ7R(>a9kZmqafuz$Gg&){czk@?ldeAr3S623w zI83Zi&$PJJc?FFWP0aE30~;HvPF(bIch9B*8%?TMK~5!3G+7Zz_tq5~KKjMG;_IYA z;n`VOiZ3$G)!TtY)+;pz{R`gA1)YlG(WJeWcMX5q>>K{>O&g?6DP%z_1(>2JyS|My zOJ-w$Gmv7VD)p$nqb_@|)W5&+6q?b`d2yzqJgOe6`i`#%5+nUHQx1lzj=?IsZAC>$m(KA3}*BMN%&qqgpYDO-}_F-T=tI9i-Eb`aOT zrm%57gZzfukc84vp7B@f--U9%P`sM=!QI&^9s{F4#9&!^(wuf)7EVsrec^BbAwxWS z4FJ;tI)oVL=zp%u51jzuE}+$BelV8qCm0BDP0cL#Mr}^!N&r<;g5;?Bfuo*N`>SQ* zX9~SAe#)xKN_s&-L&{VJ?OI_xw}y%e8hZM3=c%TB$l6iV3xi*0&+n0AT|$}{j;9@o zG(8|j95@4OBVzS?Ib$>JX?X1x0Y4It*GgKp{1gNk^$0I!wwI7Cnx19O(3rg1U%kHSoaPN4hRVe zr7QnZ(IG}Q0AkxfAoX;2uUNE6mtCBjy8)&bFMvZ^U%%7kU`%Ll`!kY*LnJCaHF5I1 z=|yX|h!s2ri9tfr(9VFt1E0YZDRIR0>$!ncEIq+wqYP>E_1o@&2~GDJIiv_&e$M3) z?%3BkS*ND2X?w~vJCQ^gYaWEqg$&OtIr-PR{>82=R6qJkvB&~bYAMuL%0 z=kH9kj;jA_6F^z}0B+<)UcNl69mJl@o6c?=bL{oraRfx@tL-NlPk+#^a}XKhr{Kk{ zfRetF{gjxM$iI9he4XGYM@)}7gW)A&u~T_Of1tkmK$rn-zZZx(d~n>M$);7xxXFuF z_&nU|=SP~-4=x!o z2AJvQM@>>T$10qbEoMWF`H%$9iC|mtEyZgp2IH0#oV?4B3kF>+A1| z{`?4Si_TlCWNnK|1=W*%piKM#?ICU@!8ARtj~qEOcPL&HX#Yjj6|QzWpb`4SE?Pd` zgFw&Bv`|khOO(vf*E8J{)R6E^?6*;F-n%-us2pRIm&KLn0FKi`)8;=B6o0Rw*_E)K zvwn`!3{v|Pc?x@fM~peH5EHAxslLv#R1{s)fRzSE{_q*Vug?>oLG+D_jKy;~Qo>@X z{SitA{qK^e*2{3KEl{Ro*yMFR98(X&%tX7{2*f1oPXMNyF9DNeQ@lH=;cNvLj?X|C z7d7jtFBt=PK+yly(}4#D&A`i6`?RAPW^qQj{oIQ?!0bJAP9PP#kJ$c0TpV>5DB6pr z`XjIP#q+o>Taq@8uzyZEo*>Mx=`^1m<33!!@eW5d0W*}IDxU*@v~#w7culj3TwZ{5 z5tE;bKqi9nl|NA15d_pZI})lzD6dxeho*{u+Z!+-ua$<%0c$yF-m+#=TRk@xr0Nuc zHN@;mNGA%PI%s~*+q^Wj`DX%&J|T}VZU$CUL9gBXnhU7`*U+UPixd{SR}$K{Fn9sXF7@`z~&w+sZ`N05F^ndov&ZCj+Al;!e{C+ zhpM*NunN5+xG$NR<)hpFO_@oUvITR>m??X7_N)nvd?~E*Hy0Ut)1JWYeYjZfO)I@a zLW2}pZ*erLGyQ7u3Is90qk+?Ir4~q#0jU?qwMH5m8X0;_B7U!H$I+u6MP&FA3twV0 zSD+U|ww=kwe<@G=ciy#YB2r3@1Ug31=>c)3rs(jmbw<)*jJgP=#YUq(Q`nHP%G|Ag ztDixt6!DI#YZraxS7-*-Eg;mO7V@;^P?mO(u-B!fCSOSq62e(9kDfel@sk;(MpEsl zmig+g;UXEqKqtCi!_D$ZCsfbsEXNy~n}0OOMOeD)Trn?Dc^(GM zz`iC(EZw}?l=biEj&jC@3}*w2Xtmqyl6C>LEuI52;#^|UYTis5ScyEXaAL@*YKH^~JgU8vbY%k2G0F0FNs*&d>3CcGzI4DZHz0 zb>_q$W;4{ht~a2%i(|#&X@;))r_z98+@p+muZo|<>^c8?VMVo)1Swj^rL5CK<_S;{ z@8M++h=3A>Q}h6J(BKy8@Wy8Jq{U5eyFlJy_@+p(0(C&?AxGaXXs{WM6|aiRQR2#vt%7 zaVHM0qe1rrTG2-gfiy5UkYx=c<3_U0wabf<-29z8&#gg_d|?^vvcD$8*Pe`t=E@hDczEbaoO48_^V-}Kf_d8&4`fkDiCj@?m?{z%mJW9$Y zAQ{JURZeDOcP)L4m|;E7?t*k_*2(FCKM+faE$onhI8o6_vU*`-j+$W^&Knk=kb!JF zl866Yh7^s}rRyiF0Zgzlwcz65q+Y}f|2utAYA$ki)&{k}G8_v9XJ$tJRX=V3M5uIM z*@1UX_AQF8T?||*$EjDBZdJG2$sEAUC4u(&1Q;%WbUL_*5!G+?Uw~e}{YtILesshY z!!AkQMeEb*CBJT1r!!sJ4GU%75;^OGA z#jr}(CtcFD2ccf*jrO(<-GVg6|6u`6h^ma%+*Th#-VR=z-2Sx{MiBlEEn7@5^GRHk z9@uoZi*KunPLQOm4ybZMzT>}PM1h86VyZbmw}Um$%|Zf>GkuS?x&>>PM>wTt@WRL= z`uHFlV^H@jCtS-A={z~BUhhq23N}7L?r6#36q0yTj}BpTg6aOZXs{9FCT1-NeISHo9fg<;_; zy{PAjrd{ch-5vXvyI7f#?>&FQn*5Yljehz@q2vBL*_3G}Y`^)o_hWThT>SfKk7d+^ zOWwUaKVT9^5G4dO=dfb|~dx!!kf=BC?Y+&GhL-RQ_$$+d?| z*&gaH6UJ>7P>Z|}b9xfi%Q;@`J%pN}CMdWfZ#d>VXMcnYi33kPE3xLXpBQqZ+jv}v z#yqm_`P~kP{=M}WXw;SrtNbUhpVIwr6X5$+sFmp(7yub6q=+3SpMXGDdpoW*6D=Lx z?d@%W9ibQh7Lf98ZESR!^nYVwV)_>PMFbhX9}w-Qpf~`eifxxFMGylH(zOUrBIK>v zcY)L3=OzDJ1EffjXY2UPA7ujxwA69vsC&?ddPp+p_4?6?+~Vmcf%B}| z&g`Pz((d!U_T@+xzmD~Yorb$bbf<4qQPhI@ORARPs0{*P{Wo0TV^DFdzq;5;Pu0&ggS-NL zZ0+XTw;aOk{Zv6N-S0McJBk>9MsJjJ;xr6^p{8w9sn-0p32{L-_qOLEO88M-GD1f-u87xq7-UC9*MC>Z+?E&_JBNA`gU3$d0BgNV{L^b?S^a~q8^i?d=Zy{fqu|) z?VLJVUfH7qRqD^zf%f5pFt2dl?T-JhXanM+cn-qMHG~N0?EW{970`7~Vi9VtD=ld% zG@w3^GKc)m5VKs)v50gET$R@^$5UXiwmMG7U}r+0$!S+bt{IyXKe z^%k3lPpuZn^(5YJnbyLZI;E2RYM8zB| z1QF%MP#@e>R2Bwecg>#z`cFF^6mk7u2fYXWyG5SN4Qee~^~>M~79EjU9T8{-2cMC~ zRTYN&i^+TYAyh-)&1&SC<;Je=G?Fq?C7lNcQgHeGzppK{#`uifTWpL}1AG&0cam+Q zg)VTlz;DKk!qPKUTsT}M^MNS$BTA=YY^<#ut8LMwy_|V^=MTkunf2X!62^XrmqJlu zh2`kRj5%lkJT2o+EkDI5Pmt?qd}Itsx^0lZpQ01s$vnu+z#>FnLR{2T(a_esDBTx7 zji8W+5#8UbVeYQ}je?epxs6z#7R$z3r7d~1Jc8Ec zQZ2%$Ch<$7+hCqeXu?sr-52~U6T|7rKs}n54)~~=YXb#K^ zHlpHn%rx9RygO}&4$IHtaH-N~t&Ao2CU?CR8DRR*Zu{5tI76wZ#+t%^jmxp{{YQ*-yykq9lYi7UzF#4OL}zzp`v6Wb!bQlZYhAQD|jtsM%eB zWdi_nN;ORx7^r*ctR-8eqRdvS#tJ`3w1heqR+9@y1v!v#d3D<-?B!W82Zp|Xb#Hp) zROfJxU#(~;M!gZ0`EKehgAgtYoDp(=7HbHDK~i{8PRCtCd(d}iu&fB}|Fz8Fq@v}X z?P#k!T1NFhzXK@u@*K%(FHo=%yC4t<(Es4t_H#WiVMB)<1l+p#`T6ba?1s4QWOZ3| z(n!MVyP6V3NqnBi^EOJzNxLiR;36Xl3`z*QG4UCz>I&tmG{>vLyL&ZBVLFX0cXQEzijW-`B`WOWgMu^FA0w?agFP&gHbpWOF7*3u9H%KM`!lrP8M=- zxcyqRfuj=<1~t`zHn-;3n13*1Hi#A3m#}Uz$K#?~+nQ71;;J^cSXpCE5tfRRcDEJ6 z4fQ8DP;Py=aONy6tW;=LFjPVY?{eBv-ank&jBTG*aEmUmW3jcVoD62q-D+eLYFJg~ zr6$U={Is(@p-_tgzGN)hwipSEpP8NN(R1B%V>T4S7)g3w z8M~!K)JWXC{`%tlEK~CBjb^0I3eMvlyqo*Od{$Z#H6NaDvZ?gq+MF0UO6MB`zaN7W zx4x?xRuHkTrHpYH1NPj;(}&3B1*Kq4e$pOEnoIU6ukYF`g^OW;3aF%^wz#dOsxD`; z%#soD8omMdTx&tASI3O?-2jSeReRGxLD&)_y}?50@AB zSGKq4gBqSIu!p{OK+%rd(6Gxc^|j_wL^C651+>6|QS&ceRZO;drQEc{W}ey-f>vg* z(5a#)A@4ONFDCO?ZAVWt4*}Da7S85nEsoo`RVDkecxj~Lv(uV(BdOBl2F#%&Mg?%> zu$hd`Bqro&C_wM|*9_OhD}WzXg{!MC5CP+d;wr=Fuvqg3_0wkf1eu$dcNwcG8h5G% zP8%DTLq&^5O?kvKU562uKbX*g{h{llwUl5sBE~*0nyU~kP`)zfbN!0yp=NLCsaG%) zr`IajH>a~PJ2$VoJh(qwj|ufOv~qV3zog}nL>*R6pBV@IOYOQ0tW&qe*W2{-wK8Cee2cw|uLHsZqQxtOxrN|HB*xH%UWH)M_Xh?`wgK)Toc zrsoD-=9CuvTtr#gWB(AE;iDV(V6eBoxFm;NoKnOpI3HeH8Tw@Z79Mc9P07-O*-FA$^ZnuSCLRiKjeY}wpJKXd z3bp`VIdVGpbK?%!052GLb;l}4BywCZ#KvNLn{1kRnU~Do&)}lSO*M23j68etat4RE zGGR+3o6_R}p9xdf-8C(&)~{<^nk@?&oORC=&v^A`P?v$P7cGgMD$dT%K)=YE`pTgr zu_xg3e5I)bWj>7h`~k+3`EL{+E#I}c{xN%5?tzFH#8~?cXS(bjE_sd?ekj!r?yt31 z-*4s~LvSqv|0E_3*QOFO2+3e5qKOKD_= zrplP+TiUuWPhJtRr!{6r@#wg|0l%VWJG~P$r#+!K>SpOuo@ej>-`>Gl)p)qhb9>Wb zzwU8z{(gx`2^q8!20`ou$h-jp?IOtJn6cLE*}%yVaPaf=oE{yGj*2=4w2uDMiZI*+ zJkmU`wg`xbgof6BDrq7^vSdvFLJ=f-F`5i|oo)woLUfuJuPilAy?`W0NN8w7LxT)C zYOt^}Z8~69i5qWWWmOI+)5%kcA>RRq#h%-Q58p>Rt?K^{q(kv|#qTtPN;3i6w$>Iz z`i%AsEm52b|NNjgvRVZOBzV(wCE3RLMb ziuo6L?CUKh)oOCLa`yuPuytU>A0xcOiNwnATBLvvkq*@1o+<01DkN={2crpi=$7v;QmFO-8Bv6{N#;sk&ob8WhOFR4gx{nc3A*1f6S zr`KR1ux3iJ;SjgomR0FGp_Jpx;{d)9L?5DSNz$eG06-jX|vu0lEa7 zthh&HA3cVEER5&nac<4V#zv;0kM+K1zc?uiAD{2lR@a(#?c?R9oU}B^Z!!@0KT+`I z7_bTz2zYA^4ehtuuIXpS$H36g)bu!8Vz|fvmSL4)mrvZ)X4&`h=)unSPw^Uiug96@ z#N_Y7xx;NWcTAM)t=j5oOYje8n3G4ibdKQ=l zh>*{mFKq=T*H%00D=`b5pX5oif{MI#Ho0rc!pVI;*?A|&bTs{Y0)99;frdy`pb-|^ zmz$ita#LIG@9V5CkGek;3b?2menBBX$4{E2SpSUpWf69GZsvNC+YN`Evj0901ECu? z+~x>>b7-acuB>GC4;!7ftx#8Len$h9Pw}J*%I(K*D6v$(soYj}UIk6Ht(k4UpqX-Z zmoAenKl|!;R-3IivyG`hR|FYd-t5H;u2XA$-gHHlpKVX8A07`=R_r}iEpXeX)-F)< z?J<-PxS>NofWTv&%8cl7-y$~e7r@%8`f1g2`;8sWcRu1*X*VH3{HQrIXkjfzGVJis z(Q`2fGkf3PBCc~)?(BCqg0&lE(^L|sap3*YdhuM5K2ty-LvJAKcjS9}VSA z2R_-pLGS5xRt{J_Jr2^gmDVR0OW_@W8V5XL*MmuDKIXC0L786hCYRlo9bi3{;_7iOo{zC^((WTedPnjY;pQD;T>32rQ8uABae1Ct z%hOJS)O0lUV5i_i4EHP9ET_W4_%CVMfmX3mC7}1mq}zB5Fy_pN4)^!n_J-n<1)gY3 z+-`c7tM$F2$g3{GOM1>A;AG4<)_!^XL^P?Vku7Pjky`#ug6yO(*i~ovX&+Wn_3z#H zHEzt135p&G^h|;)xGKL)DRViDCufrVa8k-ZL6njIO@#{kXZ*kU3QZ%my7?)Fjo=Rg1aE)i592FUt(Cpem~n0RlJ=}+H%e;m$N7B2#%l7tgUItj zCrJ=RN>qQVk3n2va5QP!wxo{kXJlaFA~dBf0o(;3s&_s8jZNH0CpJ>*Z2$vvkuuS+ zZZMVRs`+y`4+hDb?T)|_90fsP{sly(at`GPf=7hn-utUew!~5)!-c zeA)32RBcQ|Qg{IByN-)s^)O`4b(-`aM3rIS@0!vJ?AXRu>tXPhc)9-FLe9`m6wu`I z^cg|e4rEP%(rGC1w?W@LffA*)cHOk?-#GZ#9*$q>!M|*4|Mrx=5ZLEpIz?b3pFJyM zLa=hqx9n*TA$=_5ltr){q${E8n&gCzYKbv8=%)=*zR^R5REp%Xl6_XmSOz2nrkSzpz@4h zFW>|39V{xm%i6yrpR@W5VRdo4^S98ZGEn}#BKqiAq;W*LLkLiW1UG;~y$ z`gew7lP)cenG{e#as;+ob&E0Lloy@5t-8%IQ`Vry8!KOunr*`udHZd(J?kx?1OTa% zZQT3{&N)11>TnlPYH&iWuUZxBcZbdrC0Bzcu9tVK2Er2U%e?kJ{1S4$t4UmkyzP<|GAo4o{)-#TyDHPIk ztEhU=eW%WB~mL{{0;1yx-^)w0h;+M7%}HwW6Q%ml4ndg zJZh?#efeC~GkkASXv^J$g#Qq8bxU#0YMxyB2pdM0GcPkcV^g83lItC7mwSZ^{n`O7 zx%#h}xcSAUE+QR-#XC5}ue`%FMSw6i~t>HSBI z0J9h-w$#>w>Ow>z%xZdxd!kJ2B;wlrt}b&)V8a_f!J_QJ;2zWGCXRPXh31mmODTd-x(3G zjAflzM-qBNCL|Ob`llw!{vR?xwgUF=0rB1*7#MT}Gs++pIX)t1oCl&vYWop0@D~Pr zf07TX_p6$9VqgjEj1kl&_7^$qKkq+cA%NV@x8C~|&WcQSButDwF}X$NZ$3Lh8K+mB zTS_C9?>6v{N&x)T#f1fAXvlO~iL!Z?GfID8tpHZp z#VDnaVA%M|=UaCNXy>&iios5zK)7%f+7zcCmDe!~}hm$HeEhRr!$xoZl|D<2}`H7*k zv*A7?rK>dgxVbkvJRSELvHO%70>0ql1UQ9_$QPN{R_tO{niulf-M8fE(NQA%VyHb) zo!s>@+hKd!&#|W&aguP^JC)ZI;Wu4grcSMEvj_hP>CgJJ{udeEc0p-^WN?OZz9f>^ zn23rC{vXHe%jDoZy?gr+(c5d_FF@I`4N!b`?0z0vShxdpZ~%_x2cXPXUtbRfCMG8K z@$r$^cGy7UWcg+GY52Wx7ad`yG2}*YM&zpXw6p=zTSLPZ7Y=fb{g!Sz9HzsGSttUx|%FY-t`REu`#h#?qM z7)kD0kR|V|NiYig#E+!`yDwtD%UfBwS3ad0BHkZ`4o4Ct`{BhzknarcQOKFc(mvv| zvx(ngn*aotWr4rutM5{!j+s`DzrTNkqy5t2VzhYT;)W1SNlA(S!>Z-lHqduj1<9Qr9xc~}Je#n0gT%~bza^%-+<7lf=Am;_(6O6|$7lZ~gGZGXH5k@k@ zg|n7Axo#wkry@!T(SK;4(i+Hmq15H5l+CGvfBJ;-XkWA{GQSX*`>kJ_>)SyQ*bh}2 zs%{JFGWXwYTe5s3RgE(4>z|O-&gE zzAs*blmwsmug11|BxJ*1Mm<)T%glIFZAxI{81bFOKk@T2N4vKo3*%Sc)o6x(Wtrf| zWhLhP2fL2nJtxMV9sBdmGeXt`_wwf9VQANhpU`nCmj~$k8OsK?bOR#&$qk`}rLo%N zg&0&j&K7`cv$P+*xc0ax7S{o2(ETTKcwmYmQS%;)PPRqdKKD_=aiYLUXS_sz?-R@{ z`zh5)lBrc{B|U;ARPVr9OYp8n$VX;cdOGleaye{x0WOyS1Q{I6*s?74Mw%QIknD~c z7SjBp94vyM{5!ZFhrbfavqLx(m%rWo4I)7U&T9pU_vBAG4u3h6CxWMd4ps`{KdE&N zZtj(}%2%)P6gJI2Y}kD?3lLO9cD9$kD{D2M`gU_-m}ZL^%)2NJYFO2|*ln{bBX^nO z1tu0yyyU$r9?GP(BH?{cn4ssz=nrRAE8AL zP~CX4RzO5ctI#a2yuypQWYHb&JOpRoOpWibgwcHY|JGxjH5!8hs6RcXkmVskNvt5q z8c+f0Un1Ge>oS%FQbx10gUox^IyQ?5>{nyjbX+vFQ1T{&@E%n_Ie6p>NG{(7KRe&j{ zy0eoc*pDa@KpXnXF|SD#nOT)$<3go#-ITLq@2CsQSfHjE*M8Xu|AGic+&2@JC^ruq zO;Mdbf{r2eMT{(^PA(}?pG$)70AyK0drl6&}IA zWN)rDj>WpXW&}pO@)c@tsI<`Ti!bo0m)W60P!UQLS^f!#ouoa?sjkuaW@uBOwZ^lP@R&_ijL+W*Pb&eW=*^$toM&y#${g;fxM<4qfb>o$_?(X0UvIP;~)r z50ncAb`7GFIGV&ZATxPLkn7ivb&|&o7)ZCd`p#EAXy<5S0}f1Tj|k9ahHrTVI2#ea z_Z08rh5>~(R5=v}%GA))sbrdC3-f{VZ>5@rY$`R24J*{R+vplbCdOS=5TF-;wDjX< zNRnc7-}xrOdJtQF;e_68I9*(lK%PtT;wxAZyhFH)w1i|oi+BGFVLI1)`d?_kWbKsZ zI;{LqW3jm4fjG4m2Li0IrG-e)^7tX_|F8glUVz^?nWw@D)6##U&n{*?MP}Jr$pTEM ztD>a|7*ORkuE_J#CPnsN%y9W>epM0Cup%tV4Wlzxv(U;E#i12Pv7+E+u})ROgbQ*a zEbbEVIeur&n-b+?vWi5%Js4<3q{)kB<&wveBbJ;^!#zJ1I^+PSCAjzWBRQ>bhAhuT z8(n$jL{wm>v>)*ApTqXamV}Ugs-t~K&XbYHu(bco>}LI39@*G<15(3GMgt$9%M82* z0N{Rie?RQp-PM)P>w0I;$)-1N9WYhj$@%8g@|C|5QtK+1s6&_xd)Egqk%yjnE;-T| z1g?$#rxctME{eC1x4%mp3sr$ke&&8kK3`DxCpBz1xU2iPovt&4eJjZfb*Llf#!N)M zFT~g-p#&X@)P>e5CbsddO6WH)(&kQ+zqGTn_asJf^%}VH+4DeYdwhu zKcBb~B}{ne>8+2%M}!bt0q(nGSJMEKi_rTmRYOs6s>VvVoj{@jKA`U zPJGO);N65)C&o6Id8)}0tv9IlM}$nZ!4&%8K~XadKhzmnThc@RLvJUR0g}>7n(w?O zhK7cF`KH{_R;}$%Mr4Rm+x1%N>i_pT?~*nCn=ApqYHQm7w$Pu7>nqhUd=LOed%k+f zqEl-^lNLuUw3^;ffXcMlq=gQdI~?l#7?k{e*iW}`60eq{(x{drirRJGsI-JtnH@2s z*~8xQG&3L3xZLf9_&?|vU)$)IOsRtGLD73z%xt6k*WabqWsFheeZR1d(20DqMaj;r zT#JnOs>{3~`7VVt;z}q^teHNxU-}lUt=3q>IPER{n$`yzA}{!8pQ;Z@P0(RtQghx~BpRS^?! z&hX7^^SlWM+J10KhpDp*ys!ja@=~A=y^h5Gb98dIf)_Vb!S`Qrlk1W> zY2yJOY)fZXuI%zG0O@$hU-?<~b>)gr$L`Fguqq+ZK2^M<2Y*tb^teTzq$XdaWdKZBf>l9RX(FR zP?Gp>!Ioz2eO|iH8a(>s;Izl*s43s0Np_a;Rb~$9JVc`mZ*22zf731J_cLofOWZls z+kW7B!iw@lXAM7H)YK!sTxid}S(e#adw~a>WZ7;IbLTAnv8gSryZiHpu(gDVg-v=Jk-<6Zzh{iI`BWvGJ zZhnW^(v1tE%BA`GP+&@;it^^>;}o7=yTxalyIO4i-9AIx?+)QJRN)!-U;+C2kpG2r zWfT;Yk*m2m)qaQfG{OpN9>d(-UAEw;bgtoT`D(oUA1u=ImaiS& z&>_NZ&9+l^LbM88mS!dlBY9|lu#R6y_{k)3f->o{dfk})e2`{rU0tau!3AIn%G zhlTUr&Cig&OYgT6W=ankd|E`;I`*y6E$ndL@?jz;i!!6#Fn%Pi;X}AoulCDD)523$KD7PP zH~7i-#c3|$nhx*Cj&q?lnadw~WW5WrosZ)R!Ora^OaO>CUx^EFx?AG?NzUqgL3hhV zs2#%n6X({+y(r2V>@4(tfRvXp{tAyp8Bxmjp>{?RQ0V1H6@OKbC{Y{6n$TS2@wIq?^KQky7J1cu^D2D&+&`S=|97 zn!31%NK#ZhRF*!+h9f~iIV}^5a^F6%FaXvTaIT)@+D=PL`;Qyh&{A9L1n>$1!G42_ zrSHflwoV9!&x_Suew*A;seS~atkp8!!3fi~ingEAC~;jV0{Q!o1_&)W78E?*n^&bm zgR9iRh^d=cG`B9U3%%z>Eh8E7L~XT}o}SOC{_%=ie-nJjFCz-MUi*Wo0s?@ae2Jvr z-icw(#WMpd{9iIV zSig@>LEbn);O73V{SZ1CiEE9|+0TN=!hC2yot2)@4v*;D(~#Y?Q6X=-;qMy&m;gzzEZ`P#1nDW^$;)r>9zUTfzEpZKnb(t z?iwp8g5_o#@1a<|`)ic7d1Ldv+2-eTl=MC&C51ys7+7p&el)WIc%Cdd@cgZ+vghIT zs!yee{6lh|gQsj3{VM=S$m+I_vaIJTEU!7U#l%%e@T>sD;)ur9T;#9_=Y1@GF8^Vu z-zWV>ngidzUI^&Kb;9oKST}vDvxow)qYfe6*k{83rT^IN-nW!DIm3IiCwDA}OJjqB zU!VW;W>WO2sEw{@*Ck5uj4P=v3!4RqkYwbXX#5SHg&T&jd&aQw8%rx~4~x$LB8Hnk zL6mG!gOh0^4KE!dOAF_9DVor}BPD3Ni)Ocx#is&+sVL7>aMG#Lc9XN*q>)jRXD zjHSCGW3usScGa=>yL|3(`p)<0!O+Fm!N>9EV^Y|R7+e?G4{8PRl2+NetJ9+D5b75V z&v%_A0|N|sbU2AL#4jmHU?gF8`5PM#uV#Pq_)?LDO?9}YsRB3Hcy1@Mve>S?r(g4L zyO~G#I2W5XKaU1yD+-}wlKd1e(jz)JF%RTrhhXBwP!-%6%q%R>Hw6HhZ5Hs0i<5ge zw$0lW{BTKFGUf;~=$OjaaZ}eMLP_KNAUkWTj?Yzz*$NVLz0Ji^U=(vKN)@}Rcza+7 zc>_)1x>a9-kKMzAz-$UFITJ|AR_+**N1=`p{PIu~5EHo`-ukj&7c(sdwxqG@ANz89 z!?)|kbC_uCU>9$3TeVkE7LMBG*b$6$ZYU4FVh{6t{UqDI4NV9se#(#Bs8TS3xIdyS zJzXWPi)gpSDWS%Yhp{7vFU=B2ilev%!gcPA9vJdU1)bytRKz^`q+>!PrsCIXdiikb z!^G60H*MUJ+V}h5sXa(>e@LT$G*rEIU$~N`h8RO)MtN7oU%(N9a(NgD$&^#3FYK-e zIRv_#oEd3$Q1$V_cCZ|D-<*==DI}G{n8;xm>u&yeOA0Z>{XxyD{ayUJRpm;W^4~bJ zPXK7*_Oc+2g_E$K1sLa~{y;%4ua!Cz-HC_%OMjA4tM_cE+D}=O5K?fI#2wT}ha9sX zEBi&4Q~ADxIRwer&}6mJw8vIw*&P<9FCY}`gny9VYbNu#7~K2b@KdIDlOSUNoAZqD zGb%MZQJ8{#*UMGbb>qc8XnKt(-*&t4Pj)tb5@bo^I{BH+RW{4}u)A4jV32VB$jvN1 z3ir3p{{~5cR5boTIeb2&l))f{ln7H596h2BbSvG`f*`Bar#NX^&2-2|;p`&<#?iMr zyUc5H@zWK-k0|6PnLcnkP?W*pqskfIbCLOmiPZ=l5Dr_h> zfz&LgcrYAJiI+gn5hpoq;<4D`W26xJ)~_r}GM<&jZsCDBI79;T34NQZfkw?)p*n%~ z?{ZCBypE=cHFLgcf473fIe-~_Jk2z6ljS|1W%PL#I|6oqA3L}K4ozx$Vm}2xWtima zMiBJvc{TV*eCsCMvJy=6g_&!|#(V}A`GKSfHf`FqGW=vV zh}*`8cW?;n-&_AAn`Ruwco=mAH9Kmudh2yBji3ca+#lL5{E$B(P?S)^+9r@0zXy=P z)G`xf@o}PyqNK-$dAtsv!a9rC5oMD6s+IeYqS%#seB-2P|2U~1kfF(b1=i8InQAX| zB`38pc6LiMGxwUTfFyPV71OBFNVKquIQgEdG^wkf=w+jNi~>Cxqe(W@^JmIH03JG?dFcB9KDh2n^_5dHw0Au7_M9$cK=ON?t7FCOQpDBuSP`)mmIKR=*fS44FLn z-yLO^EFCN8J2QN$U!PU79ED#!79&%)x}gis)i+ZXn%<~!D4Qw&02KBW2~vmeF*+4! z{mgc-s-Tdx;8|X^AFvT7O(Ll1#ahdWu-Xb`Tj-=72x7M!y2(G@cbZ!W%qc(1;=(ZX!Sy zUWysN>50bNrF&3m^kA169EaYeP1Wi_P1z1NZ$OIaK6VECEu9(O7CvPLvY0|%z(vOH ziMt17UbNmq0-$C#Xo%E3zx@6Qn?Lw#KZQF^7`W*|%xpglQx>EU;&{WqW=S^ps3nrn zB1!U74No)&u!U39;l`k8s>)!S@I>nGVPD9U8IfY;S#0A{l2E>NgF;QEm2*WL)A0Z* zUl=fzt3LhYmh+_wuN;7+!#8m$DXGs;DyG2E%)&!tj8Q6P{CL?q?S76SuoCs&P!wur zU94o&=Aoyb6R=2lXPI@xyq1z_!Xp~i;mnXQgB!Kf5Q$RUXZA;r8kzxWRXZ*vE`ke( zollGDaIe3(1(JrO?5?$x?L=7G%hh9LnKbbRnBnmt(ni0EnBq(y*94hpmty`*fJ?3j zKNQA@A^RC5jYII0Z5;jsma*WE6FcwbU!sHJ+jN*^KCeD+vxK4F_=9c`ylGXiXRuDH;o&Km78XdhX zakO@9L9|3sysjhxfl?ZaxH>(Z$m)uRD76?<+9_^ZTgSb;`9s{P9&irW30XR|71A{L zFvL24NSt#C+l*%@8>d5zVz*DO;LWwXs?E$yCj#5BCA)zqtq95vu!$S%3nwd~jdrX> z8D=RIXZG+YhgrFlic2?!?Bf)gn7yZ1L?{{LP-^_!D}#(o ze2mRQ<-Z7K&(pw6wv1##Ny)M_RHNq#(+5qFI)rje!EMmtqb6h zGaY7#MoO6fy!dUN*u`<170BSVAAf?I=e2s8JNRhMpr73KH<-UkligorZu9YIN-w|L z$1IpbI**Uj@1VcWf6!?53`nWj^E)$|z z$3ee%%|zmQJKNa4^mcF=Grh&y4%FZFP@vv5^ixO+TE1=M?!RH@hQbW^!4J<3#eo{R ziNJ_eqD&wYxoMqyX(8h0ly-iElD!l!^J?+x~Q2SA!QG zEzO$C3xvNb`F|of#T69jziky_UAgm{S#kk{Qfp-Y*v`MbuF<{_3TkA<6XGwW)#lGn8? z(`4M5U_aE2ly0Pk{Ebo`3PsVTKT^<7Dd&{sCYP)`kdKZUy_v+tsJ9X8-7vTQ&58Nb z0*V*EdL_zj>CEfy-+>9tIl&M*A^~^zeQ%&(+sQUXK|T(-jkB&U?%7Bcc4j23PgelY z#3KrL+D#PtI3{pQ2p93o0L+{ekHC5zRnXs$gg$k2b=!?EVe7QPduvCv^3#dHm8nhR z0#~$q;+|DJ?TJcQqON?6^{tM<}@%jtZeK^rP0Y|22_I04u_js+<=!oPPp)2 zMAq;5^_&jrFHjLCT?Kwq?es03CRmI5I9pi-{ZZr36RVtT`4eE&N zumMn8o%3oy-h}`+)F2GKx7&5=*MAK61o)_8%G~U;+^-*TOQnj8(Q0BVosspyaQ8@2 zaIms+@_0=r;jc}UCF3W3PU_UV(}n^pK<;9z#@9Q@qu*)l^YZ4NTCK(9^o)-#hU!AP z%->bJtBXdn1H=eq6T{Cpg9k$>MPp|0-}f<#N>j_&7>FGZ{VK`o%$Ab_l`t?22=P`#i3I&B*ufm%4%RF&eKcK= z%z*tI1E1e(=9Z7byf$i;@c90Y(x7A0P*0EVZnB+)9|rmhSY2IUqxwt_{w4L*KOzi{ z%+nz#hNky4wxApP1%r~zt;m6wyywCRwK!QAo(G05^;Mxhzg_W?GHQ(|-t`W90YXmo zU&u>~Ghc8*%qlGd>C0AALKFQxm(<|n?gTtLLoC!{0DPd2y~i)<_+*5p$$VIm+3pf4 zI)@R=1K&&RccU!Xjjg#8lYSU^>RsQ4uj0B>L_Nnel9W(HkEUh@a@8mRn`y=OwMfVW zk{0=2_UWcbh-^sy>qqb`ntrY`ZAJz zs!Q-tu+qvsy2sAd=v|k^m|J;cqc>A`b?o+)q;82#XvSXcWFNS$sRC4J6#ZN|7hPOy zPTTUjx4RO&O>61g?JP34^#vb^_a;gv&JeM`Rfb#8+s0yptK(dzaIudpqOi&W+9yE>acYm!fp<0oDa-YMNHzmM z$<9x#oGmTaruwCR$(uH0c=!KD(=|rd@qO)^u;~5-%O~E@Q}mqx%`rRe}C80bos=9_aqe4v1oBx^U)72soEQg`&`!$YBef9 zV;%69@34L8);EIAK`H~;8iFSFK~h3t$~ zYC6w%&Jik|uWs_{IsSnt)E=H1(w_;6r-rCIJj2xp?kJa&X|?W0Fpo7@z?fU z?^f`$8^bA#ozSvuM9t#V^g5X{l$I34%fC@0q+XQQyF9GZ1PZ~;3TbN}ll$>OAJ5~} z(Wvx3pMJwj?I%D=6>kgDm!RHj^jt5i>ukDZsx0~gos~-tMOswpo|Dw>y|=`-^$CAS z&-ZEHR{etmi0 zLD{rVOTiAgET*fI{F2EA~r>LsWsRSEI zuZ(Nqgf|10IVGoM+nUr`q`U0W!bILkL8t5culGy5ifT^j>XH~4r0*AOvvASKoadDv zc&ZKacZBR;CG}<4Q{IW<(Vcsx=Vd0OtIP9KBj}v-L(|z~Km50LVBrC#REIJwq*mS8 ziKv$OqxiE9r|*1uX^VZPudQXr-t#;rGM;=t9KJ>E-7C5`HY5vIS53Aptu*Oz^bFmP zS{2$uHV#)0WVDB>DWd^;g25?a!1=czmaof-@j zQw-F_WVB54%!)o1vYy4eVM>}7!JJ`lc{2Hi_oz*7U8C&cFb}R&~o>`!_FwaPO zk+5R( z>;xFO67u`Lij{cvS+jTDuUG*N#3eDhPg@M%GjbLB&&@Bdu&EUgS`Gtr;(yV9{W>`^ zay*4*7~Qktt$+;!n)wG6L{=GPAjDu@R`L@rGiV#Xz959qS;OhjpE~E}$8Soj4TeS7 zjFS~!4;VP4h;4ImJOT?fvv^gnaKi1lCeoM;I^m_?%vi8Xn<;6EPeD$agiphDYie2;6q&s^oz0TR+bLDPQeY3$dqzAq z-iae8lF#j7hWgtjgf(rhZzh)$CFi5toG2E(#y&eso#e0LX4g_)dxrfv9fv15l` zFwJr&A`fN>oHsxS1<8_%M2Y~iEgBAo)gkc4y35qPuYSu|~yBgQy+n;%x zqUV2cn;P9Nt{Uz-ib6v# z$}OAD2eCrS3e`;Sf;yD|mJn6Pf{%MwuCGZd9z-q5$>HH73rlt-Ha0dci&a@fg}sa` zjoiu9GVBF35yG#p1VZ#UERRM>xFIV{`_b>8Z9f*^;mLLryzPG2VK+qq*{eHXtNowT z`GX*K=%)K_G+<%qdo_T?z`&qXb_)ob^75WlxTANz-D{W61I>EC5mnkoiqq{v$KKxl zBPIY+2x;6fcc9w_0jLcvG+{lx9LdKVqtxf4;N8+(IWeT4=q!?zg_2%wk^kBA41a}{9f1ddtO09j zfcO+N*RM}1$ErHkm6vl@d}MafOg4hl(>?KsZW}addRp=O`}60<^GO+Iw1Y#QRaO?n=eOR^jP!scvD##URMEtQPg^XYUd!#cH>~&DN2Wrr>ph$* z`yV=^PV?5`;lruUa~DA$i5QH(S<@ziVVF;au+$+y+01jHLcVjtQ(`gQy@>OIRegH5 zcH1EUzg^zS+0FB6Ts4lY1)*QY*_5ujQW*=su7NVn*q5MTL%tQto-S&`6gain+4=IR zKuW}DvA&3lpssD!f;8qI#(AI6oZs)izbBMFE+&?|({L31p zxgeRkVi4gSo8*Xc0pY=>F@y~TVRzEu@t;A88wyCEl4}D%1_Sd{Ls8KIkir0jGpVxO z4F{uev>3Pzw56mXv??dZ$G>4C0Ps=3oRc;LV&*UW|c3>OC}gMSSy3%|*OWOUu+#Ps21O5 z`derBccGW=-9(Ye_^SC}W{6ESV>S`tl{Zv)G1o3dMeXP4@NuJIpGwmDXjn(JfKLhH zz3*v-GWCPuRV-nwGLRFasr3H{qVyXkek8TF$1?bjn3~qYNnQe48$KiFet|L*8j=&9 zpT9@0v<+j`EGtCCt7;dcvaSpo-pspWeKH(;*24}(N$R0gWs%{Brp(A5p-j3pGg>QC z=`p@BYFF+^?x9S8Z;wQQth@dhxgVAFLyTW+Rb$T(CkRoDn3kK@hs*R+P_jd7{J>!Q zw?JZRcGF$Wra{XL;CNxhl=EMA`kJv>cM+P^2%=x?8ZWBYmAX+OqmT;Nn4cRZ28|jK zO>N|N;IRz_%Zzk%Cydd?aI6i>64;y$Sotv*O8Q%sTSBk4x4?sjMn1zEIb1NXbx_66 z{`Tlh*@Hke=XFM!F~9&}w+md+@N;AP@dFD5e=-gZ1)(OGN|J@|U!25XaYr1iSo|I{ ztuRXewXuB%Z8xN>HR3uSR54OP?D79 zU3(mB)Z(KQ8f;K=t zYSO0wYgs1ksBtX-9sZ9oK0iPI@i@e9+wc1Ncm-%}ZQkZ1>080L5aiat)ZYcl!5p~+ z{-FBP=3j?b{{#H9%HPO!+6OW76m$myA;MZfrj~bq>EJiQEt+HLG+am`y3LS%OovSB zhKGQKz=rEDOxdP1NMrOoKl@dVUp%bz$kb0JEg-2H)fw%e0P4P*tbMM62l=m?7^N9% z^s-y10Ft4RjGe!LAPg*4Z;&`ajB>fY0X~L3+-i8AU;|OWcdjV4D#h>mqV85!Rxdk| zjL`fh!!@3FCl?nG-gYS9kl^W;`$zB2W$TSDKR*C24wRjM-+-;@x-Gx+k%F!5SLrVJ zaD52`SL6V5UG%`*WIDS}tIF25z3uca<*pW)bEH5}1amNz)kTE?(sx<{VTHuEC5=#m z_)Ln3G;0~fHTgfn8-ZDU+hcQ4voIWJ;kL6f{VZo|RcX|AmbBP|Ouj?rc6N3x1PH(G zy(NJFNPLc;KyNVkwna3B4!|fRD}Oe0^J{Sdl#is;{~>c+(r$eBTPK&|QaIk5 z@~gj+uig-kR^lPK+{Q}jcpNbut%}}0it-w|pxwa4T|AtXBSLE`H};YNxy-Kx;m7??Al+IaK4O& zM$?#UzL_f; z*Si(j{-1tW=Z&{SR}8z)QS}PeT!{&;ek}|(&iDhE-+TSkuNH9V2J^88iaoFRV|nV0 zXa<0wNVwi{{S^DW1PiJ6uX`_RKpT>D99{b&X-{3cu>|vWp9L`%c}cal^5}vY9Vo!u z?UeX=ZnaP(RSS`0@Z7JA9=^8-7M&Vt-)<%84rssi$)am-%q6W;tSX7!)rgXV&uBN; zT{IyEit9@Co^R!mU-zll)9lBxRsEjqq1gP0IUf@cMY+3{cCbt#LETJAdP%LPV>Xf= zf6=v7l>U`dtQN1aMJQd~cAj+k+#dn8J4Gjq8lC3z2{u6T${<8ds%E{R#{3XVyE0EK zqEcV%xm?dydNlgPNE*qv!T5BK;>pKaZDK5kzxBE76Jg`|N7Mb(CBI0GL-Qj55ODRa zndj&Sf&BH&Z^xs6Tc+H*UG~XW5_V0t270FAH8`){KQ>;Lep4MNU$~YD-9E0KX8YK6 z2+a;PzRI)eZ8QyVG{@SUomBwO2{VU4ux6m}=LPLDyF-t}=&b4OVn_Q!%}e9dxsh^2 zwx`*;@+F@Djxr~?!<13okL9KT)Iu0gH!P2>?R`}O0~yOppxK~F@Hue2?+>H_Q}}-# z9+yTBwpqe0tNXMgvmY8CbDKoD<3#ugPL~T@)n`8A_@xC)gHvP6cl(XaQA`mwBBqa% z2@FPu#){Sl0_$`yjcYec^vJ8g_x{`CKBZ>=8tb%q-{SZ3s;DeLwA%lP%q`hEQWm*r zX{V0N)u#ox6Z+AOZM;H1kIjWPqAbz0BA}AQ`eFCBYge5}`?93Q%lxt55v$nA3>JmQ z+6OKbH*1AsL~=OX8yIb%4(nsx^PHt;t=s4U{d12Pws>wd+vg(>7bUa5%u|`%Go|J-~2y&g2siT|~*Dm8@wB4Bb+#$8u7n z!nwQbXRCH>A_+5v?CnARGve=S{2cCJZao3Me`~17c!7DMZn4X%wG2FYu?!8wu5Kgu z`82aox%4=>K_4IxAf)ec-A}_5W$?;D%)&CW8h5qkH1!r5{dBiYR5Tlx(llTRQx5itz&o@ejA_~bP$jFIuI@paSb<2__ z2txCIfp6A|EIgHS?xq*@*xW3%%#*SWm4Amgr4$x>EQzd@-Jnup4k%)JXA0a5hD>Q? z?ifVM*7Mw6C;3wofrGxF$H+8T`xa1_5r>@&K>H1hRvIZeK`Np{fM7$`ES%7=7_#{t zjjIkT**G{ps`po3dC7Qr-vBY_d%l^!tAE_Rq^#98_j+-QJ&dPr|2i3!5$4Z@tMT!< zIvb$N<;MJ=`q@7u8=cn4q)AOq&>@E%kjVPVah7h0qy_;ZhV75N^#gi*%s4&}B$eCg z;y)N^e-Q|$DI|aYE6gab+3Y}Wg0UaTIo25Cxiuik(trZ;|8f*O00+!^j!!f+jlu2y z6JEvQAN>bddF!vwx36h`Vd0@bDxOz;+*FK9al$ol{cCMRL~q@nLzEhFV{IgR4|r!~ z1K>+$FQBUm6$3IhsUxK7IJ1ya$M%Vi>z?lN+i?_8&RkpYX@efOb(IhKGy6!GOJ={u z*ve5b-3u3KmWkXW;=0%Mr}sh(^I^WSnJ>xKdFuc1Z!#=?_n~p z;-3`vWj}fxo+rE_YAJsj;e*8tq9t1$9_rJqW+Wj3^#4eRZFDr~k7k1Ta-e|4g`Abq zeG)ZPKd0^6g!Q@hjODHBxNbTjj#)mqO@`!G2RU0CaT4m;fA6PS`>*3l{J|`vxIa@s zq6lbW*qEFDwgFMTZp=$j!LBnpJWZD5rPVL)5ZrJDXWQ z=Vu92NL9I=Ux|o%1AEVk)<81{h^ARxwy3Gny-fKFV>#Y#^R<-))Z(9Mh%s&PpSH%7 zOI_foL(#`$mS0z#tu%5D$=GLGJ*Mg(e0`pqL$1K#B-Heau!~)sG~W1! zD!Wulo$}nxj(S}Hz7aRoPPn2fvf>wQ`n84xmo@Mu?D^>}xDQA`$m{WnQ-Lo`~v77PjZ zkUccC)>WYJ8yy6)N78Ek<}hm|>d6lT)xf;Hzkrl_JXcZ1;d zzjEb6zPJGr2avylRF%8q*&8=y1O`up&GmJmY_;s7_KS$a=&vpD4QhCK7T{qpw*qhY zXg027jYU)fVq5Wq2k~s5>!q^M!h1t(^p?Kzg`|hcrBNq|7`R6tyLeoLuusl8CyhE4 zw>RpY&u{gAiG-5}7$oo;UD=d0*5D@#+8vIozB!OU=<3-L#LqA88@~K^Sj+{m%2s-N z6An-+htsge51~5&DFe&U(B>@zf)REX2`VZoc@tEC0F%%2Er|>aJ1kRFhr)pvF{~$! zpxxzph{daiMuVlQheu0Ev*`q`pWlbz335;fP>Sjv&Php0A_^jwFw;IvB_gobC%htuZiC{BY8lzZhlw(;>` zvk)BIAFs#+>DK7tdv|$>=*#ycdW`?o;L-*E?Z8^x>!E(XpiGq6q~vSX^LsClk01NY zgZ!;hPdb58dD$2|WC1AlQvL42>E`I@ECmY|%(Btl^tm_EFXZw$gU#$dV;`!yoa{xx=BAP+K4@9LsGU{C zn);CjTtI^$1gP1yWn1AYTr%?7TR2K(wex*%czA>+K0E*g>{9PSu;xY2Ihd}661iQv ze!%JQ2Ynz;k#**YbmrVuJ+no}Wm{`IpJ!BB-K*t&s9IiLgJ}jI$Pd3QHu=6R#{$`W zpV%W{AEV8Ue8G*0dYH<|f-CqXqw--d&xsReDkDV-p1P54KDhzyAhz&ee(~!f(aXiz zqsQ_bbkV~|&DbY`YZiyZe#D-u=?Y$S5nRK$@Hw|4;5)`5)F!BvZGQ`^p2@(LZI zk(rqi?PLQTVo7HgldT+P!*p3u-uX)c+Hy#E5+DIoc{-d*)rSVT!_tcauDQF-{_g#Q zdfQA^Vk;qdY`==W(zbbl$5Sj+h6Wm>)28Hh@Uxb=j)exsRodtU`9ZO z@nfW+<7c4)2*b*fhjBp2qJ_z492RN7wW_tHlfh0aU4#S-(y6xPbUWKAJwBdO`@JxD zU$B`yk^RdYkr@)yy3!Ww>&4E(Ma{wt8%m-b`*s$)&yq||!5_M{W1HG`@;ZN?QWc+= zST^B$r;ax!uQ!>Ip8t0Y0%Rj=Lxq$*mL8`M#{vQYy?S|k>S!q>B)o0;nk;U$yz6+1 zsHlFp@pDIY-R70`zlm%l@h85(Iq0Ozok|KzT^vCI+DXme&29mZm&tGJ~g{r&;~ey%F3 z04~0CS^@+*XUM{mQz^#mSJZP*H*-7w8&R61|G|U?%3U;NlAkcUIM_ z_+%TGgg1e9TQmQ|Rss)A{2brL>b!!}iH3_m^f{u9+iNnX89NKr8j)GS8pDk7lp#H= zUjQtaiDV`_?*bMCb_vvr7Q1&Tt?36ziZ!T3faLYx1)rK*sfEYe!dsqlwjOc3dFKg? z48r7W?iEYfZ%0OL+Rc^){kX*eUxtqz+2-o=I8pISsG6}sxs_#g4S95=1N7)lKn*mj zapiaM9}zSYtGd-Qbvj(geD6|3BBZvu;@^^12^vCkOpshzRf8+8fdWuQ&Pg4el`U-r zMcni~)F=)h(7JBNV!5`^F5+DMkZqk_xn+!WtkejuNdqM|LQSLV41VcN?4NF?J?G|= zD)t0#IT1tRNq{K95N%__kOhpf%FpBDdfhe^tc)*J(^93W?nOIV?n3^tqEMhe-1zEr z)frIEKwO6nT$3~NktLJwMvT5GSdg!0cX4*P6)6Hs_meWf-hI*FEeKk-ox+ZP*`VuF zJPWOHEXzNOXzbM^yIdgQ@#-X1c|gCEbM?SXpqof*8G_ozJMB`Wo=P@ zF4fofs<(6W`6ik(2EK?KEQ|u?)IsP&$qO#z(bhp7V$z`A-_bz_3D`452|SS^nV1PO z2Mh0T1}JH3>theXq4z0%4TpjS!J>d8h$W;=Rzr5Ai*oeZpM@)D4*+1MiCK>WdY?jI zH??GBKCECacBsMuEjR!U34Sg2!nv=d155frZ6V7>1k}H+pLCPZ*TaOrZO@D@2m*1! z^f{;)Bm~DaLLa0H4{5lNNTCbEBEf?M6oRF9sNt3OP!Jp>Gq>~;O=C3bJZ^oE_ZhWW zmGZur9(<}^=kXkPZcj#zy+&Tp#}?uh!xwKMkI7|fDEmBsk|1yYWzgoCwcp3}Nlop0$#R^8MQ^%Ase z3fk#`9UmeM0_{1sLV%bc%kEIK!;DTH6nX~taPxHNPL9ut_-x`cOW35_xSu0v1hnkR$CinVghr1VHq9) z$Qx;?x#qUNDrl>x2~Am8SQoJ5Mw$d}nQt~0BbD^QfwtgU0u(zt*uCUa5kdZjrFLNf zRC^5#&PopRw`xR0b-&B1lE3R#roM!v;Z`?sW_<u%>nj#Wz(@fsqH$u0TQ)eXlJMuzKXk?P z=L8Z6CCq&r4nmH*A`V)k60V2D;@E>slCQcFC~!cdfN#~7VTii!j@5l^U*xCG6w<)a z4d*IG{f^mwNsUFF>l>%Jghm2|^6G7sZFN|{UaFKrWnv%AFp?TrppBF4Mx&UbB?HH} ze3u7vd87>$&Gj>@ipml#e+%^g&DgK3)K&2}|BA(`wI{^vHaSzTiuYN~hW=L*y)5-X zOb(_n+`ZSrzNPa{QUyp#pmIf_d&P|}iloP?x`TZ<6sm1KJ1eUJ@L~b9RsM8z*og!1 zqyJD1YHACzBS4*1T3TAqeLG~C^$-lRE_U5WC|5AC{sk8Y$o4Ybxl5bK*0Dn)-D}H} z7uRh$dIr$M#lnsAuV+&|ZIG}-dv~A$jVeoGlN2{&?Be(ui0|hfuvWCcLx8jjSj?0h zm&<X$jwx-2^GL)SLIm^G7#EJd<4{SjJNMnK=OXRr6)V|OhYTca&d zS=y=&oBZ>G)3>3#0|o?ut&X8FynRr3R|Z1=e`9Yu>YXPq z3QXFcS&WElLfFE&z$o={FWz=@W168f7cw?T0=^yK&^z932xvLjTi)hk&Bsmup0pj& zt#cEWANN;UtisPdi|UVvvGHDoW?hc2?QZz&W;d+$z3NeiD;?k6oH8LJBUlhRh~(>6 z+lz6GbDMP#C?E_C(?&l8Q-6CjnQmZU;4OC3ZPTaeeN@BT($aG`ngh_qKx=zb>k}Ou zVqFsg>@a}-m@m*1b30$TtIL4sQRwNHkP5BP$SL6%*-@^rV#fgfZt_$X6rt~H`mI0> zP~kOlf~1%Qmd-D&HYkKo-pCq0IT^b7Iz8OvFnTqIuWlE^JX$)^CR%76WC z$-KH9|HD-l%+QNRjICs}K>$KcstbEzL|ycD?Hfp-X>5uo)`BUb4$nJ7GLQiI?mnhy z!#CHIoaPhfR!$vy6PZ6M6rAs}Ci3cxf!$wd4ocC-wmS}2Gk|EbVDECj7lx*%{u#D> zK0Pj;!*#ngjo;Vj!0;FY1Zezh(`eDB0N9wf8LYP;1L~XBkN7`#7pd=8 zJ5<^EJ@Q^H6@$v?VZ$+vwo?T`24TXex&+Q@HbiwNmisR9fBDCqw^fo$%;Eo)efOJJ zMjruJMmu}M!3MzLpB@)Oos}X+tc*FI7yia~xX_%=re}e+(R#BKW0!A8ia-9>zpGYmTox^4DR5ftgcZyJZpS!86S&3|P?ni=@Q|x`u8q|C;x!@N#e^8w9uu(3M# zx&bjP=~L#U>-X-E$^74)5_(xKC1U*N6qgrN+f5v^+QR@hj?>+ZYW=NV%w(eIJ0tsl z&?tsqkS?l+M~B2IaN4-X!P~GAx!8uM#fxsG&ex~&w@&w;*^;x0S4{!%C69EMLz&W= zintp#SojO}NrQ(Ae`Wn-Ir3vDHr?d3OFqv! z&vT?%$9IIfGTN*&Pqy_NKyJ#JGwTOUalfO1G}IgQctEREHOzn~4Q|j*`l9*>g+s=~ z_WD~es-QOO`kTx84_-LcIJdCuzW{O>k~-fq~B%!*615F_1CNtJ6WrQ1(mybj_RP<#1lJQaN?l{-#eLpor=9f=cO`0Ul{m8!qr-&7@OIR|_e(e9V*H*7Kqda%z zu3jL#v@Ym6)l=>;v#4w;-_RD8-RIZq__>qlqzx!#FTRXaC;i>~=zJ_iQC`IdMCe>V z{=_bhVdfQwUD(iV>v3+A>hV$5cc`(Fq6Rhu^&(1^!7e{|MW}Zg8)iO46_@rMy~fI) z+)D7qo6;H0u)9zIybJJ9=>W`;D|f)|XDkNXKe#cwfFaX=ic(MBe4wqB1}hjOd=RL< zp<#Yu;YX+U^1h>Pr#B8rK~eGV#zuBd&c|M&JT1EOOkzq(N=dfoNilm*ceg+Sc`PCC zbM*s%HoJ#uQyT_I0Mv;YjGeq7R=qLFBL1fnz2S!-7Xvkl&YFSS50}g`7>w+ocj7FN z&o&CEshmx25rRjl40VW+MD@jU`=*DX#ypl}DM%%#&!aOW^y0eFpiYnvD$iZgjw z5P%NjNMX~;&vy+#Q_*aPfdOIt>Sg8%uXK!d|sHL?M42K52*7W>W zoJjT;Q;)Jvz4>3d>h|l?mxyd&eA%oP+#_hnD6_fza$D}cm*WOF@xMIe?by9<0`iA) z3C6CjuBEhxV{W577|)2QrF|F1NU3W`j90_yb9k@Gsf^P`@MFZ?+uMz{+(ylNXu9XO z_GQdcRm`E%`$ae3@T{6e{s2n&o3jf{*rXmZR@k%Hy)4PtZ$4i=aFj$)1& z2%Pmkl}HjJ)rc*m&W0uxu9bHAyklbz`f;K5A$;|k>Ny;ITR_B-B7UlVKXZzVh}Zzi zqk0m#9<#o{9P#k*XmV7OlZ!F47@n2qKWBId#RrrgWu&C8(E)CNOYQMo6d?-OM z6qzJXWkJKu!JRE4%D2KPoWSQ2g!i28xQ)l@&ZImaD&dLyNLT(NIY*f~xlqs^Ve9Q_ z*JbK;Mh#prd?lrQ9K7%gX6QdPU0Zd{<$yeN$fjAhRY4z&#|`Bqh*{o9HU3(s0R=Ww z?7qhkCcqvQfWIkp&0F39hBnaEA6-GMR+WsreZzia=uYZ3)Xj=-@*Dj3eLayJ&vtI* zl{*=98{$i-2d?BuG}{^pFc~vR=UvuTB{pxZ)D25N`6Ybp0KB4;7o%sS5^P|gxTXdT zh95f$y0807FrKW!!zII;<>j)r8Fy3l%yxriKXx?+H8d>f@i?^&ndmLH#2rwn&dtr$ z?iywC<>I*+XSG_aG9f^Sk3~o@`9Mv@v%Gs}2UHF5s^*iBl(u7kZ#Xpz6_5lvgn8Tt zl-tcYXCkV{@acY}jh%msFx;6_wvET{+3M!`ES$b}Fiyt)m&H?Q&L)#7N)NkZF-Cq= z_VMu>_i8DOW6PQ~dunpB2cv}$3OPGFI~f@n>wiCJLsxiNNFX5bJjr37!UGEi2L~4x z7K-4pWNW@yG9C$mLjAR2Gh9EfPr>1*cE`(22SZe$Y7}(~5Qr;|FLDHoxJnE4?7I?{ z`8-Ii!Yw%P$w%dDIGekUxcRA%-nvbFNE_WWEWUTvbku2*%wKuzXeP2RdA8wYSXp$bUWW2+ayes?@$U6|9R;ZU&3zDRF6-d`lT!xuN8*Y!&czVZ6zfxMA= zdPH5@PAX+5Z&6CV7jAi26}r0Rs2dpBetF+DkgWd7j6z@6l%`_MDgpfSU*i zbXVqtZUK~$=X(}lh84Q;RHk2V}|55iNuif{b&4v3&RPh(p^ZZb6sro~y`bGcyNOI51YU$i-_3=#w!Ql5U7gpgpS7%QYwHKB8(eI4 zl7NVrlCDQ5Qq+U4;QaAnZnfqp?OO`kT;iVpV@7}h`TCnzBqYLa*Bk!G_Z%K)sJv?+ zW>xC6TyJeBtnLtv{{3=0TfKC5DPxOV)5uP}Zlf3J(TiyNjfZ-o?a}Y!!LP|H&EQq2 z+4)%MBj_-r^WMCq>rg_ksYqzE*XC7l{>AtDXOV;$%@71gZoy~AksAVJaIM%hz+0a< zYw(H$T2GwZ-{$aUMnpsukHI(i#AE+G>nAdi?@l}b2n0g$*Ag(q#wLKR<=Fr{jaS$8PMeF6&yC-x-a3Ln z{xOp&Cvw?%Q|C6q|1ykE>03Yjw}l zu|AmFMkUZ;_mYkwz$fzCgH(2*dq9R>xz7_56Jx22M8Q-nEVTs%yFD;OnaoCFk|Q?e znx1bU11{dus;ULc1}-ixKnixF$u4JTUIe8d0GD-GZTNk>{ik;6g6if0>iY*QCYDxK zAMXc;y1F)RAs$}hXdq%9>dJz;iI?U+6UNT^U6J*!tPAbv-`}xAHQ3)fMHt{Y1&N1{ zJb(9$xGD^J4tJRi0N_WUs}6>|I^S9V?iTd3&!7uOqr}~d4i68nr*iv5)pPffu_>*( zvy+dKa|jg@ zY}8Dt!ozuX=nRTqf8WR*NeW&JsO5)`m@2&BB5FOcD)XWaiItgKiGYTD?5?h$nHuv7 z=7>37@)>YvRs}HN00#-v2UhC#NQn4xq&{QiQ=DWjoxoA#!+_DBHJo#?%bS6}Wbc@P zGo*^UyYa&YmX6PV)BZKmhCOWkdn5HK&O-=w0DC=F>huWWwA{=EyMUi;KU`qk$b~;% zWlJ|;zGsObl%X1%pm=CO=o+WomW^^yyAI6SNl&ZJwa!j+T&YL~JHF4nH0L>J^z9St zbL`*PD>(|sK`|6`@lxZTgw#Gq13oAKS681L>&j?^&eX3PE_17PWw80X^mEM~hO~;K zL=1G1+mF_O)7{I>=a8Ltfb`de!n5oX3IS3m4aOx9Hi-yhtv$i#w9jp6@wnO#RPdpxYerV1%@2ds90bUvD$(S z%@o%`kcJ5*p&lLPph20jhK1HH_+@FCIqCJ1tI<1c!Hh53?u-qB;LG{TUX;$fA=-}% zUDF;cdfdTA3L7YKK%B3@I@p#A9?VLhCL87Eq7zpbEU{Kbef4} zQ%JwrFW(jOj(f}qgcE0hUc8s}pmtP{V;$6r7M zK^Tf?&<;rljSv&F(Jo}K6MC(Kg?7YdU!tnI`ajms>+9=6rM4TH^#1eRX@?s> zLKu))0`@XZUj_64jAeQc28TTa2z}-K0JaHjsk|p#%Dz<4y%9pC)gKMC1&P$u-heTu zAPNGF?EV@5vQZ~pQm1Z(2?^4%J$x#D+f?b&I)ATPlx*W-gLbGcZ~J}sQ<%+8*Mfif zi2l;Gq5gqAiG#?v;r0FHvc%WhWo!Ll;X80HjI;M4VGLC&rl>Gjxd&E&UzSi%(s^`d zIscm;O}uj2;w_@fXLY+C3iMUywdP~?7n@7SGRgss*kCOisa>!*E3_w2!OMq!oF??x zi+_H8ejnl;9vwx61q0~xNAAn^#H_4yIGoYm`EvFD{43=V5K3mBwt|q6grxJDn;)nA z-kof1Z2>wru+)_X0Su|B$>N7&sZ_IY`+`sI5Zw`P|K_?t)W4CCgXR$+3UOn zAW#B2rX1nwM@8+y<-Ho;s%cvl3sW#j>Q66eeppDMVs~TN6V1M&6blsMPn=fGdyyJ_ z6h<2phBq}#@8$D&OAAcQMsrNe(IkR0(pikNF;t3S?LVc_g@MFc3#`wurA1{P41sDj zdhL2%5*=ftc^}FgWq^RBr>7-dQCUe)SPWy^wCd%rR;Ci9^1gg@bQBgDX=Pgsh1+#A z$=#ID?T!rv2@Ht1?y-}i!O)R3dKnuzR+4FFf!<=sre z$Grov74K8zq7`dQrhezQiRbY9)>IWsQh!-%bD0Fde`+Z|T9kYd54RFA_j%tJRsaE? z2-Z|xTQ@DiHNE#1Me2iO!ty_Nx1s${ybn`|fNGIhOj1LW>+`Sq)pvd`Jpzq^nm2y0 zbqdGbiwih7up3+zGL27CzGwtGHAb$24&59LPrXD9CN)wIDykueYhs3u+hRxC!^6<| zE__mo-IMR?gV)n*Lml9R;d(Hh#_D7`$<^$mgMZdOW4ky5BHB)HP^zg#M3Q zgvDWJjRddDPn%}`AMW=oxoIjOOzDKk{|9?{m*u(!=k_0tAGwl7xMtOd`D#8 zZu;-lGj`4ra+9f8tHiq96FMy!XlWJ0rG)~zpYrE@KI6(`4Zipb++GLcZ~Bf_Hb27{ z0Wp->l$htO@+R`EhUaM|!B z*Vn9`L{D~=dQ0?HfBl7Y`NIicH$x{xy%`d!+2QJH?1zo_PXLx#I}zn)A42w;)lj%9 z($Zg@KDX|ezzrNPUvEYhzQVlPdBfVlB2n891J$m-19upeTFKdHC;uH=U5&q}GyC;i zMFA&ixtyxv$+;?5wbu@H=U?--@{28Z=Zs}z!`$^3n3YPu`)s1k&*AXarPdAUHj$TWBSpxhvN1+FIVx%<~q?}vMuqcv#zIM z_{5DFr6KVz^~U-a7p#}i!H*6^Hx;JZj&f&{%2ra)2Mg-;M{I-BrQLU%U!R7w$#Bb8 z_en9bWVM?Oo@>vm-M)o?*Y0;G^<6s?1SGLre%S2IyX8}_IGMi#k6H5_;le0;!ccxn ze#yg9R`7ECIRZ0i0UZ=+JR0x zSqYKb|LVTcud~5HOk23bpNc{;Oc^s~>EAkPh{*cjIT$o+Cvyed8>|RVQ!7DZ&oaeG z+f;?@n0#rqHS_UAe0W|4ay2$rfu68Qxm5ApE|dCMIvhK2038&7Tki2^JzhJ#@nyU%T$A|@gTXY2f|ASdv<5@C3h^Xhoo*h|ss)G0Np)tucVeA;+_GVH9Vlnn0C50$%Uc!Nk&rUe&6Vj+Xg3f&TQ@%~RvL^mkd8NV><&X*$i$RbY&8?+E(;)Zh@ za;AK2mX{82JEbi3U+T;%ak?z0G6L1YOJ(JXr$gm0JD!FeBmb^wF?JhB4nWnqX8$0- zC+x1Y6ed_oT5Gl$Qcpn|sjfEvTNX_cA3)^WVZM@}C_8`7l9w=NS z6mZWVVzrt+Afvn0GScpV{Ym9Ylv#H(N9%`Fe&vvXHc+%rVf|rX()7Lz45AtAD2Ccqw|hr(URHig^RbzJ|Z@j7A2tq{fL=KHw!7-(3PUo`67yOn~c6soy;oG zHI;(!t8u~O)B7)CC72@DmPMvP4Ag-Q_GAAb(CSw4jB!K4CyQmYH(rSB9x$&}X5zi&Wwt)qQa8s(-(U*HGNByKezPBgsgM!PtF_SQ=X(7kE>eYHLJ2Zp#!lvM3|hIpyN;16 zp7l>BufmJ(b?j`6ofnGbBluqi&vKjYEk+`}?y&udm1l$V?_vMtz`+8?Wn4(-6OWUi}XQ2>_*C&4%TuQib-5z!t#E;D5WF4S<3H{Lj8w-on}{Q~V^bs^fa) zy8WB@+3~Yczfk3fe$h-=keG4G1U33MIujv=co}SVGQbWi&$2~vDLV?%NWUd8oXjnq$K>h{{wfna z=K4aKH)vh|7pE|sTQE%9Qe(mS{(5TUS9q4O_G$B|-vq-RIB#vn<4cXv+%B@^Ngo|fohz#W|E&%j4 zZqzbRp@|0k;+m*EpYwm12Fa4n>0kXCPdI8~M>Km{tUTFb*xRVAnp zIb4qFy_`$LqTLs#^P!7J4exk}ha2KQ9>4v}^H(H*!ViOZwFT8e5Ig z*l4WAwr!(nW1YsfZM(6Z#&*8l_ul*cJjvPn%w98lX4aYq4LNXsUSfI&CXe*>hgHJo zW&NIdKF)5e-+A(B9Hybjr?8pqbT_(KipuE1+UNO5xUP6OejLqK(w{bJ>{+6uUGdXY zTcj@C7X~Yt#Y)5JzMpPKIE4ZW8%;i*D~Z+RAlpyttR*cb)CMUjlb+undI6!?(gJgHT*oJG!qIztrtJ+zIGsurs7FJpJr}7ToVbvbq@6{w@PYzb zP-MO}cwq+Nh^d=Uu{`hIf7S1Bb5><7%$G1?>rH?Uh-!#CWFf2Hi|EU#fA}!1ug_=j z@`COgq(eImv`fhj^VL|mSl&jR4ha<|DHWT?Pzx=R+b>xIJ|m*?6RiDVp8Q87@@~>H z2bHK9*4}=Rm?aal8k*jLeF_TLPJhAH3k?t%^$qn=I>O@i^rNrc1OS#va+2B5!@|M& zCl_yq!uW!P1S9I<@d%VMIsl3>;7}vz{ZN&gyLGuUSYKbST+B{M`5o}D2P(tf!tnBi zwE-*sARHL1FY(hjb8eiI2im2~+$4Ym*2T*u+vxf-`)jSSHYR5P(a=ekQI!Rt{{t$Q zp0WiOjl8iG6`XcpC44Y2La)s`ut}Y=sPH0dqIRiU9BxTqduH6=udMw>ccjX^SjY88 zRI?b8H=)K%XI^i<4XRD4$(OxNWW6`-Y z4xJ+Pwy1}hS)pF#;Fdkyu@EZ2=w>BrXa^UEdLf4Oi;MrJDhQR$Q1U(+@o3grY8?Dg zb>Xk~>d5%!Z7Y<`l045f`g!6BliPl?tFq%!HJ`oYhXer;V3f#b;109jNEkPZ^SjF+ zR5Pbq%b*jqJQVSWHr*kh+y63fR5>n!s=ux8zj(2ksJsEr)^4;V6!3lk4A~p(Hr{{} zDRp)AvyIO8tG!XbHqB~HZ$MihmCa1KSe2hh&~~+{)@)M1tn{nSl=cvsoijPUs8OFzvIb|(F5#Y(ohh38O&IRR(s`3|HK-Atk8E$oPGPJ0nIZ;e5%AbZ{kJZ5?GK8tA^V=X{|-k zYeh6p(&IO%W3;D%iKWLFYQd-0eWV9%b&$|AKXpq|x5@Ch=Cn2~t1fE!yBMo)Pev|2 zN=NyRq7^*ouA>va68Axr(jsSsdzMMtpjsJa*Ow}~MziH4ub2wTk&hb;smx}FNzXBs z%@cy*w@+?95FyFNiX22r0IY5> zs09Y4>QRtjdjD}`*&l&oF)L2xBC}oN%D<|}5rf5K))#@nzSaxnLtfzrZ`AOI4zLUk zJ#QrM`MYxa{aVnMu!H9h)gaL7V4IDdUveToF&Z`kDBhXIwbRL8mXzZApivc0`@qFo zg9-!3OQ1li7;Cp}eYT+U=}CZ9yCkMEt}69$o7d6hn~S7$*rzI}6p;UuBm?289HMM1QIeUH91c^hYDP(AS}ZRIV+VL{Dkh}X-Jmk z4_Lbwb~Za+zW@U2wZp1pktB^1g1mLtvcow93jssNUNO&qh(?YQjwcNvK)h+<&+A`s z@cJDH*MOu?--h3GDlM_b*ug!c-{i~d?OxbI*6zJDbpm`iRI|fbcl9JACd!ZlVYs*Q z#H;sO!s-nBPeCZq)W9e2tM%NA#m&tjA&|dv$*bj#L+i&_nW#Pk7A)}I?k_>X=7kj9 zL=iGH0%ph8vDeuR9om!hy=9QLN9!BVdMBA#9WNJ;+steqcM4wG)%t!lMs>gXBWM^X zamrvL=6ESPfsXgWg5$foKxlq6lodh^g|&9~2UERCXP_|P%=_8)k5A*Ns{FkwUM3{S z+;irwKh*frLaBoI7rdIj4X-c-h6p%_1di2wd{D4+$PSD0d;jJI_acn`+tykA?0rpS zQUpcd?2)%Kc>iME2}pDpmGMiLJJy}aNXbX$CAN|K7l_}5jFoi@H<0jlsudZzMQ6|PE4(v8MRe#PmZY0*Llp2YpM75X4Y=4)zO||orV){yv7!Hi1 z$e%%clN6@nNyQW(e}8J8s#j+r=9T(lY49BJ>uy`WIda6dK^0Ev(%o!=w!#@#f1#wI z12?Ad2-BAi_Xi1STY><8DA1gMHBZgCw}>fHf*1(o%o&Ap`ou!R?>~_T0h)7Mt5#s- zHlUyxBL)NrhCR0~#tSU2ESa3P)p-{Jkb=oTJLI7k$xhERYW{o z}b%l-|3C?qLMt=f- zwkcjZy1W#ho^B40Q1Q)Wpr^tK>IZZvG9#1p_3~I~C|Dst22*Jh#BCJ|IH|tQNYE#o z5BrZ{E-2|UHBLJiQF&xe&gh==SbqHea(>j4_OjcMy#7uD>eI^~#9g zCG9R7n9qH)%`R2^-sU)HH7<{UT-k*NK40+3#3Rf* zYUt?w51pcRhl1E{vSws^9QOT{13Us`*nnVwx1>G@E@en`{g^543Y3uMzP&3ddc{rd zPwDvTxZl=1|4LgVNc;TOteVsA(va0n)vDuvI9C8%4~lGwMP6jM=q+VHs3zqkC1-44 zW+js$C*jhNc@5H(r$zvoyN|WL?fATtU`3LE{3oz3CnfDzUXN%3AwjCjb0^%+FMCbeC>DT+?`0VD2-qvYL*03NPKo)(~oMk1(6A{#9)G+$n zv$nhB$1wzmGfH={gx!(>Apu!f5z|F_S(Ue5iuRB8I5SA-PqB*BN6X^woOUAbmu6jpXvwRo@I+=ap2} z4d=cA%?bJ#)j#*6v6KP^hu1# zH_p2V1E#6cIxz*;zswj1{ecEC0@DJ-W07Ei77q12m} zMC`9xX;2{~;T!ZNP2UiEk*Nd8ko$^iS6?5imCPVPnzHHyL>oG}g-P3aU?ZftUJI9PQ>;!jAiI zl#K^;8&tfz>yxTOfvipOlZA^rE4y;HfGZQwJh}~)T<-ZEbZ|jkTS5^O-h3Jp<*0dZ zk$E&Qh!)8MCEEPyOUNK0G(funRwKbg}48HIo0Ve~V20Tb-{>P#e$Y2Hs23T>TGcq#H0e`u! z04Tu3?sg_$#>vSk+lyb91a-C3?|qc1)B7OP4U0kRW&qy~37?amimIS&jEhsvRYyox z_QpxdsCFqtRAs*`!(o5bLbi&9BD*LsWToSgD`hNP z&%e}@ri0aTW-93*){34LpP7!KM_1qaXuU9gcD(ueY9=H*)^=L0;@kDsctMm+No3(( zo$K5ZS`@tcMwtME#*iFV(qtIHkdu5bVu%RHzjw>s6Z5$n%(qa<-)B&@_sNU}weJqB zeAI`_MqM(OIEhT(uHj>S+d67&WHc~2#OJl-wvSGP_kOf~ekgmjyCCz&8t--@v<9fH zRCl&d4~EQ*RW+)A)M|Iw4NQi@Q1Quo<*8rbv`+hG;57_>Q48brW~W15(C=DU9f62V^fH;V~zL*pm5UKq0QBf);b+@%o^*r!BUO5D+UJEIqAl z0!(6yl)xh+BWLUF&x3x){asruKyUhVY|l07zxP#bb!Qx!5ic3YET!b?6TMy?wxg8x zA54CE^4=b+`Ri7a3O^PspyUBgREZ)RIj=L|>3h&aYX&E_e3bFEZ=9D7-IngHm7w?; zD`!`PFe|7u_>j0lTqy(&u^TcdZZ(4gW;8*Z}d0j|}M_D9}sLkwdYtr0cq+ zT|6Y{(ArTwE+r{@t-N&sB10Y_CVuww-N4auD|Qnyp9sm;ECTtX&QS=|C)4(iK_PjG zJU9f-Z+|^m1?V^%a*CXVEN!nM+T#d9{SQ;x+Ij?hMq19j?l*g_6f)$ggQU)N)tz5z zvl$6Hp;ib@=!)Hiih>JmLm?MUsH6(pzIfY(@lDz2Qqbx1GQ>R?_El?_>_>x!C407l zFk24YI(ji54(o*aAh%M{`jrD#@S#E^u6{#<{JRbKb@SO?4|(fX>@+oHtBTfqPPo|9 z$oE_4=>eO_sb)0=Bp65D_Lp}>T+F2P-X(EN$(b$RFZ7(6bNh@Lr;}4fs~ywT-1OTQ zGj>CmdHpBIB1D*HOc*UFc+aZFLZ~vdPFAMwWJC=fr(`$H7^q|F(rbkgKGN5ZKT#+r zl}8Z_ER%_1(DCVS9%iR#Vi&{2eLP=;Jzp|Z^l=v8Fp_= zHe~9R0s2roeH9Il8E4bEMVtWIkhRvU70XPQnQ!?6|9#V*XbFm-V)59;g{*>d1VzU9 z@pN&}p=D|-K8$#k2_zR=EhNBt(Z{xjF6%v;S7|%vo`0eW>09eVtL}zGSq|)hG7)j( zc!Gt2eV}yz8QO1vih`9_I|Ngn?#I0)+br4sA(T~Txf2l+Z`#`V9up1{6qrHOCYOsb z4zps{J`rI6Xd3lc$R=9Ro-WK(b(vw)M+DwmW4;@-NI#{|58V_Vs@fjy+NXH%Gg0$E zqp#Nw9f}BrXJ3i8omQf@ibE&JR(;d!TR9ObkjPbm=)jp1Y{x}MS5{HMK;7J{%}3OI zNEa$r^|TdS1q9Jl8dY^c@)wU2`X)wzk@|IEiJGl2A928f zF=9HW(S!Pl5l;6#Z39dHjT9-lkAcodjQHZ`3M%wotW?d?s%Ugp;rVV$Jsfd2e&XhN z_O5F_AjUt-CxV+0+~_eR!J$FE-<+>+;z&Ziema>dOR70$YZ%@wly&^kU83-N)sSZ# zDHQ{s_v#$k1wN{4QRlkX+TTG3oCS3xY;)(t=}jVz#W&R$N$?ad#V?)<4e1L_1+U%V zs8*}yGZ)bSp^HxJ%REFsRKT9y@4Wq<|NM8Aj6EJ#>r;tqu55^8kAm zIX#~rSo)b18I;&9t)!W9oaU=-$6zN&5S&Td+V&Z3M~N} zOqsiT1q_C7tkW`b+BjPI&k8<27H?L)7k6EoB?{2!CEO?lOP7_7#FD}+&BXb5wRp3s zdW{0bPFe38^Nflq?w5ICpu8d76KJ4I!;s+N3O@U3bF#kBc-CvzUn{j&xywFPK~EAF zvJJt+(WdBw}kr{1{8q}r#m={j2d?FSMNNj&8ESL)qchV;6lroZxl7lO0%&3Om6 zKvwGuFIe2cT3iq~NCoZfUs$g+G>U+-*<6tlfL-=X+xiFG@Vb91 zS5Q?~zdM}nwS0BqPaHNOKt5<>eRudb8UFoK?j;;LmD4l~Rwv?b7Opt)zN5v8av~&k zAtlduKA94)up+)a>MtRTo1jktr>D+BKd_#J`&x!1|rG6jfF#$jQB0MO+4pFZ(?N)U+nZ$hC9DrnOJa2|GF z&If_A{s3S+E5U*TLWRF1psrb7IM78MG9-w<9Jm+pzdxBd{Vg#U>uO}ocRA>NmN;ma zpPxQ`GOFgL>E;m;o?DJekyah_0F(-ybuqDYPENWSH>V7L-%O%LIv{7Cz zARSdHzg;d4gtVKDm-@e`XDOZTX0DfHhUp>z+2*J}m#^9KHh4Kg&vkkGwoo7+cV4e^ zzxf0)t8f_@AZVDE|9`w;-bFIKjg@`SZ2umv4A5AXfJewuYA=Go%qHe?SLmKwFDFSl zoTIDc(|ve{CqOm>!UR}M4<}Lrrr&-XJd8rzWBMl*Q`VfYVK793txzE5qDd>pPNr2Y zp!~5=q1$M?#%sSRBquk%*&USaNZcK6mHIpy9B4kN0AtqwIR0Lmg_@)O|0?fnxVj#2^b6)S+eLzZrfsPIWb$+TAq2JMM^|~1^)`q!Dd%H2!(n|Z= z^RKgt_SUh&{agsPuWkV0RrOO@x~NI!Ej~)@2if6v4NiiNUjMkf|Hj)8Z#&GBJkbW* zz!i=J%+v`Yen6M$v*4JPDgB?d<>q=b5Y))-7a>dIn7c zO@eMf7GEiTkPq^Bj`FKuiv2}9(OS3RD)BBz`<%>5a^sadq+e5~@hxWRx?~ywiLPq_ ziU%2$uX{)SLKE6jPG}F*c@W#1{u5ga?&13Po7BV1o!N*hZ@_(GAxggHSX9H8y!8$~ z61c0Qex`lm1G}a-`_8k>7q*x{j{;+Ul{5|X*DuT7o1-y)>SFHs%$0R@*t2&vx^I&+ zcXswd{4h;~ON4-q^*69D@PfH@0e0tEdP!e@CnhF##;0`RXRXn`mj!oWRBdhqh6}k* zqh4nedHES(3K4b$5$@`C#92Fc$VL-`9xb_XkoG4P|B^T9>nOQHo_$crR=FYmxndgC zJ?NyR;lJ1k#gF1wG=IF`AaQ;$VK(q8c*_IFFS+rCk^lHxKVSYzdfrAqV8@#(V_xP5 zGzsy7atGuA<-Gg`m2awqgMe}0EyHuFr}sC~*^qZ`=no%G7pr%Y6a<u62a1z89w}N!;Piv{@ZOh`=0x5(BIct!0Y9 z+0w+w2qXv<{`YFMuN5}&cNV`dm?9({HE0+;Dj-m$3wbBWWFPy<9mE3^`DIj;eU^`= zxlpAucXp%-T%he*%k8#k@MS=!)Z>kaGRYbPDl)Oa32u2LkeD9B19)nEpWAsL5zK0B zJp{&bMHC=ZZ&(-jaOaf`X zbUrf(q~@|ff<#5dYCQ9>fP(}R)a@?(QZ-oL`SN^4Nx=~8Lv@`UztV|vp7liSbyi#I z>Mn!;s`e#8hd_omzkr?QG(duOK7L(q~&C|tJFVlo|y%rOIpJ3;) zoGa4!I{Xjbd9rxP&f|PI6$FdYu`GV_uH}pimmLQjUXbs!XY86{QF>Bcd**ux-Xg@} zq2nGR^zK7ONF%{rUXR76{rwbA-f2dK9FHWF3xy69|7jQ7T>!`r2DaAHJ|+u)|IqYB z*pOM#NTLqgCSMP~$Vs|=f@-ip%$?Dg<;A?B$%@gyVeycHDeR>AOPk*0-y=15W%V*M zjhmgSBKAhcuO!>OMr|(+-#<}%CI9){%a*FQxktr9Gq%Cz&zvA@-+%gC{^HTzW;u^jwd=9waZ*r3?yPsnuvLabJ?lr zkkaXP8RR@T-zzc9MGSoRpF`z%I_$ z%jBiy8%S!rq~MF#eskc5z{eT58Ox6Ubet+ndy&T=&|CW9HR!NH$cGVC%AIp?T+p4L z7Ccm%=Up;gNId=8uHG`N%HKQrx`PUxm)NGo&#^IDD&bh6@e3v9@*as#I3J@J={^)5 z2@4_W_BeFdV~gpl1eGIyy=y4(lGF1C@rDJ5WW*>A`kE^){ddnD!W9c=0mjNl=UhZTwuhp9 zpXa-LMH;4|_YD}l%pVzNl#O7ccIdB0mT*Bw>J~LuV0)q+0iw8kmQ~}=0f7obm+1Ny z>tLap``MhYKMPl>lp>HCT3t@4ybN-l&AEdEYP>v)X#^5~Mw7csYoX(w^C%lL#|sYX z;$ejipP-#Sda7r0PkvKVq?vUx440-v4?lxIjOwp?ZEG756Z0r;`atQh*_e=w9dZBQ zKtMEV;89K*D&hVSL8)4A$G7ReQPVo|^KV9w!Du1d7vinUhoT~ysgO>*EJJ{ML43X# zKf6}m$D29fZa2?JIa#_BJoseHkHu&qiym@z=B7zc#Xg`NHFSM!PP?up=FB>nG@t5= z$vVHLV$V%KC|Q3!Erp=}d%3@Fuzk0#UuMI%e)eaIbEPGG#O1Z>DUCCF%u$5|&^2*R zjgZ0Jn789z!dnmtV*2y3`|1N#+_Lt;zZPPC6EJxsA2Z+^E4LR!S|cZab$xG=v%CM% z3-Yh}%0#+JPL?<;dK6vJzwwR`KfDXDB>y3O^}R3qWAM4^w90$8s+NGV^cApU_PRUy z)?mGKw$?hr`Gq1uFE#)m1abl2u;JsBC#Yp6yV;OYMjblGy0+d2 z=!*c!1tFw|uhDW8W}@H7k8qWzJ38F_-R$~(QfM?2hU6rJXm^ro`rv1xAOUWZXUfLP zD-Hgr`QOm#pC~zgtURukFr3rGSLC9vM$ENO9&%pi@bqkE9dCf>-_KvaG&D5yJG?z! zpKgKQ>2N-psdb=a!I2fKTiAwTS!L*e<2K*PtIkqTQC1ds*o0c($du3Ku=;s0%eC%q ze6iWh!omWq3eA6GCBT4+83@Gss3F{Uu7x2|lMoWT(gL_$~j>^NTT)>f!am`A4 zVteX~40*gg1S!%a5`3y&Z@z-XhxRsks4xkKx6L1`AF|QtRzwF$pbCm(X!7palzQ|H)RO* zU8akp`gLd26ZiX&BTm)<&whW@@dOnKZ_lCdk`_OT|7sY}WYE!LGxtA;BKSz|>^apH((Cx{-j0?g9)8ZIn9o%!n?)J^5btBS z_sh%{g#$$#{rQr%0yW+}8KjBG%{pbs5pbIIZf7qpDr%19;Y?;#7HmJ`eEixSZ}&-LAd9U*L;NwDa)rnLbCTflZN7>!s9`ZOqvZ z+L^FAnq3n`@)DefQs1Jv7UZ?s?PBMx|5|^-kP5EBeQhAnn=qJN#t)IlJQbjEJ1Cw{ zT}xbPhOF&Q1mqt6&K;Agcp_?1T8414GCHrhMd|Ca$TKQS@qPlZ+IevWOdBktMQn)6 z6eb83Cnv%HjvTNE?@k& z%c>dkg}&dRe@1L!9U-mNy_iWksi}WqMR~tfW@eV7$LL^V;n%&bP`-Pcwds^$xeYA^ zjD_Hvm90L8E*TtIqa_XXUD_cpIbYZSc(!#KXWq>AFzi$AW?leB?A;bV%YTmx z9s>H7Sf%Z??|5+zPA{m-wEo~{!6|Qh!9qBhZ<1mqXJ5XAEl-WnNFZ9Ge2Dz_sPG7# z>c6)k_yrcpp3REHsF>`prwQk$*{~qgD@=A?uc5xI^f-FND0oY|ADh)bY+oJSUaD%` zg*ZE)tN?&LA3op-Pw)9-@(6^0f9?iuM)B8Z!c%AoDif z9oPFpeC8aJl*_(X(I#R2VqD~2w``E&Wv6d=PvL^`b~a$i6#r|UkRWxV*NfOlsGp#h zvbatYsA%MRUpFrK>y99ScF*bt&*>|s*Vdn{@0HjkCK4fHlL$HT`b%a{kpiY*xtUxl zB{cx6W%V_Qq8nkNX8g_ zaN<(ix*bjN0Cx=eWAOWNKpzhpPKi=A9piQSdoRzcR4V_3;)6x-4I< z&uZM&r=1vego+KIq^5EC&DyhmV%jYRs2hy|Qa}VFr9PrJ6qR9dQwnZpDh%Ed>dsA* zHKen^A5|0kbeb=3vla^hQ>>%NtNK}LyZNk@XN>R^Spmxs+s~NC%~El9$cC8D{>&-e z|K4R?+$8jg(!W(pn|U3neDdW-9C_gjQx;P=7_51~e|ap{nOXFyuuA}2>IGj;zyD?i z^`WGh)H#dm0bK?+KILE1CbImrZb;J3E823!)nK3A}HZ+k4oeN2SyG!A+k(Z=0hg@LE;gyi19MF>QUs}KY*p) z(D0r+X2g0*Thn@^s=ArH5F4is3%oS2ttdG`pK<$U0Lp;OLI@kYAxvtv|9i3dmGeI+ zFaVvCag7~gj5#$|Pl>sEh>oY^8-bA>!*VlcM^I73w3>J#4H_`Dnm1L7LXR8#NRZ00 z6@!i=(QiY?55Z-wJP|nFyBJUxOVy0wf_0~$^KegycnY_eXcsQ*Si{+uOG&`2AXRR?< zzSP-nDZMFI|1p#_-i8{KV;UKXm@10KVk1Bwz~f=*{Oy*fZZl&s?hNB`F*Nqp%T|Wf zDs4f5?m+2-?ujDnz zkK`odPxw0N;w(a;?3T9s=wu%NKM`E{-;}X8xx)Qpgv5n&loalmh5!5XUCl%ElxxM9 ztthKZ9@aU|l8>geS<-4ztvIy>;?OtoMC2GPTR6Bp1^sEaF2=oHq(Dx$I5`iF z3IZ5k8X*En=&@vS6?=Mn0l5trWCBgqIR^H|Xr#}cFtnyOF_9C;E>;VpKEcPhgFMbT;Q|xnBb1$|V3Kkt-S|59lLb?GB5EA#-qWc=*Bv=9FtU#-_9r{p2E{`jkbu$7N60 zy5WT^S18KVr}&aWi5OXE_vNKh)G}tJ_Zl#xgGIvGM3CS%8Hxu!kgwa~ph7=B9%P%1 zr2sqjNB}79`*Jx5DD?m-$A;hg7f?=qen{_@^-|4;K$2u>4u@^A?2Q9^?vRiWCT$B} zUtee5R{%`y+Ik+KS~~t)(dEr?k1j|GF#cj-Vk%TFc5U@pZ~Ne&#N+ZYS>TavHVOur z7LSKCTZEGClLRQI?&PBSohCZ`PGuy9Il7O^e&7{M^SV)@Yfob}*Vh(+QIjkU9*3!g zDw_RypW0H^sAtCV&DsRP@bKoP`EQufMZCP(fKl~YSV3F8ix?onsca~u6t6~5@BSSA z;tTJXIuVe^0-y1i9{MpgtuX$`h8evpcT#7~ZYD2Ft9;42M#a1@;ho;|I!M?Qth-#? zon-GbXhOg8g_JvkeA^;ZUXhpHZFD+$?diaov%~;DQ4go_a&u*8gJ603cg^8e_(K;* z_E_fi8>UpNL}5cUWO40AW|QXzK@zfhq#OX8zA1YHR?#1)lUR)az{yAQ)9c?C?BQzM zZS{~@>7n!Fx69n`0(|GK7sQd3f-6U2gteg*ufBiY3Cj3X_gYc}{d^4!Hlx_yiGzks z)Ya6QgR5qben{s7YT4el^5yD$23`Jz&p3dEaM%U{e5HD6s_g!gAGoTDSwP^enMbz? zuzWe324_4!^f(>6{GjZX=^AQr6=2eu$(|hYrJnp5Sv% zm7Tg3VYc=>fFTB8r~AQAhRi9?ovP_EKaX2=+6Pk7@cqtZp(aGIIY;s7w4Z-`(tTKP zNhoMnSADB$yOQ7IFd#cL!OB;4x?TlmiC&kEHn%;=w-2~K7e+4rfNLMn^eCOMuH)}e z3(K3BqM4{?yJw)XGIqi5l+xs9K6uH+m&p7!MOWOU#AWY&pB=lZI$Y;i{q!dUpzgJ< zwJOg~ll>|F=*Fo2`vBO~eFs3YX&-+|E?CjBv&KlZ`{ec*)c|Bw=?^1i+q+R=b}2|$ zzO_aBzA76^{Rb#|vn5EZxmN%R7HZ(9&huqQ3ey73EdXWQy_L2rvE32aPrccPUC4rl zuFWjEUQecr8rHh6TFT)7kgjjuFAYoPHaiFaA5=PQH~aZ5P0tG5ZHQRMi`BsT9zYKd z1xwfKxE&M@QbIWqZB!i0yWzR)duf#9Vf3;~`}B|VMh!px&WIwRp&olbE_RF>UREAF zH^=&PGr@iT%8|5AZ~04Y&Ek-+WF#k2b3%a(=^qZTeXFVQ^t5~4;-e1Rs01PDc+VXv2j8u_6j0>&_fx2(j z0K^Aal4(Ehuik3_k6fhtM|1vROtP%DLv4k^H>qBq%yFSWMN6k-R$4xt z8Cwl_2%=F`_G4UMRV1;!g>T{RKSc~`ae!H1s$~TaGV8k{gi<nJck`Wrj3;tGUrCZluhO9K^^A6{*`>6kY@TnSo?JCF*41mU}1g z+Hw5Fyki1mJxRq?BvP2+G7`6dM(PG%^L8X=y-Fr?^KArKEqBYdR#Zx5b;^lcoVZd1 zLGmK$9uLr-U^CK0cuWLvbB_>36^F7|Wdp#TR@Y75aiEVv{=985+baI*xE&#EJZ(iU zrP_n|m7z(GAtj>0VE!*nT z&}|z6Bta>aQWGCL9Zw>b4Cd*^%Q+HHh^7}57K*>a)OP<-rIcn2-&OnT!iq#Rh}wX| zvtU=YGxM3R1K2)Uw zPb}*&NPmv@cF+GdrlCDAGd)Ny<<72I#}#k zm+!LAGIX9bs7Nk3k=WtUyk6Lt#gd`CK5=aOP}}S;(C&E?I}fr58ARJ6)Qe+^s*gwJ zKiB{WM$F@-Tvl&v_==iqX%MbZvq#IiZ3vJ#s^-WIA+>w|9 zsvOjBZdaa6u^;-Sqx-M5@?v@H9SkmY2IYRK)#xKK&Zi4iRG1!&DmO;LC zYKtut#&CNaDkE~K>OBil8^ezh_|*;HWuMlG!`; zT!gtk<^$}b=8ZZXYgTRR5#7=Mal*%W9{VRvlhkOZo$JDDTMLPn-1JIWao7h2N*Vy} zydY5%opq9y>>uO`c8VCr#237Qn(~+f#hoYQqviO;kWR#4kuAWRA}dseG->$x{``H- ze*4`<@pH@q6IV(MCys=(mXlcY`|Co6eRjBJ$g^pYh~6l4>woTo7M zvGq>$W2Jf^w_=DUcIwcUIvkO%jRZlFmaR$EFjdg&$TZ#JKC?MJTp%k{5$u9~GJB~B zgQZ6+6(_^PuGyYtDntX1Dyyip?Sn!X9bXzIGLD+`je|w^-a#{0+=7!PmrAf9>Y?|n-=D((^;Z>88kzVu_?(rrM+q#%17woQHfLClC&z+0- zTu$d_`pT*XBphHBBJzs#%;4dEQ|E`7?n&MrrvK2!?7agwuuGqBSO*yPnTDW2-(DB4 zHTBe|oG?eH$ldMMDNedb;7G*!xSd}$r!5Z#!n(OzbLN+;b(dr0!dbFwS|BC%oA_x? zIB}y!Eg=j0OHi*pg;>>gxwiJ228s4AEigIV@*-{vMZ;K`Sa-E+GbmS2h-3x$nia_2k)I8X0nZce%vkkG;+xm6`4$47+eFzwf(ne#?$$Kxh+z>@ZISg|6J zIdAI(Fgh5&JZ%2?i%>lQ0hY+*sO3He;@HMZyDfA}=cFavcY6IX&euYiph(FW@b5yc zqhlhh2($@bG6&bvYVzMbWbv7T*KA#ca8MIaA6|d{wM?CcAjeAj(oS(`v}W*7ZmE!kLwFSL$O~CfUWBT^Xg;F$lhBPp6}) zo?3l@goY(r6F;PpAqKfNpNitQibRpSK?qYL^|~B!m%pm`30(um-$)a3H3{wpUlo}B z<*A-nQs0y!gg3mM)hIc*4d!fJOp^NumR-SMfE=utw4SDm=XI(0eZHKtFCguvq3@)s zB`i}zf!|>fEovGIv%4mB3vpv^hZzZddQy;?h9=O(c~G=ZA}{`R*rYQ$ugH!|593lb z9EtiemV!Sx1{)Z5Jovn1RZn z_0>JGKASmx6=Am!P(eG?_**dqt<@KxHEu858GLo6o;fdpk{1v8M(nkLi_@P_x5k$4 zG(%NhH^Os}p(H{=%1U-XB0Io|W9+>MW9B_@lp*k(;bWH0wkgJnlLQumfQbBTGf~Uq zEqGyJra{u>4-994&IU72%TlkF(vnuslJHB5JSS=|EvB1R9mdjrM)ca>=xdj~8icNe zMg{b;R$#Aa;g#7kMSR5%jvZ155s$SI5M}sM2xp z^0xf`y}R1%Bwv^`xWj@IozNN9t}7daPEm+C;!Sqxg(D* zW8r5WUGIzMKVS4St#}sPwujVMLpHBn1VBPKeIty~^z?BN3Rq}x_iW4n#lPq({kwcG ziT#ox86h&`m&=*x?mI-hdMR-2wPQhDTc`4pW7l3?bEd1I;p}8~hppX;U(sOb;yI&@ zp%40XYI%CSm%7%oJm?o;Q|6B!v@N|%WWPFLV}$WoPpdQ^YEfdXVod3>d*F?+RQq4+TJt6I3hakvS=w{x?zWfK zov=M4tjWm3f2tGMvTNSGJLAgqvxvI{thh&dy-hv|$$r z!S5caj9z-3Z-z*X?IEuf#SyP}&~NuW8B~~DqDTIjw>jVarM$!s782C!iQE;Iz$@Yz9E5My!7cKE4Bk%o`_%XA6w7964zmGigr!z^nF7g- z5(ErP41}x<4(N3$RDb8HhdFBy>0zdTY}-i81F0>Ye)&Hh~Mq~0M8a; zfYCk!l3SC%tooxeDE*_zq5tH^-65D==B}3mE`AngCKRYh%}O8dAKkFxN`#fbwZoqEh1&M+WeSis z#GB#Vd?jW$1PHw3TuCz1bo}Cey?(|g3N}sC%aliFl4ySZPOI`Wjp=bnpJ@Hp9NOop zi)x5{Uufe;_e640Gx3~&GuX*5_p8}MGk#R-zI$Cl*$0X|G4ia3Un0|my0pq^l;9tK zcYk1pc{(lQ111f0Tsuw==Q9ijk<+%p76O60wx_Ai)WC4nxRoogFu7{yOG1@q9r^C~Ml|TS-I3sT;E%XQ4 z@$(ie9$X;6qs>)>6Gjar0b~aFJ+6L>pMBjB!AwFl*A8+AZi1fb(pb8Nh{3^!R;R@E8l;$CGNA2gjU>?Snw8`6n)Kc zD);PHRI;MhP1b?{DfiuWQ?~Xy6s9MEdp7s!t!0gHaNRkh4EX!MUzaJPC0%=RZQBR* zd!0D;iKg}&WdctzAb$e@Ij^s-Lj5!%yA3Yf+m@^)^pW7;%&n{t;V#5DeP3@E($mv{ z0vKQyzJ>3#y)zK=OgIcD=|62A{r_mX#_+hhXgx6++qP{qw$V6gY};sTJ85j&jT@_J z)EJFz-qY{i`)BfGo|!Xeud}(>z13pGXa2Tu|43~2>6_{vU+UuJY5g&)?f=> zM2HV$tI+TGwElsGl|8^WD?L}^9=qoGmbi$UEVsDPz~{n8C@5HV>W_*v&4Hspe?s5Oc~@3eR`&1Hqoc^! zSVF#M1{7E(!`?~rCI_9B_)WyVkju1XmfcW6V&Z2PuX>0kFdA(VX^3ar9~7X5wt$iN z4?3Kn0k|BV&)v{*;Gja03OGxI&qN5Sy8TKRKj5LQa2z+u`~_ge#rKRF9@my`2IFB6 z+Sc6m$LEBviM#q`ATAl43S|PL-x~;&fpT)A zbn5STtJ~Lg?$W#62SutainnQl-(WAQW4_^ll=nM2iCI`cXkZtIq1&p9`gOvGANkI$ zO0qnl&+&BfoEYh?ufQ1SV#dZhHB~QHqy6Sh1-l>hL0XXha(z-1^P-}v4p)DO5lb4S zN{)LL^#$^9untlwdYf*(q)&KNJwHU$&mstHf9y0I{#0d6e11vCBw%uTB42z+Bo=;m z7&vqP2e7nVIba=oW_w$^Vljk#Q zcJK>!_tbKtTVq!^tPtR!A;|^DwrM8XWZivPdeDy@Q1bgWW+%IVz$>sxa^)ig0eM(q zU=sl7GRM94akIQm{Y%*bVya8lEdcnYzJ8%hY4gGE1mHpRy0OR!+X#kU6v-|nD>X4r2kG^fviEC$pK%;*QDBv_#HyHPG zpC2X0?8+(_=urK#52kOpKRhDP8VZ`dcsJPb7vRB|bTNpJu!-IRvv5gjjdPLxVS_jd zdIecJK~N(ll#~2G%z4`iMnY%}$_Ks&g6BPi{8&MR*~;UR^3@6J_e{TFB>tu(chP|F zhlgZx9-Gy-4GMf&b%YIeq2>cRv8#3Al;s1DLVFDzxg}wmt$AWzxjy(U? zB#KTS1(Cfsj<`e2fkPsz7umZPx<9_foeSqxziBbRk00uLd=Ar60Y1{PpjlYEiyIc! z={}MGph(j5T1WhV>M1}(81fTRApeXnw>SUpBT;M}24_;*2T`$X!6R#XBEb}qkp4%!*KhcadV*qo^3ckY9#&zAhXla(*qRScR=-gCW95?j1Y2=i^e_* zfN-9#G+FHNVFO^v8V_X>lz;oSv-B==`Q>l-NY9g9Yj`YsJ`2MhNEv(k_%33gkej$e zST8sf*J))WIGr5X45Ik_#6ZI|Nz16w8R;L)vi-noIQv&JEVPB~vm)4&>w4~P0R3KO zV_NaPrcZ{&Vd2%_1T3-t!sE$LZ!=mJF_ z>VZ;YC~4j|cpQeDgfq;J;cy+vigbQzGMT{XvKUhq|ARHY%w66m-~PxDM{r+`6+ zEhRf1b>0R@g)@;EC#t+~h@k>{Ko{k&8vFOfVdJh)CNo(_4U{Dho%EK z9C_r^9;}`-AW1uM@Q4C88Z8=VF|worQ6hMHXPYJf!*C#^-?j&!>q3*`9nm)x+bIt` z?WD}TqQ`HyRde?ej|qhAOe^xVk5jiuoBl+%2g*rt=Ma95jeEF_;Sm7kj$3*T-pCfs z4d)a}H`fJI8= zdJ?^WxGqmCis?Y3B;Kfs9l}zm)mu}W?b#`xQpvdYix`pR;8VXm^x7a@q%3UgHX>%Y zuKfzRj=j)8>pOQ{bZHa50-PQCYB_Zlsvufc-Uaz6A~!W@cu9kJKfgZvZHH zZ@%Ai3%qmHvbC+P&(4x0kIiD^B1oE;m{?gI*%9|)%V%@hJr2hUJzG8wZ*6UL73O@| zG3$^Rx|C}CL-SzTL5cNkBb85%`Q`06W@>l1)bkb_L5y9~D^~K~0QCT5gSP?jxW!D~ zdb^W}xj9v+D8OD4F9eio+cy1m3zYv&`r>3)t*)<+N)YA~X^a6}$R7npPynT1UW1Jg zy0Cb!*w)`=>{s|PO77U#e({mfYCr$;Bvh-w^`_l4gG|a@ z72t^|Yw+hj{&#GqN@?1OJhY2ej_1T?+Kd7BhHaxI2A>Fv$KpLNeO@NwV1lvol#yB) zBk{}fi5#zQseIuOs$&t=p72e7)=;&jRsQ_GvsoI2;LBKN)D_gYNGw#tNO72*U%+B> z_y`%Fco|#7z+-%OqvuiD5mLAst%gf`j90v(zv-wbd@e(JxirSW;gOl{rY>y(+u*Wi8wDClTf!t5r%!HQiDt)xdbd@xfJ<>OBoa=bmA z%2+d12rZdn_uZQY`0GIJ3YW$9lCNOlL6PWbLj+n1S*LX>$C zRe9=w^`2dvlyWTLwn)~D)4*d3+^^0L zXO{u)75m?#22B`NIqcr#KGC=~Rx8OA0#K>S#|a<$!QJ5yL1&N%6esSCe`9YwmD*}q zvySc9%G`|qv-EDa3SP;^cg`?z7(1_*0w8dWI;XM~R4mGukN0NS%RCj>7})=;j8L6G&}J35Dg5XdS9RQ<);xjMt3S^P2+UE2l7fsgp|W;5iTv zc_y>x)%hbEIT`hC(L(aXtHp%{Y+>zx?Y+1DiZfmrq4T8bXDyPUSLm{w(|}v(7GTGK zn_jL#M%BYfBVaWA$z*hLsxj*f4{88a`LCcRubUYvR!>jskD*&S6`RT@ojOfPRyr z5$5p_kTMbukR{&343%q*F>%SXuE<0uvCJ{-c&ahG!cDyP7fc;s!Ug7sqQ#OsUI;<> zstJql8zUEk=lD~h}=mj~h zUeDosFu_M-(mx}*LYG;KZvRHs#8NNG7xK0Gyx?Zink8R4IXT%S`?M7f?3OjFS~@#B z>*|pGuF?(tgT8)P)n}6nM1>CXmd95 zg^ttL7Naq`2_|hk>Z;_~Qn`21E6t0P7o%<MLzhICkyC zL2&kMgk{x1EsC8g;E<})>Z;28P&B4gVyS{;sgUjbi-P%cW$O6wZ>AJ z`Y#HU2(1=)(uB(=N|hq~1@I7{0Z>vuN=+m1sVs(uKA{$228-w!*Ut%f?#qtGrmq3# z0gjr;sVj@J$M_$Kce4OeWAl_I7Iwrc6>-#8~iE(-FXdQb5*y5QLWg#~+*1U++ z2P;|xt);_eqc04af=FOkV)J9*!;=3PxXNIl{-L;67%t)rv zzSF^K^4DDM1v8|_PY>1ZNbN2;>(d|mbYRM{NTz0F&UusO%~rDS^MndJYguqf7ZT)S zqAx$w>l!wmtW(gtnSacp4b`{vA$*bm|AEG+tjw*LvE8IQki2I@$&^{OIkDRRK^Cv^9b49?OSEd zIV|O0QGN$cEdou~Ln?FrJOfLjWY3g!C(RqKl=Pn2u(F8?DJn;#)3aCI3Ck z^L~BihIr%RN+(_>>M1h05}&4|uZ_@OFIrf{CKLO~rL2wtZc7F8A6!pn3Z9UglAJ7y zIsNz#2yg$acr zmC}Z4^zs$6$nw5u2}NL}@})o{GY^CNB$9ifR4B^B`jQDT2oqzYp4E4Uoh9vX_HIxd zn$d-;?3_}7`FBAl{MXBrZ;}SP(}BO{!g@79dSF*(=tLhNDpn-oC$k8R64jOU^*6v2 zjR?>}1qww%o|hyDV6Nkx*#q`%UsBQ~B_+D5p#jnSu4>E)gy4F}wgvO^*Z$Q2JhAP8 zZ@Q)H&+90#kdj4L%MB)CUm6=5`S|(k^t%q!0HeFy!(V-Eq0*D)4YZOWq2ePJ*y1rn z`B-Q~M!$3cu9&fo^59;~w-n%@asYjPY5Cq>p{@P2?cTLu?g9zjG@>ZaOcNbs^wYK# z!1xs%CyiI3mvfLAH>+9>btjc)g<&-BbNNfUOIj5xngtut6md8|-FIF`(wYyMH}M&( zO33Bc*5u{IY1yJ6VL>+?*p_G1^UQ#Ctg{$7RRDd?qK3K5QCc%SS&}-9n~M2a&P^J8 z)3gbl_VKi_{J^egK}rG-(Cfm*&t|aR;OexOtg!w8|EK+@>0Iej`o6~7G)a&DYuWZX zw}E>X!6)mFGA@Jn>$whm;jHXz;={il4@j`V-$cJkNDKo~8(e^ZERZe%Af&({j8RZ9 zSH5=v_K5<`>JvQo^}q%OP{`Ch2lK#;zx`kXQfrBU{aXR=Qt2|$td;u07uJZ8sJCtz zsc(w(;Q6bYfXDG3nOh495`FJmb90#(Di)(qfbzLB%5&|Z;>E=zO&ou()J`LMD%!-% zX0v(PXx_8akEpF%+0gKycj(Q(tM2WpIZ07MCzEE!Z_;2 zTj?Q*E}7kxp!Yc8CYJRQJMu>~5-rsEtf4uF2nG1H>C~QdaXn7G2%Du+UcBx7eP^oB zD}24bfDtPKpCPic6ZX(&Tq1ltXrHncLr5#y%m>u$%L00Tx!-5e=v|(L!yxDszx}xj z=~6VsqV~OiHppF_b&%rNLq;C55GQ)Q-@9uSN|k>Z#Fi@O zP*wW-qk|llYC zVSFETwwhwO`#R+N63mf{r$^-vw+dtBw{_}pa51mH{#G`EE*gMb=7t|UYu1$HL}E|b ztw$kJN*pbWGQxDYLW7uI{-I{JOR&!hhvgZ$@lZ7{8&DKq*Flt_e z%eLiOiCQiYfW3fvZ;7Hlj^uYA;<|Pro98Ej4 z(1``4+g?zI&qt$uJl!MD8-yBvep@dKC*K(s4)AGgD$xZZ@VW$t6LQqU=XmZIj^}Cu znuY@GDRGQksoZ8H_A7{2ja3JPeeB{5Y)*UlF5j@FfQt#OcSzA{OgyLh2tV=C(m${D z5uctBC{MV(d_2)-PY8V2=uSi;<*s@fe?Yb9NtH#d#@PfW(;RWQ<|IRgeu@uRLhg{R z1Uor`SlVS5Lk?KqZAL|~UTV1DH(?izJ3Hb$VZkEzy&gR&RCZsJDUscA*1AfMLj-|t zWtZ-vCEG%l7b?##)RSnw4R$eQqUaiyT@TFJJ8^hiNLirtNNkh|-up?(cUoSATeQH7 zlXJg6>+5O}d|cK}K&)H$jQDy70NA>2XM=esd(fP&uF{hZu)7(EmWjk zsr^qQWKqxGwqhjhf6*nF2)jlUwM)Ib$;_8RxNxiCBhM!bY*67|^)GT}tK@Z{oSipQ z>$TpI^Yc>gtPpi>RtA@}^j25ImTFrOvJigXFT9x#F2{|qTP3FT8By>iD`q;Jj zI~Ad@TGiv(%+C|mc9M%OnJdA_owK@$n@I6`-;+#NAyUVcFXX6!Gyd$gRMM+RS=iP} zaMHh9|79AvIp>g-y!9l#1U_=w-ihG(APK5LrnYKrMz%fZ)?rf^fHX~feTD( zrGNOENVmI6Y`>BBD#sGjAt|@^s-3Fzt?clRnGc>a$ffXRNjbR*K!odp;x>WU|Br|5 za{czrjIfkpqBI3Um~h%OBPsr`v!~;35r>A1Grx6frhNayGOkd0hbBJg=VlJRqd#Nk z=Qi-!ixmk+`bZDo#eJ^i>!yx>S;^xef(O3*>_w_tjKg6FL1PS&*=TDU{-!l$t{V`a zMg9H5xp)Dot3f?y)zX|5@DjQ^Tuc-BWPEa@j3WIAM2f$oZo#;56QxxLs_}2g0#>p< zIk#+W1&!-Y89&k{Pm^%vJKbbNO_%=2jw7Kx&br+-#7Da&>k824jX(c|-Xg9e=ESx0ZmH~H#}GK+~1HQvq2Zkx>N4x#>sMb z@?85b`q;71(TlbK9qOw}cfGWMwWhSDzqmL8arE#kPVrFl)@g7A0IT743;?R<+y=F4 zXZF0Cz^37sPmIdZsGmqcz{mNz0j)5nxwesj%N;rLnfKoz?u#52a;~1$VigikvV*s> z2mEF%afj4g$+{?A#d3teXt;k<`x~#OeIjTmVKx8Z(d83?8Xap zC?GJezWeB0DFw+Y6&v8_Z;H2FGbIc_j+5sqab{tpU`~BqBK-sj;XfHC-&+o#Kj!y1@9oS11E7}R7YwY*W^v;G zV*$$h{FnTvyr= zfc2#JTx! zF1ue6UD?CW|9M29Q9HLny8sgW9!QyNg7s?|Taq%mFmbx^#i3Wcjtcm!{iVPu*uF(j zF`daAB+Pec#s7trj1@u+j^lC^tF5&F8m=kpr*hZ2&cq(=N+mRH+paOmN^6~NT?kLM zk}Vmt6H`wf)yNFk*g0L58_2NKB4ii9?08LmUsg=l-fgsGHLZn6tn#RHBZE(01pQ(9 zr0KcS0cS4JHfUR)?FQyF-1?^UHf!Il(J7cc#ntG+A`-EXq0hwaN%M@Ri$nEN57u$3 zr1nCzd-M^G9FZ2lI^p^3cawT?OZ^^Z61w#S_t4`2n1~M!4o;b~1IfS&bqENELBNJI z@L%C)Je3{_3QGMr_n8(dX!16ve)9D)0hS3ti~)&~lAWT8gp5uzaL|O7!&p>S*!R`2(>9yToKmZ%eqldTZ zY;sc$<>th>u+StWp>ik=D6wh~X|N0SILdcV9r-%^C9Ro@DcXj$6}7fMOefAwK(J)N zV2BG+VuTgEeA}N$r(i)1u|O+SmC*l!DNJnXVL}R?OcG&a;yAmMpVtb3ofl^TIlqiB z{=37Fh7xO8VZnI74{g_z>mslq zbm-;1Q>b2I4Y^duOp~2(QqAb2O&i}s<_40mTvz=-t#?mhEc)F-UmR6H7AwPP87n5i zKy*?c`;!iO*V)^7Qu)ZVXk!qcJ+M~8yHO^YMx5Qa!$lL2{2#WxQ{J6zrc)v_#tSi? zCCzhRul>@X6*IW~HFbmp-<3v_*R^JRkPeX5%&6Y_9Y|8gdZCuzUvQ*ct%{359;HF7 zXg@%Qbn>}n_;1N$qwIk0BsZ^H1Sl2$wmk?PIdSpaAKTFgOb9wfg+~2W_tHxWgAZ4v zM#7i7v$Qmsb=I_=r7W#rB{#rUUD`_nsOo*3iOV7KEZD z^}+3hDs{g8@&^IMuPCS-Rh}{HTx3-&dy)#OXiyHoD_*qi=cZ%eqz-+KieB_6ubOXv zdt~a*5sp6v-WE7`-0l2*ZNHndN@0Mu7j2A(O)f-4xmpiR*;GDw&At!X{>a1gzLE4u89+Hqk{!e6jOjWeUJ zYb0&A|A0=j;G-6C>^!c7)=5#pMdhY--)StD&(dmZ7wp@*U~=Xlj%M$$4LrAzn*O|O zkG=)#)Bt9d@25>Ov)BOJ@C}$xUS$a0Jhpmr!=F1f#3aa2EgC$FljBvm351>}Mr+Ac zV9iq+7w!*Vboa=WZ&1S^*`}?pm5W#-p;J<*)UK$Cq{ts(x3_V$k6vg}etZMDXqrER07GRD*uSDq7*YgJb0o6HH2>sYH zqNaNz%9LaQ(0zW-{blL)Bb99eSFLD%2<&K>4);maD68)TNDf{*X;r$M@OQK8%ikE< z2GPI3EB#otZ^8Y*ugWtBB}ri8S`A9761oPcwK^(@;iNw~3sJT8^K*1hk@=pf#hB8i zBqagmO{R38qxlkmF^Z&=_G*Y&p`MkLM3(+i`3PY4a``>XEiC?_%wp^_8?LRu2!*<% zLW2qvx?+Lx`zHktaIM(=MJZ_d#p?hyQkJFYww?P(%n0T%b)uB23dNrjxP+L>I9sVgoR%{Q7(xq@Zr*x?hB*aV!5`O5&@(R zIA~S~&=d5=h6`M?O@si=#=*2rg#Pz_91ZBlPrzgwwCV#1`s@RUU0Tin5|?M`o#>i# z|Gm!-`|tgJ!rRJtV2cF^Sbk660R<*v-vbIz@$E`}x!hHf4w_Q`u12t7cjZOfTfH#} zeCazV4yRZRB()WX9YjGu!W%dRkCNZEbrXkj!F_n+KSr_1EbY4*yg>t8aa{+vVo%5x zRS)0JPpR%_U(*W`oZnTJ7bJk%=2tgy;O~z!L7AzIBZl^$Y}z^`4%z=ydNDN&;z zl1q5AR!j+XvG-ON-baE!nhsvhYuZu&weMdOcGkzp|FujAf8oC?_P_y3{_7=&Vh%wf zDF3zj*uO54g{=xJdP8dKandRGfg-eDI&oo&YCSfQ8N`ZW-Sr$vop*R~LA)&@{Mz1^ zFlGuYghCtr00riyCxm=(-?<1_Btgv{C0Msot58gWKc?|6&=~ zuPY0D%qRneC@wLzH(s<~&Edu_Jbu2-Yb{4;RhIm!vD()=b>Kc$beDW&YGWkH^|MXO z23v`mVH*{B2b$mhibZ~>hMDlYG)m+UH{i+(h}GYA^je=er?1&KK0o&OLQ}8u!-mCT zCCfxJp+#~~kEb~E*#eDj-~2b|B`=^pfdypS83XqT3cN=O{`$t!2;6cy^~U_zC=2_` zc=B3=P_uv&AK|}1{jk4UHNaWnhwb*kRO;vN-mi=oXaJNTfrkV7eo|??2k-w1#^Zf! z2~gAlga-gGC-%FYE0T(TUm;kxfQ1YOwDcq;ygCX2fqjp&)fTTCbI@m5Sy>WIXi&nj z{tN%<6LY1*J|V@Hj8)|Rr>xe3e=%%&Sha=(ej#v(ixkRL?J%SplsrAsLJPj zKSA-(eaq4ipzr^FqReB?PRuq0`#kA>JxH2@i-SYp^>Pq^gY{U2+AP)f+|J8+NKctJ z^|J^7n^B-$AN$M!v@|sBR_=o^@MVMl4V~%@$t_^yY}uKvG9vv8=&XNfz+T5LF!CR- z0&x9dwxzeA=P&l1^1n+S-gXRLY~*D55dEwNAwwX5DSuz9=R@P{+U3$E!l~wVIu(=& zTZ?%`)$U>R^}aI*Pv))?`gLxW1P)@^SU+TUJv&Hrmv=PXeACYV64Nm%bF6=B#pCO+ zo#Bg?_k>W^m0z5ffByAF6LMT1l6K&$AE7_Fl4`g~u?7v6)MG5nXGBmQ2QqB%zkT&| z$Ms;mPte*K06w*JaF8-YKt$|mpxz&a4J7$o(s7$><68klBKLj=Dj0D$ltJO-&Z0w z7cY#1POa$5)4kC?7IRpmS|__9hJRw0A49-|_TbRt3nBEI8G7W|^68}~;?m&aQOoas zEn`P0&~HlrB5aehjC|$kflSE=CuHzt@~R7i2!HrKUGL*_+5R(q1Nt%)c+kQTB&hp-)n<&= z3Iq~D+_+>8nGB2){7eB3s@JlWR{qoM1fZN|!x0xJEY-P!j@=Sm_fmV2!{{}kZ@4xS zR%}~=P3h9_-{*jK=K~Z@(~9jy-^V+^nK5OniyvT(A#p|Z=u&`&y~!q#u-&Tu1&A%; z)pB$YZ`yPYyKsYHK|E!ku-tQh4IK>(Hu97e@OPr~R}*qFVRDk8E1*J1XC4@FVln+Q z<-;EruYmfs&%rz@1JKX>u~CS8&v{etI+yF>!(3injR9*A!{UAPG{|Y<2 zE_Zn_2Yq(z(5vgd9``f3ng*GW&`nLS^`+BX;Rry7+~9$1g%IzlOYa7O13){}ziPp3 zI}fs5teJ+m%3)rrg*1Z_&Q7G$k1ge-Ytis19)VKJ>LsauGxVg{;ovzZ&%)7|h$&d} z8$k=XCy~iZNFb-9a=D^0CnfQ4kC_t4xeGN$vFN**ddxb+|OT^yB zhB-{?vBBf#WY{uALlwz?0vF`%&7!0x9-7-~STsYpkmBA_Xuswi&+>rhUE z;*#uQ5*|eX-{75uT@`y%DQU#n2ME60`9=ZiTo|YqkuPMCNe#vT4UrymgO^i+o&@lo?adG(k8wfUaK8Ta;XKh&u`}1* zYyzmd%Glwhnp~u~`V4r_3{)sS&=0j(8j3hARHV+vkmkGx^Hev?e{7PUU ziuyjUSY7lt%`HXfI1r}%Z|0l~41vmPf*Eg+{Z%#KKEy-YfM`CX16UMf$$G=rHB;ZAIdDMaVpQ)#T}MZ=*g8s%(has#}?yvV*6?8D_nOcAfJ)jc#$Cf{^ZRj{OBqPd(%Kw`1`_bz2M zmkU8NDml{?^Fa01iq@pe;HO_JPwf=@^j`XqJ*i=t@Bp?|9Fw)0coerHC62+ z7I%zpEQ>76ru7Wd)Ns%0`GM&UK-Ng;R?6X{e?^EPHv$kgX@Y{@zxFWTb7B9GP$@J& zGIK5}9Ced~4W462xmXD5ahWS>x>o+QZg3gM;B9G8OUFLY7}cqEmn32Aps2Rea9T`J zPhXHQMK^H{rmmwQ;N}khJTyST!=S)p@3b)_;Z+T)gm8wTbgr@}p3%}K%*M0-#rx>% zv^dnbucW|;n`}0#jf)`CU;bxtW*U#X?T@uP%4PMhKg}9z7E^lcSYcnc$VRD#nKuON z=5~`U5h~YX5Mv{9I;>xl7?Xz*MO*abN|UV1uGQHMQGTjSG`nK8 zIQcJ*+clxH6{V+#o^ekOC`6)`rS4Eutuq$~8>yn!6r#j@G*uE_<HAj zri8an??r;Et8&K5Q5eJDp~DLPs8j$5znWZ~Y7N{|E-7QpJ(D`d+*aS}DQos)1)zfE#>}ME zT@m?th#X!jfyVQyv|>uv;u?bYS_Cs!BD=ZW9B2su8Ai0$1u?gKtFC1IwMhH@7l(rj zFE-yW^X1U+FZU!ZclIeH13e}6T_T|iKGvQH3X3J99;(YoRubFgEI;yJGJFlx?x?Dr)oc?A!Q& z{60&JpofXXZlM4HYSEX>Wr5@3g8^D(OeaW=mPzRn^vcrGDJ?_1OoH+xJb*9ZZg%@R zO5a3R$RRs)<~(W!&HOH>F+7AZWYnT_N;=mas-zj4n|%hIAYudL%-DaYE9mKb{)*D# zOdg_8k)O|QXXd0#A;nuxop?2T2j{}2N%1!nz%b$jtHO%`cSTzr&26dRUPaC(({5^G z=cbmmehiq+4Jc2)Din<{j#HvE@P$SWmnrIN^Hg-OkR;S5;g!1@-`(Eg+Q=2DL8L-J z6A&fq8wH8qjI9xj?2pt$@dH$zX` zS39C;nf$qxfRDYeps&FY2Vc*Z+b!)rT$}<}z>j$qP*vrUms)5@&FH9Q<)Fsk0R9wm z7?ai+Ihh(L+x5JFU0}EzK09lTyEVW|g%OvRMspaC8W?%<`a=>%*dEH7)2W@Aoc*bA z0enhR>N8K1qwVXdo0<0h9DvF_a~`&UW?tj!^c4ld=Xb|cc zl5s;+WvQ1UWrDh>3K6T2SI^Ps@7_w1P@t0S2q~|lDLvR+oif0ZJUk6wYVk#a*|WN_ zo@v_JP5EhWD0p^Q>6f~qOp6X-#54iUi1xL*!h%=}1=~v4)?g7ivA6liE8=d5XsBch zKZ}-tpV^?85_bvq$b(_}4(#$cTxhm|VU8eO=S8P@Rib2x^HR4!gRyaxPDPsRGh{*W zBC}#fr!R-2m~|!5ETvaf^g;6W=nyv3`Ko z4a~riV~fF|Ll?)EYrFkpL#<(ATh0mlF(UyJVpu_t&{T(-ploK|V9B#@EC$XbT2zL6 zS2W>g+KL!@Tuf{{qVFmAELuFY`hQq>$(dw|HSyL#-=uD+rYB`)kl67UG_%EMj1_Y- zlT(SeUE5~?91xA=Fmf2ZpIetCx6Qf||2o{B1Qb9hm zx0HfTvpfZ#1Sd)kA%{hfpH`uIkp!uXo+pLf%H7^vF=NG+J^M^g$WK&F)BP(&Ob`Me zd#+5Soirm&{MV)m>ykw25$v>)n7oX<1Zu98(^Dhwxr|4N?5f%7TCWaLc47Itre#~C zf(TwKV8!-tA3PUDp^sLu&&WyC#hAjJB}Bpwm!q$fk)F6(w{OxW#Gbh~up%5XGU5u) zO28ARgn7NmMh>SN8W~ATOA~rbJRHs48Kce@$9^Duk!6&sHrMqGcD$3j(^#0FidZaX zy$Z>c%df1-%3Ce!Etf2Y8*@@i!&cHtB1Rjx&7f?x6MWN~_9ogB+8PCvQ z{uQ66Q=QB&11ah4G{8<=Q=6AXdvuhHc>8G($Hqh6T2C2TB*9sk5ul(1cx?wuQA34Y zKG!0$EjN21E9pH9y#9J!uD$mMN8M!U+8KM$Oyk_U*8{4g@YZa3FRp%Xr&0X|p~I%J zGZEhBP2tqcwNOmKYm)HMi0kbx{V|J(V7|TDFfdUPz~ZlUZ>r|2Q>}RpzjZ^+Q0cpu z>Q(Wy{kEimLy!aDWUrq9oa~Nik51VjZaQi=KzO*09OI)j=F$l%0#6hE@?|{*?9b<_ z&pe{f0C+n#+L<>9!7D#)go1N&Ci70(OI>#Bb2^^VP%0M{r?6VKHWuTNrWmLgE40SH zqPLh-gx9iOmtZ?G7>LOiB?V60Y5>4OV$QgsqsGl2El*AZbH~8sHZB&b_5}+@0!q4z zlY*|Gl-92wU1JQ2G|7ezkWx`21kk(5ndfORVhEO-4lLK>~wvp}d%KxeKfSzm+wuo$k%#W}ht$6QJ&njpSk zJzl8-CwFLnK|_`tID|1p;0Tg33M7@KoP0%~B9-{X!$?mmQLIVIRK`z{!|x=C6fI`e zMPp@?$aAWQHOfr@lv8l7Z*IQS83+PmE?)pr>BlcHss=3qi|L%l$H&6Lom^%i%n`7< zkDG5wx$(l!h4m~-7(>T4sWueeA}CExl8P#JIqT=*%~pQ!Bghk*hhZP36kaR&*!GDWo4Zq%iKT-wMp|xiaWGu8$tlH>~f^ zPE)x1GP(Jg$=i!skVUtK2=2y5>07KsMud_VwpF2J*w%l1 zV(z{i#x}Iw=zdE5V&L`h_V94J!p`xHc-ZS;G7}(G2S#q)uQ?3yjsj`}|LYO(aXE-A z*r!0HCMp^%8Dj4gnCYwNis{Jvl`0=yjl9NJCoy5BQGeSJcW1fqaX9;J!CFDT#=cAp zBdb#XRo3Vn;l;6UP=Mv9s^6>H+M&fhCxZqYA&VT1bQWceXVQMY?S(^-mAs;QN%cLH zj-$xm;Tx)^WbDfHr5+jutNMF=msQ5#?~m;rGf>!!t}Ax;1wwHSj^ew-CioXg6OgVq zZi$oB1@;n8mDC{vWQSsm;9zxyy&d+`@KoR=FZF!Nc^N5axR~r7l4>=YTmq)M4uwZeg1uw4qk z=ew`%xxvs!1E151d#4u@?z8K8Mkl)r*9K4T@HkxVN|O^NVL%WW-0m~u-(lUlcGTC*1ht)PQ1kRPPj(miQ?4ueoAHi-Zb-ivO+(!6NP}R z-{L)WSi@TcCNc}iuEK$UO#30wLqq>NbfRNmaBTQ}m_EWpy}e2xb*Yi<;>sF3!xxH@ z`<}T|EB%n2fM=|oAF+neQ{+xoh*yHI27GT5@V=3-h=vRn?k&cSjp35oat$K>0i%=A z5L2~J9buL}t>=XpFlGP!SEV(~=gKg4irLP&i{NI0Y*guaGX!SiY30UbrO`}CNXUfx zejqx4?|a_`0vPkVP!8Y5{oGo(K={DIp|rOCKvcdr8V%XqwPxozIB|9qz5fi5wga6^_tODu^mMnS+1PJaH+%34fTX2HAySoQ> zcMlFBSa5fDcXti$GKV*B=7+BX+}qu!tGjB|-uy?4?Mef8Iai_XtVdd42O|wrt)dpf zFef!St(d&MTGW`|+I*LLMsxuT3WPft-ZVC%xS+|>rL}Cj7kJ|z0I$|*Lt<8+~Xn`OoevsxsK3X zd+<@^_DFxs^DH`jeHskwIhbU!9d&70Tj5(iL1r!8YR>Cjz!&>c!6U%tE4)KOqkAWE zuWz5~%GdF5Sy!oVKQeEtaq$MLtJ7pRMk1@J?tHf}!hgnfj(lrO)h;!(p|i4&ENu8g znfWSb>7qy+Z3v7!>6wwd&8^hVD)kYzuLpZ zuiEw^gx=>SH0&w$Wq6u?<6(&8i83guMrp(Afm<%b#1XrO9j*290znRq7dm)5j8ko1kQOJ+ z-u6&*0)KAQH!AiYyFF`U4(2t$1NSn_vhE{7MB>)0MWJHH#pVC7){fll^{P*$%h zD4}{QA8?8Kfo=Kp)VjcKbKk2ag5-8dVk{nA2Ny-jjwYVNX@92iRb$Zp3s{OztBc)N z4dX2h-zeF-y`%uMBr1qHSf@(c)o2y$48DVk?hYQQlE3hub=$lPc3^&&TiB#WKs9Kc ziq(le+CTm={2zeVjO`|aZOnjyY>k$NOaM89^+s$zT%jJfN~c~{&a_t*)XCqMs` z2SWMZR>|~)4*c~t^fQ$q&h*sXss?uNV`T7IpBWVu{`UO|{GLHnI~z}rH^VZW+g_+3 zy~*wsQ{2uSxlB$+a^g?#C9|;fZ%tBr`{-$0>$WvV;(qQ;B@_qDM16$b+J^eqM4*zrIm?%UL1BX2v{HJ3A zN`#2Se{Tr9zDe|YW9lY^K5*h)lfU+&Fnv4C)I3zo#Gzz+gh=*?84sZSg2@UXyc^K# z*sKuptBB9bzVUnd=XF7A>115I)}!{2`1M{%8OY+>o|v(Fh*&$s_8IUy=B<%HLVi~! z`s=-s@1jV#-y2Nx_A+40YseMRlj?2Sm9dzL;Me4e?(^0!r)^zQf9!5<8eO0Dh>bS` z+y@%H=FcZ4TR)3G9!n8#__`qe)*8F-W@YNKDczbN-@ z4UdxM`+U&NeHvY+p!n7%13{CPo!Q3c7|OUyMdrB;pXlfeX^gf4uD7yp13W62{<(jb z19`b+5pfjCGK@oC&c{eFeT3zbMrmUZq!V)KHd?UH}SKWpl$OHPv6nft+ireot_Q`Ng(tKj1x=pMUueTv1VRIDa0=JasXo#V{~f zQu)t6`VObNRcw%eqT)2*!Zd;3_I9`}$5RfQ+jaf#o5%YSZ+{%2u#(Eb>H9I7SPxuX zb+H^i8PmbT&0q&lT^|Xx@a~L?GJo|xtDMr-)lvhnMIH{OBJ@n+P0)E5E-_H?Ej#v=WUF`lUo1W0TATzyK%x0&|#3grD(+LOV1hOohoid z91M)g&=F|j>8j?>M`}k%qk0+JRVzvHnXipDaC^?q?$Se zX{Wuvsf+e_T@Q4{h6Ss(mXvLI|At8PtdlSt?AJAUc5q1k(zge1D;)b;!?tVvzR!;6c&GLi#j#@Me9hfNk5nh0kN%1&j&p#DVnX`<3A*j!-T*Mb zR8wnAwbRxgcM4mqtm3$98*p*f5goYs-Bfzu)8z65&Ba815OgW}M_Y4JwmAG^h&IOO zJ#7tNfpSk;J?V8B{4iBEpJXJPlHYDK&wLREWY?sfW8-~H zBc@94!@n2m0bN<2KNp~?^F5!|93LNlC1=Z8U%tKM*>w2?BE*SExSx#UuWX13jEPEn za~pB3M9}3&1TD^OdmMMdkJGg0hqjPrz=M8`bT@q&d)>(8mes3It!OzpEThqKp#gz} z%+i-8vR@y3%8<3I!p&ZGZiO`=H6|~~1U62q;I#Q)n#9q>jU@7!CVbx##f?UO9RIGP zSl8P5awuhZX<*9dzI}F!a1Agf0`l9fGMl?Oc(1A;kPUmu6YSNB=N2hQwuz2e5?M(n}4F?9pd+WY;o&5!TjRT3OJZo(S#8R+XRkr;-LwsI4 z*Mo4Zb++LS1Tr4GWkCW5zfP*XS8Y(Q25|GGA}5gq5&|!j_HV6QRuUeh=}*e|&NK3^jT|NtLG74QSpYD&OM91d!)?l&0Rz%Tk!Xa*& zwlgom8T9Hw;}jDqWRLIv<(aYl!I{I$W7aQ%leJ$ZN9grAK(JwHlHD2HmHP}cTbK?4 z1{O;X3@oCjHua*4012*TfF}gcA9Sfq+2Ht?xh2?&dnnz!#^txj1`U7ND9XEeu~^|sF(~HJ{^(Qv=$2K|__+?{=cr9bt@KKl^V}&(-s}lrd51uM}gXb!2`U+lx%0;?Y)52o)VJed~ki z);RY+uiZHDP*n|0O#l?LP0kKw*LeZEe)m(TH)AOp9g2)pe(`>MN!i{!cTBZB?kCjz zYAq#ymYA4PxOUf9xriUF31;k;7g>`ih#gG0u$cJulisdx!;H6&Ynd}v0~;>>j0j7l zbb8jsAI1SF5a=iJq9|5&DsFR<0P-VKwA2CORv3{~?LxI+Zsn}QFA|sTiz&w;w=)q; z@++fEJ-j0k!Qm0o0>}jxvW?TJ4WGA@uC)Sc&HDDnmddC@|0m$42slP~omB4hb)fxg zy&jLmW@fOLI@1~`&7kAUK3%f^>&Z>tel=W1Q4g}RMa5!W%B{W5&CRZ_PcSsv2R6j2 zC84BnC;0=n(KK`X{+0`0CdVSmeUK#N4;R5KM|74{;S&J1GWY^s-MUbO88QV6XV+Z*9K12G+M)2h;HexjpiJZmfN?XIUSp#n&Q zl9@Mg12>_Wgu$SweY=apdE0j19daooxzOIPfY9kS(C1Rzd+{}j`@C`Ia)6*%t5%Jc z-G#0hS2gFm1H!grVe-j^0DXG{N)e+L3D_pV@(G9AEo8sG2acuT-k^91174$;&MN$P z1K4#ZC>cfHJ}X&YI#93o3}@yz9-d@Wuf-}5ow~kLzds4;cP}yi?=z_!W=~X~-_#&I zk52&f_Ozeqyh5ev!SEW;Bs4rj1UX>Mj4YD9671Xi1qsJ)U9YWs3*vF&w(gG8+s$qv z78X?H9mKH;<%bl!B8gR=%F}?p5Pb2PNE0J;p$3*Kz5}3ajXTlY_(0tb==NyTqGR*S zWJuO=yW|G8jGK>ZT`MEBFFzcDM(78%mULRxr*WC%cczv!wJY$!YcYzy@R>!L*9&jU~@fg6NqS!u8cN#5+BMx-ym<7%M)ePDGr z>GL)Y6sS|$#tKzq2LzH&rxVRcdii5N&jG3%x7zJI{rK;CLLZ+zVwEPWy>N=SFsmkL z=d`8Z&)~}7SlDsr*P0Y{$UljY()Py4{y+{p%ZHHG7ONUUkiG((L}mjIeLX#5EQ zOwx73`ySvV#VHxS=Kq%=p}*|6Sozrub|Els2CrvkKrQ( zD8RO9 zGymW~#XcvCnJl%FJWy_egRnV>fvI|4)SVS4AhAI~os6mhKFT37PLK*pYMdfb88U_O z_i#UTNLV(8L^+cKC&!;%DqMB;1n%)@(cg7MG{r1dBa?1A?%gx`IKA8PPqbtQNVjeM zOL$+DJg_5fEWrG$_}d;(vZ8eXiiY0P!=rzw3R6cK*QVilFpi{`Mh*~xF5jTLCHrO_ zV`*)~_oAu#=4p_J{gu0I)YV|QL?wkS`3xr`SV6#$h~@885nLi_F@e#m(f7f9=CFRd zJc8C|y^4nZ4^8!Aekbu_mz#i;pWSy7nSgAtNDLDo)gM^;J z0~kOQ_HfDCasSjjEc2fOx5rqy$^iqGXb+`K$`DrNu{j;{p(~ivTCyb3qoJ&e*!9Jw z*&=@ur_#|OKTCe`g&YjLVU$BqH2n5U-=2#QbQrOs17B_-bjzF|qikX($&O6nyWs#6 z{ac5hP|u>jCf6wHK?=Uq6xj9LTbym;mt-`5 zBFGF;58NoDX$p}Z5Qsr&U)w3(p#|KRCC3?j&YS$^vkm=rqz_LZ!ys`J*lJ+N7qt>^ z=N7>dIQ=Oi5FpPF^r_tlvc$8ck_k2b{Yu@64G657%8de2t)D-2X}hkm=B~6|bOQ`N^uXO z)e9x#G`xK6%_4{8lcK|j(|(zof2Ny$9nOFwmcWMj%Y)F3ZE3;DlR2R*J8_NJJwYKo z7(QkXf+j1|1Usv~#PDyyzSl(<=#u9{F0-Os-nDg`%2+kYal zPf?+(79J*zVL0C`+3S$nWP_5hDO8cAxw}K()m!`Wu$X8koe1@1CgM^!t?`q}lGBSi z^e5E`If{x$l~L)f3;VyR>iFMOw}No-{}CkkA87qX!aClDRxeaV*1&}DJ8nAa#rCmR z%99VT>?Sn{DIvZ{ZT@YSv)d{!y&JLAH|7RtG8cHr;>1C!j>{S&bNT18jSmp~gPx)S z+tMJ@LGa775^6MOi&5uHh*ie=ot7e|CGpK#cKgfaU91XL?vEWyJbj~|3f&XCjwGn1 zEV&TE{N=59F%V>M_y?3kDiP)AP2el2!@GWzYUQzK<&ZS?on#z8A_L_!O6zdE!(1Zu zccx8c@>sj@Vp0R*sOZ_z?-VNP9x9YmV5Kq$DB*T{>2S({82o~=_>|MCn;{+5?xW#p z50~~xaLQvdalfs&N{5N_UkUDfclmp-bHah)hWa zP977BR{8Tzumb6pS%Pxvpx(4YcwW~SV1?bawGD1;1Q!-Ogf2u3zjKu~gl!=$VrEwa zMvxB%N(;8*>N+Mbg7^~nAf#qjGRlucKuF4@^M~zcNvj8)4;po(z}&Tjp~upw5uH9S zV-2koa-b#b45h)$1!l_AB+3tCw=IM#F5va)WaQ`(8w+- zf{+pEvCc8_$j&r(0T8??fPhxz!)jM#b48Jxt;8VWXUsLh5QcL18L3|Gq3V9CWoaZ+bE_ z5VIJKpY0Bf|F+mRDlVYnWDV1Q z${F3A89=IFzY8AK1|0bV{h8qHAr&~elW00asI~12h_Q4bprdXhWN*o>K61DN)Q&jBDg$<4!)DO+s2+ISgE zHNc08n8zsU?n|f>TG9?Lbiwykt2VSNCF|UUpeeWoDoBWkaL2DQ1Plbd5R$_3wFR0a zGW6KF*XTH085)(n#*ec`4P_NYD!)cF*R9&_Rp^x&has*X88T%%TNYYuR@svAoecCd zg^9pq3!A&HDeb`w2ksjsg7=?f*L|H*sYu|iO%Emqno|3;rfA?HxX+X~5}U#SyR}X7 zNi%EWVg>{<;&D^q8YcC%s@6QU0d@A_Q*i4e5S2OU_rq+Hqs46@gt9Rb7pUaF%r7k5 z133Kf;NV4n;njb_L=Kb#aAtdLxxRRZmI5}2vjD;>CJ9BI6r`L#;nNR2(7PuTqx4ZS z3nAw5pN^c;CAxxPo58P2a$C!)i85R-69n)-aZ-0e{g3l^`ZFVx;#!dPvgLLC)$@!G_w-qkl2 z=6pT#h=QOr3in+ZgOx&7R|f+Pf3ub`U^cFRDUwOmpMk|<0IrL|QUU4`)ih76_)7{6R9B`bex^^C9Vm_6GK5))&m z{gdh_E+e8PFK5cH+xyLYG`p>xub8;5I6r5+;AAAexUwRfrPA$}?ckn6-$|aypVG8C zoA|lys`T>QYQY&*W%_nk>Vz>Yw)B?(uVUIVH3!|Aj^T!e8r^N0KWW+=@8kV$+D89w z`PgE#XJhO3yMkD6lfbhu0)r1>YMB@2+2~5Km=L&6#}{`m(oT+nl;x&V^Jq_Uti;~U z9P9UgIpj!}Po7YFQtC6);bgv62+{I)PB&i)UyiXKuiqwPvvVew)WfH7JZSx-#*VFkBfNXied_C zw6}lkZpk37J+8RZX%E%p8)LYSemV`Gt+?ak3P{$DjEhK@#gXH>oJK)QH>Jp+7vq$B=3im051?!$#J4UmqtT z4~bL9SLWu|Rz;ax;Dqau_foN2^N-9c3KY!mGj|Q@qdLYkogI|{oLBetTNJ;QYL{55 zrS~CMK|YV7aCSJTNcBuhzavTN9w5mL(wT);YL`SzKp!>nb?QyeM34X_sT*ZRZ|xq? z&qWsH*Z9%tebVdLITPnVk&&;-M<*DEdeCr)YJ1cQXWfy(h3Z07#T}MvyFF#8aXjV< zV)BW$as!}{38q<#V~iq-gCG}Og1o7?#MTSR2xs@(%h$CYn_?O!NltflmB-N^5qS;^pT(s5l(-CFa^liDq0)7SP{5H()|3KLWhDZUNsU8nZ1 z>z8KgGV7{#a3~>@p11K0qE-W;`WVBc_sGAc5}qOTW^{V+i7agiov|%T7$i`ABq&qn zAeD}~#u8e&3!q6XbmPOr5g;TZM$JCO_FPhOZvOZILwJN#cQ2J-BH|XpVL2j}y9_le z4+D)*K7J9EbmVey5s|ssb)Gr|{6bRKPa~HhuxQ}4QVFTd zsrsdrkc26j-&LevCg077)|bdiHWVQGGpb~JckX&-7;sHc{Dd32!Y`%5z*_C#A>|<% zICgfW9Kl4L2h7aX@pcq%4?+uxR#|5Cx;!5VU>}tl^5@OM{8~f!?8ONoW@&+!GyxVT z*=U}2^a3&2N&D;OmnC3)k1>u6nEjh8aIk4TRNS4`c(T|;=Qd0~ffPfYF;w~sjY?$5 z%ht9ODMiUxFAJ3t)Vv^-hGFDjQ~xrxcxi;Q{6us#7u4vGj9>yjqtMQ4rjrCV2~Ad< z7AG$!C;jNL%TN#5QeCz4wG$^R4!2!cKp+4G%6z{yf08fjv#I0U_356rD5qn`75ueD zlmTpu^b3dZaYBp(i>CV*sZXn+{>u-CvjW`PDk8(-MdT`DQZwkmt~#tj44H}f**=;& zKEhtQ3sp1ca0}G?>*}+$e?~3p5pFYt@;)u_v)cAAb0Orcd6&!KZ`Pdp9RaT%Z1j(M z-E$x26BPSM{ znqdy?luzvM$RncSlQceMZ^@)nuBtVWVhZWu@jPDcT05w$zY8bh!N~BbD|CIYsKFd} zxpD&{Li0HTiy3F*!OLZSIa`MCK26n1rZ|H3)8oKMzfVF;CCIq%>hEAu<p@cel7?RY`C4o8a2dtIsB%Ru(F2$6E`O(H&+CaHpW)AM0bzs z5f0P|a>2?ZM(HZ$q=)1q3R~N=iRe<&G*J?=2(Yne&yH{kn9YWch|q7tN`to82FX-_ zD-{XmswP?r7RRKm1D6(dSkk z5=|G$?2&pkx z-Pa$=Qa)<`>I7TX(9;feSxI&x%5(I?j-2}C_z5mvf)DQkz4i$3wGWF?T(ualdQX>w zn)g|owl2f(M%tv=*5vcmpX}UKB$w^zX_20eM-=gWOqKPui^h8O7|Hx_mRyV1um89; z|4g8A^nQBf-Wzid{|Q=Qppn39eaYQVJF&>Cn-Xpd&0*3z9u8-X8Ixuug}>`mOv@`! z@ZH!qmTWp6XUiY?!ooFYJuzQ|5%|?p1^}lyhF#B?=hF73fYfNr5WRfsh2M5}zesN6 z%o-nIqJ4&n2|MkWqUeK;<&m*tTAvaM=Bg@g!tdt!>4?d=TK@}WxjE9k5+DX}oSv8L z{&b$0FTfB>g#;`|E%h3$=1`NCl&e`Fr#E;{^N~iITB^Ln{?6)7I?oMaIv!&j7nP5} zhh19Qo*Dne3YJVKLrk)C62vR_{)kOw3pT$cN8wLSaR07k>R*Phu+0@=iUY(hum*fX zjh0BzgPS=*JTJP_YH-0)Jx$en;#Wa+8*>p0pAFW5^94|n{U!Oume)6G$RJT>%=@9d z?&$M!{m84bkKU`|>W)9^o^n24~SnaU|*A^f%WnG>A zI;=U?OT7RebLOy zoL`lup%c`r;R&G;IhUu*{|fb4M^V$O(ZQzl*69MSDo(j0k_NeE*q zi(!l;@c}#SNMitnigoO>er z6xGz+Y9OTFNmb;@MGP5U6UdBXpbaB>y)bi((IG{GWZZ?6t3X1rD;tX|G922!Dk@~j z6SUjCuv@y3LsR~!(UhrMmx1q(AB0*ZYWJOeT?oE zX3m8hn76=Sei$*60jAAe#009n)u(zTEHq3;!vtM1N86aXmi&P+*jP+kd9-yt3h_c0 zT?8b?a5!~(8=qoo{*eKnH3W{lKo9rV?=CI^;v-2!%$uV7G~^vH1?kcC(O~&Wh0<5H zZgKdT8*}=nC)fg{`aVftngv8SqUzdV`1Np~CSP0jd2Y?N;ndCg zVc9*K38jdc8^PD-=mawoGsbQ=*D3nf{mnY8F5lYg$~|p0ztW-QKQ3Oo&Cl0MwnSVZ z6K#eD;vm1-R|7BgO0}=%n4g8KX}opminCTPYygCG<=*TuTr+I6gW8~ z3=%H4hjlwp^3jxtXy#1*u3m1VBn}UwSJ+ep@8%n!4kh+YZwV=PhD0tF`$hkrPT36+ zJ!U;k)OY7#+saK_cnlg<^l{s3O;6Ck31#czBCk+{=EPVEN zhlg#-2TYf+kKXaNIDj8F{_9(_>+$#dwvawpEvNg$j`oK=0RoRJ&$ZP&5>MIMY+*_F z-$V$YiOlqhZD-TWcjF^#S~Y!19t%Qxn`Cku5WiXDu_LDhMnPe z^Qj!j6hKOC)p`dgzN%D8;PmXX>fU~UBN4gi;qoZ%cT3L| z(b}`V0tjL!tbgRx3R)hMt^~PR(LJWJ9o)X}*^X*N2T8pzRj+78JT&y%0N~U^l3QSa z`l*=h8!b?Yv*)&j>q6O(vq5)jH9& zT^7T1S0JOzu0v-Z5N|RnwM9t=9v&ll70*j|tnuS0^oE*RC*Hg!Nto1XfolPun-4vP zV6lDBTf~BI@Af2`oXm^+eP0C|OPPjusPUr9zUdE5y;Ry7Nylx>+EGp(6Ge-Q^?wt; zf+9PcK383tD5!d9I085|e=myDgo#B#j zDk(Uz@yb=?b@V#(_A(hVAIBhCGe2kT?W%h3T>As|q^3fr(dB7Tv{p!|+xvyAg^%9} z|CAM+r$kIoZxbjQh}-_W?T!coY{!I=ZuU}iRg|{~YL0K8cs=hTy?6R*vi@1GyVlsC z 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

    @UyJb>hB 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 z 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 d;6jiwwxg7@M2X}#igv-a8Un&y4ELV}< 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


    Mv~#{hi` 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 literal 0 HcmV?d00001 -- GitLab From 171c94cb2a97d9c56a915018e52b80da64db4c6a Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Wed, 29 Nov 2023 14:33:22 +0100 Subject: [PATCH 359/388] Save slurm logs inside output_dir --- launch_SUNSET.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/launch_SUNSET.sh b/launch_SUNSET.sh index eb8fcf46..153d64b3 100644 --- a/launch_SUNSET.sh +++ b/launch_SUNSET.sh @@ -118,7 +118,7 @@ if [ $run_method == "sbatch" ]; then scorecards=$( head -4 $tmpfile | tail -1) # Create directory for slurm output - logdir=${codedir}/out-logs/slurm_logs/ + logdir=${outdir}/logs/slurm/ mkdir -p $logdir echo "Slurm job logs will be stored in $logdir" -- GitLab From aa7bdd551a16802bab796e349d52e6e2229c49f5 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Wed, 29 Nov 2023 14:33:32 +0100 Subject: [PATCH 360/388] Update handson --- use_cases/ex1_3_nino_indices_comparison/ex1_3-handson.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/use_cases/ex1_3_nino_indices_comparison/ex1_3-handson.md b/use_cases/ex1_3_nino_indices_comparison/ex1_3-handson.md index 42068784..9cd82bdf 100644 --- a/use_cases/ex1_3_nino_indices_comparison/ex1_3-handson.md +++ b/use_cases/ex1_3_nino_indices_comparison/ex1_3-handson.md @@ -59,8 +59,6 @@ The rest of the user-defined script can be written in the same way as any other data <- Loading(recipe) # Check units and transform if needed data <- Units(recipe, data) -# Calibrate data -data <- Calibration(recipe, data) # Compute tos anomalies data <- Anomalies(recipe, data) # Compute Niño Indices -- GitLab From 349bbe7d005ef795c9831e91b9fcae9946e09b0a Mon Sep 17 00:00:00 2001 From: aho Date: Wed, 29 Nov 2023 17:11:52 +0100 Subject: [PATCH 361/388] Correct variables --- autosubmit/auto-scorecards.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/autosubmit/auto-scorecards.sh b/autosubmit/auto-scorecards.sh index 4b527372..c30f643f 100644 --- a/autosubmit/auto-scorecards.sh +++ b/autosubmit/auto-scorecards.sh @@ -2,8 +2,8 @@ ############ AUTOSUBMIT INPUTS ############ proj_dir=%PROJDIR% -outdir=%OUTDIR% -recipe=%RECIPE% +outdir=%common.OUTDIR% +recipe=%common.RECIPE% ############################### cd $proj_dir -- GitLab From 594e07d47871c58e29ce9f79e2ef557887b7f1b9 Mon Sep 17 00:00:00 2001 From: aho Date: Thu, 30 Nov 2023 13:01:38 +0100 Subject: [PATCH 362/388] Finish use case ex1_2 --- .../Figures/as_change_status.PNG | Bin 0 -> 72238 bytes .../Figures/as_tree.PNG | Bin 0 -> 115228 bytes ...ecard-1_ECMWF-SEAS5_ERA5_tas_1993-2003.png | Bin 0 -> 374211 bytes ...ecard-2_ECMWF-SEAS5_ERA5_tas_1993-2003.png | Bin 0 -> 400492 bytes ...ecard-3_ECMWF-SEAS5_ERA5_tas_1993-2003.png | Bin 0 -> 375281 bytes ...ecard-4_ECMWF-SEAS5_ERA5_tas_1993-2003.png | Bin 0 -> 401925 bytes .../ex1_2-handson.md | 171 ++++++++++++++++++ .../ex1_2-recipe.yml | 49 ++--- .../ex1_2-script.R | 25 +++ 9 files changed, 216 insertions(+), 29 deletions(-) create mode 100644 use_cases/ex1_2_autosubmit_scorecards/Figures/as_change_status.PNG create mode 100644 use_cases/ex1_2_autosubmit_scorecards/Figures/as_tree.PNG create mode 100644 use_cases/ex1_2_autosubmit_scorecards/Figures/scorecard-1_ECMWF-SEAS5_ERA5_tas_1993-2003.png create mode 100644 use_cases/ex1_2_autosubmit_scorecards/Figures/scorecard-2_ECMWF-SEAS5_ERA5_tas_1993-2003.png create mode 100644 use_cases/ex1_2_autosubmit_scorecards/Figures/scorecard-3_ECMWF-SEAS5_ERA5_tas_1993-2003.png create mode 100644 use_cases/ex1_2_autosubmit_scorecards/Figures/scorecard-4_ECMWF-SEAS5_ERA5_tas_1993-2003.png create mode 100644 use_cases/ex1_2_autosubmit_scorecards/ex1_2-handson.md create mode 100644 use_cases/ex1_2_autosubmit_scorecards/ex1_2-script.R diff --git a/use_cases/ex1_2_autosubmit_scorecards/Figures/as_change_status.PNG b/use_cases/ex1_2_autosubmit_scorecards/Figures/as_change_status.PNG new file mode 100644 index 0000000000000000000000000000000000000000..5fc5cd8a3397a626824cbaa8fb9d3fecb090ce13 GIT binary patch literal 72238 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 SwD|vk2d1eHDOZ2=^8W*MV=rg` literal 0 HcmV?d00001 diff --git a/use_cases/ex1_2_autosubmit_scorecards/Figures/as_tree.PNG b/use_cases/ex1_2_autosubmit_scorecards/Figures/as_tree.PNG new file mode 100644 index 0000000000000000000000000000000000000000..5194568e387d7251c478eed0cf071f7d7c7a4a60 GIT binary patch literal 115228 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 literal 0 HcmV?d00001 diff --git a/use_cases/ex1_2_autosubmit_scorecards/Figures/scorecard-1_ECMWF-SEAS5_ERA5_tas_1993-2003.png b/use_cases/ex1_2_autosubmit_scorecards/Figures/scorecard-1_ECMWF-SEAS5_ERA5_tas_1993-2003.png new file mode 100644 index 0000000000000000000000000000000000000000..631e3e2f80955aaf2b5dbd8abb2e577a73746373 GIT binary patch literal 374211 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

    $vf9dle9FV$(x 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

    8Xnol7G)Tmz|&R0U=%Jur+xt-5NcyG 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⋘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Ν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

    Yofsm_) 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ϺLsmzCSGn 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℘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

    jl)N&@yFGd0taSjnS929MT zg!fWd5wNys9tuaVxbDywE2Ajo5z#l^Y>e&2TI}q&_IM}uWc1a(VE8ojS3FM#9nb)4 zzPF{K0-FPdq$|mSyq78_Jo>GAIp>^y-wUCEsuDu!}7he(Z+QG%>E;06nsJz|E4AIRW_ZJ%Hftq$MJ!= zRyZ=txLA1RO4M9|B0e(GEtID zVe?@5Tu@Z%NH+bd?W?1%oNF4c58sxwt|{g;i)&m#iZ6# z*I)C38-PgG9aZuoekpjv+*n%z@5J47_gIm9#4Utm%&^dH{9o+W>k8Mw7;s9 zMLCTU&QWi<$PqOVpT-H0m)DMneKtCixY0f5dOkt>d#KV0#=>2Z(kI2iMqlc;51B*W zJ(Y%$2#X6byR0dZ`jyt*DobZ84XCkzwj8_KK()Z0%dRu39540ecBv#+)kVyp&2x-% zqmS3Wg}5sjF@v^t$V;+jZmAfPF1j+VBSo_fz#{29`8xZik=KK%wUCmt8UZRNA9!2@ zLER_W;p|N1ppas2Hi{|ZdAP{?GTog2i>S8%YV(bjhiNILg4FN=Efi>Rclp(Dcc-`~ zxJz3KEyZ0!a0?D0Sa5fD2<{ME0)hYAd+#^jOoquoAmNqgoZYkgY;P}7WNdOrCfr-l zX@j!IT1QYsNLk?B_a1t$VWcm8<#7|a?EtNvh(lVOKP}^iBJ&kq;DgJWF_@ZK8r8y6 zCB$*qzU*271@?OlFGJHo@TQMEQIyQpmdn!0o6YIX3n)jGi$r=wZ+2p(R%X)ahA8&V z)-UmEj29nUW?w*Ar*2>H>Tf|WGoX{3l2KA>nVbx#Y=Hy&qZ0r|=F(~}h?w`!CV^6h zb4^|$p&4Lb-uw4$fpr%gL`eHv-_TL-IgJLkC_{@&Dq_#FPh$5^aPXI`k){1rIhf{t z((w&zhSmpdm;vv_HHawFfYsl}wzxQ?{M*$kTF5Jj`ZvcjKlF^(;1e+J&YI3Y=nBsxAoQgr$h9x{Zyiy0z8>P9X_v(37)CajzUTgQV{i-;u`^az z(9^RPNA!AL{vjcauhMjE?7MglY~abJQU*+l-c zkQBC^x&;gFz4DnQIBpq>t7;RUW5H&k1&-)JIHw^!Q{< z_&b3Qk4Lj_t88BDnwyu}?1z3hngWS+E}Cl9JaY_5ZMcuKm?j*X7v#z#v(ek_Zkpzg zCJTqu-}~?4JS_2U*?B!0rMurByD1r+=5~kN3h^`0+7OS2pNO&X{3c0>a5!#NSa~tl z-NVw1>IzUS-r-s85x?|^Zv=lL-+A=l;v;OL!fGV*#RZW4AfuqL4x|(KoK0x)+L$E; z<`uSv5<|^8Q<={0=4R%&txPy(UBJCH)uoY9(Hglfn9!X}fzeu8Qw!0S>k}iK|6mg; z+RD<>$Ty5lTt5|kb-AhsSgR=QlhQOuEr$FOh{Zjm?wXKDv6qaYIeG|oAVn)6_SINu zWG|44bj8mg_J{o2wJp}Gnct&b2nQZe^S(}bCi#iM8`km1nT4x_u9C*Of!9N?-Qulhnn zbM>1lD#62gmJA4@9ZX7tpVpChhXLO@y|d-Dc@b?QBmI|whb3+~AWvJK$#%!}a7$wT zFEaPeD2I7XbB_cne4O00%Ky}@o#I%rcpb{~AvL(yVgNR9=<>mL z^#rpj^Q&t;?#ffQIDBYIDuwN$P1|uMi6ntA<>TKc=6hj|OR5!Y66bx*3%4z(t}RwP zSeqQ^UGPxcOaHN`m?O7-G&H;tLi8QCoahFnBH;3U1r+1JH51Nqy?2=}#aN81t{r{F z;>PXYp@_XJq~p8W6KhM7iz>n%k%%rBu)gr0`*G56=FbAGZ5X`YYGm}D2fZAumsU?8 zdQ+w8(E(gM^_*T7WZ1iEw{REQ(O;eWHpl1PIc9kY_Rg+deuSrz!WV60LxDq+^6g_& zk(L>RSdXI+ro%(Wjnc17y~UrMs{aN{=rc0RDc?@5oOt+8D2zI(i_X=bJ}z<|nR#6g z+TtL!cF~U*+Vt{aeM}M9Ph;;%uPxVe+jZ+P_?3#F@QJ$a;MYwDb_^w$prB(+j3LV& zqS)2>vWHQ0UrVQK8(47jMO^mbj*B(=gB>Xs>-+Y zrGH`sDg`}xLcmN@c}mV`<`36lzkEm!8rA4Pc7@T?>I^`wnm)96s!y$u5?`+Ai~mQ7 z!)$cE@0~eiT3l4##@YZY-GN7vUA`J*S6=rAVd?()J7n{4LU^zG;lg79?l}HXkb1S7 zAuIsTQg#TjuM$2lkC=CXz|E%ai)6`G|45Rh3h$V4W^4(E;%C2H%H)!911i)fc)aDN z!SW7uL6{5hImNRgQRkh`ANUhGc#^--x4kR6DoLIbXp}myvSVyGfB9iMC_ugBYsbm0 zyRCFz|9b5RQZ|g1BBi}S+SC&yu%Pyjy_CZlO9cb+<1{yR=t zBE{q&Cj8@9th~k0YaO<;3Vw~R9L^{X=efp;&M9kGyLr!wFY{IXug_oC_b>BIO`o1n zJ-|<#M!=)@0t@NVyiD1TdMI!Ng{PyU;<|c51cW?~7*R-pU~z-w6b+)uLM7Yk*XuE! zR5)c(J!J^Qx~31a+$4H)x_0;GYL&%eAR~E>_>VmEw}qqZiuI(x>w9q;j2%GKthip; z2y2o;hpsJK3V-q2l|th|^#b)5j%P2PYjJR0C6SSHyV$|USypx!*i$8niSsnc99bBn z^|+#d9k023J9kMZc2%Z^l5PE2v{)?`pnbCKN`E5g1(@bmf`lWY4JU2L2C$7O0aj!z zjExM>O+TKjaLklJotL>V4tTO8o2{mTz+s|Nd&uMYCBmj40p9h0m4ldew#^;o_fs)% zjEc&j(I*X7X|#$YZp=29>!Y+vhD{w9==}+8=xhVB&DS9ai^!;`+$OS@&M~zTw+Ti4 z1VIrV#~Ie5kJLKlFS58d4F~M?SSlmFvCXiU9JJ44v?njBq;pmRE-ar@GuS7)J2<>y zU#7@mp`tW8cl?5HEUa z=Q0ZsQ|qEQ^i;#Sjgplk`7W43&6@GQt$H{GEQgDMvc*V64<{lkY)#5w|y5u$;yyVU? zMO$@Iq2xbmX#diL)q@j1zRc;AGsw0uJ0aU%6AxP0jldaB|4L4%rwe*%2_y*tJE1?s z=?aIWJFfEgC%#o^4f^#Ufpf`|oYwya&!Ar1aD_u?=G)pB(i`RNrz9WyFsP^J1CX0k z(LdxxE+cbp|;VoHZw*(uPA4+Qw@U1uA!(H*b$f9|v65X~=! zAaGrWy6bUm9(2zC3jIX7=X3dAp}QK#BCSS>kZJGvfQ~b7upNu$r6!@A@p{>-`v$yLE}ZBpmUx)w=r&%{Jati(-K$=SkVT6@xhx!M=^nG&zXqhi zrDNNdHb)k~zVI1*K0;MHpNUFtB9nhCTJh?NCm|Ly(Xm{&d}8EWSub&>1{apsZ$qxk z&xvq+?k|vIO*VmRVl#bd+uchgdoMoKYs-x7bIaA&gS6zb^c{XPM=E`j8BF?$Y5Vgs8|9F61u3 zW+$BVvp|~%MfE`Fq~llJUeZ|5L@9q(coXl(n8bn=^jIz}<+oxC5vQg7JDDWr*FZ49 zO;6qHyG*ezaq!U1Ce>(q&~{#^)~0afUi8y#JpS(QS|VnZ4&Ra&WBM!P2D3?GizCX; za_Lo)p6sm?-!i%us&t3gJA2eZtZ8PL_1vhweQEP)^b-v*|E!iYB?0LakIoa1lk6-P z$&IKj(m)A7Wk;yC8w9vRWA65w>)YCJ1YLPj*er`sgRvTJa;IT;14@0>G0|yZ@{Frv zT3yFOt%$R{=^=w^?2o)GlGWYy!4p$29{0h@Dl2suYs6aMV_%)4eL05P22oa1mv6R@M;~+zY1pf*UfDc{6cuZE0+?rOqRj0Xv`IX?$=@@?x6krqxi71{_PTt! z0&NHM=H&jg7v4Lo77AdNvc27;Jp=v}!V|+Oj%u>PzthhB zE=mQH(b&B>D`eDQx?!GJT83O$-JfuS#-^(x0Y=;Q$pnjYRIS& zc)kZ+=E}fm$GqQnXbQC&4Xj0Jh%fu=RsdlROD3(dj=5?-km^uFN)i!(^n563-jQs} z=2q=S@R~Oouq1V_peA{YGmXPt+b|@g5JW|;p|P>6r{|>qrS$=~AJ!L_$IwHq>1c1b zWkLNxM4{j0`0mbxT#*st_4mnQk;AbD^P5^f;**WiZ~fCfpGxt+4Y-ZWqrF|s^!UN2Fji~MlMu;(cAla*Z;;rJVI zT8N^Qva&)v>q0x)|K{s||2?A&3ksC**UOpx{QaD|j?)!m+wZYFpxRcfd&NRQVGUf` z7L7MV5(9dYkUGMH+w(bGr7@1D=F~i5e|l5B`4IMOO0+Gi&ZU#lNV*Nh{(^|yhP>-@ z`zfkzKnKdqqJ{p}d%}S`ntK+2FAs(Rg{b+)^G-@v_sRJ=QNP!^m}b#z=W(2#=Uo8D zW0-v%(=LGRftJPZauxb6$71;#xQ`4Ry4j8y61?5a>%ZF)qMRh+zM8q~`v+mX-ECU& zIl`CP5~LEi&I;quK#$R=TSXzF7uYzYWmq&b_=?AEp64PoVSYiZ(4|ozpSs;2MLx7> zPFuF|TW9?75&j!4hL{2G!C1^|<9zyO^Y~O$RHPh+{rM_cz~dnhiPLbo5`sa+ME8P| zj7YXc>R68JnTGCeMr1(-O>K37bG2?Ck7+o+`4D4&>RF54LAijsRj~#;%couXm^-bf z=;R|DrDZZ=QLj>A2R@qFX=ucG5Nn4mWaK+IHy$I%OR!`L(dx4nGsZ9E|G zX`mw{LCAH70EkTn!gbX0)r0WhKsL!P8Y<}c#M|5Z{{8IEO9U!D{*f&^0C}adq7><9 zctG4AKk{wQxpQV@xZV?VaZoA?Ow+! zU73Dgwot#8 z@nhF->P-HW4`ir<5NQhQ#wT%On1?*ol@f3)ga*?PD$3`KSm+#3X_+3pNBTbO+Ig#5 zEVT?E=aur@XD=}Ed*~_<{hTFpVT;|)L(8S5d(EkMZ@4Q~XF@|Uvr&>Y?zI4Dc71_#6(-HU4 z$hO_(6*k}#$x}||Rw729u&iJCT)zIq-! z*~J{je&LsOGhBsP5+4nteh6Q zu70z`uKDFd&E%t^@)(U6;81>U4^wG2-N4$FO$#aP8zxEjiR5Dk77>D118*jmOYgJVCOvMVPxoX9`p+rO-vXYF1zJIq~=DwTOXshXr zHvX;4vU<4xn<~SMY_{w)`YF4c@WV+Kk8d?c3diKyi0{dujf;ii5B2g7)pR#Tr}G{G zr`VXrCN1Cg5v+{M{^LyY8P+9xIX3&FeYW53Qnfh7o0wa$_(_FcCRqQITUb2xZ+7Vl z0Rm%fsN1iH*W9kDRkcmh#l}<1ayhvpH6TI@1;3wZ)Re1MV6EKEpa))KKxG=B{570u z%%;m*6u7_O$?RON>HjLdHtL3raxybtTEQmB%tfHW2tQ=o%pTdRmOJsWw9z1iXRW;Y z*TiYtR9~11R^-_l8t;2?@p^CXtQU!?B`jSh;2E&IjZVp^DTNowdTFd(n}g;oWqqiU zLIrXOay3?!ZyFZzX-T^inS{5;Dl`)L!6q6rVWRymb~?nsi#lCxmp15pq3RZ1vB1HO zMp4&adDf~RG;#R(`K#U_T(ik!^uEzn}Xaum=@1 z9@GU~#E!UqZd<{%+Rnx60|<$Y+7BE+whV4VgAcio4IQ72G}Zme%1UKsT2aaTUN6_3 z`Is~$MulGRfszs!b4vXS3g!J>$XTv%Z3I9nFZ+dxdq945NC-N!28}(pv?SBl*SDTi+#zOS>~vo3oM6r(Yu@5g z8f&^!{%I@j!2_iDE_W~c;*6J~5*Ly9%2|?+vLq$&q!%N@sYR4QV!gr^UeDtAE}m?_ zi`Vz*wQUY2bSw1y4%!%Dls4F_V`zE)yh=VK@lk1`kBf!7@NYIHaQ7D&3#3HT1^sPEJF#37o2|f4a^At&*5Jl z+2A09(xbtFfe9o0hYvNY|B&XW>MNwLydrJrFvfuuI3#=bZ5iM;CNJc(O zY0Vs(66c)9d>ws!a<4_aYJcPv89>$(fQbK-{Uoe4^i@~BRI^xjr<9(KphT-wKZ??y zgG1@lr=NYXlMSAz7zjif1mgae?537SloJFM_kHrlx1W>^GhiZo@5@(8eNudUs)tQ{ zpFiCLlHwTo_+~PX)KsI%1#&r7J5SeVEQ2aduIPYlMApJ7$S*4_92(K`tQn=moOSb4 zpSyBYUh(4N-ZV1#=TA}0IZa4q%yyog`d8#EJWBY9&dm0gj$c{o8_s9Rypc|>XK&uW zsRBqfc@>qnWE`~gJaRj0u6EZoU&j!+hT%jPX1G*)EMJlkQz0>TwXxy@7dPuBA)TDzFj7Q%#w1l3AH7~CmroDO(v{29V)NFk% zCNkRE&1Y4Cx6=^&my8pKjt;FY&tck1Nkzc7l1YG8nO7)StgjJSdbtIx_WuCVv7LzO z%Zi!9zVhp!$B)k1TVyD;JHJwE{xlEJRT1F_Z@74^c4dYjHqvxV2UO+qTM zNOYPe{?T@zoj9AP&Y_Fua9*G_6)g)3itPuVIoM!M;Vx7xVYElXM(}l%jAo;{Q#P@6Ys6$l#_sucP2NDxMR&)CQmIhMNIPgiUl~iT-mdLb;eb=N7_TFO1*1g5AITI zt$Wv>e1?>^A9t^ri{Px@{9B`TUT1AT!?qyMNCN%j_v2Ngn?jqn1|q)Y8`dUv{aT%N zz(6U*7(ME>B_etKDE*sVajHs6T8>@vL?R-& zl(gLfJj}O9ps63{fM2$lu0KsZd@jK{V^jV1tHv;lT&~e*quO^ptaM_#CMI@pLoAw! zQc1uP<7RJYZVp~}Cr@jEF7I30U=i|R{8{wcnjPj{FPRv?w>y@9OMOpTeqiM^N80Hm zc2D9t(f85>s<0i=n`im>8wG*a$eaxwyrC$aYwA1W9?c5pryka-{-X2p7fU)cMYWSF zdp>BH3eT(2x~!BG{P6G%+CmiyFA6p7{I%|7WOlanBJ}!<)`kmmOLkhBYq;z#@C<{& zJKSBNO%iuyRfE#DHPjkKCq=QJdf@YomV=XwX0JOSQf#8lt3-F>Fv@~h3~dS#z2#&m()dw+r(b<9thSsp)j^a_wO z4M>Yj4kFy_FqC2r=uP(KOE^A%&g^sm&ooE0&j;6@jl^E48@PbAR~<$e8;2%iv9dKS z-S3&0QV@%&os}`akIqxZgnX!Xu(n<})1<#GLXQk9O@weWy6Km>ysxC2byJsv_!3kRs(= zNsx!$w4kDV$syss0v7Z5@BI8it=zqA6*fhxrhT}iCV6XEO{OP;SLvVB1HQh4HPJe< zM_(}cYuV_l9UXDm#rOAe+wu1GaM|5IJ3CvSEdC8GL+`N?*4f$HZ;xcL)VpC7E)IN! zyw7jMjImfOIltXA96iLr8~#Zb_q?1aV5`}JjkPr&)Gk03`uJkmNR6^awj|P%D7FC< znRAF>^nVELXNAHVI*)Z${#dwJ3{8ga%PZ;69;DaV~X!~3{4BN_XvuSJg$ z9jE#7NL|EMkYtv{Dk?<#^12Ii{qaXeD9!Et>gsrr{qAJ1AAl^sLx3Z;W~#u~2qVrv zX(FrXo(B@`r)#uxtYl_p7EZ^GDqIZ;fE5I3Q41VEYU|(d<8zh{e4=*z{dTc z&Z;b7_x*UcAgN_n8OF(_xm@tG-+Df)Wgj%jKC#)wk>5_*-Hls6&vN6%+NQPUjaSAG z!Rfh7R#p?>juYi8q7tTNm?tL#(^T++(t^H1ZeF*U+4+@ZD6Jms%gg$lK*{x^6>u2=o&vWvl>E*wqSET{BqUcl#vY~ij= zSh$)%r6nsvW{$djzd+@8|!fQ0Sk};Z)i2!RNAt17$WdA1u zX3gZIuGy$}-?kUTl2E?Z!PrnH_|rFGZ2J@%gY$lkJ6BXQAb3GuGSfOV(LWD%P1XX+`_T&ZwscQ(zBB2lya zi=?Yuv99C_y*hBJF)!1a&G?0rBX_&fP(PcRZmzP!MU^gGx2+%~O7wbgi1p5bF>E(} z-yv?aOw<1qbu`B9eCj&_K%wVbyT&7;FjgcprR{DUFk&{15&sa?dHK=6!!z2vYb{R2 zkTOiu-{GT;BvHuZ!9Ttqb!({#pM1)C=a)2h9>;XMM>|O}gC+5_Txv!$ zg&BJir`yXWivGkC7Vik7jMe;$d&=+E{`HA3f4lL)UKi;=A6|eyt3(A6`|EbCA;`A; z!RmPrp-6rr@A_kJ%91~R%>hu2a%Zzi)|kT-N4sgq=!ftC^6M{5etHNLo#!bhvuSZo zBK4fWHX;5)B1)CwGg&#g<*QA}IBC=7mu;R-t*=6M&hmFH*^q#}q^CQwQ({C#K-R8i zrqY{bd712LW3EF`PH%yP89s@K&napv@XY)x4+upQToA;~c z{uI3oz_eGONna7v7!4p{O_`anf+zd(uASpPcW923_v!_nwmZ)%H@I5r_CvX3bE;3s)L=vlpNr#gJvVl3f3r6`xn#p^BdTb^MJ6$@POJxU-|C4&LEt z@u7n=DcQJ;uBG!E%S8gaHGZpc$|uLMH8mn?Fh9aNv61jyGE@0Um{#e*^b7^TvllO8 zY8;kdRJ^F0zrz@V^vGDX+i$VI9}zeG4GDP)^%MRr6O-1yxR?f{F+<8tp><4y&O>5h z#l@%3Z>}~w*4fzE4Man9?a41aJ-nWiYF_-{ra}o!mRC6thtR6i|4QO$`g~$h?C5;4 zWOK>Tc!i;Na;_9|bCD=7ANlnwal?X(8}o!RY~=f72bM;OgTaiqk^O6FMdsM{bk({$ zK#YIJ7k7?;+j4#CLg!LL9IX--# zAR1C4~9T+aWSGg_Gio+dshK=vltPaupLCM7Q%R4Hm`8YeEXRB!(AI% z?-L1xNL-ILOcVc(g2F9A>VceErZ&wp$)FN>>-9o2ABX0En%6>ZPSj}Ep4JYp>n;S+RZV3*cPwN z50U+tGg;wrLEQ+^N9|OQRbII~f!aqlM4nmg^_)bYyrU}uAcTYGPR9pn(W$9GPG#$( z_{Q<}cf=ni2i@gN6lOwrg$<3oAbsVd@BYBDe%^c{1lIPp=Sc+in|f@=VnEA(YE<$f zM*lmqH3-Zk&^$0w^?||`kSsxPY_5dMJS1NpKjo88a}Nxir`rHE4RnX!n)?|7!VHE} zk7oGZTgMHk>D8B=eagTu|DU?{XaPzG_X%n$oS}yJz^G2#*(&{O9-a zEsA5NH+LaVg`_~I%7O!hv~2wN1CGhMvskEpnLnWlp%oZDW}4EBHzWyzpGEhW0XQ_B zm31^>s?a}tY0at&Hbel>aea=oD!~&!LYt$F8V`ZQ$MO{QsuJDS7WU6rbQL8RYmS zS_dtdM`bl&zjI6M-n$s^jEDDr$s0SGxe2p!6<$o?nm0K)>r@YflbW8R=UOrYQMkj^ z_Lh?2UVo33HBNzlQ&31qO4--F3M-ETkGN-dj_*ZhAP4F5^wsSo^FdI z^1%|yJjW1C`4%x&WxyBQASL;vC zMat@ZGvKXwvV9YVb83Z3EHE7qiE5|-8X+!_hDX!iQraAJMKOe$UQ)aV(Dy_oN4JMs zucCwLIl3?wU$-?ZTrTe7jkhX$sq;44{ZC9nz4J|YHMFQ?`C~KTQ}W)o~hpF z;N}_CLGB1>mST#(2nM#c7tdn%_g;ZJJk9^5`IswJ@g?W^i|e z>TW2BxfWHJsSV!M;V#)&j~40isovA>?q2hQ3hK}uR7UTHw}y>nAy4kwb;j6p0DCCr zX`XG3b=+UfESes~At2{WwHVM<<9YWgr{ep1A87>`?FL}-=`s)=xDm@Wnb}~9-kZOl z>s$6GvE~(^r1H5~d^fKzEAi^fKLt=u`h?9D5J){!@6Le(tns|2ouLJG<-G$_wy2i2 zxo->&-q`1cRA+b;A0GBelL<&URURK0QYrTG5uJe3{FQoR2%8SFjr(T5XZ&z;bj}2x zwJ(M;Noe)dODJ>=F2;+D$cWA?^Kq+IB%Zej8s2!&RW^Dghjh^k!tbJGyoz! zUKmsH+ga>Q=Sj=ROrV^dohQ5}99{X=KHAvW6j=LTts^kIsj2#gK1Uj9K28Kr0)I{x z>&?G3WKRH;yF55wBqhrMHP&&$l$NuscC6dZcmUvUAa@ra#v*TSM6uhXcvnF$HRk8V zXc9|490AYWkJ2vGnnzkq=-QS-n=RScx?uOUvC(!R+UsSHB$OpnKS54LU?S;Fk4Q`ZoB zJVA_`l5e&@;?AFz*z-;b5h3@&Tz%yioU;MWrx*6%oLHc>TYdKM){i)on`F8V@T10m7q( z7oQTIy*~GBD>EZ4A(>4e=SM(kj5X6@LQr1)a%|wdPtI+7DezT=oGhdrD&9z(1{y3{ zbP8RoVzqhbHI{9tFli_Bfjn?ey%c>#S0XU}zn?K?}Db_JT~WgY&~CL@KWl4n0>&%PbUX21yiYEzyW zpzRL@#}osqV)t-t!x@ieFz;Q2t+{XKdd|?c*+Aw!=OQ(YWQl6qPilmY*P9=)b|g*c zkj(%UILxk5?}cq|Z z%f0o9`!~>^o;h5tB(&D+I{k+e>VL<)g@_LzA0I}ZZZCERDCDV1_kEya&rO)kjA5YUlx!9!ySXCT80g&*x3fS6nc&H|1;lERYfGem0re!D5w|2Uk@r~H}Bs%rGjArmNMD8P|Ol+Jd{n~VGt2m`Z%uk{A>W}p-nx3fAp&CHSw9Gyn%VMOb=&KNc+4@$HYujWcso9{n974Y#nx}#^A3_ zKED<7vh3#u0ZUfbdfHRq=JfQuD)U*_1a4~qu;k%789F8{t=EW3i^pMDx}l+0%MF+- z#}y|O7qbx&5n;w`@kP1r>*?vGkqiDDNSVZWX1*4-;cviUS~S5fOj;P)s?lFlRMFR$ zC{=7w^at*0+O9q9bTnlr)SGuA05qptBaK{uV5?{4VOzu~IfA*t=y1z7;htoKC#9AE zv76m>NL7{k{rds=dU^Ne5a9dGU0tQUv06G@idpH+k#3D6@N(9;KsX>|>KGTo`Tt9t z+;~?-V;%@Z<8y@aWHqXbWYHSTDuZWz4dMTykL-ttlruH~oX`Sb-3r^9ug$ylOR1)w zLAZ+~B~h4V=Pj=r+?LmVP`7}T=kC#z1R-mE>-ne9*4v9EZ&Tc$i~w)}PA4!ufu-&# z!)F0v=)+ax;eqJgpGN9GfBxbVNHTg}$pQ!e@#E9Zo^m_elu0{F9LezH{3bUS7Zc3s zl#s_aGGJJqpTDaeb6mx)`s{`_I8>ch7?AtoG)kyD>%28+OKXLl6XS?mo+{@Y)TNJ^et1eS?hj*ID zj#+1kiu3shuOYGGdOqX*T3YMH^0((iZVx7+DHkh$mu!XkpW6$U_*;YwhOy>O)jDsU zO@&eNjT;GoSPk;>ET2)axIO{&MZozM6cpS#V?O_D8mbS+9IAVE_Wa8V^CV9 zcfoKfGIbH;_zoR6H$z+HurA?Q5JebO^~CR565Cp$F!(7(fIBHPnQuq6w1l^(cx+pG zNV>4vi(2%U*dKesA`A()P!Q&JoZo%_DjwSJ8QTkUEX&Axos80fzHNNB(9H4oaQ-U&-h z`t$>vM=m=|4Zy+a?Wv6eB+Y z7sb-Mp37c=fGe9-v&LCLiojxZd`dXs1}rS50L2~Io=6aTr8@IqiZAt2b!=-^n^Y}- zefN6|^0a@&U8at|!8Gik(Oa1MRUsUBSivvA^k&>vq${8D9*+Ks(!_VP9&MhSmXqSr zEnemntPL(cK}#AR-I(;KKkriY(usFf#n2WnG~#=U9G+!k_U`i8L?o;R zSa3f}cSr8T76iEh%SLRYW0D#1@r2T%)IuH_Z#dsAtiECwI7=VY3r1`d&|os?o=vDG zYyzszfEe}(fL~|fTq_wea5236&ZXp17&&&p{F%d6S;wo#j60d{QHJyGLmU8h0HXK8 z9K#E5M5vNQ)tdfd*6}~qD(S@?szy+V)7VN2dslvxL(8m@R3X*Hu!|;vPHwGk%T_)d zrECp^aaqI#z<1O#WEFfWT&&bm7~yABRNn4(g%Qq+1O}`NXg0nf)_LOmBJLh7S>KYe z1Ud@76Ftd+n|P8GqTRM8tUrqfdTwHUGK&|W|L>P=mrk(WTBSp?qgg2w{0s1s*(wM~@NlMG5~WbluiV46!1E z-OkpLKh>2iW!Swq>1iO`auLS3+O`m*CBh)Z>qE7E|2Kd&Kixt3zeiyYMdT9h2JU>% zp1Pf%yPs8MsF*%YjR(I)_R4eOyD8!z{p!c1E$ z0Xo~!|0~FJONoU!9jeLdtx*U}1&}|Yh!~CyKsD9H-^Kqjm;r7FdDoVCpCK(-@1VsS zr&>Rn;w_L)YVGTR{3MjqTe|B0W9>>vElOJ^Yhve`f@IlzPW6f?GBv&<8?oWY#!O== z<5xvy^t0IUQrxPHxIs7+t)iSw=z5=rfELi9y%FQdJ62f!wTfs z`T%?HU}P4uq?G1Q`mM*(aMRP%zf0U|gET#{<$LJsMf7|Q86bt0%o-_k8=$?s#&_I4 z7BVr(CR|;plgKs7zV$xQ1!^4y#OGw8^jF{n--p}OnbMIW9Ts8NgWwdH2*7{NGy?YX z$g+PJq(aesn9UdHJ1Lk0Y>^R7%S7$&=$h;kB|L zLw@!_kp5$df{4|%ty3L?*!$bKRrxaIC32fme1@$kIg+j-sUc*t{V zObB&-&ex5l^jVjE!S5oEgZTO0zZo~nf)u7}eT_}v!s=oUS10GJs)YR(DWu8}xOpH8 zM>fNX4gXAd#3GK#Bzj7aJnaXtGy-T~DlZB)uADs*rT2~e!K?f#v$cZqD47_W$y`0@ zw{jeH=_4(@EQ7!dqbAZ$N>B9|>(uB? zZu9d}vOU#2pc5QUi6H|y?H}|IDV+Q;QD$ZORFwj&QdQYKrj83l*I^%DY~asAK!-SnBeb9br5k0+FeM$ixu6{ly=< zgIV@(J&SoBkOt~f1D`!u8d#S5Q=6vVkK0!Pl=S`&oVrD<3$ASJv%w_iV)qQ zBkXcFWJv%yQBh!Zy(*8sa3`2JPrEP&lEU@1Yp#iKs+}l&ljTwt+E$$?E+A{z!(!tM zQP(Nu^{||&ZPe&*uOEtnGjk5xn(Wu56(xxNEd3mq!SX(r=a& z27Lpj*wMA9Wn;Kr5p%yZ4&l`q$iQw4pX|&Ik6*q81~u%9(Ve0+gVl_l7L^vhV7)Fvpe6z^ZQ7jyV(E>qqMg0o4VTAh zy?L!5{J24PiX!P0vPiMs4CmEz`zkWro%d&ASrw&goRwv(VC}p-;DT4_Cc9{uSKVu_ z9pDp_h8K;Xf@?~qMNLuVNJ_e85OOD(HRzF;qp0`)lWk0$yvKZ#%D0wpr%eSCeB6)v z67dlj>fo>tF$}{B$oxQV?b)vmXE0VzLaL^xyUC|IntFRdvZxyQ3Seu{sbV}T_q4SY zxc2R=>)-gWPk@*|;$8hGMQF*uyBTmNm)j&UPJ@{1dnLl%htj_Bd!p9;=|=e@A0?~b z#l!@Nox43bht#z0_=j^lS_vdimdYp^-jiToC;`sI%=__dAOB~Qdl95+dm|%@gYnD0 zvpQcQddFc!=DG`~Uf2+Gg0019FXJDALeq{%x~$jXMk9TyZK%FiBd}0IwcC@Y`+DO! zN>dvibwbV?POo5hQ9If4j9KPcx`0~Vgn8v3e&b=d1^7-G>7I1C-G>h_p3!kJLz(c0 z5qr6lBDTE;yXKtw3!ayBL!mn|PP+VLX!e`BTERG-gWe(~;M33RzwQ}iTk2nbKg#2L zbnIY!F(T)sGjGsW8p43N2cY-8pDS&;1Svh-$JynnF-V2LQ(R`4d=cPCu+?b-39-b> zIU`(m_`eOOt9)7HeO*LCstHVe$3#~&@sN#IJD-6~wH1nW;f@Y2YnU?!V4Rbg&@ohc zV>l1k77KqG8q}ZD0mc-dYy%q$>l~4pK*8U?q}+=vz%PiHmC<4 zd#TTL{MFVIkOao@Q??_s$eS`V795403A2@9kbbST;98mSJ|%Ey{?e>!243u{VA+l8 zJV=2KV8M%U#0LIaydi<@&JHKtH1EK}`&yF%`QLGSmL{xch^HTjrIW3wtSl>!T3%TR z(r3?;n=;&+LB>%{l~%Z;`6+p=TI(bd?xibFj~1vA$DA?e7MbQ2@?ShL2kQ+`w`sM{ z!{BC!n|Ya;T~qZn*F_&wW}G2$ftZg0QnC3=C9ZNhjcg+G^)+12(Hb z4+S9bYeoHKz`*ogoy2i1v7o_?nOu_XRJP8JzO)C`Enrpwznqc*p)YJe;AgS(nq{4dXsu(O-+H}g+C?4v zI@wJV@$q*b1)aeLtW?LGfPjiY%1*wXf0R~9?ku-?NQ>Ox(wLyf3MYU?F3DKVB+X2^ zaI9s>QjSu@g;?cS(Xt07=TXSk$G#wvNbEGinH9GEurfylAb+e^X)JI5LQ%8x8VAj=$y(X1Fhkh;?-4gQ)-8I3iq`=LZyqF?Hwxgf_(!@8i z3uS*^?JoyzOjfT}(`04zrr53j#J;-l+_<6qRCsFjWc$3unpc;avY3d9iULf;=NkhC zxJf0xzIB(M)PTLk$GvsmsA+w9|MJ^vl447s9ktddr}MrBQ@nm8=K22`{#(8ugk&A0 z%Dhh^lj9JsJk8_*o$G263+%6P*!HAFb6CzWY+j#prP{j!X+tB?@EwunJNvp0e}T^V zm`)h(XRBvsm>>9)(F-pCBzrQdh86M={s~Y=i+3OenHlI#1k`;y#4!OpZ_#SYK$z-$ z66Zq26y|=*V=AabbU=6Zn0 z*S(YyfLo!q&yCZ4Cfs|}!O`v8@uM*TW*xb6V2Xa!wAc>{keSO9o<>NUh zYlt^H3+9|kwInR(4u;WDD{aIEm4VSj zbo8bFg4K`uhEVD1vbHh+kCmminf9sl`r80Ft`>E%qih&qQ?EVpf1+T6-yA!orSmld zYT$mhs7X{)!&hyE6C&!OSI8p4PCiMWgn|qO-EtOA?|}Yr<7h0`j8II8qYtn&DyU?v^$^h+w$T4D&zMX=w1J!4%=EOmd9{ zH#0H{huqcAbCCtII|i2CU{( zi>cf-y}gDca};VTO~B8QAJw^lZfY<>4zaqt(Y`!EtJULUByj=vUa6+R5CNX-g*gF} z+uuV;sc21GdRJjUm(Z6JVu^mdyR)O2>nCl#em&7GGA|>K{|+2ybaSH>T!yVjtnIop ziXRHKDoee2hEulG7MIo)u|0>D z*UI%O3a?-9O9v}$t~G}ALo0vwkJ|wPEXSC4f5Dvv0pbV|8tyP$IffoJmKC7zA zqLy5?hE>EdTh3`7nY6~n88!9wQL(YDX=2`2YcU+PuCVNs8UTe(K-tT`wU~tL9DzH- zy&o!Z&{o^e{O5CH|C$a(p`hjAsvJ69(0Ecx(4g!dER%vYw!8ax#yStX|3Z>ImG`6;pTte*L9ue z@B9FRNS_M{l9`xr9gu&JRF^L9a1U#3YfBn7If+bk$EeW!l8{g1)ExiEwRn)5FK#vS zSKj()#qe8-bSBXMlhM;dKRyn-b3UG?5^P;=H9DNetD(efaqv2N9P`Q?SR^{STY_e! z6c#OQL}LSz>sjC2k&pdmS7m`k&EDGrSAZk9NNS=OI|fxHrr+X4C9Ex4+wd@R9W{J2 zT~=z{vAio)@rYakE6Ep=aQqb_L+Kpe4GbrXTPy9|uyETgxrab2?r1h0p++P0Is2j| zG^v{iW_A@1oRv}|JFk$@beCQ;ZuLrRSz#Up&7AM?%ba(g3`IE*zA5GSoC;kK9+W-cRC*mPoTq^zd(6X#0Kk$o5acNjwAF08%7ZP)IN z2_gvmxt^4vuPH8VPwZ%L_`ZY~zqFRwBbKSF%{n0kw&s235oGTY;icVRTv?Fwvu9m7 z8(Dg$exB$4w6b#j@#@mYtKM|H81&VVMK6?S-E#NshK8DT+t$U;?!>PvU=(N}Fe;B1 zWRy8`C&eac4cW1s7dDbVJKAh(6di&BG4rDRMv?}!Z$g))q3I^Yk-EPqz!4P4&&qOK zepbp_94xkalkhu5SNpTuBcokCst0ORyt0HQJJRN43P#EAs+S%8obx!S{=90XSqzL2 zxE32nhhKLSxqbYqTOI8WFzxK1+1~1pMcu3P)OFz=BG4E}u>e~H>?COclxvE^Wu>L1 zsgOc6aiPIn5q^FFy1m#MD_xDHDho(p2QSx3cPRG|Tc#gASRWe$X-xg0yRyA+hp}=C zsOrFIioP+f>k^Oe#)EGbS2Hn5n}hrGcc=Fbp}_CU+r9-VDaQPh7&bTroZI|jV4eN= zB6jLlH`wT=14*3dUyhR6>l!xyt2>!1Q&2I6%-Q5HTvum;@Qd0j-a0#TyOCSutCG4O zZo&=lN&*i563RV$s3mxLs-;?Z84Y%f@6pjg#l=E8wa3QW)m;-46Zad)K2=PKS%kvr z%IXVx)5|MSIo>H>AggUv$Ir)~@9S_fdpEdanN5_?+SygTe*GHEmtwI=>sY|Cwz^u~ z+s3zI%8Z$ryz$gtkUoZS`SMKZb@bhl9ED&|gQ#>u(!ZtU?MT12Aa9CyD2|Ew%d=Q` z<5>h+?%Jya}# z!XldIUb!mYaJ3|6d#FzgTXuNlk7x1_2pJh!a=Gbb42VfjSc$I5TdR9CkUMH#hWqq> zx1Y$%$!|ftri9-P$_Q`MYyEh*khl23DEPxmZS3#@%O`aHTLe$(wC;R<`=R&w`nl-M zzsv~M*eG7cdqIA^AOv4a=pi*^jiMc zl7?6ks+IRw+NqV13^}2bnv-ew@7(%4@AF)z)%^fB_f?*Q&@c9)d^+bP-``O70_G%l zayx-csMwSHIW{hNH!t_DPQAfZc`Nmo`^zaTVU=IiDe6h%?Bt^?YAO=tdeMICE%)z? z`fbjLtFAe>Qy)HH@F4m2_62w=w?6+*KKv2-_GaYC|MY6`ybPcI@Ad!P*Y^MauTL8E zF8KDwWDEQ4Ml*_hvE@Miy>ej@A0{d8%gk@@Z$&fuzJ0qDc0>=B@B{6K{Y7BGiWj>C zs8rs^YtHsTb%Gy8?h8Bhl+vMptjW+ExK8R zo6|{o;30PuAYkz-r1OR!kg1T3a-Jz%1w7273Ez%4#@tVSKu10}r^ZY+>K*v@L-b<< zroR_p_^syju>Z+Y{KumGi0%)}RsZu9{D0o{&u}m!;^VtpgK)td0sJX_b%l6ELsRCk zCWprBy#0Q*)~PVd(n#>a`w|T{X>Muopoi_%t5+W_EZ_*AYaNOP z$tdc`#Ke%YGPbSp;^Gm0&Oj_;PTN28!i!5wU2u3yQ`6_E3JW&ZKObvd_8^msD)+;~ z&6++16+U=$BoddsIFtHX)!QSYyfsmAsmsz(<~l>@NbAl5>HN2(bl;htTSZC1CRdl~ z@4nDP-$wu~Yk>UD`yFZ&n3w?&1@t(Z(m$nE=cT)B9BUkbZlY9!yHi(Jmr+O9Z2dJV z5S&AW*sW!HRLn>2*Y4Tq>4hGe@n38YUn1e*Cs-#Jd(v^dM^wREPRK*Du;dwGp!+>` z#vUmi|Bea|@0jh)A91az(I62hP3l~y&oFtV^sA?3wl~4uDSltQKeD>kb-e{rH^|C=#DW<1Nl!K9IOsMw@hd8G3Wp>{HaUu@L>4LK)?L zXW!MKI8ZQ~-=ClJONlp|Ep|?zW}ImEmn3bSBf;)NzRdQhE=yBECv-9=zWH^X+cinJ zc{7fz)+B4~0sURy1haAYY{djwiO+5i^PtW|V@rmB!@H)%QXY0gupIncoIJ3MCUw zh3a`t39wsh>k|c!@2*^qYQ1ZxP95F=4TAa8l$1H#$`hp&Fwb;CI36=xq4|)z3>)>o zUJhg|C25F}6i$u#AS98z`J{8e8K?gm+PI}j>RHYCJ(z{(l~L~N4`!fmHb5~Fz2W6+ z_H0`_^FV-0zDpinRkpTn1UPel4(!u?PGWjop*UgKI5vF14~YJqRfS>BA&~M(+$)n@ zTjvNRuHQk~9`}YCN=>3;W`C~vV6UAzBxA?Per^x`Ws#nC| zm7A+#B;?5vm5H%f6Q};x81lrvCgd?W#(CA@LL5Z+^)l3)neQ!7%mK8^qyuf}NFv4M z%=S8>J7L4iV$oEsvCKEm>B9Q%uGnB389+*~oWU{U2t zR0Gk;gKl4*t4e6Qklp2D08^l3Me=TJ&`wNEDNt79iw1t{$-f&9D;qfmEKxoNerQ_Z9> z9-+&wwy#=%gQ4&tr@3V`E+*8R#mbYMXuMFt$VeXEqt~`dnOJWdRox2ei-#Zq{+Ckz z`OSAiFu4ey7Q5mz#4!k(M+fM-H}veMU31%)HB}F3uQes8nyP;1h5t} z00!)a7MrLhu(ELV=cPdwiOp+lax#zTx3o##N=ZG1$D*3g4zfSs)8#&S*8J;b`ueQL z+vs8V$mxHDTnye)nX7p42{+r>j%ty;YROvhSI_N_AFd@GcMjhL*=`VaZ3~qLX;l?R zCfZ{Fd$^w;E`T9vi9L(%IPa~n z^;!}_oxX+qG&}PW7AZz{6t8o{>c4}vuYh7X9D(oe$ClcacVapih9ia3pGucfQYE8esG3*S)=JG+iW9lLzlMZ3*4Ni> zOjU5DcgVFjHKlfU7Y&=m3GLAr>0;6_GJa_mp#ohecGH0$g9g+Jb#h)&E0xAc=JLr{knlK!0-0-K5=jp6)8ETa z1lH#oBPH!IC+S_n#x$*#|H3oIxFgu{uWE~Wyq;LBUBKK>4Z7UUyZ6xk(IkpK5BZir z>VZZ}OUt0!NP-41$@xTZ<<+u$OsUN8p~PIs!(n-~%Gc3-k(3gEraf?-5*yo*DIHtw zxbal8Fb1@2ZfxU5Jv~ez$&+H&u)-wD*+BMGySn�ejlXjWe7O3(BZL55uyjCo>I6 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ξg(xR|j>&l?SmW_)#ic&5gDNh#opY_3Osb|x`45xiEX zq;xj=w0ZSNDR7l z$r{YPLn6PM^YQ*EafM%d9pvCH9^7}~nDImJ+4>5O*wxn=adRH!%aE9XX3uN(MJRq* zGMURZT+AH~r-ymNVq`)cMLtd>bA+$O9w_lPaXygi7)I+6CtM);#JK19}JuhEXplxi8~vBw78XJR#a7Ud$SM5gCIakUfZ zwZRGV^Z-i&#%aX_6wjzUjrW{D*_NY{h?J#_bq5#Gu5^s=_Ex1g$t&W^ep-(=ilmov zU=H1+fwE45tsLS2&k73YMP3MPAG&$}r%aA}9zN46V-+s=_TSuffMCN>?7T~!3n^

    *#r*%{z_ii~Wd;GULcmdmA7n~D~tcxocn9BqO(m=wD;=J3UHA+4^YdRb&yw;bjE zj~?-B-H`WUflF1|!GmL&7_(p2gH=A;+z#d;5|+TsnKDyOAM5|6wTfGwDdO9|vqTW0t=`c`S zXwP_T2+2F*5z1}Q%u5w01Kr-EAIf0TnMW1tf~8$v-?}^j_4b|+iiTCJAc6WWW4Su7;$uKnw}J%VwqUzjwu*vKrKQcT^4uC z=6iu33gE?NEqU&~n3?#hu{o=H}+T zHBOc+JXC6$=&ZD4{Un6pTdfUl?KQ>z8|eP&)C`d5q6Nu#RpPWj*c`W@46npY4Ph;+rgaj2F>-@!cR#_{o`&a5b6|RyYR+T zmn1%*qIyVh>C~4htTsLJ+%ix%^kw!^^{E(L)S2vU`~LkLo^eFm%+=LB%b|!-K0?d1 zgSBC%_iX|m3R!1-L<3#0S7@$3OQL=^6N2@Qjf>y9HP+Cx94aSvRE|65!i0ue9G+tSg|D35u30>*&RyJh_S)``_ih0y;g%O3T?D2RgmS#W}qqCY=LaXjxl(#1bN7 zxF{MUiYHBz61skLz0BmTGw)JQZ$gV-UQh3x<@1L>w#s$BdLAV9+Da`eKR=w#kCGDj z4D^CLQEs~6qntZEQCEJ}xV4wHaqv3s-@Z+8B(dh3Tj?@bcB{K&1UlcVZ#w*pk;#LT&)ihO zNC}c>1#fyz1|JmOXsjBqLv4w5G=%Z12{%x*#R@mLxK~7$YhFQEb{&fpl*ZMTZ_VvTe!VMdSk|s*?Og9_EIm6oN5|`Vlv(z%3K$WL zQ5}ll%eaPDlZD0f{?r4$mXDU}LM%KWgaBqP`N5hc*cDLZ5!u;@punie80jf z`S$fzI6MRNdnlP^x_%7CzXDd)2h)F0_4N&#hnqtP4j#_gW`nrb_J2Q)<;60*-udn| zUbD%!iO$HFdE~vwFeSCyC@rY4K`rcHToxepc1%ACf?2gKm>`@S&09}nEBOz$Lr|O? zk6r_U1~OKvMKfO4M!b;MX=%-4UEIS!PzqP;Q&EtkSje;jq?acmNbQKn$KWNTL5}lh ztyi(@BL>l?&=@1V=|Sux)-npvh$(fbpQ^_Fm4L*uF6hwq#x$fQ)q35J@04yo%BR`s zd~ey8v2!aH<@;Ki!R6z^?PI3rK%ks3W~8B6!u402vIy~z0xn8po@7Kwh*tFyOp9}s zR#6G|?Klal^<>H+cb~gOcfHa*=F8A?PbP@GW8mFUU8RQF)X0(;S!4ugLnYw#Io%ii z-KQR?$vGl%lZCumgbJ+i0Iam4-|?Gb+|8>&hvvn_#Tw8gTfZhe1$n+k?Srsl->Asr zKYXSYyT7HIgvOGtcaAK#cT$sZIBcx=Al$$JfQw|bURwv->P@nDwRAPxQrr-7P+ zlgmODC;>mw(UVlh%eLAe{yRXjz{Va5& z5jvDe8CTW{d!z7lSS!Dw>1t^8HPF5OyFz7EUXEG2wl zytva}gL=cVX@ylESJ3G5zkW-6J;_YVKkZunNf_B9`B5r3S3etp{QS>iWGH9w%oFNy zPuQEcKkrzbSle;3q|Jg);jLBmNYiG_y?EcO19$e6I$ESJ3Bu;|b}0j_BfdJO?$ER#KhP-7ge#UGqwD@?JhIm?Odrd!@%ZFj0udgbTsW3L#AhvM%unyGO2hsq2i6 z?(b{74sKWqpVz-{nU&?4Sr;v2Ct3Yn+X#k?h@5NzypW@diG#U)?>_l3DS$ODWs&9Y zY){!*hy!SDxk_}!W5wrw7?Y96y#R)`7@$S9eRu!TO1j1VeI~3g6Nh&X|UOa<{ zjF0E)wmaUgnAwYk)j$QP&q|;bOd;?>&B<6SroL(+^>^sA2>ku&Nt(7=xqH^NaM_=gZr}W9O<1Gpb(#~K`f8cZ zfriD;?NBEl+#kdlco&nBYVDeCBBCr|h*gm4kbXLSzf*kpTA>-2G^3Me#s{R&JOiT;| zK`kg2sCw5ROtqD#`*%;I8;ps3%vQ7{o;3}Zp66P2Kq0iYrjwI1%{Mh%6r~#}0~F-( zI{yGWW_kT3+e%a6zu}=SArOnX0lhn80hE-UDXAAeC*d{qi%p##Q&Uv9)24W;@j@Yu zGtMdWbohmEun7H8iCzqOvIk5bpq_1xErC&;Uv7S;-#8;wZlJ}|Y>yyDue zsy>GxFv@vsc3M7-uc2X(u8))gYCTmiatJ?H2`&?T`xi^-oe}ajms@F#g@@uEvC%!RifddBVjar>k4HFdxKU+ux-eWGyltZOO z33BA4sb=GgsBpt|%&`1o27Q%vhWkKE2a?*yidN&u$}ghT?u={pmN`cH5>YWyKf1J= zQtV?V-ME)4eQKB{mxR7?2;3xuG1v-tMRasRz>qpH89B8;b4y~)bc@hH@F9skK9D+z zF`P&LsIGY*k{-_uzA<0_YiyaJHox>3pL;ejfz9sp(rA<5af3Xznv+lKWGk8L9|0^| zRL^T_Y-(YQtDv*oV~NN({qZUNGQ?Cbqm6G&K zw{MWEg(Y-V?~FAHDhwSwwIy4HZ4F=0^nB~gMJdi6l?&f~|H!XeOwI+%9Q(g5b3c@# zIQifxHKxYJD?Jo$5hWw^wf4utUTNW=^SnQHKw>VI^jBXr*Fr|j>04NtjqDrtM?ztt1O!byea|; zkgO2KoXx3RuvRKc*SrITUF5_c)RrT@LFxU)TwPG;b6ss1pKcy<)BQ}1^YXrt>==?> zoucPwIowlgC%a_JgZ0TV=Y6wfSvOW_vtiKl(Rmst!lZz7XvuE?c%Cowy`nxk%Z8n4 zlGE;pw>XMOZWwQ&pehoVA6+cDm3n$HpM}rd$-3e9r7`P@N&z3s-&DqR&Xf`oeh~j1U^TKS z(whSFIraa&WP60Z_Ae{W<@e{@rS1W$2BUY*KU9rkDO-&KZIGVO)YbLvl2Z2E6#U4} z7?`BD#Ai8^c4`~Wtj%%zL#S|xhYu7A{o=DJ@1t*{wHaZ7%VVe>Za0Z7^zb3QupdsE z;*kByCXm0l*uBIUI_g^^p44O~Sk?o;;=iBG3R0j1tw0OH!s4!zsHNM2hxFQ=@$r-^ zEv4y~W-5@Cxyw3wpkzy-{l?H;u;$kQk-M$iDN&M$-CpupT(H7-ZqZ1rRJ^B!9}{Mh+Xc%gxhvuE(CJ>yZ|)2iWel&dp2juh?*jy z2G8NJSxt-_8fEl4y+Oj8Ii+w??fUm9L#7%>R=Z}%a^|ox;&vz{26A)TJIHZ()CXP< zRe{Zz1e~kK;2ieDYxC;vCsC`%u`T`aj55V^>ZY0_)FbnXUs5%?ed6^@QYv%fk~h)d z_*qfj)zirsirkah*so@a4bhV#nXBQcw?t%Qg)EW0`jRT&`n#Hj$4 zA2l1+!nj68b}aiUFcXn%+)I}W@@pWe9TW=aODT&++fMLJv$9p!$%HON&kaR~W;HnQV7Thy!}XM$Fg&+6W! zX%v=UNNXACybxcNvd77B`yr!o*Wh*b?80~U1n27}<|)17qfm%_2CROpaNA{QgJ8+U z!KwGEu<-Cm0yYr2T;u2bL^&cvv!6bo(q=hmzQW;!_k*Z#tL@=^L21Uch?451T7#@$ znwjcK$qT~{XQ$0H6i=z8irl}GSLh1um&pO*MO54d+vshe7sQq~v~G3neN~y(P-XJY z)bb063edn}%VxgH)_TTZIL^o$W0UssvtXW=E-`QsMV;FGVsKI zx7+KH(GD4=nLu6R={eysRa~DJ_(~%yuVOo#sR=%;4qpP46D{35&Uj{KwH-h^iHIx? zBrD2`K1SbTNC&LU?|4l6g=2Bo$9fy7!X;$CkjNN-J6WZ!6f-L`H3k3OK!@>jiRSdp z)OEz7W9MWqlaY}hiKeFeWU;H%=clKK6Jy+KVcPAbPSY&v*G==(ebX)?0z1I*?TPze z!HNnY9IDLy6g4y|@l@XT?iGlCG?*21@7_J110=y_xQ4~6HLa`gU#HY1w4K&JRpO4_ z47o;ELP7$V7N@-k13Yn8S633Sl$N@hY0@`gk5GX5p%Yd5cIJc%ILs%#O4^3o;-Zq^ zU%uWZdzz{X920W{#<5>vJlrJS8(FpFO}f8p>*_vLU@N$I&MSjf5#JxVtXF@%OSC{S^f=ixov3MhYxl$(cZ=~1kU|F)+78e*Esd2>utWjA;c zOhz}Ghuaer0q@1;=ZVO|qX%cY{}NbZ7i+I{|516C_3E+3uiF40T<^bkjzle%7Z{1o zf766&>1&g$+%>ShTVW%gR(=-IFFuKR7+ijS8NGe{H#jjZb^>sXnVEfQ;gpOy7RJon zBILoJevN8Je`cii3yxnFl0{H%?L6KpJ(-XfKL||*Zel|r#$ae`%h!w=gRkXvNikxZ<0_ z(Ki^gX0^N!Sv_ zhO`SRK*r+c3ezIzY-)7U(93?gb;^No)2yNBpN5;(74m@>UgQAP2HLo{ z1ro-X29j4PnU?=L$e)=q;amC&r(##iK@;72DaxYLl({&7>8Q-Z&c%09eIjgD>jcAo z*NaJB10w8neGf%!^qs~%I?w3O5c~nxC0b>5lT_7R>N&fKsGNb~=b2t1Yslfr7BaDE zSB&X#SbK=QP*+~{mrg3k_xp>tAUub2cMH3@15fWdEH0_3pGG@1zWJAJd`VgjHbeOP zmqBH%yX1DBY3Jy8{Pq)sZIbDyLi$-`qnzo;kM7t5vf^U$4dIAGS*A<(SGRqEG2VXq z-#f+CLH?}dWPxl1EL~3|cKb3W8oV^n8jVM#qkxt2O2A)01u0qA)>o0=c#Mrgo)_=`4$P9QM zRbZ2dTY`8|vX9MKWG^j~r-Xf94b_!w><`KDx4%tMSL?y3#4Vax%GqVIseM7*KI2`w zN{w7ruzUtU`@*@3TeHckTEt6g_W%o}vO7c7(cjM?Et!v3* zDU7=eo0~r?b#C1ZfO5v!%b)rL!tZR+O`fri!glT2%8V%8xUl@|wTxK~m5&pPN8R6A zXIELhQdedF%(*%~h1*zeXSaNv`)Yd(*7l041ORt%ZztQ35ucu7?7AEr98|$P_OWI_ z&G-&4H}8^95wy+P%rz~j$^x_C&hUYARrs@eBu@Ml@;fyzl|*gE5; zL|w#^s>Iyd+%wQAX*u5G$<1ZeH!v718GapQf}vZrZQ7la1QLt}M{(Wy7E!~HyPEpM z#CZDh<;xX+#z-kBu$r5-62jngSyM?#5Zd1QJY}fDhqfD7jm4>4 zK5AJz8s9woU9XWF@LSk(FA*=7p7(K*7}johny_R5m(su5+ZRLY&mOWvV<~2^SpoIN z+xL!>x89j4Nt!b;y6^VW;gu!OJ=Z&E0`H7U=B_A-9=PNE^`s(yh_Ue>dWrpNRQr#18IsLL4f3$%Peoy~PQJ=Q=-QB$*PxW&5}HxWbKK(QV!GAUAE4%gl*Ngj{)hkvRz+-O; z>tZ$!H*7+TJl*(gPct{^$>F(mQk85}{l;PeQKpgb*?H1Z^ib$m{@&B4T3NY*n5AqN z9qmM59!g>Sa_w~?*vfL#4o=9$C7aLO?^hvTf?Ip;g7vAoFzw?aVjAyf0Yg9Aptv{# z*7ND_7!M}sLM~PHmMRcm0@3P%cO{sN^q5jqgQDc;O$#JG9Z@@Z=R1$ z$OQN)n4fR`{JMM-|K6_LavYk ztG$7&L%Nqk5j?Ht8APsVF8#Z0UcqA2^ZJNR@xVCi+<7|42-;<7t0Msc5MRlx0`re9@~*?gZ)yD5&)taxz5=sck7T=baY=Lmg*~FjoSeb z=YNzKH=D7pw2qNJ>Z!o!`e|#CJithr9=sT;?@dCdzjbro|G;~C1ptmh&}-44iMlOl}yLDhq;h%5Fa9vXzTfU$DX>VPq; znh2UwrSl5)J3Nqj+(y&q@^bjaz0?7ZeDPA{qXH#h0R`ILw$zraNySs^9ReED3g<1A z{>v7|$onw!)*RiEy}(e3OK>~MJWzo^)peG~@HJ!fW&8+Ve0k_U%-ZZ7o5NBT``~qa z4zuY_*@@W0)cY?U?lfaio#9^gOzPJ+O3ZVAv}%|Wnn(EgrK8NHFfHgo3$Ek%(0Zfp ze9ltH*3^V%B?2da_Lb1(QG)A@ThG+QuTVFT)GUN6c~1!AS~`JPo2zXps@$t8zxG(o zEb)&pJae*fkxpj@%ktVhRRy z-F9efc*y;5BUYlM(>pYNhBO2HRu}1zzgHuoe5P}eguH$`YM22(AewQ) zY@Fn0h+dA0^EwoC*xs7>W0_`tDF(4fpG=C~C?z5?HLliv$SW~X)I&%IjQy1% zTgC$h$99jDz9BdKPsTZelrt%h7dKgT{6U%9 zAG%X|ZcDN38a=Jp0c>s9R#Wn=!q&T(hxlXPVjUx)2G>FRp~J#VyZyH!e&tm^?o7aF z>8i=CO2YfIbi-|R`a&@2?W+2VCJ3thSx&d&?-y9bG1txu2|8DaB3?sg#+B_&)8eZG zs#t^>;CiIvTraohswL~Jg`L%G(7Pcj2h(Rx2Lc+lNaNO~;ow(PQ`Y2+F?PN&oQbAa zmuI92kMW^&j^{Qw_#oCURfndj&a}ouavovP7}f-#uy;9Btc|G^_pJF(h9-#6I%=?y zXeSKIS@d-gf7JoH^C@3?WL>z$=k@|twhV_Edy1P)Qu%e5zr zpLPw!l)Se;#`uHC{HIsmv<<05e;r#!P+Y7&kiXbTGaU%G%RCwN{2bGeO+e74oAPye z6U~3Mp{3Ec^I()m%uu@;fbog(k-%iIuV`;OV4d+`mu31^CEtdQZ14|&XTpu zOT)oo6@JZuG`6)xG@eAv_wzT`A6XS`Mb!LG5cQF+?QFUWjKlKkR`RPeX_l)PE#aLT5WY^YT>HvyJz<{Y(r}plTJNJUdhkHoh0}kNNse6ul z;WvF620oqT#?qq}swdlX3H1qj(tv#@ID82RFSfiwU2Lu3w$<#$GHsU5ZW<1&^NUj} z<8`@(>>IF@Bl9{=oSJFAs?|Kbo6%tJTfKkMJ2&sYQo%+(}EaE!X!^=+Xt$sXJM7Gr}{)AcFh4s1E!=sE%f*hG%PyylR zDqFB;&2rn;uo>nWwxHu3L0=RaL0|8wI1{l40t{mBmh z?_d7U4t(BHy8e%c`_BL1-p>DO_(AmrSWy1w?Ocfo?EWvOy^8n$;nFDaf^a@Ryj`eS zRdNm*rNJdY&;N7v0CrwwkKd$ujHv@?d-6Hr3@f!pACOxR$4J4d4)0rw3lD6* zezQ4x=o+i>+ORrFi6PcMKq4w-G{`PhDpNK8Ds3j0Wk9pm@{wd$y@j9e&U}vO1lPMM4~kw_gSNFhW6$gf9|EYFfqv~75V*w%9srH?wp|5Ct(-&IbeQ4pfa=T_eb~& zh8${{s)fITt)$`0)TDw|xJ+sT{PyS3Gn*x?$EVNGDQ@KAxC(}6gUPgPfPYqDR|4Af z2cVtwxv&)pia@nnRTGlO^lq;bf3*0^*SdB8XMMP=Xn7oqSBvPrn?Ma!Z=^^iS)3nh z?!Bcg;jcDunfz+cLMH;py{#F(@}qT6d+P7!HUbKbl;S}x460Vlv~xr#-Tt&^=sRNM zZ=`o87lL=V!z1eyEKXJvLn|5QugQa2JOXzsu7D21r?wJ;4Z24k_i^Q=$;Sv9>wWtN zn<=h#AITDwT91{_klY-Mbe<$V6l*(6pF6o?X2j5ifX5->&ne>E=T9Mx%`fAl_g<3= ziUl3pWvox?jP-!p>6<*b@T~eH~OA^Cops4 zWUtRgq##-O3)ka@zUN&pOe&b6$h3DZTE}u%CYCab2k^5dv);>Y8QKI{m2R8TXzp8; zBlJ7qSg(x!>s_=l15dgSb8ZA1(|fv&!B%jxpxY0X(C7=VQ=35o;FB~G>+iW2hq=Mf zldy8`{5{33t!x1wpIqO7DJVSs%VX#^#?0J=B=Ocpk6|(BE4t z(H&d(Vp0YI8#vpucuZ-6KMy<$`uv4WZQbFM{I8g{N9uN@vjWHS(d3=Ac;dYb8sC&l z#BzRge#CfKyMd^8=}6X?2|Y>%#w#}c<2z`{LWX30RaxhQ`0MH#gO&G-uG3Y29N~8! zP9-`UfCrl2_2|n518TzOl*r0z3WjOJDkhvdOR-m#4M}8rH{A36j?v$=hdzXIXo1R} zI9JC^@=GzF!zhou$$1T#ljcCAt;5Xc%GY}ES?)@j* zB;7rrGrL!=Dhtb>pJLcTPp)p`7-?OCE3i5GRyuVe=_4~6QOXvdU}_wNUNj&@v{>V> z4Cm5DLp_lJOl%ovc8F}HU=5yGj??L^|F;2qujj`z8;(t*z6JB2yd?-wuXTcOe;l;@By*|W+Ghs z^{bhKc?Z8}-n+Z5DcqabEZP|jsBI5Z{aLke+AYLUk;;=cDDAjX+erT!weVxYV-r4x zULKEG)$5>zy^huZhK-9}d5YgrWajgnx7Fof4yR{3h9oD6P0x&{c6rw@CHV2v?I{o+ zKK~T9`=-r+4K>SjtPLDSgvO==&4_%`SfFf9hPeF4iOU{`Yk!GJCds0~qLS&EiX~d+ zC9T2bmuf_@I%8I`E@2anLv<2#r@|QLmH6Kp(A-j3ag))q&ViudnYjZOCso3LWWGq^ zQv=~88YJZO7+2)hk%e?FVB1w&>M3eict%gGkp$jaNe0|73ZEEnZyeZ>HI$t;<gH@n?+&#{gfH`RnfJZxBdN4ECW*s4Hr!!Yr&&Mk0CDH6M5V6^4e)|_m0!y z`3Hk?q!{jnBqFh>M8bb(2TmQ3y!AELTsvCPQEu-PZvL8Ce*}%hR2+-p#z}GFJX_|9 zDKdv1@}tNC0xrBS4;TI=r*hQ+e>w?t-Nz{C6ogv!k@gEUQTDHWWIZq6iG9-6=4DL= z2{(J5!YWhxOiXUJ(3OrI0JACgD>OiU|n`VPIl1I^G<*LK@s=Nk_aHqRche7j8;v zmX7zjF|e(UiK>igA77V$2^J)SVjmah zbH!X`&GWiY#Hww6Q%{QM(;d!O=DhknV?RKAv=9=IcDu08Q-jtWDqqLeA8$f3X3{Tm zJ@r4)wZblIhP}FIJ%|!E%5O(`P%Zl&E^R0$0ChB)m^S_Tjo)YZvEf7w!er|YuK+>L zcq=6h4XhhcZMCFmV)EwX3T{Q&k~@Vo#CEmBgAevY^NXtpn_#Wg9{hLgmEC zaf?_T8ro_Br#}e=9v<00IYOi5yw3B!mrP}@WWuTWwRc;lNQ&K*4OPn>AP<8=ri27D zp9Dng-_bt4d6VyCkN-1F7@og&V;V)2)ReBKTw|!IESnPQc;?o{~K) zd9)RHqozB))Vh^kZk#ZYx~4Fi za*+LK`-+-KL;GT)vr^PWHt!Oi=G&QyosOcd-klrFVChiQl?a zZ;VN=d0oNX?8}DU5jV--EJi|_-=%}Kx}AN76Ocz9o|)L26qP&L(CDzwkEvKkzF)UF zy45p5XN8S-!$9_e~O}IyWKc#t)Z&fY|__B=@V?7qD-XC z9{pTj(2J%Ny&E@kX8fvHbi-EH*13)^)_6@xfv!GhO32MJPd$maYUuLPLXu!1!UHXs zSfWrvRb+xK_ge%hd>%atGy`_ zmCfvaYWKbaj0~HboqZhgq3&pThJm@@pb7L*I7r&yCVH)c>Bf7bJfkkJT{3--o#8$6uAo_WzkB7j-a?cA8#psV+2{`#u+-dsIt0B2m-3Kyst zNfC5QnCPmNKm1K|sPPVpfVHiyjR+9D@7Esld%KG&ikt$@CHB-F+&$$DE<>#Ux!JCpcSg`a zf%S{?S6Gug-E0<5M>se;@K>RC`A!$KT`ZHcD$+ z*QopS@X5Z{qp|1vWBJt^L=;BIWh#eyU6T#ek+pPc^!QyxzhwYn)b%_p`9rnP!zDt*An~Ij2RQ|G< ztdmAx(E~(|vNZ{}H`zTbl$Mz}xxGS-(Pi8-h4{ zN?KZhz+jW%L7jic$=2$VTAbn%f79~g4p`bazh_Y5^m#8bpRB>~9yOk>`d0HwMmMy7 z#uoJw6*vm)1Ktum-a)<%!3IgVkV(|aQPF!1ZE4Cn4cGao)+)Osoxa6+AQ)eUj=_H1 zq@t$b38=gIhGf=>Di6&TZI(Z5d1XQUVjF_Q`d6cWvNj0I7?-Y`NAm*4=3sm8(3N}| ziYYp`RtTPljt@>ibbcvySu)sukQCq>RX+)M>YoZJ=y2m#cW;r)tDv5K0R0euoSx+{ z19M$Iu3m+_HGUS1{F0!B8h)A+G+nt~LLQ9b4{zbU!qb!I&@&h9PrF^70{E$EaM~eg zFMW?7r?Xh%&Z2O!?;CcWn`)7i4q7Xbxe{}u!T^hyz^Fl@?B*7)5%vlEX@_Js2k^O^*quBIg<~2D5By@RS1RIUIY$27>K~bR%a`` zJ;qn5Pn???^e8ZU@2U__`FOKK4+Y16d=}*32zq&Abu$|u4(m?CdNYCyob6=FBfb=x zS!{$+L})7~$XRBnI9R(w<3VCH<1s z9kP|q9=E(t0I^H{rN2i-G0>lVbHuCTvpxdqYp*{?C(Q}v9y7{m-nQ@R z15BF^=U_rk3te}h*VT$XnPq?O27GS&1{%qMM5w;Gn%UYD_V%3-y$B$EiT8q74+D_% z8VcVhGwfWKLqiU(>z&>jqo*08kZhzqqdt~I@u~+0p$0(xklxhJ;iFj-_koRU$;cS8 zHU$GFk<)7ytsV+)eRPzt*Hs{1IHRQI>cq71o2K)F_V9Cjk*uUW9@N;#N!E}Gd}_t( zE$bSzphERjcg3k!-PxMsi^gtV%VA{)JXOY3h34b2v?J9>lr3jw3W9>Eu7Fc5eWFrm}TSP6n+|7+Nj9Lzx%at)Pe61lz;u#Y`@Lh1eH z(IF$w-eNPsj8@B^=$P@k<4tqYQTr#j;zau|1s#{`EXO>>aBUxw7-x8C-BMd?Hw?)M|D_JY17^t zvlIxWOmM1DYLAieVs;71*Er3R7Va=>Mvv1S{xHD!@&$R!7fsFk;&`djCKAj)43JEt z9#cw1+%)t#QKPI~m5Nf5-7@;XT6Kzddads!K)E+xx!kOPWqm^SF?=>rf-cM%&fv;FF!K=hbnC> zY~d&s`h6ksJR=_}_-6kg;BInxtSwAmQf>I1E&+LW6Ey`EA)1Eh54SNp?dTAO77a|) zI-M^-+;85zNS-$`e)e^5Gbwnp7c&x5eaX4EDZ7{Jgzt9sxv#AnkQR_xR=$xSju{+F z*KaqqKWBcRf@+Bq{J}1o8WN@#OF1XMvkHxUv;1qqu8SB*`T=N*h#po+0KVqxUhFVo z^#VjcdN?%Dlu$NBe8j)vLQuC%;M-#{3<-IRptc3o=E_kTYV6s*!UJms3uHA5bX>BQ zfjss7o=Zf{nDD%mcYen)MmS&@m+Ym2TQ5IMy(a}h+9LeJY6$D~cA&Y&UkUHun?ox+ z;?+KY8`-IPXBAcRXVcIv5RTfs;NXJSE>^_A^6)NL-Lvb`oF{dPzKT!bbw^w?lqP_m zueCBs;kg@*x|s#P4x?*C&Ef9k3&oBuR%N%%)3b1%G<%^_{dl(1X|kis!!iP5Lb8pu z%qT?FGv^HT&qj%UNg{3x7BU`Ch0@I?)yI9fcmVA*A&_jD2bzhILcq0j?~d5`O@mn1G$tmLGSVT6vjKKR>bWD2~*jaV`c1^-eR)RTF*KFA4B z*T=p!^;FXjRTy`c-i6r(dnztfN1QchI?DA~-|Xt@vVPp2yh84l{^{OPDkA#RiR+9= z^jA-wiS-%N<>HGEcN8#s`e~4KIlPkrBy2f(vya1aI(6Qp-%|SFnO=(Q$eE|2^z|ek z=E=JpDM7lTTNHJ5*X3?fe5c-w-rw`@!ef?T`*bzJ{Vi`Z^vEnF0ll0$`hJEzhG6iwkpJXa`J&5(2hQvsfsbA#HuhA2Mq;A* z+k0?>YlZ=a=+ag3Q}$UiSUe@MT*TH)|DRQ8~(craEHm&vZ!wk zgfVl%_(od<;#a>l+)6=KJ9Q-X;s`g#{l1}rzb2(w#Z8I5za}tMQ&x(pOcO?j3R`5a z=7wR1xJ@?CHCfxroppZuE1OBHTc{MRhm5}MJJ_WU8}X|x4*|Mq zRQ@C@&)l&9J(}cZoMJ{9P(2v1f${Su6v}vF!}syVKiCS%ns)ds@2pQK;WbLP74(a& zc(ig@r}L&y-k2{*xkRwzB;s>!gO}tafSI?SGyhnOa1eN3kW87P!clq2*Ag$+SjfM% z)k_~(m(FG@u;Kw&&(L<>OjhX5k9r2blP*|vrQN4cDCHujluOIOn?Xr>zN0149q-j< zk**Jji{7MwNXsdI>NK?mc(XTyM^`0%Kb&K4*_g(i^k( z+c=ijZXSoV8jlpH8jH-0a?P!P>ylrfY;}|M3-1gs5mx-oH=5QcpH0Dk@0Ti%GFk0k zmg1rp^qoyv#=B8Sxa+X$z-R>yw}&g2ctD<+)X$t<#(&hGH54oHPh(dv-M9WD9cG`Z zcb62K_8I;3ShmQwF+objP-RR3ZK%%6xh`;So)Ju)vy7aZ=XZTr8>63_J6`x_H2=K< zTI|&tqoI$TydG>N|X6`}R$5)5)hit?5mD9$lo+e$Brv{9Zdh>ZymdAeKkLRkWSU zlmF0sWs5e|{hMNi{U!{%K#v!B)&2;_Wz*8-ml58|i!TpwCh)ombFCMtSH!5+sZitJ zOw}9~GGyg__EgWMu~u=A{lLJ~bytc(b``sd7#;PmMkecmEQ6$PdTLJakNQh&__aS_ zXoNqU#p4iKKg^PjhL}zK+{6+*jRoRmiTW0!bcs{~H&o{i!6wO0@_1cRiS_-$n#kseuZ^$?504DeCo?tYBrBNF?Iw4TC zZsjV#VUB)DbD8miZbegk2SWdQ8>wB^J zu&A$-k|*9o4cV=ZI)bt}ZIvEUzCfl)48`O7=-zxz#f+;2j^!aee1--riVvCy2+nR+ zCauJ+Sib3_1BYLS26L19;EGYbkh&Ggz9O@CMyMI6sUh~3&}lz2yb|t6_+vrX=!9Fr zx3-H{MdrB~Q60I}yG{KcWZloY7IvF>jkbw$Q$Sip!;cqmE0Y3-d)*str)#ail{Vy>t52FzSQ*$Gk-HWJzq6|amRP=O zl;MRM#O7-iwa>m{bpE zgQQ`tCTkbL1p~k|(bnp?^*@8#;87~FVu5{RG}GLMp|Ev&74mV!0yiYXO&TRC&=6G0=aI3g!r zbZBsIYf~uj?mMN^cnWfPhsYP9Q+-FmIl96;cZkbuKz)|Rmc>Ax_s!cNoyk7wic+kCySFV^xDUi>VDU2%MfxoN2$_Bxj8 z0W41_uPUy^wx*_$MKuqQN5Y(8di?XPl}^=Dm-zk_`1S;uo@h=(@Gp$3jF#G8f!)}6 zuXLH9sStXuP8|@fX`YDrN1eq}qguh)CL{yIbDKp3d`RG#Tm9_IA~cvXqu*k69j$%` z6}ULj^X!S{VoP_L!A7&_X&w9(eGB-JSUVVpEr0<%`5&knT z;Fg~hsw=quxa2yYaB5neq*cFT%mkIpj|D7h>r&nhQAz#PU>ME!Q)X%s{Tps#V>0sz zo(H|h=V`+h6ux(IHP9#M)6e0WOI~uVt=t+lH)uwUhFm?v4|M{{+<#GI+vSFQzqtPB zs4KT*K&Uw==vnG}kLrV_ntjbKOz7=nv53-pNgvJBi-zSgl?W*)d}R^B_Qmk3*mTHs z)70jxmodFLm3D|sFN3WDY0=G*8KKX=hOdo{F)h#y;*`iHfK@|28NO-uzI;rgQGy{? z@n%^SU}EM9%mlM-wjV;ipT)Ma+x1qbwVEULbDAptVxC=#|75TtR@k30PioN1EEK%y zXi=ovND%FcY}tnY@KX0bGcFY{6^4pLuRddY&sF|GAvvIgZKT8O#IfNBr@K_i!`_MH zIJ|5xe7Lv{Ml~Js8K*(-vd&&m1IIW5DH`W?FYj9w7UaYWM(U8t)${VX{aBZSo9r7K zUmz6OuRN{swTeXUh!u=Q^B{l5>!4D;W2^NWbwyIP|3kCQI0f2&7CW#EcT6H zW!h|%d+cH6P5S*4Do_uohx-^nTcA(B=QxYH^BPYF^+^V{yqa5+)bOcVNpt|F?XMGF z;#gOwT#Vd>r^37RVP+#0X^^o{^0&4GEV&OntH2mE`8$A-eXvcM7{JCJ(E3|14fs^( zz#|6=z8&ZHAd<4u(p62>4z@!cRxqjEFVGd@C`=jEuH-mZu`i*8&2t*xSsZN*fo%~v z$$&8T!ct@bc=o{z(pg(YKh2g=4Cbip^>#a*0C|p9xDAVj>jK&fH=#t{ng%Mnr(cUV zE7ETEe*n!Cus|Sy71`HgRT5ZO&T>c9!(VC$+db!MD={2Yrx&$xyOr8aezBR5q~IzD9wA_h}V`vl36duGxUaGJJ|((`*B zPaeo-?0zj$cj}P9{CEd|s42IDZmjNRf)5btBOF$7w{GK``MeNs13>7Lw2YAk*X!0r zuoDXjHB$G}iTu2Obfvt|{`6v&67}p*T3Wtupw*)qab0Gt`w<9>#yfD_3PgH``&N9K ze^4E)F#*NA`K7cVDxL7WX>YiJ$^|aTXyfk205D|t7b~f6%5uu45Qw?>@uiEbGtkr( zw@1^}w`<&VOG}UH)62rcj`+`M7n>wF>z-0h>wo@8*_C@7;k$qzv?uw%r>2Rpouump zuO#-dQ>C1`lS9euAtU+?F;D~1jw3}X&Kd#5V>_Toij^K=*mV=(*G*;w|~!P&J$U?ZBl<)$whSJc{KcQ*4B%_(53 zluDWem_5`X$}zqDAL3_|Kf2w5&v!%{&#)ntDK6ZfKIw8`@o_@%kLyo2Jr>;tgk(cP zg$5?8_)`RI>7GZS=IUD#Z|`X6ia;M2_-tq?lo0G)(YM56cUkZ>%N?nxab3P2<^LTP z111VvS9Sj zY$Gw5&>{VO(x=O2nDEF~6fP({!6|j>54>OrEz>tlae-s^U~hStPGb=+^B;jF?c++; zAED%Goh{?i(v6jJZWkHKa0R3ex_9LD75TT4v12a`MYmeQlApf)LASc?S=h3D!C81n z-ZSVIT zJZxvLKET;7aR4a^5a8;MD!i1K$ftR0b2dyLhHeD6HaPe9^Y_yq8~n+th*h(Om`olV zv-@B0$jZp|78%Qe1ae(4SFLheB2TCU0^k}x_r%K(C?$3>?N>Zxie z7n}7H>d@@@?IiY%^Ko9s`9l7dji&-%Tgh?6dwg7{$HS4_sk>y^B13Kv?2@G`06x_iv`rQ$^ULyxC%t)t`i{yH-{w zH#52(cbEmT)}bul>l{EL?j|k)aPrn#z$%bxOT=JcDWSo}vYa;#zyc)#J@Lr$3(rLU za%(ris84SoT#Xhw@6_l;*N>F2()tdvV0A@b@GL< z_5ZP#B@rLLa*lxUhi8i6n=~&82h1-xFgj&2|lGY+g&uSOPH8_*-D0iNjim2|BGpzR@2JDBxL z@Z7G*)(|DKm`=$B82qycssH9ENx z(<{N*fjNn(;JgL}n`MAY0*I%qt!n)|M7iMR!Nid*ABDmhHLH0}6WDxD>c#S2WRBo|WZaE9&mM*z}}In-bD+33J(5Y~p0P zpk_0mkR3tAi>wrkXrTw6QPY*C!$XA12Zq=sbmhd@4D+_e3|UKWi>?0?SYLMRZBL@m$%9VzLP^zTl-oo*c0y}+iwPd6 z2l>wXQOzq(s282dGgPOO_XG)?BYT}h($zYFywOFLgx$Nm)qMjOR$>&-qF=%PR-Q->-LU-?}!WwEL!X?oy`BmJmGPF<W{A)C%Ba6rpU!Vpj#&Dz+Xu>;9r|{*9$X?$Rz8kTAEjel_C{yD=WzG~Ho@ zZxhq2n-|+nEh2>N5Cu08k{I2g?CgOthHFu6a~=McD@W9E&LVk5L{02$vWgDBf{Kyf zqp^l{(cfE?A2%%0YK?6p&QL*rS&3B_Qh^6wDipi-zd3EJ^kInV~{zFN4!HcSWrZnOACH^zz7{XP%K|@eoevM%H zJQ)2~$rcp-ZP%w)G(Vbgzw*)gC) zD`5pD{-8e4!UpxyouzB6qm{9=Y;(^>fGKI&^ETo0t?+9N$De~m*uEsZSNKY4gP+up zc#@Ix5K*V(_4C5M62%}TDHmtaWT%F=MRg5PI<{#|^G;xJolsC7af9HF{0{L@D-69k z4+wqn~t<*F^B_@w-(M@g=d&v}h8frF*K+Z+9F| z7pIY4liKvnq>721Bw8^<4-d{wIAumgU5fRa^JjPy&ZEexrt8VCfC#p_&*)5JZ^;Uw z#eShu2P z3qtALlBYt3tb`F)BDVAL`aXzO@2i~%p<7t(qw$7gWro<3?H$U$&3cUzH%_-Ny$@DF zO~Y%7&UU9Fa>r+#c(oQ=vr)HOd4u)qw3~~EFKS|X(9^;_iOxN8dqOMl zIil-VSgPvW|2JKo_{XFlcD}Tkt9bCE;9K5!w)8Us3O<~=JYG3DIcwBMFpu@Pcpg}k zKa;od8A}JksRG@L|JgN)D3&4{h3+(>Xjn{kL|#=gj#XsdW-@bcAM_=&L>K!xCB7^Fv~g_BxOvzZ-^E8aP8)k&vj7l{iA zd9i%C@(8e>S7IQN7e;dczOhMKK}+R<{?929X(0$C`BFt6uh3vnXlmR=l?cFnzrLqeR9IoGQai5Z)ohfDXfA(2l?4mV~ z7Km}G6!$u}SGQtPlTljq>>|}_sGxMnDL&XM;;l&Oz4;77j>>11w|~_~1frg|U`*^E zc{F3jCR|Xn|6=v?7caUG!|tVlRWg+#qxY~-T%Z-h3NU-bcxe@=j@4ow*4XF_2k%ka zEVV=v^yz7~9O>YwGI4`Fr(4B8L*pGNtDPpKJ0)F#DuS)*(>tPgGY1;yiM}sHof79f zSmmb)9SW$x0Gf!_@ZPFSnux|gK>78haW=Jb!j2Xc(|FY`NMJI^iNu-39)c;b7u+~b z(-2A3+NcbrNG>NFv>%B>%qPgm@Ih#Vav{5x~jocQ?<5XN;BJntKyIHU98 zBmwxK27nDQCAkgER6z5_{L_ZWY|*A49ABh$TN!aw5fq);TDQq~Kf{*be-@F%URN29 zWs;m8_xSigE3$P)x2d;9FfxkLzT@IZ9h>?sJI(EIwVYh!p7h686x0nf?oSv|bNDS%8 zEx~ztpXM8>^J35oK?&01u++G*zA2I_g)<_n^PMuRRQ=uU=liyUr`PW&siTV}b|_3V z3O$UiNz{Yx=G@H%vCjyi#1j51$;Niuu!vHQu~!x)0S%U6JhW8kaW67M%&)_eay>vk z^U|7@V^*d>vJZG)!r8~~t_-ukw^|s}Y#a;^I`Wr|1yqj@OO+^C&%I%30HrVZ*!PPl z|Kq{B*xlbrNDt4i_miD`N3C_exfhmp8fJ?(Zs70xI17~+R_0sO^5YybX0I3KGh98T z&M^pg%dZ~LeZ%htQMklqOq_s#?X{06it=g088dweBg}jzfV0LgAbi!$cZ!wZwe@V| zKBZn=>ar*&?|lInfD)fOBw#W62@HaqjY)heyUoOtjO_}M{i2i~=l>tFekmbEM|*E2 z&7%#aYFNyD&#x;pBTGB@^QxWFGTB)k;AfyJ``{Z^`gp(lF2H*qU2lHA%<(@Owx7eX zP{pUixPt!7C8%{F*wDBuKeY;Ug{OrHe|79+wd+oNgp*4bj4e5GNEAuv6#ZN%4U;`f zr%1Y7`|jvtef7Fm;L)FgYh!oU!$%Yf#P%#hSzwos$q}*6AA9ryiJycWa*?zmTk*82 zVX>ozuaLK^%?YZej)u;4`5az?Z<0$CWT9@c_#k8H67AqmdAaR2=5n47Xw`VKK678y zEC^cLxc|C+Gl5spLc#h`dkLEahzOn&D=F{$uxaieEr7meAfGN)8Z!`$3i1=>J@%Q? z@7%Ip#9YvwLUU88%qM}h?&1hMHoyBJ5?DrlC#6)8(N+fX4CN0;C+r28_ag&q&)B(! z{>HY9N%&j+19}szm$t+M?q23x+H;+XZE}}Do-9PD0eSn#LTDm8Up!T z%;i`@!8-Fd<#Uv(q|Ka>i7ZpG>LkicME*fjkTc0R*{=Mtmzrk_Mg&wq|8MK9e63xx z=J^yoPW}{`R2T`K*yWh`A_V>w=W1sJivHD3DsLbu1X_bBX(7 zmAd-{B_;BrNm3L%H2OU|I3$FQ9(y0%bZuWeZ51m^JHeVbl{K&gH-Xq+{@;!f=GUQl zF$903Y2`F4OoF#=qoSe)(?whBJ5I=(S)1Zap~J&`4cOrOgA zAM)NastK^q_C-+<6;TlpX(G~_NRtktpokz{dM{F?6GE|4q^a~0dX*-hh6@H z2wjt*`A|^ro76e$I<@7d!uW}A!e1scycI z{2zdllqj$0F$Qs3FXh**-F)@*Y0HLCDIZ@Ka(mD)If*zi*=7u4B*+TuIX3uQnadDl z58r_**o&1gejvhDLcLn?!w{-6_uYMBUg%Wr841Y;l9$iqG+%z9^J#ixM-GYajXte3 zV+Q_guWk_q3YnDL7euKu6}-6edo2H4j|N-+%KXBXrgqHEsHfAIu4DJ#n!Bf7h|A0F zQKPnIm>(;fQl+O+TW+rz!lnOWufv6}^Lc%$CJYZK{2j)`)WQm{`yD)t`I%H!lv1-P z^|Qn9wO7Z-{iZF_lhb2iO+75-;Lp!?U9)SA=WZoW0jPoIA1T|H7?e>_87%3*xMXWI zAG|a90>h-35Phk2(j5b7lp2UGxin3n@i>byY~q$b-qAsjP#FdKz4eeCJcBh=vzqP4d*HAfNAejAWiJpKK1L2gY&LWn$?Oh|d2rx0| zxos96OAg;IF`mu&##oK?Ymjru(rUJb?)y|CM-oH8q8(H`TD?2F zWm?~`HR50}SKKYgqWFpjn>{f{s)gn=vG%(mv8U?5V>2LLQ(9Hh)?TFDQuvt*;^FY5 zqkF`F@cJ5XE(G>SsUK6|@q#Tr^@!$`hEShMML6LBg(%N%|Kl5Ui%+a+8F)v(Tf2Gw zcB?rv9Jmvt!LAahpnVhtwd+BB61v*NFzyWY*{gKd>Kj?Fh0M-gPSYs}8|=Ds%K9Br zD3xaEzPe7wW%%8SjV*JBp$)8;!nz0*&A?Y9Gg$rExyw$*Z-5U>24|)(-gpm+K2y(s zy1oiwm|>WyTph#rAA7|nM|iFa*uZ?8om&;9>|b?sF(BE?to&)eQjcjU3^XmBS}eA} z5uN^+V6GycEVN)0SIFlQ|LJRgfK|W(vE~JzYkVS>7_NTKRk3}E|KqR7n_Kz1J`g!r z6Ym65OQ6Io7G)f-{xp_ju9y}65cmULM@E9A%N=mNaakxsOj1)lsF)GY!i!Zo&vgX8 zg{BttLyLL)mn+)hpRJ7+_;usyPPT4c`B>l8ylPrlg2^$jJdkQSXUHDT$+|3Jz zcf}3T7ZAoMMp3rJPd!cUqA_*uZ&(F=Hgo;?J{D9lbZ`Tgn1=Pp<_)S|WB#2vp4l4{ z-gcYVul(n=jHz(XN^n^>-D4pBx*|mB$?fA1=*a;0q(7W+zJ}?15=Z54bSiZ69X=zm zKqF{*w7Pz3*YB-k`QGYJ9)!V9_imA*dy%rZwRu-R?N`01p&wgEey-8+)F@*Qb?lzv>%6^uA*{IjCEPb@<;)#n3bZUs>whFb~KY6*MHsf>r5OHMB zDRIbTeL?|;^zey%nl4JB-=4tKd*8FGq)!C`5y;Gx_RpcKz3({>qT|aA_$I3NF4K7? zi|6ZqVa|Ns(MYrrnS`*CJTc@;_C?i+_o&cKr_eC&Zi&52HPgx0lJr5fovuu(K5^rT z9gLL;Z(aYp@E%y9YKQ@}yp=Qhd(x3QZ`)BRJPQY^F-fIiZ+st(8$MPsbNV!Kj5hL9ujrk^1=73UAdKCh}k0J@%RWdiJeGgTh^9k)Oi@JrEX+OxVC(xc-p~TWs8fjdCaJ_qm+k*FTXa<+T(n zQw5+cdj!P9KX!+wBm?<97u=dn>H8;MWR=_v6AwCy_D~)KCM@w%d4ds#|uutcC zze5~mcDaipGsq(DK7PJyy8yYUp1ONa%1m5w82d(DTh_gTwoqH~Y2EEh`*f|q`lat+ zgj8+(xmBm_`T%vAIy#FZS_vrig7(`F!R6#<{k^V##ou@hjvhrBCmtzJ6%JLt^_2eB z)B$%sa>|eljolmKl}v~id+QF zSFrHL&FsvCp^7m&ZM#cowb)lYN>Nu{kXHc&nO;kW= zaB2~p1t0U zo4k9#C0xuwr?W3IC|YES>svRNoPH72-v#^}7CN~D?+mViyanb)ipRK`MSeY4}{yHEJ-~5j0fwQC?r!DArA|gheJuG6Vc{xuEvv9hW7j zGik^T*p3Or`Q71mp6Ohkc@EXzKA7;-EaRFFVM*_C z>D570dFZ_v7__MFL+5rj?X@HO#dHdvlSPL5-9dQ4v6*57L;^OR*;m39(TUiUN_ze>9_mr*A+T@_726I@&M#a(5ifOp zpGZ7>8}{wn!lZv=vvo>+YdAw<$=lwCtXbe_E2b=oIdv_X%X;Mr@ba&5hgqCYqF5^HI{;Qm$dX=7E?GF5Grw2E3ce(L;b&mKJ^IGI&A-{0M2RnK zg9)f*`zc%BQG;PIza8K5@v+pxF@1fh{xf3Cpi6FcjkWxHM&p^8G{AAOIUiWSTes9T z>Glu4N|3ffy!W~8RY2JJ9|1E#mH(IcGXH-?@0@X4E-(0#26{T6Z+y8?s66gR4){iq zPs#~>y#G*#X{0;*l=yBqTUh5NIg{^RpJ;(z#kZs+ z`cMTH5cYN37zw5ow0h*RIk9@Z_@(_+X{dW*%p1+55D|{JBEu6what%p3N>rP;$Od# z-0A!m)=CtbbU*1aJhNARV6LE& z;~9}wC{he!y4nSVcAU85h4W)eymqRVEmHoN2~aUmfyUO1nxmiGkM6eMlXdQI;Z3>Fle%b*~j@?4O{#V>Y<1Tia*; zUcRf9eal|tDoFKinGLN)izJ&k z-wM2_Kn;xAWxV{CLk#6`kN$al8FcA)kEI{o>0TW+rcvIqSS?BeI126xj`$`Wc>Csk zC0?bcLVW72TL#19FW`3*;Uy?D@d01N@ZUq&7rp!(F650f;g*V9rU)x?D*&FoR6Z@> zwifaUyoDCinM=m zvZ@CPUJXkY5HX6=Jdx2te++6+`0t=Sw_m;V_-sbGT%x!1W96njobtShO?otYdrZaA z1l~89Tyyg|8|&3W)MNtPGob!>l6{7~s!hC`VB-MbJiyY>%FF=7*3Nu&({j$BK{47J zPAlIK3c${fJS|w|@w92c^)9lAk6GJ^y(wt6(IR<2{DI5LT~Ii;7a$FLE*9I1yia}c z`iJiG3PZWLv6m5d>Gr&7Uxt*6J|PSrALoWMQKCAF-lPpz-%T=EscqEy`z6VDZr^gQ zKVQAX#Q!obM93m0-}xL!Xcb%0oCwFtA}d%$gPbS>zN-~wr|W%GIu~quz1<_%>YtdN zEA|T~KL5uNYU{zL{u=Zr_hX(pjh6mUF0MW_e(fK^sz_SD%ReYI>*7luh=wfo*18j{ zpZxvZ^Kbt(*oGB(uy^=iwYY1^EA662#pk1-`)vE+i>g$SL7)IkO-JROa4}D}#ccEA z-cc3xB{u^pzK`+p{k{?0`4cU;9+wH{`kxucYzBOnDYQ!nOzs$H0^*u zXar_+_JKKBCx6*4&@0CnIWkgbzDd7*uIF$U ztIKJZd{rv@>;b4aYxnwjH6nw_hszVhKUPA}C;x?}gPP&m`}AjACv`8sWa};Kcw=S9 z9+4ltE?>MnaCXz}w_EQwlh%*!X{M+0$O!>YPr*H6zL>^yA8KTbum1@5H+ZGs!R!r- zQTtry3U{X&;LG+yPMj1qdH0+{=>HD&RV6+-Y+3i}ZEaax z1N$!yj;i!gj`h1aO9{@w${SELZjD!%-?&IZPs3=S8bbilZT-UH)hCVTouxOS3#8V* z2!KNr6*QBjX3kUjRn6l`(EMDyns;esO#I_3s*Qx|?JS zdTSlX1oR6sD@`43212Ni=Y`3zt|t5~h5*i}DZVLoJA^VjAgPN!YoX2iU2*%{mvm;BqvEOmBC&HVY z%6=M{8b zPdM^>fxCtYFhk@Ttc9Kgnw9;8`iErx-IPkn{!b7eq52XG(+Zu|OcT$~2a(t^u3yw= zIR~3}74WdM&n#4T@guh7H+Pb;z!JFb*;9AnYlriGAWeTwn4@b-W=|XCC`6ShC4fz6 zXn6fWfjnlIXPDO4$9nOSiuEYz=il+&diFIbVS4Mk5ZIUj`r|i-R8&&apnIj~@9+1+ zVloGHZjAa~%V(nfSkY3|KHXOWFAz&Ra2t9T3b=D%vjSceT+DNI6E}a)i}{98`ca#u z7fSN)2PrB<3v$)eK5zFcFzBPfZTQWtXy$c_rJHN0+;CFnmSb9;u2DFQKRISK?D%nu zIJ-!pxv66E&U-eH0XX_lW##sL6pMv>uYxGuk5$I0$z(%-}BN~%5-^Z$( zOw`{}@te}?9NWLrSf4}rBhA{$i*OL&b7)CR#}L?bF9Hk|Q>tio=5qp_YiwQKmw>pK zXeMSUjIK_wRR0+`81=XxOEwJP_21-?6e_$_Nc&0|i~LP65xa`s`m8>=EzX_$+hvp+ z%2BZG@l6Vl9tMvUIf}}6bAqj%d|ZX*dRr(cP_jn)@`rV@ZAK2RE`4^;PEL2@khM=y zQTH6c&e5OEvQqD6sKbU0bJQd_tQ=8l!sz>jclw>&C5YB{bUS%Uf4dlS&dtn4JThD= zy16_9gi^rK9Xs1V7Tju&I>tK^9>%VAqkyiPlO+213U5^6w^M`~G7KKG+iv};0W!IH zx{uSYL`!#n(!sDjmK@ z^?tM-nj=v5Wusk(=F#>t9^Y|%N()mv!G(|c{S5^x%IojpX6MxRz_o^Ydx={X+3GrY z1c{=Uq@;`0(U)?vm(gxMkw>&wi3Enoi?Ll_vG}R4*JmDkVl4~Lh(G2zwKR_`#<W8*cRS*hIQ7TsE!79~85 zLsa47!onI-t3PpLe8XCPUV%e_mBnj+g`blze-R$5^28FBW#<7A4-ryG?f!SxkWtU2 z2Z!Lz-}v`Gvx{>7H+E5<8ahW~k1j{J9dYCT6_<#8n!E-Ryfs<&86Pp*!{U!)$K&cG zj3x@S35RQj^shWI$p4l~G_F!uGsAl5+F|5S;e6m*9H}wSc&bf9|Lk22j=t>O_)R0f z<$G)q;;s@x)Z2f}Bc#SGF5ct-Gq`K_go1*p*dIGDKD*8&t^E9J-8Lh1Q-Do1x%Y1{ z742h-%W7&l;h#(@^b#!|?$6Jgcpq%EeIch>8_lQjZfM-0bC4$xuuY_BaocxX+}!cP zc6Y`NJsD_>eFQ`j!&(Dp*{$nl5f3CbMxv1QHB~3&MgS6;!h0kN%z6M+G~+d!@wda> zgqY^=_SfqP`%yQH_+U+Yu$;*@$M%wuo8~8$+s-Nos5e7zSXYL#CNavg74`ZZC=?zI8{)_@8|(SM;|!N8jXijbgT@ zM;dLwK7Yms>TqFtTsDoHz%uZM&|wOr3$<& zX0I1AN$Hzc3@%A;kMPqZZm6LYRFThzt2u_PfBeh^zC0gXSSEOj5AHOE#r;T0X}wDH zJ`XI4Sabtq5yL;ooJFNCQrv3sSl!UDFIBD;UrHduG$^R4o#Tp5h$Z5s#|`}@*dIqk zMn}u(>XOR`gg@ZoS}jk}NHQKZL;c$otvvu-CoOSTgzoXGWl21D8T_XK-s>iAlljokjS?7kZj3rS1Q7Uy8>BHq z^xff((p%Q$A)_L8HS7UmcZbtz`{!6b!!|kHL~CKAeahIiVbQ0+Qt!uhE<~z`u|)y=HgKkEQHul7!!W5W4F?PmfsB@dWvyv($ohy-6 zL?&xxh?zUBL9%Pi=d^D8jR>4Yu9I`#F^X63{(U%_96%hsesM{|2bD{eJFyqa6&{;+ z>`LTvWYFw7x_uRQML0@_TVOKk87j#wK_xqzUmmNo(A#$pnw4_qd2rlyiJAQ6Gg;N=anV$d#RJ)>XRR*I|drMai@86!P%Wq zIHmKgYvUo8W-Do#x|(qMlA`PKic2%E6Q<+s)_nlbc<#^e$DQidvAZ?7C7XmqgpPAt z+=WxOeCE`H1GrN}q>k0|LiOL3fWly;=C73+(_<$%2n zk)jPS8XX}Fx*yiXJ)+Pbo*hrtiFlpr^vwyocAgrynnCT;$VT~L{j*t|zp63Y{%&$%WyC=Gi<7*)Qdgnz_^9jF#pXwPfFfOis&+DsxPkJvf zsqS7Z%^v~}3rMLC@jVFgbVRFJr_jwxotF6IHVC92$?6<{1F<7;`E%d>`JrPC^ zQSq4+%jH_~mxa6aZ|5-8V=+4BO*nm9uvIpmy8BdQ?lJ$#m7A@$*mz^5%CLG|WjpMr ze1}`@W}4*tVP(w&2x7dYKhVKl#y%ez<`M~WZkQ1~n0dk(40yl!*yzQUS+S#lmk0Tx zaQDSoo#aCd=nx3{eS;umeSY#H>oQF=)$PpHfEp@P1>U>3n53+&+n6BvS)w?(z4zs3 zF*nIrz?Y)G&Q9+910>=%G<+{`9TwEzy3PP!A;=hawpJPSUR)yk?K|hJ)Dxx|&-3?r z;Bb|G;D>g?jKo}-yQ(7tBK=hmL=luW(WO? ze*_%zpnOYA{_!0Yu__iOnDB?~&wt)P>PuwFwjr1W5;)CIMvn>M!9u^?BcOlMK~O)d zI0C0~zXuP34W>dmuG7&P)wq+Z8_R>t0;{3pjBVk={!BjG1iQ`Ys;dCe#X!W~&@pxu z47|RTQJxv+3-xqHKxk60is4n1$vhY5BKtA04Je)ZctpeEJlsuAwR;Z&%KhGa3U(CDsWN zhkbS7yT=iB=c?bg$ToVd@UdM(t*k$^$g33aJzbx!lRC!0x1C~-t!~rN^~^VamLl4E z2GKq;`GCYzN*{dy0SnO7&P;TJ9VzMeKn` znLA1wj=K}`HA4C%h|a10$C)M#J+w!IexF11?A2;jdSl-MYSCFYsxqs-#l;Z*Rk%Mv z@a#vkvaJ?kEvm@) z$Cj7!^3eUV`8vE3c1Dc_#$`+j&!0!mq_HSv{WNO8K`JfFgbU8;xsL1n^CJKH^p!vH z7EA@c%^Zo3QFL7$%|Sl8bjb7y$o8hDH?J|cG5)xT&g-yKFtZ7R{C5wFe|`xbFG2A{IW4#-rO~X3g!D(Kczmai4pjwTd03 z64c;AT{vC|QfRa3_5c7d3?N!q8-3W|HsE4O3cB`gy)!fWbrCl8)o97=MS8SRNh55S znoF3x6@bLNEm**jMj4>P!hLW_bp|7H53e;G6->W?d2@5zo(RpdhaPYN?AU_K#G_S) zg$aJ*4v&t9g$#&>l^_`D>_VM*DRbA8u`BE#gYr*$7hASo(3sfzElX=7 zC#NO6PlnT+2JlDndwhU2get2FM%vq)V)kS~y890WK7WnYoJ9|rY5oOvb*O$$ks^L; z%S}6Fz@^lX6|gRU-d>$Q?Y9ztUfpA784y$E`;#B%p_d6mooEa2kETiPc7#E zov|eWRV-@cOxu4=zIR$SWq4bwHUc}@x-@X)tN>unf%87yh#18Aa^bFjUjXhz$vVs2v z9afbPFi=5skU^s}spvB;0IeQyfwoXlHw{_daLu6Zsq{|_#fg8YbUh_2RXNH0QaX>2 zHh9uG+u5k&!Xc{q4s#6kc)5h;?XJmphK%0HR3EC7zdL*DAQ@le>-N53%;6p6Vr}Dj zm~j|5S^(1hN4cEU(jPlWgGS+HVSjf%J{kZ6Be=Wk07*Sp>k7#6)VL^rGTzfG^`^NV zh=VRva_4+cxZRV5q|DK0$L>Y6aaW}rNWb?ThxhVkr%p({N5wJEk`JREec8AxIx_1; zc;+ZjM+viuJ~-HQH-xM$YI;|WQ(0eL4A`3qgEcq!ClnCkeT4w34=Yh5ys{Djr0KXb z{_&?jjK&|una=NTjeYc+)sQ6Gi%2}rLeJd;P)7OT4>ynXpZZp`;eYd{h-UAHtfn`Y z0M`6XyUS+%+a3=UYKo!4w!~TM_5YI~7JcO+cJ|R{p!o)ehzwMipLgZIyKr2Wea?Xl zm#stl9hR44$B;{>cj{UfEV?#e$rDzu8K2tX-hzfb zNfLVxvZkU*Lu;64<68wsQ`&Jj<6Nrl^Ms6F-#?)*Ff610P-F-N62b99R(F&BEFDr14Sd_=w*r2Rp1$nN z%*!7>eh$bO2jIDT?eokmv;Od&g>6&Mz~u(0r}r40M8B^iy{O+WWCI|G;Zrz0gB$!x z#u?|my@-4q)K|Q-Sxqmy6T^Q`^%FuX``ku$w6wIS!RE&SX!322RZDK-Vt%Jjh**DO zM|U(gsO)TYtkTfb{JYo|QiCe0lN8(^sr1;=lRla!1u`{|9e`%NHy}@GDw0x@rs3`` zjGgsl+C##TK+%}67Xiaw+~L;J(asXd*{m2l=bzHst2|;WY+I4AxoNLmWB^ghVIJJ) z;^I0Y;4tT~a-M`^q^Rc$zi1c=Rx8EVKD}LGn1o9U?=pCu8Fz(hn&LO6uGBxsCB;c=ho0=Nv*IgP`ByT`NC!#^(QGBR9qP`zyXCVX=cW*x1 zOAFV1*78}Kd_PXwTXg^J83;TQxn=*VKR=*PyRS$J#mVhS?4*IwQ#Z5$A3F zmb;I80C_z0%>ZsEpIfCC&D;xy=eC08k7HAueJk{!-Q_hRiB$rxbJ6=5bx-I;RF=^@ z_I0j-%oP31IqG4P=tj9@`|TJFrD|-4g?C=I(KOeiUvURoJY|jFR=P1}NAGoPU;!(_ zg4HCNdek!wLO;11Ll%;aS#;yqp)AzCKKC|Eu$P;)Cdulj`=^kFA^(-6rtEWY1KHs5 z#ZR;;Or!p@+OGV}R$(f7Mkm_2BX190Q* zaDmXce0HyYR}5JmNK`8d)US;{=R6P3i;+=y(U*w9C4re8{H43VtsWH zIL8V)f46W?qBNiAWEbxqym3d-xWFBL8`wIl-M;u^jxTcY>lcRK0(Ii{w)d7v0DSDE zyf5ZE&7Y(N^qdZ4MZ1!|FtvNpq|FHX!Kx(SzW2j*y811^rO&qQ=#s3*ngP(6>r~20 zlS@9Y)Lic>3mU2N56;btH`ubo_R^Ar9z zj2ZASQ{_3;Hq(*D>-23pyj0Um#vR_(NI|qmebJLkQ9F0T1_iSPNl$h^|wigp*jb95H0q+9V{sW&YVKekj95X(Y4zz_BsVq{%w z4J?qc+pVR%B+u^cE7Q(a)wGJUG^jw8pjAp4SZO2Nm)sBSkv}wox;7Cs;;c~Y*Yev= zIY;<)1ga8rk4T?dT_i8LnS5!u#q%G_v2PC}rVP}Du*A;cuPhaL{e)oayW!lPcdKe^X3{r)xK{et*h_6X; zc(SFRaZ?~y{>I zj6U0Pmna!~!72#{>@y`fxpQDT#tQtt=CG}aEe~L{5eD5;y??0=NIWj z9Une;kX{pl@oxv=l>R-q4Cc5=uW%Is#aIrc%JnfM7}JI!RBW1?5lmKk4lfEVyMsf6 z^2QH&?oio@oL>7N{V)`i-@%+GL8;V%+x@#@y-k9CLe@sFyXGLUKA^h3f3oR=TdJ$y zn`?q1RFz+>423w!FLg|Q2DAY;P04#9FD_v#_wOgugWlScPk_mZ&{GyHUt!?k_HD4B<728|Lwcp!Y<_rov=oej%bA zb28^@RH!R}7G3B1&&)u&&@FIhrLt@{#i(Ap}sOb22n44FLL*M^g)sZ0G(}D)CLx+y5sQ7bJF^r zHacvSzND#?Gn925fyuIgMY4B9-=y74Y0sxV=;c%~Zn`cSHd}>f9e_~BM;YwN&!YCP z*2UFi7yHvK#?Ur|@ydVJ%JDT+f5##)LBB`9zfOF6=IQ8X#`uU1%6SXv=Hv9Cr(OPAiKv|B3fMW#{T zzFb&c)7kR7Wp_QNXZS}}?od0lr?iWwbbGPFP~Xr9FxF&|Wa##SIs4um{q*D>h03L- z9@o=k)zm!~al_lmN#yVRD}Uf85q8zUp8T7);nPLzA?sh&u;CuA`f18hC?!_x{cvi5&hPj zZZepWXW!1PKaZc~KN#%}FD8Le607~3b+eELPaJJ1Z<(>2CW7=}*lALwF9Mim9yap>IL)X5+b9KKrMIGbcy5(?(PNR;1*W z4|;`w2uxLDySi59H%7EqWcUC@*911opFbUE}4pTx1ZxnBVHaEcfN|`Id`VvJ+Q{Qk@6A3se1}BBk?QpXj z3=9;1iVW+#z(^PX$o^0|(X-V}IF!aZM>~HIbr7cv98WYJb+A|?@8Iv>Zv;?M z&d^jh(Mwg*1ZIpy{2tiWuzHp!SmC%e{_P}e!d8Utcs|malc!s*aP0kxB{p>!=J%}C zK|*^6zeqekkb#mt8#%GJ zx_-o#VyUBdc^tHWXdC_ABNCc4V$||{{O=CVK*WfThEDhMbOhW6Ag7g!cG|_b;Pgew zO7z>dpfnAiDKy$}`uB7L5&_fI?$H*tZ4 zX4=vP1K~)E->&fAS5B(RZWg(hf(8v&)HO}LXrK$RW*EFys%B6u{IO5fN`Kbb6k^y+ z+Vg;;SbMk2Q3{aD;m44Qo>rW?^Ay$@R`dAwuUeU4tnbPF_@*Y+@yUpxcPF!JOT#uY zt6bqkP{+3-bn+qqf1vo3s&27dcj9DM(!M9f6=JAwC0CO6si$oXVFe(#Cqq8~{*rHg3^ z=WhwqSB^I##r1-m<~JEWO2RdDsZSj&FX%>dfto%>S}m2_2tm(_j}OP{;X*)sF4C&A z_RNd#0-UAglIWZD?~UGl#$v@GBTKu=YVfO~{+Q`PPX4cFO?RW$v0~)&Ij!OVNivSz zGiE;$^yL-VQDwg4*x7-8@Bczx{8f2WeYq{GsIv0nfw9VWU@$m_+sjzeR&@JcyxV!A zS5g&a-6$O}y#6#xGxe&vx~22``hngJe3skmYwxxz4G)f9j^D8ni2f~X&-~5nvIB|6DVIl8;KI616gR0|l*oQ3+B3OkuI23jcfuhh(_j>}n# z(~Nmk)^F4`0;U{=EBo#V`>Re~9`mV`WGPEAcTzOzICqg?{oHNj5mV*u-Cj}jpHp+l8SNwisj)0IrmVm0|v&_spCQl^s~ z*Qt4ke43l*`O=A`#RJ6-UUXlr&_)1GGDd zdU_!>)ht(6n;Lp{3Z9nB*`660uBCm1WwmPAQ5NG33i=5U7a4)<9J35aDNh`Vsv)ElZ+E|n9!a6Ev&Oy5znjLC?jU4 z(}d>SU)!8R{mc&XMTDwd+nSCqkMdGpwI$#e%o>RfSG5yio=vB)Sf-lxKuQ_B^|&9= z-aVK6%Hq#SokzqyN)E1G3pfLbE3`A9Bnzaz@Rwuli=i z3ltEelIhLsXx~GsLwfOZvT;U%UFu=8Xp@5&(%vMYqk{1Z#4-l=mX;QPUm{Uvi_Bqm z*}`gZQ3J~cSlrc&{5EW&7Zw(h$Ca{fH5f&V+GbT(ABCnEmca%F1_b-VUDvZ>OTh>v zoJppCccn)Pqo|;;d%6dYOiG%Wd442g3hDww86@rmwl@FL%0C)!B7B{7MB=e?PSFhR z()!y@%GpYA;(tQu)$14nhMvnAL+@_>zhvl1Zk5uB5WBG<(tp5A4=nDWS0nk7=$hk8 z$gze7Qi}=582q4pBe(O3W7E#NeQ(kpZNJvyCjR-@xz%Cjnh?0<;H_P8Ff&+_Zs3_|)50p>uXf(ZK zWdL7ZE9f*}YTz_L;j`YAa@sX$kLay#W=vtjD+VRTB(6++@Zuh>i#s+emcX)Pp%rRO zD=G!WYZ4}IV8hBlm4=_h9p(7vFN1YomKXVDtm$)Kkt!ao{jFDQx8+n3bIg)ccu%q7 zX7m^Xawp4av0Tg5r;E-l!B3PVARNC@0P>5EHy7Ff`)V;)q-3Q{>^8<2Pyre$scD<< zs`|BmHS|e&ol_AD1?`1J`;LkkS6dyqWLC-wtd9$1t}IJy>=8L(yqU4JP7F1+zDC}8 z311$OiM!+PeFV6A<@@Hw$!V54AEEDKWU$3%9-dTLcUXy455LK?-ZMg2%%@PH=EMrc z`UQb8Frp~veuHwD_R3<3z{-Ab*#h^ZwU0~_PTuveU(X*UN7}c+UD@-Xv9M9!kTJY&2CVEP;(spyAK(|`DyFr1$K;{ppf?o8MSZ{!uH>Tps9_3q>;jYMIJ!)v zIDeX0nc{q$>p?N40RA>$`p~C1gS||A%<>h*_E25(-BKxyX9;`Rw7^BahjhlF$NMD zEVOoPHt2ojThB|CplqF3i$;U;>mR&i`X3C^&uJMK^&sPmhn;I?V3)ymnLj7-{cHog z@o)Ew6`6Bljpx0j3l`kOk2hi|NZek8nl8%{`{t3y%0Tr2`8{0y&Ho7=Xyf}il6VlK zdkP+4=w5$3S?sgFrF7*L*OAG>6~;Pq57$6XZB|RI|H=Vmnj>p*D99B@mTl-2^H#(- zr@#@%i=rfa@sC4E*U@&P3719`BEOQZi@CiBVtY1TYqe#2{U0Kc)Pr7Joi_+RCeH!K zxf>EUSNX<3`=#m2i_U`!7e4Wqj91#UdHf1RTPB!`zykjIEzJZcj|2OD2Rg1*wWn&~ z{gX*gp`ILg(QNyG{UJeGc+}glu5e-9Kpd;ra_uJ1@v+3WkdPqN7Y_?Tiuia1N@8ZV z2)q$N^OHzID=?h5f@{PZyH9K5PB+L7G0YMY!(}tXr~lNC26r9o5$?A?;0Qj<<9&>( zYVTNGi5N?;do^e9^Ut^XBfQ(;yYNTI!T~1hEONlZ-v7eQvo8__&eTycwRCbL=qL>q zet!7gl)Z?Cv&&R|0yZP@OKjv;{tRDBTNP`Vj? zT#TsS0Mi9EJ?#s!wo0C=q^RUsGH6U!r{u`S?k@qKPK&c!y%n!&&SPK{(JTSnJzB^p>4dlWPVx{-0l4{-*CK8QObCgP$wADvyz@E)TD)UpC1tE?wMui z3#5!6d6*GgKDy_V$=tkGoBnG%YFzFf1G6~xpy@y8jUqAs9lcTXCH1qfRXK*rQ(X>q zj}nybMai4R%??jUm(AcBe(0j{h%>}s)cn6A2Au(7P^9ee+C^b_mH22v!}GjtM_DaY zMSGxe9;m6B;6>kr$wzv7At(X7cJU}Y@_Dvw9=QVeP($HLPLEVn?mXbjk+^AHsGF7~ zl8cRs@Yj>YJpT#ogE<~MBS()f{ndYW8TjFh(S(ttl0X}S z-p!3I*#wRClpn>z4;m=ARbw^Yevf?H&`MP|n)YY4fG$%8>)`*csQ$KWl?@%KDj(8C z&M2Cwz=@ee;7kCyFmKEb+jx^PosAjf*eB5M)f_y{DnyGS2fBT;mZNL-;w4HABSTN< z*6R7_Cc~Z3n2v;;z()Y#YNML`H|omWi9!F*(igajZR;YF)UnvbRFzArr0L`h8InDl zPY~PTzMLh^Uu?A8&4}hIQYxz(E;UPel@iY4be>M8&3ahhFE1Jr^6+#b=bi4GtHQC4 zKq2?62jw9rnbl0%X!~ajveRM&(gqpoDE*qlg9b2QNFV>@h0A6PUE4?rV0S@-DnDVC zpm8hLkw(P+T&xNR{m3G%#V1YNdj_wZ5e{P;t3%-0NN)lG*yAB?gdbq8C5w#|tm3?# zDp`Zcvo%a2%fpY`XIkq)o%sF(Ke!}TH!D{$8a`^}Gyu@cubH~4oKC-17!zRp1YeqF zIkerytf!zG2>~4n>*xN{F&Wt7>gAnQN7W1}p-yopj(&wXtKHmh&PM~54jw?kWbMj2 zbUwfX!Bt_4z4-UF4>dHQHb0TRrA*zB4C&if)`pp*ZqCj$sV4Dtayd>2<^=%WzNY>b z_y9afI43CY=C<~p&a+s(U9t8Lrqk+2;`>KZWDP1k)2g$7gU%5!^*SjN8n?`)7$k>O zU8PCa2D_x7L0yXkm>*Gwn9_i|9+BS9^n`%uvl2~wEz(|Oq8;kvSPMi14CQ4hGTa4=A>3-AAYGXzx?(f9Y~nS7mT8QGP+4UwXRm)Uz* zNvFhPd^|l?^;aL`(?sJ419Wdy;I}Hx=bW=;_Af!N!*=yH3!m#xW0LX5V_Z;gnyo~k7gd|S8WE`+&WT}?m=1y*tySS1Qa>UFU^81^qTTAbRT#aE>;VhBY zwe1pEsQyc9PG@dFiZP-Yz#k|tT65U z@gnSaw;A)4-%o5AAY--D4=~FHB+~F02zV?$Ux(+!?HuSiwFG1Zu2#PYyIx}tX941` zE^!PhnLUyhFJ3T7c#u>WsI`R{)(*IPvm{#WJD?$v9sv^(WuJRAvU5p4(^4JBK8?xb6x!6XbZ`~fW=N=t9W=18c5mAFW+vz<}7 z`0%b&;m@zX0KzrCc?HRnc308iq?MCyCg)PL58cA;0U$mGc8 zu`^Xo>ahlVH`H~w2@Y;_co_UW{2nucG;1a4|EBlbpkox3^#W<|_(1>Zd@xh3I)h>=B zCKJ;3u6tB>U7~$`MoWsh6$*4lnrCf`^_^}-WyRoqOvp$tVE*De7OH0I_d7_n9YjoS zMUC|h%C1Ir|G>K#6fwwg(@o^2CzXUS@$K18c*+NSGEEI_Kas7{mZk$YbsX0yP{fsc z_kgsBUWGn>7DSmAzE7>%cFH~aHsc6H3Tj|9AI8YV{iAnNdA)^g@Y6AZOQ;0#J$L1l zB`MXF+xMMxC`m89E1l0_+x}*?ao^0jsHcrP=g$GF<(@g^k&z+q#vU+q+d$aZwC&nI z#bYGOgfVcKGm$pV^SsxO7ZOSu&9Yis}Rp{ABt z>EnP~H2e|eG5ze5H}mqdueK+8?}~o^C0MMy`M}RrWUrEzYW2r(zPiV%0^AlTd{jPU znc&|k|K`MD!*^a-Z=Hp+e99=AIZNDKNR01%ey)$VYVc`+=#(%rTK4y3G&SR>x4KsO z&mXUMwy0@-9ByYG+HGIccVe+*R`C5y#Z7abt0l=GS~(pfC0#>W|Byb=nNN5z^F_Cl zVWXWInE*mB(V$GbB$FA)Am1*FJBv5m?0oMa9DkkB)=u;`Rf9_FSL_dHCcKz(A}F5e z{Sc|;E&v5s*=SWJk6WYgOR2FFqQX0UWmZbX!cp` z#;o9bDnomcMRdNk0;_#*BH88|008onXsLfiO^(1mFarFc0)5e}l{pkx`?D~AXcmKc zMR;f*=YWKN!1_n$@Rwo@+CRi?;sly7+7)xU?aV9IeY~OxL8B+o{^>6^B(A7){JLNt zuOMhv`t0x1a^;GT^5!F?F>z6=2{8Nn9oH9>hfW{)05(}oXad=tUF&z&IRYQaf)HsY z{T~-H!6kab;uei(C9a45qADTC)gdSc{ zaVwP29XIXbi#+q9*|GUE-Grix(25%j?oPd^JZldP*c1*y1bib2W6c2a8TPTJM@*pP z-b&Bu9m=GR{Oh{CrjyYzy{!^| zRzsG&WA=M3i|jCcUXvI<_}vA*muYDd0D-K424>$~soX~Sl-p;06;q^GG~uymBqhv} zcCCG3H?6;7Od0(9{QJZ#AZ)hodcWKCG8}NB>QlKr)r5=0o`Y*4)^OgZOOw6COL4YS zQj|Pl$xDPmG>}p$+pvrKj-Lmt%c^F^OgNuJFRhe|yW)9;&OPc4M0qJKIt2gZ=tawe8&o%+v=vAD zm>z*phbzTmrpK5VCf_S@P!XuO6=M zh|%slEJELhhXsU$N00ZyAOaa>+GP{!t=2P2wF~S=r`;^~wp#6fc_|9{sk5p9xo~|& z(gF-*FiVJa9p|lJP{fS(< zu*R&i%BHA8^b}}&S`aV->B#a!Zl2C|Qpu}dHV$>pwDRYBWWWgyNZ|mzTS=v_+znQd zV#g5mo8k$5U84nR#!cRv^r5;XdUL+Bu0zauc?yb;8@&%i%PokaoMW+jGqa(-1YU`! znfo?HIesV6+YhK8N=ge#GEuf#UKj(`l&=_iG^XUQw6~gM$&3o?f-wmwbkI>1Rojb~ z{w`$$JhH+`2v$N1Y@w{I%zuBukIdtc#!n#V@6U(vwC&K(?w+gD*;1Gav)cDb&JPzc ztQ$`6WUc?MUH*TiZXls%CKx!?28-+mZwS!6+7i`^&xB@8_31_!H~KEo4@7)c1|23! zQxEjbf+^@FvYDGhAF&B1eO@?E!6b)70}{~PFPLwtI`BtPYcw=8od;-l+m3U%gtr4L zmE59RCIid8?&vfKPyKl!Pn8Yu%-^A*b(nOeQrSc!!zTH)&jK#T(*|IuiEgmb0yKb~ za@mrYYKam?hnoMv42t-2_2D^NGED09oe-CgmzCqo`jHd+OEgoO@IR}n^QflgT z4-s~Hj}VBceobYFl5R4vWm|J-W;Uu_>e{)mN8Bl z5oS)FJarNX9PFK^lA#el?OFffMQ_)B@rh;pgsfVk8h76@haElR{jBeVoU=ZkU*Ntm zmeUsRo@U$)4ZgmqJ^MJHG z4w^$pcAD&OZi+>Fy6^f`$BsxDp2k9==Jj*KIte>)9aOeFtd-0^7hSny3%hrS3B1I zX`><3`s{Y)N)3PP-fZr&6sD#2oEq~?Ua9&;XBB@FrlN=@b=rUW1kp$MlV1LzQXDrE zoEPmEDg)|irCbV;@u~1)>kpK!%1}|k0aq5fT}F@pLwO!FQE5!2Ko(>!3>6tyOzEvz zvJwOrtP9({_TRutJPv~`Yy^dxNQ%Qt&rB=k-q{>1KuGrv>arR<-~C3r#4eeirvSWIS+JyOS4!7q4OlPd1}{fP)9Mc~+(U zjB{^y-=wa0{t*~>|Bx14eBja<=h+CC&cYTJdyrmIw>mNXU+y2W78bH?P$SkWKW%BM zJyG{a_*lo_D?N*cFtz@-`ImCei@k~jL^a_q_;Z2G+4@JR(7=t!zL(*W(nkCtcz*k5(pFmusk{ct zRJ$G9w7Xrp$QcYtXs~T;S(s`Jr0qEJ@?n)P&$v#^+4lQvGvyHEe|q73jOGDJc*%T? z7tZOmgV@v}fYV4OWJ>=sNgbCWB|THB&uwQW7~QjHuuT~OTKvQt2+Q;lo8AcRKxfuA z?iWfU8f|U^oHyv%QCkQeB7dL3_kuDU5J0Vz@ykoD5K>cp=YsKUKFG6$A`G^#*F9$+ zVd~zTa(v83I}wsH&Chg}SVK6mx?qTU-47;=6+rP5-0B>{M`Kj`_7;-oP|w%E!3RuU zUFF8LsnULYfk)f9P-rG_YF)DVDj>+$9v*x21D7NA1>p?0mSXumCr1mvI}biyiWot| z37r~6WBWi}SB+K26)~6T=f1vTt*xzHy}b`uS*hCDQ_K`JH7R@JSc`uCylQD_xxBpG zupGscD)K6==VEy-FF!v`#PL4Bv(B%szFUh>fAi*UWMt%}0!l9UR3wCrcktMAOz?Vm zwI})(_V%w~N5aNr9cx1G!k3O8=OTyS4bgwmziOuL-MtH#E}{Pp!P}igZSLI31r=FD zv--(i4~5$cIo<@{Z-JN{HxEIlk!5Rr7Z}0{da&ip2r=7y(Ce2@f zgXE32@oQBNiIzYLn?DVkK8446f1=a;?%rpB#SOGR5*DUtLFQZ#B0L6M@m3<&fdh;} z*p2h4L?U2^6(1jRzqT=bc-Z560N#E*CbY{z&+Vniw}AY*eFF=&2#rVVKCGX+8}$qg z0gX~*4T9~S)EPh(yRGYWZUCQ78!9W*?n z_(|=!r!T!hy~J*Jcue8hAZ_G^FiQ;Id+cB*6LHggbTTxgV{OMk zIK#3jb5~qO>tNA&n7*^5UtVdwuuAgRu@aN-nsTH&j9_6>VW*g08^6;|Cp;3vL}(So z___CltfFZJX>3OvM+tO!&DNqx@eq4<^0t77AV=gi$YCJznec1pp~Gm1HPt8r9IS8; zcf_Cyo6vF5$p>EH-FG%R3N$I=KfJ$bDUG4l@3$9GOwlE-}QIdH^VfCzI5HakSQR0M4CM$75M13 z_uEdI-=q1t_6wOiC!8Cc;QbP7V1d_)W_$K#02s|) z4V84gt9jr!E>v6=PtMtU&)UJv4fr1*Vq#bMTG6zBLu$X1bk^g;IUy;N{j}sLp7L^; zc@M{z);D$(7{&9dfg5vk&vrNGduq$$7*`cFuBVV6hx%iZ{W;DNFTDuW#mesa6`4fj zGc65`t;!zoK|kfQ`FJgCpAc4!w|HV$v?m80p(Ogs*rBX8twBF?ZzWn(=Z^!rovN2mTW*Q*;r8xPTNeKIzadG|-}Uj$2m z5PMIKST%~OrzLR)dj5A6PkonQXnuA+<;Ju)zU%RCmDgJ@?$*i?<71?$bd7Bbbg_gCLz`mo%PS02 zJrhs%z>&6M?w?y4^k?lqud+aG@3*-~s|Fa5+9q-Q`A9~GY-7aFi{!qjjr|-Rj_Yr; z7j}n5Y$IDJ5=x?ccci@5^v4&KH=bq&kp%sTFU*WlZ{Tun|iFOE$RLH zrk!}@7#4U3Ssx(ISVWhx=YqrwHM2U{$rz`!OGS76A_;$LBCcK&z#K-T%DS_gCd6sK zF^e@Q%LPR^RAz{zqWR^C@5s5^-`1Jj%Wm8%Evq(qW)`qnaG6sx#H?9XFe2eT{hD4+ zdFbLiMB57#@%WR2ZPQ_lEqUA2I=@-Bb8d_>hny1pgTmQW~ysOI+*`N-sSx;9swwF7=fE-lJ7PH%)B4(TCfXm{f9f1 zOY;Bl8UF-==>GkOa_c{Phd%w!F1G)_Ud*tFABn>6>zDfMoX`tNl8}&)OFr%pvrdAl z#w=_k!Srd_({{srb}1-NaFf<^jJ*uTt8mLJHhWINV#%|g=XQ;e`UWBT%B9VG0Ws>6+s}{ds z*rc!egW0P7g z$rCYU%I4*0_%5P(q>i~3@$#EsVs<1My|5Seb>j1GoJk{=JjCpXA}!5v-E03va5 zaeY0c5&9}t-v)<$cS6xt`St|s-Z!Y)`L6WwGntPaVJcojb>eSDu5)Fli1#lo&IBsoU^id@d zo^GT%^`;C>q`T;oS;1ym{FN}yxdo)P4f(O45}Zoq@Ll5R54?|nK+oV#a6cn81Y%RQ zKiFjDyXHVj$K<^Jd8FGSuBHBVR@q6C(?b@KYBn{s7fH3{egYVX%C;f$TQs}W@YEk9pPY2E6Jy7NJ&-F95fTLBXK0bWzpS;Ir?nR-$ z(=xtu-`Fo}hU(bnu`^e7XMn(O-}W0%dG35uy%5X?l?|4Kix1?AW4F$x?Y56VQ@2^? zrxJ4K8T?q;Ym3v32Q+K;Jp}b9e3#h{=cG8oOTzeq_@B14cX2ukA%GP@V&-cm${TyQ zw_^kL7Z(QyMnLqSyipRYS-vm}BukLKhVAZr6(evPN8bQvDNh<+#M^_zR<-UOm2#ZlAp=2 z@Fb<3OD=-?Kts;K;+7ZHA0E)3=o#ogU}ouRc>8J&Ops8B4i9hzg4KY%HUwK*10s65 z1)jH668TdPZ?rV^0KXK-R!ooCn5u;v@@d3ZLzkr!LFu<3TmEUY&H;nU@WKvk?(m(Bsz3WQ+6M@WWjY`l% zgqPT^jCxX^deE7wTb5LmY z>1kQxkR_}}`TXx3*$7P?1MUB{JFhz?WG7hu0oLVvv$3744->8S@cC*H4sLC}ck;>c z4kI;?-$J?z)AGkoqL+J%O!UTraJFQX?D%6Fh%}Royz{-j2+i*amJ0fHX^YRv2m#)! zNJh@#S~ck^4E`(d6RB7Otl*--3&b8EC{Pv7_oF;7s(8;T{1DSa5ZCxerVDqJgq*{q zAWt7RUSkIeL^}V41;+VdKe0^z9J)qwqGWsZ_-sT}E~uG2E2gCz}#P@pVYor>WEZLpj+(@Ppiy{ z5EI_*85~cq7Srldpk=gkRwn~E+ z$Hx8rQRcvbBiEOQLFPmAJ_)i_xg~+uRtsup+bx8ZwGI#u#_r1n5h*T{{-m;!%Ll!agT!-W zn<2OvMpmu>C{&+PD_d%CB(bFuu$^87t%aGx^uz2=dd_ z<7~eZpgu}`v(T<`z1)ui+sI-Z5~$DYNheX_LT-bSe$bbl=VU%r+QI|De`N~ooePr@ z3AcgRp#@!}9Bm7*W-O^l?o9TAGR#iPLdFMqYmed$w{{o(C2Bv~w@E3#NK2Eq2)H0W z<&xA7YLP6mnAK^D4iG-VY3FsmFqPDTg4G$C;pqVc-nCQ_LyP9vlwX@)n)g3+uP>_F zv8xDa#p~-0fu?w*_q5bX5;FR?!8~cQ?gi5FUy}-){iOu^ zmd63+1P&rF^tNjs*IXl!40+aTeus5f0|A8w&29UV^YhD9I#9+S7GlgpI)24Kj~CoY z-jwNWc(-N_4x(zi(TLyZ8()zZwRv!3AjFFobBG&I15Z@X?wsRV+#Q{erQ!^M8f@S! z*ucQru<1{vL;9NYu~TB%O72dUC0CKx@o5n+g@qjCM`8vMO9^ZkcO`U%!AC>asHsyf z(KHei4k?`-6c@$?Ti^@B)3SEo* z(sFS&|ED6ZMa`}f^h3HOCpqu?t$Get8)vK_GH6|lBYI;@!NwhITi6PG*EE>t?%ViH zGY2($IcM1d8FNOpj;xHnOm=-|aU*h4gJm_AOeiNbFGeNS9=CKp;gc+zlm;&u3<^O8 zymz-JCOr>p1-AOsPXGihJ6`v%YaB5pGYH?(nx})pk98zQ<9x@pkNP#gh;8J@$>lXQ zF=S~@&E<-uMfE?X%yj#Qfo1f=fQtN|_9yne-}_7NAF-N-cKBQ+R~G(>@i7zK73`sE zqqTVt68ZF6_a>*1U$Y#ob+nyFj&ozsK~BTzXfJ)L2+hPM|5}1^U(~w3Q6k!Dcvi5I zF^;gQQQ5NPMgq73p+%_WQc^c!2OExFWM80NSeo#*kJ)C(-stGGSIV|E$w9n!6o9g& zU7}|uzY}tCy2n_FpfRX4S9NrJ3xqw>(fw)A9y{*Th#PyPiO693Zb-mwrAd5qG(`5* z87>4P;S;MHD=VEjto})~*{7_pWFtsmu{OpCPU-<3AkMjpc8K&JLBU8rd-z%_ISbi8 z^87`bDoG%EnRi$5b9ma_(8YaR2%pH4OmyMGA6+<90dR1n9?0dw0_~~gq_q3!$+3gK z^JLK=0jm;D0fM#rEO!Y4vW!wA3*@s1LBahwk0G-2!zFS5^%{KR(N?qh;rVV$8&`4y z1Xo&Pd*<}(m)0_R)_dyOP`n|~QhP6TQW!nOcTioq^d`9INr5#L9)j!n zlqW^BJMb2laUH55gSLo%JAW-I#Y!GW!E3vJAoI{XrB_~=HsP*I#guP4+fn3Aef#rZ zJ1sm}?%N&N9A1V0s)0zX#q7{48v7uzX*dqU@7|qlzT0_DfGHDY|L_Kh6ugfhmmE;H zDA3A+UFGFHVzA4Iiu1j;SmrCz6!rxIn;?K&f%3Q_m2MPd&Qi-kqx0aRbY;k|QcOh_ zB(`~tL(Xh1=*>94+_wU)L)6JwjCE~PDcF7OGwXZvbn5=vu?PMa;W+Wac`!6OZc+jw z`b$MXUIr0oUPWoUsY_^dw+>XomgIIxrrdQ|tH~`GOiPECM}GDeFfkvfl3YR(UnfPL z?yc{a-lHkEMY6r}xtN!=K!h8+)-eSLS4mQFW_f1*ADm$;4}montj zXxiIuLyaW^?I!aB_9H~MmwGx+)$Y!nb6g=`5b>S-WUI$b_`4FieY3MvuqZP(3!;(ntKdg^WtXx&2VCTtE^N2^jsPg z^0=y+8c4HLi-TEhMudWfLXLJbbIjNX{KhRq6C?x#d8O^FI6rPYc#On8qQ(~O8zAee zmE7iS#1C*#>!5o@Xw!+1g+^jSSpqC+<$AU4zPzyj8eS>J2~a73fyh1bUj?S2DI2&(l1GYpCPpI36>voU@3+y z&GEcniG4u-EO^H1_dWG)Aadt&qXe@7pqcYibk!4f_V~orlWQu@@yRVz5uK9#c5ptM zn#quCTSs`p@q;|k)YJsOT%Die;1^>9! zT>c8h60l!*^`-f0Xs`f@QxdAB3J&-R3{CHdk@Uo6X!;x72_v^qR{veAgRJ#i0f#p9 z)}jA&;#(B}a6^DW(UCQy-PWekhtN_iK}FI$uZ(TgfZ5LYtpN*!FTh+pM`urFpE1;r zBs0~Hf?%&W(2hmETCpF^KVx?YW|S|jUR?uQkfg*kCg+B6+@<%th%gh)x2Gpl{1W97 zXHvoO2r0W$Hn9%Q?*bu?X9HZs>@CCxp;^<@5*(V)C;$l~IX@jpzrF55pa`|Xu9p0c zlO}%FQ9!xP1r5vtzQ#;hm5%mF4lWki&n!Vu1;x%U=;51nCK^>gTPuBxpJm4!gvbFE zxFwMC?ejJusJ8b$9o^uf8Xwz}X~brGuL`1%sU?l}IY6uAnc{n1B`)ASd{qhL2!oP{ zFjy|n_&nk$Wn-T4D^NVE{1pDOz8ES~f^yH^e`;tRBE4h%z${Cc?N63G5K}QAkf9N^ zwl;(=W{`8D$bGSMlQNp)nM7>$qQspGz#^w({k^4@q;w8@xM}Ke-^;V-8D)weCMvBJ zXMp6|B!jXOYj+Y-6LQ@qgRDd0Gwd7{S8um;T&L~+?#hy5zFC1a`6Z~s;`Hdz^lR(X z&s_qyM@Z|%?gg5Z#5sq5VGJG{wx)$zkfxaG0T8EoHf`)xoo8nA35$7b~^ zpjNDcg7jPJ*=m~W4ncLIDfk)dD=ts2nr^ae@yTby{;Up7hiZ(ym1af)#rpT{-=1I; zw_$H_j@H)RlT)Be#Zet605m-xS?-ZyhKp|t8K}}GgNVG45m>~cxkC9>hpZ`%ht2k~ zu_ho{5Faq?Th&U(p$G{xV}gI;Haqh+SkT*le+Ajg(K?NJV!Dn7=~$E$5{Y1W{6v+p z1e4Xcv;X0wTbIffFhOt7E%grNTT}NHDcissfp-hE%d4aQ58ehyn=4k#rLOL_Cxe>E zQop0D)ub&%f6F<2m%2JCJNY~(_QSy@o$8r@Ek^eDgxAIp^wj%~2Xl@bGnt?%^J*K9SF!!DW5j?2$24u&P@Fx=qGaGX16t{n!9lkiryGOwzKI<3Dg_j2x&!y zZm&DiyK>d2Tz5n>g#njB`20b<7}hGY+xqcEd2Q4HsMak1s@5LrfCWNiaA!k+)l~rZ zc}Z8N&dQ+VQjC-CG0Yzx|1k8;kitDEV$x{eSx77c$AJHk!Fhjy?<1O@^)-Hs;!!dY ziiYB8(9P#1BeG@Jb6m1vAc1ObcYOf zcj64rCBRK>Nk&N2f#~yh#qoU1`2b#hXM4x(rAz%&yqP-IX%35&YXi6h?ULWI(w66+ zfJ+W?bEtJ>yyzbhwo2!Yn3?rdk$RSy0w6OEj(rA z%9wZ!+rzI(=Z{gCGBgK82ZU7EFjLJ`rY*qNv6l^E*)jb{b_6Zsi~$gH<9#%XeP$$c zs@U7R`#Wq6_Jy^I8Qo4c6X7i++tVpqCcFKfWF!rzztqeyyrz(WvYNoA^I&mJtDeNA zCtX~)!3EQ^mZS0yif2B6=k5qFzekh85WEat%-%K0^jg+&cW#&J@*iq!|E(m0rAZLH zTh*E6t1n|Mh%PzM9e+Ag)rMf*jX*$i&*a?56<}27ly*cviiLcejZ0LHw8vi4q zXJ0JLR~j(NevH+FnR)**NVEQ>ay#R4giSBXrG}QyCgl&QPYV&lA1MO;Sa^o|?!9V7#Y|a8-0ffH6d}&yUt*)afLdUK25t;M*H|A0l^d){ zedUTz;XH&QF@yKIG&t-#6~j8dXrd4zbtqts?!m0Dtv|S&#Q)2G?Q2lmkvtH8%+TDj zL}f2LAfjiSMHRXdy&FEj95#nm=WW`1`aXx9@u_%OLxrEDau%UHr)1s=P}sEAOU_{m z9)f-I)k~&Hy?BCB>z{sf{Q9`zq}fAGjk5TGyK`)?W%gO&OMv>7V;Jr+=C>r%#QiBp z3yl2IlTkyoFewRNHM5tqS<#^Ton0rBFg<(GIAhR%);vp=23)J;>tnE&s{lDpmNjM~ zqlUGtE_-Hn%Ok)PATWbz4%<4mb_kb!u6V?G!{+V9Sif&9}wk^7u0MizCzppq49K|*7PXA~@wuH^#rO-6{v8O99eIbA2X z-Xc!1ppz!eY^)^XkOuu-%^$6vhra(c?579h)Fs)BW`ZZ|gl111{YcZ4 zU_J}Of13cG*tHnU8^e&^IkuK5H|Y4 ze$5UHxatv{@n>{aO3D_6yQO_SuqrU4BozXErIXm< z;!8WCwsF58uaz^cbU?|uuTM;(V`f@Swp`eL7?hz!_za&^i3Nm+O27tXxXUt6IJz3E z`kKAH{jB9ux1Jf=eLb^C9ol{7H#xJ$uiuEBngst^AV1hzJsq6UID1+pQuDU=(d+(9 z{EiCMmiEF>fb3DSft^ew0k1O#5Q{Ufv?tb(-4J;?)tbk3xvG4(N{uBjpa#_dVa@}U zqkX6C3PiUKk|JQ9-ZieDdoB!C7w0%PxTHZJ=t}hW6HHMLj3U*|S&ijfu)%jcu!uRc zjtUN}h;{6?r5QZOJ?oh}pmGa3a0Rx+_-hb$0E3i>U{_1_*c#`mgkoOvy|7rZzOw!62h80*x|nN=okRjFKNPDHTe!_G#*rD^LH^qdt-sr5qWK^=G?F%_z08eWA2y6+*xN>>mvP5o^3a|Y8fwfE@ zYip+y;P6!pKj8yE?a&`L2$1FblEXqwvBuS38VK&utKTtGQ}%5REQu?93z;=z z2KD!UH3mdE&y3F9zQP6)0zwAr0ih}_8NjrCr-Z{E0b1D3w|+i@g8C^Sfi+q&jPcwe z)9cdt7$J(*-3-o))?ISe?g z&57Y5AhKW(i)bG4h<`QohwK8{)Hlsx4X^U9LN#|@FmW9e004-`2Yw>bVYQbU?p6ux z)fP;B2bs}HC@$ywX9)8!-Bz{S3`-CbTJHWTlyX2yV*WcPD6)- zjnsw>kOzw>(B#zTTOuU&v&^eWQqs!IgT+>T^)dimvX8rTeU`Uz?qXNY(B>NZ(_oms zkzSDBG}zp296>)jg77r!1J%d@0EJU6g1J(;`^5I4oJB&1E-sduX2YG_A{^Z%ejd-hQpn?<8DTM(@uOys@by z2jH6+lW8s7Li`o^Ld$JwpFh?LA`NgbMW`%CUeve(aLi)XWw9yP4Rj{GjwgtRwVnCA z^#tdqVD3JM&4D3qf_Dmof7;W2OV)2s*EloFDRca%7$`b2Zsemp$98Iz^EMQNbjaUi zvtYD8shQ6v`}qQ!IElyE0@7yV5dI5Ddm}z$#%PwA6?yfQc@6{;&aun;QXbE; z0B7}rK!s<*)NWRx%4Qa&;?UqMgdO;=j2;Qedy-c#U+Cem){^CKYZ2zmW&n6_?672# z9dxMnKWF0NiXRPwNn=2J_a*X%!81;WW|W~KO;W>vx>dyr^&+Mf@&=UI#MxkvKL^01 z;_}k<0gQM9$e{YX&L?}@&oYK8hlmORNcuItxR7wo(B!j=3qgh$D*S@T2h+k>mzqns zWaZU%8^j91F@;Vu6q|SX@EWj|FaLayhLuRz^-t4ij=fKBx4M#oVVC*2d40*%nQszn zVexkPD<*_AGpo5Unt7Ppx=KhAQ)FBrR?l9v*UPy8Nb`-X4f&2TgZxbEB^L<&t!$3K zR{2noIq!tnsRkMIdn%wMO`u!0fpXwG3H~fy>9CO-Z4}n=iVQ#GUk7n ziFw0h57;ExsnN8#WGEUd0qO^e&NKK+^jUNG8*Z9b26-SD(lXz2RB?7`PF@N&x za8CX9K$)Ye1qB?faG9+6-8KhMBxsif0}67WQ(C2c=Xv~>&pJ;g^cW%z<}@giu3G%| z2B@80Fvl$Cwkn;cRfWTPmwnP@PTNM9c+Kq2@$vDGu@h}$;}-^Y4AQ!?J!tsVPTN=?229w0`!v|Ng<$zU^}ho`P`j2!zs^HR4mQNzd*&C4 zI#||yLKnBc_qdL44F5ZP)!QT#`&F~X5w9?q%spC**VRc@dtdgy4?2nc+>|iR%eDDdr{C*VChGjcm2(JYk`d1P^uBiRbaEI}lMBv52N#4i`9>YA z6fiamG<=O8Cb9Ho;a>qt(i^*J!j96=nA!Eu6p{j+m01%}?28ivo z_g&BN6;5-tmhK6&8pE`mpf+Br_rNr{Ia0ZgH=peXFAv#_j-QoRFeR+_57hD1)q3Xj zS^G_xTe|*Lt~y*A;YmW5j~TQn!qXQdy<{yz4$Un9<>53v6%BU&c?5OY|2NW!fl3M%$=G4JU;0aB zmP=k7L{spo(⪙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

    h{&A`s#3R2?w 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 literal 0 HcmV?d00001 diff --git a/use_cases/ex1_2_autosubmit_scorecards/Figures/scorecard-4_ECMWF-SEAS5_ERA5_tas_1993-2003.png b/use_cases/ex1_2_autosubmit_scorecards/Figures/scorecard-4_ECMWF-SEAS5_ERA5_tas_1993-2003.png new file mode 100644 index 0000000000000000000000000000000000000000..54e1a5b1825b1a00672360dd86f3c8c15a86380c GIT binary patch literal 401925 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

    2u;u@Y|t}@bJHL(w_|aXBR7B_o#Op&X4=b=>mjj zMaIuhiiWASq(41N*^xy+ZvDQKc0e-q>)l@%)vascrIsF5syEB^^9xpa)`{ts+lTj$ zxJM@^s$66>Qjg|8g^+i9vMv)d-#=m>WK`>?1SOL*6kah7dhy8$HO+MNy!q9|QWhyU zFkmp`ZSC}~Zp$l_W_HQy%KWWs`%B%Bqpq%-ezO0Qweih*;tx+L?(x(*S3{0n{JxU7 ziaX%UiT-V&+xvDV8+v;u>_g2!tfjiUQ{S|#W(v;Q`M0yt7uAsCKd10yk#o~C`v2BJ zPZl>dc3`1(21dh!cm!$vG<5?{Z>o%G8mj!YlGX)L)4|;?+m+YH;-z4~SJ8~5h4!qf zPhLAWOdqc+Z_bH{p(A*oKrm%;2TpzvKohT;-+iO_=7k}9(t~5yY$Z7ZNIh*)kLMe+ z7yJ9v#1nq6L;t*f7S%#EE$}joW2Wb(lq{ocX$n6WY%npX+}kL#Jtz0iow_qf`Gj;` z)E^d^EzvY_pT>yk4>Ye3c1Kn_t>Ue(fmcguO+^Z7Z)1^*A_9p~sZIX?e_#+ELJ&18 z%$@V9l+3C}UsGZvVJU|-AwPM7Ud}!5@3ETt9i<}wdfNV4$_N*rfrjkJ0h)ZOvmG@w0G_OVovY-FZ)m>mT|ewL!7MK={>oAI zc*%FX+ci^%|1q~{@{pz*xsPGzppA+2(`v_F(F19dU>g!tn(;Y@n>1hG>XDKwyi8fW zzX^+K_82AL-Qn-ZnmAluA-?@z1Kwt`U`i&48}7`RAQ-@c$NSO1rdcm9B!oRG(R)!c z(Xk_*AFQNE&)59(=Q{&0SF65Ocf3~v{nzL2Pn)h*Q!WfHLn!Yl-Wq83W;Sc~g0?~M z!P{yEIXfjL09HvVI=lfAUOsRhz^zZbXHWfMa}BqK7uyJ%!DyADCyKpF)t^;p9&5$@ z5IlZoWyN&3+J6riR16g2yGBrnSm~c+zW-(g%TlzBijMx19Vsg7=Z83kqfqhy$RXf) z@aF3LxQchAkY&tX=kF-8#Gf3mor1qQz}d0W^Qfh6zyicSZUM|~@|)`#l=nJmcaHfR z=gVck^u%jcs-5_It^y57sOuG4C+8~gg{RF}1!KUMY+@<5e5J;dVK{EPb00q}qMgR8 zocjg+F0OQOfWLWJnO#mU{ozUNoPg`f{YcSMUfJ9wTn^o%!;`n?XZJP%L=k;?JgyVb zPO%6-S+2pcedbI$Jui;jP=Ejz5A(hRY8((=l#6GiWy8$R z?8TgczWVINymer_xH+XkpT_7_jo%D)s(|ya>0=X$ShMyjj-)4gCP*mw(J9-hgIF&OjL@dn{ z?%Q*_bcWm7C!D*c>#(iFtb&ACre)Hnlk?%POgR zTvDtLaXiJzvPok|oqgAbte+FPsMzz=M&A;_zag(`TyGhS-o~1bai2Bs%9+lgDPD-6 z3B;hAnkJCO!>1hkXPDAFJtkry!rR?QM$aU9Goa?tmn8tK+GED^i&@#teLp0ffYz~# zRl3+oJS~<&L{(H&)+%E5d^Whv2Xem7z24xpL+WyM&(@rksM2IL*J<3Dsc=4of;DHo z{%772G*KQvF>cutUijJbGrNJ|JhVxr2lh9-bj&WW2LmOW*tG<24FT`dZZh#<9EQPYOq=|Jx(eLrnfY;t=EX`KwDh5;ITL_sHZ%veY& zFlMQgs;~@(Yf zKZt?ZEC5XCNy{%mXE-heFDzj^R8O0}8ME1LkF}14+^D~*NT6;)o2-o2G$Bzb>2b&( zlv3!%-G7kHsWPntUvx;lEnRJ!kQF-46+-8Hj`{)`l$yGlYCXVl&l5;8^<0LA6nX91 zV+J>m)eWRs^iE2&t30-A#_P9vJFiKq#xwk{Ep2nSTsPGIR&ldFhYG-i;FV5|RluLw zNygE)G+gbI19^@goy|nCuj(QislSwLRdW*ULuubub3C*6{eB}Xl0r&|kZ|}Uj#F7R zEZ|@f>e^UCP8^ex5&&d4E++y#&j$%DNM_s4wG|a5OM8l4k!4}ZnD)lcpIA>Z@nO?qoHMR)kU3au9#}TD`9N`hwH7rQO8lJteQ> z%IP=Zp+db4&g#wl%nPWc;_skLTn9GID|7f)_KsSLSi4>8_1SDfLgAz5gi8J^jl);f zd%B!l!^#ZLQ65{KqE|lYu4?faFZ`q=y>!x0a((1+&oWZ`G!y*qyV($R?;418GDk+- zdCABViheXEVB=Sl!W`3iWV%nURPH$YmMX)HynSP;otz_ud3?#&b7ONq&fupE3iE^a zt6zA1;mwkZt+l0x-lxP~5P6XLKcMamB7)N$1>|O&^(Wsf;BQ3~iPkEE<%BKL`jp6J zPq1}PsyCe^B5S0LwUoy2GT{uDdRb4D(4qtwRo&e)iKJKwldr>ii0uabIQj$pRq&3u z_gj9VIB)1`S#`7OG{3#3T2DqA&p0tx%Ll_ZD(F`m_6|AZB-S*(w)=>1rb)4_{?wUQ z$%}RY3+~Kd=+`6>=R`ib@W?>30cq><4#caz>%$5gcjVe95Yh_t%l!H@Z`aknorkw1 zp~z!8R$I9&D7Emk$V@=tH$FKL$jb;bYL>UMEw&je&bm5zlS*^}5Wr(UScjXID{b_c z2wiJqlUf<=Yy=IQF>ulUuDgmsamus5F1S)srDn84vfjJP=CT;KAAj*lCP~7lqW1FM z_P5FN!=ZXQ7-v@ZaotR|t@fS=+MhO?^whgy=+%%TC4~$`y}!8a*LDJbRAOY4?y(3H znBu38gA&XK-cnhHDD}}k^N}LBgwi)R4+IDP;4N`t&A9T68lez*co*jA&CQ&#YeA`w zsS;z0j`qFU{nxOR{A6b0i_)&G_72D3YrWQ~m~8Z(EU}+oC8dJ+TSDKMs-u!=>l=G@ z5Ntm&)LR?!J5$>te`q$9yO`Y*l+ey&W8$sYFSyF?kJHGAh-uVImn{zVeY&{m*6!YS z^=*4sq_%e1v>y=*>*?+fK2ekdHiYH#-=vV2-iC|euA)$hVz>Xqymp2)stnU@yS3ICd>~9z^DFdd` zQD@#&v?dF3bJ(*OEDGLdecJ1Yd3NU8=R7u;Dw_;!158enQgHoe?RO)O`-XBO<(w40%1mhk)C~giHKn-63sL$u7=AfHBzqUE3Vy>*%>I5=;(f2V({!YC4$6R;rG7VAf$Ou$foteKEXxC?|u;6BQo;crKZaP3PK z5I*Rlkxyj*8bu?;>38V?@mi+^3O_yJSHbk@^PSZG)z`lLA}8$NVmnQ{qFU59A2S6|Zxi*;Xxz}<}yQYUX)l3~o^5o>@-Jajs>D#WG zQv^~#>qEJZz@{4mtj2Qmn>I)v)>lSQOa*tFtbcah!(Y0OcR$;EoczI~np7A8CE9O> zoaG7rufGN1`bZYFPN^8cWH~H-(Jjp|H`A^S>^5268>9qs&Ai#5&Hm@^59d}KISKFV z!QWAdGyJmZhqvn;f0rI@@qVAr+!VuOBF+7{xh*B_ARa4AtMFP^Ta1qcp8#onQQJ!r z9uK3FPnPuX_(wc2;x*?GXYyElGoKzGoA-+SP_;lz{+3~2rXt{PV7sNq%zQLn5^D5)YouytY|%OTG?0skn2SI>pl19SK*c;<)qn5`<@Y8M04&6(Df7K$!A*v)9pyZiJX|RyobnWrJ? zm-hBC{atGxURSF(i$+f{zqp7GwF*lJU0AL?KZ4?onhmA(K|m?b4+%gu)(HLVKy2bqn6Jf)PUOBn>ORBLyhrMd`%v%n)DuuVF!B;_Yp- zSp-P&11BGdn61no8{E>skeeBFYL_9Q8tX%{dktI-23m0k?8&GS0SnUb8ee1k4wpx- zIVZl|W91`Y;7!(c=f7%1T8w^bU7{i9C=aLJDI53O8Y`L=_v&y% z@t~I{yQRslS4Fdq6yN;5B@M|$HV>6mofWbh?HTveNsI5G2#Og<>W>D?5#Q@9-zl#1 zjS+HA`Q^`CpE19{s25YC9UHI}r=Vcnm;a9Jb^@lT(m%%pz2j6eHufLgaLj*o!#rp| z=j<)_p`RE$&e!vmi$_gNP4|z-4OG?C+VV5}9=;2G!9pT7ix``Ec`YiM&Nu7v4VYT%xzA+yoikGVoxZB5s919m zJn|A*?ax>RmG_t>1)TEVZ!E-Xf@u-v8NTsE%o+{{%QEtG!>+4BAe|%~{ET0zpPhx$ zzgkaa!M@WCIQwac6i@s2k8our^lDGK6kE>wm?3Kz?UiwSQYBn2C#NI{trMnT(&rF+ z!|>-^kmHOZLS+=THCP&o`6n$crUhM3;?j6KBBQ*z>==us73LoL3=9B_$tUYRi|a~Y zf+XWzmob>1@$o9QhnmFZt2Kt#6bA=R4ObD~fT{vwuK16L+b=~#;((Z)%BP?G=_2vC z;eLL%xGjfJpFIT*Pnn{U;yRG_@)!(X-oeTZl~M0`1_uen`04#rcb_-3?b*ZHOeJx4 z4g(B-c#CEmsv^j571mOnfV$jP&_0%mv*{=tu?AGtOjcj~j7`S;JcIInw1yxs7wG=Z zN8y22B2dkbAeeGGN0&h5B>&tR@Y2P8L)8EL_mB07Pp(R#GD8nUiimiMY1qT_RNqxJ zyCN}EMyeEPH(8(yT5FWLvPHRCQOLj~87Vimf=5yyMY{rmQ8~~jxsZEo?Ek>%!2au{ z!$hc&>Tx(7kOg^*9nOtc_0kV#g)(bG-;74!vH@N=Yl$LJR&A-Sc7cjZvtrxd$-;vSA z+UAFxd+KuH$maf%H+7Tx38Pqw5o7(SYGK%+@Z{8T%YTj0Q-BTXYtBMr#{(cVeb7}B zY=_?u1R_H_v`>pXLVfH^jqZpysuY`3+`+NQ9u|Mri0 z2PC;0FPK!KWWstq6RDJKBpq0!PFBX&DWlJ-bfflcjwd)t!o}N;SU+Q`9Ur=dSrTK- zJ~a`fEtR~>n71kflw8eVxEGVal|d^b;Iehu_{&J+#`kC2b2-}K2Q(B@Br*p@ zlb5T{R2doGHUcRygsh9P?!DWc{eoo(h~;rj*oIKq0mnJD ztxa>@m0*^WzBV%LF#bEk@&Evn?TTQ!&i{uLbqd}=lP^6A2yMppi=uc}a zbM+3`H$EjMzV~-olPK)T*%?W_3L;;AeSIQZ^X1SaL*e%p!}-6Wkf=nCw)S=oV2Xl= zdk2gV{~p%7;iZ%=+)eF&dF!2)774gjfLw_VC1!KFzVzI5QAZPKaskAOMv2yYP%}$K zP%LykkwXfWY9M?0=1`RG(_c53O4ktQ8^ufsg+0JguL9xbUN`ewvsgq*q13kXl zE0^w=^x47iLox;+FUPe*x1}Ek^lGK4@IWe8;d9yD8yUNU5kUl!ptW2I4-f9 zO2@CEx9$Y0*f6Xh(YyNxp^>^`kyb-tK#B7fA7AGTyDKOW|Cn&-J)|pYfJw5$VE>k>ZC;r3fkm39qRxsxqb%6{zj1UYh8f;DLf?2)>|VhqmNP zwI&&dhhu6bgK`RXCznQdo72km>@7y=aCrfXdCmXA zO)M?Ts8^dXS&z!qSZ3?kTlU(cj?cPp(hqtUKwE6zz3|(?s>c@xPsm+5PQJM59Sk5! z&d)QlU$i!y!VJo4q#w-3zqnh%Zy744X>Z^!^wj%`jf-|;v0`J*dAY^}GsRTl+0dkS z>?&!;vEUbBTapeYY(Hp7aquiKa*5v(*gVyJ;b7kPcFHyQ#R3@}mSEvRA()_7;=oA{ z0+^*E6ms@6ozD&g(hV=JE;h@aV>5a`@2hU_t7(=w8fYL&v-)`syPRzTCZ2i<(i~pb zx?IoaD|1wa`koA0y~b+3Nc)Ut)om{ZbyXF$g-oVImk*#gw)0rVN1N z$CN)0Ifb5?iQgt3a)J44ItP|!=OM(4b$xr0$p-k-LOf&&W9g7#PUkbPeaSxhy!{sc zys>VWkz!|+O|P8}_XG3AAc#+$Nmc7XK{qT_rY9>_+8ZZ@w^5Ej8zc->HaJ?L z8&&J(rUN_kAaH`DWpyr3qIKJG+u7W_!vnR1q%y&g@kYs;7fI+^^C4_(+8-oMCMljI zmO`{uq~E{$^2B@q^bUP0XaKd8cG^;cL3{xiv$ZE`e<*9Wuj0a5wSpv6uVbPY*OrKr{^ zbtPqr3juBM?Z>2~GEHvV{0{Rt0Iof*w+mX^66kKjDwQ=Ji*9X>DKdVnpQ(~^>j?=- z7qNj)i;~z?8>q*+yDQWz`azks@FxIJ)pi;;S(_4c)y?}TTP@zYR?Q+;L!ux(c+?u_ zHNTAD!Nf0C4rgF>G754ZbDd1VS9yPr;Y``>7-G?zI}4q+N=?`FjL4YiJP<>)ns8>R zHO{Z(N#--ZWDyB|Mo;+o#ZcFdDU|?>`ddqU0yINRS$S}rVzKnEV8gQd=vi@5-XY+T z`iQL3pv<0~h@G|(vE*!8L2$gWHmjRZ(KZv#g~i2xb+#4XzZaDWCjKj*6Hb#d391@? z#O*t+q+;05$-I`|I#lJR1D;(TAv>QxUvYe6Mx3C+`t+&I+=-FvHuNEL4b0lMxu+z* z_Y zeesWjruR}Ye(n}7pTV)I#CqtXGw*(3r^8_f<)XD2%cpi_H}xwT3=ZlI#@sKAIdvBW zeEo=-i1{Y#NQ`b|ZyL_Z_8Va=WACizyQu_R@EAL!Y!|hPn0IZ)ql+~wkAEc}qKi1; z`aQ& z?}i)Y{3=#1ew$4e7ginxDKHr`K)~FM>9X7+%$Bz%Zn@wFxVl7vev|vSc(OuorXn(k zb@@b<%48!JCHCv{byTH@S0h8J?(7XqMS{k7k9=^WM~TL&z=6(Y!`Q{>zN$rcpBzb8 ze4PB&GoAKa8AwDQ(&h(WLVByoUpW%j_Mqp{n%h19tt-M+rg`6>BzU#6H#k*kw8F@q zDTYa#4tng}h-!e6@tP`TeGNniD(cC;vWkl)%&U2~`FW0}DLH6nMj=>o`@=Ox*;vKt zNLZLYz9F)HQB4SGwyQkbViTYcnpQo|xTq0I@*7yXz6)O3sqF^QHpL)x&+ z-H(ClC4;WEJ;Pi^_tD5UNO^EB@t62a&>m>$3H^)=rHA0hjIcXQ=aObRXNFB#fSuPz_d%~ zpww69!2O2ty2_ucTUcM{h;fgMg;~i!ayO;o{35i?u9?yetj^Jm1ytDhv?;0MEboiF zk9-8VndL!$7o-Qr-h;&Cr(T1SqCSI;`2LiX-odG`4^%#9*8gu^6efs)x)Ic4OBdTw z>8Xha7@)?|)TmB&`6_Fp$iN!&=$ zbB6WxbBglxnD9~xz%pX!jVy-qXm)m}!1E-dBGjZTYj{;O`uUeG0#iqW%E6sq8UU`o~*(*ZVK1^0$ z1Hjt;C5u4mg}WKlD&LI7km@@Z79~-=>6I7k@ zbX)*-ay#??k?hbMJ)Cr9N@-nnUY}G8%}rC<;9p`*L%LAMCY`sB#-5<|!h{FLPr2Lt4-uHc7 zze{Gjkwbl9CD^Zc@uB&tM8+B-E#is!SlbZIz(ND#HD zwu$Ax`&ha&4%y-lH18QGH`WxF7zB8XM*;(0=YpIMNL)gQLmKl0Z^xG6+yn`uTGP%n zi@_|LmjdCs{#=2eS?hJSbJe;uE}eyI=YUq~8{jtK6$SYq9#Zcw(c#ui2z4fd?2*O* zWprHDM>u51muT}m@i8~mh437Zsd#QEsJYM;jheo+M@e5+8_=DA*567nQ zOOnqKPchzg94!7-Gt)OvC;s%kx?UeeK9L??;%{}iLXwZwmE z>wrENkoDP|)`GGRfjq0xK!J7^I}YC(LR%1`Nf;Qw&QHD1fbxz#)BPiyv-D@UGKkid zm92P@924W!!vEOK&5f0{NISI7qhsf_UV5KVc{u6Yu&}Vby_O&~>h56-d<}8FLrT9C;lqZ6DIAloT5Y zR`R0_?TCn;bRFoMo+Pf`e7jm+?DbpMTDrSWcLcv8S4Eqo)8E{YU(hDMD$Nt8A5%g* zR+UkHK^hxlTriM`d;=O*0(Rq*N1|td7yus9(uJ*^exO@+?9S6eWa%L)7p;0u& zH#}o-?ZpOD;oW06C%c;v%Z{ zLh7%XEYRufi;Z<+M&3`?5cvqD-BQ#4Q~k{;PYL>9LWdbZli4`qF4U{Po6b)4Xd4d5 z8ypjeccgU6%j0wTQg2=?e@q!`a2Ac-@!})@nRD>@CVF~} zX^RonIuLU4p2Bo)0%1v9acc^-!-+nuf0(JaR;2VJ~T(AG#5MXt_tE@iNEpO-P0q$$5?D$)DZq}!jZ{HaZwNqlVW&B)^k z7+H$ykhYoK-qJsN_mJS&;9(sD*BrbN-9g5GELn?7V99zcu@`I2x)4CuejNgHt9LQf6zhd2LKWTCVY?%ZFL-F8Apg%dL2tR=s%#>dqUOsSHIb zQbx((4$D8F6=u;H^@I?y0;nAqKuU_gtTa84`+&)6(?Un&7!oc8dhSGJ&i?D_ufPv% z1qV5z12Bo*!sA)k*uEYd_@GmydcHl7W~-xLD|Q^?-QSo(g$PY6fSD;sOI$eEo(GMx z3tB#6BIEf>h12bM#tF&!V@1~@JK6)f6+znV+*-8-xNKlbp0*^bL+PZw3mxU|@G#l`vW z++B3%+z^Hwiul--(FKh;CAAHtpCs>|ue3qf0as*GQmE+7Zy^vGc9-iY{M)xTp>z_@ zj1n;y%#mk81~`Lia~`R)tt&*E@BMltU*r;rvD>P-Ev{n5e2gT*!>TbiK&FDC$s zT2Y=n)brXX4i?M=7c-sN`6oBeb*`da1~5Zmt@2wV0uvE8w-R+WN*{c~p(km&IO@O5 z&%%j+%WeLQ#o=jK{q`mJrex?pq@rf{6X0lXZ*WNO&4=;{HsqVFjd zPe-`eGU6J@V~F*#__V|uhHv-$Eqrd&IGmSCI9dMdN0y5Wxk34t^qj&ISf>V$?uD`& zMcS<#tU9l`pX4*$C0Y)?;r2C(^-j#!>f5yz7Mmm4pQ{7wx#P{|cu34l+lE9&-4?MW5uzbmAx@anO25mPCuHo^{YF>(4qc^FUfobdgnLI z9zD=)S@WM>4!IF^{&A+7%R|1Iw;E~$Yo)at5YE_a|@AtE0ZfI~LG`_{s*YNIae1Kcy3^qQ;1ZYc%nAJNKeGapL+ zFO&_@^e+3X^D+HT2a5v z`&Er?wwOFbt(sNXZ<_Zg4$(SP7;cnEeY_))^T_6IUu_1L8O*-q<}E*WaB3yFlsl|w z@eko)Zim0yOe~K_*f4LIKT(58;hI!J(+{VZW43>yE#lE#e`^xiQusELrtv9=<>?3U z5Bw+QvxbT`m-S(1{$j5o41LAg^P+LU+R4Y2-Y28dfWc>$zsRNLb$@C#Ghl3-0i6l_8uXc_LiK+M$#XF%f9fohTcT?C^) z@LYE$O{x0jg5B>e)_&v;nqS>@MP)BTgcd!-DHzZ1y8YZg&Hj*&g)!sByRb@sCb-UHFDfdlPbhSzaofQmeqD)r zAgrRBslA(PA+kEJAUaa4;;YB1S0&3nhydR3TXer2!KcP{N8D>fIa})$X^X+?!$Ug( zuP{I6V%?cTIdg=;zam-i&bXHl^wR|s^`eDi*v?`$5>NZl@p1?KT5g@_93rB(L@#BY zYk4`v;TimQ)d4Z0W3DMszq;RTTO6`u$*hvt-VwzvWz~9l21Rd|GN**qFE)kluv_j4cCxNh+sh+jX70{ zxG2aY&L zmL_@5TnWkY|DE?>Pmh8o6x%!FQwVyw*8@{-E zJsG|+$BU!7v%u$+o3TCZkC#G!4zC=}sq@`kZY!BNW8>QdHk|KLE~G@~P#03=bVK1s zEH;Z*xOWyO^uWFT{Q1azbE@*sVrGTl`|a)RbluH&;6xwSru*EC6D!1J1^^ejPt#R< z61MQ}Mpx2uH@M#7&+u%-WNVzb>BcKFg#FS7>QErm>WrK>+25RywYC-ox^b1b6&K_@ z!^tH&zWka}Tm()I!+&jW>G#VIKtIkw9M;COBWW0S?dFcv(ZU1L1o#w?=8m+f7%!mX zQlj;TI}yo`*&4SgH-VTlV|y#zbKnAuABKs#}-(dWCqEyFAP3YhkWi4?Oa`# zpN^;#o9jd$ia*Tfs25csx-Tgb5cE=)k-orAMo4^;-Be`#e*#koJ?r=nFomEB!{1;E z%1<-X8%+&AON3^Y7>2p=MOO>Pn|mrpNBDx9O<-$jG)$4>3#GH!0rPf+lX&^Jo;CMX znIb0^CnziVETke=Ub!`7$lI4vH%yvV%(((aQu3zL%;${r;q~b}Gx9vk z*fM8#f4lcq{GlPk_l&z$+(1nVkuU60pSNEee#QUsjn3NR{E)0W+z-baPSZ%s|;ZwJlaN=}lKA#v`X7YMD|*G8N|NdI3)`rlLH0|N!0 zdQcrtCjXmF~>KgyjO*cnjr}8&Vl}3tBKU$5?(O=3f(5PC_F0Z>x!JR|?>^G#* zskXB`XzHKsvka(&OXylBgU50(qjfC$(^Y2;4E6~A;8Q~i6Y zE>NsWRDvTR5HGlfn@x*@pPV+@-cvigDlZVHD~r!q(0+H4=(EYsUilVChk2pD$Jt}} ztdvY?0U8+iHyoSok64$1-{x?S8M?uN&1 z!tM>CbI8HnjeA2`Xv||w(Z<4+y-GS!oPI=9Q*IB^d4hb{QN&{iqjaw?=-V?O9c6`x zSf9yn(xHdzi+@@#Z1o2Qbw0KE8xrxx2ng9@|BsM;z@^7xqJaWv7A-gICF5#oObb{H z;b#a<3xw?$PlDM<+Q6Eq2j+8egF%lQ%3Zk?cA|9gdI$AetA+eZ!A&H~l!QBYG5I%?YKP89 zZLJ7mcf(4kHlo~~cR%+ZQ?ULO4?iH21kC3gt+j*XmexNlK>++9o!+m67(RmfDix!M&-|Oi@K8H0NAq- zt!pxe>ycUlF)trKetbhv2K;E*V{Zj2`*gw@4+6U)0goF%T+PhP0G{x-*~DB52u!@pM3JEEyE<^6)Xog%8ie z05KZ?_U`#L`S2(2hgrHwP_Rseq`>dP&x(Van}b01On;6hS*DUdQNeKK_!5FMLU(8} zh1-=zvf<28@0|Gh_7aHB+`^OnbgETRsySsSGiaOcbsgUJ9Qf8jCtUX_XgjN;qZ^1L zZr`SR4uC{?n7X-qw}pRaT?YnBv`z||7LZFGx0|9GqbGz@zI|<#R!%A8fVhocJMrs8 zJkl6COiBauc>Ow}G`n1pA_p6uoXVZQ8qT+Zpp~_Cm+ zk+!{Go%CnN-thLTNx5ZfL}V13Wax#qCYpVgT6Mkr`!5_Um4Yq?$gFfGoo|pr9KV+C zHl(C!{?K}6!FY-3$4z#AWV6X>v8r=I7&7onbe6b6yX)_!A*B&+iGlH@x%9#Vg=ZyG z*nKZV_Wo~QUm-15Hfh-ybU%e#YStIh2fhGwcfSj*E}BR!_Dm%_qJWB{zQ&tmfFd`? zkA)7LuwPryw`mxIM)IH4i+!+`$?=l68*|aLd%EU`?==S2t4IGB&?_F(o!n+TEb;^!DRQd6qp_$1B>v6bBKBT+kLM#+S`&DN-|fV+!=7&@{s!&R`l0; z!!k0V3e*xn|M2cS?MZ#%H@V!`6$o{{#nO0zfaslAPsmm2aMo9ylZ$#Z%(s`lbaVd88$)8BRc6QcAl%_H+`;8pgYU5~{C%#VI z6nBHPm-qaX+V5mO#c>7>BqS2*q_YnY8gAD% zn-~{+JIqAULMt(&IX=84Pt(7Bx_s1|F3pb*Wt5TmK2NhOCb~baV2(H~9;tBfvZ2qr z@yn<$fd0>s7Mo%%%UE*g9?*Q3xXegiym(Qs==F2uK+U}9sNa-Gy23vZANd3}|I!(F zaP4=8^h*NZ;M=_7;MMM_{XqgR;b()_`Mv!76y#Cf>dl-_CjK+L{rZz|dZGAl1Pi~6 z^5;Y=>fh+9@w4RLf1B}T)@ON742hIn^K$>@C%pI!&pJBFudu@1e^yBG34D_}{t1(O zYW@nrO#knk@!4em3r;|4?h4UI)}92H27T}pfCc|w-({4d-2a!*1pgZk{r>_2@xP!p zs1Ysx--#17D*uaDM~mp{hqTQ3Y$`1_%KHzXEsM`;Z_05_#?v59@Z3eCxrHO_>L) z2{nG9`KTpotA%U-cT$7=|L*`8|C_4}kQ$6oC03{dKumb4r1S_(uE8lHp5Lw!;8m7q zkZ|QdT|4jxWJP1*Q&hpfH7VzsuU_2%LY^zBK%pZeFE7Rs8*hXkA`lS4u=gqnO>=3F zBz6mfJopo|Hc=V&_ASxfr+RO?R|K6W+d)h9=G)p@F`xjF%^SM-W^I%w8Fpkx#NfB} z+_@TamxvHE{m*_brZd_qMhI8}H8eDOZTX)X*OVDl&dpw@ud;h()A;bT4}%pc!aThx zb&#;TFo{KHsj>Mi@6GXV{-yFPTgaJ#ZKvdhi0l3EjM7SX!9|U@6|p^+Mh>#wpDz>s z0(b?RQ0CHu0jK7*YCR4J@Z|6_Ko%~5tZZf>p)k-x#`P;AZZoFnZPdBCw%PUGKgmsz zl`SvfoCnIwKY0kr>Q#>!xKu0%z8;)|tWVdzTdy7Y7L)vOygO;JTa?#tYyH6X6d`76 zVj?)^Cnd?=qvrazHLxU^{FF&%tu=Pg|wx5brQ)g>A1Ha1v z0B^NZKwGG`YKP}O1}ujwYHHtG<|wcVDqK=$A_xV(>C01}4r^LJrLR7<8@A@nb>y?%Cc$akrZ!|AflMa(L5*S{CiA ziMDYrg7b&`dM=>LeaN}gNIf}?oZQorOQ+prvL9`-eUV_+i;3{H<|7%^Pa0#)Z}SNiI_|k2TZoKbFPH_d=$!2%mW!QvoAQEs-UxHXDvtTy*kkq+U=x+`#r1v* zD6`Mb8JdvbGHuJk>6V%utM~J|U*8|$t%J)mG+10?*ubQSIoQ`;GV1Kdbq8FoXt5@| z`12btJhEB5Np7XX9gqg}P&+)Fx(OW_Q!;}rXH1zH(IDuTkp@&fHgJ>UN~n@M5K!P!@OUttyH%>os4MS7!YaB!nSkp1J9uxVo_3@|LOZ@E+d^S zCV`0SY(LmWoG6pvBWMoCnTjubHYyR};a>qSiiAcG3~;XRu3@U66UdY5$WQE*u96QZ z!Q4p_`1%*h$SJ42DC1_5{S9>SBWI_zdSDzug-&4-5+bIeqI%Ip(_6WDzjd1TIu%u$ zxSVV2+4#Q&Jh8Dabd>(L0zo(oaOb@m@RsiPV_U&aw1R!x8gg&@@1QD~85>6M7)+@#QbyLR?(>x|~ zOO7J#o#gKNcmx##jUh%nu~@a?$W9^!4b-Go9`^Jdz?C={=dUs3q(h5~*i>ut4-^$e zew_}wq@Y~id{S-dNWkT#>VK)0q=e4URABe*& zk8ZV%SbzX;DY&PU`;!MF^r3Oc1`z+Ux9)eX$P;x{r{E~M`D4(s$EVAeulChLO`WUv zNXy1MXYhIU5JbmuEIODz7k1`qxu&)~;~%8E{(3&tg6^w?sx#~XQI7<7fLPmpso2JC z?fOEnX;GnKxk_wW5+1_vCqUd|8r_%6ZEiH`Q^n-9JW zfQ&!{V2^Y&Tf@(!2v8j0KKb#GetO!#pv)F^a9z``zpQ%7Rjjm&2%wI4Fsj%C2i;qC zan(MMnt`Xh!SY$8S(;ddFZDF$$f%g^ksu);5W23>U)twWLovk~Wmid>3dieswQv-V ztVtNyBr$E);sts82LP7`fi%{bb0D{I!NY6LTM(nJvv-J2Yb(w7^YA9#^yL+4=nAKa z&mke@X9Qy>=*SAYEnEX}RPQbk4|{wrfAOCY9U)fsZd0D0RI=trOyQWq+Kt>5wN3#u zImXtWWsB2^q3#c7=@Y#*hL?M$1Y;9}-#ei5v{>(X7}oM`9$vOxmaL+tKbG4b%-*c> z;JNu$lF4xU0Gh7G`pcI4LT@IN$@;YSTP34jW15pIX}800K9$cQW~l(4H)Id|qzXuw z|MHkSQBIDXww`adKGN(9w23ZTb$AKsMNi@gadYA*UBgM*kExYR7hl(Sj`Xd+nn?)BJ2E3$LMGCb~&l>NwJM% zLC177P^b31BG%YFu?9I^O9%e%(Ft7}O~@bYo#|GQo#*$wJxs((;?P znb6B8Ecb@-|QxEot@^i&=zJ=STQHr@Qry_!zg`#mt|xsUwXa*H(!Tbwt^JappHKlgIi9!TA!Kd4-5 zi=l$1^}MX#?|Su^{8CmlL~)%$$#$ggayet8X^+Q``xv87f4FIH0dgi_SEi3~^u)%Q zP|$?r#hR824uVeizv7&jc%SWI&t|*gD594Bv2`r@{*zn~}A1~!t>%RCf$iKu_ab%85yXabV&=)AnJ#~XyF=!dlLI9D5C zM(=>ZK}GT1tpROxi~ce8pHL6Xe`R`zcrXsdy6F+{$V);AU4Y~69S0dGbpsZ3RzrN! z>%&++yL%=zEEN@j83mYD$ z;JyG&+q5YrKomXBf^n5;61Q2WkjDU*Ct(-y3)GQ^QPxw%hKIM}dL)&st!wt`tEvY4 z_B+HZZLHi-1>S?Xb!&0(x%V!5JE%Hd9LwX@$k>GWtsB3!A%Yi*py$lDZ}-I1CM)J_ zuT59}PAfJApku1HKt%!6>$$pr?+Q@3ND%0iALilW6t7or0Ox4u~4N zuYR6%gLOF#b8!^>I8K@vzcWp2ny#f&=$@4ugO3+CNd$)b9;wjKspJ`dMV-xuiynSf zI_}zpMZd=C5+iI&)Vg$RoccGg3y4T!pP2X^o-dE~X~fm)A(k+)3`>*xiWnzQ-)LxZ zZDSEquB(HtCeTyqJ2#Fy>r2gr;<_C5Oe@mtb#$0(y`1KLy_@noSt0xQaa32THO`88 zPUEU(%3-3SUB!|XEx_BVt2QmosV_V;UtQWIVfc(C$&9jCvOpby13!H zarMp(g|DdD>FE?Vm(89kj|VrYs2<~yym!Q~#3s60T93HuxGCP!i+T0ccv3OIMt7Jh z)YAj3Xttu3fXp|c!JjzxFgC)?iYevbpqV`rdc2OOuR(%zmwd`aT6un(MGHnZZ1(Ym z_D&Uc_tIm7#uv1F+r#n)Jp-k2+p~t3i3Kj-7ZXdm6j-5`<*r@bpSARc!GDY6j1PA+ zfF#-S)Dahh0WJ29JUUR}G#fcrkuQ&YPB@ZM8L3FWz{=XSIJ(k}dHVc$P`2c)RS0AH zRf(qFhOobuN3Ib8v*t&|wgOGxDhIovGAaLBCFWm3jb4#!0-{C1_37 z8-eXxU+UOP`XZ^g_AE7>Y-w@KW=2<}*yyg7At@YpjfmkLxfM-~QFKT1n3SaXah^~S z%=ZyoY9uvZz|e&rD{fH$VdDzr=Sh99v)wB@H=I2U`mS3 zoas!qa?xi`Sr_pOkP=*PGeM7U0DFW1?Mm?4?RIn}v}n0we|Uxj<(*~DWz%BvBYU(N z%8s7T)EJ*qdv0DSwQpEMTspg5VRa_KJvz*4u4Z^F-;!s)#zAB2gA29Q5uXVUL3qtY zUsukba36wAY<2>U@mGl)@axPqeYa)9+jk4-l8M$tlA0Kg?Kg`J=$E{KM~b6SpiV+0 zo&@1Bx5P5h$KULBNm4|yr?Y2rCF(^mg~OSm>_YM&g&Yy1fMq73Di*Y-Fh#jb z4PVg+HMZ|wSfa&xp${QA>*6(BRsq>W&~A(4sB0MjTlfBWDZJTLmlT3Cu_iF|%G9qB zfdN_ms9HJtL!y52KBHLMNYGQt>SIr*j!pOE`Pr}M^IZ<_TND<7%!8=bKCef3X(o-60 zvNO=QSvYpnQ5mpkPJsQ?Y~{A1O=6N5es-W|X&co~;wK5cK*6lyuBS5l-G-vT(93GA z8}Ei)K1PToff*C+Q3$3`EICd6G#lxn;yk6`~CZ$ zz0Wp-c+Z__rDS(BAe*}s2BlFT8U4EZC*NurrX+Umm3sqcX8~^w4X4(%yRw{ge*@+qnsRgRZ)@JNp2CQ@*QA z(4m)_*2cytuWi27HRqDrKW#(n)7DJ-N!t)&ie(w4-u>CBU!ECWFNaRuhIUV;dk#Y~ z%f3WzH2m>Jx3yL3xOf*$Hl5Fmu)lHF9vdQeE^x}`bDk8g@!nKXP`LKs!2_ju%e;jg zjiK>(Z`Xbd*{=W*3^+8*#YAGk=(1;PuBmz@GeOvQaOVv(A73QUuJ8aJjfvm3EWu@* z3>zP&08AYJW^hAlNk8GZxVYxlR)cesV)HAdHa*rLeT5)eAp%3xKzRnp$Lkc#+-?gB ztznEkid^+FN=i!LimKcIkRAPVNuRCzrPkf%K;TKpoP3KRG6wfDkfmw^J_FJxW3rNc zzk-!6O1}sAsN2C$j02u#=>D47(e4VNnF*-1Ve1nhRBj)6e#(WY+qnURI2^b$P=tLK zaJW0)7PhpQ;9|WxnB%uUW;5KAS3=*JuEhq#jW#V`DTho`b5lpQ?p9UlsSqRmDnfo% z-5TbSlrhTBkRNLhs%&t+L{r+)HF-WEvvziwS93=g{xI4zh}1wzXgP%Fqu@>x*XWM4 z)w!unN6(XoQu1vL-8Mwm>=qO~j=2LdK>ezRJ^ZsbGBY=rGvJ5oCZm&d6v<>(p|d%C z&(Skhx+Ls(zzUv>#YmyV+Iaa=E=kYs(Zl_HH}SZLDKee=0j7PQ8~X3o0A07kzJGRh#&XdZw|F;Be+aBNJScR{9_)0`A)Ls zq+t0$#mC_yVbdl8X>bRM+ES)sZ2y{SQ)A9Rm2m@}5^&%fczc%i`CFHdp8OBwb5z?# zKs|9!IYy6>Vfb6?^NnCE<%^&(beZ=j|9i`p^g;Cq})>g*0af$8I39Z3r&`3lGn_;B)5(`a;yL}ZEVQg15$av|Qz z5lB4a&gnqjOgc*G;Zh?xr{h8EQFX`bV|1rzeL|OJZT@)_n}EG3imWn-7Rk=%WZcQ_ zHrkY`rk0q}ai*I2E!O9DY4P`yg@HuF)9NO-qpbA_K?{C^&c=@~2d^mt3?YzBB z7*Z}WPJoz00$S#>*8Sc2xy)6l9(x59ZFjy{B5cY^YgbQ~?e*evtH;+JW<9JN?hRq$ zTFlut1l*d5)l+!-@;y;s97)oJd;S(wSSZ|4R4uO(`UPm<)!9R^$LgPaFoVd+riB^`ky@eiI)QkyPRxp_}jz4(Y zXZ+#wjs5!y*w(7#2Op0O(es6Dh7S;^;!Oz)2XVMNm0}`LX&TJ1Pi40O0{-aX)R*E) zhqabJS>vwmvG?EmPufz$(6n#V_ch{e=(Tb zEw8Muj?U*c0JTi=@mic|jv6x!Wg_$*vzO30CZJC}vX zR$sh%OXd_Wy9Mw$`KVWQmhh(Gey}&+Eu0J(bCknkexE0&ys&J#uf;}16G+SpQJP`H z%ys$Srkk}moql@geZQ4=wWxMHn&(69@E89-pRr-%->KTYZ9OG=yoc+B)BD;h3KEEH zr|SehT%D5na5aR0^Z&)m))h(*ABrcGi9?Jikc;jEf#3$abZvW6$${Fuv5}T{$GXky zv;L3`1(6VGRdn)Hz+ZG8r{OPYKg#krZap$6Uw)t9u*cwzo-}=ZNU}Z9=(4@DLqIO< zJ>&w>H#VDGM8K&TFW~ahQcDvU2$gYn3)VM20SnbxT`u-N6_wb-BFi#5(BgYYBb%nh zW;amr!Bf8lB*vrDb20VIo2H`d`?<+*kV#mNJZ7lzzeXWXAYTaN#FiadE2 zd<%sOK^y!2=<^{c(np+QRC*#KDMUOw`^mS9Eduj#dyKEEZFpbLa)WF6+{yIP6Ps3G zDUI{Odl*#M2O{D3fkT_u@q59*VCPALyH1>lH&2UbP0J~Tv*lnaCje;s*iEj?6i_Bj z$h=$|`U|?E-skJ(7@(1s>gjQ*%p}G}|H%9U0pKfk#8AN3!;Re06?XJg{(xIjDv?8%x2Dk`L?Sgy*;`C4uR%0fdP3V?^UIbCmc z79CvYwv^<3o0|H|nB!uks^st2+*>VFrr%;?1Le}^I#^Q59E<_7gRqA!EG+18l~p)T zb;j}8aNoP-1BC*dCThAK3IRLnO9h2DdddHZax`)Z*dJgAbwnpi1eqY@vj)g1D4M{0 zz9ZtX?tWrqQc`ywqTv;IXrO@!tP!BDB~eMNIxAWLp8r2%HYry4jj4sjMRV?Z3IG&8 zQQ)z`Xl3CEwl+9vCx_umTZ1|xhY;pN#_He}w)@>W7XxTrihAKZyBsVSx z*s+&A{iN|+?GoeF;Nsokm<0WHv_Q=1!m72H$P-2F9gUdW-P>clKVM*TKC2{&8kn}V zj(2tzTf{^nkx0f68iD-Y63O!uCO5Z;4wRzV>5&wu&fB!J90pn6Cnj2gPgnbFKXR$t zzF}WJZYFX8gou_lkdl^7MUh^wSkO@WF0Zp+&VHIb#GrfYLEgZaoc|8Kbo~;UcQ+*t z>v4t1mfv8|{y3oXSZFaiF4EH9n78D{+u@0w4;rRM3eU}2d@u7Sbb}lo^4K@M5v2(% zB+~RVwW>~?>_AlXK^@-W>sRL})y`KM$yUZ-vjAvBhK_?@bf3o1Zgq&U)m z?k`7_n$OqLiBvO0cAN#BVZpYit5oMypFum$Pg4F=sP@-04V`f5iiFCxXd&928yv^2 zJt)eMao6ZX5SKPK9R8Pse-f>W-RH$sOql$$7P(Fh)+nE=0-0t~iks?3ll&209JPzP zA%O-ot_jL=XqN--`b;CFjl^gU|$K@(L%)DdEARqXYf6Q%TnCaT~=I-u)}0VUXn7 zl=Jr=+UCJvOk4hWI412`*#6XKSD49j-6!wGiOLL2#l;I}?4Ci)RVL(abDaJHS&cn*W7St4Wms!ZoSYjqwn{ZxfRh5qgW};{hRMi)U@4@}AoW zZQV(qIhY;hMae6J24X1{SMgF&hGtp#C9(N}oIeu6EbA0Drtra7_mRE9tj*rlcEpc} zh(84(d5S{Ic6ZG3Shf2Ny`0)n$%hu4y7zD0AjM3$NY14ZGw=L5r8qb#J!fL)Ycdmg zK9r(7sDqY7-|b3~29BS~8CNcY0@eCh^xzQ%ll}aO;!&O-TR72tl0Hf;#AcI2aj$?LBKZe%2dv~ z&};9%JOzD?@p|@nOw)QlX0?cyT`1+Hs$bVzF_Zay7OA-&B&n#t23&IuEaCcDV^#C4 zkSn4U8$pl7Ml_`I;gveKp#set%g{0b&*Z~Z6h00-9g0>Gvth+B3R;JA1)R3krnjb_ zo2b;&2_?O6h;klP*`d`myMIb09B%4l{K?5m{sAfvZ9V&S(6M|15TF?#kPff{K&sB| z=vOVE7=oN^w^hHHyNIaYrvZol3$tl~3=g@vzd<*u0~sWI_2erEfG5DDtn$>4`$cT>5y6e|#Zf^LQp9%bQFRxG+F@ghI5AZ^{dU|3A&l4bI08cL(Fjb@1)sh?h zkKI6^CZ|bVJ8&o1_Wfw_%o4hHOE>DeP4Ced!|0ubaW)~Ug)y4zV1A{b+*Q5d#sISr z{?Izcz-*nluswW9vHex4*0Yy2-(BnAuR)EuF9@MqHY?B8)Aln> zE5%%OC!`XcLCAgf!75fg+CVjYy5SWZ-JT~?{JgEBivDfJ1&#DAc6Ouh-ON~4NiYKo zO*u@MJn``Lj$bY!C^Vv@T^yPhFdJ?|Bh=L`ACE;U!XN$mvmUE}DnDueJ}Ff8RgoRl zJyEe9bkp$|rDh8)*uS31z24{S! zheiM*|MC@WQ;W3R&aR52<2r!~_mtSIb>Yr-x04F?LH$AjlB-Nm(v-R6C8XuqF<>_v z7Y7Uy=^s`wo{fmJER2mD6xUgtM$6jhRiO4$AA%6EHDZI?%TA_bjOfV?0R1g?POy5E zM-T*zaGdH_H44f=be!KAqudw0ygk*onwXrvpD9002(|9TO4VKf&Z?@-)~iY@HZz|S z(VTqectbkbs}w!KcERK2_Wl_J9#Vao>_lV%f@Qz>{CGmW*tD~s?*M5PNQXj0f4rDg(4j>CS8F3jh1{0@mHqXZ8b27KV<$O_k9X4r<%J)}zBiU(K7xO| zx+CyhR%@@OfDMPxub%{FNznY$(AF2JnE7pzu^-(!urJEQ9=7!wX&*O3omh|TAJD8m zpLVs1aUJ++F)k&bK@@ES)&= z1|KXd^tSM?r_~}V=af5(pfOyR930WZ2Ekbc5;e-AT22!>;`wy z;^_ZQTl19UvWabqKi~i~-GbEEE)q)-SIbParkwS4_VT@#;_wmPzBmPVqMH}!lE!O&!u>q!yO>HsR zkBS3hqILdFAw%aC{c3R>9M{3#%X5~QOn~ZpYgcd0*OKA3*k?*ymw0?bO9vr3IYw3R z#`~FCu7mbprbO_z4u8Zi=@Hj+(~!_f_7I|`8XI4L?N!HG zADodN3RnG+z6p-c(SlCndLt5GJ;&O3Pr4EVz|Dyi6i+{`H75DyB!ORfJQGUA8daaQ zMpAN_{LWu=ATF&Q4;xBB82{e&9MI3>Ko-w(_e2v^z->Nv{KuQ9jN8HxJDyKV2SMs-e{J`oV3!# z;TS$V?_ti_QJ=AAHB8y)WL?Hp~?GLF@F zim9u!5Uk(8%4a=ZCI+BEbtgMGrDR9y#r544zDfAG1<3adDJ#2mw1@4kgCJ)&H`_j5 zpSPW9pbrmMADy54r10uhrH6uDvr!4K zMPE(t>;GPuEgXi#_sq3UlcnxuHv}!w^q~Br_Xc3$0h(vY1g)Kse- zcm4r^Tiv=x|b>@Y?3DXBp5?eq$y?|d3H>x)WQj8 zP?-NP!%=@uV!xz|3BPjo@_Ae;r7p}ke8xPo;hKdy1Dm%ZhCv9)?OVS?B{svLWVZSV zmFXhB3%kP^bMy1}y%{mTS`l`xPl|`A`0Q#fidx9s0_M8sr93^UBu>xMFL+awrtOF@ zNO@gL@7q7!*~4Yo4cyfYL9QKtT@_}fZ#T;P#!l;9JxKSxk>29CuT;|=fcP?svcGfL zAgo(jFD;YE!Hmk{xJ(c}mu%dxe072f!etw<&i0QDLT+A(l~Yvc9>Ohm*}|YD^~Ow8 z!tS-I3{!!h*u4q48$#|Q+uf6%7)jmg(UEISaT8N&=8K0jD((-5-6)z-#IWpO1Hlf_rue8E%-ZVPM z|B68p=ZwR$PY(z0PCFUPmzNwb(lvGt>kGCk-0x)8_^GJrcqUb9dz}>+4sXwQaa~xR zuIB<{l!Bd#y!MQp^3c*;^rk|&75vGa8{*<+Af3$+kvEcmc1cLcJ5vQ(^-4q(`uEq$ zotM9o0OmTc)9=nCpQ=2_egltoX9hDamlMR8vGE~mu67=oXs7tz3dqo=A+Uf5AD^T*L>a4{!=)WgOcD<} z+nBYDRFyX?OX|ljPC{oaZZY!2$lkQUEq#@J^tiRu6D2A)#XntGm$>ctgL!cG3;_8~ zgmH=h$VVo5(q$#VGBO0(Ov3pqbwo7$j$IV0^)IqQr?&RDF_wd_lE=HoJ2>~TdI$F6 zVk+Coswey3>TR+wTuh z+uMDUg^BjBJg1QP&gD5LMIUD;u?=}n!JUaCwYfu+f^#Z&yUycw%kD7vAB3VZ0gB$E zU%+ipcsO5Q#Y>0zCe=w-;}xmcgu=4<&GCECC*^V2PNtxg299mAE;V%oV7rrwpW zKo7xeD2QkQJJE4Jr0!q`?tt-{f!&WUfTk}Gls|4d_RO87akTf8P6BE+-Z!()UcGun z5TXO*wJJAFNLRc-o(cb8^;`fgnE8+uigbfbK)>qE1LjD~+;ck%N+?ii=TDx4ArXO+ zZE0x)VYRED?!PVm_%Wu0+=KzT#sehfF*gvk5Zn&SNVSy#G4Yiv`liHJ$9+3Nq4Gp1 zOec@SyF^2D98eW6h$fK=RifCHqKxIz<#e5YoAj-#QA!8gGMlc0JbL`N*m9=c)385m-S=j4Ci&-;G6*Zbl9@H}fV zE*A?O;F`Jix%WPf-@$V3?-ovx*m*(N8(jOB5skDLGOaT#!mNJ8h>l(z18upzp^v1O zr)6edxJ;?3iFH<{WM$PF{smBV)7nU|I4eh;kMxd@vYQuY+f;vaJhj=D99rrIsES zmq7OU8%ez4NA<{jtN+?gzcrhv#&*UsDszr{{!_u!Yf0AYTFO-i8j@|%5+PmkX0YrtOtbb02vy6vvBabMZbQZB1fie^N~K z;ilcZ1c}3mIK#*NYx|bQdmKEPp<7UQOu}USw}eu*@O7BfZ@D*V_G#o)WU<&q@^|)G z<0AejiJL5EnH{w{U3N+$kJ6fih1+Su3R1a_4aC534k)A?9@6)K0G)P5OULH2{&_=c z4x?krZfk6TA)g%!ah25PLseml=0B1$76j?d$kRXSvHfQWzlAuKTE&)9*Od*?L0KNZ z9rrsJEb;Nam3O{KN-Nyuw=EdB0_uJclhWL3#XSyG#Xu3(5?aT?P*dVGmBQA4z}RBB zSMcAp?E>|H-Sx)e&KNQ*ff)6-{SzNQ1Q&VEzPb769HrJA>uP#fvW#YnWP(tG^?ks& zz2NnY6)0mD#yhG9^~Pxb(2=qDcN81N$?_6*M9XE5o37Va!3$sh=ER!sdbcwYnkFnF ztP6cw@-n%TWu_)uh-GpPK4)P9o)AWk#rm)V$^zYgeHz`7b1J?KiF0%0aDcc-cTutL zp79>IS#Xdq-g_f}%n$IoS84$>fP)08tcY}07h{B_7%v5udS=o@F;0AKe4_WZMY9uU)32Bpl$V^Z0adYURz~k zgR;l(z4s(XUVOCKix?Px!Ca}(c^&gxM+dK9Wy&w#*=b;3LF5;&m1ZOEnN1fH?$6CK z*f<}IB_~RRnf9(OF+q|AtX;+K^%h)~EEEJKxvKZrpC2;e`y^b@V*UL7=g&Lg%XN>& zCNGWhbG5sQR_ACk1`uidPTPjAHbbg9XRHNU)(j%87iY=+4jqu|Oz7dierT+-WlUsv zxSW|fh9;-&;9M0W+QY|{6R=|>a-;p$t9^dS?P_pfd%k@W3pBfg8Pj<~n z3mq+w3xWqIwWV&ORyW#ZafOACV{Xg-_)|lQHIbvyGmZo2?z0jwiqV$H)4H=(Dr@z! zV>HrP2+(_jtr$(2z&oUh7GBxy3?G_q?XAf{^1HZ`LO~m!T^zZj(6tcO=NzcNlF3ic zTHYcRL+d4Bdk!XT9Sub#3kyPS>)~4$9#AY$+<1L%D#xqqnxI~rqS9XVP>GXQm!7Zm z3j`FtM`z6oN3ZT#GVIf%pM9J4nGzaQGX++b0sMG1r6jf_YGtt-|VOK>7H$EPHu_^deDb zVBOL;Z*|O);71b{uBOgCKW9v(5HJ#`t*w1$KK2?7sLeNz_F)f+GZYI;+7qERaXc0_ z=A;R!e`$nz9SCxq6qfT9R`L~es+_$Pno}kn@icGoEfu{h!%lJV5Le7Cc6uc{jr`_# z?#Ws74=Q?PPCj(&^iT+Uc3jq5L%FA>_vbWpO-)P)$SpNegMx5uY;5jcl3L&E>veTU zp`GI9*Ns+(&(#vD_dIU*9{pt?^P9C{$;_OsR@=>*raDMDzf?yi_kL|N#MpN z7#v*pPhEQX_Tm*;h`??9B?EJ!YvbzW&0<}|2BRsUtM1G+^SH`GsG|GIqL*Qgy55Th z)#vbW7LOtq=kE3eMcw#8Iw=_m@KHQfJX2~UmSLDU)P)6ial0)MF?u!EV@!VUU_+PZ86>B zlHtixS2|$X|5Jz>pU5DV;Rl)Yz%z2$ZALatt-M*Srx2gKEQj^qL+G9mJF(Kz61kzBk(13ib8rPEGEf+qc^=LxJ33!`Tm*>vata3K7WMuj-ZfQxT210de`q-XrYTDkOm>J^X zuEi=SOGk*+MD5*eu#i~W*3oWtlV-BtGIaT4xCS{wr!7o;v3Rav3?9od%(HF%Y^>udB@1ciX zot%_NyG@q|X3xl4O-tmAp;tAtM=)|hk3+Kv#R~LogDqKdu$4i)t=_;tw7Mw5K5@u0 zBJ7t9|I3EtI&n4G^X-iBIvq>mkh$C=i4+#_TNyKZ?LV}|zEfdD(crdWkWcH%f*XiP5eMZUgWFF!CI_D|Qh=um~N_zE)xk{Zs_gzr|vhYQd;VU%8 z7}l?wXQ@Wu#Rau}$J%naNOVZ8BGK@?S}tHn$3XAG4f4cgCp~3UU9@cR_o9B`#1$8q z(-lOCrl%SAS3B*DVU%j4ax!15yp2tm(*v5A&?55j8ZFCy7xu&ed6#*w%u5Ff)vCP; z(;FZ7iQQVU{dLi8H=S;SQeHx+5EqTVIjdKD9wNYOf$QpMQ49nzV@uj?9#3S)XFX5{ zWM=qSlebEI3gu*R^dY!WhvtYEFeU%KfLN09rCCr$^LnHzZwM$SBJw|fS3Mk%rr5<_!(;{5&2 zU%##sr1&7c?;ff}+9t_2LBmT%T_^Z3ZQbShwUKy8G^Iwq@~i?g1s6la`o{SZ*xYPU zf}ic{&80dO*@^qu7*n@7)Ft_-S@~a$sXX-bFmIa>q%K;+%`j)cSd8)ak747Hue?c(Quo3g&vzfFWO3Y!x@NYsFKcosYHOkjxb7>{ z`&}~$Wu!ECJu(~wE(?a;$yb@Gj%(X6N(zs#srZe7=%EcM89Ermk7js-qG<}SdN^NTgz3`Tq)1Jz-9;4(0pX&hy=vLBwZf`g(CIH^AV+lwG zC{ zr6c?i!3713K>Aj4Zpoc^0rG}wVZ{x+PTNmLM@P{rEvFCiVde|KPm~2Jn5EB;K+%XnMXxFv&l_k}45!mv%esgsP)>VW* z%P^nQ1+8}UUzBaN+T1(-8pVQrxj5mMn7xSBx`>;@$dw^ywjJ%!sb0R0e}h`$QOHwn zJnrgG5}|Hi{)e$Wk%xf>!k4O^p8&xB9Z8D{4dkJ3ZI7-6Q+g1F3Bq4+n0R)7$M8Qo zK3)Mr^>%lKM$2hkSUuS8{F^F*YE)Zcl9H0194-NEVOg*uSWC?|d895tnoi+iYMw1d zsKr8P<-^FlU$R=UD~H5w7dYX7%*f&`;JRmNEmLW9W}#YAVu}umF<*w{FCWW_>N*ACR@0A*(9Hy+bAHM&KHMqTmqI()Kq-A9Ogv`Ko z19h1&eQr>qeGJk`!1=rh#8Q8pm@RUvM};RqzV9`DMI+445=!dVZb((?M;K`5`cRG(cL-;J2XWZKn zgR$!cEL-qBp;(l5r< zx)luB5!aV)WSF&Ow^n#LPnnA@BwcYTxnFx-#wuM=M*HR@;xycr!H0vXeicB9TyTEK+oU`Dt?ESyV<=n!dHR@gepN z3RET3&3Siv4}Jf^+CqoJzlc)HvZ|M|VOz0J=1=K@efbKTmf%_oX3NU+810`0>c3|M zt52ldRFa%UIA8dh6SHWUMjGH_e92&aWdpUv>-|fIkeYA0e>>&%AwA7t2^z2@943Kr zQ0|>V+Voed?uvh_gt2+4X6ec1Fe)G-;wgY&M*sPPMImAz7Z+E7_L#)&?Cj7+`3{uWD3 z);)2I!P05+s-{(ubk==s?y*K)%we{FB36iIXG~K#lXhKDLpN@kSb-fJJ237BstN0~ zi>)R=b`~qYE0;#|*^}LHv!Y@|=8V<_(1RAw{k@B`0+>o}82BiA3M)19;j$g44~x}H!KacOwYHxy6dg~eBwj62A(NrJ94?ZPGy6f;0QDlL zONP5WrTZ`1#tim*M(=!|^KbqAG4=rr{E&z>V#F+2ys?g?SPOhZQYXY~5&7EB>4<(t zOIAjcfSRe{ec8WXig~3T%4z&M%>ryl5TZJ6lJw$b1xePu6tV@9=%61)#LQ=^o>j%1 zcuoawd(P+o)jfjRYb?FRZd<%@SqKT5n)gI}97?V_#hR)#50Xl*i6-Mp;~4kR68jtw zaJXrkrl5|73QgIV$VzDhJQ$0Rjl45c#94Eso5jLR#kyC+R?U{@-{OOkVPS~B_qG36 z=4X!i`2{{N{y;C3i>A>dJiH<&@1aG#VIN*_sa(>H$KMIgPf!RD^~VT>PpOmnokI!T zi+T(A!`ky>yg+=s;Tn3xSo!vJ5tqR~@AY*e_}c1V^rFa6@ZI?!kJVdD)PYXQ_eah_ z-J@u!-chsuCR!0&<`8ma@AbE)RPukZTvqIq9|NQ>mk+hU-U#`*V@1(g89D#VG>)t6 zex#!0Usg>?^m^xy!wg)UpzB;+%_tSvs{cdWWBW#V|358eU2W}1$?X$vYwf}Kae5GA zfD1wmOm`yq&~gDzb%!H&>Q1PCjlzFw`6gk|1e+z~_W&xE z9G)M#R?5A8iqsk&Ei+QPJfRG(iN#k?=vHqq;nUCiwNx+LDTx)^m@iVY>%OTdH6*ak zdsP$TUu?mZlA^o5wM9S#iAqXh^7Oo#spwXv?ie2r>dW6g)+N7_2LiM)zG;WeVU>+{ zI^NH+4t@uw_u<8Hh4c5KurY;=C0^E1c?`jZQw0WtSOxF5`W*QDNbJ_+HxU8NGdRyZ zXNKyt$Af_-M}g`M-upvgj7JY2mKWPj_8Fh-O;Q78;#0!axQq7K?bA*WE((^8w$t3; zqzeY7v_e9@EIJ-fpOJ{_db6~!CYy%P@^;+dMI}2AoNUhozZYR0tANjx^F*NNansdp z^|$^hp>g8kcMWS<%5OjQz%;~%*Eo;Vcz3fMB=W{h1Z#)tSQIYrYaAcub?7>tnI&rs z0WL>mm1T@0Vvx{$v>X=`^I{6_MsD*ye%KbMg(5KVy~xewOp-RqjDZ-bL%)*J+D}V zZjUq?8nVDw{8QnZi6tXB@~mRex{xM?qt`#M&2fG7|j64B9 zUP*U~gPGV$?&O9rK0fSyDoYJU+BES~hzm}*X^nPuk}5${KUZ6R{#{qRU9ytCf_q`3 zBPeMIue}h1{$@7tCZnPp-LCIa zQq4K~&h`*nj5=myd%9U(O8M`&{5bk=B?}(eE>Gv(V zvXtw3)0i43a!B9U*jU6fF`O*a$;cW@ZCF!U`pqL};hwr*29?lewbaJ(`h>zB?-N-t z5VZ9y%bhosm!WiCSc#HP3Ro-N>f^y4W}RTu4>VqCLT(q$^Ho!uaO?@W$23U}>sCM3 zv&E-su&iAu6R}s~6_7KDj49X(!8Bz>G0kkv;g2y~>c|hVY{J0)uZjDh+}I6t;lui< zer{81*Kc9oSCRNW>fW>LKv2h7lsHS>P*IJFv-v(SANO7rq}blp_ng7jMt7v&P`VjP ziJ%y-LB47htM(1rzF#adgC~JxW+=>-%Is&;Yb2~&*J34$z&r}Ow#jyqL0ydxX%t^5 z;IKjPnC|q^%Z{3>D`zfbn40#wk57j-_dmy#9Fhig9ytq=ZMSXLCr;ZR%)f2EgkyN0-*7nbOVjpLTMLZk z9P0aTsNAXR5zl>kcPci9ZKrHCJ1%8|0NK8r`)Q!O;BbvdvxZIm>guaSR1bU}6*GD^ zS~LC0e|@9yda_^|&0DXzXuh$9HL-i1j|2UDeLSAic69C~AK*UQ9oTOVG=i*FjY>Q2 zpyxx)R(wV_DW5+5HcAnZ)&)Qh{?xi}Nv?OpUKafBdBN{swHld_FmQdg;HOzs#$A7U zd|aTYt0J^$3BSpzFf6gSP@*h@Ixd`D`8yWk5=qJ4S~G(KRZvOI1A*r^)5RcvSC^X7 z>jx&nR0rv;t}X^3Q9BNY*Kox2z@_=6@wi+v@*M#I^WNgYP@oWic3>iWO#WS^vL;To zi}lyqNA8C%XmkflZM0d2E%qU(hgME}Uth{Y5}!r}L_F3)3BhmXS( z9vwMsDpIoEfJr{Ga}vkmJRz`Qg5t-Hp0PZjDjM(mR1v?{jc0!~lir_w3WpbuTqh;W z9rQPQACyBHLOd{={`It`SYIHMQ6;3NpnwvRk@bN*JU;u?`(Q^2>XE0XC&){}1b=-FIa?~5$*ud7$tV(my8)d!daVUh1jm=OQ+*eG#e6f|9159urMJg2N?C(<1 z6SZtu|1(V27`lr1&7~Hl=dk3j*_)2z3kwf}jwIF6wvLd9f!ixv z2M(MPKHK$XUZgdz7y>Wd?SZ;xlnLFIz2~ra%xz_C)QlCZax0YHao6r%NWz2V&2%~% zzA!Ixxr#m1!ur;>UFGe~nb=dpNVltFf3w+gObFxx{3zid@Yuhy(lX4h(hJ1`xXrg9 zyz8}WqQvsrnyi!*888uSHk}Etu8KqLjKOh&+jWsIUbm?pTn15aM(^o)V={E*tLKvp zm{oqb@xNmjFgFJc}ds6zwBdJ4fmfI0xz?>Iv9mSY!Yq0VguPm* z$VuhEe(XXZqAo65tUzI`B!v1-gP5AL=6CB-JubZ@790I>JUlD|*E&EUR&s9iG)emi z>vF!*aww7Dl&2S^wmiOv#km;sV7Y$a{uoV-9dcOytqh-@%_UtsRff}cdJwsHE-@rN z*d5vELs(?%lQ@!6lW~lf`9>(FV?mm)X-{Z?uA8gvCI{5E_F<7fTm|0rY;1V0uK4vX z`<)BpRONVEx=_pqZX9P7^yjp_@n5{Ih9tz$+g^uPD@bI?oC_NR|`VW$WO3dhj9XUg?ZS z<>ax~ZC?yk55}vs33uX@Ds{dq{gPZhE zl9>wYteCCB{e!KYzWE&fqy2hbWNI%h&C<6ymCuML_%<-2flOg!SS_q@rT`dg*k&;$ zrt~bd?|#d;*ZbrIoug$-9B+b!OdUS;yrFBUy)PevQ$*(WuG(Y77%{yu)9r+_zI>rQ z=7^iCf<4CtUr+gG@YqVN4r|-F-m|2CX_6mkX$Vw=Yzt(!yuuc^e!TFp-Mp=e40>b^ zCbcK9ML*L+%8=AB)2iXa$6$n76P!2z0)#%xe$FT@MZ?Eu1}9+Ckv|0UZfml5y?2C= z6ew2tSq~||jrOuKb&ZRO6=dVq8gJtUQv>LfwCSeGLcS(a#p#ABIl<9r3GZVH=-8oS zj;^25@SFH+mTx|bJ;KMyttu1vSrJOF7L8LO>=}2b?`R(~`nvgSbR^uk|QHq-|Pp8U~tA#)DA!uqQ@wt7^@3hw!C2;ezre=+7O)WOzKN8QP ztK41`zKT$Z?QA)&^_Jo1`F7vl8vP|L>}3P=hL znoHMJsO#Yt3X}Y|aP03n74dFl2;>A*ob3tiyApG^a6bbJcL7@=RA@3SjR19(rZ}Q2 zU4~>f@-xqA%uK;cJSxFY@86>#HU|qX@4@QEjO+|yVfnS0bLJOy_;<|A zW7H2yF3KOJ?dd`}0Mhw#dkWgDTLuec1KEmRFRMm&XB`1A)4)IGRyKF%NxpcZYK)&; zcHE?jw&Eb0B)t}9h_4Rz&V8z{sZS!O>Y0+aLy7;7!2Z{tF_zCA*;ZV`M7}e^pr>8 z_hmLqY`Ak>l7d8VSJ`0k9X$4bAiSQ(M)>jnk6-abl=oYHHpY`xO<^D=O2GT@KmB)4 zGDN?Ar2HSA@9w*yc>n(oqV@kQt|+EHIE-*nN;ah_=Ar%Be`_JN!*;$EVZ=ol_#`9L ze3Gy54!oKZMmOp7Q1mzd=19u;9XQx+t0Dlc4P2N?E&m2>@#E#4DD+Cg@+vkv9o=;xixq>qW*qFxvlL zFALj{T$#66K1RexONAGsQ6B;W_+d}TPkN9x zWSPtjU-u3bKY01_Sg;NfpQ~)~;~x3Dv_lg9%6$z}MBjjvF$_th9V{Sjp?MGJ#(8+~ z7a^xxnl&wGAbaZl*Aw*B)nUaGeVKYkUbiF>+%K9 zb!v@In(&4#uP_eE2xS zbogf89h&Usf#MZpHQg(zSEibaRMTK98}$@{QNnKJ1+RR-a~H~OI`0k;xa{eQJ6KTo z`d++=X1RaqKawY=hlL~$3JQ`=9)MN39)fgc9cMoLc?3Umf^(rG8`Ma=-VH^o=#?_q^$i`y-*jtS!fQ7zcl-REgnfr%+d+}r8qakxCge={VPR|WO@kQu|*U8SZY*YF-A6|etN&DzzpLpT38 z1b@V7{jZsrmf^%kxQmkzJ#piA7LIhqG66(`=I$wTGliT2#z@8Y6jv;h>B|{PogpxH zI1!}{lDFWC%cT3;^VHSImZqlaZKf%PSJA@3EI+MJip!Q+e!{vZG4^BZdkeBoxRZ{i z{`aotWu|r1WNln?8@dN}D-QPLMxG?ENPX8uZxz!)kS^7iDnjQq0PgW<(%Uv;TqTpZ z?u(W3au(Yt_ed+{K91RnX`$1VTKQ&@fKReL{mW@gS2d1>_LF(&+tl}Ameh$z3TW>I z3zP89zg{ObLr3K}^rC`zTEa1kgrEup|DVjwFeNJO0flg_!d7u~+(s#qncBEV*4STE z#MJbqU31>~NU{@;JDG7wT~-~h#j}MxI#$thUF>X7oN;&+`Ii_tMan58Swq6~cUwyx z#+|(l@aZBi^7}82!(C2nHfB(`Lp?b9-Mv=c^HHt6=bm7>xZhqS$jzQ~FxXVmkTRDv zozT9+G!rf(lMvdr`c%|w^6}2{u#X>ihrHIQq)vcFr)L#Ij80DZTLx|dg1w=M4+g<7 z`)d#FV^V$-YpL~5GE`fN*ldaa#s_^DZq;sXhVaQ(FWhD4Rbt1h@`zi6X46%>@cu*; zZRN;50>e5wF3GT|LEq=;RP!9X!Qc0<@*DBfZai<3%jDVNj|Y}gI+`o$I!w2F7#Uu6 zsL7_P3JbEcC%tE#=C6=X^N!K!M`pr@Rvp!}yR4gjKwKRV{PD!RK0bT`EsFju>-NLJ zgj2V~!q9N!N(#8J)7RTMkK_8f_)upyST!F{)R&p|qVSTJzH%dwYSO&Vy~3kTC;|gd&)v;;#;PCTFR>-L zFq2Kq&2W?>;?B0@kd#8wo(@rv2#@H^^wM^N#e(Nl7t$?_`20Nb!wJ-Nu z`|(4JcF)mWy02}Q4v=>k+wL{wkP0CnUqN;kPC!3Ll4?-Dqg8 zfaR}c!^2I_%a29Dl=|BfXP*Xp>Q>pguaPFc!_IwD($WS8wjy@xJ>E{8{AAo_1A{d( zU$;jR88~m##XK&&cCsk#9HguI?k0>p-L@b&gve^rmuL|AWLnbi#{%;C`ZE1=875A=@vyKR<*fg!i@ z<13G8DVDC3a=DyoVn;UQGh!ooHk0**$J-u`$pehE%qdt$+bu1yj+aB|{WpM^7!6GCoM!D4Q^I8oM&D8?#W39nmZd% z)JZv!pj6M0^h*I&-?j`2o9%biV|-tqy@lBPrH&V`hM#y=2eKmFBa4*S^Q<=*Q8!9b z-*H%N;51Dm)y4CMnB9t#N&O7f4eXVPdL-9N(9kZPiOUq%NI56(b;$|ge@Q6BIE>}* z>Hgsud`hjaDF@g3dqGZW)u^x98lGBQHs9RH=6zT4_9fPZZ|UzErfkkE72XcI3@d?G zPKDtEGp=J$V`EhbDGVW(sDw^@xo-6kXMDMbhS9xG2+U zR(TnRP;d}cAR7ftIVfF&ra}4ncDmIsvez^9c9ybaML#0p(6;aOL`BC-Sc0o)eR4Rw&AM_lV0?w0l&; zRdd$^4j{Z^HL%rl8=b~epQh1{zMtk4f~ox(rUI*5ko~|daJPLzr1xcmmqG>7F$*c; zOB(8T9ML3>6*VrrViF3r4oc+y#8_HB^I$0Z#`8RhmPQ`b8r=r?U|rO!n1eiR40t(%<2)ZD z((q@1IfvYzIAcCydo{*hhIgfhR(PnP%_Cq$B3XQ!CUr3#d)QKe?2XS9HL+n@Iv3&A zk+iB0wN}u$x-m3uoG)+*ePOINd6$V?-;$K9_cpS3;Fh`J3v=CsvMz^ex2~#J zric3cVBx_wv?$sL;V^b{>1_GRpLJ%aBItw;Pp@a~$XBV+PMYw5bUsaPb0gO=dk)wJ zeNdK`x}eYHyGCtf!jIgwDd+qBDEw9W3z}od{aM$`QI$pTqV$e|oeohs`mTs5l>x0t zit+TVx|wG&#S2>dh(uYF8}*iwc@Lm9wwm+$LHR(wY!yXp_RM0*xwOJi#Oq~zJPuEc z2P-#Q@=S*luxGD^*`{_&TP}GGEG07 zS&OSG`=r8a*?_^M(-50maZHpjMOrq!v2P>4_vmfBjK?v#;+VDZ7gZZ{Fq7C=ue;ws zzB|$3(h@OdnN&~WVf@u38__2n238RUUaWMROnUOS)O@oVcPHoRB%f}itmpBCN9^t+ zje~$>Ui)8>wnE)7TknstEHQq>SWPKBOKu4`Tg=^ciHYRq=5GO`;2yB{_BI@PeHS%Y zs#5}u;ZxM95$hCr+-2MJ>ugQ_7H3zb$Y`UtMo3D5e&P~&Be#}y@SIh$A?Q13D4!_ zF8PqOMsl;oBFaV8cZ8_Y!5L)}>TM<-kq-B`o8FsheLst{sMP2X5 zr0-I?R+wkYy)et{b1YA9ET*#sgz9lW82Fyw@X^gJk&Y>WO&ml&uKOB>rR-m&`?7_=oo`TJT%e>f$`V0 z>}o>PM;oQ~g-XLS*Mn;7E#8sr6@1YoM_}UwEhDw4X&M!9<~ga71ik)%1bLuS8wg($ zpq%^C9S;$5zx82LY98B5!b}a1O%2JJN~Bu}_4uQq*MIS&jVXhLtMbu_rA%08O+*aj zI|lttX6YOMo(ipUpAv4{<-p-D~HT^fN(e zQ6~dn1&|lmt;n)W zF!5`dg{EIN(c_q8OV#^>#Dpqmvw;)D>A7ym+$z<`Z$FHK*T5T8<aT{s=_4W-V7_td4x`ZufS5nxT4@5e<^GG)P{Q2hcbNi%~r}ly0xJ4Uz()osY zgQ4rDD-jc}q_^N+K*3n>Xkn|>ty-mop{o<$THy@MxHhnR`*DsQiymqZ85g*@CySWq zw`1~vw>t2w@*t{$ug3X4%7Y|`VWb;jV!^AT5now0oB6T)+^H^IwJ_3e!ni@CvxN_d zF=dwYP8DpEi5i~P7RkQ!A}1ouV18Mn-pli#@wb$#xL$_7>kmJzf_DsG@<3DeTtd_P za1M*ityql(RPlkCLvhV?9E6-1WY5o%hcj=xZ2wTVZGRuzoLs*&v`|SWDPE03gl70` zC@Z?IK-WX*e&;@}OILOq&l?B?Z&wUJ=4X4MA zF3>8*aJ>EHVe2L_JB7A}ppwNNpP@*~W$I~B`CHGx6G4odlwzk)yZJX`Lw)^Le)4MC z9aesHA8eT1vT028`?k6R`bUm$#&8PVix~0hpE>N_XhK@YYBe@8^m`G>X3zJAa9WZL z+RGlx(LR5Ytp2G%LX!aoQ>$#z$DES+hv`*sOT>ub z=k}4tI@i!kIK1{D5NL+~(HICdLrH2ho9OnEUfJatngMxW z)n-XP`My|uRVNYxq#gI(St{KFeO7MdMut#}z4P0W{G0#oupD;J`af^HY@HuYX}tkim7QJT@hoZo}c{@8X|P;l5qr$*Tlf5wBR zTej7OYA^aC+i>x(v_K752B}h0Yfexh_({%ax|k=Zv2*ju#S|=;u*Ei z6&u)x8_!jm-w|Dj^*qC8X4GL$;GZ^LBcXQ>3PHD#%jW;i!~jH$uX{6PGI8&|Z>4yI z_Vj#eReZv#QT_|a)_#NMcLYZYhuiBj1OVAZ#K&ulCpL6ZhRy%%{koIoH1j9mKGv_% z3RK81Uv6}!rm@5l`&FXFQcQW_tCuK@Px7!1KpJG!9P zHL;$5`pj%6Iy3DZev_^mJ;H)yD(WuSqWTm!SBG-x(_lCReV%ul+x?70&Tgd2WAzPX zRtK~{?9Z|U&<7@n&-htz#E<}61xRFB-_+M>K#nNCv*`v68bl{u}p8Ew@yqq?jNJ!W+6|oDWSqewTgxSc#^O zT1qUAj}=11Qu*K9p#S2r2~^C>^zt8?GA4bDJhjo$LaOO7;P3YqaNe9I60aN-XSs&0 z;PnG_^zKYC@k0IM*Wj6Sb(>EbS0t`HnZ?3lksV)%5!kj9Ke|FRHE)9@Fd!GRXeYG> zxnhn5B^#dF@JE0V+kWZ7jJ1}9o2KFB>e<8;ZD2?kc07#z-Wc7DsF6OOdw`7Q(rPETeROnCBb~(HVqu6xY4oZ?vwPL`ccQi3@PK+kS@NDLq=AL z+5b9ojsN|gg8YDt-oYj&GH9Z|_s7|V)gJ0iBXZ1XdV8K~+>ko~xUZ)P{l7^r-n@B6 zf?dwbd2ItHls95w`|`FJ3cOfJ^TMFgq`v$pOCcf5IFdUGxU+oJkF0Hl=8?IgYAx6VP%$}}ybqK$# zw9&8QX}bJ!=}aCXESNzMiSip^>R3w{ceYsloI|HOCDJr19u0SByuY(5(UK z%!Ykxnjk-Ht@d`SD>!mdW6N#Iswk>`OxbOO0Pl`(&Xq~}wp`4jLSGn&oNR5#!&Phx zJu!EmM#ei!GBt6!Sgdx|QhoS%zX37wuHQKaG-rNBq|@3GPzlWxs`0pg``31kO`x#p zQ#;qK6)O?4;_2m^ZDy;o7fXIA3TfJdNTsSazaff&G_i)vC`Nmsoo=BH2fW700_Z_k zY*y4UEj%CTFUbiU0)I5BJc1NmRG3T3Cs?HTIguI87)7VGme2Hk#M9^g#8#ZeRv;Lo zRrJ@vDZ;IxAa1?}j=N}~q>EEcZ@~StrXf&1yZY6u8A>2g2j`S|t``I8kRqseFc2>t zwi&sGyvQ(k5^1w53p0t?qAsYRY~J)*4jiIRjQU{Vmo*JV7n)nna_)wXCw~xvqCbg^ z`gc5T@9f~?WpB%Q&QlNvK{FVF4&8QiVLQ?lN6QSI zd%tI3aF-f-B#wRF6u~#D#%qZ#ye9Ob1}u4C`0}XC((*t_;ybJE{X-Yt@NN;PF>hOW z)8A8UL#Eb+3)8hUVlA*&N3%}gN;8T_5O@p=0dwz6oe>UNk!F<fP%P*v7dCf|TIEH}h_o!s{;HgKaA!|_s_DF-YG!UTgYjSo##~mosd9+caMVu1^ zc;O%(3T*!V)j4hfc1D~GouQ%OolI<|+M0ZJc9tYWVr+a|qsg5Mn4>s>+bovZbZaR2 z>IyLozVonKcGYS9T@nEjt=XaN`Wey zVA#!GiYH#0H_GpN8!%j>bh0+%MUaj4zgXqo{c}Hr2DPojZ9^NvX zs=pIRT}X6DxpBn@%~b$1fwE>iTMG2|-rg)bJ9&8VKIaen9}Ym}>o z!zoUhMnw#7AP7pht94a2YodXH*d%OD?3(!9r=r^9kZ5+2Kt2~ko>{(_pvJ`o|H+_6 zG~`~5wjD#Xl>6jpW0KC0=?0yKo`=UAg9^k$!=`x$R~-Bjw4J@9r5tBV>#%+nv4`ZK zq9se2-m*Q3b!w~M+YIqg=J)RqBodeC$A#P3Lctx%s3A@;Ri!LNR|!X(q~-PRW9c8Y zmXH?}VUU;tb?;Y$F7`<|YDWX^A_v-3Jr(3vGtVu3Xo;-NaFlIgQn=uR8P@%wVdeWl zzgfVI?L8D7?OC=?W_wdAhts9GO_F`g5dQ7Au4$KMQ>MOlD~8)YLzC^(m-X*XFPqAy zCR}cFYPE^F6`4_ncE9k7=9;Cd|5Kk_QnPi6N=hnO)Z~5UG1?d@8Y;r#L7(RxhJ4ZU z_t)F~eC~X49Trm%(t~>Ov#PA~zzx?I3-dwb#QF|%3!zZk9{F`&d|5-mzy`z7y=U9j zw!a{AYP}yq;{!Vn%(#deX06Og%6EPkdw5vNoYXj;lRB*zFZw+rX`W++K7VaH8)RaVoaTpy= z4M6KdWxF|gr=v@0_!E;vrRzA-lJ!)c>)AHn4$aeRh6Gg+XyrA&(z?)@^n0P`!Y5~_ z$|j_{D18=t#=gFf0k(40eIZZ_23Eki2ECfaWxl#YP_Q6Sd3$SiyNoF-K_~@n^9mP6 z^xAK4YFm5G@Yz{@04OQuFwKIy~vh-lf4=cK9sg1Qf-p&^gq)~spo~2 zg3@XX(HmsXd0(^g;T5beDcWqG&`nYGmWB?vH~c)T;!W(eqI*djDZ)dE);g@!|NAC6 zzjk8xuk*CF>JoEFs|$6BLfkdYrD|tq2PbwAQ@3b^9kgsDBcMp(suxj>s6JnR3{Xzd zr7!d>ea#J8>KhmK1Fl;iK`U1G8t-KbB8Yw-c*Y8(Bo8H6OIkSZ-8u=g_+EE2B@cy? z&f~Hct?h=WnC|^A=H4@`>2=-uMG-roA|QP#3QCpUK>J3FSOE_ulKgd#|C=JcqmnCgG{9( z)M18s#&OXkbPBB?6D*w#i&hQ$ZM%P+DsX~QCno%Z^OLK_W1iv_IOELZFZj)R{I}ls zI~E8mUua`x zod6vhyUl=9WpV{F~rlo6bRi?hpAT4_tGE}z#& zVOQ}A1IhITv9)VuUI+HYynn4sbd}Ki4w)DXcl1N_Wr3#o^clx)o1qvdChlBk#{Lf3 zuMAzfreS|jp~VcvJ6F=v=Xr3uMe-Hh55LrYa7TQUPOO#vjKxJS!XC&dCY;~m;s{?D zsoV~F!!d#&q8=CTZiy1!Z$DScrx{c=v`Z-*s16Lo21A`oVc`CkyL$p|jg4=)FXYHw z6k1VN%znJ!iK56pla*_Wr%TawbKi!uT(+1%WaL+ml+!?760-4622+7M2fYo{^@UcC z*o(P!PPSofop5CK@^z_6{%VC~btW;f!1gE{p2c7(bG>M|zON7Ka>#x~C%TBKk`roc z8l_0&e0TBP#*=&;phdK%S~a)pp2jzHg&&dy%9v1$a%6Q9@Nl-2m7 z*v`*BEa;c~I=Wv!JfYL}ATKXyv|)U?r3O@qH_>@At%#B_7oU-fsr2A-MAmK}@MoTn9Ab@`tjX zDgGcwd?&GJ0p_JMTwMo{s!7RoT1>FBdcMyigk^G@RKMAE@6n`0z%ZN%-5L6nH&#JN zg^|Q&+2JA=+jpc#CWgF0d`(>e(Ob?sqiS7in73aH@9pl*epzf7gR-Z%8<5yas$b&Y zQ>*yg^#rfmY_tsb$+c!chKr~pKfpI1k8De(gg2)qzrk12_J-sSi^6CE@AKOKX3I;%Ju%u0VmVN?k*9ljR*iHs}Cpq}8nHa!#zD zPMKBZ{(f{KPLLIq*J_Xf)3c`xd$KO(7Jgp0E8;BX^#Kg}%F5N%rs%t#I-qPQS2`Yy zfR`vh$=lEVDrLO_#&^ztmv{`wflGh{haF9PcIuDu0>P;a32fMmua zdV1)%lKJ@=;Md>3dC^B?-IOTmV*?kza^(u%MN7Hp*`e{HM~^Pf?~hjr#S7i^BtDLB z{>|dl`vf`G<9#Gko#xtAuc21ZHuCf5W#1IcL(A155QGI(H0{YL=w$lbe?xI1L+Yqo zC?NWX4%KVgC7qm|F)FJcbP8W)Gd~ug4^qu0CLuFAZ*h@d&Qz)9^l0SgwK0%$QxK%{ zI~p<_tg0G4fBrKI!+DyXeZ)b(m9em{1#z*Rd8>6cAu6*dl>aX!n+^GQ2le|o!*-M0C%uA+ znz_Idp^aIyHP=>7+|4U;66IO&t}Y#sU-%4K^pq-uxeRwqUxC^91nx%!Ay}_K^9E{cR)XcUcIPtZb4+6naFM~jiFO#=Y4x5_qqOlO z&Yqa_ja>#ssEKq^K!^a-_rnLzo()F%;zRF=Qb&gM=FDcw*Du~@PH@)i%0azC>Kl%2 zyz|Pfn#aXM>$&c;EwKlsqw3|>QQBqSx3BiJ3V-A+BM7@XDc>Ei)g`~2x1Wy8_nRC0 zLCWwk{G;Kdf7*{-dRL7DH+ETbH7#it3zD}#stupe9u9$1x_OjT&-BRDAh9RL8c%hq zt=s=Gj~5BI3t|5t;$^xHKeJn49G61ql!eOnoPxcAxeo1ni(xaDs{~Rc)UQ>z3Ub5y zWWuNCx}6vdp|d@<_07xGKioJlo(=xF^StGmpT9o3I%=9>_ zE1St{#BlHvlfpyYBkI76Oqe=8|m zi6tk~@pI)j!yr{$H`I=7LuyX4;2n%=8@8;rQFlBDC)yw=_A)Yzi2kbaBmY);eA1?Hnp$CbwYp(ZDZ zv@-6?0~B&2)`bK@k)V`qd%edMRucZ7KvaVR)&DmTl`v;@yNH>u;Y;Am$+!4JZf+}5 z!#Ytyd&TAOfp=`qpW=MjG&T?GT&V5D?(~enl>q=Ka_-b>E9aH#OR!eQHrugq-IIyB z>fe35efOqo%OqyN-DGL;BG)KKJ&gYDI%>s)Ee&?@)X<|W&v#B_D6`!h#YC=sISns4 zT^Y+2004CrEw%1Am?mfvxwLncUW{$L8*JoZ#!H$8?qdhga$@~qE4xGo##^X!IZvIN z5u)C0ri0NVB$NVHfONycD8wA~`IfKQ+=tXI`D_(|O6^x+cJ4uN@e-=gC&CAF)Bv1@ z-}v8vqBtJJjf}K#hwC6MZcR_~9#E&PTQ*C#YOAVdmzOV?)B*x=2WP7b3&uW$YE1oB z<>2h**&JB%@bolrbxC>?#o)No_YlY*qot-H`#xe~Vi#xk@1`bePZGhFx)wtf zt$6d(28mi=5I)i_)3HZ;wY0n%G1zo%sh~A3r=3RX`})3QgZbj#|Gn~#cWb-F9b)0$ zVtKGW(-^ES2Dnd_6M0nb^1c-Vq&3#62H|Q`5Op9x`2Dirp4}qvULdZI&_MTO**3u5 zVT?xX^j<7%$GX{vjDJOjeYBH6&$XnSQURz=^NiRhureqCZZSOXx{ZeTqSZPzCe0x$ zLQnV->IFEz0m*rF!us)qd*PM8I0RZZmwb;qCPv7X@O+MM&$q;#heT9D_u;>PUq-*? zfAzT{#i!248(O31g*vxH#R1_)T>SUpO4JsBk_Q(?LD5H6287&x#e#tzpUN~wh`_I3R#HY*dGzOv5 zZ_&zW$`(S$Zpj~{Z1d$zpOfiI4|6=Qg@3Khg&NM~X&E+F_%uWUrdmh{^J(qWo3DP& zri0bibycp1*6$O#ldibY>b(G7fNZw)AEuJ_lRVgi>BaOCeM>URXj22`PC4fdgAJi8 z6f1X3&;$k6IVl{hAzBYCJ5Ft4GgXQ-6PEUf*%{iKoE8eC@kOZEtG*SgMrvm~ZiE}b zSJ2Lb1yJ=(1HeiYnC_IrC^ATJJZT}QvS4v+EjTBNN{f$oof)v{=EC#f+t9P44RgN( zH_#0OKD6ljogu%C=jxrZ=5KMnxFrPwxkQ0M$_F`CJeG)<=&5;8$@}64oDpheDH5WE+D_n`B zL~MXHLb_&2*+S|0)~8r81;|(J3=_+;Yl<$2^gQp$&gBeO)@pGDBzqUN>z`5orUPGz zi8!U%tV;m%*4FmJg#q81O!ar48|aV=%a&ex-=NGT*i9WJJry&`HZ015GeNsXh~Ryz zzulhg2D)!aNC*m~@88J5m{&qkZ+iMkXji0gQaWTCrHc>N&{YcgNeRfn2E!Nj-2Fhr z_+TzL50ZMspaL2^c?^q!GlAUhS(Y=oZ!-1()75P7gE=a2WG7-kgGPq_d_XX3?^f;* zXA%W&O=5Lj%(`0o@MM%>QYhonDIpIazN$x&VPHg$vWbp1dV^x`(apTdbD6y7_1 z16KC4K*K*3vt604TRYIqSkJ4m>#18E>Bjm2L$cf|c_%PAU-}~R)Im!k`H#J9W|~WY zx;9?=05$EA6C=rZAGq9v_-f*_ngG9hp|O)st{|vxi0R3u)st7AT>=v{rxMEf(UW6h z(T0^eQn!N@9421}`HEI}r2!cM{q)Y!XFziG5HvZH-h2?AS{eH}-!1C6Q|)1mXtryU>%S7eXXn4m{*tbuD7o}b0FVe`5-6v>q4QaG{nX&@Gs$(nsQhF zl|I1H2Ik{XQO*=iItoSKwD2vI?JQEP;#+J&7ecmj7XW6h1naCjyL*>^@tHZTc|QWO zw^^Ml-IUPy%w0S6qc~Y$mUT;d@N&eg^+zi<#T=#)IRDi?-`uaNnST`|Q2H#N@RMqvqRRomSanJaZ%U#?&9N!g8 zjr_K;X(LD-cS3s+j&Cu#L|`C%w5C_5k7mXS zOiVIJC`aCt_2|OfHg4iw#{bBQ-u-uM&{L|4Kki{oTY=^?<7GULxwFJ-_up>;U8U+Y zm!02HFr2Smt9w0y7QR+PJ=jxyh{P@DaMRM#j>LYpw5$l02430%7TL_m(l95PCyb1` zhUBEA-@GgzlnmT;EXr^ZI6684T{(u1l;9zBQE*y+grZ9EJA;72(g;9e)7I8z(X9ye zs||Q3UkFtlupuz`2jtTKACSw(|9>EtJLGGY7^zPMtG%I8NvhmOOvngh|^G#B>O>OH_@3~S6ma~Og!8oKC zAk6=!s`z1gOV;?pn_#9PlibUEy!Q}9FA3AV4jyQ*!h?p8PSXgX?qfkdv5iusm8Lsj z1uf^B!Gi8ZeFMKreT+$0oyO|S$;KcZIck(wvGG!`XZP(QnYIrsC11Y{k?rDDRf^Zn zrKa?tD2&-KcD8AtDgl)%VP?LuGB?a#82$vme%P2NwK5O&un392T*VZcnM&C!Guhm7 zc!n7t4$mL@un2qL8cUljLRC>-zom|Hwd?*Sn<(c$Fie=4PZiAB5Fx-JU0rsUBatO2 zzBBZuDd!5H!Jbg{EpPOA@U4C-c^Uyfr;;7tkuUeHjVoU($c$qF`pl&;W~6Fj9N4+P@$v{2Vz{`YLi* zB4MmYlhb?|I-aMlZU$i2yNwG;9^3IHCKDdK+XL8gx$o`dX^^WQVY^Jc-(Po^p0G{# zbx-K{TfDyJhvt?xVwx$2zWI7VmUb#R=gO{#bK*&4-2pJwcscdj%3_b~CD9K+^J!;` zLHi>UN>UX|Sp7WAW$XM6id<}rAX<>Jn>f5R#KFv1o2pfKidTL31vwhDIfw}l#flbE ztL{j47UeCgkAL*g4u~vWP7KHO=R$E^V@IS0dBvWydTana+M0m~=dkyR+{eT%r_2HD z3fMX0*|LRAW+}bj9Vl5=K`rVPI_Z^v12V{%Q;>Z1dU-_LH2{7^P=q}J7}XWRR+%2+ z=MXu=vqLPzjqRBIR)aSsU-^>W%Uq?tLik3COAN+o_rL}lD>-dwWhwdmr!$`6G;%x* zmz%ZgL}tEZim>+s``NLzjf1WZV2~Q|VSJ;|b#)f-NAi{+snmfgc50vg3w(Oqd;vb~ z6p6}X0Y6S9)2{)Kv_ow_NmyjE$~vhqMaIU+v+$o1Mb{2ny-0)LfC+1jAA!+)iohG^ zg@w|pmIMI{)LNonO!n6+9vn;OtrBgn&2dSDqkD!%Z8^Y zax6yqN$P82V#k44gM^s|6EJvv<5K`Q{LiC@TzDWmS&+_XGghDEN=1ITFXtuK@j-pi zrwj~0$9<9-)qex$T{Pv4Q38tHP%Ld_>`hqgwP?z6-NKGrEc6r)WJ6b6DsK6~)8aq; z76!&IKw1XM6)2E-#>6x$-u-6xmebCVCkaJ4LNFq*_LT3sl_2|jXYxmvuG^1N1Da_G zN$prUav=VP#6-%W2hJEe{#A3C$fxRo*G=FL>?f&R8G+yhhL3xGw;#`7#U8u%8Um!I zeZxb*9V2=2Bg`xVxo zGxbHDzo}#8;|S!$dt*yEjdxK!&n1IGQd-~|5iFn1BNLx;Vh0RG_^-O}wQ65uX()ER%J72_k(7JLHaCOIqJFZGhYewlO;I8?dcnEoC-bI2X{;LSKJdi&SG zJn|>w+{dhMu4crncIE5rQOb$~^L}RaZ@T_X?<*D|tOrSvh-`+JDUEk!QbdyzK46@^w=IGR(lU*P@!tm0r0k zw>5k9DQQe4xoCDZ3*0XczLLqhH>2f; zbjFOxdgE5*wLhk&)2`6hCG-kS&AgvMSg0`Ur|>Y=$2^(B3p~Wg`HsKo&3+KSbl}n{ zo!LxTTiGg!kBHQv@B$(8M$Qkx{TapKu~&aED}U83kW4G)9?c0Wv9Ftz0`}u6@%<~- zvh9P++SI1#Bev%7g(aP<+-#^yM7ConD=DO-7 zd2}?nWEr$5^(UNd;^Na@*h9W5jaT*GUL@0vvWEB&|49wHB)7i|x3$ge^=|!M} zqMVtQ7k~1R5DSu_Ns!>qe4{cESb9qV7oq+uyKmp{mz_Jh`DV9PJ6jhhMj&U^h8uG~ z|0(d30dIEg=UWd(*{0~6L+>naN9y-+tzf3r4d$>l!a)|g@ZC(lze@40=_L+}fkYESsUqgBrK33TgvbayySf6e#;F@c`+5fRdXA56!|IFrW+Wj7I{dmRJ*&m#EMWmEdN3b?= zBy<-X;jUxON+;teMxgW${ln2b6A3sph`f52cdFbi^{HZXC%#S3G_8@H<|<)Z?Hp1Q z83$jMbA8C}^dXn1LRS7ISv z(D%JQ20H5TKBJ5U#FgZ=is=L(pHHehV63TkaH)Jk%-Eq&>a6-h!W$h4Pf2g4)GRZo zF+Gt^XGJWX)|G=><4W16zFu@Fbzg$m$kxJWu2!u5s3Nd>ck5ZKMkCahes7-*BP}an z6+&84pp;p*fIc1X{%UYXC+mw`rP&43nVh`yk&85uh#)ULpk)JpcEx(wB7n{S#_K3# z`#v6k0_|WbpuXv_N?iX+NRqJm5lxk=q~egeh1O!hXytmC$y}%Yq=+3Jjn3yNO{He= zZs}0H1a#YXnv=k}x`!6~1TZhosJ%D5_68E*VXR$aLWBqSGC=>jJbO|-SaL^;ccIz|{mwZ@Tkh8u0sS5ibA-pa88~?nEKtwcj=)_P+TOzuDRL z6Hgxwz>ZW-Z#%dC`!4wL#P&dLWQ)JmhvXW#o_CeV5bZ&-w}qRcM+%cfykb9IBfhW| z>xy~pb}(KH27$zMC}_i(c$(5I8ZG12!&3_3VtHALThpST!6rB`UwZv11wp_fM>XEW#2G_S6 zUrs$q`q6mRl?{5>jPb@TBrb`vv$4&?BWSP8{tbO=*ZD@?2;@+w0t-_hIFZ+pP zpxxE9&}0gVl((6zi7r^@KHD0UR>~b(VGoO+%iYhCz)cf%bc{jtLq%GS0s1sitWhjl zw{>#4I4LPv6S~>N@3Clq?;Zkncwnzpzsm@oVcO*VRfII-`%YR04nD`*c}8T8MMZu0R)wm7-5(GdG`OKy zThHwVckgIV};fj>SlT_X-BEL?!^Q=`?JxDb{8MYd-5 zsZmdp*X*Xo(X};IA(Zo9Z{$IA1|(R|7hsn!PeS!O_!OaUr*E)g6!d(ftO1)roLzlS z?b%#E)$XA~HZe$Q${mT^iPC-RMJ<>_W!n&Ts2+#|m>QZalVxE}_B{CCP<9(BsKQFw<r0}K4{b)Q-g zgbh!CO6!Y?Bdc0oK9IZV$=iqNZCux(@^X#l>J9dBAfdTMFVg-@V;6H*ku0h2C$qBF zg!9zoz}Z$I$SB4w$vF9EGQNgU)QhRrbDTD|3L2~?>M|QcyV`DRQ7Ti*F&R?qRvPR0 z3T3tE8XL_OV)xfq3PuNkl^Lw%k{03=vt4NxYM6-&O4VJi z?>?O?A|gO0&7>IP?WBthoQ|0O+BPcV9bqj9O?ITLXfvpO)UrbM z>WU|Sk$XqL86_>{^jA=URt~YWjZr1d6qX7@W5L)fsTn}WP?9e|kViMso!pXsmy zmsum<0si*5t$cO5U(P=4bDY$mGSe)!K27a2%!qD~^=kqZNqZ;X_K_j^k*|-ipihvi zTKTinyjW?U<1-=a)Fip5e?1&@+CrKH5T92m*`)xqz@drGl9z03Y5p2y>HdQwfLEO< z3~8{Ta3{W=uKZ$&N@du@pm)-+x7Xf6+ArL1I(w2E29WAYnK!3yrEa{&IkZg)xuSd% zhxk5`;#7lz*=Ng-%pvxxkl?*oOqHEH{6T+*<3S}=z%gb!`rQS{N?M`yIm-WhZ1?8w zQb}!qkj)vrGDmkj3|ndn9xm+wy0})H)L4zPZc^6$xY%Choz?U7ymtFP*saUEr3Xp5 zMT_dgGiT%9HGQTG6;6ExN`$X`k?nkoOdG_TqdVfdNo4FR8NZvl@8qX>3wYKs)~##q*<;?SC*lA-%@`!SF;; z{9$++&A`g@TF?Fomi3jx`%M4+QfO+e&9vQu!Atw+oWq`Y2MB9JZm6HFB zU8z|CYF;&S^*lEEbs=X>0!j5>CC{JPs~T|vAyXX0LFe&}t!>vYc%a;6>VJ5kfq4!Z z>t?Xbg->v4b~@J)^A9Ar;)TPq6;`eLyI9sd)srQ@n%7Gs%|)KCyjJ*|t}BC~ms zJ!o9BcgL@@#|KK04eZ0iS)k6&dw*E-qP#m@IwCSPH3AA{7xBWHtPSNJ9v>U2w!dNsb4#C59pA;}JQ*BDvvnqmGpO}Vx|&y-w> zuok~?WT$CJ*1(k>N_9=Kad0pYKd|EK_mubjIc;DOg_57(vT1)@MvILwQK8zk8Y&i$ z|E>EC{C5LrQ=8CxtgY8`li9*ym6uc6km{-&kJ%LDSTW=V<4>%LQhZ3N{a-W_2k#EQ z1}y~~x?Es<|0(M5_rwJ99cD)K$iUnCbgayg^u`W(KRN_pC^En)alvWx@DeJL=KkuG zUgW4@aEc3^n>->hG0Rrb)B7Z~prG}dq{fZ*#X-?Ww2c9t7qLyF_v(C_V#Hk{L?*+o zlbgUy{n8zP|M?%FAd8`Js+4+lNkbK`US*}|uwPoC`7$3PG_T(!ti97;Y#kFzGix^w zd#8QkDc6-|!t?4X!QAwdP;346?W`Jfub<(vcSW<7=L}-#nKILlponk%tif!F4dC_& zY+hzBGh&^!ne<}J#&J|tFo}oBANJkain?TsmUZzhMV3T92og$U?mQOTxet1V)nR4qz@PP4~NqF>N*L0JOlOFpHPxX{@NX+^dm|E!uZ5Cr$ zFnk6?&4G7Kk==(_U*n#NswvVy><2|79_#*7jd{k&BBE}!~O|72>eeO!EQ*92U(IHf*JEvZB8TOmv@|Egy^ zxEY(POo;!c=Ke|4s84efL{D~*6z=z&^c~!J21Vo$@Z{Z{663Or@m6if)JV-&`e#;= zxAdNJKiziV85}~k_g$x<|1Ov{r>q?jb{ljD^qkOi0G2@7@Y7XfYXqnWYDEmzE1N^j zcZ%*?8@K22a^|o?T(2Kw$bKSURtdo4iFJ0o-bGCi7I zU2hG1>wq(LwDPES2@X=jdGY17Y~iQoP95!hKit#@gquHt@;$Cx#n&-NWkcXH7EZ}a zjMi7jtoMXzL!KualVe^Zcz&pfgDVCgGUvt`{~ZHewgJ}7;a9&DBPtdEC)!5%`x`TV z|Es=~Qf@b9OTNuLjS0?!X4n{jgh~5M;*sCRqLDZySjL>zRL+fgNiQrrpW=GtGZ2l0uF+#l$)qkc`zzWBH?){W0YMD_U*NsjW*nrch$31 zwCzMYv1J!=NR9`$Z_@}y#~FC$W;Nx)WFmfv#Zl+4Dt)@+Dwp5;?gG-s@57x7czNPO z9D&%RA^>@85lYpTVhKKi`ZUEO8QRjBZDB3=g7AfybnNs!?R`e zZhZG@V>Q-J0f{olIQnk7qYd)-f8jQs$O3!c|H@)iAG~z^(l*l2?}AJCZ`qFOkLUpo z=-Q&TrpfUa%_u zB*XQG585o&zN3a4TJqW5G7-oY8eI3|p?O{Y)$6ybY(6g!jeoJUj|dSu|5%51MAJ!B zy>e(~*Fi)6+FuuM#oTis#s7Q8=N+QI2wnf}+xGC21K$6K{}2CnaUcPd^pJ174#EYp z%sc90=Z6astDxxOb6ni_@139l{?f`+Eg!2+nS&17MMMkKW8j5S@eu)oRCXawrZt=< zT8P~3w38}06-^pn@ ze8!Y7nq;3rR`nbgA1l#eFW$Xn)2p?v>;l>`5saguYa{3An*c8wfnLY9jl|!q&sC^+(7(UfMA;OU#50DI{ zXf@tfEewx7OeF|D4RsVLG7R73Pw26qxF?XPC+X&YiJY7u41emu@RP5&0B+#FFIGr| zGS7hotBqjFOW>~u>D%<0tK02g943cj&<8Er6F&Re?rw}0UwR!fU)Xo7rWGB9+UslO zRwYy5hDiNQ?(0KvXKu2B{nLW|@2? zp2M9r(JdL^&>}zymK5Ro?{s&fwyBNdiS=M~(eH|qgZSLev!d$)DNLg0{{yA>O5*@J z%6PsQ>g9kpK`e4F01_5797pfeJv8Z)TUK@-b%w>4 z4qunnEJ%O%v31hBOEQ26o-2;gESolY_wLdy6vAjLWy8eObbgEO#rc^;0{4*tXfj?8 zpU|Fw7oGFI97dD_|7)JNW@eg#$k*7|){COV>$h*aSV<(4Fe+#vMO;?;DD87pbu+TE zcEL4QMM>$c4?8n+NI?OMLaJ!b`%Cx*gsxU0VY;ywGA;UCD%~Hzotz({9s?SLpGEmJ z0A$Uiu|9sB(y-|nPCL``+m!2hVh^Y`!gCO12u}4qeUIDpO^EGbo_<}(yW}b&lNlm` z(fN0LzlC|D(PH0B31cWBq)@Bm%Su#R;oz!^;7>(bMo_P{3E$$dqu{GnK$RQg80rsC z;IcF9U5Y0`B+~pxBhGbaC~23~`O!qd-V@&ovA4(XTzM0|7iw}d#7(g7WyqrXeqB{ZHj9vJ7td~8N8taj|nU|*P+1e!Vm&R^ss`v7721g55_D6Jc#xxOm~t3%c6@B3$VP`@#IqAwMdbiA2CEm-H5f;aW9W- zE-><)PHNv7_4f5F6Okcsb40lrdQB(862fbj)O9-(#%aBPQ71ec&gQ3?Oji4=xr~DG zbvIK*Yl`~Yw=-kZ*yNr$jF&D)o$7lDY}>zL@~wLI9K~(CdB{{h>zO}?EDQoY=fIr| z?DX58g^3LLTY!UoF69>?btH%+F`05E95tAdQ-7C`N2w1R!z)m(Y?)s&y;P_vy=>d_ zYYsH6q}bd=_&x$;&BQK(akrH`q`kd&8LVWeIsHJ`#|P@&*5P~uuc|ipja<+Ca;7f7 zuVAb;o#+RZcZR?8hi#1!9IC^o`cqx!l{AXTbQSf}1WBJU#<-=W3@?X&fb$A*#^)u@ zlXOS;GjJT9Pi=W*9aFBT2z?Y7_rU1`!y^BKac7HLoQc%b-p`%Pfr3llLLYE3u2HM( z=B0uoh^{j%&o_cuumO;6BKC2e@HlW3WKA)SI&R-*uJ`koO2bYy6j-g3Hk`kGyLQVk zD&A`KZQqovaxvV9cQno>G&Iu7Nu4GLE&uGvLj`rf<7q;0yRUZ0Tg;HZZ%gkl{A`)Dc7 zd;8Zl;oWxnGTRBV&&k9SdAepAdF4MnqP8{awui_kd9g3?N}UI~)P>>S-E3>P&QQ4O zjo52Y!7#ww8LklkLCwqfzdaT*6Y6&6z$0Ne(a73%jRthL)GQK^_;x|j>ZUA5y^<1VibAZ5qw z?qC}V^r$(vH3Csf-A?I4HRa4-f&@aOjQxmjA}=ty#Bp}s7j>AObcU!6MgVO2n@+`V z;~O>}Q`@?44!Dn_!pp2F^+;Z;u7Z|C8XXNa*FWdeh5tPc6DH6m(!rwg6E9^WrmLHS zV&vOZK#BudfZwb6Pj3DVW|LEAe*>(`{{YQ_f2xZi>%wlmMbw>@ z04)(m=dw?n{ufZ}R7htV$*f;MPvH$`2p>warVA{jvO1dWB|ABiA?Iyy#ryZCJ?!Zc3&e8g3;r%-a}v{khx=vigUC(0UL+nCON#}VO^-%99u~V{zy+d3TY2E;#pNLadHu2DZ8Q_0RlCi6FW4XNMSM|4)lQ9=P;&-(YlTy>dE$~&z;mjz2!lc_vB<&4qh zV9_w!K4=5#O04>e?q8U(H9Ee1x6%b=P#5FXuW2jVs*;CXoAwgRU)F4?byBg&Pyy>V zUEQzJl(x@cQQ86+)A7pNl`MXMGK`Hj-#TID-K+#)s)dq?(R1AS&Kmu~CD|tj>bgW@ zG+yeJ@~Jr6kV~m=eU2hI%FML}kdyF8~ z_9ft@jo~(tAHpwiyBJSKMy~Flhcj^cV?Gq3|Hj8tis9fBdITnBz6t%ykM1IQXxMN{ zCwMOAbwD$1QZ4FmlE^*fHCWndGe$M`SLu~2lChl4VZmR1(w?r~71?yA&Ut?`xbrH( zrAuQHU*Ty=Qrc5qm6qQb8pOn-M#wD2xh>JB)kOxH-|H6YXAU3-m^#If0QFKkD=&kV z;jB|B+n)T2SP5&C`q;&shDE9C*^b$(xe2jt9p23RkeiMxT^w9p*V*N@UherR(RHV> z?~d8>FXyGC^d%#9`!RvLzCEL_%@5%;0(B^S4IhC)EknmCtnn}}_R-Pz%V(7i_(WJH zn4y&sdh}9CB7e>hPi;ipkw}y-7q+kUm-k6$6ZpsNHGGa9$x~jrd?z)!Hz2t!-*#Qy z(ND57)HW6uyd(zZs1Fxe_)z4L=k&er+=TG`iAO4`k@iAG0{aZ^Thm518JImT_7d+U zjTCRIt8XnvG0W35@m)Gya0a?WCa)sXuF;VE_6jCKSDOO6sT!Bf$?E3R+FBt`c#1a6 zjKie;4md1dfW9m|a1}Oh|N0O#D}Dkzk`jylM`k_WO_QdR1e`+~vNJPFK(Kz{JX;}o z9`t6LHGjF=oybT0p5PYQHUOS**-i2X5K^@Q)eHiFU!Vi)MBg}7z?nhp`~koWl`fw@%sJw#*9sDNH1*l zbA01rV}F0V|9#+x0oOvRhVBauH$gmo!F|4pf$~rIej91UeP5APH&kyB6(N4SB))Uc zXhq(7CRJ!FK2BhP&u$34{xvd4{=Tq6)ZMtj@;J-gS)M7KNe_K*lQ0+s*Uq=czh=9SE zBSL-df(p#__4RE`p#;KCf+aR;(KMkhI7baT1f7Wf(HPL`lOEyz{uQPa<%@qC7f9OW z*VxmO{7XVghdZti*Q=zJgMXWG|Do$Cg_j?nI2F}&4IHx7A%rsOJv6Kn_{^6=@d^~T zUEkiH&2>Dzk!!vZEX>LksOLJ&omV7}&aWDGs8`Mj^x>nqbREO|_ANcn{^YH&Fr_j< z0$e)vmSA$X_mdDr%^d27xfZN6BJ*86fj19-%-KUL?_^hQO#iNfwQ9um8v-b}cFXq? zoFMu-hV|)=yXe?9_N}y#2)=l?kYBOc`YVkT_lM7r;ek4fKULJ~oIdavM|75PVI{eW zOxaE)hWPXMs>ac)_X^Tt8X)l1p_QegLD+uu9HF=^RSj2Zh}gqRy}}}m#amCG4#7_4 zI%%>wa+2BU1#yE<8!7yVueG||dOX_ZkYW$z6j|XXv-Gs?-c|@OZpKfRhyNyn+8ENr z;hGAa9*l5D9Mhus7E4{%UwxRoX}O;HWT>qS!BM%)roG7<3}>*<*9e7sD2h!bdZnqo z2=OfP;HT;}=ho5BL=rSs3_iQRc6*{1_7UCRHxtA$g@1$4jfXA0b{OeprXX&dAEy!0-8|*nPb)(iw@%x9ut9y80vYpOw8<80pP_dRFZxIX72eT|9g66$x7l*>3gcR;xr6j23@+NqVVRs2p~OAsp$=?Z-^a*+HQ!s&N{XQ(*-nTKV^ zeYY-cnTt`{ONwYkZ--PRWTaz88%;aeQ+5BI>g{DKc<^b(>Kh~pM*AL=HIJ3-ig2HkV3>+{H~6fq4a&=@b(o=@ zDIaAF%7viwR$ad7r4x>jHch7cb-RoBE*2Ex@1fUvs0cXhEZi5iuuPcLE)51Z=gx2y z%bNPFk$MW5&mUst(era=Rhqfao}Y_Wl^d~_zFkt7j~sxkr}@Tga*T|Z;B#N!eNy1~ z+*X|G0d#DG`DCc95RIopbGlodNGEMU3Aa z6)lTANlkC<`|5TCU&0y;7IvAs($WL)D^zk9Q+n~41j-|eqzpKHi!>2K_sV=f-oYz{ zalKJcC@9^@59Yx*xw1|L^DrX&{u*d%x@EpxtErM}2O+fxu{X@J&0CSW(YSA|S$yBx z&Jbz$Kp`3qKN%}NViY}^ClEdJ7HlXw@6~##zndotA$=pOh??0_oV)n_@m$^*9Ufy* zj#AI6r?TE6j$_pa&r335vE3`Qv?*jgODCj*y058_d^{Fb;QsN1Lc6;8Nv5vJNomdF z-d<(=*^SkJe9ROxTtm`U$FOBM024OKLJHB5upK+5&03I>P#lyW&$q<7C-*9v>vfDg zjUQm3B5o^1cqOYJ-y?OtUevaMh0o31e8oJ|s-kK}?eA*liEYw&XE%n?s9BzVvV8?dl(* zTK%(pAW?!@&d6K+0!t|=I_bt;x%Z7D$QEj@QTj3WeeZNuUaFgSMbR5|iqREsROo0| z1p91qxJ#YRBiaowd-%kWlSgieMy%bdeKNE-YQ0+lUZ4;!_Ia=I@|arb@aOf2*NpVY z;&89Zy`pBF=K_W-)AKQ(5{Edth3GY9^*rlep_VrFjxW7-OL<6V&*!B_!+h{!OapSs zyL^=)0iu&NV@PMO*#!@61&3Hofo5D?L19G!l&a*-B8p<(MsKDp)oQ$N=;_Aq;Rhk1 z&}UEG5St^Xj<#u*Z8VO??RSi02V^_jxzz9;$0H>gF7J?@Sd`_gpPog0Ubmnz6C znPz%9v@qANy0r9;1>0l3#d;Cx>SCB=ZU0QC)?hldE@HRND}<10CSs|8o;j{VR2ZXa zig@`1I-acQSZ>+y&Q=hf68}k!cb$7ra$#ex^M`?LA>~H_(`@5>sn&OHG{VwuMc+@` z=-b;lg|pWNGhda5(cFf!os_u|zdSQ&y*XH+(r=5MsL=64a&KR5@8sZdfs!w(+8Un=$G6P5|t>1~GC~lo=fuGB~*96pz+koy+`>jagvgG9C zqjeZUtHg)^%xPEO0#8eUUUg)-HL}!cNe0Yh`0u6CL7|4Nd#De{dI%q{q_>`vv+6X* zvg#h5;kIN6aR-p||A)HwjB2WlwnkAzRGNzP_F4d`p?5?@ML>G*3POO;dk9StP^yUZ zCemx@J)nkOg7n@ygx(>L`|zIgjeEv-zkAO8d&h_j2r=0td#~qNbIvs<_{Ol&hsh7v zi}w?OT=(dcl^uh@cVdv`y7;hthgmq0UiZccw`Ids3Alc6zh zL;zU`TH2JDTfd5D(_!z8pSiBlPrq5EEH{SZf?pkG}hoE!KA0R zO3>6|w0xY4%E)AoOo{9QQy?dHy^@wfAk8#kK}(?ZxfwdC0PEtmWzd=@?93xU0oxRP z@DNgJc4qPXd4jh57WZm=)-7VYqO9QMBHpZ?+|^Mnfs3_nVldKl_3hl}6zZPB*Z->$ zg?eeo(&->Hns3n{Gy+2Qagrty#`0Pv2YG^FsB%(U{fjD%rF)Nc-Fu4*q!?ZIVU|-3 zJuxNrwWhT-LKC4oHdJTs?2~`*aeCCsijccSdkj`Yo2g)gm7tR^X?QcoqKdSg_?uHy z$UU~@GT@>o*1JwBJ^YhGF3zP~d(PH}lhYq#z80l*cM`Aep1w0S^17L<+=E7~ZU6au zz2)6=f2Ffxs+Ik*7SAcoL9PeGjDVKpA<_UA7mgaXNa|{el8D z>^7HFxtS|D!k!?H|VGTS;QIuFD+WCsr|L z`!(#pCF6Bn#@;=@<(=|qiO%TGo^NWV>)t6=;+}F9zdirP^mMxV=nnQFVZ2bO4k$}A z^IJnv$ll$t{)Y}Oe0Wxi%23qnsX}J1im~V6DPIz^CJ~0|F+6SGupfyuQwSRr36gq7?wa;Mf%A6=# z$WIn)RdX7>s1~_sOc|jxxRErOFm64Fx=_{yo#n%kMqe3_ki2-jGw+wCCVzf<(48{$ zokPQNFptWw~NnrC2) zaI-g`{U}ZVI(q-0mN!L_@KH%IzSA^0-4d@m?eaIJ&brWSTr5r$tmJ|Plx8z>X9nz*GyLs2wc-xh4r@JJMrShh?N z^_BMJTR-?Rf8|uezNa(^P1iHz@Xmmspdw1X>8`>jr$o;Qcm0=COuirhw_XM>N^t6C z+ulFVg@2VWR@;z=KGaIe#E4#Oy1kTljCEXMahF2|K_$(j*Z7y+N`-G-poT+MxFs2} z`}L!Ogrb6o%n~iEb>YY4VN#lP&=3mk6d7iw<%OT?CJ_diF|OXuNrQTKHWZ@r%pe2t zKBR7tg>*!}8jPyGvOgr$i&YU*E07`2Of}kJJ?7Ln+0gI;yQq8nR%TjXV(rtQ%D;Sv z!RI?-k|R5P4zjGLj?!24PIRQ&^@zI0?>5)-sIg|HmF6G&bSI4GW$HaVBu-fD6Djr! zOwr%Hbr0v#62>%~^!P7_uIuk;QG|BEPBynYSBruFWz8{G&4CWhDJIofRks6y_yf_# z+qP*b=XX{^v2!ZYCVL3wIy2>}lLk(^4>n>kO~f!VX~?1NYPSaAnzmDLWxFCWh+@c4 zHaiH9$hp(OITcqBAG?|=AfsPyIFiSxT`^YLu-}}eiAzv6!T5)Z&quI~B}X$*d`*gJ zuFo`xuX2HXvC74E)%jFd=oNwdzr|dq`Q=>Ug2scxF1L4NR=pX!t;t~9(;?Y7$L&ag z>3!B5HGeAT-mVS$AG+ORxy(Qftr?$l84ifSv|0J}8g|2bW(VGfI!-Cgcn(AyuoKY& zyqeZzN7{mxPem@{*n|J<#vn-FKR)P$Bqk;YSGPyYLk35b8Upc$hezBe`|!2FoeF)% zrSHjCZSO;T%Rf2Ck{*Rj8YQ=DEvFAsmu~4^dr0h3R9UhmN&Pzoy?hySO^DF1f`0C3 zA>ZC6lwKXHys5-6bRU#faT!|+Ku1{KD(5z=2!Tu`soR=CzQrfE3gV614pts9GHH74 zEZviuC>ZBba;=q7A1oOT6flciEP^1WzVH28hyb>++sd;3T1C-(G5BSHVM$IC@S1f^ z)Y5!kGu&jR;VKEOTKX3+!RX)?E8<-Sn5SC!7| zXuEd6I%5vFahoKdOe9Ml%?$dUXaAw9&6hPcYn2YJ3!*W=>&hu82)KUyXf^ieJCDH- z;mk6PUyTjQJ6H2iOib)&FRe0nojX&gg1Jfr;(FQEuU7=7^GHSG!AB6kS7d0*fxj-? zu%QgH$y##L;i(FOrY2*-y0q}ZDr6Z{*oVbG$pQxqK#7GA(QMreHAPz^lfidqoTlx2 zWCSX5{m~Y7A4*4{FH7FJR59T-KN8;II4r;U_?KShvUNgmxs*m`XdE|H5xM8b$v0v5 z`Uio7*nIP#3stzA=hSBMvqXZu=_Xjn$d$thhX>0;Qh}oRx)8FVP;c|esz&DkgZk$4Vk#R-TB6GKHRfj2^aO z^Fp^_F4(W1e8M9^E0K#7$!}%5mg^IZgCi)^n7h0DM z^xk^M&2?+j&`)DhHMkq+;0Ay42yc27FL8RJ(jqa-8i@w=A3`d2CA`G_1w~6i$_pV4 zG3ydz-pJnQ99WKTlVjVM>jp*AC{S_ zv>d`B>Wsx|F=97XhSJ2@dram%UGBQ#P#RHWQd)26Ktri%|x>Y3Ld2SJjyobw`-wEs=L>0U{bJ@t&&n0 zQv%VgA@u9@-@HF(&HXm-X>wFP8~BdwqnD$j$ktSquqm;JwW04kR0k?ImGUGotWE{M zwewyXt_Zo@HtE2DeVY_d*cBRN%iMxx&#=ABt7Q?T%_n8nwZs)3A|v((yh#t)mMj9+bo3Gb zrBYg-41XXA>FDW!_CC-EL4Evqm73R3H_b|1OziuyFSrm}S~xCy$N82pkXFW$8CdqI zQKc*=Qb}8z`s5_*c}h}}p>^B?06#4(C2$rzdi01O@Vb<_aNngJijYrua4@GcSbE66 zeEHH6^&;T;Gw?+50_MRbztyv%>*VSZYoCRMrc!=;BN^6YkZP1PxxFhS^rLsx1)y%= zR^@H*XVPU|;A?!(d2E#lK4n$K7u0ZnN4)v%UJ$lf5TVo$%(j+Lb0oDpTL5|MI#Jj}55 z&ffk+;m!~S*7h~hYiBWn+xS!xe?ILlHepSgtNPfgx6jEw5ty}7x#YLr3V06E+QeMd zIF+KYnr<-&RW7*J6XZ|kCkj4LPqTi~ zq(h4K5L;WB{9!7csVnGKF~o;uCzc9DTiYLKI`g*k`Mgj#>G3b1L(H3^s5q#yHd=~C zpa?;79$|Qm=)U`(=HA=R@9T3v=)SLCm8f|sjV5D7G4EDLfSXHg>5=FyqH?R5S4XO7 z*D_^_UXH9?!=B+UD%nENp1S1G!>#Zx#v#9IA@o*qV%#u6ul9HzD>w>Ux(#I)PYptd z^ZH4rQBXeFweDUZ17At_kDUlCm#8vo#xxSy7uGx3YsEdGj&C37!SEfH z3389qKyl|LijcjbU@pKBId^y}b^Ke#tZA|K1rv@Hq3c$D)L~>0&%f*7>C3@w#YLj5 zl{iPIHMVCeu4`(sZ1iH!pkB!JvE!Fj0vG-t} zcCWkDYGP=s$DX-cx+`71gZA7W$LZlJ)?^Bj_8usc2g06aK7ZD#orO^NrgJiwb*XBr zwvaw6J3K9o`G544`#?-`3S9uF$(a3jIlW=S=-H*Yrlv?#D1JIrsi%CH{N*4GwQ>K-(8*uOw{M);Y1`l zf>yizfCb#O8O&Sj2xpCz94Ii0;^`T+MHMPUNQh8VQld-DS{1y8i{HuO&d;xaXe5@; zAtC6gsgyL?pi-Z6&q}*V1*9=*1 zq!0j_l((RDHCIkQuD746mv?Y*sM*~d$fbm0lAdMvU-GGJN(oH?Bs5|^I57gHL=m1r zRnRT&0U?W^o>dr#`WhLt0IAJx#b;TeuQhmnNe5#oAd<9N=xNF9)3G*atKC1G@5@~Gf< ztK`@G;XhwOL=E3m!1~d;S6qNZ*Ji5no*!M0&ztSS;3cqMv?Qs>8O$Q)NciaGBAV-n&YK9g+V{KO@KTy^bX*c7xHl>kB2!~= z#!E-io>QH>=F=Lwx@~J(GL*EmU8BzIH9nK7{6F1O&qCqn4ex|y@cU#0sopz;AWT9S zh6BcwPEMs){!-^#rp8;1*d-+=m57$98MwB=x{-={l>@4FfB-i?-sXQ{T=PCOQ!PCU zyg1nR{ZM^uImS(ztlWBWUN=(S`!__sYSVlB;6Rj%J%@Q*r*3Gn#&PcfV7&X6$^VuZ z*()bq^p`i#SAMO}Q!}2%K7LbD6DfqB-lo>lYt z&Ayk5YvST~F3mz`WWP?e$2t$c?3o*1i@^MO>hWG1(S%{L*na1kMMR^+0dE7&N|2y1 zVG!EaHucGbUzqPE%#cPdDAhEsSp}Q z1&}$51G~4~BOxy`MkwL=?%$t<4UTYe4Xt!gmly;Ko7vAJe~-({CFr-$(#o||w!PHI znenKf&64+ycrL}*iTBHV1#!>(_jyT<2B*`P4!`^+%*Uo#kcrSIC7&q)bot?9%(z z-xPK9*^!0389!82+)`E>UZ=d0(+{W4{G+NyH*=QE?^V;j{k2-lTNF%s&3U<0Iwt+C zEfUku=?xd&D`kT%nk(xe<>6QEt?j>GqQhiYG}D`9EYh|(J8BM9JLwLtcVd*=XQnoe zZO89m4C~u#H{`6QAABO>B16TEZ0t)KyfY-7(3i37U5{07* z^JHAI@YZjpC*DK>SM^2nBb2k3BV<%cut(#9*5BU11;U0hk~sR$PwN9uPLnJ1HFqwqRcXfbbwSw;yZfm)CMK8K>?dTG>2yM zom~nJC*gyK=da*Z^QA>KU39*nHwV;LZ<*QSXIG})zh5i`SArR%D`7WsT04HEyT*9` zh<~tVq7qLU5wiATF|x=XvJXm)!76?aV=J9l!&n z5tE%5roRgVlZOS3^QOJEpQ-;|G(BKtM3@&`2^WYA;dZFgBJ<_4co6>3JJY$o5t?XG}$&0XBN_UxLi5VAfbYdp zW~_1TyvOB=1NPSw)sFrL>%(PWwVJmF##_)7c-DXz27|#)*2Mx(c7{d`&geG@LaUW~ zR={Z;z?^3NSxQaK&6klw^Y-3nhvq<7L#;<{{v|woX*t!GcdsglxzzZ`ba8f`=_&pR zMX6a2a^iDsQ?^OB(8bc?YO9}**``F8dH%A)YRBr`Y1{FdU|UI@*||Bpf(g(0rI(c( z`bO4XCaDskw1>K3-6a383V-N~gc4Ye*CKKiDq`-^(l*7FMCn!RvOjo$*}*wehBcm? z5DWPH(F_S=fiFHl;`86TXV=t-zezT=tUp@NfC#vZtkA~}r}<~K+>X@Y-SxG91K}@3 zF7u|@p{@(_B0qn2F3`P@&9%BlG`N_XZCw8P$x9%Hne2xXw5puTzrkv0Ba>Te!=}@F zX*m}Igl?p}b|M}jt-tHo8Bfv!u3^nOICDq#<}@r$yJ;p40R(^1%gia!CcIhvYeM!y2%6dVjEC4{d0a(<6w?~J#ihJsOT zEuDd)HIMJ{m0K}KzbhPBCYR?CzGxe~xVLi8g=}bBId$Kfp-$muk6XuFdZScLOp)my zeHj-|q5x0Xtp_TVqK&Nq3H1}%(v?@?e9))pb#$e1I=a-tJYL}>(qr00RiZLh~*ZbZV-uL|Q43nRO5QFs_`FX>`BvC=d zc-?EDqpv?`&imG%D)k8{U_!$1?SII;_9tuA`#nxd(msiZ;E7D4jYJlC1Y>lk-5)IG z&dnnyEInYk>S=Fre>Zg%Z1ve$cT4A_t2LI9dk5cmGP8RB8HvCn4xfcAY9{_~Bs9`F zHa+fmcbK)M2cy-G_+vwGu{BBzU-*zhttSU~={f6upY+NlErZT9;k`Vpc+P?r0tja+ zv7(%HOtJ2`;|!N2-qDT;Rs%&PbobyFAaB%{KHQB-es?ahJ=u|*Vg7z^^k)lwsAOiS!HfRNf~a| zvXq!(X&#t;{vs+hJg|D;wZBn&7frs}pQ2*Y=*?tg&|=*5?MN=8Ys8{P2G>TJB<2%$ zId$T5uruw0U}Tw=6r~o-o?3_qS=vP(nMBjO?S6;exM`(t8;ekSBBFI@*cnrz<95kj z4}J&glD!_XNdZx?D+azmVE^Z_ni=b{S+o3FUVe7mzHt$xuKoV~`-6^&cQlL7@rSrL z+H!r{nx)|WX861oTcq*7VwWxTI+Ox=9jFiWW zj66CGma}R_D*Vx#g)Kr-xm-TK?rX8KjY~aM} zwkB?FoGD)WN|jru0nUIIic0)a70Y6)?+TqknRN_?BrTYu>Ni=$BBP*(cc{Drx(bB8 zE3kgJa!`}KMb zc;G(~ifz}Sol!p_pC|JjUp$Bb|1xm&`2BlJUP6Z4!dj_(XKeh5!l4|U=hYQP;BXIX zW;isEbW<#|z@pZc_w1%!v_I9|jnDdHoSPl3awVc1lWFUBBAqt0u*f_!`>T(x@Wg3P ziQMoFyQqm=IsugJAQzoeC9N807O49u(I-gp%ch@S5o@55DI7sfV)Z1_h4-pnIqo~Laf}j)jc{4rUHP+uxJo-dSwH2sxlr>P z6kvz9Cl?-7>=bFz&%;^)9hk3g@Jh_!c$bT_~T*jfHdTW??xwdh%G;wsjwflcaueH|u zDsLVgSSlSaTB`Sxp$Lgi;Z7=bSyKF!G6(+L!+TJ8bQRVEQCos7TkSHb40{MI`uZ&; z%-=tljcjfE?@UoBs?ne#3?;#7k4-iZT{@BXKiOL$`Z=%O)}b}OzW6GFygUA|?bodX z7qB4ar?0vAX5^V7SIt}cIwxCOBO;!}_mr}dh`Fvk27ENo>AeR#z!l%=b9bicB+n?+ z8R^WQ6Tytk%(wPiPv_aX>BOC+k|hi_S;e$UCSbcIH}j^&>nbX>h<-rq(d3R$&gits zC~lQb&%JI@anRm3G&BGg>aL+#P1s9w2Q&oADbD&%se7Dg6ikO#gC=_D{tY$QQBXHi z_?W~ePDgnSl>LOJ7*fAhhLOLLhhP|QW*j^4{Kk0Bv};D8Y))~`!*wp1JNK`=*+!_4);0L5&PS?RuguQ}FHQpE*^dB21j@xVkb)>4MEo z26_Mc(eNgj@4)8fzjp@sb5*mF{ORYqlNo;saB%| z?F)UnP5nR5y%+y~n0qJspXc7WpVI$N)(G#e+!WJ@S$tMA}h($6b$Q+v%wj5 zH!aQk-@DHmW$e~(=Y8t$puYTdl60yS__3)tVt5q%?=(`nTYj6T76w7;?@m7pgGcj6 zCn*_hlVV`Xxpr)=Z&l17NR>6Ailo%_U!#fY%oV8;Hktl{cI)+npd1M&7PZd_X>425 zuw9>5bOM^5|KnMA_y2dN!2j%yL83Y;;kSFKw*xa3f&|Jy_i9iD3W=7klal}-qiZ*| zF2Bxi`Nqb@wE>AA!OBn}1Hc(8^m!|j-1RPv7D49h%5fw0FWCJ9>G0 z>s8u}+6IkRz-aL2TfSFh;YRfy{J@l-;8ReLAZQZ_Qs7H;%wF5i2rhFJ=jP^$tE!fd zrhOs&C=QLRuW@mof%QIYs35n`+(UScHrAezjfb?)Hg!o`p4t}ZjI5oWPXyAEZiSiAn|&QP^zI5{tM z53H+S*2Ck}fnEfuXs6A5R>ip7DeA*^U*e=_e)IE1ykBjD`GrXFh334_CZbr;cI z?V~Aiuw0wd6Iz6iqz)@w%i@gF?)Tx*s>ly%0$)3cj{VuK7;(cOW1bWEv~L(*W@3@` zPlQpWhcT$&T0)Qj_21=3fq(0b_!?X%938YHlT%uoqe=?mef{#6DMQh2EB$e^8j>1~ z@hqFhn0wS~pBp1FAG&FD@#s6ZDkMUdD{RNNa3xkeB_(QNl68O6(9&-bc7+-mE~pvs zO<&MB0M3fq8$RUXqLh@BT)Q@yse`--^>n!E<`yGfc=50=ei|Z48D$kzhDyOaqtB}B zZs}RXbSfc(AQ7IoBMTmg_k?>DUUipa;=$eWsMaD^LRGK^s&tjiXA2f3eRh9ZsHNJ2 z`Wl&5Lu!*zd3<`s(qTGEh#tpXF1eEr zJ}J};zSAW)sPTvFI(AJ_De?Zv$=|O3_L-Q@mX44fpos3kn4UDTW$`a(cQcAPMoLu# ze)YWahIuqmjj(RQbzENSL2u(a2h3<1|6$0q^{<$yiACT|9JG>JDc$Jy8xflJ{ zUE?HbA>Or>Il5Tw$ASd;6pxC}3^}vy-$zA5M`#-V1Jd1;U@>S(`KI-2*V~b?=9|1r za6&=-^Q$Pvm8pp+EC2QRWjm8g$xV{hFZc1EqlhPA3vbBml--0#oXi1Yu==+RCtzPV zQZ^XSb^b6o8LIIb!}-rI^oRRQUhyJ1PcY9Gj~Td|j~l<2pCY6;F&x~1+e05$BFUR+Ejjlk9__03BRtnkJY z8umV|zoPwx51-7=$%voSoj<*Q|9(sbEauLgJIXEtu7LmKg3%T@!qL5^Ez(vqYn=A zYO{*>OF4RuB`K23)-U>#8X1+ID_jpJ=cFGbndv1y6ZipT2w8a7y{nm#7oIt!%if%P zqp{_?&N3a|S^JT7M#HYW5S1c5NT*Wy6Mz zrNmC}NJ(*4PFK1bOIF&yzo^GYi(mL%L3`NME~b{Th*w4t%2j?#x*L@4PuZPV0d4aO z+S%W(S+5R?uw$2+qgCtGY13FH;PYy`=jqC#Z(6-gA}3Di^EqxL|Gh=#Pjzt+rS)cu z84cK*{AOp)t=-Cj}@$YOg3cFL2UWOV$djFYuTB_7H{9r>TJ z6rIS@qZ=KP7w%kc+W_RKN>&bvxzBy#ayn@NjT&+FlrC$;1qj{|ef=8q55&YjwvKDV zKxiR8h`6uRYVsD(Sw_aS7~YF;jqLEB7#$7K>MLlu&@^BCS*P&D7s?<#;0j%2jJgI0 zAffL&6f&>!wKo(=V-pk6V0h929A96b`p(YIzx9hrhKij%+nV7Fl221+dO}f^{7N@O z#Ot_s!kVtm7-RSb;xr{30N@N@cs$=L#{%|g?o>W-(ODfg27J%3Wz8K# zLPq&IDVCp1E@)gws;fBsWN+y+%tI;3vpe&6^6*2_R2N9{X}QJo<@gL%bKUn( zG%TcF2c__Y;U()Ndefka68kpoP$ceGPwKfvNzyOR_0BQQD4LZTYVV&-qH8!C)4RO4 zQ@sN2qq64L=E$BJ`%p`g^S(&7w@&(+Le&!~*qDatVJmR74_Okn^Hgb3-m=0?PyLR6 z@=(9GRMGq5;IFBGhI6NIvYo$dSlE+}Ii{Hw;(WH*4SQ=Fs=L&`_E^Z8JA0yCNhl12 zAd0pogsuBRB7HTKnaSVqiDv~bogZJSw4&P;LBa<Ti$zc~ z&6nSt)qM0KswHNVfcY!x$ zSa*-81gON6v69YC^E-;ZL4}se$0l?T)Olhwo3a0sXajxVk_3s&ro*J}e!W<22spSmSB`!5d4^F@`A+WQElvn5$ z@^Rm>=C=1P3H}ZQM6`%4rq+o1_+Lna&4%fYVM{pnz`pvnm1V{vcHyawDSe2~WcR3| z=*eul)nlsQI_2ya*m!z2Z+Ljdn=p>U5ymNf$AItLWD!S=d)-T^M@>$<39Cu}sHD#? zRB$UB*R^pyq~En{eEaL~k=se0;!I z7VwSg@mF-6AAi{E6}M>CVKQxGjP3l$#LA#C^+wxSP_KJx&#J(?f@u@8G^t*?2 zn{>Y)RJ7f86GVQ96*fcWj$21J*=3$19LEn+`KSICSr66vd=9R~9NIGE3(>%mBedTq z>jzg1(fk7B`rbN3Q6ZFthC#_qJFA(i`L(!^FD{QaD0=cJUeL!pHonjl84L?TTq1VEoO4IW@1Ym!c;qWmQ~TN0@<6gCSj-61V_;RG+ciTbv% zL>f8~kGm)YX_ck1QxPXz>-|}2*-S{4O=PTcw%M$^Gk1djg4SL{&rk>K{8a0Op%{!& zxlo(Zah4lgp8^LZ%e4GXUSVA%?|m(cI;I{L4@d_F*T3o2FIji>^ci={XmaOR)x%18 zgrB!UN-xHBfWqdesGoyZSU7&z1Q7#}=y~^Hq{+KY9hRublotPVmYVtFv!jg#pth1l z4l^*2rbxO6lh`+QCE_nW9d3|O{Ui~hzc?QXF|4z$ZgF*TdceW)VcN&w_hKiF#}NwB zRitBCII{K19O@Gf#b!P6O_g9ptI;%b9o9@oYutavkP* zkYA`6Z!U$}uOiATbvMm(+e+H0&)WQn4`~@zHD4)lY{k?$YrX{fy4N7KGdw)JlDv5i z(1uAW_<^gBDNf4w~Pkf5!*^B-JCN}V#g6GeVhj`&Qx=^b!II^{RIdpqlsq3iWw zGZng^x;u#L1et%rpP^Ege}BNsp(FyY^RDXcWI$UCxRIV=>)ZQ@fgw8@#Jt;2R|Ij( zbh4fMKdxVZWoOn&Wj)b7Mlkn`i}gaCvOla5HbBIEW=%*b(X-G{t8u)B_W{IN)4G{j zoZjrdazRZ)u$Uy=!Q?1g0asz8UPBxc)1&yzGCgH~>+li9zHc-*hSr|CD+B=nL`{zj z`N-j$eHeo#eay%PWw4f(^=Q10X60LaDbvcw{a)nO$mM1@^$NEbE7a& z%3q51%qzl4sr9#fb2@Tb@k7>al(NYZAEhxitg4a0Q@RUbCJ33rOGhq~jt?Bup|)=d zZ9Upm=C1G-myq1hlrao<`0PxX|!OJ(}sf33`fXaTBexJY{EWW0fBh9th&{z4uM~m>hIsQ{WbgF z%Iq?hIMfIrlTqy--*JGM`>E6J=nnLsERO`eNScIvwH}Oiu>nzvwwJ9ur^6vU3HEw?7cf2 zUherH)z7H!+ZY~0EE@T)`&9!<3Nmh2vV*24-kUABiMyDDVU15kwz_CxHf^OqAs5GGIyQFBt{?X0?a2<%3JaZhYsP=x?d>|Q4&#+p5 zFku;9bpBN|E9~mbN_^X`MWLgJ$KM2mfneqWt#opJa9EzVWr5@2pT`XUL(a)ci6Aan zTdc%-Wm7`PVQ+C8LCO3p_8To!w}>JRNi23q3P(?r*@x=;FuJ2MjZa&PoUI1kY6w4x zkT1>aFk1|N^DSHJq_OJz=e8f9*}xnqp6zpmsSNN3@o;wfFa97NJ}A30{x0)E0m8qH z6%_ViR$W-fu##)A7G`>Eha6>Msk0mVB^}B3Auu?0XO-SZ#=>~(%TT!Y;o9rFeZpem zk59HEvlvfvxQJ!29k}d2Hws}sTRKC*-ss*(W)G7^S*)8PBerJ4h#9Up>?^P(hQ}fu z^I6R(3fDV`BZSP+>l>p7%Ip>qFdG~0@{>=wj4!ft^ol2oeeGH1FfF1Id}rFSabU4( z7^M!YDWH-Zz}gP>l^E=eTni*t!y8mzAx1=xhPif|cdrw(*vl}}3w{xu!hQbxSDU)0 zIbk_{sYpYyWa+flVU`=_BV7MA&#V=342(;B^va^(d$Ig>xB>da*zf4wd~5@<{@>(&dQMerMB&p zw&wg2F>&nz;-0k_9rMoTF9)*_S(TWr9_c^@Nx)JqdDVQ*?8N^-xTDKTfF{miBVm!g zO-~T{0AL&->P(dNf|*{j{pUKDFi)hBFFpN?aKUtvj)m9n72=eu|42Wq0q6L*72Qz0 z8anmu{^#sXu_RPSO3Gy5_8&o(U0n!52%lUf7S~W5SSm}?u;rN*!yxeEFfV;jbDztBL=M9^Mz$NDYY*FJt zRfcB7*(J(cY8oAt> zI;@th%m*guxQ`E==SAufN7Uea%1(uUS>&qPUCN`V!wgpVW*iz9!hlxyx|9zEPWNPHx z{LlWWUH>fp0lm@_nF}!%1maA=eMMEH15sg@(= zeAoB)@4#E1WG;>$$_A3of+^zV32}708lX|lT0-9e|Csudr9^K1^3Qr@Z|o)F1fk^M zahLalcLm@A?{L0A2Xi?V>^R@D16*SWir@ae`frRVFrz7cho+Tuh?~7VrSNQXyfuiCW8zYANEI5(!`Dn39!1H+oCkZp;WUg zbd3RAD$o!xJMJFqJg-jL$UE|4h z`6W&AeR9#)l}{b^_?NX5H=8jShw5|lO_L@g74z1$e!~d9`pCxN?U?V`wBbHkl0MIv zZH{Me=-aL;thu=k5Vd&o< z#5Zp8@9$P^^(4F3bHFgilZgHFX_SAi0rJY!R0AoaP?8@3`a(W4&x<|!>?b2fJ=I#% zkobTrWZ{AhE_5hhLxZpvbIKm?yhS86`Xn*Nhv-;h-Etw*+_GP4ev32n9rn32w$943 zoN`I$*RNOBYc(_iX_;y2#oF0#eZPYeNbHKZ(Of9XW~jgSMBFj9re+TzU{6cGIkdqa zzH6hYBzH~%Z9IKphhs!l{&2Z)m7WqJvR|2nB194Mjs(j77P($2U(l85Ynz^(N z7?1MUZK(Zpjh6mV#-e3Asv<&zb0+!@8Ne-*2`GpYi0k+&5kDLy4&9a}JwPM)f3|(u zIU2dPM^C2*V#w{YHvX%vjILb5)x9E?0zC_Y6gtg_9qFr9j4P(vNtNL!C0SAJ#)-h$ zWZcbdmmfe<3LelSmK>+)S`l`xZ^|5Gckpv}!P^!7qfDkK+^t%Cw6`uml&Kr5)S6Jj z5+a1+1L<+-&U?%&SSW6DD@?KA&e;#QhR_wP3eYa#q#0>J#LZh4^g$u2qkQ^O8T-c| ztSptu5X2oQhpsZewk*!)cXLjOHV|~nsTt2}HmjPuK(&30mi(fquv`*!sn+rSdL-Ke67FsJI6!LUtz({TyC*baq}|)UnX0vLnP|HLnp3n~gYh zHr!L_00Gp<4kz7F?^N;sT-g;(G=Lbjv!BLZc{U9C3Vfi_!1VueXzBSH9R}4W;M}IA zg9~uJT-Ec|bgjEx)yuJs#`Q!LqEI$cuIbKidCtZ$V#vIlF_)f!p%bdfsBHk|`S`yA z6;Z#!4w|I>?AetV)9(7xBxUR z0k6!aP@!w34c6;5)<6ggynR|Wa^aSWx60}J`qi({@;T6QMlaH*>mwQ?IViL3qIh>+XYr!= zU!2s(56Qmqhd$<55c1iwG%o0utQ=S*jD-XRrHX_PXCr4DWT$=n!=}$qvf)%Kg>-chNRuy4(^BP`CG321a_pNMG9c)q zNcD02>4@{E3QPZp2o^Hg1U`@L8}sFyPPm*m@T!CJJFsTE)#Vxd!lE7KIHo}k*1c%A zY8EAYB=~X&SNnY-354QJxo z(HYq5SZI&BdGjWiHs2f6F#%Q}U`e-c!(c9TTfnBMy#UT*RQsKbLF8+Eyw${)%OTme zw%5SQXmfKD7!^AL?<8a2b5~PSQ|_4MAQqoCU^4R8QYee~zKPdw+{s=I&}-3$U9ZsZ zKG|Eo6et`Y4ENb%+W+5;kAUG`Hw=kt0Z-J{(eXTg@Ec%SO?=PI8M8QJWv3egt2ocW zBAzqo-guHdysj916SnX7J%$d7GaM+p-#3q)?PZHbOl_y55(cC1*3<| zuu4>Gpb>r%o5{4oJ(AOL7fuBZw7p$%*|Up-fRV`%AS2ta!V8k_l?NoK?}5DnU-P#+ zIz=bn<(ilk8T{3ta`?u5&xQk6O)359|ER$u-!U7}#mh zH|1P1te&XFDn*|Jx2o&Kj5MqX7opRUp=_HLcS&Rny<6Xz;I`GI>L=sQwlXu=4T@UR zFFWT>a7b#8sg8#aGPYjJK3pp(mm;_2IrG4-yjO`xdv{EXxLWMJ$Pu!5%|Uqg+m18J zGb?82fZ-Ft*W_e*C#Rpytvx+Dd&3t-VDQKDX=zi~8JAU7V&sAJ8!8Bc2mN7%9zCnP z_@ZR{@cRAxt>M6BfU4xu*(A??#3mHR~s2(n@Fh`Bq>uZ(%gYf5+MF&8Hn_ z?eer|8K^`GOvAyJ7+I{}D?HgA1CG{8+{)1b8 zs~c92d-sRNKM9sPfkIn#e7uIcT8V>q9BW5A%JOJ9F21t4TLV9-n&aPqB#0E4;k;(^ z%!??5n(47rYowww2=?n?3=9F4{OFs zp+#mlEF$vFR&7LA4?PfRfOy5fG)qbv8a&mWd<91A^_=l_2#YZ2~mOa)o zRigE9Uh2OZ6m<~&P>H3sQ0mb(Z@F7QSC^m8^nY>p)=^RRZTl}+cuOgWG^mIuNcRw< zqN22<)Sz^C4`Bh)0@5WQokPbABLahTGc?jQL&wnj%Y8r3TJPS^?|t9>@7`;{64dFr z=Dg1HJdV#HXVU6VrtOi1uSx-cbMHd>qfNt5eF4XENy)`WC#I~k5#nYCvp)``h(SHP zP`I3B_c|kX#-^Uluw%6lONF4#9$Ff9z21dsSu~3`)f)e4hS!50EjmI#)d|lX(bTI(VO$b)F_*^8BA_C5SD&T?r z-Pt+4^tv(l9t!1cF)6Z>TO zi+mvVkNq&WU=o!QVYuhqK7&*DoJ!MVTw|@N_58E6WW9FJPQFWny?84OZL$sdsq$Bu zy9qWS4qKW@3O?p$re#xpHa7OB*Sv%Y?-Q&$k$UT*~R(9+;!0Tb6Z$me$6aOslxwVnQ@$ z>NlY#hc>D7=1uqwv)634KZiF+{~T6u5t)<9QR;eCTUGhzhat}Nop;DVkoV=s>(Uq7 z#=|vQhIc)g0|Pg4lc>u?l$6SzJ4!wQzM4T#OHeZRc>BC%2oEdhAi(b51A9 z+|ri&R_kU|REFABw(LHqA0&k^rBa6p?FsWJOPGlfF=&ey7djI|==eXr2xZXl`8e1! z-yVC;5S8;11wf}?zkaFYs-M%Skc64waim9-+m!ctoZ1CGn^B?T<70Q=Dy~^ffrm(q zbtH*L-H}n?wxgz^3Q67G+H%KNU_p+@#aFNV+lg zX6Zzhm$|~?)nf2yE6>Y1!m&k+oY@kP>Ym%f&L5{rY$cozpN1umflz?pkSRF)Qg0^S z9EW?PB|bdXt?pkcs32}?mcVlR@RB({kchTx;$FM3%x3nwc{1N-O?^S z!Xk?IIbNY-Kt4JX2b6`Yjbp)R?nm z=85GA69GUmB278|Sh|?ODU#|H>Ou2ot*LR$`NFqElf1Z?L>tS`i_5EWsyIAjs=^8S zbXX#faFC&IJ}`Q%yQQ(kQ8fDz!u!Okt6vNvzJZQKb3oVkLaB6JE!#dRlg-R5TNRwT z3WlRBM?_oV>X@u%4ojcGh`Q^cpHGbxj=q#PSxb8zYV}3Q+X@0b%zClRU{?&IG#8MrME%T$Td$~|}^=b4q;QCE`?#{Mr7*Ci5nKnDCgN4A!zx|Os) zJuMZ_-;AtU8&}dnoK(XR?&Eq2Ef`?k5ANV9cep-wCa{xJe!P!%-)WG3H1&3cQ$mUh zTdJo$9*c+} zy*1z1n*W7JdO&kaOLijTx{DqAu$zA#P z%1aG>CDjhEAiPo^2JGlGgH4{1MUpuqEwW z$pVy8-qv~F;dm-1WL3p-r`&;WHo(=aw;28?A((rs4I9_BU*O$oaJ~hDpzBYry#CJp zXY3$#YhBbp=yWp20YF;ZFOrb7?<&{^JADSH;zslFJLT%70<}h!(e(-#Blu<2o zbB$g4L7x)rvNFyL zB~8uH6)gV!I~X@yAOH1h78#2`qzk&R#GEHG)@1v_Ds!rhM`)c(yQh&%%)3Te>~Ey8 z@0+rMQDe_ntDmPeu%tQcsFQiiAzLZKV<-@b+f8~?0U%geR#d#U*F+*iq8P32{xW^l zx`k+tl0Fl2GLSwv0Xm%|pW!1!#K6;! zq&?CBPwm)N3uJcjXr0wWa~uF7Psh(njau%{o`IZU*5(I)q69DCTWKcg2w&8&POvWVEgR|IOpGrMFIRdmzo8b?Di4{Ll=jMbT z6$XPd;I1DY8F~HYjXCbseO}&hu-K>Sx9s^&OiVmqyd(y$7f@qNlJ@&Dm&5FQ7zykomjOgMbaPfQl(emk ziBk^HgM5zNrB8O$d`@0W_OoZV z!ltLfA938_oB%SqYz|Q_R#`JRPTk+#Ujg?8QuW>>6^~l=I$guXQ=3<01&qNa&#m=4 zmHf14u-ArZlRnj3A;l^WfDxP>3Qhg>R7TR*`jni5!|cAY2L^|f>na;w93#tk&?4Rb z`f?X13V}`fCdqEMzB|)@)R!}>SsKxe-}4Wu>&iU7IiB^N_Q)%{l(xr*?*nr{gqJI= zgRDkZbHbc;IyTjpkKDIsbmPo?e!fC}+Z(Yyr zf%mnU{tk{RGb`q@U4@fWRD!~ib+5@bOY2QQ5CI5iUvsyAy=v!qyB70+W#!hJwFA&4 z{3mh^qcIX+^-i19)vvGT_cQ(Pf;>}z`smZ8=9r%;3#f)o+r0LF%7eK^>Fy!tsj2Au+;FLupHC=DfU?K>4LYcL*nAH+ z*>+u!HERsQYn8)2Us8G`?S!dv?iva~iOK7!eG6)SF>moV!*0qRoo0uPk(8=;v^y(b zfaJCrS>$?XPD6TEcfI(|M4dgQ?4*z0=B6ZCTEjHKfQqLjA+OdB<7?rSO(cwZqB9>KYF!J&w6Oe$5?2M3Pd{VbpG-@1^h0x5LKA;Oc%^MytCT z|E!&StGvh7G5GYm(N6jDFn~JnBV7QvF!z=C_*)X1@-U4ktSmBM}lJaC=rO*QLtpSFisg;N<{Wmf?Lb)Qwmg(lJJ-QD2>^z^#+tdqE0wa@1OxzsmDT7| zR6-u;4$cE&+?W9x0dfy= z1}&44e$$liNSRr1(uc@hS zpPR(((fg>;)(Xv-?WT{x!*7iWKnhV+Bu5Nmtjs zofX2>Q)$4S6nF5Uh9uw8GPAp~6hAR<{p8V2b7{Ob$r+4%-7?bv}) z-RxfBUT3|$m~L@x52UCKOXK~$MkN#3;4npb za_HJf8d7{+`{uRFa8Z_bLvi7p<0aoA1-!oN{seepZ3XF$)zkhf`r@n>Ip(P`^j5Ai z$$4G*GVN*3=HlNj*hmA#qto&z@xX!hGrck8Y)#5<3Ch~3%LcO6%yCZmJ@!WJ;Kuow-1v(XD=nX@u_gw6OgH40LpQN0FM`y675gqEZtV56mlHM>Ygl`ufyrP-2MP)BF~FO)jywl zSvq}d>l0<3bT7GKCpr8D7`CUZLk%}4#em%7xLP8{H{3$6$U_@mL;Fgxdm*>#mOaom zDuwNNo$MJo+Zy>~Qdwc@fzrgtt+QB?KPi`Tmra~I*g>%V&v@p8$wNb7sP~q2O}1IE zfYHOsFH*vF@3YaUpUuNeNlf3ocHQX!V+!4kFvY=mvX;rLSLK;`WiHN2b0gpQ3I%>E zxB%|OC3lE=-QRvsfec|Mk%_rC#`l5dWFi6XxTSLoOTC>lYciSW_lO1#2z@}-5d@=L zOfQYES-Kk-&)_r4+}I@Ta&^Q0=UAsuvb9SZ2sTVI+~#Icb_oI_vn?M?!qNU^E;k}R z&mO5~dZCvUM1MIs4uYRDpM2%z=~_U)&ac&js6FP^S2aQo~JJIl|IEKwnK`GVvhx%no`M##jThAZqm%d*}D>R>| z^$u;%H)*ddx3_*+TsQ{pl)?a2sj+e(@dhrJiP~poCeRWs=%9#A0yk9{`heP+y-sgb}o-c zvXs+DdD`y&JdN|`ti}}|gdn;89=NCV^d_!e6DT(PKBrL@);-A1`~F-XxlzXpI*oH2 zuh!Wv>qxg&88WDB?zAUH1TX%|HSC?#;I~ON%>0*U;a{V}4oJj2T^iyPCQV?ivL-fdu#pZdnvEJ!wZXSp;H*4>WY|}0ez?LcB)L8N(nyp z1SxbVBXqD}S3GFqO}w<@XX0hnrkhqW{;mluKFo?8e|R+7V$RB($i`~x@_9KW0t6O} zEUz!(=|5-cNu<6#)nA&r1;w0QtLs~( z!qzayae}W(V=1HZ>aP8~0#o)`Eyeq%xwlK|W1F`u$A8ppIsq@v>|#z1BM~^QrBf!j zK$tHxkY8p9-83Fa+6-2Ea8t-?=;L0M?Y)&<2o+U_)uTN(MU-Moa3Z~HvovERsT&FN zX_3EosU}In)617@$F%yK5m>>}n&o$9)-mrA8rF1@G!DnQNWLSg=EL;qu}TckxKZ3a<``zb`U!aae5w4NPWp?X;#*>?iN{Ap zkuUY~-y}+gDLZ?OkauL*?@G`(C5HulwG3~i2pg4iL8Ni1U48E`_;NB{yM_*!yi?`8#sq5TNW z!1XKPrXx56SBuua7^jLz-t2by;X=V|xl&I1u-m*-J?F^pqH_0k3V1^s|`^zr+JMoK{!)q^3 zB*Im1424J)6fI{Z=p(L>H$%q~5k&>4@zn#!=JK}%oJW=5*y%(B02Ex0HLVsmw`F@M z-wb<}_Fja1e2K;K0SQFvSvH-am3DVU$1-gvw*UF_uk_@h|D~s^v25J!$xnS`(y`M` zFL>f~&32c`{dim$qi~i4Dhqc)YGDy;-p9f&*}~R@RjwZq)1fif{C*A76%oen;qmQL zJtdHNjX_I!@d8|ZchV+za+$CZNjnTwuZs45Wvji7Nn{16URU;QTVm~`fUd410Zg}LS5lj2fx+uk2@fpu-XSbH7=foQcUZ*Nv`Mh)6R=mN77c#1m z@4PF_M{b4d(x}zC;!T(q4V!8hVrf;<7ZdL`Pu1GBrWCGRiDx*zcP~B#%Q1O~o5A_V zW*77G7FH4!R{jY?l}xp!`q~&zU|2!LD7P34eMN1WrmDTBSM((*Uk+Bqi2jYp0L{M0 zIF?D$*f@H})1nZ$HQ;|l4^~mJ6 zme-LusC6t-N1Mf>lVwY%zixT7o|dezt@;Ph& zo(!IG@VYq-Z`GHxul3$SG$C3Oj_7v_UGJp&?y=4uRB2k}q`HDRuPJKhQY=qOaZEd^ z6buRXa<-L$@S^o^lH=m+tP$>H0VEv>h~Vg?JcWRCa2D*B9>I`t94YP>h}_)z85=Xw z(|eYk=W9JQkyY_PV3?trE9ShUlFMTJ^y$;#QWN?3{+uPGgxgvNmNJO+{@t+5j0&oVr^YKGkUAgLc`KhPnF+xN=Hl zp-%XEwPu$+?R1}x(c4}-Ll_osespY;&u~BR4Zp}&)JS$$Nk4Py3p{RPTqVY*=EFut ztiwJqdmcr-9;I(PSiVRbvhBGQis&G0ye0xBWz&&ZM)Q%@f!VHRHLX^yM6DugR6Wri z%RxL*>WhK={%hy+#6Da5`GpAGhzA?nd3Jk;d3ng9mL!m!kqkLiba2>us`j98G z-_3AEAF@tT3-{__yP=Jo(XIoe$dmecSC;iXm-s1G0^7&G1mQ+z z*~T5)QZK*AWe-Y`U;RsP{QEF^6Nzxy*pRK`JE-s>LLUB6)3y_bV;Fby*`bjrWVaUwMz;`!2bqIlH!BTi!9STp8-#$ons)t}=qMUQ-@ zN)l3i53juMt|xqW5t@)7d}?+E4@f~B_LsafN=izuabA{`4LddoVZZ%7Y{Y{GTlYjd zxVsvJ>&;IWU8~#kT@!yOn9qo=*D@Z?pM2tj07rc(R7eP7XY_#@HE;Bv6>xojQ1z;xWo4O}tb@Ov@)I~F%N#p%Ad!t7#7ri-? zLH0*v1GvJmO17jL_b8XK@V@%zS4lP3F8zd=wETqmZ*OmFrPH6y#1b8^E=MS^3^MZJ zumVnGv_qr1v_F>aaQAOyk<)U>GT90L)~ob^?z`HZJGrq&k>?H1oYgfIz|W&IolKO* zeYl2 z(!O^*ubwgL@REb{=)ks?xxN;YhTIUV;$3O(RF-$JOCA!D5&82+y4%F(hPSb|1vTR! zKq2mUMbdCa?KS7k4)+}&bx!tdHZn?Oq?BH#rvyS6ATarb6^8#SOL1ap!``U|{!@fg z@a>ZJKTyluU-JKkTK2f7K`<$CY46&wi(g)K%I3bOmtp)~s%F37KaH=373~RaIOWA4 z+-zq)q}EA+L<}5-^8Ds$!yN4rVbu^q1Q=@V6N!P`Z5^fF4&!5^0bsva#4*3wkYEM= ziwY-=!V>+PwQ6pfBd%cHb31qEM?HH7b;rFIBJf}RA=^2tHpBbmw(Bigi5U+DmJeKY zg?7D?#XQ+R1ta`zJk4dHWwn9l+aaeajo=pBd8dzgs?0^K*GNfQTlotFZ4f~~=;gn9 z$Be@a$F-S$+bShoa~D!bu?lcm@W5*OTVU>R>Rq=qW_KO#n&|n$&LfdzXi$pxVZglF z->SsKC?}WTi9YPj%16qiTI)0IsUjD9^0dA0hvF0oG-`fPB^Vd0XC8T$K#(|OT!_Ts zZfex?1c4+ zJ3QRSy&CQaYE|Vif`U(-ih|tA#1&?DX7w(9stVNmLJ6(3ewtFJZU!&p#TrlUq-yuZ z%?$lS7EJXX>v+e4jX&g)V9H4xh>m%m#=&BfcB^7^=k6uNC(`0I+7E7C(@P@fg^!}_ zn04Lg81@E9Z54`b_o=DPJXvV;IGS)TBnIF8yS0r-uacDz6YD#xKkDqttX(j96{*z; zk=6=8o-Zj)mCOM8(4tRlUU#XwH(2)26g4(|wSLNRjx>LZu4E$1e3o@Wee zcxka5t4!F|+rnY&y4VXnRR$>uf2x~*6kllafag;H^KNb11P~)U_iAI$cd`e4mtFCP zpMX6CGkHUu6JG1KPD5zbHj1_KMB4L+(f`a-hjnUiJ=u4u|2yf zFam)<#Yo-!aed)??_7pDC%u5PdPNxXpT6d8y}CihA@6QeCT693SQE^f3l}I%=TcIRuzzfU$W#X)e*A=p|BL}bK}Ra?I;M7SMZ zVVxrgv?W=JiJCKYqElW`vn}DXb8}6#F00ne>Cg4*z2d7TJ@cE~06KF%RCMyTpkP!n zT134PKa5~ghMow4))NRlctJv~e~J{G3giYQLtO0L+&H+nfE2T<@{*z|(P4@XB^Q~JL&~1ZQU6SePX@wNYnx=Eg3uiAQ z#rv`{LHPcf2_Vd2)&XekZv>1N6BE<99f1Jya)H*-3%Ct1Q%DpFq@RU6kCE}nQRl>j zF}H(9WrVQMiOeq(a34jsb8&>urM)?IU|uA=qJ=@ESer8&(Q4t ztRsdD*t?JVYsV8-LB`8JPF);6-yBXxKFhMUMK#^hvA%ZTdVUUJ z4Xb~$7LwWx_S&Z@cKTv-fxF6R}~ymgI?%n-ze7U&#M z-?*{pep(ZVnL0kcNDqCN*NlO>+w=OKRMd4WlQBr9_tD;R(IbuT;S4ZY)T{Yw-5r&v zfZ{r+yD5Nh>0)kCZmTeA)z*qha^c=h%txj4re%p%E89kOBE(2kx4(HgRL`B-IwmrC zC3Br=rrfOw#MU6!j1r(bwIv<2Ici4SFQMqA5$ znW1UbGhsQW6=9oHsA2lEN99lPmmMm!FTjx+*wqKd<_CGNyEHHj1)V%qpy1C183Pb0 zubr_9sz!2)_4c!@xcxn6tLCCowGGVD3uGyQ3V6nsPu7h9R2qCeh`t769_cBlE~J zNNnN0dxBJOgiPmzX8v7QEBq9;!@Fjnnpw6!EbFm+Y7uwbSr@fwvp&lZ(&r1(F#>zG zYaO`hIz*B?4@C@7>32HyLF(*xL(<+}hmPDMBn>)z*$bKZNo%Pt`3Upy9m3*K-WltD61a znZ|OhM;T+TMTTQt8r9X+jEsLJOZYYs;LbRW`h$0_fexmq4e?W-m{!Ge@uoy5SRuAA ztNAaQqC9t7Iy)V^lWiifQu{lm_*xV@M!(LKUOtvCh5YOvcrb9cMVn@O|MGq(_A1RG2dsn0rygcIK^6< ztVI@PW=$`wGy#rdXV?i4ivDTZYy{RezWx00v%Rrd0%7uCo*8_4yg?iXs7{gm!$f|x zIr0DGs|M8+fHxMaFWpMo!<%wf$muOykzmmwE*?SCPKz)+NLOvFt*!>*M)xwKVr!48 z`E!jwjHbKcthF5l9GuNkI#%5K0A??uZ3W#vNa|}0VU>6fCi?%PpoG*|%Kg2Bz2tSW zi~W(EJqt4ULg)pF;v_u;NGO_Vxl_2*}E7%6Xl! z1nm5|)B1XPaZ+#*P$Fjm^A#+Uw*YFJn!$6Cbk^tOaC&vM9sG6RmoK+@c`3om2&Orf zhAFNo87*PZ%`R+6?H08 zV5Q2Z0Dv%iTC4R6mcMxV+|p2FUwP%F$`{HNCUTB_eUpPl-^lm`-2?jZ$e6g!MCzE$ z-|gP!Siwsiv?PW_StTBu4z9&gR+~u9GH(sDa~;n8;tjUfOd~$=_X}75Oj`{rXJgD9 z_Ik*NynW+7CoW^&iJm%t8=7FGdecp9rX{=OxK-o8ABb9Q%)eK>NzKwY))EdCDP$KB zxdsFP5a;TES86Gk#>RHT*>F1X6hX7FsJQF0wzd?2;v{4}{JDOgVn&)2bz)|?%H);g za_ln_AEzLZgx__h=;N!f5dn)(TgiTr$1>rboIKfiFSQsai`Ev?GxWdvBe)&^augJP zy!YROWx4Cacuo#kR?5W~$bD{MA)P&WWiKJ9P*SeRr&007hy(Bf6ISukpOxGx&nhpf zh}TAd&>Jh=1*(cgv*5+u@unw)Bli*@*{r@1^%-ahB*k(P)kO3D*=n4s+g|QtAlX=a- z`)U9FzzwT=nWi&ui_=Z|Jr$TIVgdO|{gEprNlce{XDs0P{V{~p96%T@iwWi`Grw>t zbf3>dul5Z@9gWUiXNgv{tehU@=;{9ePw?0xcsC5}bNjB}1+0k}Qvjuvns~D}a&F4U zLV(x3Ks&IU1B*mK_X8> z`IFtHzJcR_4?`i|Z)Bl>ZE{b%jEE%qW6bWjd%3}NZyik>`(M$aC%yGgm}--rD9A~V z9Qaj>kM>Fq`;kD7Vj0f8nv3&Tgr=S| zotPj54tn}!!Vy^IX!&B4<8+E(bNNR9vDMUw+A@wm2h|o(>&~0ByJ-J|IdPcHo>`u6 z1gQaE0_#7#hzbWTr@}Gkx4#<0XQ$tdU^D@Lr0ts-fCNdz@+NZ#b6=LojJ!h5AZWgE zH5j#AUroFp*3dYS_#cce2baQxD`Z2r7xN;qc+6C-iPWKPG*`elv@P9ZSb*0m63HoA zUlHD2S`YrjQRY|ebm&#$MTO|r2E{{aT{>0+F`BjIHov^3bf|sA69$|cNewTaNY-TQ ztEJG5r5--1H&yQc@3^*YE)*jL+H~*U6$XaYKY_tme0)yF`wK;lFiJdwU-I2jiS@*M z{Q(07hi5h){~->@)Y)o_K^iYWFAj<*lUNDKdkW?{sy81}%&l+0S4Ehsvvuw67VF(( zYgDNk#9~uLY$Ue+ECmka8r5Kq=l^yCXy7z9nZ|VxSm!}}O0;x~*sJRZRB$&D|e!;G-BowmG25T^@6Kf=k(AauRWuA4pnj~p;dm} zfZHARwnpbPTq;`LQ|*I5b(#NUmIet+=d5+5be99@sNrx6XxN@ctN7D-uJ!3p>9sx_ z36nNdoaZoP3n~e)X8r|LRpb$TdiC|7EU&PF|zv~=|$%w_8R() zoxHGd*_-L6Iju+gK-2u%pRBpGv&ip%=F$=ZBK`k&0&d$7@l^*7R~nZyqH9%>@6Ini z5V3m>#vNFP^Z|-9cyiMj5R6+F|G_BBMfb=SAi$gN>5aXw;N?jl$}2ny9hKV)NQdN{ z|KyYM09@x6Uka1oD*yY7Bme))7sq6k=owgh_1~{QJzTA$z~*c5o~P00H`Dy%%OQ>v zce)Rx)QG{mdC^5Lm}j>_8;$3Gye)S89%djo>QB)$(mES9o4Z|B<2B3oDi`~^OEL5N zfj=3KhU0|&RwG#?elr;Pj0a!bnGVX|TP zxt|e*_p+O&m;OB4HpSBm{CNj3`fFk^SJx{f6n1yEbi{Hk0_Sp_Hg+~LwWGi~ZvD>q z1QIY|V^TU|n7OK%Jg$Vk2t^z4p=!x9)dK1@O6vNt;Ddgae1N0#962L!vn{L3#U_ym(@&puN#yD$S@DOkD5$J!M|x@e3b zK~B$EeX{lBF(ZQibEtR43kZjAXPDoZnODO>s{;v54;-D!UUT9% zw*UHJv&yowd_d&tI%o#9Q-U??qv;!}ph%-*-$OxGRo-fc(2mumP5pwAlJ6ZB&dct+ zl%ZZ(qjM%*KGMg(UUz+Fy?cL;GhRD4N1cLjbh*E-g-@qy$#OI4CuH%pRz{c;Zv0Rn zyFUjeTU$=Ak;_Eogd;46aB<8qt60$tIPv}q{NI_N`zd zJcmLr_EP-F#cw$9{80Yn#bOctDN4?6cev^WWP851G(6%Hz{JWc$d(%uoPtUy1D(f7v)tIYJXOHj1G2aH^u^pk^XkVknqS zmR{BjM^)F^F`BSESsYI{#idCKqP6Lrzll*_io;p^qR{!5{ ztzXX0*9&XZ>I)m-ZkFJ>#dt6a>4VF;v-6L;`FMdEF5kM*Wb+@U5KS^q0gO+gL{Yk?ep?c7IxgM6iLmey$5qg_#6G(<2WjaKuqa ztvgq7_7oDlk8xy|4&O<-0A}xC9bxzq4rQqmrHf8Zf3aW^Y-Ao`a4OccHFY-gLV>EN zD{KeHgppSZpjy(ZH+t;RGUfK@BbXS>9Y@mvB`Sztn>`5p1T<-uj%5q3SL|nWZiV}J zcM;CoVn=)O>c{jKO?a#di=lfdh6n3MH7rpIwlHazW67E-xD_BD@=mf8%_qcyB$X;& zt9gyNX9VFaB&3^gmd9)GL!;~v94b0Tp>0Y1FJbqG9t2obvY770qQ8lsE;Z;MbO+B` z8pBj1_8Dyg(EdtpM{rS6sJs6fbAq-|@o2gC^Oo$5lNJ4>TKiAG6aNCbgnz}y&8NHo zR7EGB(T)$)w5@7ZS9589&PAZ;g-hfEr%Rm%yim@hfI@pNQzT-g^xv`QE(<3EpNGd* zMQs@1y3ZG7HO4mBE6I-E=Hj4y?<*x0*_z?0bu^#yHL2m(pv1u{;W@~E^)Y8JCfvuFtl;%=$Ux&FJn)F$<-)*gIJ>9|J@owYTE^cm%pnWoh zW8r75>k)C0uNQ<|c~0GGy0!1QZX2Gv8fM05#zx=-$yN*P>Kd`$NB6z}Pi~q_``589 znR9^tX)5Z7B0OD(RqS-4(=`X>=4o$JjyHZ<>7z-wT-rtt=NaNx6(7nhh%5+`Dks))$Q z79Bm~6^s*$b^O{fe(A-I?{!}MJTGCMHq+^mk5lG;keuTK2s(HmggS(Q;3g@BBL3Yb zrR=HMOiD1_y4K&yrI7tYC^aP+QzumH!su%}k;RHXOH_EV$9f!9_E(Gh+y~#;Rrmp> z%z}P#WTT}!da}Li6`KS{s1e8hCPBt7W4p32_Tw+T1+U$^etsT%>seXJMy7}y|qlfReC{MD}}uj$I*Ykd-` zwiy8OfvQyU^+n?*)BVm`(*34J&qNuvN01)mva=LhU3CW6uU~hb-z{~$yt&CyRGZY) zbZMyQpwq+w>k89I_8H7G@!A}L6XmE|B9Y}kvhE>pv3^XFB>`@eM}3*|nFFrwYsY^n zHM3Tp*@+~+RD>#99(rtTl~sEjqj=h1wIbWJAKi*6BtT;qRA{$UgH(5qS;u^4$30|E z4Eeq}fXj9zLmP%)_tOvfCdqHBu88G{n8fBCwA8+JYD1EX@=x|2@_z*<~CtS#{5IL}Gd1bL7#A+Ulp)2bC`V`$KP9vH9XZu#OL8 z+DR{N(O=isG&6E@k#Z7u(&X4$Ub)v&s(8z1EU|S`@bV+ibioFn6s;tmL(yA#7DoFa7cTZg#h#je$oMoH_{|V@JS{ZhcV&&mXP)tJb2;<4nhhn_ z?zk(GXN=RD38Ek&H-Ww`Rj{n>vV@OE$$VQdOSojb3R`Q z9gVL~%Eq|3ND3iOxK6zw(4tXo{IXyvY203T`0tK~_Dvr5{b;8Qp1Hzq>?^Qb8D86; z+#Szm3a(1dUP4y&lkC&)&HAT_U+EX8hRDl^N1mB$MrN=0_hw*OM8Bf$dku=V5$==UwdeLnbT{TiXfx z(OI2cT*fDRY}O<2k0z;7&-*cHK^Pw!T>h>b9O@ww%6qFQUkHEj?NL{@F~UQO3EJ&J z8)i$-F_ov64T>=Y|1?-sEGaTA1y z{GIm|5|aKhGv#w!*v53DxXa2-prhS8ei1^~0DfPds1v<&hZcG={+4f`jd~k}LM?;+ zB*30!02e&ru=dn~e^>iJM64X`q}=#`r`2Ta!}IsiC4WrGmIb43pS}2Dob=P2v(cLW z2EES#_4rJm-WF-!@~F>EDM(1Bwz^rVW4D^=g9dX>nMJ&^xr!Q52uAfT+h}j*#8pT+ zLkQYVEH|Em_`##rEbsh=SbZg9wMB{qM@PXpw7ZCAe)K}GO^w|`uuzye1`&1C6C3?j zDCWjk<=#HN+N-F0vBYa||6YZqn~LVyQgLM}2oHXJFIoq;jtd%buf8wnP>A`gEUQt$7o=!eP1r1uVi&Rn<*PpU5C&}a7H4){7SQ_3yZGL=H+gN-u@aWs?09P7K+0uNJ>?V zJFW`F#%d{UJDMKa)gOK-C?JyrZ*%C8mFeWJ8&x;Q*Kf{YNFM%Lm0QN(}(JFky(hW6wX@cpm#=GJ^j!+`)kz6uHp#md6`H#Nd&5eUxxe_ zd$O^+u@hA*p0J0xX5y}fydQ|~j0?`D?yQNApJIy?MV%p7W~+zV-K>(x=smnAp95}U zoX?s{TKcppRot-KW8?j14v*98+rkgWa*^L8!`irCva`=#f~*ty@1#6wUrO0S|K6xH zm*Vv;Kv*0Z60xu@IJI`8hu6C!6qMC}Qe$cC-Ky?}nOU_y)Ns1j9~Hs9OK^vw)Ea{N zAwx-n)AR3|tt$#=8Fizn^2&s7>U+OvSrM!hV_nhyE&pk26RR^EwelQ%#J@f@)wvX3 zRLi7=VM$$W?YhbP%j*$RTqyi?;m#f!7IEd6M@Y4>8*vd?A^cU)g8?a7AnBlgM|qF? zt>Y0D#E&s>qvHDXs@_GE&Nb-jUPN5LH-;dEABD%=7OYc6 zKH$%LD44&5pIhRQD{?DwVe;4we;i^;qiM}m8;Fii>r7_lf0paLtKuIspKXoCHzuqe zyfx;*3UeE2AZ^aL1@q}f$7{kMyJ;!$sNNy|x#(r7A_iI2$`lT?gx}z`3B%(9OHJ9) zXNM)?Jh69C^r+rn-}khnW4a#-36$#6H9{_z9pvDzY`!19T`N-T#e!P5zQfB~DwSmV z_UN{BjcAP7{U*M8EwLLPbZWubsfXK>twC1v*Ztl+g~OjdOOo$9a~W!OKlK;EQpYa8 z@`+EN%1BU2_H#|UA8SkfLD6tk-Gf=4)3m==kKwY#!OVxf@lnxVr=ol!Ux-+-QnLlp zwgE2O#l-lJoYB37-fRRmo>;0+e%GPODe-il0?MF~G{^g~m-bQ~KF<6onq9dN=+G(V zT=b>m!bSKjY4t(vRWB5;FFK>VVfChZJ-{vAArTy!AU&`5>q{k1kObW_vUuu6{TDK{Bv!@JJM z^s&J-x*R{?cJ}%*e+~(Zhli45!T{`wK6E+#QEq*@Iiv?F+{9?h#-J``&;9$6opm!0 zID0dA1qG_zju@2fDs(*lWb!`bdB~RaN{p-CGp5d#xh;V^;5XNU>7R&8SrbAVrC1uS zR)}VHTjBVx!sX*qu8Ves3{fMlWTLqSY@g@MG1|vE<@S?ZS_AnP>d2}+z zD(N)ku9Pajs9*>gsqrIQ9gEob`aU0{M*}oGS#Hax8Ub5*=F>qo$4FDrNmxo;N2SwL ztLPs4-SQx1zapc*D`ygCv1go?em-S*Ge?<)8B^%53kNfuM>Q@3E_>)FD8s)twrebr z8a%wYqLz{;?^E#AChDnj^E)j?M&FjmKVLf7>^Py`$dL=^xT0gHhZjTq7Bd-7s-^YD7^#+5uew1|p~LGu)3Asy3Yv&tF5A9FFPy{Gc;sT( z-z7$LWiKSt%GxR0P}38&E`786)Qz+c z&KB4LB@D&JM7OVso(@K)|HT$T--r`m)tUY)@BiZNt)rq2zjkj-R0LF{OGQAsL0Sbt zxx*LW@MY@z4dIThgj-k7Rp&N#f?uMb^-29$%)_UJR&hxx~ziWwW=|V^63;W*p zwXf^5T^_$I7Nk6nvi0iQ<6?02aNBPus5sc6&vMvVoI6|{{+=DE|B8myOXz5F^RyC) zgEV6YRGGCA1njcVARumgx&}Rav#06C$_&Pw3*cbC02`W2!O~w41G@JWtdqEr&N5}= zn?X!9PQ*)q+WX{XRaI3?EFWMFNJLQefSgTFgy_}H)RjckTj<811gNHfb;-aGqycgB zyZNZ|IG&sx1L5Z5Y3LLH?1WN_rfA#N#rRw-P*VuIKgU9hbb)pBmDgA2@o(*40s9cw z@suO}4Ivd|TDKw7Hn2FCyND5&;%u>v)RS}nLC$L8_g7)J-ohOoR9@g7_cvySlI*_d zNv}>jznajPWp-LG0plfAkD5!*$4 zY4u;mUpIfCSsU7Le?^YQGs2^q@gH$NtxZcTTmFSTljbq@{_fo${oJ{@L2^CRW(M!HN$br{*9b3(6(Oo#drHpVSrrG_#$(DAMcdFt? z%eHcGyVCnF%i)&r_rP7I*-9oKclED6>|w7G($o>=qzjdrMx26Uar@Fp>**g8R;Udm z16NRRu*u@zz1G%ovd-(%jx)qE&ndEj!~O7Xf`s1bVwy1mDVyj`4c^}l6v9O^Cfgj+ zE2{^AynLA|&S&{eD?igPs{rFh8rI7*Rridx0?eKY(j_aJegu4++o2YRrvOH;5qZ~S zOG~*gKVv-cJA0{@mb}a#vJNtAcb>BLv?aUU0)34*pShe-`ZBlWq`!$A`pGj2rL292 z%oMoGIiM8V)5)c2J^M%9UG$#dA%3au-8ZZZt@?KLOmhD1 z9rqhDJ@`6bJ%{#O-vI=x)t{7f;DdsS50{F-cuKf&N%nZ;s`JR{^XQz@t0HP|Eha;B zG-O{;l9N(liHyjQDPY5pVySp9$?>QbVSv4>s%=he@W=RP(6}N^ajFE_c|5uJX3#w< z%+psk8;Z@lB*Fq=gn9~0b?J|t9z(bJBs<5&oQclQmwfC$BTIJoiyXvc&0}I|iUqk3 zy~;&wcL+b8#ha5FrRfG5p4+=Tr=vBz<{AjWv9669&55JCGO@8zlSbiCvhczWn&Vfe zi)V=2Pk(-%Z_3}2>CaB0-s>7E)-cw~AE&F+HoU_~Scbs@Z)<-Aj4= zabXh%Onslz69$E*5~VK523WgX@*S7znF}1udhXC9I(S@5lvz0~NwA1s#0QT&x+Q>n zT~o@!@l=4DiZLO;gUed+kIX)U1~@)>hyMnoJCIPN)2o`M$^{1HBva5V{Lv%H=!`ix z&}Axg(8A|QPBM;F^6=Jjp>w{B$5E0#kb3^veos4CdnX{98 zxBJLKmkp4bpS@n3H#=O!_X{S)J)k_+Gka&tt^L_!wF}?LY<3vd(avjV)}dc3T-x~ol3X`7$$u&%{2T1IR_A)1*$Bd^plRdy~BHp)G$*L(Nlru zJ7u!#=)mkJXxq@N_K#xN)h`Pjq%ZtqwJ%p*b`z7;iE>-N=8$WS_cYX-EHBgD(XMj4 zCM;x9cRoAFnJ_X!Q|a($Lz%DY1#VwBJzg`k3{8$p=$VTOVnxZUIiOg0_x5&z?yhoA z%`_CFP@NM;Tfu9>tQ2>|f86b_b~7Bd;HeW3lt6Hj=tA{m_j4x>rFZnCV~NL8{#*Z5{nmGI!O6y z>2D4mD}o+h6-w(y8J3Y4|CtlB#NJ2wVLpPfsDbsD~kKAOv$eLgegCBA+eb z<={tkimR&=0YA)QaR*gtM8C?wXukFhi?c|RnIudCk6NVLu}@gid~J!GJtih*Z&*cP zuLWQ9W-H);*`LbFIDj>H_Uswf&FVq`%j5y4k7WA5?*X$<^71CYnnUbNR!y`-^k-5J z`-I;n``!r}59@Kevb6L8n_!*9f}gZnl>i4BWf;?i6U^qV1uwajtgrzbiZH3uP0(=2 zHC)96vP+6BNjybn4Z@;{e!+ZB3Es1@O@D0h-#7}N(-Hele(PsUvWe}kcJX_s^j)*_ zjcD#MT$(~~af+(7D1a)UzkTq2k7xR9zJEjJtxNN0&cLi_V0JqPD{4dbLh5`YQ;w3- zIxTS`7Q9pM)YbhhH8O8oB*3_afI)@oE4aGdkSC<1IBM8JnV(ZoNTXt{?Fd0J4-ReT z#G{;$2XGuLFOTVegQrZ%W9!a13@j`ri@WH(Bm3znq3LAeci@7`R>$uPn@MVFxH^7; z7-MNQa?my9&{$lO6)rrecYXb$Zf111e~houIDP7yM|gU$%zUE%@Hr zDALUJapcWV6wB#!Ip7m$9I&f$`)!zF>L6Sw0Jp_IRW?%ONOydC3j(9cPc!iSg7VAS zfQcH#`rfB@OAZHLHiUab%BPT z)wKO<3`BLmh!Da?Hk(Tx;aYHpAiTe+tsULmm=rp^9vpLUWr#_|ENi20>hl(f&1->1 z-q|fFNHmGsrre0KSrMi7VYrjc^Yk;FJ{@_T$OYG81HOo~EUNp~xJN@IRvCHU&IH!>$M=8=toG(JWJ%cp zwR*WJ?=D;u^`&rg&X;h7BQA;DEuVEMW6@g)db!&1lT#C*3*c>gKQY_rOJ2sLxWAo-bDAHINy^)t19VB=FC?`cl z>+g6Os*rB8>Mhj>*2Rog+ic;6A*t{SMsA43bT^Xf07vFiPd8%kkdXZHGjq5jW?!NL zt79Qb7Y1uy!psF9JdaLrJ!v=l?xlOKm@nrd(B8ziM`mv8$qQN<7=!?x zwbHsmDzL>Pa^jL9BY4aZuOU{*$9Oi!r%isVTuV2{zDj1_;`g~m`GRccpFhK~wkWd> z4!4cvaQW_z-f<+8?|?l^w^gwiZkGZoe9V9yPWy)JxcvEf z$|K65{YN43`zP3ss}^`NMfP4c*oxSV7)wb~&OI|WHg?(^{{_Ufgq`~Ha8}*wT|gOD zQZ^9$x>&q*aNe;QP^P88A*G?tK>E}sQKi4Qj~A1T?nbu1b?4QEc2JW`8J``#i+aY z?p1jlRq4hz4LoR5SfxEh^^H|s`M6l%-(-R&bJ~!41Mch zdL#6f))~rwQKBNhzVQ1fBU&)z#;?-1GgTMcoF;^IrpGs#;l|)aaZkToYm?IP(D)-o z$h9veHcVYG;DS>!T~<$_qm6)Cp(8A!wuA{TkkUI)bQT&O`<|}7tlpFUd_Sx94zp-R z`tYCmv8Zsv%zghh>2^r3l`}V4?+D^E#Y)RH5}P}4yi}Uv;B@H+KE0z*=MaMb*H))b z#l2mRT1R4yn9$2Y^(2>8f$c}=gjR3!vF7?oMI`jn&wq~&hoY;0f6D)b{L0(0pVFP< zI69Tg(7fZmhfVGITb?I4pBKO}IW zPRu4B1XlzoM^@aI9rlAMQF{lN%Eb)|Vs0#?W}XqzxPSzu46Dh+wyd&4*QXwqg_UH| z?u(Pay5jFlmF{pR-rSR=A6u0|ji~1SWn}n5!4xs#L(YEgU#sFtazax=vQrB$&b~g; ztwCe%;jMnkrF%bh&5SPRD6ss?@LzFOnv5xcSLJ~4M!Xv1wQ?kcw%3~hfcnwa9Sadg zvHx_5QIil;+?$DkMimfVlCO)CXZp4l*LD;PiZ$Z}iZ~)d&6i7zD{0sim-&WM^u8@j zCcq09&JqhF7M$fFN?}>HM5O)|uzZ4j|1HT+(kMC(p2Q<`#CU_o%)5SCHwH}`d#SdI zGOlD7rFzg6x=>qXsk+?)4NKG*bq(&<_&#sx*-o|+uWPBv3XA3y+o=H9sB>}`?f;$^ z=)1Kg%g<+x)R>KN2BUSS8n4nSpXc&Li}YF*xiM5y#&RXHVDMN!SNVBXx!&o!wEc#1 zQ06T3*RfTNPS!B%Gyep~i2Gw#G1Hq>o@+QSEej$^uOBTft}Ij{6(RClS^^TsIz^sL zv>C?CC(a=>ro=Y?DR0v%3r$elzBCoI8Smy>=~*eZ{eLogsROR;8{to7;p|1d?T|4f zsj0y=;v*9ht*1b$;gNo?niB&P)s%%5D{!qB_>_8GGran6=VW~r{|S+f2mYM3S;5Fw zUAAW5al^%}aRF!;V(1QJyJn|e`d}3d3G%hdZ|fhf4tRn>Nb>kT=x)0HNJX($O#!Il9k5#5^=vI` zi_-S&$WiC+L)>!QCHK|-mowhy)_}EcHj+ySygTm^&blo})vPqR?pUo7RFZM)K7Pyx+3hy^gVg4XOm_laTZ9+qYU`ZKTaY@_j9|Y5c zEEuT|=8cJ?UzAKkV~7M^4)!*cC37r-~ zfB$=;Rc7Wj@g|~yPAjd z*{boJStkAU1ktjXmW5tO~p;}LtY?t%DxUI@DrhKLr2U>7dfEVd> z?qM#(}x(I_WURdf~;6 z>e3k!7Dghmy7MfabM3|mR%nU zRM4Q`o6daRYrKBytU#xt(;s(PxHskmXX4CuHFta>EoL9^Kg1SK_^h|x)tGL=t zciT%Nxf&U`yWEqLzcwWB6^PZCWR{zX7pZ4p(9>ikpB39LFqpNBqs-0*wFxK(iv%w# zX(*#6kWVz6o)oLkMHdu6<{dOPGw$OwZ1>*%E#v4j$(M8LJmy~lfAg8Hysno_I=+&L z?Ywpv*&gJc-UfkQ7SZA+kNVQLR~3}Xi(TT@8F|AxkEBo4oZZ>-{XJ~SdpjI8q7vde zR%>RfS3SrgawDFvt3qIIvxG|~<;@MTDQyORJ~NZI%d1^{#-kb8zRC$MxH|SK5O0@e z54c%^1~KYqQYUpy!~pW+>w;HqBUbJe+j`}3un~(TJxA|$gYy06yhL4>>uhOz-DNM0 z5pq~p12UYeFsRm|Y9`S9SyQ6IRIl^&!Va6=V$@KK}9^bz+F);ztbvg9}6mwQVfnKogVxq#9 z8gK=zrYZ-nyzT7RZ5u9m2L^h1-sKk}xAa1rR#zX6m)T>VLE+zFqxLjCW{jnxxHD#h z=-J~@$fb#Pd}>@zO+8H^J1&5;-^Wz??*5Dmsn0stUs-;7eK&7$k-pS<2R}NN&|!X) zXtMS2iT{g?}3xt{-eZf6lpFyFBCUAkg*lx?Lb}oi=~F z{_0BaPiAt<&`=1e3OvnNHbAB~eZCgO$l7tdj>@rg8zJgMxVx#f6*64|+2GSBySqLO zJ93_0cQhML=|^oeyK|jI`tc}E?wiD+P`ffP$-Yt4hw5Fc8^qDeP7wP1XCd|zT@_6_ z(m^oU((+8dC&Z6x+J~wwB{tSx`&T1%NfMJ?+>P?)-L6MBL zpFTA&IQlTooZX{Z~I-_ZuLN@gE-~KjZZsWsQn{uJ%i6`JFclln@iUb zRv9a@1=f_>Ow2p71^%CWxCG=z<~1Djrd@kO#7L3Y{UBoysBI|ocLd?)rAEkuMP@kH{R>5Aj%UY&YYv*d`f| z+u_Z?vJF@>z)M zMIwRGbCMGmL(ZZ5d~~lGdGHCWvKvw{<98^>MuVjfFp+4BjqtQL1gLf@yGx(V>b`b5p3UhB~9obDBE4H zPvqPa7A!Anm@V|s&J5k^TfrH-Ww+@Ri4s`#zKT6qdt++IK#{sdL=wr%}jmH zNxpieru#CcD<`kn(#vmWyo=#&e}vnPNcZ`5MWk>*-|wTt-?qod%?Lr656YP`6%GEq z@kjLr3nDJm!Px(DJlZ)9MpKQJh#b)AJC2J+uh{Av;%u)45%T}LeJ(U>%e;I}h^}7< zA8^VgKR>{iUp&R8S5{4189KE*-CpT2T7JIU6Orh8I;TAyDe2{yZ@t6s_HpWXo;c}k z)OVnv!F4{G0HqRal*8wQT1D*=u@3M_B$ zTR;3hjvsK6Jto1upLL+DC3ld!ekkGlty@;RB@#nf{lqTSR{<^({>5E^0{R%Ot0HY3 z;FF=86KFG-z?)x#g>)C8=c}7pQZp%{`~jB=Txd~%-+UNugsWlth*>WK+eCe|cJ^;? z(om^+_YG9)EH!5}FzEJO7a#F?pKe)#mOEJxV|*4(KVYVV{`5FnIGm9>sA%6K-2WG& z+EEu%*Q}APr>Ds5Kpe)ie&M?tN*~?h!KBZQ0M^22(L;5g)YN6*|D%FXHn$+eG+hSw zqJLFXVDHZ0Nz&)Fdz+-}!27-jefET^@N(5W|D|LQQs?;N{lNGwS(ur&mc4j*Fg|I1 zVR1zsyL(7=^MiYYl1#f!1_w&+buexFNu=&Q*Uu!wdG6^D;40B$`p=M=?MOIeWG`fH zQ!FATw9dJxxcPz&65BBPq0)9l(nX2WrLGe*-+;codG5c~d>n2xiGeLlsEPV3I_SwU z+I5$Da{t!1#o78`eIOdUG}W{7AC)v9GaP4Y&zzPJf)oa>? z?%3XIOmpBfM#5}1As$qEb2wt8a(jF--mBNBI3{L5x$0RbtJ*>LnSSr0dB1sHEeChR zb{JD3)D-zpL$Rc`OOhx1uUWxK&0KXyE${G_BJg`!hofj&`jE*pqYb}gQrgi%Q{>ca z5z@uiJXsiGhjOjdZX@uc$-w@ahZWjZ?~2%(lrJjuSDMy25Fh-nzPLB9blvQY@qBMB zqjJt~M=sH`@={%z63v$kXy_Z+>xL^j3$*O3C*;S z!?!yhzq$~55YSkMh4mFnO8mX*iWHL7J=w36x<%VkkXjL;dbqk;eeNY4quuG(Ug9y2 z6L+!wlCHrc@YE-BQq;#~h5;BU%Qp6vvunE^(mfoW!wX}+nB@es~uC=-2xWiqKZark%)uridN*~S+i<2(o(Fl1j1#pOK{FQ0C zM0kqF1~ZDBqGQs9rRwGqYO#2?1SGUfsIV%+)}RwvMPqLY?^pY%`Hfg)bnB;e>o*$| zFAWPZQcx$e%yPlr(0|3SP^JfPTT^t^^v!lI-zzM_)DXKFER!g6?PIO#hJ;nI5qfwj z4IO#&GPGRH1l~fr(0ysTa$kDnL z@88NoPuat8q{fO$$@8$f`pVIYV{l5D2pv46@BQ-+aWH?tx1FU29fQU>J8!}SmP<96 zF-rPE7WO~-Ecr1mgvjLJju9$CiSYfy+6&>&$51sQ+(?P^R6qyaoUVZZh)Svbf`t3= zb`M*_#Rny&r&z-7hm~g4fV^Goeq;e?*ll3j!d951pv$J~gz?e#bfPadzCpRx>Fo7Y zhZw%FxW4`idwYAcaxFk&X-8V4cMlG3yo_aFKhH}s|02sVR%K=7%{?6)x|!W6+S!Qk z%~miMDb`|XO`iDyXN?O@DqSR;6p-f$S^seQ7D7*eblk19&aVD-hw9av-^F$I=Jw{S zj4{Ez)`gP!%2COtIlwT-;{KRT^G6hd|S z*-21f-Y=e^3=V&>^gVIl94IS`1BUcBjI51)d|%V;Yc_{YR+Acb_okkV`Jzy1E*$eWhXs~wOvT1AgPst&y6Gb)I-zCL(b z+K2gYs@I~Tu*ODxm(7zFst`EbF+Jqld4<^5dom(7Zvk+K`ol&O4?45nx_B0PCH#A_ zB6*&T<2K@7{c}uXwoVE`M7cJ#C*bLMA@vrTL|HR-8yT+Nlb$U4G#}^aqFvPI%aH)O zr!Z5Ag>?K_B2uMq+%U+3V!=sR4|MFjJ7?j6KZ&@lr=GIqY z%{;aA40kAOUW}tZ0Bxq%h>fm-tw~?Kn6JlW?xjGZ>{kMX77h2hI~0AG*H_J-h-tLf z_f$0s?dQs=YPgI%G(<4TosbI`t&Shaj51sfWh>Q#%a?i{^nsW!y*&OJoS64LT_;yR zsZE%e->%F2fyeujYV|HoATM9`pzM};O9e4%8cGg&xH;^c!$9z%Ym5DF8R{t2f)?|oimhS(y3WPC5+C=evJ%0{O~y2WUh^|(ZJqf~lYMSAu0Dxc$* z2P;i~ICV3^deHP{G!22*W~KE}VZ+ucgCO=0C>=R0AL z@w=?nF)4k!hXuK`w2;xh@j>#Asbhgm@f`{Qjlab>>4{UGx<60?irmqc;+>rKCds;} zn=>rs?CN!Tjo$#>AT~7{Pe31G@mjWFSqoj$$j+yw-rDF3ToyieMGcXQD`>X~4xCj} zX6UaXSjpED#D!FXwLf07X(%{ZO`P2aZoHFI_fo^oM0tgVgMa3#jH|D*Y5gG!|G(o)9AlYd$1VCq*V+50m}L;TZE>J20%vI98ost1x^ z7oL^-FvPQ;#kqeb93Y{Dw__qfYe|IF&xqpEwzB+uHq-9d{$!Q|Gh2rsP0 z(qn~xy+OXayNX;EiW=UK(hxEF-UHO+w38)u3o*_ZdVbiI-Qf4a%U=K%^hL8F9N0j9 z0+}k&(L1wSUp!x(%Q)|VCT#dMFzI8X1F(^3`IlF}yZW`~hn#U(K3dGe zg!PVl84c&FxQpgz^*XgpRFY8=FM+9}`%uy6SS`B&?IGbJ0u{M@*lEt6t;R@oi4HU4 zw!ovRDA#?2x9jXKE}LO6TY2yX#|Pbh_|SKCm^Yz$URmVAJErbHssh8|>{2(jGVTGj zkeC>L0c2c5s;B}0p6(ITHVi|PXNQqV`AyXr3cm_*`FPnW45PJ!pBpF*PFj2sZs%W z^ky3>SfmHYrVk!HO8fKYM+qldZgHm0a>Xc1WN+l&Q0mB&@RXTP>f3JWS9{+sxu|tt zP-^4X%^z0X%Xto)v|-iESI2bZ=N-B^8PT6Pm&QPqwJ3seU{theYEHIJGX*ts&z?~< z?Kbh1+6+Y`$q01{Qj6GJGrwUECHI%FoH~Fnwz0`*zezlRxz3eL}7^4?NUA>F^x(@$qV*Av`>kSDh zNO>G_<3(F3zuTF9#_?#LUTeZp2v`PO!52(zHyxITKBTE~i@!Ke#vU*$BVi4_JHJBy zE-TziHFgoTvUe9Cc* z#jG5HktYNk+`|pgVIDuf67<}!O2EV~xr{uhEEvPRJDPe{ljQVgai zhZ`Dzw^JeW79aA5zJS*UN3q3h|EIwJh#`i#8EE@ zdUK^VvHb269z>jQUjJ>Q?%9evlkY#z6-LPCUiR64?& z)>=3HXv1oAX)|m?jXl%3hs;(F@qg|&`Hf9ZEZ9SA+druO8Gq5rninAVFw_ICLL#o~ zK(>w&p(?1~LZ)S9M3sEU)!u4|Bqq7&Ek*jrkMK8l3h{bXKtcyIlG<~`EVM2Lh7PuP zCwnbV^$ty9F4t5Rat9_dM8>#agRfgd&Lz3$hDM|)KD{xT(mvmUf4uL(VQDmk=v~O! zQ7Acbg=8FyXt@D&WD5OXjTX4=cma$2_H3YW4OgHH<1!pa{-8a=^bODWs73_QRp{n? zwPR|+w&Pw^${#{>ii1UYv*|gb=o zU(1QrZ5ZDKGo+XA{fx^uML$GCC80RZ<}C{WwxK4dVj)hP$HZZ8c6Y-D#P32*Z*fQx zgv4RqFImofbm#Kbo5XDtwKZ=V{uY+pTUF48SG3z~CSXB0HQK;YF!&QgkkQpjxUs3l zKmc7T$0*_<@Qw5wsG`n!(v*HW;=^;9+!#*DE&2-WAK=SYed9kEv-_uc+i>SHf~H~j z1yurXv+)phpv=GYDg7+F9?|MpS%V^XRz!96|CL z$yPOrBJCM8XU7iXB=(hEuDh6+zx-FmY&q=|OiX`fhUt#o zl3K?dlZ6A%AkvHeR;B$XKA1~$-gAvRQw`xs(ngb_BDseUrJ$7eDptq7*WjPNO(OcQ zWJuIu#SFR0FAogoKtRfNNP>pby&4|4wb`I|)uj!;b{G)4vL7RvEO)wsILaA9P0r|N z6D)1t>1?;`Xza}aXW^sWFR13RjYW5A!7@QOn~nld_;apgovpSK_s=THch*(RINF4x*$eIf4QwRg-EvHKH9BX-wSSq)Q$6y;om%y6i-W5 z`o2s~yDp|U79!9hSd=GZ?NIu(z5UN|!J<_L_EwAN&(yk62)X`DOM3;tlB+{m_|O?Q z`uFeO6U%{UzXsrL_I|&I16Ee2>DIUifem-7PSq&Z4iqW`d|m*sw-g(rh=6bfqCu|# zkSi{Z1j`+>Ddp}iVA_`gHlb02q*GdYI)F$%PM4_436sEBHww-Vyf zA`2)_m8p5^YOc$7VTO*oGBWB=(MbpxQ1#Dh4|#Vj(aOChAse;L+PC5VB?@TtCg_3@ zBjc?3jH68JM4Qn1FO2o|1sl(w1DmqgaeY&+GY&tY&ja803a*;Z@0`tiD%=*^u>Ox< zZ}}{>Vt$4AZ;BUr=U?e|BhDxPsAa(&pz6!Gk*8M@b?TC|4cvja>E)M;`gwX~%qf^=_)JRvhnVGw{8`9 z+@^2^VcV6CeHa5y%VF^QZ8!vM3H}oNV;c@L(Vm^^^P6;5k3rwqF zuhObOwO5A7D}pGi%;u+FTI$z=Y!AIYzhsO_cz68(nA2RT~*QYK5UKAZEr0Dc$6OcR;3 zEvc5eSGe359zEx)XC6JBm;%qu1ja^`b+d>$W}OyPTX@ypOAMi7$!d5T$y?kqA|ag zI*<5FdE%<}Y6EZir;62U#_%1Hkt+8G9~3@^iBBxse`VIT6mx2^h-_slpyElKjn0(fSg&rEb$gT%Q0EEtAqm`~ zqd%KHO*K6G*Ir&CJUljj5G6r$@%#U4 zL_j%n)(?{>B|w_wvFWoRh5>T3=R|*TF9jU0qcaA6p z$Q87Sf;@ zZ&P$VL3A{k*;C3UP}Er`_1f{adcjDyvzy`FMoy~OMkc6V4}8zdpir_Sd9^VQyWi9Y zvtDuFEGgRPH!nE|?ziA6vlxxjmOT2hA6DS;t{7n$P+b8$eIAha4=s`7RQCmoG??Yc zYPM5J%Sk;rr%k`t{D;XTPC3tUW{Ji8kje6GR&}SlXHJb+ zHev3#_B0?5;i`+}^N}&;;D6NZSKJ8m_fGl`6UZ_^z~r$76#KvDHN6xUdqL^^A1=}V z{U^IyVKsN2+}1zcU)sid|KAdz(j<(;DgTF;)OjZW7!3dSmjf87x!Z&PBWjBHXZZg_ zx2pUKrs)4I)9Oj{y+7&U|2_BW3G4sYx9CG9B%+pv+x@4|9Bk#Z~I9ui~SfUG(ge1WX7-5DDi1;q;**Z@*g>(% z#kS2yxp0v)CzI2+{_{RphK6R-{I~D-%O5zOB>(^S+&IZDAuKL()f$+uz(vk-_#$3(o%+Z9%noi~d(FYr4vVMKWUN zCC3_f#+dxDC_H?1)S?KvgTwLhH;o2I*MVXUGM+7x3 z1II1INN_|1+W}FYlR2x5_iPhLLGr_rf(m;>Zq*sw3i{w_%W*kC?zhLsJzo@c8e+pyGkl&5pb#n2hFdX(|Q-)|_Z@10Hk65j3Gxk!=Z z)Zr`V`Qcl2s6voSFdIH$1AMfnz1= zTG!!>+=c`thF^2_w)iE5?VrWiy{6y;E5Toq=J9?Y*#yN4GWxKCfc3;0x_LJ6`wf|A zEE1CM?J5p1cP9=^H&ivu%K8O);OX%xLUkhJSJ(f!2OCr`LiNT;TCbc~ut39A zEAX~ZzVP@}U3`R(0`SXPl{^X)ziUQ1EgX$4DUm*;zC%hSop%iU2zm z3Wj+dFD*Sf|MKZLh-^T%rP5zmC+qGoDQt|VY_sb+>dh}tNaHpOxS``g}; zGS>^ml&wZ$CcF56Kj1HT9u= zf!|?a-!n;fmM6X*RcTt_Du1=qK=oVinD>a4?W^c9#R{TrBScf`O#H)a@_h4imm*TBU_{qTn4g9d+w`12q^_!;)qjxz!%B& z%;|Uad^AAuL|1DtxmB5*d7ZnIT#U6Pi9%zWn{NvV37Jt${P=b!fNO7=!PT|0J}5RC zwzyPqrnqfhZQ`C0&KKQ_;5{x(pc;G2bvYk{o+!F}gB<}+FRFb0)pQ5mm`s3OMeAZW z%U=uPT#Lbux)}x)nqc=+(=$9uQAu}okqqPe-!Ht@M(g?UWhvhWjLNNBZBDrPbzeI( z)!?PjF|Z^8@evdOuu)L^rmrm0U)kY$Q`Pgh;Q*Jj(u1WI(|B3@1tddRJlu4NBl8JU=H+Rg|8>uU4! zt!%I*{^@y106z6LCS1VzqlCo$2%-H4ZEbCsV+Tja&YqqnU}t+w#{G9jDXT!UVo!3^ z`fT8;q0`9dx=EBj(JoYy>V&Vp{uTh@{1?Y4$DYEXT(Yjmvghoh)ycw&^p3G{mXdPy z$P%S95zB=r_!zxv7>Mgz?y-DJ2K@=0x%>{Ub1)zi#5GRxG*oe88WMms;kaB_d~M5~ zaAMs8!BB;p?gc~;P^_**{yzXQMLx%^@y{WiK2IlrMTE;uGk+;t)eV@QL)k<;@Udc~ z!(g!3;po?~mnA=au`#>79(rl&H8$+R8JI%ffQn+fHA(OlA|zzx+#3JmZT;D{-W1Q} z=gG2M_m$D==&_OEu`|WB{oJ*ya+|G3;A>9D8HA)i3mtbe1Df8}4(;oteSf z->idVnB%Xre&?gqL9*sO35jpt)~G37mNpJ(V#K96*skmnHb2~f;y3L3wOpFwjC&8- zD_i`(Sv`xfm_CpTh}+wHI(R^V>SEz7-T>!Clvt9DVv=s|GFVaD$>4m^p4>UKd)14z ze`rBhQK&^@8A2#BtzB+xD|J``9n5){G3pWD**p!WSkf%nx)9G&i;C24=Ob5s>scRI zXyPoM-^>71_R>=_qINZ##VF;)_g&_cHOgh(q{+U8qgwQa*l|9suv1BjJ#v())u-KM zJAZoW@GjbZR8=@}Nny3=jS3z!Wuhb3c~rk18a~8dP$R1aKOQ-&?a>KW?wANsw^|5O z@V@;nUwLk6sk17Yxn8$AXzN^|1VkQn-Q`70onOHVzS8_eDul}Dmgs(7^VCTzQEl*J}Grela3 z17-{7L;N-vf$B>eav^uF1HLCxH^tOahk4q8@M3>4{^k7m&|SDAf^zw!xTU*xv}|Kb&ft&YQH>j3r*s-E>U

    V&e7Yn0sSv&tGsqx91X(*}>B*d%cjG+?p((I|z*l zoK9ZZm2QLlLi9Sv1phZ2BjCG@G96+SfC|GS+W^6ccPDsZgs z>E#%^tG6I&bnmN+b@kpN&CXsSY~^4$y|l_Z(6XZA@bI~}4kt0#@+$8sWJ-lEa`+tU zbNpJ2e6Xc}*C#uY3i*WI1Gd_aH7=C83E1QA<=)m9@4os+zRYrx44kl7 zNW6Qdebw70`O4?Olx^I$UIj`GpdYyH#k0BYt+748H3t@hW!P+eyM=Rsy^Zc)95NHH zY$vx7r|a9Rj?-A%KD*T2?yGA|-a7&J^r8|I!=y9j=Op0^=?cq}@V7@T-);YP_U0%ZWzDihDXPAWsP(BWd7A>FK{HxB*Y)W_=Pcw?x>f6VymniCvnOw8qYiKdvd)Oup&y8-L%UNyf3@b1 zr=`kM*exh6&LVUx+RX;iBDKjPs(3>bsI!-P)~FQ= z?fXbRNoo%GDPfCukxDl8nwB*KGc4`!*_54LCSrm28Gxj=mVn@UK{CVegP6X2F$P^Q z<;M8x9jb1OZ!X=#V2w?J;9}U$OzfP55UO$!cc$j05HUxE1B- z+V@0QC!;L_sN;aO;56JXbHv`+%fpk*9 zbqOJ2nNPH>pX;QjRG0?qDv*~4Q&T!bELuj_*Nxxq)PjiC|03_bqnd2Dc3%(`8=xY+ zsYny)Jv0>sr7FE6y@S-yqavbI>C%FL^xk_A5s=;qy@wVc^Z)^}Z{ByUeb)ZYTHm+- zJY$?O#4*q$0zR3~J?Ffx-!lp~Q*aZ#j7`_p=S$F=@=j-I38gU>7qYFH$3B)SXh&a$!O}W#Zm)tCsl)~~PDnpO= z{poV&kyq}R>24sj`hB>)Py?PiR%x%7fk6OB^SPh(kwIp1# zyrcW1bpMfHq*Oy8TWLwb4#dM_LPO=OkjeSFuXp&}`zIYLnxPKk2>@m?idST14tVZK za1JKRXqM!RM^+~1mFO0%xFRO`j`)5xrvY2m-ACnoM8{$7I?4nSl@7n`Dp76|(eclo zKNkSeB_<|z>DH%!&ceBb>e}N1ho130+{#oPtU$ld@SJF2F+rZnlpq}Wjde~DQNpvq zJsE9yPPA|V^IMCufMFOTu`)RuhFpp|oN%TdVTm6!~e)#C)G{!s<0(hX|xXMFE*)v$2UXyx-1z zBXym#$J7k@%3+N{Irs|09HB1jzWp=x&l{snY75o8Z-vvN8K~f;FwDLZ^$aJy5f9l( zy(IOJ)HgoBVqy%y!-N1)o2Uwr58USgh2C z8=s^tdd-kyJTCmHhR+d%U{KU^yUrw8=wDvpBtkoL+4P^QGk-cegzZ z&e&t{K(p2_WxV8DNrA!_MBlAq*0p_vZusAAGu_XHr(L)15tchlQ&;FJ74?KE^IkUX zt}1f2CABcE9E}yXRaZO5xd24h`13J{Wx-@z%ka391aB!v71r@tr>vCLi6Jf%At78z zBO`u!VMC{`iX2=I+#3n~z>##?Yb6*FV~fs*qO;Lk`K{#m$ztU8aV!4&>K0)fzXesgG?IVa6+N41J!%KG7?++J-39PV6<`zw0P_f}p+Z+qdk@vSG~k)A$HzL(!YKm!2;TH}lC*aEnvO^jj^% ziW=DPUUh5yDpL~V!$jLbmbvT42~#LmtX{Pw&IMIds9KVz@ep1Ml>j4yo405mPf$io z3TLMH8p4M~DZ%=cyQEutXKo>cZaV67-(zsrT58H+Uf-2}*;`QduV|EwDhSduCP?zW zVDW&^T471|7!#C|z>!CVb+S*vq$psN?$?1K6Z%gAqs&OaKIw3tC73rSvaqp%>>)CMdd zD!Z|#f74Z9Fc=8594oUV>y^aP18h5Y=WbCaHy79W4Pp^^1MYKikpSY#lP84W?Y{hl z4L%EQ6I9*I($XnfM!qp1S_zO*U%q@<4+tzEcz8aj^K2zO+yj4#74th0^=e@BZ~9r| zvMlPc_5D=5(2(rbtx6(Skc=tNE71&K2cS=3E75+Wm9z;m1!F1$^YarVlN)n^DiUHs z<|260{!ag$caa140me5O?x?XoYLC8}qnUTU*Az-h#O*-5H>nAlp3I%p?&zK2&X`Y@ z8v>7<#+DC0VGEsE&wiY`4Q7UYLiKl>5U@Xdc$bqieIyf_5hU|lQ=-J)H#N@L&-f}h zA`8LK^yOK>)P)Lx{IlJ#6uMCqp6q0htQ8T75;9rzASf*p5cAq2U}0%lpSDN$QU6U< z(Lb-MabxQ%`syX5T#k3hzDCBr!tB&We|p9A(7;fB*fJ;QS&dOQj_5iD+{u+U}~hdq+p|<&-g*(C>U4;(j0d%ZhrIqHiH$1ttYBxrw*Cf z-o4E*n{Asw451B3YHv6uKWda*RET)e64LYhqKCoRH%TxaObNr?+%&b24~)#~sVdBe zrnfsiNw0rhl=C#9Eh-N||H{1qEvSimaRU`Z5+-v0v`bW`eN;v3n@WqhP+f8UQ~v}- zHVADyVhz4;m}08soS3t+&tkc<5BMcgW&U-`^r*)lcGHL04I1lIeW$h1yTUGF@(h+l zinLQy@5=Li4(P+OfU`U^xiXL-An;-zVmL{sGQuq0ISi(KIpSRnFAP`j2w<@ZC zAH3}b;~&>rPN)Zh7RrcYf4*w_Yj@fA$?Mnm)G*b7@810ceX{BU9;C97W~L=Nmc+~= zld!tJ>?4@Sxn-={mPti>C+wp=nhiX!BJ&iMw<>7Fhc;^*?Ar``Oe!Li;LSy7EWu6s z+0H-j4ZxHQlwn+RY9|GyIOLje=#3muRQAT(6jsHyJ-rk?!s_6-Xri{;cS7q}ONf&G zW|}mIw~=nVZ!98ZG2kpgVnJ6t65+N%`zdli#FlC7Zc-&k0tKUgQ~b=}U=&d65#6Mq zXaNVf?sJb&f{-mxY@C;a0?ke}70CeIf+b+lU#dkHmWAi;g0r50*Iq_SX2Ia92P#JE zb5PKI>6wG_?sx&qfpj@CAOs;01r-6H|3okQzX!RaZ;=L21K|Tudv*byX;g0boZ$qX zmOD@y$77@npiczktcq{O%dP3f-9tpCJ&4l#|5&E@T418pd(8OxY)2lkDt>zm9tR@Y zcv+*qcmwMdt^@))1QW;v)}K z|6pXev}LTC~uU`@bs;cBKUMdyCDlKPZZ}%`P^b_O#HPH!K z&+goTd{W=t-fmb#pVaIBYNi|R*ei_InzhoNUq)+7Bc#HRVxG^RJ->*wI_CFZut#4JfxYF^4TdlMW{YKFn5}{9;bYQ{{iP%TiY1}DF`Oc5pdr6ulzJ}|n74je zJ!0NGWW0Pp=MPT#E8CI>nCR&0!ga7QG(u&l`)a;=_+!t?DP?ca+GOg26Vw(R6}g@0T+UGbzcf?oV@fv`Jm~MW#3K zjqgF^B^YD`X86TLrB1`EK}+3EeY+DV*of*M-LNk#Dl4HzSVTjB1`Y@%40hH(`6}L z0h>l>ke}^`b9h)6P1odicv6UW%$1sJSOFo38|gebz`5u z2<#95QZtQ5pwt+5YcomoN*;x`!<)J>7Eg`XM9jBJ$a!y^0!N7!CF43%4v=6_E^#{J zc_(HCkn3h3G~RWw5&2VISBgV#?^Gocm(3!%4lt_NXEQYnRxDlg6GG{x+wJsuePb)jLUp6i#TyDzUKf~>ZT<4-I;7MoHtXdo zy@vUBoLva0#W!PVm*)#j!46Ny5U}>OtK3=m_zGx*ye>4JoXGh9QFs{{XS>tU)3b>1 zX4Ob&3pI6E3bV$JpzEW7OaJtIe=t52w-8zz8JAsC>q=^rSR%6lM~}F#6Y#)_zolqm zO7Tp$Xn$rEO(|#>!;-@r^k0|2F|Z?|VmE$T@p8F_&kgF1bs(xFehjq!bs%&e*fSNu z{s8T>P5?%)RgG}|!bTH5BXkL}>R$_$>rl>uL+vVSrQO&suvi_dL%REWFLlK~lamvd zECQ0Sz7kV8f)D=obS?mMG+OP%3^ZdI)z#EsRT&saY*98Q6{!f;1AzKgBv=&2Af7g; z(STeqij%bLp(pURWCn+*!n#ce5S+F5B#Zw8V}9}C#nI)|ek*Em_eTVLe0;8(lkulG zEIAbwbPTmQ-7s->3~FIz+f6z;1v|U^)3V%rV#|*K0o$utDLbIL6@$6zwQF`%3)in* z(=L8P2u{9@ryGvSy;Yg>y^Jk(g>RW>c)kL}TMRgptTH`z4NO) zHRw4myjjm)-COmPL<@7FdhHt{Vv<{@iC}%b?et_!)D~w%LO&qLug6)x9cG*HOQBDQ0{`RNb-s4gW;unXv*bq<~l@q)e!b3&!-_vs%Qcd+o)` z`1tq~dX}m`f7`Zd}gIQxvc)lGfzxTGR39|HDPG@h`ZJ!Xxsv7=29D zzT@v-1=eO@F>9uAKP6v2Uyv+RZojI3+z>-SL8D$@F82AyQ?hbKO+)Ih;VG5J44F3K z?r8Iliu)8A;YJ4<*nI3UeO=_ljZuino;AbcyjH2`==h^IEuOI(J-^?SZVlI(O(%|3 zDi{7;US!5Bz&SRz7S6^m~I1H^~o#W~t)Yq)QUObF3g6NSH5IpXJn(m@`4O3@K7HNw$U>7S7q4 zQpt^<9AV>KU>D+N(1tt|LhADje{!UVE8cR8WWRIM@Ppx_Ku&?k-+pcWHV{|aYJ|K z@Pnf9_Polq=8n$%!`_TWW~|_pcl~SR&h5h2aXoXk0te$#$b#bn4B573!5$eSreMIAI^0q+DJ;GXY^dWRa#cY zbL8vaG_q^k7RGQ8CWMm0tqTA`QEtQfP8jFe*_nr@nAi7!fB=nS<(4oA0)dE;P36Gn zgW3fmv#PKyDr7uNVppo|mNRn;i7f*H19w5E1=O?QZx7aW&g&sK2fYJBdH`mQThA8o zK3JD$_&n{4H5e&0&?`V0bpXQxP@t6KXL6d|6dO;k`uH-SYx47l&ICPt<4s?P7^S?+ z<;lJV8ai=oA+a4ZZ@IO`DHADlIiuerZP?40ca*dkw@(uwyYLd2Ahwq)X9!-rRCw!! zz?@(xu3cwPS;Zh7uc%1lAnysE9AM?;gEmyM*twkcAS73A)UNy3LK-+P5kuhluhrA4 zu(4bZ`?U_kj6$=JF*FZ-it+~pQBMntlXA1KqxOfX%J^tQ1#RxM!|+%dLc%AHbWRwg zA02-3bZPt!@(NtnhPrd=CmUdd`qGP(KE5YoCEi?@E{T2oD41rgt^l$Hyp0*eVE6T? zb{>K;0Z>luXjIDMsj*RVo>j`0z(ipfv zO{GLWMJ$w6OXf!-O>(A9=n5!qAj+l7x1798E6GyDhY*115%xr5u*$C=LsV&r#jqER zSdiZT4pi~EEILH8uWqN*N3uIkTXR_4;Lrcl%Mn&%z1jkxVCH6+Fc~>>U}0RT{YAlf zb2WA|+fqM63X`|*nOI||d<`^oC%C~BK58XFYx-ZmuuLofx6tdS-FaSta1$}Eq4vrc z?jGsK3j^jT_Q3lM;2x~(6yThv4c`xlL}~PxloXo{lM*C659n`{>lXi9BTz(~1$;<9 z;{rGiF zo_NvMuA~b9VusdV2Q-Q;e&zA>+Oa9YX6Q*<{$(P zG@cA?y*~)T5<6O0yuwmmrs|kkRmj;{v*W7kb_Tp``aEqnRK`HU906eaW`;5Stdh3B zoGsX)?Av}lT6`(zI+D8cudTf_j45wezR2*@6AZ5m2DZi++N3I4rciE&eNxKs&%h+? z;NguH^*#`+sR{GO1MvCb;qfh+RegUx=(2_$sD0g>4<3YgUe^T67Qk{8#rvY4J3E&i zqLu?f7@(Z@?iq`w7cQb~BDGF)$v7ju6Ts-N{M|`5llx+FI8>6Y=rhjnE|t#m}=8!3ATI($JJn+4k_g} zXnrf~o~(E*%Tu(menu)QV}u z`}Je>=Zbb8Va(LDwO{DOn=E}j~K7R9k;ghC` z$vjJ=8XX#dm6{C+bJZW}R@$`#r2INVY=`*6VG5=D3?v$Z0t_*-tpP|Wi1ddG_9S@# z6~Y>IE2`aNEQ>|GWjhM@r?;vAi)e7nj>&q+9Sf&IP~w|E(C{1mu^y08uxZu@xBqHUiTCe@U_nqUDP`{+6y)$KE~bjoV(a> z#;<0XW$y4bbJpwN7iDLL%d3CV4H$y;^1nvgi!X)S&x?-jXYnpKmk)T9Td20G8T>{XZ!cAEW=KR7`k&nKr|10)XXc zqiyNvw0NX-;+cp0Fx~HmHPeI%pS*T^LMrXN3aD%i*P4I|KO(^vSFgpn42j|Ze_yIF zEKw%)4Xk8cX*nHlbf%fxI?gWqy!nwW*GHUYL)5$VyiFaILgH$`6M);}CCM^jtJdlG z+zh>{v%d>rF(tMd7mbFdG)8q_H#FXW^6dQX;`?E-NZ1F`MM~)8eGAOuqxDySSO&Jt z_YblIHBSg>CH9XFtK_6vQ8eILCYJ;GwtdJ z4PgJAD~QfDMW8z231vJFjzqThT$KW?p!7I)rJS9I!xLd&!WkuhMyX6TpMM0+#Ev)O z&%7PC`U9!LM>UYUfWCqnuLmi%_T%MQdR5Z|+69yYgKB7B!wRLHT-<)@o2_?)764eDLmh+kug|Y90vzBJcX$$t zTSZRolL)5YvHal1c_PLBvtn!$Xwd9PgczljGs##c$C?9m}QHx;C6gBl`AkgZG5; z%IWFp#vm&zD`1A^4jmTHTM10ny2+&X7Xyexu9@HrXJCk_*`n5(! z9cU-%A+A?~TYiDqiRQi4K{5ArYH#f3rSER&5h}MKunP3qAJ$S#6b|*p9XOpFIuSrz zSKf}H_5eWwOu{d0b&Jg0ynXvA*t5Qnm!F@kaS5U3OY1;4(MX@}k%Lp)+%dX{O<0%` zFnvIODhmc&k7JNgc?~D)8RDL9o1<~VXe#59Z#s?E9QT?+MO_ZqbF3?)atf1i6OO8m zV~EHY+a5kJW8+r(I;GAR_N^5wi7`C5}x+frOKz5 zhbz>iLH6ByFfp2qu-{vOeD)>A7pn}Wd3tB<9y@IA0GjtYz`~rs|FV%|ukBG$@X_Xk3ZVz~w8*+YtwL=uvD+dj*j}YXNW*GR|J9obVA6$1 z*!Jbv?|m=yIXuOD>!y@4D2~mHNL`0`B#={iorKX0Ofhz*JNk7p)rHM1qr1ac93est zfq_A<{cF$T%;+IbaHEmUOdxPUXj{>>{06+!&+n7-lI0B8c~lB0rKMp(LD#;Bdwo4Q z(Z4|CKUUIQ!f4)#BC1)6iqRPVs_fao%*>1l0D62vovgw8L^pf2pB`nP)s z0IUua&3vVeNgfI;JU#V7pM@Sud0xmI^x-Jyx6x?lp@@oj%lF&hGoKqPQ+T~Uz>xsiDMpufzR~@K2(BjGjW_Y$U-X zPcCP{4p1qzQvH3PUD2-ED3*-o=dMFj!&#I}tdg$!Bulto`;n#}et}>& z&XI8T6JfIT9nFde-NKA|35g*MDV4DQ0w+jHKtPvcKVHH`fquO;S+2%%hqvQ~Y~`jT z;p5-Qqymt&CQQ%;`r$W6OL>V4piYzQR z(7u14Ry;<{pgk`&R!gQkud-dTyB1denhIzDD`hn#3u}hN0MgrkBj@;>r=WWAUwH}$ zp)XTYKor;t?0qc=yD3Ih0T-ISbcTpqO^Z~qTc~-G1JMLQXGB4WYKf)Uvdi*d%Gab= zf8C7v{>G`#vgu2+PI`%fvjj#7&&5O@epfAV1k3}#`!qfN_{7zQPRZDbgUPS4W16~A z5BCjHH{Hn~;nyRzw%N^$8(L{%yzSjQJ#Fi+TB5alreyG?A#*>(b;zj{?ST>F{* zI^ARb3tOS+l#tH&R8zfu~PGcUO`$CGN6HZKDgov5q6yJ>WJaoz~l_u zWU8e2jiJizCt^!X+e%GZuBoc2c>)2?MhXcH|HoU*vejmi`trb>I^&C-Vv(-f*F=5d z%MbcGd*u@uA|7x67WL;}P9JSK;VhrLH=g8m9ne_jgKgU>!=ZL(QVr?)Y$!&0}*+CngglL|H7|&|7Zs#(0PD znL6gUb1TsXZvBj=JNJMC4i@jhG=5Y%_y*a0sx`B|@F_Di%%T&%aL(eJ#|1y^UY-+| zBfqs)o9H_XtOLn@>(zQX;+PrwqlT)H~D*mi#Cow{X(tom?au6q|P7d>7L&Y&T~?~ z#~r+>)aKL6&mMjVhxbjcj$-~DaKXv#zXBJe&fb`j+CQ}uxhch%?9#tSP8n!gp1neD zK0Dmx2}mJC^$qLv_#?5oG>jx)CCx@!?lkqQ)qN0b_)@oI<4dz9r%z>(bMr=1_nriD zrskGHOi)8fQ9K7ja6C|7o9e(P>+TOpDOHEZTPFu48)E*q@Os=LUvt#+VM=n=4$raS z*P>4#-)R0(#)$Y&y@?BBiMpN!KCnM=;LdRy;2Gw+dn8v2|1od4!xCPWr9%BX>B#nl zaQa+}A zARO=1UoOci5!hs9@=t4t+PP+?7Ub^$5U|YT>H|1znb;8T!I41)_Zd$&y)Ik3Gy0uy zLq;ooQK*$+f`RPM7ir%QFe&`o3{T&^ZGE74(cI9FepJPrbvqu!(mqr&Qctt&i`F7I zT+UCd0V9pL7&SK_G0kk;tbKB_*SRD=cm`}Ci5xnu7-MN>Cy<4y3V$3KfFLGIPNUJY2>B#n0szyvX}W@zSA z`zlIjEyRo_2RBGLV)kpo@>ltOh?^E!OENRKt+4|kiZ^ELQ-xiB+NCH~rKcIH+rP1@RlvEx}Y#F);x}MLb3I zJJ%fRw=cJ}XxN_g7aE9f)}pz=T|lI?v~<1Mz%W!f>n}Io*~yXJL?sAVwFAn;)u9}6 zuy7`}pD>gN`4%2dcK#|UK08+}dy-OLr^`-)a$If;MMeFQWAyw87;`&-xfAvE>$?_{ zd;I*7g$8xCc9JKO%r&zJ*3 zA*08a#IgAmj-01n;dVDYJw2?dv5q{&?#;KuesBD!{_$@1J1+#f-uBrzDp#;0M&Q5U z8GP4GnT`P()yS={1eA|vI%*ab0Rj8Q3PmTmK-*1vkA3Cq8p%>1PwJe;N<4Gg1Be>z z9728fAs<%BFAtBCs~J=v@*t=7RlN^**+1^1HNPgglKQ8HeErG`aog;P&ViEOoE^V@ zzVKE`EKl=v)#ERXM>>$i&Bh;NxVYZl^sIO^A zA@p$}6byQI88?0tbM}^PJY!@rr__D6@=dCmj~u7(`|Y@q0aR=AOgG$?>&e9S`g$eT4X8Cqj@b zLzbeS(1Nv`)A-r-hQVF6$VjxWT{thWmE6ty`B^hPO-4=nOjt0oiQxm-D*GB@;0eTAD~7`=hUP$8Jk!97v?R+z&9yRqBmOj`#cT zEc9!x>!yM3mNWfj;AZ}Pf2c3jP0eDO|6`MHu1GD~=y9~!VgV&4nL{T zBa4VKQdED&n|>LJ!VJpRoFHDyj0NUC-HfPl@M01Cu@hPUpeRoXHu!Nu%+-pAW;F+- zB`+*2DC{m3Q1jb8Kq7xNT;<>a=T^L*!F8-)%*dYYJ^`H{&IeR{r#@eR>5p*v~aW8?>@w&wqSpqrM?OhU~5>?0vj^)Zgf> z$5?OrtU{Jw6(nBOf4DtjS0Xv&1{{M4f|^p(V6s}fr2D0z(4hHMF8np&NUr<(O|8uS z(PPQ>W7mRnsWgakybVxXCr7(e49dxx2$Hkf#jkZTx0J0Wga)SW4JjLrPXQmfW)g^6 z@lUZ?cHv&oBW0Q_8acGw48&fHkUp%1Q7FZRq8%`y7*5K6Da( z{DV`eLqYBKmbHL5;e?KY)`(x6`I%AN)<`RkI(RXPV2$YfU@*G~t$)dW>3z&qQtm4F0$9G7iGyLJS> znPx0*y|Mwg70r&Do)r;~j97(7dbLtPLI- zQkRgF)Is=oW*l{YCDCNb=mjDi%>WxKzlUnctXUrnV z#=rOXbNcc~N(Q9F_ADQ6r$1m}1<737+uP>TA7UzEkw0*90{e4Lf{qg(BY&w@=8tz0 z_rm17RAbe4k4!ca_Zm{^2w?f6-OUSzb&J?qvh|-(7{VS8v%#>5)-FeP?n0uf1J#z@ zRkf2svt$((iiKURMJ^;me^O)(#!)z}O)B%d^r)&w`uAtcEi*h$FCKBVlf2`|BaMTq z38*;n8`B*H&`^i4WUJep_&)s{wyszgOY|yFVomW}7$GSa8<8CMA_qYbHTF4fB(U$h z6{MU|{_SJ43`|_~lGDm>-GS11zC;p`VGJ@-q(Lw-)KmHUy1S_J&f`o;FLL|3%E#&3 zcO^N3x$+KnQsktI)I19m07I5FHSWaj*`6X!qOh@siJ6V;hfMFtGr_AFijIrx+s~E| z*z0J&@ui)l=#D(=&eqA@NweC0N0m;}e&7%c+6i7|a`i4)R3EH=m}@&>EOUISyMrVB zf1T*Sy}U1D5RW(_xE||x@19t2AVPokeb1nL z(F-ELD8IF2S~KqoA|M*!Lr%Oh3c3-*EwU8Gkn2-)bk*r@E*3Na#XNfh@dBhbEXv!UHmCPZd&c~ z7B!Ri!%otuNM-Kv(|g;iEZPMC%FqNXfli)M95gjuXYMQ$2g%>n9q(pZUxX@C|Nece zp$KBHsw-^7HU0Cw>GEgkl(1o&mR@8cgTi$EyzAfY|B0}u%UJ8)BrQw?aH@lp@WHa3 zBj;@|FsOS1Fr5ggX%M^dExzi8G3exmgC(m%$TX8IC%#C?cRu?4Y^B=e#RGCLqlPmB zm}sC7ahX_x_A^-oA&-g>*L~M6>f0?O22a;#I=KZ)XM5G%lezD5=&2az#LGU>J+2^G zY+6ik|nHaefqz5y^TBDTuB&VP*u0!U3KFwR+T0 zlHjKcsTbDpAo|Gd$I}wBe;WEz{xbA0ywGX^Ike{qXCMng7!v}rb#6*CIgbB+w(}>X z-xYIHt-uW?BqRpQUfUCgp0rmM(0vJ)eyOa?3Ww{0cC`nLw`6Dh`~hVRm~G9#dO-}f z`6wXZ5)iBPiI!d^A||z*?^fH|dV9KYnPo?}>Of@4XQxp?8P-f<>bYW!)VI}K^C`;2 zZB-=1sk+Vld$@r?R0%%DPGvY{T4Om|EA3hGdYJc%9Xj3J)hhd`-$65e5ANM#EE`j_ z(iWYn!_H0P81phz)wml0XJKbBd{@+E>B09jH?;et)IK-FeVx@)%oqvZx0|R)$X^GF zvgvaB!O(sYMHb$>i@AfFAVV;{4f_=U+Ejh{2o_{}-@IuAiodw1#HLK?I4ADyi!|}= zz+YS6;Ont}dfW_jL{YprQ(tk$zm@!tqW?I72Ud^aR(T{mavmw;rour}%U?~5aaM@l9277bp+Wrj7)XN@DBQBH$_{Vs3WGWWcaCc91^c3b}b zL3kj$s+D%|YPUDsa@fmIPQ`w4Wi|8w-+6r%b;UypJyHA3a~C51!Fq zZAgox59-0(7h1TOe))_+Ma7Yz)VVhbPGK~cXt8r`u$@ye>xWGaU;ndX?1yj6 zbblO0M3P@fdH!Gs;~_6Xs)+z38eTezxdQb+Di~hlmL&{J}q$Rkyn~Plb@Eu*Lqhu2*_8| zGEnyM;*j2a0X3M7i-<7zSq}4gW}*E4v;jy_Jho4tgQSylZj4sgt`9`IaC~)$A899M z)@XINM2qJjSJ}vd*LhiuDJnAJ`nw)I1qVOAI?`kdWa?l&{?`rJ8!Pkr>z6KP!rp%D zy5Mg*#?exL*lb;Ton%t7zMUcq@1S-K*9!@2ktd-%NZ~TWkC98bskwj_``SCT92TDv z?wWz}<+8n`-hnbP?zj~AW>8~KjRKv#y@2`UL3|k$Ij3ZRCu*B{Irw9fi%T_#Drn*@ zov>Lk$;6wk{m#io@}-j{(p}6&YW^itQB$H%;u+c{*W8p6Wnr+7tQ*CjrZcUN>fu?v zQLHsscyG-zJkc9-%fZu`lsGICvLneQ5YE$R)HyA~c4RU#m90^zp}5%rP3&$BPZZ$f zN>np5>7LdXet_B?Tu8Q}-&}~WZv3_r#sdH5uF{1~Zo780{B;+a)^4)!O808ufN~^U ztJQ@(k;v^-yWl;fl(I)j-U(TA^{x+hdzv=P7`-TS$qn+JVlbyp0(G1_444hcN=bHu-^fLm9N=c%A(d2F6kufn% zfV!m0w%|+*HNa?KsS)}M&X!Zy)6(t-j4z*XxQT7xSy8J4aawD%`%fn|*y?aJkx4Rn zKz8n#vU@u3$jOxgk9`Wntf6j0PFg-_ykWPvW8=qe3m4bS@hV3uVz~FWtQ6nSp5&N~ zi+V;2x)lfBnx{t%3$U`W-#t?>m-R!!%{sKk$tjP-tC?5^+m}iTh!uDKQq|E?-->X9#}DJMOI8m0-m_u(3FD-mjS6DzDBxwvzjx@`MMyRHiY(7J~8Sd{fx zl47UDRO~aqq|+}dd;LSCY`{{ z(p4o%~v_ZEJh7)!f+~o6D?|jWdZp#q14Z4dVsA%sf z^@bsxhu`69y#AQFI!coc$G3iD8^C&K>pvV9M0b8QtP*hlV|oLFWxD^=l(1M^@rMQd zTOXI1)L~1=YWB+5HfY}+>Q$rpbfOIJF%olLn7 zhgmA3#g7(SFwqk_*IF;}E*~8!qED?d8YjDa+LmSgzj$KszoIwEoXyi$>+v&13@K9w zi_hfZ^KG5XGf`Vd`7M*s{owU8wwE=@YW_~1x?=e%%SF+HVm{7Ga=y!zPA3OrPQ-p%zD;N5{;2V|x~ya;L7+&;=9?sc9Hyu< z&5;~;Br0Yk;|zB;z4K#{`p`9_fzNrl`mvvP?sb7)L3QO`PSc*C;2BZ+0jUs6Rzb_9 zA4^mxhU#BqCyMNT6IZnia&T{@p&QhheCk5-C!YeL50A89{EU?EhmV>{1czG_=F1H4 zGxg21d7+B5zXAmuGt?$Bsiq9$`+w7=oPHS5TX2@U^s)}!i5Z1;Ir%$w%@*1j?p(V* z(dTNal*599F%KGzAFio|o6Ir#0WD}3-d+>8x$D%2q=(L|JmD5D4i@dww(7&&=-^_nDax|bkZZmKq>~KE zuJ9VHZspn5LzO8>#&-qYVLP~ShUyN3qe9i3YU@`rh?*kFycA4pq?~wvMtlS5LjfI~ zGM--3K|iHl_9e+a#K26lOmgz;Pvwn=Rt=FDWqaDA-3}72BUF1&z9)iCfK3SM>SIuw zzO${R6+WDh%{=AnaG@Hy_I9bk*C?a0_$HF^0eghIRxIr7w8hMfYBqh>Vk8||=Go3^ zr+dO*W>g(|xTJyhSq@q=l&&tVAJOYv;X`h>>ZR-)#VLG)Y>>8DNtx}Jc*8`sRZQ)d!CZ!5@gi)l z_YI>$r<$@&x&iU`mUtJg-WlmzEJLVrtp|VA-W}R~pGh6Iy4`=&-uFb_Iy()%ui6R? zie~-85$4;G!#;xEj8UvJ`Fq?hwm!m%p+#pRbcx-v&7YJ2QzPYQ1}S}uVd^H3L1i&D z8nD3zYs3pD>lH^%%$e*8tfNLGyzt`s;v;7hqK$X!{2_i!UxnaU`yQVImKw3b86IvZ2Ua<+u3i;u zI2G@nQ8bsAcrad%pDirc!cMo=s4r{RM$eqdn$iGg^!YA^0htenV<YL$Sd4vw$ReJx0WLHn)%gp{`2D#Z5rMKLYPWOkIux>V7zSx- zYAUxIiv&uu+e}Ok3UiZcR|f}UHk=i+_YF#2}z*!Ip&W)6<_Z9EXt{sJhXctPvipwLqh zr1%|k;E#G?-@qRLu%rbbVMqYnBmid{3T{wM9Doob20UiGB6u0@9R?%>3BWaYrI_h^ z8sGzL(z-DlUQN z)o`&>a|#e&5wI%N#D5}5#zaETq!*3VMLG+UJQO7#_@?p`=;wx0eWe(!xhL6YJGQ4$Om zKrCXRJyT~rUQCXVdh+p-NSZlz;^TfR23ak{3!XBX$FzUv#z_f(Uv zi+14frwMM24mtfjzVfXoYg94t?!@97h=W@UiKoTgM4f=-!b5{+Jjwcdwd+*R_15{0 z9Yaft+n=vpPct910`%}HaZ&MLYM!@+F2gffuG&2hyluQCLoaaY52r;h-8-<)7f)Sy z>dh`S`5VXVOmo}v?j%w^k5>R$#pC1yPldvRJJ?=a*{$dk91YRE#Be`3G+ap&MVpsD zn(U8Kw5;%!70k5$K}PN+@?A;ByDdFKytHQ2B@F0YEu2#>3p&n1n=lpj>%BzjrZmwv zgTkTR`Usszn&5k&dl$A{62dg%U)>rpDTb2wo{s0r*KfprKwBY8Z;?$(1U=CzZ`R6c zSP_;sC{EbR_i?CkxS3!Ra@k!hYbplC*%LXO=fXMkkYYnu_&)p3>Ce-{3)3bQB|dS! z&tk%qh-i?^k=5)*a+X)3T3S0K#i;b##6_x>+HL2pkfSsG_qez_-~iJZe>=Uw57Q_3 z?l~Fsjbhb{v=0>z1h38(&V@3dUv>*s3(cginOoqbmaU3RFGDZQu5s3hP2+qwl*7BB z71tOWYB>xNF5Ra1k>MsI&3fQ4s~uhyTsBZGu<^P{7a~lOzgM+e-4K->uGwA97{Qo$ zey*QO{#8@!{h&L|=gW-&{!}d@+D~J!>z=krt2v!*x$|yjTuF%pCZ@l>I8J{hwKrM4 zGZU@6t+egFErIHB87xtY4~sx-esg6p4Rmdu(UN=DNCvWIGHjoMs0u@h;Re6A=0|OC zkBA9}#uQ4f@tc$uj&CQkBO0O%jg1K}%UCCe(D6I=}AAWnk7eyT>j+S~?SH#r1*zapK z{UCQ7_nkZIbmoVI!SRl~LAv2*akLp!N+#09YCq2C7)Lg0Cw$?;1<%9&cwhwzj*I*B z?Nca?WTwSsO;;_StUEf+3sXPVF6cbs-d7ynX)yJ96g&g_$|qBMi-J+{X&&pO?CICeAiat7 z-g^m(f^<-N6=~8!?<6R_ha!ZUAOQkG=q;46C(pa~x5hih8teTI_Q^g_!4cB8K0IqH*jk}{O+YilAVNionsU$ivG*EP4gcdc%xI1_!ifTL!Y*L=*9hh<7o z%NfoXqZ>1KO+*l(hupZWDw2g0;E0NKstSqM8XlOUZp*4{o&l`)Uv46IeJNUnX$9KH zBiOgK_YhO6&OtjDc*^d>l%@->dnL9xlC1IOGa%-A4mRFRR`BQs&O@3vJ4j?@L%%;_ znddlI>pC;F>mj%2Kk25nvl?ztn^wxAUd)o<)O%hIg{9-gpgf_93epfoW%kNLs)^C!i>CpGM zp~M~Un7cGblh&eNv-1`8jAWg)_UV|pMNXNhI=RDdQ_LA+yQ%gY?>Dtaz*11luQ;9+ ztPp`ke&pes2C|o7j|Y7V-zlU~4e!&jUShEv*|Do7$^4?4YoV@TtLC)BI(YdHSDL(- zF%yV+I=a6IY~!b!Y`k#~q9Y8!k-^5x0uQ}5K#$hjK}d!x-z-6A%D#w$VWxu^p&2=< z<}~b&tC%1IbixIj4!3dQjAXfn-rB>@(N%O0DU+sRMu&);PCWJ-f0 zaH3z=Z{zYxq{-Z2tU~xN(VzgEx3LL#XQs*#~&DS?-RVD@Bmgx!!F8 z!765?fame$`|Ru&P0%;I#`k~Mb8v9-mz$o_R#vK#Jbkwy-0`lcv>v#qlKE_efdmXY zZU8k!%^;qpsEkE-7$N=Ep^(4IhU+EA@!CnF1SgG5ZU-NhGIgHZ+Cf3VSA*GOCXy~K zuop7sZv;&I36frDkrc6w%S8A_1=sD?Tv@NxYW;F@2N)aWs?ILl+}i+aunt z)gM=}0ocpx`|lZ)lp=a~x?Ox=HKmfL+NHSqUM_Nnu=Bk_{j#l_EdjQ*w+EjG23 zK{dKWgC4@FV78d#@*9rIlMj4tLEiCoK>k=LtwXiGefrdMZDLAQzlK55KiMkNCx66m z1Afd627}fDw2T3}>WtoV#HyL%JvVroe~y(Iq}dmZ(YMANj&Ev00GJ(E_y{Uy9@wqz&5fyqRf-w)&!h%B5q4>t0p)1_m@D)p05zYxPZm# z{QaSs;a{H|czWalNXV)gq8%f7$~L3<1D9Hyo~0o;DAr%=F07r*VX=@wJ_O4Qgsp&YtogZ%0(q&!l(4yf$R9Ig3%DQUxWuCmH!u9(Fx~z=A%v zZuaEJ`*EGPHb3(x;&_^j3U51qj^=R@W4cJ+u6`kEGd?;Hb;tA*mCaIX+NG40M0*|Y zflEt3*-h?V7p>Obzmllo;xKzm(WT)jOgI?3G}6))b-27Hl-sLEA+kO!8t<4MK-YAs4C?3neC=7x*@r?}%6n9}U7Z)E=P zC9V8}fXH?nHt?Rn%6c(9gX9uqv-shbx3r;PAw03|$eqy3<327%Oc-qJK_l>@LM_Q5 z>e*w)forjj$tqNtXLEjzf$yR*JGET2TfJ?XLpBL?DTU?zlW&pe=}F;P#I(qfEQtGJ zhbSkE7YG#|u6#QsmX00l{gyviDe!18sHbQ?xb(evMQ4f{m-K+RzuW_T9;AG8eXKvM zYE&&K1}S2KrAo2BSL6oXe3mk4*e%`clZ%HUqgiPtB@_FEjjvgc`BQyP28)Z0P~6z+ zrpo5J&WJLTmQX*-z+b7aj#mVK1r7keiAz`R0~IDW0QdH0Lwj!+jpVg1@gJq&ZD;pdd9G&iA>=DYQoXmQY4lzmiJae`W#WXNpiV z)HiWhIPU+XfH$q$Id}p3L6csc6t|c4@nr*iRn8cjuGOA^9G*sFwUQerF~= z4tK(JhEp4)sdd|q@LsEFxSMn@85~69c78M>$;b2p@s(K&QU3BV4YjIW317ccxa+d06a}c&&C($fS(BIBxdqsJVSl9oQ)=71B zby2f4aKiInrR9v`Uu#>w?Moz$g!w*vMrV&&JHhF{$({KYuqVh3Lp5+SFViwHs2wXn7u7IOKMxFKOnWxj_qJ{w7WVqk|NgP^yeM*eT@n) zR82c@!eY^Q?FrSu7n#bdB@X|?%9xkDEYE$qf403t{*)$a#&s1kWNTNK(UzA;qb96v zw?hLL8zozB;>i=piy8Y{G~l1)+c`MqrdfgdDI|4z>A7{RRL&I-*j%l6ZH_7uYD6RM z{S?@frHjWZZO1r(Sd?_aD)c-%b?bLd!eU4OA0-#SfEp8e3R~3|Dwma zK>)-V6WyYc#<=UzckH0z0V}#`Us>iU%r3;eh?tWiNSRe{OjL<(>M5L2VkSN zLCJcKpwh7m7_0F@ko8+)gMY*hJq6GzA5`HK2YjQa%K-5pV{=@zxGH_r=MhdRB-{qN z**HHwdPnXD@AMMB07~zv(=IwTf@#gsuc5D4KTqS?^5)ds_w+_hQX~vCD;KUDcR9#q{ zlsXs8Y-?avbMkbZ=DcmGAPy4GS1ox3?;!Ev$wlEFE*0t>Rjbl3A8$*qT3}Y-mo8do z^f{`I@%kAMY14TZ{!}oNangv>U+5Tj=NgcXPgBSGcPV!qtiBwsDrjnz{Na7_CR{Vy zn}AAe&q||Mna!hYJMt{qKl;}S*JJmBQ`+0<~hVf>81s68=c>_K6}=N-e@mH z)L!dwa;cYhv#<7vG5(ii>))TA*)zPmGyHy(iKz|8UqKM@6S)HQo&5oatFA7dcfo0? zC&#yHt}Y6U5VwYB7D29nPaZ zrrnXD5t5J$ZT|31^2AewLf+U#u?1`Q_vnvC(wQ61Rq}Y(hzNY(+B_&6-9=c{!j(a2 zHWsUIa(WxkQykL+b-=mYG)LER=IjxJm^%xA0Fi|G`K%65vvYGVWJN(- zw-qiCf_QkZ84z_nQ=JWYQ7x<(o*}~-9ev$- zhwFgP{!o{S`!L)j(D9tsPrB=8E$W+MGS%=^5;u%WQ&5+0pQn z?I7+3HgtIGP6R46T)uksYQCxa41QEs!7+DypYS0SU;6i&i&nL3M_Kf?+Zf9@P39e) zfLW70UTCUl%$TR)nKpV|F}_$0l#t=Yz4ll*^w+DFvxM9Q7_u*gZ5HyQ=bzT?BwZP* zVxiaRj6v*KmB*^QsOMk#4HSu;q!|xYV}wQL*XXe+|B#KrYGixB7sw7urRhEl5%Z&`}HZe6dHukyJjAMz~oWY@N8O~D(ux%$+E`fjmArtW9b!Il~jHY4| z!aP1M&Sm^2&%b)CMtduQ2G!Q;D`(qRI>o$*h=Pa|Wna7*_}2_zA+!Vui@5~_RsQ(x8-d8_ z=`<5askm4>SaN&%O9;Qe6FI?ot2D?vP_Qf86BImm=D9U zN^@xvqLxs6>HQ6JrltIBbMvF#f`v%m^XIWV9hZ*y%QA8Vv`z+FX18`95d|K;yR?;o z>w1k3W4qrSb2vC4;`1mf8aBT&!I|l>y05Npe;@AV_V8W0gl$@_qpW%$FI!A*(_Lg| zM#NL?xNg|e?cvCW}t{+8N*Mai03(s6{Xn3GcyF*Vp=yjoPA0V&40>T1{nWtVgR{Pt{Ui|G^oE%1-aC^M31 zs8-p{P)pN=7_?CHm{^V_acR(gu1wck5a=edn{9YHnDLHny5u=jq z(Zhfdf6UD?HtnjbhA^T0bXjaQWByLC+3%3~J2Ia(F0xmi6uSksTl0;wi$-4Bm{GHK zCSroreIai#8f-G*%G31M^mVs?f9FF$y3SJ;Rza}Rfj3)+|5sy#*Y6&oA3jTnTVHkr zmz(Xyku5=F>iJ6OlqzPTuUc}|EuXwXu(wO9wr2w&@Yz*_P7}#za-mV)qN5fZku*tq zi*f`hRagJTMbaW1x=@TcL&peMzM8OShVrSeY=SwA3l5}d=(H#=S z9-H>gj~J{$%`pEz%kjyEomaUBLY;^a=5SNUMCkKc^F!9zGqPi{jQJEVs;x1*gEt~P z9EltA*B6bQemLJe)WLbSwMNl2S3aUi8$j9o!KE4GXlDguZ=`@dwr`UtOZ0yqn5PWLb zp3$v|Y4r!2Fg~gp>ejK-OcA}G`s02nrpaSVSF17F-D-+>Jz1cAYYMH?<;KstIX%Sy z?74Sh^6RU)!O>m%LI(070JyvV4kPhx-`Od0SXiJ2;H;N#yvzH1G&GUqNtGv+7E(Kt zY#ZPtwv2+2$4G2F1i_FDf)ZTN^75-ogC^mikJcUc$T)59W<$f|$u8yssA;3ipCaXD z4nEdT)vUg3@*E7+&k*&(7O7+OnwRN_K<}zZTY&-SCh&i zY4L2xB%LE#O7R?3=(Y2eQ!Lci4`4ko0O`wcff9|cbY>-E*=uAe5a{hbd? z6JB9Gj};|!sVyv+Q!tFiCUQ-c+fO2hWM%77+S%|g|;?OPpQ;b8K%8!vHjSM}Nabp;O;(%>diL$)>CWykLbu)%HBXGCBNh(=CM zPGV0$#_mCUyfEFqmAN_5KAAZ7Z!XC#`ZfR9tS_$X6i~74Um(R6K;|!$gAJr(N9P(C zWO*))6=I^11*#cDpnmOEH`OoIR*`3B&Dm_>sYt^;MVz)Dq}lXz}8Mp5+rRPyu-HhouFpL4d=q_Siv;-{g!0` z+Nfw^iTu&~^Y7S5DNTPx+1wi5?r(HhR(6%(fQB~R+o#D&UE&r)MNF z!2^~#{nq*Y)=>8h4J{U{{Io!DnpH{OdPZT{9JQjtP!WLUW$pJ)n^k0E!D+n&wI7qR z3t{jvlOD@M0Wh6e!@i&8W;}Ss9I!b$8Pl-s>I4Bz&8bWgRr_b`{05Kt4H&SWTun+} zVHP)V8B`%&*Rit(Q{TqY1JWK={p^0lw2lP}D4_MrVp0v)bnH~4?|)UemQ{--2PN9Yn9kayh$x;JA4l8K8IiO% z9r6#2DJ|)C_O(4D3;z){i2p=Lam|g!pgS$Ah6^_CXL|o-X@(_i^yAj+dkX=qsm4|r z%TKCc|BRD{21=@ddF-M^e+o0~h_m9Ud7vo*mcRzrn;hByU8w@mSkGR-_g%ripMH-w z;xBr>){MP}Vl45jXxO@Li9!}Uq$PT5nbx0T(T|d`?)%1*RNc}dSGHR$( zr-afgKT8{M=_fSxzgetn0WpR*S8#R43vr>281SdfzP4`frOHejGx=<1c5oPD%0{N= z`H08gD}OfQAg}0)rw)5Si8j!drEF**-ki?Fr)d7%?UI^*>q<+2i%R;esQP-@80F#o z79vIE4U1MF{WV8J= z(3TVy^)&Ru)tms?!8xwL362k$c5EUI`uQCD0}ocLR@)lwm5257_WT)QUh;sA1A2;8 zma$SPD1d5Kv|A-fm<+6Y)ptbkiKL6mtc zq^#w1FMZ=+MJyS=BiRLban^s30@g#ZuwzfxlX@8T-5IftDE9@(sl{y*h~Sl=IuMO# zIk1-TOi5`sdB9R>wtEM;@fP*@NDxXMrN?g5>=3jX-IBNWn<3D#d;*aj&8ya zKpz3OoSVZlAd{ytoV}OuL(A568#l`Sx0-PA@DuSS0xBmEW~27e z$ovLfc(E-96jRv5{&;{*w2~!I^1;1VdGx|ZN&KaO`_)BnY*X8-vAVrvuG^ZznT=mJ zV_Bm&ipGou9GwY`i~i!-^xP(gLPkfm;9*_H;)zd=aI~E$;fXDLbjyLCieWGm{^9XK z^t*MxmU76d=>?gSl&$Tk9|(coDcDw!nL(YDVBE0@>{`(2G#UQ}%)}ZwAi_WJ%cv)w z#;~|f;sG~L6!rTD`yp|(8~j26S{%|3*Y+%IDt?*GyUM+aZ#(iO6j_^}sWzVtFoB|L zsoz8qlk8l(CfWLnpZR_y?L^1zzEd7Zhlv5%t+|c1{0^R`>SopA2kbwSK$2kXhB7PI z?aO0{v>j$vUn)C)8XhPvhS<}f*RK717mPnX4ZBueE~csM3P0sDe>=+8rIO84MsBK{ zN(FJEizut|qVIdGwKGxlT6Gonx^ON(y2JW+Y`hsH`BrY#$kU%6#{1-h#^pi31OCKm zo77g?zrgLvbmX4q3xVnA$+sX-cZjZzQ&{hzK(bV*!Ca?T_SEH`0k4owBVHQ_&G8t4W zkS{1i4Y2U=2r?ge&3926Ot@`6k}9210t!O^#_2NTDCN?3vRLQ9ne-miSGkjB!3fn?B!})=MFG>s93dXnCRJ?tclj3?{1|o) z4}~4YM_1-{#tNGcngWimy}FS6?0!i5T`QxR{5UDmsMP)o%%gzbZtF;6OF1LOK^2u0 zF2S~zQyp^XM?v>TbFaFop}+swM+qJIlHf%%oi5#C z7E>7F=p>iQNQJS5q!77uqj1liK&q44I2+8-DBOc0d^ZnVbbMW} zmIfU#GpRtKw=tY8ay$Dy=n++bn>wZmC-dcmkxr9e7%EY`oBaZc@Vp`Dbv~?9hG+FP zH)IhHeYc?Nj7<4C%p6K@V>4co*M}s}yoEGy5?4b9%2-cTi%7!Z^rG?IiClE_Heuo6 z(67gKOK#+&*)r6=2Q;#;-#!fs^V8k$QVW9p(oQ?Pm;}beV2)>OT*Sc?tn}lb&Na#L zXMfhJPw!w=B#wpIk>B3)?Pba~9BDiK&a3}s zix`JBH!n{+Jq5{Ji<{XbC3-tofGSy7egtXVyfW)I$I_)U=2wvExiOYub7c|e`@Zf^ z!O!)5O|DKk9EKu^;6OEBp|EjrZhYGEsbxvPYkcYw@ZqsG!Alc?+H6>Bn4@t#9{~S7*u(%r z8_tD%c4e@TVe5q&q_LYn74VG%a>U)9(4rx0fpY;L7%j5bs_ z4kLA->fujydorj;(-FQbit@+!c;aR>R$yQ&wjwkmz)Ns7yviuy8q1dTL!8A#F)TB! zVA|?i!)f%DdxA&$a`Q?OiN6ZUo&edn&`^V#L7>=fA*O2gt6sm)pQan!QWZM^R8_fyT_(xf!i4m_Ksh=;!*7yuZ@xNj<_PWvEs*=l zczDDv#1P&1OH#Td5$gUO8>?y+keH>} zo=&|aMqu*Ia6_}WJ9QveP0DspT^u%+bieRvCN%OxKdzT1A0yHd;1stOx=i%;H~Jel z%;3kHLNTBFG(o>!6e1W-hJikoNs(~6)I>&awTnB$9zJ2^`{-9drfH7{OB=r*>beHM zD~$k7&fgssA3vqgMt%WkyAhnnhJU-FD19P$a{49U z&Dd!{c*>FSqMJ*_uht-|x(l0VyEK;oDI}fS$#j5FwE1c6qe|BsK1&&&5+u`HFfYHi z0!3CUysaSlX!Ap-5cc7jh;^yGbY}6ZF{lzgZbrN!-5E~;k={)S_ioCUSc%%G(qQyMZwJxn2%4V0_Xm(X@txVYD#?iJ z@XcU&LX#VP*+CYE<8D zf0=Cxu{W;DBzdn#&8igh$3PwoR%K!a4o2}7{`G5jnYhI~#zimqH`m+5V)J1$ANZ?Q zerP={RNMR8(Z85EI9n`j~?m0s&ZE}GS_{(b3{H)|O@&=gbda}ZZGe*4aX z*DyL(FmAtyy9^ix(0=lfI|!G(<8 zb+`Kk;rMr?((2J%o0H9NVJen-ekg>X*A+r)hiJ(B!wl8leIFr);o#sf|MQ_tw|=g; zYMkG<|01n`GmKE$oq_ZllL+BK*3W1i5R3Dz8YmRByKX?LA`e>h?~XXNGYpeNpDfz)aJ*+yk#Ie{{ zHnI+LzTr|or_8{mGv|b+?OBSLf94U;f94ThV{w8mCF6@=TDvrl51g~+C@gRzE}ydR zKRPT>LNkbb<9CwuA;51kPO5jI(OFUcb;`iA$2VN+XX~hy3 zCjU)hJRT2tZ|i`gOyt9&W5m;(1S~8q+;Z z=5Co;YTEkTNW?vv(eWtu#~c=?mAK}E-^c|E$~O>_nn&4VZ~X%{7a}T3ffCm4X4kh5Njzr_ntOh0VXPnTWboc z@{(sIGaX$#feKSwksSHbK6iBX>YM1t3wDq&%}@#&s`e8TA?JsJHy|bq0Zm;ypm%eX zl+xv*u$M2Q%6n-*3 z^qpR2G+S7T?zp%b&q*#+jii`2vyiLgDYy<}uljNIpk{=(x4W9m_ru*8s-H0C)LWFf z7KEeG^lrYnGR;vT$@nV@U3X~brn)0D?{kQMZg3iygO#1V#Y6|k$J5%3KMDuCj@v*v zV@-y*qMu+AIVss&lmUM-*r5#e=^wDQ+$+_ViI}j4(hYwN)7f*Cz`f94LZLGc5;M&) zzx`+X_EVJE-t{1XGpV=cfZ3G1ia3k0H28`L%md8#Z`5sVd2uR=riP3g$b^2>U2ibG zCm~w<`bic?(fVF+fia|>6I$H$3WzIk=9amd8sEDRh^+iq22Y(gouMU5)@3y`$lVpM z3ddO`GA5-*LOfS^YEmaAmToe+c+@CVaABdV5?*J|p#LUe*=`QdhyxzUI{yHPP+I|% z_}TolztGu@XQw;VmoDLflt+Zt^T*J zFBRcM`PMBj_>-_yR3~afaa&VFP3lwt#168Fi>HGT>zJpjxUmn7ifFvnv|{0H3Inv^ zwBnE3NC{VE2eudWZ+i^RiU~>|Z(*wshjeN(KGF{BH`UaBea);I$Pa9jubESK>2=P3 z!k8JCqp2IiQ@WJezSx;qom>0Wx#!Ima?JA%w;u5NJTTNsiqTRR`|XkwbmVuY{F`fU z&sXiLdJ6;JcvcAI_w{fmhb+05fumzwp`Hau&pWoVtE#*;85hq1MCs}TG4)KF@IFN& zxN6dIj`VL*4a9FUj~RAb%X@VHE28M?18)A2|A?o#WNj-(EN$4$S=OvEt@yuFlz!Yv z`Oo+FpXo7o?=yJ(Z)_z%UV0tm{+|Fs(!~E4FYf=NCv&|#WngJaRRQ*G*qSKzwQCKYcF4LF@5&+Blr?Z zuMyEhc)!80h5c>lsv3DA>#PC?1TY_m%kd!j#$&T3;U&m6qfJ#44^ke2)c}uaR9Z(25{4 z6j>I%Kq5_#9vJ9bK(s)X+6#ltE%QKwWpir_gD-%WRGfMgx)9r=8o!(>P75cve$)tN z4B}-j7%e;aQ3dzg+~g*l9J6VR#t?JR3fT`1{i3jDL_+1~T@^%B5TgCr7`n&oz3tW< zFY+`fmZ{~xCX-d$pr~tli&Z3&@yxgjvQ75Z&G->-{A}N6t z^>t_H_rR=ch(jqk0~ce^ko#P?yKs1*`-&keah^-tk_R934DL*#y^2Tl)uDF< zxYE2fKi3_2sVLV%rg0crafqL0A(m?Rcv_EIia&|BU6Pou#vl#Bo)#kG;na%o*@N zk8t#_9hx|4@On8B(P>sM&@=-h!qfY;k#u)<53TJT)sDAw;LUY{o9S6m*2cXg5)nk@ zlXI}r7mqCLy1Dnh_m@0;ZI$QnF>IA$xB8}_iMv5f!oGiSstFmsQcSZCn6Y$)A5EHjk5{+jmDPZ zrGYJmBgVs{b}|zw*_Xaq$uJ|xyAKYlu{6K^>(E&Ph5Fk!_ZwNcC;E4zeW&D-xgVcm zw@;;L`b{9I6nd9WJZz6TL$~Lab!k6Z^E9q~kD@7=P3l{x=(w9OHF|d5$EClex#Fk% z%wqfGdk&b~)ab}=wVGROcr|cBT{%6mPdCck$?_B4)=qsU8y*po{8#|B(PqQwL+)n* z>4nRJ`(wN>g|RWmJ7)iTlOi7sE(^(G@`}C!K^I2%wopJhV(Sbzvtx%I&3&KVZm-wg z7_jJAr{B-wV6FQ3dC=fh6}w43xqbIgGmyElpMO6OB( zSI0)mxo`cQ2W?X{wTnQ`#WYfIj6TGUxtTz;*$}p3xW)BD;kZ|!*NN^8amU9v#^{(! zfh59qqvHjQcl+%D8gw4p^HR@v&yb|)F9%wI%MHE0CGNh%PAmHchqBO0I`cEQlf|R| zYCi4_aJOG8rQOLYY+FISz@sm%PnoR$_*$F>PI;)=<5%-VgzdgF)IhVzxZ6_^(y9(6 zciE?>ja@sxXE7|?umir}yZnh!2 z_WVA9l4bz3L8heej+B5Eu-3e~Ji;CAgiikxXLD93mPz;s@npRG_Bo=qKalVYbVgh! zedPR4W|hVrR3Cx+BLdH}qr(}!8|Q9A?S*nU-}WyO9g~+?oW<2dpY=srs^;QYIX8sc zj%K1%S0N~i8{z!I&hAEe2jR-Dk0l#E?e+&pE*~%fR#H(sS)SO-68&R|V!{b(t7X#u z9d^A%#PfvcV0Mp#K)^bQ`-$#6vLhT-jQEK(6!ZZ0{CgQO?@bhPYp(*UEU$gtptej~ z04GRE{qz42Lp(QTyFainom(xoD>u>>Fk$|LJ(?8c;Uy;-ARyP+U93Qr!D=xa{a3|M%P4TNG7Gm^C6R)#j8sBS>|OY&>?!h|xC^Li9l#PNFE-GP<&dbvwhpUJ-HG zzMrF@k^{-&4ewlp`Vy9Vxa`qRWkTTMH@0;O-xHx1uYDi6mUDB}Pl#hIkHO?zI$=zy z=j*cK3vyzfhR9Z49P~rVK2qz z`w|7XsuY&y%REXSG&YSGQ{?u)!RZFLd$6bY9{T`kan8?gmN75-GF7oaVE0ntTu9^1{7fF#mNlho7i zWLH}iu%S)`JG-C#i#YtrSy!WxIN?YfEFZK{r&G48nK?7HXB11#&SC+Lwc5|1z8Y*g zLTG?Qm_A5r*TOBL&n#*FLC@eRY$orXG{|g4U%aC;@We!Oh9L=L!6b-CX^iI5YdhhO z44I5S*U2|nRozK)?L&6?Vx;4zOcc~CHv!nkQO|hAZDuijzdv0%U-E<)oZ_Po$XE-u z`o(Va^zbazh6NL|^QYEt4U;SO^^^QWDkvMj&*bupF1JA3M)~-PwjDK&YY!OV1D7XO zss_{8Mk_^95(gT&!cK&bZ(leKkl;hxeaMAzEY9|GsSW=5seTOeGGXEZF--pWQ~iBL z(H`omb$Q%82}hyTUrRWr7OD?|_Vu08DM4eFb2S;(Rs3w_xks6fKS$bQCHkACkMS!2 zbacb>_tu3>2(VifF_Z^UoA}=jI*QH8&dxrEdjreEQ}gayWK5DOrl#4x4jbt9#{h1oud))>(}|0e|ugunvP(%Rq3e8NSv&28cb7LzjH9iEl zT94GT5Xt8dL(tDbYP7O(;Im7gM63l+H~&hhZk-y=))R&AU2<1hmTNj(rx&g#2^!}T zyFJ}5;`<3m9Q&NC)U~yhfVnybbw);V6lq~HZwZ1Qg?;|s3V_}V`ztP`GNS2f7~Yq$ zIAqSj!dgViFnu$}D1!Lnk-``7dV&CGZL0R(w+RCH+$~0D&a_ti&hYl}5wk3}Mdcn} zvhr{~*t(>}8A@cc(k1NdEC!1AnP;ahyUWkow~+Z-R{jA92=~<(PY2oX$Vh?n;S{+3 zx3+LTgpRr}hpBX+=F!mjUQkjJ={W0aZ|nj8QNz5{GGbi<4yo8d2{Hfr0PoU)9FMrX>bO z5(jjR_v|2{B#_td*q@hfzw>VKTcMZw&^oVjJ)-LAy$GATlrd$9hEtWtac3&t&<;nvcI$ zghp!s4w(OX;7`<>!w7kI#|MKxS+if`|k+CN*S zr|!lcJOY}87>_U?pjy7CqJ2~c+jPRuJfvt7Q+Qe*z`nXa&2;M^iac9$w6~>+EO!~` z78psTtNnd-44|u&i-)V!OwzGgt_)XaX^_!oa^iJEk`sz8wGaH={lsHpBFyX$&OsCI z_J5CF#%A8q0cwf&*Y@=;uiu;c444%J)&8~+7{v%qCLs-k9=IeJls^d0sx_a_(K4%@ zh?%?wqq{|EcuE#fa~ruKRtd-&o%|H3ZivsFACLU1@a3oPC*I$c5F&S6a4qN!H$Gkw zp8k46y>M=E)nI!lSr!NS~Xct4AhP^vw|P~{!r@*6FUei=Joq4sa~Y2Emz&- zZCK#u?LA%xkPo7DQJ5V)uVD`E5D$YpkGXl@vh(wPQ<%2pajKfEU!6n@CB@%HvVTEK zK|UBj>Dt5h{JMFbm?Ga}RA7y0pA9vwF9APu_5t>DJHpND!qc5!5oq$Vug9g=A3^`} zw3waoW(FVw(N&NGZ!kNgi$S{xnw71o2A97T?d;;X^R+!s#Sl>Vwy{gHw6Yg>R{FeL zXFqe&Lr$BzDDJ+7(O>`;!u3WVx;uumc0OmP)4sw4q1s$Tt^NlZ!@7RWWvt6pH*2*G zK0D=%`<$5&UEESj|E>M)qbHAox;E%TlcW*HkGK~Tfmb?2<9PLx7nT@%mZ7U*`{>b7 zi~-wCRzd!x$h8aA`lNMgv>JKhg@3ol2E-KoEY1#A5ccS#NZ?Le3}xNfEH#_RaQ^}@ zT|gGKH1$Vf>tM$eZ2J9Y9wbBnIb!k4kNoLj_(cU7dzq9lFdBVhleUgHFeGD8!&Xdp zZi0!T>F;mcYbxTZU_YL}L!$oY7ci<#;YW?|WSe_2kZc|<463lrXERYfA$oBl#5mj= z+$3ahBy4>ix?j6dMZO>&a6%;7DYVyJoy5tXn!I(AbnlfV_HKHlu9bU8#bC?o9p87IDPKFQQh4yfk|rpuz2D@ zzH$Ven5F{oI0_u^^T1A(z&vq`x4ZB90t>qMyskB zD6Dlq`hQ>%wcM8Xb~X#ygQew@iv3xokkxf&o~of=I5ad#-8gZ4Y1S%}DoiNRz7fLb z*S5Cws`0U?>lx}ajXvr}=)XZu%&Yx2sEkDS*x1=4J4w^r7Ju3? zWMLPrM2v;PZ8|?^Yg$j|)9E`cGI}Fr4T*HfniGvBLT*#~5Uv=CG|=3onv59(RmA4r zRu>YP1-@d)D#&G&d%XT6^nZdQJ;&>1%+OFjPpSAA5Q_Y^x1VQWuO??!*ln~}{xGUD zjWtUD&gi$t6;TGar|T(Av(>{pYyKfa?brW187k`Rj9|AXhe-t<2Jj12z_3yi{!BN^ z+2yM?1v5$C@<=S{k4#`?#M$zsi>qPeVyJV?wsaB3GhY zb<4yA;=6Y*e~z&TR-Y>1xFVeSj;^lN{+arlbn@phjxw9u8c^PBF+`sxn^gNmv17h^ z+Y%U(@YSDrKV)8`9y$8*Fj5{#SDG0kw(2vM5>h8A`TpV+*=&u%u$vKX{*D!mOnwJHel>)%%&KhfM7KoMQ2ekNbXA%XSUw-8Zq zVxYG|lk0Sf9CS@lK*vIr@)&*^IOM!a4qJL)Ip6lGJv5DDz%X0m7cL{hhT8NYz${hW z;?L0+#r*zZlor>SVG~0xv_<%A7}8F2KHKBy@882^@IN$PHab4V3|8yhrFfg|^Eu_2 zDQlOPga}%q28fY$ODFJ!Zq>IFuIq=SUK^TP75h3?6FRoe&5vYTrkSmbXMK^R%`>h& zwd$I(_4^10F90G2S*c2;=6a~ZHQEHb#oXGFz@ni(UXr0)PnMfu{By+>e>NO)6l9pM z#q}BronxLlY!P4o4fAvi8$8E6b*tH})1s1l0%(VtUyRX4*}#5R$B^c}l7Rs1QLfqO zbJ|c&zX9xEJ^WaVA&vBdzhJYAnce(%|6%V!Yuc5z-vnNdXVCwNg>>+>PCi9mujV%O z^GsBKC?x%1w@%xFenKjxo>NM>7i0g5}e#ptkIqJIET)Qm&f4rUO>dklTwKEC#EMx0H&3KK6btxh_&*Wy_5 zv6$hje?ZH#$jCbm8d0;y?PG57oPX^ynol+)bO!}KGy^!`JgpqxR*`YFjbn>b^*L}0 zl~we2n{CvsyT5`wXre_y9PmCbUOMC}FM#n67w*!7Q;inefzGS(o}}r(uk}R$kZK|X znh{s8Z!Si$72HM&--+ss$R}k^7KLWL<5e{5ZP!v=EzOom)16Nf$^|Af(GH%RJiKA(Ig4=rhcfIx+2R$*AzmJ@oUOSbA3Fj4WU1mpepF8c1*9u?2bfXmIR@`mpZ zSR$d^E{d=}g~!E4ee&YYJM5Q@hRIAaR&iBDjs6}xsw3+loK=r-;0TuTF1|or@_AYX zS8O~d@zZ}`T-4u2?th1g)=7gPT&M-}hYM>+dik%bh=7@d4F-&v-U%T%l4d08$L3qm zA^Wqwnt@Xq;oB~%Y|!sH2>*WpR+P~z$|8X*xc`T`_l#dja7npdJzCIO;z^g=JT{NYy{qNc&@UH%>ALJ zX31OQd_U_b4o$;f_K<%xoA3ZoBP^gUPYjQw11ZZW_}$#9tsYU_dF|-(Z z@bWwl)n9^a^p9tSw`1eC$V5%KE`9sL$@PGZtlDZ@rrj5NCuCP#go#aKsJ~UzVz}Cj zV@8PX6n!Uiyn!$0=v#eNy2Db3uachi%NNWiujs2jRS$f@I^DQ=53jL0AlgcTTxJjz zz%Kte6@HfcYltGP*K>(fZ&(9z!N^ybxRjarbg@CIy=SgYNIZ#3&<{e9%6P2y* z^h`iFeH~w{l1gzM=iP0cBl@^BbeAus#kqgW1Qj6uMvxhkT+i1OBs9KTRFTHJ9k#UL zO-tWiBgs<}horH;Z+fxvzKbVgspcc_Wd{L3MSq$|>30{N*n@V!7d)R4mbLjjDia80b}h+HO84UvMFVG0AEMTbWkH3{qvhLibk zo>Ylm1{2mb_m!vUug|)Z3XtQ->ZTKEG*k}=H%9t}*so?7k4%tyAd7MmCN`#GR=mKY z$G`&)hRR>UstwVB9cc2_S1N;cCza`+RqWvj~~w>eVPQt1BK4eTSL~via*_J zJ?$uo)~Al@qmjfddw(A_hWmv81>;&g1H62@-LWng?IhDQy5@~Cy*)y{4jUd=+&Ba_`DL_KgAj z1P7!C(BCIz6Sffn#g0Jq)F1GNoIsu&UF5fVm2MfrM4NgEmt5?fdud?JNvRn7IWhoc`ekxkW@$ljaXrV>}K{;q1>^=F<$3bSe#KM`-f`w=jvE3OS5DH-Q8z~Z}Sd|_R>Bx zl?@xdG{WSHVeOsV|LGjq8j@RAyCRseS8mzdf-rl^X+_cCnY6ZMUM^;pvMNMJ*BR0Y z+jY{kerY;NGhAWXDSJ_6L&%pB7cXD-L)^y9?-rQM05MoZ&d$>p9NPQ%QdjGs*hNiR zJGu-oG7VWEpkfstdjmu4v&(yu%*Dj6oLkv?${h3a(M69vE+um z-OrZPrJpN#Ur;9O?=8%(2PH{`CDjx|Jk6!pZD%h$hRGRm| z^m%IsCe6ean*5G_pRPyxSrU)`#Rl1QSIrPsjn-0;Y@gg>36wps8r!>)8!KC)GfgjK z)JyN&R&ZAV;uh>IB1Uzzs#wZ@hQoWux!Kds+Pcx()};nNZ13iwGeM2NL-Zs? zgQJ`bO+6j(A{9^TB|?e1zoqrX>J(bvP(w*T#e3~rP`+HJ(B@&;^S6^`dBKJe&q(@qs3%SLzsOVdbN$_2@0PQxpn2E8J7op{W%8viG!PZCxjLB!J zSOJ4Cr1J%6_>?ALHeUZ;>|!;Ri*>M>e=@WWp9!}JivSx^t1pInuFn4VKP0NZWV^m7 zXC89)YZ=`5w` zo%9aJk_`&`!Y4PX6Q)`V_{P$s5Vrj�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�Tsc_`oUxoYrisNg@poc8Bsc+nBC znHPVji~TW|zn9P1wO0TJbcgNJ5M#U^d`erYd=oVtrXrlhdg-LLqtTmF-0>k`ZblNi zfB+20t+<^g-k8;w+)^YrP|FeFBOJ0@l}&s&Cr;I;YWK&-wDR>f$_vh=iSecYSiZ06aTl-9) z%nE`PnDv12Zt4clK!!YfhT^E&?)F$woRCZG!rYu>zD`JtC{DJdYhxv8MY-OS=)r@S zU|QUDIy%(ue$J}~Z(l*5`VSHjHp|Gf@AsbzDP^nN;x_kA!vl#+_S1vf@e@uv#6j@e zf~g&gMHD1FaclOs<+L{uD5Fk-OO1C|=9f36f{2m*6@!z`miX%&3b8DB6BFjU51|Ue z2{l3VJsad{=D5EH8>eLQ8<>(#evSU*05tzzijymhI}Vt09OQPfdmC1oxX&Q4~q7f2L!d9GYL56Fd;NOSbvb z>OpM{t4Z`+oUAG!;U-Zx9Qo1iR+_Ed8?G3jX^cMb-^3MOEAdxrS|AvfZUxT^rL5J| z2kDAs$q*&g@diH^S2RA`CqMeQ|H0O@djxNOGg{RFd&8bw6GAr-b6nEa|9d1=IEwAr zz2FC9pG^%EjX-$L(PBVFDa92)5@YD}@iu9W#=(_GY<%B)V222sb7RDl(ABm;djrmcmH7+2FIyXn&i1VoVClYMarP*AgwGQ}^NxNlT6RX(O0^#`^=*f&|^+ zdHg8x{`^uCm4w4aLt@5hFKygaQqraojfP&xGVnHU9Gbu=8frtzNb7JS?V7XCmf)?_ zR9q^WWXFT^%VSa=}YLQ~Kl}wFX?fuD%Ky`oN0)1@V82 ztOfHghI1*$3nA#j$+i&P7dru_d6R{3`ulkw0FF=G^>+*kR1zV7?N8~^%bbg&vxEG`X6QfNu^3AH)SI^7;qTbE4*GZ!>Ezj* z3G_~J0Kk2(6!nRLqyGpnTX+cv<56rqr*2HMW)PpTv2D7Wl%J1o*}mqTyNk+C@5#lA zBtXTV4Tk=%vqBl&S)kVsD?oZR4YO00B{)yGt#$^gPacCk%Y-X44!iwgatzHHHGYbj zyqK4tUp9NF*!2q+Tt%BJ8B)hILH~2vc=*?fo5X1LUxHn1wS#dhWXe^+Y+P9i?0CRn zD58gaHXXn~`_avjHOfqEN*ddZ~!+-X`jKXPs^{4w<^wY77|eyW@&)A z=N<5rne_dB4brlFL8wci`<~H^hb-145a=1s2U&p$Ag_=X@g;*8&Zru)m48|R6v zh}!+@L?F+72}}<$1|cv9+tYDPz9igE%W?&JRr@VtNu`^h-dmiByKU3Zd+uHUN`}P% zdhb5FMX-i&J1o2fvWfOj7cRM@d-%a@5ufYN%>iD0eipYG-+kO)l76BP{~n-7(6w~9 zfaB8pWJ};kGd`!z{7I>=*ZJ%%NQxcJT_Pr@lS>lwq7wDsL9ZZ3y&)hzhUxzO`@lF? z0!1%J%q9oUcg$Z}LZL3aFd3t|c#*9yU)SK`CEipfJQ_R0qQOT_w|^1L;mY*%YfswE zQOj@o7S1`Cr@e6p-%tHpJuFsB$4bFzW0`&#VsQ~RlE}iNg-)9)_p(A)Zd@vp=^5a} z-t~O)rR5jTpMut6SdZY=N>yj=n?d24N$$;%^0Z8oBI{v6na4Ov>c2d1vK&NoYy zfjkSLz--l7RCkQi+jldIU7QW56Bl{EpKv&fg2D;E*(t&nQKJl3%H?gB*s`K^a6L$q z@ync&M+Q68u^rO)i8o5co01sb9JZ3ijFK@($>Vjfq`Zh(LfgLT=|iO)yw)k>+w z;u0Qf{>SCz13TGgZNc~h=IKabob!Ml`5`RhJEkrlhm5t|JoIHN-o~*WtW8~}SJVXS zabqshZP=UcLB0W_vvC_lNzzC0OU`8_gqh^S%jzkwm6-GL4}{5NTsGNwg^`wtztkHd zxbbn&yQ{{?BaT?>lXwx{8qOARS30M*p${h|pNBYhzJ&#mo+swKqL)u4fUU#J>w4Uj zho{zgV~2vsINi;YJhxAhFoyGe)R@8rEp0Kc;RG(@2HMDM+6$}c=AHc&+5Es{BQUN# zP!KH~a!4cJ{;Np$>D-ogl!e;(17Omzx-9UbG78};HWGcJFGaJoMan|$1npJl8Nt(i z*n45Bu}JH-sV7Rs{|5d1auHH=+OfFWMj*R#E;059d32FoGyPr9#88$twSfViI^dV8 zw=$OD{rf&159_Hk=Fm_D0YSmR(wOCWYh~qd!0eX|p-eZo%<^V=E_5DiX29TvLpkG@ zsW&1-mxHV7_NAzIcX!j?v~~hJs#2!irL9^=$D7y}Z_crr3S0aofC)rKa@*I7205bG zj4Unvd|p94uw0v$%tK-{b4O^`#XCR-iKO?|^Q{#BAogN5n&xIS=s+sF$d4PcctAZKu zMVAVrlO+Nwq39=7RaHPJ9vK_k36A+C<|PDzcZj>tB}lPFKrn!8iLK(5?wDqMGA}AOGPJMu6Rz-<@xsu#|BWbzc1qeb|`fLy*=OiKLdw8eS*CTr&>-N1rRu7SV_9?8Z2Eh&iq_Lzjun{z zg3E>X^4&{gy?=1CyV+X~&PB$DZUOJ5d8Wvx&+a?ylw-=m-~}oZqf&!ZER5VCX-n>P zD>!>7w3^x&XyoV03T|tgsAV;Q%%#b$ThL>TkEyejW-ZgQ^I=J0D)-7=M@qLTzPf#4 zC#um*;#bjz+XPX?K^JMzA<6S>lFf z8Z)!#5z~80%AWdL)YMW|RiH3;MyeH)6OP0vsZYgnxK@cAB zITM6buGS+GHmB)zI5;^2YOoxZEBa+d+=01sKXR_vU(TKO5wZp5U93@LpuX6%m(ju9 zo4CQXaw(9zH8HAb|6p5aSEkZVt?5fhdhUrO$j3Eba^z&4{Ls|}Pgg5i)DsE+9t$P6 zG#&FoYE5o@t}S*N+rtVn81s<+_CH{o$g)v1+Qc&?$>cv_5c=E$Qv_i{3-2q+4}17r zO+PCjpjbqRBiecNeUk?VsD;84llOCIh~LYP>Yx3@VnG*ps<)aTTqpcg}~aVOo>YF%q8APc{wigj5QBYWEa!+h`%{`xXKLtX|^*datyQFd>5o66J)r&rg1 zOtCS2!f70SUU@@9$wO!0iOJd4AcdfLrv8Xlr|S)*RrG&bbeZ$JN7Q4o6xx5uIoxb* zd&h0_p5LEzt*x>MS!{I7;LBIcFX;_}j(ix|l~{ge!e~8&(}qy$Ke)={io6GT_>Aok zpaNdJMNfZjlj-Pqzp^CVb4h-BS~OcFy?V*?9aO(6&vF&Dwb+hm@I>Y=2D~Jo9-qEA zla07@_n)vJwx|D^xUi4~gChST8l!fM8n~GLxnnjVKz`hh zjSVVPd7j#~Un9SMy%EK(EAQ(198|~oonl&@0Sm&oH$i>19xUqbl8}6jjJywm6!>iF z_OJm?Vm>WYbO8VxA$4c#d9F|>Cjdfdl$oYbk6+Psz>-{C2nPIqTN?lxmMIr6ktPvb zw&4QU6+G5cWc>X65D;1$%VmTM#zp}90q)r`$+nAhBT~bEBKHWy&dq&v-WtHSQ_qs8 z&QwU2cXJb@^*VV3_&+S#H9xJVYs@H_vB0R#rPp)=ka`qMO`n25!pHpl(O}d*0HQl# z$7*l{P+TDfvm!7?T_sBO#PQNSdzSM~GI1f_pV4fxg7wj(M^p9g(LfaazSOv zoZ-}TT|haN0+ASSMt5{{tVr)Zo2Xa^2=NvB-DlG^-5gqyUjWh>KWsGSawDj`;6B{D zfyiiNQ7F&tOyFSf^KIXm$>Ih4yp;=|M^NY*MIJrlhQ5NF+;9VsdNZ(WZr?*LuV#_Xq%R04N3!(9rz@zrjY+^I$W$+NPS3bsuV*5) zqS8>e?VkyvGR$?+XJfUs~B$RRm`-IY=DL*OtBRDn+rCNPdtCe`D@qL(O4B%^VnN^wcb2Z;~h+5&*piA zqT@zO$NT8OG@os!SBezZM7LX+k_(0s#S`#kkxL&nO$EiJq(@m1e{*>h9d6lH4qG&Y z-c3wT?`qG&t4I9}=jjKi;JpepuhZ2k!z6O;lQ`6=s8x*c+5G72nY8Q(wM^R>J4E!v zn$>$#I0Z8c^k=kUZnxQ8FcMl|Nx_?UQi|Ta2~o8c=*B}-m@Kb|Paq-`xew!#pN+UT zfEH_%^*LpqG8I63RVlY5#b#7{b@ucu0z+?5{KdU4cUEEu(yh301( zEt`$PYt!!6$FHiff9%|0FnDT>i56Y9nW<|_nx4FcpDzJcxZ@|tT&}Qa&W>ZQ^W%wX zgNTYSg&k2WdKfyueS0v=!)}LOjvNiYk4jpwlRkj<{G4p*>%6L|Z#c>}lC;0m(MhT( zR#Vi!ezi2?;!1GI^i(!K$WzY2t*CG|G%>MTXwf@6rVP>`Xb;`+vXGJkdJdJ9nCRll ze;;oFv@k3pzF7gUVFg2OV=4yI$`FiTg!=~v>#dJ~Q4_hmwkD^anz=Z>rOA)Wn=oB# zLJ7DtbMZFbjlI1z;vC0NI#JQ6Xk990QyLL>k*-~0cJe2*21u2WN>VbUFgvuv>m+-> zO&AgVbM?7)Ll@tA;kCto0`g>eQL_iNPHk%*){kNqkaEBU9Lv{0TfuiWjJVX4mTttT zqIOBq*U?sr`)QK5k5SBOOX%y&%ofJp$0DU-&}cCJa@xDHLs)<|*1GQ&fD?Tc4I&r% zy`Z}imZr?*JY~TkCUG?WA6Ba$#|)0(oA45N^zjaZ>)Brwn5>U5Iq(&{K*2BHr@Xoe ztbPVSJ<$RZyRTNP_nD)##PJ>86=?AK5mI+{Mlyryk4A;16tH9*C8+@r?ivu%K(@Ez zsH@EeGdE}9$skNTA}J{Z2nPVayRJ@n>n&GoY^+v;M|EEvlWP9AP=$W~a|%%Oa9SVg zXLASZ;Rys_jfGTJ^3Tl79BxfU0}@b*GE+6+k%7ujzr2Z&(HkK1xdvDo={ogp2_o)M z04gkOUk%QIj{c1UXFsU*0I1N7PZ1IKfU9L#UhU`6ZW%BIURhj#DB2hla6s>`;KKoP zVIXNQ2}M|E&$LfxWS)rqpQ0~2%p?Jfy|c>e75QIPK4Z&D*{yxm3I2SYlNq<(%QYl4 zJTX$nxaO|AWY4bYwy6C1Z0gH8F%SBFmxy;y=URzsegOf_2BZ7CRN?&?@!SAw)$PTx!VO^%Le4fx~aefhFLDeHJ_Y}F4tC?H_v z{50^gb9o+?TvqROZbytmc-{<<)Ickxf4r$4L?c24u$wcUC{}Ryj(*#&4QBQ%MeBMk zVo+J!PU{;$78Myrmy84(0?t4nbampVdGv^XZKQx5YzKiAiNMB&UG&@*8-8(y#yTM5 zU57SY>I_~p+!&$u*lXo?v&k!|tJhz!x$oBG59%4#Y+f%KV}^-5)s;IFWG_UkgN6>D zv#{oyPMebPja=p)DnBi%C;?P9oJfs(3U9~k@>#61b(JnRO1}(+zFpQ0WOs%-eI~-Q zK6tfEa1wc$J>B_RSG@+RZc5Q;yqx`~-rGyp=_#%|rA+2A=TyBMf z7yxij8>~!q;7r3zr-1#`Geti+R)!=2UEc=< z+Ps$3{qTW7%in`;(vIB*rf>KOp_Y8Q5rJCG$fykosZx8A=3E1?x>Lhtv&AKxX$-uo zWc4)&4_u~}tD_p;=p;Qmb`he)qq1U^f{Rhe%Lats#`94>bEB@8$mAR@jth_N$`jM2 z=V7>~$&3e}N%u(IF}YrHN7II;^eUGsL;Jvg_XZCMgk`R$khU;-$-4R}dC z;pS`y;QU-Oohai)5Kz!Vm)X-|kfNTQq$r(%pT(qx-`sII;Fyj(vgLBpPoghhX-5*T zJ4%NOP>Ek#X5s>L@byuPpujvzHJH{?JWT8{*!qDcpDnW23Vi9i2RWR)M)>&fJ*=PS zsj@ME{q${^@a2oxtkdA`A?V8vOMa!xOm#&7U`Z5)e!Ze*WGLzZ+I2wzHK4>y1=e+~ z4Yp^Kd{Eivim1b_aJWte8nFPlYt*w&Z#h%u=N>jsH3pBM5yAPHTZh}=Y-{^ONJ!JY z&Sv(Q5g;~#C@=v!0NU!|4`Ch{oOxH|z}vnWK)M?ipjl_xR0Hj(K?9R02=axZ(MzuijQa~lur zkWbFMOK(*Zh21jCl4bLk(nH~z0y&Wuo6C||ZMmn7RUVO464S;^MY8-EW`tjq3 z;_Uk@0DJT}TgwVf%(R(p$k(Z-7{;XZ>r=^xtm2o>LfxUnI)h2p;-SWkU$!MNgyX`;inbHo(z6CNoEQN9_6~ssc0iT|vvelGX;hAZ=!S=^yPI!J2K*LXJN-HTzj3)%Qf7BFQTdKU{! zMkO+EO2D&-3N?;|K(%1v^76!hTiie7F(02iIw>%))cI%Bm)UtBVhv41fgw82GZAPa zEnsp+C%caTvaP?$4hvFJS}LW0=nGjW`PldhJUE^A_mxdN6NCg)ta&%;DneV^H~f-k ziuCTe?3fFB04ZxA2&h`z*bsm5NsO2{Y+?<#FW;>6ps|6GXrw@hOwjQVE7Bg&Foz~L z{*0GDb#QE#g2E@tta3N?w zKQPUc$H3Hxx^?Pk5 zpF8b6;2Vi5vsCseRkOYakY&l0@j3_Gt!@f$r5BfD@v5Df?+R&Jtax%nWgZ<~a<%}{ zws3msad}!jE3GU=i!K@g==ckrJ+}2LDgY_r+91npOCyJ1vXysY(cneI(e-=O%s((M z&z!%kG%)|D_uigY*DqlD1M)Qd8+B6M4C!|N<~=OUlRH!?)wBp0nJh4iKYyGUpyT{} z>_Gu%45xvMLtjr8fYhB&@l2+Avho8PJ-sNe{}>6qXyKbliOjLtSs>=w5z&k-%NO>V zf<|ZH>=4JNE>&W}>cq08!=j9G$L|0`@NTrRxX>thel?e(*lJOjKwDHhvy-qqH=irRp@-NNGDpCNH zFyr{FdW3eo&WEVOJN5s$Xd;rFvicXGRr;oqwDJ={u-GQh+8`skWl9 zq4H&O=HVvqCnt;O>$V#!M_Jq1285>spwZRKX1zJp5O#9%{QMj%TeX})$l3Dx@2dv3=R-@wCqHzLD>OkT(o6NiR`SqF2nzdtEx+k!9~5E@+}-W7F=PRprl?9aDNt%*A16AR)}gmc;^*TxnZET2ppZr{2*(=K@5CP` zJQjTxIrf#rLs(mmdL65Kt>NZj?I>`>5J9kN%O9RZWopY^>^xZ`R|l}E^i((_;qe>F zy^J~0#MqokHE!HGwkjJj+4nnm7Z>hC(QJuWbH1GSR>eM&NqxUvhZ*VmI(5q!gcI#| zWX;}()&uCl(MA+Vn2@oto+Ye?&+M=Z(Irk+itnP>O^S#cl3xEk?_kz(2_`Ro1Ch_! z2MjxUXLBb5Rr_pq5R|X2qiY}MD(8e(C`mNZs^W@9X3pK)=qgF}I+L1|!ui;r`eq4K zDn)2DCz}}SJkiHyLRnXd7+{?kxHVZx>V^wXId@MwO|*mnQe`<%o8Do2PGBmCGBjMJ zSOwD%Rve))(MCGf+d5eafE>ku zh^fCIN1cy@t@WiVVXrN8)v|N*$e46h2CJX23ItZU$Hgn*$=n>NQ2j8eAyQ&uY#bME z)g^CniGrn*CwBI}EQJqQtA2)EP&KQ0hop>VGfb?_oYWA(Jo~$VmgZnoh3$3w`teo_ z8b-aDXzMV%l&zQpDD#i_`H?x5YF)iQRS8w^&#) zLjF2!h~JmfwW?DciQ8$`kn1`aPBzHy@4NiGoI8BSex3$Nlp6g7vPRHBG8(*B;fDV4XELf~O zK%dst%D^hrr+x$Ds=SnA-=VauSY+V^sv+nQjI^RTiK=QvnGGL>E{u_vyZJm*$Un*@R!ATmlrTE zp`5L)<6_{z&6M`rqKBxskWlrc)@-4pM=2sP?^SHxfXyQ!FiX}4$d~2jj9)PEer>1R z9^)E0cH>~bd1S7d?z9+(I#9evbF@o{JnJ)o0|^w^BzLH;Jg8BCY5>VEh@DbJUnc%} zUf)S6bPV*19tSf|2@4Ziw`WbboMhRzTc2F(lSQGMK%vk|+Wcxw_Y9dVGUu|qx{2ZT-~l=v4b*8$k+MK31I zymv}kZW=DR2ntkIvJRhSy+k)IIe0ZK@LdP+N z^z7a6?(#p5V6A@&^} zNm$-Y6h`hI|1+ISQ_Uzf4m@$bTcgTwL*&z|2@xI)j z=%shT+p4S?jm%RXZA*gBUb@$lE;l@UtVOEUg-#o&s&;=@FTn~a)UM4Rt>H1=RF93D zT_NHXK*;vsd zU}U2ba^Cz*YlO+C7EINz~&Dcmxk#Z6a+>_Mq%OMLB77%85!k}d7xS}u%i&6IVT}V|E836b8EAB zq%>`)D(Zmd>>_Nd5kGzal#B7O>qp{NYo&(F-iQ5u*b}^*0xvYB>^Op^kf&uj-Iz-> ziN52;>lcExzHoo8sam}9d!TG%M^A`Jd*x8C7=v(Z_+evhAYeAt3$l(^yAXizAa^3m z-_6s}nw9Jh?9vVglfQHxu&R%cJ2^2?%36m_UA;y^yfeXafLoEb zS#{FF&1a^rpjs;XT_F=70^&u7*e_MBB)qFsb4a^LiSsjm~VXDoot+k1AJP0VMF|x@I zW?xLZ%o>6U5(Kz#qo4;~>2`~L6CZk$;n|*UAvp(JN5>R>MrY!)usPl6z)=(^DOBCH zhcLRk=-;&lyMvoAT0fmFg^EK(4xb`@c^}99L_fi#K)APhoWn2 zkP5z#=K`j^4w8t1j4$5WQwbj65S6+VlSc>?N#)^3(BvZ?Qp{c*VAGv+A;_8O6h^ALKwgWngVO z6CvMi&YgpSoqfU3q@y1ZXMqfhijE4t&!jm)!u1ag>{aRW+T?*mOrX1*e6(|8lY%txK7lqY!NT6KqlxC?Nq!wb3_o0`6W@FU=?;@s;9azo-g zPQ6?7?rF^VD+Qnhcut#N?d9lVm#+V!KiSo^dkjSj?_P(80QiB>`bhQ*b2o-r_UV*@ z7iJ%r`z%Lm8x1Po_5D}quAn&+tDIjJo^p#(%=2dW@eahF%&@MLJHZDV+1=?*tn)Gz z%j9n|N>reb(pB3ug&^e6a>wPy)Bh+g^#fs|@v2UZUE^_8LsZAQ@*lO3kP-)Fs)nc= zFN|o>k3%0DY>x4RoemRc{K!k|liJDfgs?7lR5aGR86~*IErT|ihN7=)dbIZk^j7_0JuP_qwDNva;Wa>a;B z=U&Jp?}J^$KGSzM5r;olOS*sHtGtT;9bYwCUJM{^1tp+I@TbgTvz}jq z8G>-I-TL+JX|}4!E#O5+5l4@mjnYEOEQe_n6m}G2)ub%>9ZuwwGCBvHn|i&gVpbk$ z#-ZsnDTVU$4=pw=*SCzU419p*#>^~7tJ))JY3a3=_OyWWri~Q~$Sqry*=MR=%(I%5 zzoA?I4K()p#L%mK#gqX0J=CU%ekOPV>SMDWM~|!~oHMTiD#j-rFlYBcE>nJRYkNCP zdF6^o`;VPY&%AIlEPHgkwE%9Z3d7ae?rovZEV(=}(xI9H2?d1y3c6Uo>~GQnwqzhl zDFDSf{;fCF8U4ZXU-7O?C4YdgedaJmp10Ck2boyej>WOvDs{M)2ju`kuXt0_BIR8o zZc7lXB+sO;U!PmykTNo2BmzLcjK1;1-!10t9Y0I&kDFsXX370o!ekBqBFKTTH=F=( zL^2~QYjCuV+id{ywnBaf*3$X4HT7=#m>Dod#|StWr=S3I>MzWdv^4I)iW!9`zx7ni z-eS9fnOO%QqKp;kVS&!Xqo+@AiHV7UR-}}ioKdqMf#q1yHE(ZkFOaj+&Q=SmbNQN; zgr86|?xCO_XLoT91#cZs_DfTrjzw0!pfZBHQVX*l1P*)joC6(ErO^Kc{ODWC_E3A=It zp=ny@~U%ZeLGkx1Pv+K`WlkQb7NZsK+C5SWcdkAg)%6QNoDoHM!L%>TJxrk0=w-5`g zjc%%;rJ4OOH8>la5;4i;Xg`S~+V!@_xXXs|+Vf&0wvW$++UmizMNO`So@0nCZQ0NG z=v4ghd!PJki4rHpx{|OqZr8de!r;lNnC_n8KsIU|5jz^@k=|vuKc}yDwkB%*wB1MN z=H~JX-VxP01Z$&5M60ZY&sRs?^RM7iwefF7Rd|>7Fb^&hv?<3We4k^x|)oVc{H)Hdqg&69da03lFTuDc){t!U;bm--X{xObh*t-sEhJ-WTdk?Hr|oMT0KJ%qcn%rNQ571*#6mofWT=)plVrd4A%M zTcI^g)9ysxB?`m1JwRHT^1SmDy4zXA26B1>9n{3vFyYpTXYRF}cCXcZBE3D8i3k&M z8TcOg#yX6U#39n(i{K01Fc%=wY;$344;5+_AdQnwMj+M~>?@64Rqg{~8o(?%Jb#|k z=YCKztv6F4R3)IXhhU7$s@Q7y@w?Z7h*sO!mRZ+h8lPW3m9uhmyO|WIR!{wVP2R#( zPu$3j-S4}=s~i{E=w?`^%y?Pp0-c+AsPA6dG?n7-O!{SyJy~I&>;Se4+8Fg zxT`%^W{YBlb@k8UY7xM4#^s>$2P^rsO7udj5?!|~3_Z1`NJHMgu$~mIe-!D-qkv=r zvyN%;1}N0jjs;fDjKVQH=QXFeGLMjbR@yy1B9k8K+CJn1b*>Sqh zNtQsZ)csK5Asj=?+@pyz=l?wfK;E5cILA0)Nx}5@hjNF z=*rXqWJ}>{dmy+MfE^JBt@XWZ=1^e&zW|@7x}#Gr;B%Cm)GPg?l=G)+Q25VzV)Pjh z7Sq4Kd^a@~=r&uacM(tY(`w3F5VYq0-T!-x^oRe69c%}&wkDutcD_++=jtkY(MSip zYo@a)cpIavboBJ!GvJpk6TI+<#6)0$hknuxO}Y{-&-QxS#-;ew0uF#U$eN1bJlL}e zplJgWkN{2I*^mQS4d$hpsA{lN$c^Uz=1X$o7Kp0c%yrls^6}FC!hG4tkvERW6Tm+?kJ6S}052|aofCXoPtVaO91lNkjxcB_W*jRh$ z!()V)Brp;pR)_P1BAIaj^!63#kAYs?BA7a!u*mX*Q7R|h9p&Y5GLN6+SwTB9qx02w z+6Z$db^>0RV4}FB3VIDJ4!(O~u(=J|cqn+XC9SP#K%A1%@h1Co*WDkDl|G#NT*xhz zEH}o@t%Pa-oESQE%`dRrJ;;^E#Az3o_wPKr7OF&7#LKzIFNKf=>sJ6_($q@yyv;KD z64oxO{eShj%JZ_t;y%5<0* z?&LQ9hy%X4Mk5>bPso^$GoA8w0jBHRbDwD*wIJ2=r)jX~`$(|)?)q+_0xzgnhfKHn zEk|tZPge+0RY$#+s0g@1LRjvoJw^(OGg)tfViF~nvl5r_{|FvK;jvYl|xjD@*o=VqCyOOgrEfk@55z z&ch)FrqtbC4lZtP;AYQ!)8%|6RA*#t#yn6P`8V~F73`6C``r3Ubpgd0YD)Ti?ncG7yG{1 z5MM%dma&k|J-@%ioJ3KTm5>-828MCi53eE@t*ZLh`geTy#{RCJR zK#J@YyY~Lt`THUCby8A((M$Vl7OIzR8G$BJ^76pt@3()SsUP$#YMgdVDvIOjJddxu z!AIYx`?iRJ$ZI(gE;}!DG~n?8lf6>cvX9n2KBDRAlpfrX8p)amicTM(7+qXj>j=2d zEK40S-ZhKk18a{H{CSrXzzweON)iaRYFcJlv$gK6D@>T)V$WaDt!|Gr%Os?jt2X@6 zdl@{ZUB3lH3;we&Nmrz%rpNCNim+5xD*$)wmL9&*5f$@S4%&> z|E7Y8t<{uRUVLLmM{q=yxZ&R%?h9&oIO>?ub#z51d-XlL|M%?BqboGlLc{sS>r*+U z)x7)}p;)0DTH;sVBuj5?`s&qcpvgkAILJSA0hug(aWx`(N~VTVKG`BaGO)DlXL(2 zNE~h^{q-+TN&VNgVbeLAD)HhVdoZqTpy4)p)y;;ziKFepjB zvmCaOyMlN9R1f%t1UR}AQm0*PCI8)_TqQRH?|em%gr6&zHF&nfj~u$E^XHcGao{E2 ztA>_R^hobi@9Z_nQGfdD(ml;AakBv*gH*=|;{W}<{(nbd`+s+f^JS?&aVP)?w9!l* zR3V`dh=IEk1O`p*ZsOo@8+DREK-kMGkVGw89?+St>7rmqxA{D04R8g==a4FiXS}ug zHpu-kd-ZX%sarzwmQ7XzTzCI;bTrNM-UO|zp_~z7A&!7UswI+U0g8u)YQMt;8K73@=cV`ive7mYX{7RHKA?(*>4)*=LSkKH?5r32Si2Mu_vG>@2graK1FV@1$;KyS{s zV@%q(l+NkyB0?o2EVT~pz_a?i1%wj4RZzhC zI29PNI_R>CHQ3fBQR=aVNDy)f&);O}ys4b70DtMYJyi;Dqix5XE_?f>U{5^{X5J zNB}NJ_WOcI7`I?ffSWqeX&`m?*+`LmDCBcNLG+m5yqoFI}eZW^ae(VZ_*)zm%&{ z3wR>@PGs?@@`sfjJB&WQ!|uWQDG}<4lyh$oT08GU)TnhV1+U}~VJzFc_s2C?ApJJwc5;pUM0RX z#8>!^Iq)<^fds9ANL)x8zqG-No}jD%wA~18u<^gFtwwuRz8j6wd^f(#xY6sM5f+#8 z-FxEG3yE?RJI{1Vo)n7+nbccl2B|fH4;oC_t45NcemX&0B%dNPQk7RCuMjD!=boV! zVdP7>LnqbaeGGqsQAq__Ob583h=tMmumn80Wn)Kdb6((Kv_C8jueRY;)%owaSqcr& z9uylDvR~Jl)YFlOVwiA9?6}3UVbaZ?ZZ!N) zw<`zy%3)ba!gGyMV_T1t@ht7aV(EkV*?G48J@NG%}3ie=hIzh0ly$^n5@r zZQ&q_?YkbmqFVqti*1OmNcn>G{e?OCs#>xYk6qnPSiTOL%)lMvz!a0=eIfVu1BnzU z5o>6?nZ&;)g`u{AyYJRN_qM=1{4m+qlj`pA?6t!iR< zM-Q$F09a+)X~si1|B{J!!$x#`fWF*=qkDMSKP6r!n6$2lgNQCE>m*z;cC`sUf(0N^ z0u1`j^*t3;g#Qs*Ry@PaF>xVPK{rJuZT%|$r&p_?XVt~4?*hJ3%b%@O|K+6vlLgdQ zvh|>A!V}o7+Iocg!61`Bwe`Hh+BpoVm+M}*&{k-3x?t_1l#fbQ+tQmUp$<)u1b$r> zv|IRiA?m+`lnK?3R&$P`;q}6cCLu}nAc%XV{KM{iAb?qWC^9kg(XOsbKMnt={6wzM#c zInuaCH(ZYGs9w!(kh%R}j27WI3?l|Ikv=Rz_3w$VO`NG%TG43lB_urP8IH%ntB;Nf zdohuCZz`}_0#yOiv$DeZ-6O>K-1C$j0zRox4@S~6+8wrz^->qD2g-Z$o|5=cZgzcu zl20aKHUR9u{`eAPdG#h;`h)BhC?*nN>*(Q_HkTbEw24L|UhT9pz9vq-(>lCi5(Bg! zW0PhhGLDwd8Rd6a9iSM`CHAImtwH%LW#fC!ND4id!v0$H+llgRI%w>Boo6}USx$@? za&n{qEAWkPvGrnTdIsZQij`Pt2i{yuEavs=87@=VjA!fyJN{SeVNjAOyF@NMaoC+> zW78EtjLxzEMEBO-h7n2?I1k$*o;+#c^qjZ>Fb(B9zJ7ijmuU94^3qG=pPLB)4+GT< zYNo=r!fmaRVPVj*Icle%qk5`nSN}_sordOkrdiQX-rR8^jyoW`p`??|ooKuyjP+ag z^LOvwD^rQRY!$hq9?%(xO}Ll^fqa5Uy?&{Dz2tr7X3D1AXGL7!S2CJ4E`!~u(7yD@ z>v9fp?;Dag7HVF_IoQvdh(de0w+&mOPt&mlPF;RPc;mcjtu~!@EYe<4NnFnE*5{lV zTlCH6BFKj!-*Td=gzQQ5gUpqyu}d|mi%t$P-sjA`kGsbHkB`#WCWF+;2S?$TEwegd47}H zb7NbcwTLOC?}=rOUTxNW>7t7gyald|lk;M#Z?cxi_Ay!-cc(dLeyiHa$@<$6XDyeu z^89reV54&r2f8qjU%-?tijN!x<#iFwacezu%j>(pm-(q`ePYs^{Jjw4l+foCCi&@V zW{%%v*j{Pvv!)wH&o#d%c8(>5bkBO>$sA9yp=Np#` z#)D#_UE^m{aUDYnIS(C$wCw zj*y*5?Pb&@dQPAYGc3L8C@79q8qvS!x;>!q;k@6_(R}!KzVHCo0mnt~>03l6cb&_! z8<%KIEq1KHO;_t7gDW4dr)SxPnFlH|t&{d~5LQ+N+fF`ji-z)$$ce8kS_T zdBcmo`VMV=jbFD1ebSct#^)}zW39e5$CCqBjcOFvfy$W6BRqcthuzUh);kLZI@;A4 zz4sg{$Hhl&QWkSw=QJsCKX@p>N(oHQPsE)IFFptodlERzCVvx6jGt^3&B;Oat&5Iq zcXYiPUE-Y#nTznHyav$^yA={bSQVS_*@%*GZgu>5K6>8iTWgaDGH>m4c&sGU_jq(X z<_47rrO8QxbivE1V3L;Uw=bpL2t^YFo7fIYcx0B#Ef=pP1WR#v6n;o)0Z#`1{~grf z!?|`_4+mMQtg|wMw&G=noXn%BKa{vBR4>~wm^?)NCT|p4-#zEDIh8zeTYY%HqFZmR zu1tefRQsGUS5vNw`C^1Rf7Y(9vrF@UKf1a&zND^i^o@)a%0EZCU0lW*btDu*x1yn# zA!_k`EU#qRg*t%GaiG|LY|%P>MoFhSGU2mk2l;c?$JpL%ZuhM1P2z*8#YV-TjM#B==UNJv@-0?W5Xgd-++9?4X6&b*JY|%-Mp;E(-4&WNF2C zVe{0RAlbp?pvgene}0W|_SM$A0~*&!MIAy#9LMcG+CiOj{GFZ;L0PowCIBK}E z$bKfE8{mZLK9J6fcAn*^*Nc8vjIJ@=(@x&Bzii`asN^hBq-#Q$XwN?!iJh{IpPWA2 zV#D5jZAjd(mKeM&&RtaG{eS|Ui;rGdwUV?(nSYy3szfJI%KH(LvRC%Dw}q{_=0r9$ z+B?SKqirU(ohy-JT@d5@nd zeWtHHBC1Ypnl3t;j*4-rEVhw$zWrdw?ZhW0Nv?jc@z1Sp3e22D6M;p?-de;_5!9IE zxW_tJJ&o>RL#?w9}wy5JPs+hNdZ`TuC^A4wb#(Pg}+Vd&d z@KY*HZ!etE%-|tpWRedUXYoqvmp&V&}Eyd>5w%e6M^we)XH~bu`#=NQ=evMjVMq^P43m5gZ?oa*@F8G5ZJ#MKDf{9)Zy&|%GQzVY~1yT<&9pF*+m%!c1t zDBL-@B;Hd|X(wgaGe5EmjI4%`v63Bph$mKcaNtbK-jM@7!Lvdw1&Pfg!^ZvGzlYSD zC^f^^9HQKlXX-^gk)l6 zcq13Pg2$|vcVKc9A5SJ>7O2~2=YPVXvFngLDHF$6MVjtVR>M=anO+)${+#R?byF&GfHy((9nX=f_8>PL~q^#mJh!^Js0)-I6M z@#5PTsLp#anDwU-@b4Rcel_J- z5J=9Nz*rrstf#HP3?U`Xm`J4Kb)Avl%Xk&vlS{Bc8f7bE?UJ$~K)dWP{BwEh$hEQ+ zZLZ?gRWIDIBZ7KngTQg|GLodu{Q+{b04>AdgfW^@@|w+fNya<|u)|ZmFE7Z%yo9e( z8A0&XO&@H6Ccy51K%}IkPR;rO(^CsopT;;4+Ghm~K0*;kI%Qs@z z#bAEhwE=p_nLiY;6Pxka>ptl<`{|wR&bw|`BX3EbwB zaj>`d@y`=`{h0H-u9?7l)O6T6R_)pM54bj=cU)_3Hnnq;h$f}{sCB(vU28i(z-d~3 z)}QAt#&@?t^rh)&Ch3>!NBr>zq#?pZkGacKMP%Lg9Lg;F?{9C<+`1j|0=BI{c9E1A zVeP8ToK1LkL=z}Mpeerc@#0TiMfm6m=OE|Fo>caID!tX9C1f7^!v_zR#dDN7*eN?? z@`fLtExgBYJv!>IF>*OM#a=AlJ_})?2&N#_mmibWf%N5}@2&P#5S?R~_#dY#uYc;( zIJ!e}$8X}%(R-nE(YpHcn_V3PQ1$)i!uBT+9tuyLw08Mdwzf~tj;VuocikYLyf4Sm zeRUGSUKAKK(VMrc7`#o2U~GS)H4_=LzF(Yf#~xJW=EH4&-YZ<|LpVEt7U!+jaP-EX zy+p92vUQGH?064rMDUZ{{eGiC^z-Ue3jCwMwWxY_{~LTST??L8b$HG%t@?fI8?m)J zzVT~kNgoDPQ4^3(!@8)?uyLea%X^h9i2Jq5jH9C1i$}g(^{e=IBAcJdYLDA?NVVpf z2K7E-7I4Mr*p!kT4E7m?+chvuvgW zPD7_4yn({=Jlao#$Akv0Xh-Fv%Q0+oW5GiO-7GwpNYJ z*?nf4bTF9ck_K-yTFA|pvWqs;x#r_$WMF;%Lp6fO!o%PgTnVGX#|c6C4TTQq*dTvrE!Se3TWyZGFJ6D@ z!V(*;^d<5u+Y_huHaV&8;wTY^e5pTb5A_-9rcqYywit##>sy1km^^Fn%DvWvNqiLf z?am7F>z=mHCLc`Vkv*6a_}qB*zC?&0i82%$>Nqg+{_dWiH>G;a&+~@>H5&R0q}WS@ z4V01Z(HJ7({e7l~%W=`|s5f9*2y&~#qL}f#Rg0M$$GLDW*xavF(>%pdRzM5h(B3N> zPwh|AY0cZK-8hA5CCD!yZgi8~^^00uVAA+8B{GYtpMKBIa!0?I z%qost=zEO&rik?E@K8x8SmMmG^>C)EQ4ZZc@=vZ50%4J%a}XQICm)}pqu){8c|W^f z1{f1q&~ZH`V}0D*_m~U+(PvTT_|Yj8@~Py0oPX;Nv+n1o<=-r&v) za%eEIJM3U8;z%Lq#mgLyg49#miF-%gw{H>c`6x5J{7}T+Mzr<#gM3tPp0b<}+U;lnzL(LCQ# z27(u%$HDWPrW!&F7MCkrjLu3?{4Q`!hgvk+^{3E|=4-!s%WeXI*i6InJGM3`our27 zP>kY$64I;J*&J40EalTOtm^fo&(;K7jbDc{_2?J|kHt%lwAIk+wEs#fnBQ6a%y1;W zH&7+&=R`lt>1j(Y)9Q7$;M8pILt}9hLN?I#9NJicF|p!v1~W=e@bu8K)tVMBu%wF4 zSZy_E4A0t^`*_?TCk`?;>dYZxjwneZyq)^%7vzdTxUjgGqMDa7Y##RG$0s#i&-*w; zG_QdI37{#txVWxzx9W~3EdF$L)tZO^iBcO7je{qrDCXD#sR1aT-)n6}d1vb?Dt-Z^ z#E(F9@m5y$t8~UIJ-tWz`uf073W1DOSW$Xmj?|`VobVKLNWh;;o7pxnqwK8l96s&r zmEo*oqi&>zOids1KhDS{d((=dU3#ys0-K_z_=_d3b zk?oM?Znic9Y0lrJ+s+ZlFVv-YDZ((Z)T?8Pt8YmaWgKzk4MiwnEE(^W|_@ z@ipg9a4(X<)P?IyOEZ_(LetV5swrt9Pf2|JMrU-c6=BP)EN?!6n*hz0n0>9*Hld{C zU?#*+XE<6-!Z`b_l&5NfiD=PQL1;|fk6TbiT_i!V+$N^!VJ^j#8MPxW+5|D=hOHrgou!g#SG zn`biHFiL)QEJ&R&rU;7W@(^&LXgINE8nHRMeR@;i%kqs6$Oe1}MKJF7XQTuhg_^Ym z(<>_4%h^jF&jNy)plMgVI2I z4w>3GhHE@I?+i=Y(vi->+9r`MLT$_PY=>w#-ev_q_8Z%R)<%nXl?h@jf_qP9j%vBH zIGpti*ex2L@n5}c%EmdTLoy?qNsOrd#|X6dWnn5Qqr zILqbX`zi)fBe}v73UpDcAx$IYAGlzHqelcE&7ndIfnqklW)rwq(H-O-RSY!br%e~m zEBm!~eaJ12k;)+g9vYMAE-LR={p+8W^6y%TX3(0p%dovkez3x8 zUN!_(oSy6sZ&%7=aKcX>cR75F8$j~hQSd?a>Dm5^%8KCb3Dr9Pxb^{LRz_h51W2TD zATP`%*yOdpNxn?EjuX-jft=S(_h(x#V;AXr@m6gbG-6buQeXR0UnXz|^$EFsDhl=~ z2vf7y;G4jACoS-=52RTXYpOGvyt#vK(or|Hgc7A?dO9@f>kh4YwQYHZ-#gOVHRTR3 zSh-0?88U*q+lCao@byA?_=zeY8ZR4kEmoiEg+e29&5&y9ynAjR%!fzlAcq7Zl0>Vf zqtG7B3To)h))>BGG2!XuY&KqASZ+zitk!VH6o!q*VLN*C-p-t%qcG&-$57S#QHX1R&hSyzDjInZruDCH2o4)<2;XFp z#HFt7J4#R%IQFQUobW8qMP-IQuzazhx05>D7wc-gqMuNku-mu8wI#*f@A>oR&tEEe zs#hU84!Pk?@@yUQKLi)BZv~ccSeZb z6E#{ALDbQEi8i7WJ$moG3`TiwYpuPX{XTo`{rR1P4~9ABZ9RkeWDG(ardpq3R^%)Yh)*3RY?T^sq!FvQVQ0&OYk5tAE6bD4&-rK{*BY@ z-IK^!cFOAJR+C|Un7?f9+hB>WA@GX;YEmg9%-o3;DG-EtF!dZ{AzG>(5Mw!k!qkO zxv=TYL3S{*aXN6Y>YO-M;bZE>$S2Q)KN}Un>L;Wum^Cyv1c$i%LwPF{07Sb+C2;Z*RsYqu9W!o9m#+UXn<9{+Z$<_Sfm1#?YqH zqrixWhSu@gr<40f{Cgk#pwP)ZUR9k9gH>-Qr=YDf>%6OMuzO@?Vn7sBUp{kE3|O$w z?cbJf?d$P4$>wJGoFWu{d8K>NWKj6KE%9nD-Wv|p^%k&Zu*ud?VU=G=q@ZT*p^YS! z;=)JBIXq<{pj%qdPb3k8i!m?m7E*7SKB4Q-WFK27fIdxj9mMFg6Ej)9+g!hgkwr~v zVktXJMS)A`%@)-^!6WvD5%HIT{Nb9?KGb4Ka6Y%Z_?6Xjk8fsZ?>^-Z=>FQV`|F0~ z@A-JT>sJRGPJ2;XM4|67tftJM`bGE~o)^*CN%rK6hqk7sf23l7&E!P9&^PO; z!JW-Zz{MSqMcfQnC-7F_qh|?LYAm(J8$d|SX)6nmryi+QDuJ##3 zo{BzG|K8e^MSd_+Qarff-zd*bC8=}417|ODj_RpP2x}YdsF5mj!nvb&tr}b!S$_$K z-G}o#A0CV)J$d!&$FHBAVp@LmBvfKOGsp?{2UVpDg@OkY9@8SM;m!4U5zx?&@Kn!} zi$qbieD74fLl37|#r-KAO&+r`_=Nj5k!a*41Onc5`56(l$puS`?%e<>b-SQpuJ6GcANgt6(JtL} zMHCPR`O*Q&6yn>t{HMQ*a`ODlb4PMox&N2@o=U|QIM&bjjSMcBUOq6+RC~h?C(1q$ zFYa!f(>}sEK6&Pqc&#_OayC_CkYjq8S+6?Z+p(o93=;*fu0h99#CTgbM`p@r`!m{! zMnmR1=bnFUp}gatN*vej2}EKelF?{OU9Qliojpko^V#2A^u12+o!OJ&U#mX+Vk>_i z-ie>zG?{C~q*;vuxg(h{ji_oP3JuQYt$hB|G8`Pzvnx0Z0)g&2;cX9fo15BG5PqBq z$wFJV;P>(J5WXxuk6mznYChtr?Y=ED?yNC7F??WWjU3H~T7>WQ-zm_xcHk4G8|c3z zeA1L2jyRFoMHz1YlnqD$6wb@b0 zRZzpUfiKW29nQSvf2pqqL~g$k@v`HL&o_CP4VAI;qY|H1PG#r5MzB~4n6YmdN<5&U zfbR0I z*Bv+R?a4XJKl?bE;Mx4i$n>Cr4lyoFkrk{WJrnu}tdYzMW2A-p!UQimFl!z-)42a3 zBAlnU`Xg$~2rv66iqHK#^Mk%^Z_jWKHNZ*L@457v&5_@W(@8m*u}8gL@h)s^?w%Dx zd;7Nep5=HQ`6u{y5tS=U>Vlh2N0&B)T-0#&h;-=`BCU`Q5@h3}smySJNdJV7q=(UPze zj_A*8h2u4Du|8POmwv6q;s*J-Qj9o0^$f*%)zYROp|pX2wiqgQm|#Mq=+fS2z}6~0 zB9g$=b}$ufN%{4;1+fJ&sM0RnxK~&))3Qa|lnGKgOnf{BiRX^Ht1P!q8)j6(ZgpCJ zuZ{_?QOZdiUTuR|(~h9S6|=CPo3xY^sK91Zhbtxlf>(^avQZ`p*gfA3OV@&lwe$(c z3=)^FZd`tqC)^f+Q%8+m8oNiIzy0;Y32VOyPQXbZvx>S_(xz1mDpwBJ2>fVmX_MD5 z^7qh4z*K=k&JFL^V*1Oooo9S@IZsN?wL}qaWH}h2*~p}9-6!zA+&>2!a#xW>Gt}M- z=d-Q-4qxl%g1$#$t-PLGp*7P`rkf$gP2779S~eF_sB?+T&x-l8dWAN$pTQJ}o3ans z?Fl~^_6=Qpa!nZ>Fh;6d%buXmmpb~-fM>h2a`N>-)4Gx<%+!rCCF zsi2=hq?y>h2$WMWVCLk5B!_E;7E-8u`QV3!H7J&P9C^72{rwUHm|ol)vATaPK^pO` zaf;z#$tFMT0Ui51Qg{BcVnmPdGu3pbe`QsdE*hK5)V7ttBe$T;k>VfZI>Ldk#5^7D{OYUa>*4*| zarMvr-ZK+Sr=y6HtycoYv&t{7N~~A|-@Jt-{B1yz0Co*AWU$fDw1G!%0VMGiMF)O-3)iA| zy}~Z#$=#cb@Qx2lyz3KXk{2#^&@TIusEMBLC#;Bw8x-Zemm3c8FL{wyVGiz<+Z@U{ z?ULrt1OlS8AmaJN(w$1QoA?T+$JTq8Oty|J&l*{0{Qy$=kLL*ge!t_LifoYvbOw2=K@W!T<(Xi&un0dbT5b2xtv#}SAe|H`b!yZ6l)01qRdtO6LM)Cpf=Iq2PgUb`@-kb{E(G*hc=Qzm@=U2;b(%7vEKNe=OXbYzfJRxcQdu&C5Z4 z?JQG2avv!TYEZoAN#l2P!m+$YZIQAuQ7Sg;wPxy3<4raDgq>ZW_lKszI~qpBOj~)G zk+YH6xVnLjfxCLjxS44lhxHyeShx97nBx_Fv-+cVE~MFApXHuj?eE1ELHw6T?tC7% z#zmSz9Nb*m_9gew1{t3qh43?>L5rV!3~C**Puj$OO%C<#9_B|okw82|s9^8O^4iUy z5#2tk*X0&z^~|z1IT&Bg3+6dS7rd%SCOZ(pPSr=*u{|!>ZliB+ROFxMZisbDk-zpQ zjC=80JM>^v)xO>A>D%3V?mm;{hx}S8)M5~U6U}dVnT|iE5h|O8$;C zqEvDWQ*&xLtBh`C$4>EfwUwZ$JgagSy5{~%O8$pto?+~p*;gFi4Sa>}q+bIa6_frH z-YYRFLs3!4mlk>W;IXE#0Ac}A2FacZb_F|RcZb~o@{!VklOUZpCQg*G%i*89s}}>< z!lGY6#U?Lhjg^jHldS7Mo&=Q!Ygy0f9OBIG!@fJY`7Z{g6_(H83mn8*x_NVZOLcc- z9+56}aecU5fguc4y&PhvpOUimnBju*yYs{M$G;74h;8@?=b^QuBQuT;d9M4}ST!i* zEIGkqdLCK8(9k2IeokYV`k28fGVXw9&PO7@D#V5g57~sk3Y?mj&LH$$3o-R*g#Z#!|1{g8f5>j+g>B z)0V^Z+a;wU6i;?))fKa+=+T;vX^$k?v=Ibc9~f1+`Yd;N!Nhr{ zPeJDlg?+RQ6rV~veXOEXsx42kDjWY&46%jWQEvz&3C?nFEbiAI6fR`UMl9fI#Pvt; z21L3=-L8NE!s}I9(0-O~zD)kBS^EOdE}9<>Zl5USBK({jEPm7cpb)O%PqZDWhOvtE zL^m#Dj%*(lJc1G^y|2_SoN~m2yb_xrPuCZG@Q~bk*>!tbFfFDrOsH?OwPTX7bo_H% zhOG~NhJzRea0raxpPE5OeA7Z%{^K=p7R*|&YbX^5{?S1%4 zfApEdrh?53>@HOl8SlYMf=jNc?IvZnwdV3aH8nNQ*hh7^a&mL2XUDB7fA^0GKWCp} z%hj^7%3pAGbmToeJPtbjL+Qw_QI`=A093tYtusn)Zf*`}0|l7F(w=JH6b8CeU``9# z}-pC~l1Rra<}a`j*A6b`@tHk1!O)T^d^OPL4&uqGUs5frkc z*T>wL(0zK0E(P@k!^52+5WiXD;NYSbv?#pHu3puO`UVJv+$Q%;M(IJg!o%s6D(%?P z#dX!X1Ex$jWF?4Vi%T4@MQRrS-f@6_5&QTNKQ}k76lZ!={75RuR3XaM8Y3=TQ}2;w zNi3fXEEJttZ^1zi$8zik#-m7IVvW3g0`cS|PtWrU@J1chq56@{^7<^jkFO%}snGBbY3dJ)4L<`_FPi zK!D8r^0JTnj9GK%S)J;0-7)$-Wr zK3g+})%Za#^xTqkTobbbW=4YVHdH%Bp>DK`9dG14HpH~nA*_N-;3FQtq_}3v11a+b zBWL#*F_JzzL1ICZw^Wd|d$yZ=jrK|-!!bRZ`NsR{`=LSk=Ib8H99rj91U_UF=P$K& z1wt+|dxw(L-Gb!&Ftnag?PO-aP-W`nilAWRVY}k$U0BOhteezr>6H=xl-Lz zGx4{DC&sg{1$Xz{x;yCG`1Yq_m6ffa{uNADzQrlcL^=QH8hv-xFW{fuQMRS--+|Un z?3~ZOV~diFB;7g4dtnCMg1@KZ(zxTfNzaupC>sB>@>RadR@!UAIBZMpDN8?|>6%iC zc}#5+#nhB1&0iaLEp5nYd|7DxGi2x6I6YYS&F?hjD2aI6B=b^7r8YzxS?Z<+C98Xs z#5$^=IxMwjJM*x0um)}sk`rv!pW^wCe$K6>ss}s!ITPU*!NMrjA}Vx9g(&SOjXf!f zpPXy2MNOaUnaLNDm1#y~Bgf0`W9@gfMuGqK_3=u~Ro{JqcaP#>Hk{m=yECWpN>S&WI{!KbW7f~13HQ_+kkL_^ZD`C-|za1zPj6| ztIxS$X+mF^X>A;o`d9Rq6+xue4kRAe0C~hP@92QTh8ovv5e_r z!{(FQzZoj=a1d**2}Oc`&5K(PLqUcg-+!j4j}Q53E9llxQt74YY+6k&({2av1ZusG zN?7Cfxd-}1V?3znWyWSkku3bzxOrOPWSsi9NB7XEsE+F^)KHb}n@bSI1Qja;Qeic^ znXys~Z46HrbN>$XM%_lQ%5Q|ufCCSd0T5y6I6qngyYy|8b7>{XC^#ep3p8FBK6gDJ zB@JShkN!0}N~-cjKpLo=Lyg|KMe|6tWnuCa$Uw%$^ zMEy}nL4@!_6SjBw{jc)F<1!NbiOd*j%$%lGqj=kyoOygN1g+OFAy{gccVT;?*!OJE z^jTZOnX?CLpWCh>Mv-=4BbLywsV9(edjlE8{3c_s z2=jD2QsR(kyUtU?ClCl+^&GwB!vg3{wZuVFW>{Sp_7{;~7eE*twIcDV+^?L;&b z{S7t`xl45eR#n6nM^dg78hr2P4$wW{8N8T)?W;ljpEJEEN9-tf=ZPMnAM=0xDQLw? zg1{im;t(}lvraX{ZrUCWY#0F0ypv%F+D$N;N{794ic>&1f`y{ne2rp>mekiuXDS^&WI zVGIr^50{#{*H0U9esOE>d!zGpc*Eg(k+8yQh}5G0##A>)RhK!rn{2lSAah<=zS8ul zyZekifsz05y{`AA!Mfn&a=ZQ~WI>)Wq1TOZwG?lu)_mIVpAk+Q{H+r-%6ox8*C@p| z+;!utNo47;u0NhS4@$(O7%TbxWAD&SNL%PuocR5l=^a_b{iskwvm8MRVy08%srR=R z{zQf{O7puvJ33sjY#Q_D5}6=TK3b1D+IP6N-R7Lz?rppvs=(1|H7b^F(ul0&MG$(S zE2kwasL$;tm<@oAs!+$%EK^RFhIGN2bncGt!*)RVeGuXQ;Uq#upWGClwp2}9dh&%o zScp{)!=4o9waFzNr?AVs<+AnP%J``nQ4U(~IK?}_>d?x^f66Mrw44yiNQ7p`cSK)u z9C6q|Fh%@rXmfw5_~FMhk%i?-1A~`i1L*u;6Sx(pK!X&fv#+Ks1f*Y)iuM0tr#%cmLGrt%sNzlrU91?;bU2Xw zbdF#-x-i?b?VZYjS4)fF#t4G63)<#x(%QN?FYZb; ziV4g5+mFhd$1AkoF4x!7uINKLb_?*C$ArN9rlh@x2@z3XSs#8ORifNm`7qMcmJTwX zP9D6NXKbjV-(*{k4Mx*5g2EgXW7O)LMJEe9RBgF%2xRl)MO#nf;e8~F3E{7IHw zJSWkYLr>1*=xD{G;SI^=_`QIL&v@XaFuo~O3f8s4^uVoZ=13V|M*7LrlbsCaDmi=9 z_BeuWec^1r{ZDqHum_{8y@2&SHmT*M1E-S_IGYhje}oPC8MwB)0FQ@j;u$aDe;+iJ@bN_=&c~dqDb0q!i&Hc z@O{Ll)WPKgb>Pj>#PCl1STLBH*5E{rC5Qua?QlmO|#-DMYWH z3*x}urU4av)ckO{D>N)j8WjJ4RMX=GJ32aQ1Ctx~^bnn$Sk7zxoXCvoYT>*1G#+z% zlz>}h6hU(vZVruG6%pQvzaWz1Up7XMg}W8yUfe5CS&QTs?j6n z{*2%0je|9I?gn*L^pum;C0CiA!OgWI-d|rf(h(R)ig9BGbzFoz5>3aqFs({Ld4sjm zCGyYS-i0x(!^U4f60)_oM@?`>LZxqG>)vK!-OINd-Zx!7?(8z`q~e{o?75O zer$d6EW?=}u!IejPdRKqEuj-8UfS;?fKy+uZY)I1O2|n%oKNN5``xX|zg+2wDszI_ z&sH#J(40^~7}(B5$*wM&onYK-Y>3B3k^~S6zIjR)tGR*Q!#WD*)_p&XLsyP#SMAz? zrl&h%z^TR${A&gF14A`VCme@I&Lz9>jupxA>NU%ndR(1SOFJl}#Ayc^TJP30?OlIb z+)~_VJ-@hUzMiJ8l@=p`HD(G1w<8O)oI^Snc2?|@Zaofo*x0SWhi2TjX%-sQ7z(D) z+MlJujUb4~^y5KSpQ96-G%@e*)84ScOU&C(JGAAAc{dU*i+AiLauQ9BUh zeW>Sw!WLGk28JM%P^06;v{X&H53RK@SG&<0*awX~Zswrz=;y5L_^p-S>9{j+@;d<$SZg`uZn)kV`jga>l7u8M`l)Uh6I~P{H~PIOB3mwh3YkvF0ynDf{Q*X3FW@KJwiK5+N-gktqk-%n2ldBU*p@!yB2X_Cj(|^AlZCzf~8() z!Ol<~*kuh`>@D7!!ApGuNzA))ICYWfm{HoeQF6GYx{=k72!x)V=Ea084zAGrSYtbA z$+t#c_RTG|jAwwYA@3=RZV59XuG_TO=YoRIchrzP@Z!!-Yhkrh+r}KO;`g_Qh@^^U zBeti}ed=AFkiq}n50bgJGeb{fij^{(+@_EEkuxh>fYN=El!OWIA`W)z_?}Sj0P-$g z%4Za+(fF+FW8;s#yz9QJC9MXmydFL(C^e(U-G$GDaKBw^UVCCNu#QICx7lmm*Wh#* zQ375J4*lA#j1y&wznF|4T3wIJ*RMrMY(0E8te7&slzyGAyERR3e#AMl>HQD)vmC*C zsEW5LeYolKyFAOJd)7&PEo-19bY&OO*()N6``l)5Nxsv%P??hWcmq+pJf_0VFA77Mb2Ig^)qHf!<>G?42@1q<0=P|GZlnvO` z&dgWuq(;(0nl3&0C2uz1-eU&{evCn$*5eByr4A_VNm|Tdt^VZ7&iOy=(PpOO8^?iR zv{JC03|Ei3dhz3??r2dh+s%=@Krq+VxFeiY1a>WsgM%}_u@UCB^LHUHHzOc7cTJ+F z!V@NF;t_SrWHgZ8UkD_E38Ds>RRS<@xP4h-IGr#k;(_>*Q4J} zHJ&JOKIczgS-V0M9tMY`N-@byeOFabl6FS-pN)z7Sf5HBoi-5$%o!rxX@g(=NG_0c zShWTI!pkbCd2#+~GA|#C32-l5Bf7 zH2NN#Cq4AL zO!@D6pQG20CVo3RO(SH!BN2JF0!lN)H2QhTiinv$n^Ex&GYw zCfyurA`Trmj>cU@Tq{SQZ>tRs(8OjxkmW!JJy42QaNWV_+L?l?nN-x1A-3n?1$r9G ztjFUIjmSCm@38Xbs}lw&r%kT>$2nrq{Zn21u0IIO&^&x5!A+VG${|z#)+}KR1pA8f zGI5B%kS@L}!(+oFBFSstclq<(%%4b2i1WFBTBovW2bX|%^pziUmmCMgNUlZV!&5hK ze$#fW(`*EdV~qtT6}&I^mHa(C6X>vQ#bsxa`1R{^3?2D<%NS9;#XI^4=&mSur=n|?G9DQImPa{*S zhZ)`7p05eTB}={s{y_uGH%*{|0(Dd8NxK-U1}owG)`wZz)PZ0%F}Sz z)IG_#qdqyh`zi1{5$EQan5j(lGikVl?Uv_PopKoiMUH3MADV{E{6p||w!G&j zp)J@aj(jMwe|1tv4whFI!V|zH+%Bk07gT)CI1Ha(s#m))+>TdJk8v;gXY?ddRO-Gb zFp`L`bV=?XxO5;4A3I7M;FGYh1J7@k;gOeznT*tD`Ci|VBU8$jhLude@6^$m_2EB8 zI7mnmevNhz-ru}qsxUA{F{X3YBFdRCPCbCvo_Li@=(|G3S9Zui7NIW1@gVCi(2`Of zf@W#9-oI?aNr74cMp7`s+fMOr+tBZB&gUh~&Zw0q&zjc;2`yM7R8k z)g}ABNC8i|f6=Ph%m3?#8#_&9L-wRKFl~$e*z=jlR(WWJi6i`KFbnZ#g#=;ewTEpxE`? zFAiNYqj-I!3=Qg4HXv&OCqWy`8_kKqdx`v{cyg6dBcUSfvH$j`7W?t`BrzCjSXJ3p z`X(DJQ^Mn^wU5evXwy>ZirryiN*(f& z0(q8NGSe$Kne)XfV{~LG4zQ_h3f9t{Apdm1^xTmonO(S|MseG??iw5zg<{K z7XH7xmfQQ{AQS2#|NaR>Llq$4RP#SQ=R-(dB?bf2LgnV*uiHP%-Aa`*H|%!-B4%%_ zLtaUErmL0Se#zgtSV)VW@>M#5!8+vGy9a;mepbpdfESQ&7@V)wm$9v}WS+m{ZCH(q z^$?Ha%*z`vpn9$^7O<(Vi6sBmRja$sNB;lpcXu0M{I~xE;7%fl*#Gh;erB};p?iTk z-Dv}jd)K*U*vY7lB_O_Jk0&K227_swXb^y5_4hj2)Z<73ZKCz&hl;)vW<&0$CTZ0~R~6Bm0LQGGe6886VSx%NoJW}>Sla%xWMf~MNvxt+26vz+6CM4ivVNqHIeKh_Z zI|R_bZz`8Nw&Xl9F>6Jfe6SXQe5>t76;2wo?|_uPs_Ppp=)|t6^-4tfxT)TC+tv#z zI2d}xPP%_|UoHtBV-TdOq>tEKB@Rf6XT_s0Ta`r=%&?D(Vt{Yz*JRh#haNUX9EX!t z#~&6m&!pAKwAe90T$phF4S~w$2?$vfER?ft=ny73+^Ic(55#ET&0Sbsj2irEZb>mj zX%hE*zk$P%CNaU`37OQj=+ypA9=BgG(0^Nw_}1!50j~xqe2Dx*|^xzs;HTP2iGHah!<}dUL;H zVm87AwZ=vDaSO<=E^rk56``2kO^A?SHVVpgV_A5sEW~#h@8J6Bt6waQCOyH69?=|n zRAQ(Ezfq9XwMt8vwWmV27DKacAViH)RA~Q~(v{2t$e5N-85Ure!=vO~WF&W&*};*p zRg>#QgoALy$m2UvGRs2LD7E^}CG&gjsN!5RTH#B{A~w@C*Bpcm5=x&gr(aywda`|9 zB8V<-Mi%9}7sRnGni&SpkqSMpTZg10MX&plCnP8uQM2CpoNW>(h z5-fC|y!$Drf9JvrfK3z{P=9!&oy*=qZ%swu9K*Ew*B0cZ1@hlQ0ZFaskcXLmE z0E!85u^z{cFqg6@FTJU-B3R{~bDVRnu%U?tBbx-hrAFe9+B0GvTW^0}4V?9Rd$l)^ z*%TVhxrO^Fh6OmJhr93IUe+G$I?!5JGw!nvcG&aCzb#F-(qIPV5C-Vqo-~t|w)5W( zY%}dyt*mi9x_fwZ#1N#Pb$K7nW~z?v-o1lC zOM(4^6IoD<^PHcLZ;Nt6YJASoXJO+W%~uzxEI;4CzZtGpS|GJK^v_&_dXT#k54hDx zn~LOB>g;qyxvj+mSFcT=H-^{!>F;c&ONdHKlVanOfsTkpPX1K;vea2q>BgfSPS~*VWq26(2lRwr0o8fnOq7!69I%<22Or* zC-TQ51+<|r)m-GO-J)znPczhf11fr_amGuL$eY)7X*L@Zm7=ufeQ!e6CsJ!Z$3-j> zv53zshgy*YlXsp-FL_nkcmc=Y0qBk?=S6P&T-I0#bPO;gN!1V{ z!}w8-V&`>}j(`)PJwK%gmC>zmA}1@FHalz9$VQC$<~m-;h~MUwZ>wxQNlt!(rMcvo z<3jN^3%G$A0?T=vfgji;qP&2}8{X`SwdGC&hHxJ}0|XX&0LC>xYgSB%2*h$<(CGE_ zIoctrsrSYyyUbCse&Br`u;7dngkGA&&2V~%sqD3ChDRwXH`rjaa#@zWC1>@Qa~rib z;IwCEp3TJngfwZXfBqz?IiUP=ld(0_Pl)X55Dln$c$q3M8^c^-oO05}Ty^f0OqS53 z;@w-#@%|0BdcGt7x%i)Q;=$ZuC5QN#<`!GK7FvU7Dc#-1fbSe6)1n{ZE1s;6uaE-! z7#f7H%zi;t&L>69>Xy0!;481R(jvxGu%>#i(Uqm}EA=^rY*A9u&ObwI$D<_bs~IJ) zyJednKY4<|KbH{z$OdiR_wJ3C%!hEtrhblEP!ngfgbKRC^w{B`6Sf2|YDR~EW-$%T zyWhW+JETIY7p*QaZ4Og*(4KUbDzwsY2HKP9Rp8{lgA*i(IC=3|jU(KX4UTgOdFZbv$w#HPYP z*7EQlYvt2|JH+G$?ddd2?q=lqj*I$SCidQ`)9RfXrA8`jt)C>SdpNzH$bNW3i9-|F zg+Ns6|LU8pumUN(V$gR5b5Wdn%vTFa_GHNLJ6Gr7)o&QuJG&m4!je(09LC$N9d`ZBA7%x0L zQB7I-*RJ6k%%~Z%!~DE8oxIH&SjyCCXZ*_eo=9}E^-CdQZ?hg3&^!R*7^Lg{Bm`pd zn6k_n*Abi;Ri7KRfe7e#wY6>nCi||5g1~H(@%OH0&f{UXe~x9-y`cyZmkS)BD-jG3 z7!{%vd)wUU?OO6~yL#`PG1wCvAGe(;vx=#~nxN6mwoVr02xvJx?v&=AtBm2q7ZpCe zxh7v;i~cmH8z3=h?#vZvvG*B;-S%`e84+RlyZWnRkJ#%^2MPq~GOizBgQ zLEDEA1{Mjd2<=@moAdJ?cLs?k1fa3uoD+7Rnl+1w+NM{`@cHm)1kjCO^>>;%X8aF`BRh8x_b=oG zWfokQt^?59cvi!7_GeQgcuqP7=J&|aAz+?a`{dCLm1MQ`oc{9K+Ovm5#v>(c9speu ztS5QPR%vM9xXmzi%k|Dg3pGJ24?L>J2Xpe8m|v+oa&Z}o?GFNN5A(Zk1R=%c1m5xP zG1Ii+3G*Ten^Rn@PyhZ?ZsfBH>+3sod#CKd$3D2WU+@K|k#;%HaT7nkLiLPnT^?w9 z$A0o626OELRy7i9$L~Wd$D8<}9vk?P?NF5(jF~uqDU-TH6p4Q)lMECEp8#DGlt~LHUc?2)Y zx;nEKDZ;M){-AF)HTGqPxo~Tx)^@5|4mA~Vv($HdRi7ccJ^b+-H!)96f+^M9DVtk| zDB9bxzaGa8yyAuQC!+DZqez{tv-lJ#>1fkLy3UamxdohYHnjDd$Vmg}3I9Gm~7 zp2veI^r@TlunogY6T=N35-n`dwVe6tYi_5{P*Iy#@VJD6%P8G5sp>;WHl#~wH;q*Q z5Qi7F7}>GS#ePaZMg2x;Qd#GgvdY9RWZ$WI(ED(|xV6`C6~Xm6oVUsP!C1o(jkiTL z!WzSx`ucQhc8c{%PoEY!8m?P5yU?3WedgH*g*+PU}0RyOu+ zUS6&OzNfWiR)0KA20A}io_2-X=gyXM`!pUmOEpLs4t-az0q8K|p1Y9SQ1rkoO$4V@ zW7O3X$@Xm>dCKTUThsvd7o8Uz=e^mg>0TZul}H{~i__%=jG7m4dl-l|Qgtp-19Zs+ zw>8_?bseb6gbK$Ac>d`84pgwmEtHDiL{l*by2>yuXXe%rb6!6tHUC*I>1I z{yJZD*J!osir4HsgEn;@1{eP@36Cxdn|SgjM-1>=z7Zn-E5F5!8nz>8cIf_w{j>~9 zH;2ra3!lx%A!s$un|NVD_()=i79hLBeS4(Z5kdA;qU`akuP3~ZzxN^VC-x4YiH)@U z5FS*BD=6AV{hm|3A1IwV68tkgF{$3!4Pfv= zAZQtnT3cPc3!G}gb3VktMc+A5YO4O~6$B#Udm(Uv+=~GoC)2(!g1U7sY_mSYB7a-J zs%d}b?dB!~81trQH?_`d`wJoTCck4Db!!|LA#b}rvD{`mdAyD-@n}RI+?w>U=zaW? zlaoUbAo>Jf0+Jd6vk(XthbT6Sg08Ay~? zFdAspP|?baB5^&<^RN7$!eAYeyrz4;$Fhd z7nU<+VwXOF2fFUQosv;rJq|;gAD;4V#gwnQ3Hei zZ{V1J3pjy8kOuHshgKAB7sQY++R?=Teyt5?Q3@1kgQ(XIrDH)fSM!fh1 zfPj{Io%gSI`2?`tT7E{O1viT&i?oHZm?Dv}-#nAw)WR%?kITJ9y4orJj>VK7iE1uY zi9tSIh<*nk}5@_bC^?qm{M~r zH6HD@nOXB7$8rEn9tGt?gaYd$J%@fp+xVOFvO=)0O6pB&i(_lFtvj~(r9RTD%`2dPi6mE3zw}* zzMm~|t2I^1)?j9SV?;+i1ec)M7Jz@z6@vJKpn|CaT<9n9CV`Z_d*t>UT?^Vp{|-KW z>)4HU`=p%ShTc7s69+8F?@;_jJ^ zPN5EaA58fvlYRy_(7P&ldXli%>9LFT6n4>@EuS=+;`z=w)Sow=KN^! z_H!6+1nj5AukP42GeAkbIEsra(9q;# zSYsWSeOQ*Wb>J90&d7+kd-Scc4Gn^c=?Mle5Wn-Ry_{8t;6xnLO3chiENpKx=|UUq zw0ehzY7M?oKuE%6+N|xluS!$mQgE_0=0vJ(+Abl@uiCbjN2nhtx~b z>r>8n%Un5vc)~$IA?Q|o`I1j-H*sfBQ*7ic@Embc0BjSQ$Rw5{t111PKptUk+;L)) zudhfJ4iknU5Mg1pJ6ORw?;C}ONm<#4bPDCC(|0f+n|G=9sFOb9JZY5tPf`fCW+c~e z4L#%&AE|DY6s0sY+M~&RMO1c5W}Ch8U?D)R09M4M*$~rcc)kasus++lJp#-9oLZ*S zNb*6`F*fn@E6hvZvEwY=n&Hdj)_8DPA7$@k%MH_e8^AI`KSTdCGJ(mIi7Du zM&ONa^Vr~oE^A_U!L}@IQB|+xFonCeO@r?^F-xvlR$qzxkk>^0I`1_zuoN~b5|k(F zoU94jPr3mkqv_xF>wOntU+s>670#bE_)7uQ6y)Bi=q@Iew#^LH8Ug|G72^LvLcc|2 z7ti@$q9*iu4j_P$NG&tbbVn50(dLzdD)vNgb z7RyO&Jv!vK$yNJ2)Oc2FJfGozN36Vn_}kf1zdp6*r1RFJ=bZ2#Yny#h@QweVx3@#Y z{b|d0$5i5a?cBBH}(+7)AJw-)P=YU?2tJ! z^%?^RG0~+un%k#7Q5Aq*S+-{V?zIVdRe^Yl4H$DeQE8pDaD$JJKT&3e3ts>Oh>0RK7%HX1B&jU0bflYbh3Kn|8;u-TnX(5fP8; zrWU|^-^!|)K8G)Z=BUZZLqNU&4H6I#z+;NQ`xp|!%*#tCY(FdD)1S8UDh>_f?%Si) zJ`hv*6@*Lfun^E>kzQXfc3W#d&h#m3jbrz_*mztXlb6rRAt2-jkR{i@on2hmj#3PO zKjcfrYzQ0c?~d%A3rc3Dt?G}tAthVYa)6J4;K}#%lg2;2L6P(EX@a1tOZiypXA7IJ zi|oQe>!0f>j4W127$)X=3c)E5ffZ+GCb_n`sJrVdQ>q0;zL_ODJd8@GH!xTRAdbGS z;7lX``JTP$(ysk|3njWT`cK5BW>CSU^DYjJs>&=EcgH*2(vq< zRJz_XZ9}z4FHi_xnu&;L*&=GvWR?QebRNG9f|uja&FXHbMiVtkNgD1pIvS$$+CJNH z+VefvL025nZx9r~i^gA#qBZWCpuSsAVNR&)%1TOHkF^j3i=t(84p+7w?6}Q7X*wqa zkN4d0+U@oFkj_H=NP}?h%efU^o(%q(YAi$#Lc|6p8H9f*QmNL+F*^c!1n0jovj=F*QjIxBnW7_+{{q4$93KB_e*=b-gkU@9(6weO37V`W?xxI@{j^J26vn>) zo$2OH+ICU?f?>hSblfygLJ};UIr+8+bkw2-bs%{PM8?DFQoDWgGQ4!`%0S55x2B%B z5iVPMo?L^Bl+BIJvv)mzlVJv`XeTDNJ8}=@es9mQirMEmYp3v11?xG#dXHhZRILFT z&qLRx%Uhl$6^xMc zXzUr3j}I^07E-BZT&fwXGVNqUaXa3!cXX71tbZq{Q`3l| zX`uGqeJCD2JTgMK6egW=>9#FBivG?W8VEep4-}e^T)5ycwkqtl@o{3iuwBH$pMi&m zG(0@~RgIFd(A&DcJ_=BJYRXi~LNI~TGYf1}n;RQz&2-)f33wqb;g(y~Y+#MuX{z9S zp5C6Gsrc}|*2f0w*rEp~660=H^~tUGCTi(aw6*^Ks*c#~xoOC^l(s)AB$kFd`_i}H z`IuX5C6zvY&%v>KakkUsgEDof_!BN02tuz`D;$sZ(%JH%&no}@Y+q=7^RHDrl+~bP zoqzZfB^EA?+cn<`(v~Fc>=>dr4`~)CzlKTEB3tNfp=jl&BPKOT7&M=7E~4qu_8bMP z3jfJY?V)EvPF-|liXz!mLPTr0&Re_y)j*IpxHr3&!1L_E34)9Z;Ng81^t#gr)#Vf! z#W!DhJvxxJp!0*P&AZ}#IzSD)BJ!M#SBuEZEYG37b`{&PtP;7J0h`;P8(!@UTUx%^ z&{NYQb^k`v7Q+y^>w#h6G0)lTOh_)uRY))OC{2>e$6S=q_Y&8BDSfs`vSuq&Ji|8X zA-7kUNU?adgYEd!TY|i6cN1n)f3)Z=_e;5)sa>qkXlYT=n+TC$9}ZWwrhOVNg&SuEduf=mZU{}s7f`XaW-Nv#wXUVEK#1LOKQvn!*?iX z01&(mmr*m7c3P+7T5^g>Un;Fi@)isQ-@ zKazp%@9~d};bQU+qhi@CqCr?hRDN-tNVU?QBFgHHKkQ+Md@z0R07p!8@}t17$sYPZ zPzU`wu|pHlnmLE30VnR|8w$(2a(I7_5y4+hUaTJy4?*(XO%!Zl?{r>h`6bzH8?!D( zQwjvTsc~^ZJnmmw9uye<`1PzGS;Txszr3F`PS&npa>{V^3#ZT zH%hNPBB)c*n&;L<_3y?rHN|GUYzKC+u4s39;0J z%nY~FKYBMZS>{xnMrtlQ!KE0IU!%L80-Q|?OPV9oZJ=&&H@kOyOdtsi4-6`3uX|GM6I_B(-K;9)bKQdjB`mMHcC`t)ZasI1QhZtuFe8hu9u> zF3*bwC36-Zg`2g%#pi}AAsO#am>84zFW@t-;9Nl08$ytmj1BE9K*xkza*;x2>c5K6(`H+$>NbR?HAYtO85E|*S1XjV$ffS6ZDXUsl< zWk_C%GdlX+%hWBKmoHz+UB75+UtSU}xA0vIwK7zeQ84sH5sgN>0)*;@)gbS1soim? zE?EcLB0?S15` z)cC4%oQ$clX?b;0`xjT{iEQPdsWhN-c~%~muYs)0)q#83PIZj(%->5_7yGPU5iRfO zk9`S7`3!yK|Gt<$HKS)qqbT>0`}J!jxsTU3DOC!iT{z{VerY}|Gm>@_9rv*0lV`>3APrWXa&47$5f!m@=kkth9T%biHEbuY$2F{9ZU( zfeLcz$oyuP2f7B1<^tp)JX2+e6pV3?d`9qGU<76&_`J-Um$zLf`KPDT?lIckjaGhA z*DmxszFk15T+cOO2Q?oS=|S!HB=?@(Ly?@}+b{MeXvaZEmdh1()^&c)N#&nP5-<2) zJ(_(1$|%zmmrP>6wmf)N7;)CK^07sOycXQ3St~*&^{2{%zEyHk%NX@^?;9;wqI5U0 zhrXaVP!cVw?S>|rws*k@my%TMWH$mlTu$gSy3FFSky{y+)CkA*8_MYySzqT?O%oq3 z%&&6RceW3Tr5)$IMn1lsq7nuv_=5eC8`T>0zekKz3z$!%)+9W<8%BHSEK)?>0f*Eu z$|+%`!(4h>Ip<3nL=f$rYByBgP2#LdY*|H!K{}t7%5@wQ?0NMg*_Dp2&+@iqBWx5E zX+d_vUa>g(4h2yM#S+lrcjTds`Nawpj)_(IGRhQoN{@_B$H=sI*LiZTQXn}n;&#cT z$68&vXM6qkM<$%sR@MZs%bDi6nlPe8-#*{E!*pQd&2zxdQG- z+#LCce?I8`Otnl4Zqdu3K(5O7yVw~M<`}((YGwi#1P^WJD`YUxXM$^umvU+K0SQOWMzyma071f@0d+LC^2)o4i;wlv8NC;2{$K zsqBgL|1BD#R9&B+J);!SitmGN==fjMP2TEI7_+r&0u3O4GISaE`lZes60$d_ZcFzti5R$x!a%F4=J-x3fO89xm`65ZNbW@Jl8)o$|?V)|vY zDU#ahSESFy@&-JQh`4DzTx$GQ;1uewhzk>pF8Afa%;Jo*<0w$P*26Tx)YJ)^MgHc# z%>?J_%ZqB3c2qpyf2DP@WZ=5HyYwo1`s69xxj|**9+j0k%fzekE$dpGPLI=}dw0x+ zhuzS@&D)f;#HhFH!}O1+I*)_I)TRAJP0iOb4S>|qABa}4TYMjiG#-P?#Wa^P0L@IGIvSNKGfdKgJesGl-ug|z*Dfq_|j<@D~wX^4J zW}R-a`ah*@zVx4bJpwy9md1m{qgqm#&)He6*bYLRkO0e=IAo1HBYODTA+nb#BGSe) z&t^HVZb_ldrM2{+|87YjSV?PLrYK3 zxi(tV9?=~#r=NHzV&bWnA~$a2*R?A)J3o+-xq0V2oW6iRu5AdoKu8-UEyOwys4mtd zog=i+RQGUjq>r;LXKkxvXSd6|NG?kW{_W6mB=YD_wbApd)QkvyUe@BMGU15n^OiFI zSz|(zc+YV56p2xq?&}(-x%j@z)|{uxHOA$$_^!)mCMsq;))ry!Z(kckk}=$#AR>(s!m`oLbAqh1rmQ8M<-;uX=kWN5ii!2~Y|J-FB);-4u1X%njpyjW^fpCu44VTKY|_ zX7PV-9u%cG8x@U2HGy#SEFxla#3_3J^3;+b$@aj{n88ZFG=Cy6<0L!&MU~KPG9=UD7Ex62~+Sx}mT4Zc%mevyG+q|CN9Iu7Bu- z>X?2Mfrz=U)}aMLJCT$wK3Gk4t{ivH)x?Aw85f4VF&o#y7WsbOFtU=NyJ=P?eWz-i z6!zJBE7!j~;o`m5jIWdx_Sq3*R3`Y4yZT-J9lM)acnYd)*do8}nzNPDPq%_H2T$F3 z4Zil!rc+aViN}CiGwd!+Pdx`LQkV>MAOP#oyCk%LB)nD=%ucDD>@#Or&Dt^e>h9O# zKVE@*bYgvEEX&B`UAVw0e&eW=C55JQm=~fHRRQ%DB29~{I=&H)blU0313EGTY-_ZD z8^17rXcS3%Qm&;_I|lS{$XK@eUMf&b-mqVExg@YH^l8|!W$l+swR*r#jfU3DoktnO zJqwOtk@883;#obhm7bj=_&6J{vbwOK#T5}DuXTJ$*?pop1DgRuj8UX>_ojVxvQ8hl z(kRxb=WopCO2ktFSxrfEcOsPTmQP5})5F$+XL;@F|0Zw3cKMS0^(gf0(_4Le+tduK znH(rD;k`J>hRr;MEKsD;*L^bWv}!$_NFq{t7KgUezdn6`>PE)4Rny3+CFsYWCVKQ^ zrNMtmM0BU(3HPC&he_4v?Mk1G_D-3|xP7q}dkX~9d6P><_z2S(`8BJ2{dYkwu5Vv) z>s_n%Tb#%GAN3YWRj)tlEvZ;gZ?U|E4MZ1O6sgyrBlyewed5EG@(UEqXsFE2ET30f-l%*RvHH z?+*+Z1MM1gV(l>f`5wk$lstx~ARzE`Lhu`UCtIWBJPnOzMkQ={!Shgvtw^0+tNbET zy=0~}+HP;l40X54eS2jgJsChGtz0#_NZQ_E_8f>6;h}=5$Gp4OK(<-`*TxLW2g;+= z4Gkf(onlbX1S;D>dFVYwccHiXQ%%9QofavR<)q|?3^=5i;#jf8LDJKC7F%=8Gf zuC)iW+C~aZ^p^`<TW%l(2PuFx1M)o>gXd&<0Aby@s<=|J_@Szao_-ke{Acz9n* zZP(dJNptW}<<3h+{&s*_-nELUUf(To@V*}>xcx{SUB5@BT6WJ{q&vIsyf1#R#BV-> z`DE-nb1eG98 z{CMZwkZ}_i?uw(5O%V1UOx(^t98W-@0we;BgNI_?_vMY=Wb+i|O=kfqe^4#F|GntA ztrPa1dM_b3)W=Zf1pHD9p22pfrR+qUnNc5X=Ar@cWIF#*LG^vM_wL{aiU!6TJPuoN zy0k|2rRA>2Q6cdfK_GXt=1AzH$SQ6uOZr!rK4CtP{Vk2X@lxsh?q%jI;eViOe2}f2 zoZit-ube1H&&5TdpMNSRXC>^x)%oF>8<>$oT9qkIgR$zG&OE&fpLEi=gdV04&4Uc$ zPIT}zAT(+R)IugF?+rgFef_-dPU*K1JC@lOdXyA%e(kT7NCH$}pyfq&H(jYXhrcza zMl6_;%my-fY+b1kd>}F3r8%Z5a4iF6Ft=!e^Yl=?9bZ0V>)o_!hmZpH#5is3E>6|` zI7U-y`2K5pR5W+;q=pbS@-THgKXr7?C7OYu>QaJr=`+$ua{c_4=@^Pq@U}hPm9MOU z-iKuM8620<#6bL)>+)uHyV4+16jI}mV&anLh=D`k(R*)_l0s>Ea=cukbixdY7xVA- z2FmWt5T!3K8AjyW2*!kTV@MqXwEHL9^P)ziIbthNU0j00rGLp^Ujs5(Mowe83GakgQ9*QoCn8y=#GT0!pfT`2+}QFz;HT~OJk$3+Az z5+LYJm6q3Y7q5oPlZGIT@!Scla4tZY?n&=3 zbBeUkGl6e3+?7u>D%!JBqXc zcfTd*vJjA$cj~r)&=pQjd}djiTMd(|HlyrLNCboflgp`fSsXKS7CL%+YgNQ?wUdGX zyUN?})EP?-5pKc$d)kE}p2vU07D+VA3XiYMK7*(+W*5hW+QZq^w_JnbNKTskmJGRz zuJ~4G-QXgqq_FwZl=pfiZdgGpwNOVpzWPUWVML+UWk0^{-J zv!%H8OjUTT&IkUk)BnAOBNDG)1Y{~OL{f#*!v2a6Zp)@(Y#BQX)fW&EZ*dx>U)dle zf`=0xUH53>wYGIjOI!27RP@?#db3=T;>6kl8_Gv8@nFrKKb!E>5q!WS1aYDN zzz2#g`ZzIzMOnihK;o{ieRiCLmNu9}W9#MI`c$(4kh1)Pg6iSmSckmWR9XW1c~%zN zvE#=lW@lgh{_SbmpNB_%%kr+A-1&pm!-LglV?fWc_@q$+-1(J?RYo}7=GqhdBp5Sn zox=jVb8Tphys(%7ln;7;Pj7E)fmqWTfNA|DHgw3@0*YLE(27?z4^y62?oI~nuuowy zuYC!K^&uAhY6nt$*B-sK9b1LMO?V(n;tv@$1}3JHfOklpuoh_KD+1lB$^_BA7Tq4S8g4&9){L89V!RFvO$=iuwX;cyUjB-FGboYhi_iMXvcbFQUFL zP4-B<_BKG5&72LqI4|f-jvB9Gsb8NSZ+kwY%t}vx>WY-`OTMgVhFe%hZ8x{d37cv( z-ldz)f9bZ;3GIbWIQ=eyYKCv47yEGcb}S{1E_*>X?%I26-Y9FZ|V1$ z38}vpZnfShH6t}AytaA`(_eT7g&>;GlhQD#YR_u(qsHImnoJE3T$mZf8O(6)!VdsX z_!T=sJT?U03wY5C48*9e)lvy z++6S(RLX>6Z!O5p+({L=90&pKu=unFf-K;P@Oy_6h@Jqv*vq&%*2_1X6q`{eToTz`5j}WJbFO zKp=D3)8v>34bN$J+8!+}Uj5P~{D{u8?yosk)Te5pn}Mn)UauHxPq84F`I`V&b`l)l z?a`#EiS=lo1HF+)3lzr`VrX%02E);$XSwarzsB(2nMfvv)S#865?8ax@(ru%K^r6A ztevGnQ>LzB>{DIy*;^lWS1bv#W4p!1I8*u0eSTTl)_7I-V1pJkXPoo6M&I#h=DlZ+ zQ;|iJ03in{W;;?C4`M-}ylq}+euHabbFn9%h12>lb+`bkiTkZaFDzZ_J(9fei;WB_ z+fIzsLf1d%Ur{TD8X|I;-SfRUB;-HPZN>&%N`r~_*-7=j`-B)Vz6-D;uq z@@;6Ykct^bwUBRSW*9-8t^cO*adNpqgG5HeLBM^Bo``N#XTp6COMQ%vPPEV-$hHTW zf*`fF^MC#Q0CM|Tn?)97km-b>6Cvg%H!1Q?l~i(8S+7#a1UpsMviFtxIN z;|3GTC$~oJITQpP)Y3*l9Y8-=R*25d&L@-c58NIXGH6=x@5621}Yw^=6N!cvyZv83j&Gs?beG0-;e67&b8=J7Y`BRk55m-6w=tB zt7+``pLQ5w*iApHoAT}jP>sgkd7HmUrDmXy#J$V%3zI{FpI*PXyCSszISTyvFD>C$ zKvfS^1RX0u^{M6i_XdD4_(Q>|yVoKnvP(wm0Gk^)RALkTj&xTHt{H2KS-JYlgGDVZ zEk2r@%>d(F`^uc~AuliQ>5^%G9s|H8C@n|I$tWo)UoCLbH4O|CJA2Tgw!IXYa$RC=QZs> zc^~fc1CZiFk2%T3i!VUa@l-MGfyI1BB7g(yG8EFnVq>A&t7VHJ4=}!U0ULOXPaGPJPs zknzR>)y7641Hezm=>oA1er*aEAi; zRXhIoX&~P27R zJ=g3gP!st&)$td*)2N3BZgP{0LT_e+>9)(t)r*1p-I-*s#C)ZaOmdq~g4>0}S9%a4 zak=|ABGK4dN?4?R+J&F1JG<*d6&>}-vLLhM*=Wdl)Ca1((;vki@o(=lsdultG`+BX zcByw|f;J>!(A3(VycyJcAqq<`EKlRvGg zMbr5~miyI~Ww4$Xhr?_2#hBKxM1%9RUQ}i-PvsO9PXRf#u5K|2XW-Q-^P#*eb`R4| zg_B`*s>OuX)MtvK8}pM7>G}By&}h8*;S^?28oRnHpn||{S#tv}=rnxst+3$cu#-spn0+ z^hfC6g#$u%yQot_mZy++{ijFgmB4>f-gw&T2bFT@A3T&0Q~Z}e#tHf&XOsl-CSWYo z5s{Mr_(<}b{C`KU;>2B(W%_>&!2kFQLu>NCC}H?0rcJ&0XXTFB|96H7QEr*P41g0r zZ1)oR`uop^M@C0Os=#EK8yT|nGpf1wz$~>sskm`RDZw+Jf{e((dJ2r#v(A&8mI7H2 z{}$)z*;)O80wdK5XAZgX6Gk~LgA7VBp)OVye!916_TqbqzOX+ls?4T+u2#9P1;5g($V83tbW zWT{MLm3TjwV9$5HuGC~7xIN$@a8g&T@mjx|+DTovM)H1#nENT6`u!FO1`rVKC2BOz z({3!ztJK$G&+11Bab@Mb*Vn>oO5&;J+Ka+d8?BrqMrh^cfEz5DZ7hVHVmW>8OVin^`lj6dG?+ciD&Wf zr#*m97rQ4qA-z?1GSyu^|NZBYA`mwhdf*{4B3hQIMdI8tlL1$d{!%DnwH$0&+pC#F z&e>=a&qXiSkKSxv-+$NDxl=ZG0|2DF7QNpG6V>7(A}&ai8imz^av z5t)YWsu7vb4E%04B7Z4Mz|72S;iq>&HCO+gs&+mnbg_N3m6bhBHCh)+UNYunq~2PcrNQkdtD z;d)gR3t%Ln7Z}CrO(m)d2j4waFkZh;36q^ng<~F7TNu=9D%* zvr#1L> z)kAaUN2`RQ*wvm-PU>6uNx_FIUdhvb2`kY!lVzI~u|krbM|>&p`4SR*7m%-wYzBoT zJ~?x9R#0!1xh+tpi|J2;tbu6QgZE&dpJ=IIJWhYtV6QU>(dQNQI8hqh=r(WpM{J1;j!MAPcf~b;Wz2#6bp_rJM>uS|N z*n?@9mc-TOM@Um*l24hg&^MWyoDON*ry|kQg95ehit3Srrhx5}3JknE?|{tT0~LDB zg9YhHXEN9!V^Uy#GLbytP22Iiz+X87Y{3_j3Mb-Zjh4d@vpD96vNm_@PwJqz?SFvj zucAIqK=j#J^{CM=|1|oVN5+3O+K}r{qj`}jP`m*PHuIS}BtR0-d#71g9`0^+sdbp1 zN$iQbt8*3FmK6I@g5W(6cr#Uf%X8amtEo%!jDJvVt&9u}CL)G3z;tAqq9j~Y)7cNdpYHv(3r(+7JNv``5iKR6XwT1`iv5+1W+>eR25)c8x8 z_J-Nl!wF-%)786^XJ5Q{p(@0SG=u8dQBU|(9;g55N&0N&>7$-xmZ^f-X3{`U+)q5X zN{SFFA)|Bu(IZ}Mx0$kvE1y`hkES^0?s0nA?D~W=gbi1kr%EoQt+$IF>P|KU*xK6W z{aJi`q)W(3Gk+DUo?8cvCz1alr*LGtiZ_u-HWWm@r9nbcQXjOPTH4wgCL1?9${b`& zi&Qu-PyNy+<1Ut0ClGH85`1ob#^U$&gd&e12r7tAxgfYgb>)7O)MbYM;dKXXVwGVgC2wdFeA`tZ$}`YVR8-%;hN) z47Xi><`?1BM2srg{A^p)wM>k<&q#6orvvxoOa{WW?a0#;x9~H(Df#-+v*Q{eVuooE zzKb7xeIqW=q}W^dJvCxlWZXUBF3ujMD)ff6E0An$^#9I>S?>>?foqT`Dj*w~s>Elc~=;>ic5~Th0cPn|3?V z-?Hr2U6!-NUsAFpSb~FZo3*#u9gcyj!0mkP6n!`kiT<32O9pC<WSa4hQ30Es!OiLlK8$&@cr*U=}%taw|8^XljA~AsyNMV$))MvT=T>gbQjqS}e<# z@uDukuK}i4QY4-)@JS_K#6z@Z_ubDuS0Yu4c04##9elP~iJJ-nx7P)&v?^sa=-}B& z0bMWfHxjBuj|&1<8YI7NIAc^1Bfz53+1gc9P#^dHP_Y%#T%-ymqNa)&C`A72g&i<) zT}X)@UtYF?hE4;u4$)}6Ci~v>sNL-b9^OQmimW$0u$G?iTBPa7CPGRy$8aUdqqL#| z7V5Doj~%$*D9z5y81=2^YL<~gEeuIl*HY-#UmrhSMdb~7Ar;%;yzjUAjcUiUn1UAb zP0-l7xRf|wy7d)GUS!x~p{bG7taK#-%~$6*->Ow# zC?<6E>eYTHB5XCWrbK)*)}KQl8y%{~@ZW8TAmAH1y7bEqYy6*!8Prkn=L zUE_*HV1^qVYQc3W6ZP=M|EQb=VJytv?&qD&B>;2#2L=`l(MT_8F7u&LyHLQRGh2iI z1U|kxER}HSl$Q4Pk|i(Q)w%pCQ39pw7l9F3J<>#s?0#3T;^K6WL-{{GT3-FHdW2UC zLE6p=*>Q>=q&)R+)CZtdKiF#w6sCfb$Jw-!kr_Sayf&jWJTc(SDXQt}e$aYi)ap=M z{#~S4d z*Dn=S$J)N$02{qS@F{f8$7!7=y$rKY8K%nq3OGnm#T2o=0o<>YPE$C&@t`Ucw1J5) zu}uk*yZ3|0k4~EFN}%#VAKeOvr{2HJk(E3MN;Z;^kr}~ruaT8M;qM5lJA-2IN&opV zAe4_tHU7gR^YlMSK+YcyRp2^Umv)H9R}1Huiy9Vaa_+^&Tk+@siEnT2^=20+} zUZAOn(dnnxEy?y1+3uU3OWQrKPHyDQlB5S=e?v}7i;(2TNckBrtwU4Zz$YTVPJr!6s;g6_%Em3u z3;w7w&unaR>I)n&AfL;{S-On~eVv5Gt`G1I_y}=5JqB`4O@E-SY4nJ*lZzV}F-Znf zy?p_4j=zx{c; zBmQgU11yd3G-pN{a)AP`_h>fwv zrc{YMUb@^}W#fVUY+``5h^KOUxSTeQfh37dXRs_4vX5AgSV=-<-E zsa<&;gfgO`hWW$WG*Mk?Ph{lf!`ameJ`UxMlsTjs8XIGGJ>V}XIC-uSi~i0-h3)OR zcP(d)PYal?0!T12St?W-jjm?bEahI=k(QP=giPfIXjn+Y=fM&5P*U=h<1}gj^ebP~ z>j`*ZKRtTOEe0Qdl{`qT)7QTR_VbjFA0?`P%~A(QFg{gLVFubvaVnZ*Gnb87*t891 zCDO1vU2oa9`tUxcjh@5d1Be&sbGf?pcJ+(1MYv5g{yi(a|1~Qu9yP+$g=vx51Gz>A z?v2D2WYhbD@xe#a5))&+1JlB>ba}dJEIxRk>sv3TkH`CQXS|Jdx9O&EYa4L7H9%pH zi7GfVSEp52g<05h?F+$Q;o%H)UR&WvC+sF)z#-KFhtz`F{zxZJYlKqrD}mJ}s(0@r zWS98kl4U(Q{<^PqG&{fj>AD#<$|BiRzJU-3(2r7<^9KjjA3l5-E_$$=+?u<*OqdA5 z;w|FD!dE@8nDza`>%-Kt@xE;^*lIjHJkzkQtU{HPm7Df|F*44~%sf?9H7)m=8dg74 zD>UAof2{l@w`({nRozn6CHt+gvE9M7gxAp&nJ~>A zSGlJO3c)Ml{2T3COWz(6#}=w}sWDOVnXBSHta=aKe9%fW&yxMe?s>5t-wd@~*U?fI z`{)>c#yxupoLVFCQd<>Wdn(4v$O3B-Q=`3JuYS_4#Oz3A4kC&GXo?hHXQCx+OfmXUTZqC!{Yj z;xeyEA>rKdp+1p$+!*%UPacAFk6Y7f1s>dS6xx+zo$57ov%$)PxS!fO1s-ctqa`dJ zs6(TggkO5ur8-jsZz#~;EjT`dO;#K3j5k-=C}2?stq1h^ddtr}+j%1y>&~!J6+x`G?a?(O!$KnPF$ekLA zaqs;fTtUnEwajs9mimBVjp#~#UERHpX=ziyp&LPa@lrurT*ThN0rAHy$Es;dY{o(= zQd3e+a#gM!Lo{vfVEYYHHI$nd96DI3f+vAv+yp?mJm+O~Lqo&i?ZKME18M>yn%e2F z5syo3-fJw`9DfX(GE@4IE#gOmAp)q*)YSB@k`h_$yLWag!vdCrpHDv#-o6Oiz^D1d zoE)OY#zxg*OG>D(a`_w;?ald1(BbE4LV?9MQS6I^Ls$WlaOK}0h{8hyPJs|bK|z7wZ*7qI z1#ri}OyADx7@d-m5~5s0MNPd9dBw@1KJ9u)+)d?VrKjIjP`JR#%KE6}Q%Kj`hy9|M zm>A@e2#^mSke(Rb9)zT%0j%Uwx6Ny#Xq;7-jP9F%8{@7yblr>7{ncJV+TQz4TT6Y! z#3H-&_Y%*G{9Y5ca7TEM<`xzRhYAM2yQhaiSeO=onD-SFBKG$9DszV4C&v~HyxM%W zY|*}NS#yXRKj~bzqL-@qlIhuUc$TiPd4n z$nkM2e5Pb{?i|Xgy}OG1hp=lLh5AYn%*BI)%F{oq$d|p$a@&_KTMAh)X}`l@>?+WN zCijPCb5&fG7yM1ggtw31$tr#Lx5>vVRc0rckW~zX(TUZV42;58hk>#w1R}0hS(hyK z*|ztX5ij-SHVds*`j(8kp9Pn?jxD$HIVfw3tnYxX0iLljaPg|Tx9-i+iydb?{ARRKn8Q zVbkgE?VSXtWM$0*J=bG#_vU}wYXlui9`#+NbeJ1)8Ec$u3_=uGPVlsXg zGgLy%rjnyLR_{-8#dd#hyR?SPvg3nT>CUJJ%-4r<^o86k!+0HD<3AhvXzKo|GqFzz z<(t=gRq?PQ6n4~kcgCHxO-uWdiqKrMk2_#GR%JZAw6}Gq)Y#+;3Y(Yrir$l1#nxy~ zsHI$qSK8`sFAT&XySqrP`?y*oZqH3QKY{QU$+SmQwtoI4?CMx3a&h-QJc#dJmfTlg zDHB{^0KJ(kmE5Mqo~)tEIP8!O9tv>Bn;+48p-l-@PExJ!9q);U2&OOvxz`=73ChF! zw2TRCY;5&#=-C2lthhOZM&S9IHy0nhyOrJNJ-X19Msnt*?U>h25jYW~J4@qVd{I8& z|84uZah2}VNF>X{n#iVJwt|frHmm*$7p{2po>`Yw)&zFXA~i$hanT8~!e;iiv2pv2 z;k1vAo*un>qSR37M7^{Ad(6$w{{BllCC~Zz_$DA4cauo()R#(}MorU>HjPf-F>E!*z*HZG|Au$fq+ih_ zI@m-;`}2l|wngIqc*V}98dLb+<48m&@;Wv3+MDQTkEewi+ZJVWi&&A|?CkqcYM?AXWagbtS5PlV7b;$HU}Wrh;qSQ&hVnC4M^vrIJQ94n3@Gyh>sGD6 z@ZqpiPfyRWyKV0Uy0HD5?V?;DD^#Xg<*o!v=Nk0%uedl4*jKdB?SR!ggUZOw2)}SGK;iIoR*Xk_Ya_Z@2pj5nU}^!0bXJV zIvOMBns{xK0vPOFy^$h)?Ayj)?>yCYc4Xsm5FdFcD;q*1==cD3mz2arvDx+nF0kPU z2=}RW)`KM7#}6OwYJ0BVFSDNsMB+p|CT%nrJm3=Hvwv;m5*PdBXp8SrTT0i)lL1%Io#z1a7NC@xlR?t!R$TXp5Q0!~vE=xy5rY zm)%A#x3hlDcmn6?e|t&a#pPeU@2K`&+Y5R?56KYLJ`%Xf>iyf5-djj3Flr@78p+GY z_t3~F#n8m06;PML-kk3DhA1;j_{`%rWfz|q?j5qtTkTWXcbgHzjIj+O$E?oL#nX1N zn}vmgBNDa=sL+-NqbCWs@L|3Bbhy;za9Sbf2khia8@L#e z4vXn&0i=u@GFY%58*a^a7U(r^+$IBn1awxi*e|)tjW^=7TPpQfdw3e2PkuC9_3_@Qi=D zZay@Gn`BIlX4dphSWDBsxr26pd|#}wu@1PH30NoM#nBRB57L3R`|7i~EQ6cbX?%O@ z@hSc-kX>RD7S_6DGm0_$Vcng(fOt8(utgh!8SyyI%YAKajer!/git/`. If a directory does not exist yet, you can create it with the `mkdir` shell command. + +```shell +# Clone the GitLab repository to create a local copy of the code +git clone https://earth.bsc.es/gitlab/es/sunset.git +``` +You should see a git folder "sunset" under the current directory. Now you have all the code, recipes, and scripts for running SUNSET. + + +## 1. Create Autosubmit experiment + +Since we're going to use Autosubmit to dispatch jobs, we need to have an Autosubmit experiment. Note that SUNSET uses Autosubmit >= 4.0.0. + +On the workstation or Nord3, you can create an experiment by the following commands. + +```shell +module load autosubmit/4.0.0b-foss-2015a-Python-3.7.3 +autosubmit expid -H nord3v2 -d "SUNSET use case 1_2" +``` +You will see the messages like below: + +```shell +Autosubmit is running with 4.0.0b +The new experiment "a6pc" has been registered. +Generating folder structure... +Experiment folder: /esarchive/autosubmit/a6pc +Generating config files... +Experiment a6pc created +``` +Note the experiment ID (in this snippet above, a6pc) down. We need it for the recipe later. + + +## 2. Modifying the recipe + +The template recipe for this use case can be found in [ex1_2-recipe.yml](use_cases/ex1_2_autosubmit_scorecards/ex1_2-recipe.yml). +You should at least edit some items in the "Run" section: +- `output_dir`: The directory you want to save the outputs and logs +- `code_dir`: The directory where your SUNSET code is stored (i.e., the git folder) +- `auto_conf$script`: The path to the script ex1_2-recipe.yml +- `auto_conf$expid`: The experiment "xxxx" you just created +- `auto_conf$hpc_user`: You user ID on Nord3, which should be bsc32xxx +- `auto_conf$email_address`: Your email. You can also adjust other email notification parts up to your preference. + +In the recipe, we ask for anomaly calculation after loading the data, calculate the skill scores and save the result for scorecards. In the Scorecard section, three regions are requested. + +Feel free to also modify other aspects according to your particular needs. You can read more about the parameters and the available modules in the SUNSET GitLab wiki. + +## 3. The user-defined script + +We need to have a script to define the modules to use and the steps of the workflow. Note that the script is for data loading and verification parts. The Scorecards module doesn't need to be included in this script. + +The prepare_outputs() function is already incorporated into the launcher script (see the next section for details about launcher), so it does not need to be included in the user-defined script in this case. +In its place, we will use the function read_atomic_recipe(). The recipe path is passed as an argument onto the R script. The beginning of our script should look like this: + +```R +# Load modules +source("modules/Loading/Loading.R") +source("modules/Anomalies/Anomalies.R") +source("modules/Indices/Indices.R") +source("modules/Skill/Skill.R") + +# Read recipe +args = commandArgs(trailingOnly = TRUE) +recipe_file <- args[1] +recipe <- read_atomic_recipe(recipe_file) +``` + +The rest of the user-defined script can be written in the same way as any other SUNSET script. We load the data, calculate the anomalies, then compute the skill scores and save the result as netCDF files for Scorecards. + +```R +# Load data +data <- Loading(recipe) +# Compute tos anomalies +data <- Anomalies(recipe, data) +# Compute skill metrics +skill_metrics <- Skill(recipe, data) +``` +Check the example script at [ex1_2-script.yml](use_cases/ex1_2_autosubmit_scorecards/ex1_2-script.R). +You can execute it as-is or copy it and modify it according to your needs. + + +## 4. Launch jobs and Use Autosubmit + +We will start the jobs with the launcher. The SUNSET Launcher is a bash script named launch_SUNSET.sh that can be found in the main directory of the SUNSET repository. It runs in two steps: + +1. Run the recipe checks, split the recipe into atomic recipes and create the directory for the outputs. +2. Modify the Autosubmit configuration of your experiment according to the parameters in the recipe. + +The bash script needs two inputs: (1) [recipe](#2-modifying-the-recipe) (2) [R script](#2-modifying-the-recipe). + + On your workstation or Nord3 under the SUNSET code directory, run: + +```shell +bash launch_SUNSET.sh use_cases/ex1_2_autosubmit_scorecards/ex1_2-recipe.yml use_cases/ex1_2_autosubmit_scorecards/ex1_2-script.R +``` +You will see the messages similar to below: +```shell +[1] "Saving all outputs to:" +[1] "/esarchive/scratch/aho/auto-s2s-outputs/ex1_2-recipe_20231129003740" +INFO [2023-11-29 00:37:41] Checking recipe: use_cases/ex1_2_autosubmit_scorecards/ex1_2-recipe.yml +WARN [2023-11-29 00:37:41] The element 'fcst_year' is not defined in the recipe. No forecast year will be used. +INFO [2023-11-29 00:37:41] ##### RECIPE CHECK SUCCESSFULL ##### +INFO [2023-11-29 00:37:41] Splitting recipe in single verifications. +INFO [2023-11-29 00:37:41] The main recipe has been divided into 12 atomic recipes. +INFO [2023-11-29 00:37:41] Check output directory /esarchive/scratch/aho/auto-s2s-outputs//ex1_2-recipe_20231129003740/logs/recipes/ to see all the individual atomic recipes. +INFO [2023-11-29 00:37:41] ##### AUTOSUBMIT CONFIGURATION WRITTEN FOR a6pc ##### +INFO [2023-11-29 00:37:41] You can check your experiment configuration at: /esarchive/autosubmit/a6pc/conf/ +INFO [2023-11-29 00:37:41] Please SSH into bscesautosubmit01 or bscesautosubmit02 and run the following commands: +INFO [2023-11-29 00:37:41] module load autosubmit/4.0.0b-foss-2015a-Python-3.7.3 +INFO [2023-11-29 00:37:41] autosubmit create a6pc +INFO [2023-11-29 00:37:41] autosubmit refresh a6pc +INFO [2023-11-29 00:37:41] nohup autosubmit run a6pc & disown +``` +You can see some useful information, like the the path to atomic recipes, the Autosubmit configuration files, and most importantly, follow the last lines to launch your experiment. + +```shell +ssh bscesautosubmit01.bsc.es +(enter Autosubmit machine) +module load autosubmit/4.0.0b-foss-2015a-Python-3.7.3 +autosubmit create a6pc +autosubmit refresh a6pc +nohup autosubmit run a6pc & disown +``` + +Then, you can go to [Autosubmit GUI](https://earth.bsc.es/autosubmitapp/) to check the experiment status. + + + +As you can see, the Scorecards job is dependent on the Verification jobs. Once the 12 verification jobs are finished, the Scorecards job will start. + +## 5. Results and plots + +The scorecards are saved under `plots/Scorecards` under the output directory. There will be 4 files (_more explanation here_) + + + + + + + +## 6. Rerun Autosubmit + +If something goes wrong and makes the jobs fail, you can rerun the failed jobs only. + +1. Go to Autosubmit GUI, select the failed job(s), click "CHANGE STATUS" +2. Select "Set status to:" as "WAITING". Copy the lines and run them on Autosubmit machine or workstation. +3. Fix the problem under your local SUNSET git directory. +4. Run `autosubmit refresh xxxx` and `nohup autosubmit run xxxx & disown`. + + + +If everything fails, you can also simply recreate the experiment by `autosubmit create xxxx` --> `autosubmit refresh xxxx` --> `nohup autosubmit run xxxx & disown`. + diff --git a/use_cases/ex1_2_autosubmit_scorecards/ex1_2-recipe.yml b/use_cases/ex1_2_autosubmit_scorecards/ex1_2-recipe.yml index 2de4bd48..73f16311 100644 --- a/use_cases/ex1_2_autosubmit_scorecards/ex1_2-recipe.yml +++ b/use_cases/ex1_2_autosubmit_scorecards/ex1_2-recipe.yml @@ -1,25 +1,17 @@ -################################################################################ -## RECIPE DESCRIPTION -################################################################################ - Description: - Author: V. Agudetse - Info: Test for recipe splitting - -################################################################################ -## ANALYSIS CONFIGURATION -################################################################################ + Author: An-Chi Ho + Info: Compute Skills and Plot Scorecards with Autosubmit Analysis: - Horizon: Seasonal - Variables: # ECVs and Indicators? + Horizon: seasonal + Variables: - {name: tas, freq: monthly_mean} Datasets: System: # multiple systems for single model, split if Multimodel = F - {name: ECMWF-SEAS5} Multimodel: False # single option Reference: - - {name: ERA5} # multiple references for single model? + - {name: ERA5} Time: sdate: # list, split - '0101' @@ -42,7 +34,7 @@ Analysis: Region: # multiple lists, split? Add region name if length(Region) > 1 - {name: "global", latmin: -90, latmax: 90, lonmin: 0, lonmax: 359.9} Regrid: - method: bilinear ## TODO: allow multiple methods? + method: bilinear type: to_system Workflow: Anomalies: @@ -50,32 +42,30 @@ Analysis: cross_validation: no save: 'none' Calibration: - method: raw ## TODO: list, split? + method: raw save: 'none' Skill: metric: mean_bias EnsCorr rps rpss crps crpss EnsSprErr # list, don't split cross_validation: yes save: 'all' Probabilities: - percentiles: [[1/3, 2/3]] # list, don't split + percentiles: [[1/3, 2/3]] save: 'none' - # Visualization: - # plots: skill_metrics Scorecards: execute: yes # yes/no regions: Extra-tropical NH: {lon.min: 0, lon.max: 360, lat.min: 30, lat.max: 90} Tropics: {lon.min: 0, lon.max: 360, lat.min: -30, lat.max: 30} Extra-tropical SH : {lon.min: 0, lon.max: 360, lat.min: -30, lat.max: -90} - start_months: NULL + start_months: 'all' metric: mean_bias enscorr rpss crpss enssprerr metric_aggregation: 'score' - table_label: NULL + inf_to_na: TRUE # Optional, bool: set inf values in data to NA, default is FALSE table_label: NULL fileout_label: NULL col1_width: NULL col2_width: NULL calculate_diff: FALSE - ncores: 14 + ncores: 8 remove_NAs: no # bool, don't split Output_format: Scorecards # string, don't split @@ -85,21 +75,22 @@ Analysis: Run: Loglevel: INFO Terminal: yes - output_dir: /esarchive/scratch/vagudets/auto-s2s-outputs/ - code_dir: /esarchive/scratch/vagudets/repos/auto-s2s/ + filesystem: esarchive + output_dir: /esarchive/scratch/aho/auto-s2s-outputs/ + code_dir: /esarchive/scratch/aho/git/auto-s2s/ autosubmit: yes # fill only if using autosubmit auto_conf: - script: /esarchive/scratch/vagudets/repos/auto-s2s/example_scripts/test_scorecards_workflow.R # replace with the path to your script - expid: a6ae # replace with your EXPID - hpc_user: bsc32762 # replace with your hpc username + script: /esarchive/scratch/aho/git/auto-s2s/use_cases/ex1_2_autosubmit_scorecards/ex1_2-script.R # replace with the path to your script + expid: a6pc # replace with your EXPID + hpc_user: bsc32734 # replace with your hpc username wallclock: 03:00 # hh:mm - processors_per_job: 14 + processors_per_job: 8 platform: nord3v2 custom_directives: ['#SBATCH --exclusive'] email_notifications: yes # enable/disable email notifications. Change it if you want to. - email_address: victoria.agudetse@bsc.es # replace with your email address + email_address: an.ho@bsc.es # replace with your email address notify_completed: yes # notify me by email when a job finishes - notify_failed: no # notify me by email when a job fails + notify_failed: yes # notify me by email when a job fails diff --git a/use_cases/ex1_2_autosubmit_scorecards/ex1_2-script.R b/use_cases/ex1_2_autosubmit_scorecards/ex1_2-script.R new file mode 100644 index 00000000..1f607987 --- /dev/null +++ b/use_cases/ex1_2_autosubmit_scorecards/ex1_2-script.R @@ -0,0 +1,25 @@ +############################################################################### +## Author: An-Chi Ho +## Description: Computes some skill metrics and plots scorecards with Autosubmit +## Instructions: Follow the steps described in: +## use_cases/ex1_2_autosubmit_scorecards/ex1_2-handson.md +## This script should be called by bash script launch_SUNSET.sh. +############################################################################### + +# Load modules +source("modules/Loading/Loading.R") +source("modules/Anomalies/Anomalies.R") +source("modules/Skill/Skill.R") + +# Read recipe +args = commandArgs(trailingOnly = TRUE) +recipe_file <- args[1] +recipe <- read_atomic_recipe(recipe_file) + +# Load data +data <- Loading(recipe) +# Compute tos anomalies +data <- Anomalies(recipe, data) +# Compute skill metrics +skill_metrics <- Skill(recipe, data) + -- GitLab From 9590ace650cf4f392ad6eb25ee6f8fddd0278c2e Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Wed, 13 Dec 2023 09:44:00 +0100 Subject: [PATCH 363/388] Update README --- README.md | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 538fa029..5758fbf3 100644 --- a/README.md +++ b/README.md @@ -1,19 +1,29 @@ -ESS Verification Suite +SUNSET: SUbseasoNal to decadal climate forecast post-processing and asSEmenT suite ====================== -This is the Git project for the ESS Verification Suite, which will serve as a tool for research projects and operational workflows involving subseasonal to seasonal to decadal forecast verification. +This is the Git project for the SUNSET, a collaborative in-house tool developed at BSC-ES for research projects and operational workflows involving subseasonal to seasonal to decadal forecast verification. -The main developers of the tool are Victòria Agudetse (@vagudets), An-Chi Ho (@aho), Lluís Palma (@lpalma) and Núria Pérez-Zanón (@nperez). +This is the Git project for SUNSET, an collaborative R-based tool developed in-house at BSC-ES that aims to provide climate services for sub-seasonal, seasonal and decadal climate forecast time scales. The tool post-processes climate forecast outputs by applying state-of-the-art methodologies to tailor climate products for each application and sector (e.g.: agriculture, energy, water management, or health). + +Its modular design allows flexibility in defining the required post-processing steps, as well as the products definition by deciding on the forecast system and reference datasets, variables, and forecast horizon among others. The tool also allows for the creation and visualization of climate forecast products, such as maps for the most likely terciles, and performs the verification of the products, which can be visualized on maps and scorecards. The inclusion of a launcher script provides a user-friendly way to parallelize the computation on HPC machines. + +Victòria Agudetse (@vagudets) is the maintainer of the SUNSET repository. Resources --------- -You can access the documentation of the Verification Suite through the wiki: -[Auto-s2s Wiki](https://earth.bsc.es/gitlab/es/auto-s2s/-/wikis/home?target=_blank) +You can access the documentation through the wiki: +[SUNSET Wiki](https://earth.bsc.es/gitlab/es/sunset/-/wikis/home?target=_blank) + +Use cases and hands-on tutorials are available in the repository for you to follow: + +[SUNSET Use Cases](https://earth.bsc.es/gitlab/es/sunset/-/tree/master/use_cases/) You may also find useful information in the slides from past user meetings: +[R-tools Climate Forecast Analysis Training session 2023](https://earth.bsc.es/wiki/lib/exe/fetch.php?media=tools:day2_04_handson_r_tools.pdf) + [User meeting March 2023](https://docs.google.com/presentation/d/18VoqgJCzcZTmqNyXL3op_KecsPxsWRkf/edit#slide=id.p1?target=_blank) [User meeting September 2022](https://docs.google.com/presentation/d/14-qq__fblMt7xvJDaqS5UqfQMXWCf3Ju/edit#slide=id.p1?target=_blank) @@ -25,9 +35,9 @@ Branching strategy Branches containing developments that are to be merged into the tool must contain "dev-" at the beginning of the name, followed by a short, meaningful description of the development in question. E.g. "dev-loading-subseasonal" for the branch containing developments related to the loading of subseasonal datasets. -Users that wish to incorporate their own developments into the core of the tool are encouraged to create a personal fork of the Auto-S2S repository to work on their projects. Please contact Victòria Agudetse at victoria.agudetse@bsc.es to discuss the first steps. +Users that wish to incorporate their own developments into the core of the tool are encouraged to create a local copy repository to work on their projects and push their changes to a new branch. Please contact Victòria Agudetse (@vagudets) or Núria Pérez-Zanón (@nperez) to discuss the first steps. Mailing list ------------ -User meetings, internal releases and news are announced through the mailing list. You can send an email to victoria.agudetse@bsc.es or an.ho@bsc.es to request subscription. +User meetings, internal releases and news are announced through the mailing list. You can send an email to victoria.agudetse@bsc.es to request subscription. -- GitLab From df81b24e1c1b5da8f7f8fd70823bfe22ffbf2c25 Mon Sep 17 00:00:00 2001 From: vagudets Date: Fri, 15 Dec 2023 10:46:12 +0100 Subject: [PATCH 364/388] Add generic environment (no eccodes) --- conda_installation/environment-sunset.yml | 373 ++++++++++++++++++++++ 1 file changed, 373 insertions(+) create mode 100644 conda_installation/environment-sunset.yml diff --git a/conda_installation/environment-sunset.yml b/conda_installation/environment-sunset.yml new file mode 100644 index 00000000..0427f523 --- /dev/null +++ b/conda_installation/environment-sunset.yml @@ -0,0 +1,373 @@ +name: condaSUNSET +channels: + - r + - conda-forge + - defaults +dependencies: + - _libgcc_mutex=0.1=conda_forge + - _openmp_mutex=4.5=2_gnu + - _r-mutex=1.0.1=anacondar_1 + - atk-1.0=2.38.0=hd4edc92_1 + - binutils_impl_linux-64=2.40=hf600244_0 + - blosc=1.21.5=h0f2a231_0 + - boost-cpp=1.78.0=h5adbc97_2 + - bwidget=1.9.14=ha770c72_1 + - bzip2=1.0.8=h7f98852_4 + - c-ares=1.19.1=hd590300_0 + - ca-certificates=2023.7.22=hbcca054_0 + - cairo=1.16.0=ha61ee94_1014 + - cfitsio=4.1.0=hd9d235c_0 + - curl=8.1.2=h409715c_0 + - expat=2.5.0=hcb278e6_1 + - fftw=3.3.10=nompi_hc118613_108 + - font-ttf-dejavu-sans-mono=2.37=hab24e00_0 + - font-ttf-inconsolata=3.000=h77eed37_0 + - font-ttf-source-code-pro=2.038=h77eed37_0 + - font-ttf-ubuntu=0.83=hab24e00_0 + - fontconfig=2.14.2=h14ed4e7_0 + - fonts-conda-ecosystem=1=0 + - fonts-conda-forge=1=0 + - freeglut=3.2.2=h9c3ff4c_1 + - freetype=2.12.1=h267a509_2 + - freexl=1.0.6=h166bdaf_1 + - fribidi=1.0.10=h36c2ea0_0 + - gcc_impl_linux-64=13.2.0=h338b0a0_2 + - gdal=3.5.2=py311hd39052d_7 + - gdk-pixbuf=2.42.8=hff1cb4f_1 + - geos=3.11.0=h27087fc_0 + - geotiff=1.7.1=ha76d385_4 + - gettext=0.21.1=h27087fc_0 + - gfortran_impl_linux-64=13.2.0=h76e1118_2 + - ghostscript=10.02.0=h59595ed_0 + - giflib=5.2.1=h0b41bf4_3 + - gmp=6.2.1=h58526e2_0 + - graphite2=1.3.13=h58526e2_1001 + - graphviz=6.0.2=h99bc08f_0 + - gsl=2.7=he838d99_0 + - gtk2=2.24.33=h90689f9_2 + - gts=0.7.6=h977cf35_4 + - gxx_impl_linux-64=13.2.0=h338b0a0_2 + - harfbuzz=6.0.0=h8e241bc_0 + - hdf4=4.2.15=h9772cbc_5 + - hdf5=1.12.2=nompi_h4df4325_101 + - icu=70.1=h27087fc_0 + - imagemagick=7.1.0_55=pl5321h0d24a18_0 + - jasper=2.0.33=h0ff4b12_1 + - jbig=2.1=h7f98852_2003 + - jpeg=9e=h0b41bf4_3 + - json-c=0.16=hc379101_0 + - kealib=1.4.15=ha7026e8_1 + - kernel-headers_linux-64=2.6.32=he073ed8_16 + - keyutils=1.6.1=h166bdaf_0 + - krb5=1.20.1=h81ceb04_0 + - lcms2=2.14=h6ed2654_0 + - ld_impl_linux-64=2.40=h41732ed_0 + - lerc=4.0.0=h27087fc_0 + - libaec=1.0.6=hcb278e6_1 + - libblas=3.9.0=18_linux64_openblas + - libcblas=3.9.0=18_linux64_openblas + - libcurl=8.1.2=h409715c_0 + - libdap4=3.20.6=hd7c4107_2 + - libdeflate=1.14=h166bdaf_0 + - libedit=3.1.20191231=he28a2e2_2 + - libev=4.33=h516909a_1 + - libexpat=2.5.0=hcb278e6_1 + - libffi=3.4.2=h7f98852_5 + - libgcc-devel_linux-64=13.2.0=ha9c7c90_2 + - libgcc-ng=13.2.0=h807b86a_2 + - libgd=2.3.3=h18fbbfe_3 + - libgdal=3.5.2=h27ae5c1_7 + - libgfortran-ng=13.2.0=h69a702a_2 + - libgfortran5=13.2.0=ha4646dd_2 + - libglib=2.78.0=hebfc3b9_0 + - libglu=9.0.0=he1b5a44_1001 + - libgomp=13.2.0=h807b86a_2 + - libiconv=1.17=h166bdaf_0 + - libkml=1.3.0=h37653c0_1015 + - liblapack=3.9.0=18_linux64_openblas + - libnetcdf=4.8.1=nompi_h261ec11_106 + - libnghttp2=1.52.0=h61bc06f_0 + - libnsl=2.0.0=hd590300_1 + - libopenblas=0.3.24=pthreads_h413a1c8_0 + - libpng=1.6.39=h753d276_0 + - libpq=14.5=hb675445_5 + - librsvg=2.54.4=h7abd40a_0 + - librttopo=1.1.0=hf730bdb_11 + - libsanitizer=13.2.0=h7e041cc_2 + - libspatialite=5.0.1=hfbd986c_21 + - libsqlite=3.43.0=h2797004_0 + - libssh2=1.11.0=h0841786_0 + - libstdcxx-devel_linux-64=13.2.0=ha9c7c90_2 + - libstdcxx-ng=13.2.0=h7e041cc_2 + - libtiff=4.4.0=h82bc61c_5 + - libtool=2.4.7=h27087fc_0 + - libuuid=2.38.1=h0b41bf4_0 + - libwebp=1.2.4=h522a892_0 + - libwebp-base=1.2.4=h166bdaf_0 + - libxcb=1.13=h7f98852_1004 + - libxml2=2.10.3=hca2bb57_4 + - libzip=1.10.1=h2629f0a_3 + - libzlib=1.2.13=hd590300_5 + - lz4-c=1.9.4=hcb278e6_0 + - make=4.3=hd18ef5c_1 + - ncurses=6.4=hcb278e6_0 + - nspr=4.35=h27087fc_0 + - nss=3.92=h1d7d5a4_0 + - numpy=1.26.0=py311h64a7726_0 + - openjpeg=2.5.0=h7d73246_1 + - openssl=3.1.3=hd590300_0 + - pandoc=3.1.3=h32600fe_0 + - pango=1.50.14=hd33c08f_0 + - pcre=8.45=h9c3ff4c_0 + - pcre2=10.40=hc3806b6_0 + - perl=5.32.1=4_hd590300_perl5 + - phantomjs=2.1.1=ha770c72_1 + - pip=23.2.1=pyhd8ed1ab_0 + - pixman=0.42.2=h59595ed_0 + - pkg-config=0.29.2=h36c2ea0_1008 + - poppler=22.10.0=h92391eb_0 + - poppler-data=0.4.12=hd8ed1ab_0 + - postgresql=14.5=h3248436_5 + - proj=9.1.0=h93bde94_0 + - pthread-stubs=0.4=h36c2ea0_1001 + - python=3.11.5=hab00c5b_0_cpython + - python_abi=3.11=4_cp311 + - r-abind=1.4_5=r42hc72bb7e_1005 + - r-askpass=1.2.0=r42h57805ef_0 + - r-assertthat=0.2.1=r42hc72bb7e_4 + - r-backports=1.4.1=r42h57805ef_2 + - r-base=4.2.2=h6b4767f_2 + - r-base64enc=0.1_3=r42h57805ef_1006 + - r-bigmemory=4.6.1=r42ha503ecb_2 + - r-bigmemory.sri=0.1.6=r42hc72bb7e_1 + - r-brio=1.1.3=r42h57805ef_2 + - r-bslib=0.5.1=r42hc72bb7e_0 + - r-cachem=1.0.8=r42h57805ef_1 + - r-callr=3.7.3=r42hc72bb7e_1 + - r-class=7.3_22=r42h57805ef_1 + - r-classint=0.4_10=r42h61816a4_0 + - r-cli=3.6.1=r42ha503ecb_1 + - r-climdex.pcic=1.1_11=r42ha503ecb_2 + - r-climprojdiags=0.3.2=r42hc72bb7e_1 + - r-clock=0.7.0=r42ha503ecb_1 + - r-codetools=0.2_19=r42hc72bb7e_1 + - r-colorspace=2.1_0=r42h57805ef_1 + - r-commonmark=1.9.0=r42h57805ef_1 + - r-configr=0.3.5=r42hc72bb7e_1 + - r-cowplot=1.1.1=r42hc72bb7e_2 + - r-cpp11=0.4.6=r42hc72bb7e_0 + - r-crayon=1.5.2=r42hc72bb7e_2 + - r-curl=5.0.1=r42hf9611b0_0 + - r-dbi=1.1.3=r42hc72bb7e_2 + - r-desc=1.4.2=r42hc72bb7e_2 + - r-diffobj=0.3.5=r42h57805ef_2 + - r-digest=0.6.33=r42ha503ecb_0 + - r-docopt=0.7.1=r42hc72bb7e_3 + - r-doparallel=1.0.17=r42hc72bb7e_2 + - r-dotcall64=1.0_2=r42h61816a4_2 + - r-e1071=1.7_13=r42ha503ecb_1 + - r-easyncdf=0.1.2=r42hc72bb7e_1 + - r-easyverification=0.4.5=r42ha503ecb_0 + - r-ellipsis=0.3.2=r42h57805ef_2 + - r-evaluate=0.21=r42hc72bb7e_1 + - r-fansi=1.0.4=r42h57805ef_1 + - r-farver=2.1.1=r42ha503ecb_2 + - r-fastmap=1.1.1=r42ha503ecb_1 + - r-fields=15.2=r42h61816a4_0 + - r-fnn=1.1.3.2=r42ha503ecb_1 + - r-fontawesome=0.5.2=r42hc72bb7e_0 + - r-foreach=1.5.2=r42hc72bb7e_2 + - r-formattable=0.2.1=r42ha770c72_2 + - r-fs=1.6.3=r42ha503ecb_0 + - r-future=1.33.0=r42hc72bb7e_0 + - r-generics=0.1.3=r42hc72bb7e_2 + - r-geomap=2.5_0=r42h57805ef_2 + - r-geomapdata=2.0_2=r42hc72bb7e_0 + - r-ggplot2=3.4.3=r42hc72bb7e_0 + - r-globals=0.16.2=r42hc72bb7e_1 + - r-glue=1.6.2=r42h57805ef_2 + - r-gridextra=2.3=r42hc72bb7e_1005 + - r-gtable=0.3.4=r42hc72bb7e_0 + - r-highr=0.10=r42hc72bb7e_1 + - r-htmltools=0.5.6=r42ha503ecb_0 + - r-htmlwidgets=1.6.2=r42hc72bb7e_1 + - r-httpuv=1.6.11=r42ha503ecb_1 + - r-httr=1.4.7=r42hc72bb7e_0 + - r-ini=0.3.1=r42hc72bb7e_1005 + - r-isoband=0.2.7=r42ha503ecb_2 + - r-iterators=1.0.14=r42hc72bb7e_2 + - r-jquerylib=0.1.4=r42hc72bb7e_2 + - r-jsonlite=1.8.7=r42h57805ef_0 + - r-kableextra=1.3.4=r42hc72bb7e_2 + - r-kernsmooth=2.23_22=r42h13b3f57_0 + - r-knitr=1.44=r42hc72bb7e_0 + - r-labeling=0.4.3=r42hc72bb7e_0 + - r-later=1.3.1=r42ha503ecb_1 + - r-lattice=0.21_8=r42h57805ef_1 + - r-lifecycle=1.0.3=r42hc72bb7e_2 + - r-listenv=0.9.0=r42hc72bb7e_1 + - r-lobstr=1.1.2=r42ha503ecb_3 + - r-log4r=0.4.3=r42h57805ef_1 + - r-lubridate=1.9.2=r42h57805ef_2 + - r-magick=2.7.3=r42h7525677_1 + - r-magrittr=2.0.3=r42h57805ef_2 + - r-mapproj=1.2.11=r42h57805ef_1 + - r-maps=3.4.1=r42h57805ef_2 + - r-mass=7.3_60=r42h57805ef_1 + - r-matrix=1.6_1.1=r42h316c678_0 + - r-mba=0.1_0=r42ha503ecb_1 + - r-memoise=2.0.1=r42hc72bb7e_2 + - r-memuse=4.2_3=r42h57805ef_1 + - r-mgcv=1.9_0=r42h316c678_0 + - r-mime=0.12=r42h57805ef_2 + - r-multiapply=2.1.4=r42hc72bb7e_1 + - r-munsell=0.5.0=r42hc72bb7e_1006 + - r-nbclust=3.0.1=r42hc72bb7e_2 + - r-ncdf4=1.21=r42h15f2bca_0 + - r-nlme=3.1_163=r42h61816a4_0 + - r-nnet=7.3_19=r42h57805ef_1 + - r-openssl=2.1.1=r42hb353fa6_0 + - r-parallelly=1.36.0=r42hc72bb7e_1 + - r-pbapply=1.7_2=r42hc72bb7e_0 + - r-pcict=0.5_4.4=r42h57805ef_1 + - r-pillar=1.9.0=r42hc72bb7e_1 + - r-pkgbuild=1.4.2=r42hc72bb7e_0 + - r-pkgconfig=2.0.3=r42hc72bb7e_3 + - r-pkgload=1.3.3=r42hc72bb7e_0 + - r-plyr=1.8.8=r42ha503ecb_1 + - r-praise=1.0.0=r42hc72bb7e_1007 + - r-prettyunits=1.2.0=r42hc72bb7e_0 + - r-processx=3.8.2=r42h57805ef_0 + - r-proj4=1.0_12=r42h4db2be8_0 + - r-promises=1.2.1=r42ha503ecb_0 + - r-proxy=0.4_27=r42h57805ef_2 + - r-pryr=0.1.6=r42ha503ecb_1 + - r-ps=1.7.5=r42h57805ef_1 + - r-r6=2.5.1=r42hc72bb7e_2 + - r-rappdirs=0.3.3=r42h57805ef_2 + - r-rcolorbrewer=1.1_3=r42h6115d3f_0 + - r-rcpp=1.0.11=r42h7df8631_0 + - r-rcpparmadillo=0.12.6.4.0=r42h08d816e_0 + - r-rcpptoml=0.2.2=r42ha503ecb_1 + - r-rematch2=2.1.2=r42hc72bb7e_3 + - r-rlang=1.1.1=r42ha503ecb_1 + - r-rmarkdown=2.25=r42hc72bb7e_0 + - r-rnaturalearth=0.1.0=r42hc72bb7e_1 + - r-rpmg=2.2_7=r42hc72bb7e_0 + - r-rprojroot=2.0.3=r42hc72bb7e_1 + - r-rstudioapi=0.15.0=r42hc72bb7e_0 + - r-rvest=1.0.3=r42hc72bb7e_2 + - r-s2=1.1.4=r42h5eac2b3_1 + - r-s2dv=1.4.1=r42hc72bb7e_1 + - r-s2dverification=2.10.3=r42hc72bb7e_2 + - r-sass=0.4.7=r42ha503ecb_0 + - r-scales=1.2.1=r42hc72bb7e_2 + - r-selectr=0.4_2=r42hc72bb7e_3 + - r-sf=1.0_7=r42h25da31b_5 + - r-shiny=1.7.5=r42h785f33e_0 + - r-sourcetools=0.1.7_1=r42ha503ecb_1 + - r-sp=2.0_0=r42h57805ef_0 + - r-spam=2.9_1=r42hd9ac46e_2 + - r-specsverification=0.5_3=r42h7525677_2 + - r-splancs=2.01_44=r42h61816a4_0 + - r-startr=2.3.0=r42hc72bb7e_0 + - r-stringi=1.7.12=r42h1ae9187_0 + - r-stringr=1.5.0=r42h785f33e_1 + - r-svglite=2.1.1=r42h329214f_1 + - r-sys=3.4.2=r42h57805ef_1 + - r-systemfonts=1.0.4=r42haf97adc_2 + - r-testthat=3.1.10=r42ha503ecb_0 + - r-tibble=3.2.1=r42h57805ef_2 + - r-timechange=0.2.0=r42ha503ecb_1 + - r-tinytex=0.46=r42hc72bb7e_0 + - r-tzdb=0.4.0=r42ha503ecb_1 + - r-units=0.8_4=r42ha503ecb_0 + - r-utf8=1.2.3=r42h57805ef_1 + - r-uuid=1.1_1=r42h57805ef_0 + - r-vctrs=0.6.3=r42ha503ecb_0 + - r-viridis=0.6.4=r42hc72bb7e_0 + - r-viridislite=0.4.2=r42hc72bb7e_1 + - r-waldo=0.5.1=r42hc72bb7e_1 + - r-webshot=0.5.5=r42hc72bb7e_0 + - r-withr=2.5.1=r42hc72bb7e_0 + - r-wk=0.8.0=r42ha503ecb_0 + - r-xfun=0.40=r42ha503ecb_0 + - r-xml2=1.3.3=r42h044e5c7_2 + - r-xtable=1.8_4=r42hc72bb7e_5 + - r-yaml=2.3.5=r42h06615bd_1 + - readline=8.2=h8228510_1 + - sed=4.8=he412f7d_0 + - setuptools=68.2.2=pyhd8ed1ab_0 + - snappy=1.1.10=h9fff704_0 + - sqlite=3.43.0=h2c6b66d_0 + - sysroot_linux-64=2.12=he073ed8_16 + - tiledb=2.11.3=h3f4058f_1 + - tk=8.6.13=h2797004_0 + - tktable=2.10=h0c5db8f_5 + - tzcode=2023c=h0b41bf4_0 + - tzdata=2023c=h71feb2d_0 + - udunits2=2.2.28=h40f5838_2 + - wheel=0.41.2=pyhd8ed1ab_0 + - xerces-c=3.2.4=h55805fa_1 + - xorg-fixesproto=5.0=h7f98852_1002 + - xorg-inputproto=2.3.2=h7f98852_1002 + - xorg-kbproto=1.0.7=h7f98852_1002 + - xorg-libice=1.0.10=h7f98852_0 + - xorg-libsm=1.2.3=hd9c2040_1000 + - xorg-libx11=1.8.4=h0b41bf4_0 + - xorg-libxau=1.0.11=hd590300_0 + - xorg-libxdmcp=1.1.3=h7f98852_0 + - xorg-libxext=1.3.4=h0b41bf4_2 + - xorg-libxfixes=5.0.3=h7f98852_1004 + - xorg-libxi=1.7.10=h7f98852_0 + - xorg-libxrender=0.9.10=h7f98852_1003 + - xorg-libxt=1.3.0=hd590300_0 + - xorg-renderproto=0.11.1=h7f98852_1002 + - xorg-xextproto=7.3.0=h0b41bf4_1003 + - xorg-xproto=7.0.31=h7f98852_1007 + - xz=5.2.6=h166bdaf_0 + - zlib=1.2.13=hd590300_5 + - zstd=1.5.5=hfc55251_0 + - pip: + - argparse==1.4.0 + - autosubmit==4.0.98 + - autosubmitconfigparser==1.0.49 + - bcrypt==4.0.1 + - bscearth-utils==0.5.2 + - cdo==1.6.0 + - certifi==2023.7.22 + - cffi==1.16.0 + - charset-normalizer==3.3.1 + - configobj==5.0.8 + - coverage==7.3.2 + - cryptography==41.0.5 + - cycler==0.12.1 + - cython==3.0.4 + - fonttools==4.43.1 + - idna==3.4 + - iniconfig==2.0.0 + - kiwisolver==1.4.5 + - matplotlib==3.5.3 + - mock==5.1.0 + - networkx==2.6.3 + - nose==1.3.7 + - packaging==23.2 + - paramiko==3.3.1 + - pillow==10.1.0 + - pluggy==1.3.0 + - portalocker==2.7.0 + - psutil==5.9.6 + - py3dotplus==1.1.0 + - pycparser==2.21 + - pygments==2.16.1 + - pynacl==1.5.0 + - pyparsing==3.1.1 + - pytest==7.4.3 + - python-dateutil==2.8.2 + - pythondialog==3.5.3 + - requests==2.31.0 + - ruamel-yaml==0.17.21 + - six==1.16.0 + - urllib3==2.0.7 + - xlib==0.21 +# prefix: /perm/cyce/conda/envs/condaCerise -- GitLab From c4deee36d968e9002e5445739a436648512e62f2 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Fri, 15 Dec 2023 14:55:45 +0100 Subject: [PATCH 365/388] Set default value for na.rm in Anomalies() --- modules/Anomalies/Anomalies.R | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/modules/Anomalies/Anomalies.R b/modules/Anomalies/Anomalies.R index edb6a8be..2d54365a 100644 --- a/modules/Anomalies/Anomalies.R +++ b/modules/Anomalies/Anomalies.R @@ -20,6 +20,11 @@ Anomalies <- function(recipe, data) { cross <- FALSE cross_msg <- "without" } + if (is.null(recipe$Analysis$remove_NAs)) { + na.rm <- FALSE + } else { + na.rm <- recipe$Analysis$remove_NAs + } original_dims <- data$hcst$dim # Save full fields @@ -57,12 +62,12 @@ Anomalies <- function(recipe, data) { clim_hcst <- Apply(data$hcst$data, target_dims = c('syear', 'ensemble'), mean, - na.rm = recipe$Analysis$remove_NAs, + na.rm = na.rm, ncores = recipe$Analysis$ncores)$output1 clim_obs <- Apply(data$obs$data, target_dims = c('syear', 'ensemble'), mean, - na.rm = recipe$Analysis$remove_NAs, + na.rm = na.rm, ncores = recipe$Anaysis$ncores)$output1 data$hcst$data <- Ano(data = data$hcst$data, clim = clim_hcst) data$obs$data <- Ano(data = data$obs$data, clim = clim_obs) -- GitLab From 3cf3712dd51d55f01616ccb9c04e75585792813b Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Mon, 18 Dec 2023 10:45:51 +0100 Subject: [PATCH 366/388] Correct seasonal grid consistency check --- modules/Loading/R/load_seasonal.R | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/modules/Loading/R/load_seasonal.R b/modules/Loading/R/load_seasonal.R index a77f239e..32c7edf8 100644 --- a/modules/Loading/R/load_seasonal.R +++ b/modules/Loading/R/load_seasonal.R @@ -313,35 +313,40 @@ load_seasonal <- function(recipe) { # Convert obs to s2dv_cube obs <- as.s2dv_cube(obs) - + # Check for consistency between hcst and obs grid if (!(recipe$Analysis$Regrid$type == 'none')) { - if (!isTRUE(all.equal(as.vector(hcst$lat), as.vector(obs$lat)))) { + if (!isTRUE(all.equal(as.vector(hcst$coords$latitude), + as.vector(obs$coords$latitude)))) { lat_error_msg <- paste("Latitude mismatch between hcst and obs.", "Please check the original grids and the", "regrid parameters in your recipe.") error(recipe$Run$logger, lat_error_msg) - hcst_lat_msg <- paste0("First hcst lat: ", hcst$lat[1], - "; Last hcst lat: ", hcst$lat[length(hcst$lat)]) + hcst_lat_msg <- paste0("First hcst lat: ", hcst$coords$latitude[1], + "; Last hcst lat: ", + hcst$coords$latitude[length(hcst$coords$latitude)]) info(recipe$Run$logger, hcst_lat_msg) - obs_lat_msg <- paste0("First obs lat: ", obs$lat[1], - "; Last obs lat: ", obs$lat[length(obs$lat)]) + obs_lat_msg <- paste0("First obs lat: ", obs$coords$latitude[1], + "; Last obs lat: ", + obs$coords$latitude[length(obs$coords$latitude)]) info(recipe$Run$logger, obs_lat_msg) stop("hcst and obs don't share the same latitudes.") } - if (!isTRUE(all.equal(as.vector(hcst$lon), as.vector(obs$lon)))) { + if (!isTRUE(all.equal(as.vector(hcst$coords$longitude), + as.vector(obs$coords$longitude)))) { lon_error_msg <- paste("Longitude mismatch between hcst and obs.", "Please check the original grids and the", "regrid parameters in your recipe.") error(recipe$Run$logger, lon_error_msg) - hcst_lon_msg <- paste0("First hcst lon: ", hcst$lon[1], - "; Last hcst lon: ", hcst$lon[length(hcst$lon)]) + hcst_lon_msg <- paste0("First hcst lon: ", hcst$coords$longitude[1], + "; Last hcst lon: ", + hcst$coords$longitude[length(hcst$coords$longitude)]) info(recipe$Run$logger, hcst_lon_msg) - obs_lon_msg <- paste0("First obs lon: ", obs$lon[1], - "; Last obs lon: ", obs$lon[length(obs$lon)]) + obs_lon_msg <- paste0("First obs lon: ", obs$coords$longitude[1], + "; Last obs lon: ", + obs$coords$longitude[length(obs$coords$longitude)]) info(recipe$Run$logger, obs_lon_msg) stop("hcst and obs don't share the same longitudes.") - } } -- GitLab From 3413cc103397d64f2a75095e78f69d6e7e1c2805 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Mon, 18 Dec 2023 12:58:49 +0100 Subject: [PATCH 367/388] Refactor grid consistency check --- modules/Loading/R/compare_exp_obs_grids.R | 35 +++++++++++++++++++++++ modules/Loading/R/load_decadal.R | 30 ++----------------- modules/Loading/R/load_seasonal.R | 34 ++-------------------- modules/Loading/R/load_tas_tos.R | 30 ++----------------- 4 files changed, 41 insertions(+), 88 deletions(-) create mode 100644 modules/Loading/R/compare_exp_obs_grids.R diff --git a/modules/Loading/R/compare_exp_obs_grids.R b/modules/Loading/R/compare_exp_obs_grids.R new file mode 100644 index 00000000..0270cd63 --- /dev/null +++ b/modules/Loading/R/compare_exp_obs_grids.R @@ -0,0 +1,35 @@ +compare_exp_obs_grids <- function(exp, obs) { + # Check for consistency between exp and obs grid + if (!isTRUE(all.equal(as.vector(exp$coords$latitude), + as.vector(obs$coords$latitude)))) { + lat_error_msg <- paste("Latitude mismatch between exp and obs.", + "Please check the original grids and the", + "regrid parameters in your recipe.") + error(recipe$Run$logger, lat_error_msg) + exp_lat_msg <- paste0("First exp lat: ", exp$coords$latitude[1], + "; Last exp lat: ", + exp$coords$latitude[length(exp$coords$latitude)]) + info(recipe$Run$logger, exp_lat_msg) + obs_lat_msg <- paste0("First obs lat: ", obs$coords$latitude[1], + "; Last obs lat: ", + obs$coords$latitude[length(obs$coords$latitude)]) + info(recipe$Run$logger, obs_lat_msg) + stop("exp and obs don't share the same latitudes.") + } + if (!isTRUE(all.equal(as.vector(exp$coords$longitude), + as.vector(obs$coords$longitude)))) { + lon_error_msg <- paste("Longitude mismatch between exp and obs.", + "Please check the original grids and the", + "regrid parameters in your recipe.") + error(recipe$Run$logger, lon_error_msg) + exp_lon_msg <- paste0("First exp lon: ", exp$coords$longitude[1], + "; Last exp lon: ", + exp$coords$longitude[length(exp$coords$longitude)]) + info(recipe$Run$logger, exp_lon_msg) + obs_lon_msg <- paste0("First obs lon: ", obs$coords$longitude[1], + "; Last obs lon: ", + obs$coords$longitude[length(obs$coords$longitude)]) + info(recipe$Run$logger, obs_lon_msg) + stop("exp and obs don't share the same longitudes.") + } +} diff --git a/modules/Loading/R/load_decadal.R b/modules/Loading/R/load_decadal.R index 48ffe8c5..797d6872 100644 --- a/modules/Loading/R/load_decadal.R +++ b/modules/Loading/R/load_decadal.R @@ -11,6 +11,7 @@ source("modules/Loading/R/helper_loading_decadal.R") source("modules/Loading/R/dates2load.R") source("modules/Loading/R/check_latlon.R") source("modules/Loading/R/get_timeidx.R") +source("modules/Loading/R/compare_exp_obs_grids.R") #==================================================================== @@ -454,35 +455,8 @@ load_decadal <- function(recipe) { # lat and lon attributes if (!(recipe$Analysis$Regrid$type == 'none')) { - if (!identical(as.vector(hcst$lat), as.vector(fcst$lat))) { - lat_error_msg <- paste("Latitude mismatch between hcst and fcst.", - "Please check the original grids and the", - "regrid parameters in your recipe.") - error(recipe$Run$logger, lat_error_msg) - hcst_lat_msg <- paste0("First hcst lat: ", hcst$lat[1], - "; Last hcst lat: ", hcst$lat[length(hcst$lat)]) - info(recipe$Run$logger, hcst_lat_msg) - fcst_lat_msg <- paste0("First fcst lat: ", fcst$lat[1], - "; Last fcst lat: ", fcst$lat[length(fcst$lat)]) - info(recipe$Run$logger, fcst_lat_msg) - stop("hcst and fcst don't share the same latitudes.") - } - - if (!identical(as.vector(hcst$lon), as.vector(fcst$lon))) { - lon_error_msg <- paste("Longitude mismatch between hcst and fcst.", - "Please check the original grids and the", - "regrid parameters in your recipe.") - error(recipe$Run$logger, lon_error_msg) - hcst_lon_msg <- paste0("First hcst lon: ", hcst$lon[1], - "; Last hcst lon: ", hcst$lon[length(hcst$lon)]) - info(recipe$Run$logger, hcst_lon_msg) - fcst_lon_msg <- paste0("First fcst lon: ", fcst$lon[1], - "; Last fcst lon: ", fcst$lon[length(fcst$lon)]) - info(recipe$Run$logger, fcst_lon_msg) - stop("hcst and fcst don't share the same longitudes.") - } + compare_exp_obs_grids(hcst, obs) } - } #------------------------------------------- diff --git a/modules/Loading/R/load_seasonal.R b/modules/Loading/R/load_seasonal.R index 32c7edf8..14f34d1c 100644 --- a/modules/Loading/R/load_seasonal.R +++ b/modules/Loading/R/load_seasonal.R @@ -4,6 +4,7 @@ source("/esarchive/scratch/vagudets/repos/csoperational/R/get_regrid_params.R") source("modules/Loading/R/dates2load.R") source("modules/Loading/R/get_timeidx.R") source("modules/Loading/R/check_latlon.R") +source("modules/Loading/R/compare_exp_obs_grids.R") load_seasonal <- function(recipe) { @@ -316,38 +317,7 @@ load_seasonal <- function(recipe) { # Check for consistency between hcst and obs grid if (!(recipe$Analysis$Regrid$type == 'none')) { - if (!isTRUE(all.equal(as.vector(hcst$coords$latitude), - as.vector(obs$coords$latitude)))) { - lat_error_msg <- paste("Latitude mismatch between hcst and obs.", - "Please check the original grids and the", - "regrid parameters in your recipe.") - error(recipe$Run$logger, lat_error_msg) - hcst_lat_msg <- paste0("First hcst lat: ", hcst$coords$latitude[1], - "; Last hcst lat: ", - hcst$coords$latitude[length(hcst$coords$latitude)]) - info(recipe$Run$logger, hcst_lat_msg) - obs_lat_msg <- paste0("First obs lat: ", obs$coords$latitude[1], - "; Last obs lat: ", - obs$coords$latitude[length(obs$coords$latitude)]) - info(recipe$Run$logger, obs_lat_msg) - stop("hcst and obs don't share the same latitudes.") - } - if (!isTRUE(all.equal(as.vector(hcst$coords$longitude), - as.vector(obs$coords$longitude)))) { - lon_error_msg <- paste("Longitude mismatch between hcst and obs.", - "Please check the original grids and the", - "regrid parameters in your recipe.") - error(recipe$Run$logger, lon_error_msg) - hcst_lon_msg <- paste0("First hcst lon: ", hcst$coords$longitude[1], - "; Last hcst lon: ", - hcst$coords$longitude[length(hcst$coords$longitude)]) - info(recipe$Run$logger, hcst_lon_msg) - obs_lon_msg <- paste0("First obs lon: ", obs$coords$longitude[1], - "; Last obs lon: ", - obs$coords$longitude[length(obs$coords$longitude)]) - info(recipe$Run$logger, obs_lon_msg) - stop("hcst and obs don't share the same longitudes.") - } + compare_exp_obs_grids(hcst, obs) } # Remove negative values in accumulative variables diff --git a/modules/Loading/R/load_tas_tos.R b/modules/Loading/R/load_tas_tos.R index 5e6b8837..34f6220c 100644 --- a/modules/Loading/R/load_tas_tos.R +++ b/modules/Loading/R/load_tas_tos.R @@ -4,7 +4,7 @@ source("modules/Loading/R/dates2load.R") source("modules/Loading/R/get_timeidx.R") source("modules/Loading/R/check_latlon.R") source('modules/Loading/R/mask_tas_tos.R') - +source("modules/Loading/R/compare_exp_obs_grids.R") load_tas_tos <- function(recipe) { @@ -477,33 +477,7 @@ load_tas_tos <- function(recipe) { # Check for consistency between hcst and obs grid if (!(recipe$Analysis$Regrid$type == 'none')) { - if (!isTRUE(all.equal(as.vector(hcst$lat), as.vector(obs$lat)))) { - lat_error_msg <- paste("Latitude mismatch between hcst and obs.", - "Please check the original grids and the", - "regrid parameters in your recipe.") - error(recipe$Run$logger, lat_error_msg) - hcst_lat_msg <- paste0("First hcst lat: ", hcst$lat[1], - "; Last hcst lat: ", hcst$lat[length(hcst$lat)]) - info(recipe$Run$logger, hcst_lat_msg) - obs_lat_msg <- paste0("First obs lat: ", obs$lat[1], - "; Last obs lat: ", obs$lat[length(obs$lat)]) - info(recipe$Run$logger, obs_lat_msg) - stop("hcst and obs don't share the same latitudes.") - } - if (!isTRUE(all.equal(as.vector(hcst$lon), as.vector(obs$lon)))) { - lon_error_msg <- paste("Longitude mismatch between hcst and obs.", - "Please check the original grids and the", - "regrid parameters in your recipe.") - error(recipe$Run$logger, lon_error_msg) - hcst_lon_msg <- paste0("First hcst lon: ", hcst$lon[1], - "; Last hcst lon: ", hcst$lon[length(hcst$lon)]) - info(recipe$Run$logger, hcst_lon_msg) - obs_lon_msg <- paste0("First obs lon: ", obs$lon[1], - "; Last obs lon: ", obs$lon[length(obs$lon)]) - info(recipe$Run$logger, obs_lon_msg) - stop("hcst and obs don't share the same longitudes.") - - } + compare_exp_obs_grids(exp = hcst, obs = obs) } info(recipe$Run$logger, -- GitLab From e26048975b63d852dc79e41d6076159bedc8765f Mon Sep 17 00:00:00 2001 From: vagudets Date: Thu, 11 Jan 2024 10:41:58 +0100 Subject: [PATCH 368/388] Update hub modules --- MODULES | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/MODULES b/MODULES index e2709d66..6654c092 100644 --- a/MODULES +++ b/MODULES @@ -17,6 +17,16 @@ if [[ $BSC_MACHINE == "nord3v2" ]]; then module load PROJ/9.0.0-GCCcore-8.3.0 module load Phantomjs/2.1.1 +elif [[ $HOSTNAME == "bsceshub02.bsc.es" ]]; then + + module purge + module load CDO/1.9.8-foss-2021b + module load R/4.2.1-foss-2021b + module load GEOS/3.11.0-GCC-11.2.0 + module load GDAL/3.5.2-foss-2021b-Python-3.9.6 + module load PROJ/9.1.0-foss-2021b + module load Phantomjs/2.1.1 + else module purge -- GitLab From 45ce374d32e3dd53fe5c4eb2682ff5b8f5568b5e Mon Sep 17 00:00:00 2001 From: vagudets Date: Thu, 11 Jan 2024 15:41:22 +0100 Subject: [PATCH 369/388] Add get_regrid_params(); remove source from scratch --- modules/Loading/R/get_regrid_params.R | 73 +++++++++++++++++++++++++++ modules/Loading/R/load_decadal.R | 11 +--- modules/Loading/R/load_seasonal.R | 3 +- modules/Loading/R/load_tas_tos.R | 2 +- 4 files changed, 77 insertions(+), 12 deletions(-) create mode 100644 modules/Loading/R/get_regrid_params.R diff --git a/modules/Loading/R/get_regrid_params.R b/modules/Loading/R/get_regrid_params.R new file mode 100644 index 00000000..ef08adcd --- /dev/null +++ b/modules/Loading/R/get_regrid_params.R @@ -0,0 +1,73 @@ +#'Read regrid parameters from recipe and returns a list for use with Start() +#' +#'The purpose of this function is to read the recipe and archive configuration +#'data for Auto-S2S workflows, retrieve the regridding parameters for hcst and +#'obs, and return an object that can be the input for 'transform' and +#''transform_params' when the data is loaded using Start(). +#'Requires CDORemapper. +#' +#'@param recipe Auto-S2S configuration recipe as returned by read_yaml() +#'@param archive Auto-S2S exp and obs archive as returned by read_yaml() +#' +#'@return A list containing regridding parameters for fcst and obs +#' +#'@import startR +#'@examples +#'setwd("/esarchive/scratch/vagudets/repos/auto-s2s/") +#'library(yaml) +#'library(startR) +#'recipe <- read_yaml("modules/data_load/recipe_1.yml") +#'archive <- read_yaml(paste0(recipe$Run$code_dir, "conf/archive.yml"))$archive +#'regrid_params <- get_regrid_params(recipe, archive) +#' +#'@export +get_regrid_params <- function(recipe, archive) { + + ## TODO: Multi-model case + ## If multi-model, use the first system grid? + ## TODO: 'NULL' entries had to be removed due to bug in Start(). Rewrite when + ## the bug is fixed. + exp.name <- recipe$Analysis$Datasets$System$name + ref.name <- recipe$Analysis$Datasets$Reference$name + exp_descrip <- archive$System[[exp.name]] + reference_descrip <- archive$Reference[[ref.name]] + + if (tolower(recipe$Analysis$Regrid$type) == 'to_reference') { + + regrid_params <- list(fcst.gridtype = reference_descrip$reference_grid, + fcst.gridmethod = recipe$Analysis$Regrid$method, + fcst.transform = CDORemapper, + obs.gridtype = NULL, + obs.gridmethod = NULL, + obs.transform = NULL) + + } else if (tolower(recipe$Analysis$Regrid$type) == 'to_system') { + + regrid_params <- list(fcst.gridtype = NULL, + fcst.gridmethod = NULL, + fcst.transform = NULL, + obs.gridtype = exp_descrip$reference_grid, + obs.gridmethod = recipe$Analysis$Regrid$method, + obs.transform = CDORemapper) + + } else if (tolower(recipe$Analysis$Regrid$type) == 'none') { + + regrid_params <- list(fcst.gridtype = NULL, + fcst.gridmethod = NULL, + fcst.transform = NULL, + obs.gridtype = NULL, + obs.gridmethod = NULL, + obs.transform = NULL) + + } else { + regrid_params <- list(fcst.gridtype = recipe$Analysis$Regrid$type, + fcst.gridmethod = recipe$Analysis$Regrid$method, + fcst.transform = CDORemapper, + obs.gridtype = recipe$Analysis$Regrid$type, + obs.gridmethod = recipe$Analysis$Regrid$method, + obs.transform = CDORemapper) + } + + return(regrid_params) +} + diff --git a/modules/Loading/R/load_decadal.R b/modules/Loading/R/load_decadal.R index 797d6872..9268b090 100644 --- a/modules/Loading/R/load_decadal.R +++ b/modules/Loading/R/load_decadal.R @@ -1,12 +1,5 @@ -# Loading module: -# 1. archive.yml -# 2. recipe.yml -# 3. Load_decadal.R (V) -#setwd('/esarchive/scratch/aho/git/auto-s2s/') - -## TODO: remove paths to personal scratchs -source("/esarchive/scratch/vagudets/repos/csoperational/R/get_regrid_params.R") # Load required libraries/funs +source("modules/Loading/R/get_regrid_params.R") source("modules/Loading/R/helper_loading_decadal.R") source("modules/Loading/R/dates2load.R") source("modules/Loading/R/check_latlon.R") @@ -20,7 +13,7 @@ source("modules/Loading/R/compare_exp_obs_grids.R") load_decadal <- function(recipe) { ## - archive <- read_yaml(paste0("conf/archive_decadal.yml"))$esarchive + archive <- read_yaml(paste0("conf/archive_decadal.yml"))[[recipe$Run$filesystem]] # Print Start() info or not DEBUG <- FALSE diff --git a/modules/Loading/R/load_seasonal.R b/modules/Loading/R/load_seasonal.R index 14f34d1c..2caa34a9 100644 --- a/modules/Loading/R/load_seasonal.R +++ b/modules/Loading/R/load_seasonal.R @@ -1,6 +1,5 @@ -## TODO: remove paths to personal scratchs -source("/esarchive/scratch/vagudets/repos/csoperational/R/get_regrid_params.R") # Load required libraries/funs +source("modules/Loading/R/get_regrid_params.R") source("modules/Loading/R/dates2load.R") source("modules/Loading/R/get_timeidx.R") source("modules/Loading/R/check_latlon.R") diff --git a/modules/Loading/R/load_tas_tos.R b/modules/Loading/R/load_tas_tos.R index 34f6220c..ea231b56 100644 --- a/modules/Loading/R/load_tas_tos.R +++ b/modules/Loading/R/load_tas_tos.R @@ -1,5 +1,5 @@ -source("/esarchive/scratch/vagudets/repos/csoperational/R/get_regrid_params.R") # Load required libraries/funs +source("modules/Loading/R/get_regrid_params.R") source("modules/Loading/R/dates2load.R") source("modules/Loading/R/get_timeidx.R") source("modules/Loading/R/check_latlon.R") -- GitLab From 7fe71264a1ef1be4e8abf481265c56c7c5cef4ed Mon Sep 17 00:00:00 2001 From: vagudets Date: Fri, 12 Jan 2024 10:36:27 +0100 Subject: [PATCH 370/388] remove TODO --- split.R | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/split.R b/split.R index 9bd95e86..0d443c7c 100755 --- a/split.R +++ b/split.R @@ -29,9 +29,8 @@ arguments <- docopt(doc = doc) recipe <- prepare_outputs(recipe_file = arguments$recipe, uniqueID = !arguments$disable_unique_ID, restructure = FALSE) -# Split recipe into atomic recipes -## TODO: Add autosubmit yes/no to the parameters? +# Split recipe into atomic recipes run_parameters <- divide_recipe(recipe) if (!is.null(recipe$Run$autosubmit) && (recipe$Run$autosubmit)) { -- GitLab From 2368771997846929190dc5d26aae584b978e918d Mon Sep 17 00:00:00 2001 From: vagudets Date: Fri, 12 Jan 2024 10:36:35 +0100 Subject: [PATCH 371/388] Update NEWS --- NEWS.md | 59 +++++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 49 insertions(+), 10 deletions(-) diff --git a/NEWS.md b/NEWS.md index e8cda565..40f97c3a 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,21 +1,60 @@ +SUNSET v2.0.0 +============= + +Modules: Loading, Units, Anomalies, Calibration, Downscaling, Indices, Skill, Saving, Visualization, Scorecards + +New features: +- New module for unit conversion, available for temperature, precipitation and pressure variables. +- New Indices module with the following indices available: NAO, Niño1+2, Niño3, Niño3.4 and Niño4. +- New Scorecards module to create Scorecard visualizations of the computed skill metrics. +- New Downscaling module making use of the in-house CSDownscale package. +- Recipe splitting feature: A recipe can be split into 'atomic recipes' and the same workflow can be easily parallelized for multiple forecast systems, references, variables, start dates and regions. +- Option to load, process, save and plot multiple variables in one atomic recipe. +- Possibility to use Autosubmit 4 as a workflow manager to run recipes in parallel. +- New SUNSET launcher script to split a recipe and run it in parallel directly in the cluster with SLURM or with Autosubmit. +- Option to load tas-tos blend by requesting the 'tas-tos' variable. +- For each module there is the possibility to choose whether or not to save the forecast, hindcast and/or observations. +- New skill metrics MSSS and MSE available. +- New use cases with hands-on tutorials. +- GRIB file loading. + +Summary of bugfixes/improvements: + +- The names of the module functions have changed to be the same as the name of the module (e.g. load_datasets() has become Loading()). The old names will be deprecated in a future release. +- New datasets and variables added to the seasonal archive. +- The launcher script and the prepare_outputs() function have a new "disable_unique_ID" option, which removes the numerical identifier that is added to the name of the output folder when it is generated. +- The seasonal and decadal loading functions have been renamed and can now sourced and called from the same Loading module. +- Bugfix in the recipe checker: checks are now completed even when the time horizon is not correct. +- The functions have been adapted to the new s2dv_cube structure in CSTools>5.0.0. +- The metric 'corr' (correlation for each ensemble member) has been renamed to 'corr_individual_members'. +- Datasets saved under 'daily' folders in esarchive can now be loaded along with 'daily_mean' datasets. +- Start date information has been added to the plot names to avoid overwriting plots from different start dates. +- In the Visualization section of the recipe, the user can specify which plots to generate, whether they should be in a single-panel or multi-panel layout, and choose between different projections. +- General improvements to the plots: color scheme, units, titles and subtitles, layout and colorbars. +- Anomalies module can compute anomalies when hindcast and observations do not share the same grid. +- Added module configuration to run SUNSET in the BSC hub. +- Language specification has been added to lubridate functions to ensure they work well in all language locales. + ESS Verification Suite v1.1.0 +============================= Modules: Loading, Anomalies, Calibration, Skill, Saving, Visualization New features: -New module for anomaly computation. -New 'Scorecards' output format (different file names and paths from the default format). -New 'recipe checker' feature in prepare_outputs(): It runs a series of checks on the recipe to detect potential errors, typos, or missing information. +- New module for anomaly computation. +- New 'Scorecards' output format (different file names and paths from the default format). +- New 'recipe checker' feature in prepare_outputs(): It runs a series of checks on the recipe to detect potential errors, typos, or missing information. + Summary of fixes/improvements: -Changed the names of the seasonal systems from the names in /esarchive to the official names in the CDS. -Fixed a bug in the conversion of precipitation units. -Fixed a bug related to the consistency between experiment and observation dates for some systems. -Function parameters have been simplified and uniformized. -Improvements in the logging functionality for longer messages. -Improvements to the plots generated by the Visualization module. -compute_probabilities() now returns the fcst probabilities as well. +- Changed the names of the seasonal systems from the names in /esarchive to the official names in the CDS. +- Fixed a bug in the conversion of precipitation units. +- Fixed a bug related to the consistency between experiment and observation dates for some systems. +- Function parameters have been simplified and uniformized. +- Improvements in the logging functionality for longer messages. +- Improvements to the plots generated by the Visualization module. +- compute_probabilities() now returns the fcst probabilities as well. ESS Verification Suite v1.0.0 ============================= -- GitLab From 28f54118cb740474661526b886a362df9a4184ac Mon Sep 17 00:00:00 2001 From: vagudets Date: Fri, 12 Jan 2024 10:38:21 +0100 Subject: [PATCH 372/388] Move recipes --- recipe_ecvs_seasonal_oper.yml | 73 ------------ .../{ => examples}/recipe_decadal_split.yml | 0 .../examples/recipe_ecvs_seasonal_oper.yml | 10 +- recipes/{ => examples}/recipe_scorecards.yml | 0 .../recipe_splitting_example.yml | 0 recipes/recipe_scorecards_vic.yml | 106 ------------------ 6 files changed, 5 insertions(+), 184 deletions(-) delete mode 100644 recipe_ecvs_seasonal_oper.yml rename recipes/{ => examples}/recipe_decadal_split.yml (100%) rename recipes/{ => examples}/recipe_scorecards.yml (100%) rename recipes/{ => examples}/recipe_splitting_example.yml (100%) delete mode 100644 recipes/recipe_scorecards_vic.yml diff --git a/recipe_ecvs_seasonal_oper.yml b/recipe_ecvs_seasonal_oper.yml deleted file mode 100644 index 832f36d5..00000000 --- a/recipe_ecvs_seasonal_oper.yml +++ /dev/null @@ -1,73 +0,0 @@ -Description: - Author: nperez - Info: ECVs Oper ESS ECMWF SEAS5 Seasonal Forecast recipe (monthly mean, tas) - -Analysis: - Horizon: seasonal # Mandatory, str: either subseasonal, seasonal, or decadal - Variables: - - {name: tas, freq: monthly_mean, units: C} - - {name: prlr, freq: monthly_mean, units: mm, flux: no} - Datasets: - System: - - {name: ECMWF-SEAS5.1} # system21_m1 system35c3s - Multimodel: no # Mandatory, bool: Either yes/true or no/false - Reference: - - {name: ERA5} # Mandatory, str: Reference codename. See docu. - Time: - sdate: '0801' ## MMDD - fcst_year: '2023' # Optional, int: Forecast year 'YYYY' - hcst_start: '1993' # Mandatory, int: Hindcast start year 'YYYY' - hcst_end: '2016' # Mandatory, int: Hindcast end year 'YYYY' - ftime_min: 1 # Mandatory, int: First leadtime time step in months - ftime_max: 6 # Mandatory, int: Last leadtime time step in months - Region: - - {name: "EU", latmin: 20, latmax: 80, lonmin: -20, lonmax: 40} - Regrid: - method: bilinear # Mandatory, str: Interpolation method. See docu. - type: "to_system" - #type: /esarchive/scratch/nmilders/gitlab/git_clones/auto-s2s/conf/grid_description.txt #'r360x180' # Mandatory, str: to_system, to_reference, or CDO-accepted grid. - Workflow: - Anomalies: - compute: no - cross_validation: no - save: none - Calibration: - method: evmos # Mandatory, str: Calibration method. See docu. - cross_validation: yes - save: none - Skill: - metric: mean_bias EnsCorr rpss crpss bss10 bss90 - save: 'all' - cross_validation: yes - Probabilities: - percentiles: [[1/3, 2/3], [1/10, 9/10]] # frac: Quantile thresholds. - save: 'all' - Indicators: - index: no - Visualization: - plots: skill_metrics forecast_ensemble_mean most_likely_terciles - multi_panel: no - dots: both - ncores: 4 # Optional, int: number of cores, defaults to 1 - remove_NAs: # Optional, bool: Whether NAs are removed, defaults to FALSE - Output_format: scorecards - logo: yes -Run: - Loglevel: INFO - Terminal: yes - filesystem: esarchive - output_dir: /esarchive/scratch/nperez/cs_oper/seasonal/ # replace with the directory where you want to save the outputs - code_dir: /esarchive/scratch/nperez/git/auto-s2s/ # replace with the directory where your code is - autosubmit: yes - # fill only if using autosubmit - auto_conf: - script: /esarchive/scratch/nperez/git/auto-s2s/exec_ecvs_seasonal_oper.R # replace with the path to your script - expid: a68v # replace with your EXPID - hpc_user: bsc32339 # replace with your hpc username - wallclock: 02:00 # hh:mm - processors_per_job: 4 - platform: nord3v2 - email_notifications: yes # enable/disable email notifications. Change it if you want to. - email_address: nuria.perez@bsc.es # replace with your email address - notify_completed: yes # notify me by email when a job finishes - notify_failed: yes # notify me by email when a job fails diff --git a/recipes/recipe_decadal_split.yml b/recipes/examples/recipe_decadal_split.yml similarity index 100% rename from recipes/recipe_decadal_split.yml rename to recipes/examples/recipe_decadal_split.yml diff --git a/recipes/examples/recipe_ecvs_seasonal_oper.yml b/recipes/examples/recipe_ecvs_seasonal_oper.yml index d47fd159..832f36d5 100644 --- a/recipes/examples/recipe_ecvs_seasonal_oper.yml +++ b/recipes/examples/recipe_ecvs_seasonal_oper.yml @@ -5,8 +5,8 @@ Description: Analysis: Horizon: seasonal # Mandatory, str: either subseasonal, seasonal, or decadal Variables: - - {name: tas, freq: monthly_mean} - - {name: prlr, freq: monthly_mean} + - {name: tas, freq: monthly_mean, units: C} + - {name: prlr, freq: monthly_mean, units: mm, flux: no} Datasets: System: - {name: ECMWF-SEAS5.1} # system21_m1 system35c3s @@ -14,14 +14,14 @@ Analysis: Reference: - {name: ERA5} # Mandatory, str: Reference codename. See docu. Time: - sdate: '0701' ## MMDD + sdate: '0801' ## MMDD fcst_year: '2023' # Optional, int: Forecast year 'YYYY' hcst_start: '1993' # Mandatory, int: Hindcast start year 'YYYY' hcst_end: '2016' # Mandatory, int: Hindcast end year 'YYYY' ftime_min: 1 # Mandatory, int: First leadtime time step in months ftime_max: 6 # Mandatory, int: Last leadtime time step in months Region: - - {name: "UE", latmin: 20, latmax: 80, lonmin: -20, lonmax: 40} + - {name: "EU", latmin: 20, latmax: 80, lonmin: -20, lonmax: 40} Regrid: method: bilinear # Mandatory, str: Interpolation method. See docu. type: "to_system" @@ -47,7 +47,7 @@ Analysis: Visualization: plots: skill_metrics forecast_ensemble_mean most_likely_terciles multi_panel: no - projection: lambert_europe + dots: both ncores: 4 # Optional, int: number of cores, defaults to 1 remove_NAs: # Optional, bool: Whether NAs are removed, defaults to FALSE Output_format: scorecards diff --git a/recipes/recipe_scorecards.yml b/recipes/examples/recipe_scorecards.yml similarity index 100% rename from recipes/recipe_scorecards.yml rename to recipes/examples/recipe_scorecards.yml diff --git a/recipes/recipe_splitting_example.yml b/recipes/examples/recipe_splitting_example.yml similarity index 100% rename from recipes/recipe_splitting_example.yml rename to recipes/examples/recipe_splitting_example.yml diff --git a/recipes/recipe_scorecards_vic.yml b/recipes/recipe_scorecards_vic.yml deleted file mode 100644 index fbd2cb90..00000000 --- a/recipes/recipe_scorecards_vic.yml +++ /dev/null @@ -1,106 +0,0 @@ -################################################################################ -## RECIPE DESCRIPTION -################################################################################ - -Description: - Author: V. Agudetse - Info: Test for recipe splitting - -################################################################################ -## ANALYSIS CONFIGURATION -################################################################################ - -Analysis: - Horizon: Seasonal - Variables: # ECVs and Indicators? - - {name: tas, freq: monthly_mean} - Datasets: - System: # multiple systems for single model, split if Multimodel = F - - {name: ECMWF-SEAS5} - Multimodel: False # single option - Reference: - - {name: ERA5} # multiple references for single model? - Time: - sdate: # list, split - - '0101' - - '0201' - - '0301' - - '0401' - - '0501' - - '0601' - - '0701' - - '0801' - - '0901' - - '1001' - - '1101' - - '1201' - fcst_year: - hcst_start: '1993' # single option - hcst_end: '2003' # single option - ftime_min: 1 # single option - ftime_max: 6 # single option - Region: # multiple lists, split? Add region name if length(Region) > 1 - - {name: "global", latmin: -90, latmax: 90, lonmin: 0, lonmax: 359.9} - Regrid: - method: bilinear ## TODO: allow multiple methods? - type: to_system - Workflow: - Anomalies: - compute: yes - cross_validation: no - save: 'none' - Calibration: - method: raw ## TODO: list, split? - save: 'none' - Skill: - metric: mean_bias EnsCorr rps rpss crps crpss EnsSprErr # list, don't split - cross_validation: yes - save: 'all' - Probabilities: - percentiles: [[1/3, 2/3]] # list, don't split - save: 'none' - # Visualization: - # plots: skill_metrics - Indicators: - index: no # ? - Scorecards: - execute: yes # yes/no - regions: - Extra-tropical NH: {lon.min: 0, lon.max: 360, lat.min: 30, lat.max: 90} - Tropics: {lon.min: 0, lon.max: 360, lat.min: -30, lat.max: 30} - Extra-tropical SH : {lon.min: 0, lon.max: 360, lat.min: -30, lat.max: -90} - start_months: NULL - metric: mean_bias enscorr rpss crpss enssprerr - metric_aggregation: 'score' - table_label: NULL - fileout_label: NULL - col1_width: NULL - col2_width: NULL - calculate_diff: FALSE - ncores: 14 - remove_NAs: no # bool, don't split - Output_format: Scorecards # string, don't split - -################################################################################ -## Run CONFIGURATION -################################################################################ -Run: - Loglevel: INFO - Terminal: yes - output_dir: /esarchive/scratch/vagudets/auto-s2s-outputs/ - code_dir: /esarchive/scratch/vagudets/repos/auto-s2s/ - autosubmit: yes - # fill only if using autosubmit - auto_conf: - script: /esarchive/scratch/vagudets/repos/auto-s2s/example_scripts/test_scorecards_workflow.R # replace with the path to your script - expid: a6ae # replace with your EXPID - hpc_user: bsc32762 # replace with your hpc username - wallclock: 03:00 # hh:mm - processors_per_job: 14 - platform: nord3v2 - custom_directives: ['#SBATCH --exclusive'] - email_notifications: yes # enable/disable email notifications. Change it if you want to. - email_address: victoria.agudetse@bsc.es # replace with your email address - notify_completed: yes # notify me by email when a job finishes - notify_failed: no # notify me by email when a job fails - -- GitLab From 492f04e9b6b3648c3e9df68196e186f83eac761c Mon Sep 17 00:00:00 2001 From: vagudets Date: Fri, 12 Jan 2024 11:56:04 +0100 Subject: [PATCH 373/388] Remove Dev_Loading.R --- modules/Loading/Dev_Loading.R | 501 ---------------------------------- 1 file changed, 501 deletions(-) delete mode 100644 modules/Loading/Dev_Loading.R diff --git a/modules/Loading/Dev_Loading.R b/modules/Loading/Dev_Loading.R deleted file mode 100644 index fb456eb3..00000000 --- a/modules/Loading/Dev_Loading.R +++ /dev/null @@ -1,501 +0,0 @@ -## TODO: remove paths to personal scratchs -source("/esarchive/scratch/vagudets/repos/csoperational/R/get_regrid_params.R") -# Load required libraries/funs -source("modules/Loading/R/dates2load.R") -source("modules/Loading/R/get_timeidx.R") -source("modules/Loading/R/check_latlon.R") -## TODO: Move to prepare_outputs.R -source("tools/libs.R") -## TODO: remove these two lines when new as.s2dv_cube() is in CSTools -source('https://earth.bsc.es/gitlab/external/cstools/-/raw/develop-new_s2dv_cube/R/as.s2dv_cube.R') -source('https://earth.bsc.es/gitlab/external/cstools/-/raw/develop-new_s2dv_cube/R/zzz.R') - -## TODO: Source new s2dv_cube version -## TODO: Eliminate dim_var dimension (merge_across_dims?) - -load_datasets <- function(recipe) { - - # ------------------------------------------- - # Set params ----------------------------------------- - - hcst.inityear <- recipe$Analysis$Time$hcst_start - hcst.endyear <- recipe$Analysis$Time$hcst_end - lats.min <- recipe$Analysis$Region$latmin - lats.max <- recipe$Analysis$Region$latmax - lons.min <- recipe$Analysis$Region$lonmin - lons.max <- recipe$Analysis$Region$lonmax - ref.name <- recipe$Analysis$Datasets$Reference$name - exp.name <- recipe$Analysis$Datasets$System$name - - variable <- strsplit(recipe$Analysis$Variables$name, ", | |,")[[1]][1] - vars <- strsplit(recipe$Analysis$Variables$name, ", | |,")[[1]] - store.freq <- recipe$Analysis$Variables$freq - - # get sdates array - ## LOGGER: Change dates2load to extract logger from recipe? - sdates <- dates2load(recipe, recipe$Run$logger) - - idxs <- NULL - idxs$hcst <- get_timeidx(sdates$hcst, - recipe$Analysis$Time$ftime_min, - recipe$Analysis$Time$ftime_max, - time_freq=store.freq) - - if (!(is.null(sdates$fcst))) { - idxs$fcst <- get_timeidx(sdates$fcst, - recipe$Analysis$Time$ftime_min, - recipe$Analysis$Time$ftime_max, - time_freq=store.freq) - } - - ## TODO: Examine this verifications part, verify if it's necessary - # stream <- verifications$stream - # sdates <- verifications$fcst.sdate - - ## TODO: define fcst.name - ##fcst.name <- recipe$Analysis$Datasets$System[[sys]]$name - - # get esarchive datasets dict: - ## TODO: Adapt to 'filesystem' option in recipe - archive <- read_yaml("conf/archive.yml")$esarchive - exp_descrip <- archive$System[[exp.name]] - - freq.hcst <- unlist(exp_descrip[[store.freq]][variable]) - reference_descrip <- archive$Reference[[ref.name]] - freq.obs <- unlist(reference_descrip[[store.freq]][variable]) - obs.dir <- reference_descrip$src - fcst.dir <- exp_descrip$src - hcst.dir <- exp_descrip$src - fcst.nmember <- exp_descrip$nmember$fcst - hcst.nmember <- exp_descrip$nmember$hcst - - ## TODO: it is necessary? - ##if ("accum" %in% names(reference_descrip)) { - ## accum <- unlist(reference_descrip$accum[store.freq][[1]]) - ##} else { - ## accum <- FALSE - ##} - - var_dir_obs <- reference_descrip[[store.freq]][vars] - var_dir_exp <- exp_descrip[[store.freq]][vars] - - # ----------- - obs.path <- paste0(archive$src, - obs.dir, store.freq, "/$var$", "$var_dir$", - "/$var$_$file_date$.nc") - - hcst.path <- paste0(archive$src, - hcst.dir, store.freq, "/$var$", "$var_dir$", - "$var$_$file_date$.nc") - - fcst.path <- paste0(archive$src, - hcst.dir, store.freq, "/$var$", "$var_dir$", - "/$var$_$file_date$.nc") - - # Define regrid parameters: - #------------------------------------------------------------------- - regrid_params <- get_regrid_params(recipe, archive) - - # Longitude circular sort and latitude check - #------------------------------------------------------------------- - circularsort <- check_latlon(lats.min, lats.max, lons.min, lons.max) - - if (recipe$Analysis$Variables$freq == "monthly_mean"){ - split_multiselected_dims = TRUE - } else { - split_multiselected_dims = FALSE - } - - # Load hindcast - #------------------------------------------------------------------- - hcst <- Start(dat = hcst.path, - var = vars, - var_dir = var_dir_exp, - file_date = sdates$hcst, - time = idxs$hcst, - var_dir_depends = 'var', - latitude = values(list(lats.min, lats.max)), - latitude_reorder = Sort(), - longitude = values(list(lons.min, lons.max)), - longitude_reorder = circularsort, - transform = regrid_params$fcst.transform, - transform_params = list(grid = regrid_params$fcst.gridtype, - method = regrid_params$fcst.gridmethod), - transform_vars = c('latitude', 'longitude'), - synonims = list(latitude = c('lat', 'latitude'), - longitude = c('lon', 'longitude'), - ensemble = c('member', 'ensemble')), - ensemble = indices(1:hcst.nmember), - metadata_dims = 'var', # change to just 'var'? - return_vars = list(latitude = 'dat', - longitude = 'dat', - time = 'file_date'), - split_multiselected_dims = split_multiselected_dims, - retrieve = TRUE) - - # Remove var_dir dimension - if ("var_dir" %in% names(dim(hcst))) { - hcst <- Subset(hcst, along = "var_dir", indices = 1, drop = "selected") - } - - if (recipe$Analysis$Variables$freq == "daily_mean") { - # Adjusts dims for daily case, could be removed if startR allows - # multidim split - names(dim(hcst))[which(names(dim(hcst)) == 'file_date')] <- "syear" - default_dims <- c(dat = 1, var = 1, sday = 1, - sweek = 1, syear = 1, time = 1, - latitude = 1, longitude = 1, ensemble = 1) - default_dims[names(dim(hcst))] <- dim(hcst) - dim(hcst) <- default_dims - # Change time attribute dimensions - default_time_dims <- c(sday = 1, sweek = 1, syear = 1, time = 1) - names(dim(attr(hcst, "Variables")$common$time))[which(names( - dim(attr(hcst, "Variables")$common$time)) == 'file_date')] <- "syear" - default_time_dims[names(dim(attr(hcst, "Variables")$common$time))] <- - dim(attr(hcst, "Variables")$common$time) - dim(attr(hcst, "Variables")$common$time) <- default_time_dims - } - - # Convert hcst to s2dv_cube object - ## TODO: Give correct dimensions to $Dates - ## (sday, sweek, syear instead of file_date) - hcst <- as.s2dv_cube(hcst) - # Adjust dates for models where the time stamp goes into the next month - if (recipe$Analysis$Variables$freq == "monthly_mean") { - hcst$attrs$Dates[] <- hcst$attrs$Dates - seconds(exp_descrip$time_stamp_lag) - } - - ## Combine tas and tos data into one variable: tas-tos - if(recipe$Analysis$Variables$name == 'tas tos'){ - #if(recipe$Analysis$Datasets$Reference$name == 'HadCRUT5' || recipe$Analysis$Datasets$Reference$name == 'BEST') { - source('/esarchive/scratch/nmilders/gitlab/git_clones/s2s-suite/modules/Loading/R/mask_tas_tos.R') - hcst <- mask_tas_tos(input_data = hcst, region = c(lons.min, lons.max,lats.min, lats.max), - grid = 'r360x181', - lon = hcst$coords$longitude, - lat = hcst$coords$latitude, - lon_dim = 'longitude', lat_dim = 'latitude', ncores = NULL) - - hcst$dims[['var']] <- dim(hcst$data)[['var']] - #} - } - - # Load forecast - #------------------------------------------------------------------- - if (!is.null(recipe$Analysis$Time$fcst_year)) { - # the call uses file_date instead of fcst_syear so that it can work - # with the daily case and the current version of startR not allowing - # multiple dims split - - fcst <- Start(dat = fcst.path, - var = vars, - var_dir = var_dir_exp, - var_dir_depends = 'var', - file_date = sdates$fcst, - time = idxs$fcst, - latitude = values(list(lats.min, lats.max)), - latitude_reorder = Sort(), - longitude = values(list(lons.min, lons.max)), - longitude_reorder = circularsort, - transform = regrid_params$fcst.transform, - transform_params = list(grid = regrid_params$fcst.gridtype, - method = regrid_params$fcst.gridmethod), - transform_vars = c('latitude', 'longitude'), - synonims = list(latitude = c('lat', 'latitude'), - longitude = c('lon', 'longitude'), - ensemble = c('member', 'ensemble')), - ensemble = indices(1:fcst.nmember), - metadata_dims = 'var', - return_vars = list(latitude = 'dat', - longitude = 'dat', - time = 'file_date'), - split_multiselected_dims = split_multiselected_dims, - retrieve = TRUE) - - if ("var_dir" %in% names(dim(fcst))) { - fcst <- Subset(fcst, along = "var_dir", indices = 1, drop = "selected") - } - - if (recipe$Analysis$Variables$freq == "daily_mean") { - # Adjusts dims for daily case, could be removed if startR allows - # multidim split - names(dim(fcst))[which(names(dim(fcst)) == 'file_date')] <- "syear" - default_dims <- c(dat = 1, var = 1, sday = 1, - sweek = 1, syear = 1, time = 1, - latitude = 1, longitude = 1, ensemble = 1) - default_dims[names(dim(fcst))] <- dim(fcst) - dim(fcst) <- default_dims - # Change time attribute dimensions - default_time_dims <- c(sday = 1, sweek = 1, syear = 1, time = 1) - names(dim(attr(fcst, "Variables")$common$time))[which(names( - dim(attr(fcst, "Variables")$common$time)) == 'file_date')] <- "syear" - default_time_dims[names(dim(attr(fcst, "Variables")$common$time))] <- - dim(attr(fcst, "Variables")$common$time) - dim(attr(fcst, "Variables")$common$time) <- default_time_dims - } - - # Convert fcst to s2dv_cube - fcst <- as.s2dv_cube(fcst) - # Adjust dates for models where the time stamp goes into the next month - if (recipe$Analysis$Variables$freq == "monthly_mean") { - fcst$attrs$Dates[] <- - fcst$attrs$Dates - seconds(exp_descrip$time_stamp_lag) - } - - } else { - fcst <- NULL - } - - # Load reference - #------------------------------------------------------------------- - - # Obtain dates and date dimensions from the loaded hcst data to make sure - # the corresponding observations are loaded correctly. - dates <- hcst$attrs$Dates - dim(dates) <- hcst$dims[c("sday", "sweek", "syear", "time")] - - # Separate Start() call for monthly vs daily data - if (store.freq == "monthly_mean") { - - dates_file <- format(as.Date(dates, '%Y%m%d'), "%Y%m") - dim(dates_file) <- dim(dates) - - ## tas tos mask - if (recipe$Analysis$Variables$name == 'tas tos'){ - if (recipe$Analysis$Datasets$Reference$name == 'HadCRUT5'){ - vars <- 'tasanomaly' - var_dir_obs <- reference_descrip[[store.freq]][vars] - } - } - - if (recipe$Analysis$Variables$name == 'tas tos'){ - if (recipe$Analysis$Datasets$Reference$name == 'BEST'){ - vars <- 'tas' - var_dir_obs <- reference_descrip[[store.freq]][vars] - } - } - - obs <- Start(dat = obs.path, - var = vars, - var_dir = var_dir_obs, - var_dir_depends = 'var', - file_date = dates_file, - latitude = values(list(lats.min, lats.max)), - latitude_reorder = Sort(), - longitude = values(list(lons.min, lons.max)), - longitude_reorder = circularsort, - transform = regrid_params$obs.transform, - transform_params = list(grid = regrid_params$obs.gridtype, - method = regrid_params$obs.gridmethod), - transform_vars = c('latitude', 'longitude'), - synonims = list(latitude = c('lat','latitude'), - longitude = c('lon','longitude')), - metadata_dims = 'var', - return_vars = list(latitude = 'dat', - longitude = 'dat', - time = 'file_date'), - split_multiselected_dims = TRUE, - retrieve = TRUE) - - } else if (store.freq == "daily_mean") { - - # Get year and month for file_date - dates_file <- sapply(dates, format, '%Y%m') - dim(dates_file) <- dim(dates) - # Set hour to 12:00 to ensure correct date retrieval for daily data - lubridate::hour(dates) <- 12 - lubridate::minute(dates) <- 00 - # Restore correct dimensions - dim(dates) <- dim(dates_file) - - obs <- Start(dat = obs.path, - var = vars, - var_dir = var_dir_obs, - var_dir_depends = 'var', - file_date = sort(unique(dates_file)), - time = dates, - time_var = 'time', - time_across = 'file_date', - merge_across_dims = TRUE, - merge_across_dims_narm = TRUE, - latitude = values(list(lats.min, lats.max)), - latitude_reorder = Sort(), - longitude = values(list(lons.min, lons.max)), - longitude_reorder = circularsort, - transform = regrid_params$obs.transform, - transform_params = list(grid = regrid_params$obs.gridtype, - method = regrid_params$obs.gridmethod), - transform_vars = c('latitude', 'longitude'), - synonims = list(latitude = c('lat','latitude'), - longitude = c('lon','longitude')), - metadata_dims = 'var', - return_vars = list(latitude = 'dat', - longitude = 'dat', - time = 'file_date'), - split_multiselected_dims = TRUE, - retrieve = TRUE) - } - - # Remove var_dir dimension - if ("var_dir" %in% names(dim(obs))) { - obs <- Subset(obs, along = "var_dir", indices = 1, drop = "selected") - } - # Adds ensemble dim to obs (for consistency with hcst/fcst) - default_dims <- c(dat = 1, var = 1, sday = 1, - sweek = 1, syear = 1, time = 1, - latitude = 1, longitude = 1, ensemble = 1) - default_dims[names(dim(obs))] <- dim(obs) - dim(obs) <- default_dims - - # Convert obs to s2dv_cube - obs <- as.s2dv_cube(obs) - - ## Combine tas and tos data into one variable: tas-tos - if(recipe$Analysis$Variables$name == 'tas tos'){ - if(recipe$Analysis$Datasets$Reference$name != 'HadCRUT5' & recipe$Analysis$Datasets$Reference$name != 'BEST'){ - source('/esarchive/scratch/nmilders/gitlab/git_clones/s2s-suite/modules/Loading/R/mask_tas_tos.R') - obs <- mask_tas_tos(input_data = obs, region = c(lons.min, lons.max,lats.min, lats.max), - grid = 'r360x181', - lon = obs$coords$longitude, - lat = obs$coords$latitude, - lon_dim = 'longitude', lat_dim = 'latitude', ncores = NULL) - - obs$dims[['var']] <- dim(obs$data)[['var']] - } - } - - # Check for consistency between hcst and obs grid - if (!(recipe$Analysis$Regrid$type == 'none')) { - if (!isTRUE(all.equal(as.vector(hcst$lat), as.vector(obs$lat)))) { - lat_error_msg <- paste("Latitude mismatch between hcst and obs.", - "Please check the original grids and the", - "regrid parameters in your recipe.") - error(recipe$Run$logger, lat_error_msg) - hcst_lat_msg <- paste0("First hcst lat: ", hcst$lat[1], - "; Last hcst lat: ", hcst$lat[length(hcst$lat)]) - info(recipe$Run$logger, hcst_lat_msg) - obs_lat_msg <- paste0("First obs lat: ", obs$lat[1], - "; Last obs lat: ", obs$lat[length(obs$lat)]) - info(recipe$Run$logger, obs_lat_msg) - stop("hcst and obs don't share the same latitudes.") - } - if (!isTRUE(all.equal(as.vector(hcst$lon), as.vector(obs$lon)))) { - lon_error_msg <- paste("Longitude mismatch between hcst and obs.", - "Please check the original grids and the", - "regrid parameters in your recipe.") - error(recipe$Run$logger, lon_error_msg) - hcst_lon_msg <- paste0("First hcst lon: ", hcst$lon[1], - "; Last hcst lon: ", hcst$lon[length(hcst$lon)]) - info(recipe$Run$logger, hcst_lon_msg) - obs_lon_msg <- paste0("First obs lon: ", obs$lon[1], - "; Last obs lon: ", obs$lon[length(obs$lon)]) - info(recipe$Run$logger, obs_lon_msg) - stop("hcst and obs don't share the same longitudes.") - - } - } - - # Remove negative values in accumulative variables - dictionary <- read_yaml("conf/variable-dictionary.yml") - for (var_idx in 1:length(vars)) { - var_name <- vars[var_idx] - if (dictionary$vars[[var_name]]$accum) { - info(recipe$Run$logger, - paste0("Accumulated variable ", var_name, - ": setting negative values to zero.")) - # obs$data[, var_idx, , , , , , , ] <- pmax(Subset(obs$data, - # along = "var", - # indices = var_idx, F), 0) - obs$data[, var_idx, , , , , , , ][obs$data[, var_idx, , , , , , , ] < 0] <- 0 - hcst$data[, var_idx, , , , , , , ][hcst$data[, var_idx, , , , , , , ] < 0] <- 0 - if (!is.null(fcst)) { - fcst$data[, var_idx, , , , , , , ][fcst$data[, var_idx, , , , , , , ] < 0] <- 0 - } - } - - # Convert prlr from m/s to mm/day - ## TODO: Make a unit conversion function - if (vars[[var_idx]] == "prlr") { - # Verify that the units are m/s and the same in obs and hcst - if (((obs$attrs$Variable$metadata[[var_name]]$units == "m s-1") || - (obs$attrs$Variable$metadata[[var_name]]$units == "m s**-1")) && - ((hcst$attrs$Variable$metadata[[var_name]]$units == "m s-1") || - (hcst$attrs$Variable$metadata[[var_name]]$units == "m s**-1"))) { - info(recipe$Run$logger, "Converting precipitation from m/s to mm/day.") - obs$data[, var_idx, , , , , , , ] <- - obs$data[, var_idx, , , , , , , ]*86400*1000 - obs$attrs$Variable$metadata[[var_name]]$units <- "mm/day" - hcst$data[, var_idx, , , , , , , ] <- - hcst$data[, var_idx, , , , , , , ]*86400*1000 - hcst$attrs$Variable$metadata[[var_name]]$units <- "mm/day" - if (!is.null(fcst)) { - fcst$data[, var_idx, , , , , , , ] <- - fcst$data[, var_idx, , , , , , , ]*86400*1000 - fcst$attrs$Variable$metadata[[var_name]]$units <- "mm/day" - } - } - } - } - # Compute anomalies if requested - # Print a summary of the loaded data for the user, for each object - if (recipe$Run$logger$threshold <= 2) { - data_summary(hcst, recipe) - data_summary(obs, recipe) - if (!is.null(fcst)) { - data_summary(fcst, recipe) - } - } - - info(recipe$Run$logger, - "##### DATA LOADING COMPLETED SUCCESSFULLY #####") - - ############################################################################ - # - # CHECKS ON MISSING FILES - # - ############################################################################ - - #obs.NA_dates.ind <- Apply(obs, - # fun=(function(x){ all(is.na(x))}), - # target_dims=c('time', 'latitude', 'longitude'))[[1]] - #obs.NA_dates <- dates_file[obs.NA_dates.ind] - #obs.NA_dates <- obs.NA_dates[order(obs.NA_dates)] - #obs.NA_files <- paste0(obs.dir, store.freq,"/",variable,"_", - # freq.obs,"obs.grid","/",variable,"_",obs.NA_dates,".nc") - # - #if (any(is.na(hcst))){ - # fatal(recipe$Run$logger, - # paste(" ERROR: MISSING HCST VALUES FOUND DURING LOADING # ", - # " ################################################# ", - # " ###### MISSING FILES #### ", - # " ################################################# ", - # "hcst files:", - # hcst.NA_files, - # " ################################################# ", - # " ################################################# ", - # sep="\n")) - # quit(status = 1) - #} - # - #if (any(is.na(obs)) && !identical(obs.NA_dates,character(0))){ - # fatal(recipe$logger, - # paste(" ERROR: MISSING OBS VALUES FOUND DURING LOADING # ", - # " ################################################# ", - # " ###### MISSING FILES #### ", - # " ################################################# ", - # "obs files:", - # obs.NA_files, - # " ################################################# ", - # " ################################################# ", - # sep="\n")) - # quit(status=1) - #} - # - #info(recipe$logger, - # "######### DATA LOADING COMPLETED SUCCESFULLY ##############") - - ############################################################################ - ############################################################################ - - return(list(hcst = hcst, fcst = fcst, obs = obs)) - -} -- GitLab From 9a337e10ed40de38534ddb35ca812a393ea5e40f Mon Sep 17 00:00:00 2001 From: vagudets Date: Fri, 12 Jan 2024 15:51:33 +0100 Subject: [PATCH 374/388] Add use case for sample data --- .../ex0_1_sample_dataset/ex0_1-handson.md | 235 ++++++++++++++++++ .../ex0_1_sample_dataset/ex0_1-recipe.yml | 57 +++++ 2 files changed, 292 insertions(+) create mode 100644 use_cases/ex0_1_sample_dataset/ex0_1-handson.md create mode 100644 use_cases/ex0_1_sample_dataset/ex0_1-recipe.yml diff --git a/use_cases/ex0_1_sample_dataset/ex0_1-handson.md b/use_cases/ex0_1_sample_dataset/ex0_1-handson.md new file mode 100644 index 00000000..ef9abbe1 --- /dev/null +++ b/use_cases/ex0_1_sample_dataset/ex0_1-handson.md @@ -0,0 +1,235 @@ +# Use case 0.1: Loading a sample dataset + +## Goal +Create a SUNSET recipe and use the functions in the suite to reproduce the verification workflow from the previous hands-on exercises. + +## 0. Cloning the SUNSET repository + +The first step to use SUNSET is to create a copy of the code in your local environment. Open a terminal and `cd` to the directory where you would like to store your local copy of SUNSET. For example: `/esarchive/scratch//git/`. If a directory does not exist yet, you can create it with the `mkdir` shell command. + +```shell +# Clone the GitLab repository to create a local copy of the code +git clone https://earth.bsc.es/gitlab/es/sunset.git +``` + +## 1. Modifying the recipe + +SUNSET uses YAML configuration files called 'recipes' to specify which data you want to load and the details of the different steps of the workflow. In this example, we want to evaluate the temperature-at-surface (tas) monthly means, using MeteoFrance System 7 data as our experiment and ERA5 as our reference dataset, for the initialization month of November. + +There is a template file for this hands-on tutorial, which you can open with a text editor: + +```shell +# cd to the main SUNSET directory +# Open the recipe with a text editor such as vim or emacs +vim use_cases/ex1_1_single_analysis_terminal/ex1_1-recipe.yml +``` + +Once you have opened your recipe, it is time to edit the contents. Fill in the blank slots according to your preference, based on the options given in the description. + +```yaml +Description: + Author: <___> + Description: Exercise 1.1: Calibration and skill assessment of MeteoFrance System 7 surface temperature +Analysis: + Horizon: Seasonal + Variables: + name: tas + freq: monthly_mean + units: <___> # Choose your units: C or K + Datasets: + System: + name: Meteo-France-System7 + Multimodel: no + Reference: + name: ERA5 + Time: + sdate: '1101' + fcst_year: '2020' + hcst_start: '1993' + hcst_end: '2016' + ftime_min: <___> # Choose the first time step! A number from 1 to 6 + ftime_max: <___> # Choose the last time step! A number from 1 to 6 + Region: + name: "EU" + latmin: 20 + latmax: 80 + lonmin: -20 + lonmax: 40 + Regrid: + method: bilinear + type: 'r360x181' # options: to_system, to_reference, self-defined grid + Workflow: + Anomalies: + compute: yes + cross_validation: yes + save: 'none' + Calibration: + method: <___> + save: 'none' + Skill: + metric: RPSS, BSS10, BSS90 + cross_validation: yes + save: 'none' + Probabilities: + percentiles: [[1/3, 2/3], [1/10, 9/10]] + save: 'none' + Visualization: + plots: skill_metrics, forecast_ensemble_mean, most_likely_terciles + multi_panel: no + projection: cylindrical_equidistant + ncores: 10 + remove_NAs: yes + Output_format: S2S4E +Run: + Loglevel: INFO + Terminal: yes + output_dir: <______> # Path to the directory where you want your outputs to be saved + code_dir: <______> # Path to the directory where your code is +``` + +## 2. Load the required SUNSET modules and read the recipe + +First of all, source the MODULES file to load the environment modules needed to run SUNSET. + +```shell +source MODULES +``` + +Open an R session, by simply typing `R` on the terminal. + +To run SUNSET, we must run the R session from the directory where the code is. To check your working directory, you can run the shell command `pwd`. From the R session, you can use the commands `getwd()` and `setwd()` to see and change your working directory. + +```r +# Load required 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") + +# Read recipe +recipe_file <- "use_cases/ex1_1_single_analysis_terminal/ex1_1-recipe.yml" +recipe <- prepare_outputs(recipe_file) +``` + +The function `prepare_outputs()` creates a unique folder for the logs, data files and plots that result from the execution of your recipe, inside the directory you specified. It also runs a check over the recipe to detect any potential errors, misspellings or missing arguments. At the end of the check, a message is displayed indicating whether or not the recipe passed the check, along with the list of errors and warnings. + +**Questions** + +Read the logs! + +(1) Did your recipe pass the check? Did you get any warnings? + +(2) Where will your outputs be saved? Copy and paste this directory somewhere, so that you can check it later! + +*Tip*: The recipe is now stored as a `list` containing all the information of the original YAML file, plus some extra things! If you want to see any particular element of the recipe from the R session, you can simply access that element in the list. For example: + +```r +# Checking the variable name +recipe$Analysis$Variables$name +# Checking the output directory +recipe$Run$output_dir +``` + +## 3. Load the data and change the units + +The **Loading** module retrieves the information from the recipe to load the data that has been requested it in. It loads the experiment data for the hindcast period, the reference data for the corresponding period, and the experiment forecast if a forecast year has been requested. + +For certain variables like temperature, precipitation or sea level pressure, the user can request for specific units to load the data in. The **Units** module will read the original units as stored in the netCDF files and perform any necessary unit converstions to match the request in the recipe. It also verifies that all of the loaded datasets share the same units, even if no specific unit has been requested. For this reason, users are strongly encouraged to run it even if they did not request any unit conversion. + +```r +# Load datasets +data <- Loading(recipe) +# Change units +data <- Units(recipe, data) +``` + +**Questions** + +(1) What is the structure of `data`? What is the class of the objects in `data`? *Tip*: you can use functions like `class()`, `names()` or `str()` to gain information about the structure of the object and its contents. + +```r +class(data) +names(data) +str(data, max.level = 2) +# You can access any of the three objects with the `$` operator: +class(data$hcst) +``` + +(2) Pay attention to the log messages: Did your units get converted? Are the new units what you expect? You can check the metadata of any of the objects in data. SUNSET also provides the `data_summary()` function, which lets you have a quick look at your objects: + +```r +# Check the new units and data of hcst, fcst and/or obs. Are they all the same? +data$hcst$attrs$Variable$metadata$tas$units +data_summary(data$hcst, recipe) +data_summary(data$fcst, recipe) +data_summary(data$obs, recipe) +``` +(3) What are the dimensions of the datasets? Are they consistent with what is requested in the recipe? *Tip*: Check the data summary! + +## 4. Calibrate the data and compute the anomalies + +SUNSET has a few modules to perform post-processing on the experimental and the reference datasets. The **Calibration** module performs the bias correction method indicated in the recipe, using the `CSTools::CST_Calibration()` function. + +The **Anomalies** module removes the climatologies using functions like `CSTools::CST_Anomaly()` and `s2dv::Clim()`, and also returns the full fields in case they are needed for any future computations. + +```r +# Calibrate the data +data <- Calibration(recipe, data) +# Compute anomalies +data <- Anomalies(recipe, data) +``` +**Questions** + +(1) Verify that you now have anomaly values instead of the original full field. *Tip*: Use `data_summary()` like in the previous example and pay attention to the new values. + +## 5. Evaluate the model skill and compute the probability thresholds + +The **Skill** module returns a list of all the evaluation metrics requested in the recipe, in the shape of multi-dimensional arrays. In this case, we will compute three metrics: + +- **RPSS (Ranked Probability Skill Score)**: This skill score measures how well a forecast predicts the probability of the tercile categories (below normal, normal and above-normal), compared to the climatology. +- **BSS10 and BSS90 (Brier Skill Score):** This skill score measures how well a forecast predicts the probability of the 10th percentile and 90th percentile extreme events, compared to the climatology. + +The `Probabilities()` function returns the probability values for each requested category for the hindcast and forecast data, as well as the hindcast percentile values corresponding to each threshold. +``` +# Compute skill metrics +skill_metrics <- Skill(recipe, data) +# Compute percentiles and probability bins +probabilities <- Probabilities(recipe, data) +``` +**Questions** + +(1) What is the structure of `skill_metrics`? Which metrics were computed? What dimensions do they have? *Tip*: use `str()` and `names()`. + +(2) What is the structure of `probabilities`? Can you identify the probability categories and the percentiles? *Tip*: use `str()`. + +## 6. Plotting the results + +Now, let's visualize the information that was computed! + +The **Visualization** module will generate the three types of maps we requested in the recipe: +- Skill maps to visualize the skill distribution of the model, for each metric. +- The ensemble mean of the calibrated forecast anomalies. +- A map showing the most likely tercile category for each point in the grid. + +With the significance option in the `Visualization()` function, you can choose whether or not to shade the grid points that are statistically significant in each skill metric plot. + +```r +# Plot data +Visualization(recipe, data, + skill_metrics = skill_metrics, + probabilities = probabilities, + significance = TRUE) +``` + +Now, you can `cd` to the the output directory and inspect the contents of the `plots/` subdirectory. The plots are png files that can be visualized with the `display` command. They have a descriptive name including the content of the plot, the date and the forecast time. + +**Questions** + +(1) Let's take a look at the forecast ensemble mean. What is the sign of the anomalies over Spain? In what regions are the anomalous temperatures strongest? + +(2) Let's take a look at the skill metrics RPSS, BSS10 and BSS90. In what regions and for which metrics is the forecast most skillful? *Tip*: Positive values indicate that the model is a better predictor than the climatology, with 1 being the perfect score. + +(3) Let's take a look at the Most Likely Terciles plots. This plot indicates the probability of the temperature being below normal, near-normal or above normal. What is the most likely category for Spain? diff --git a/use_cases/ex0_1_sample_dataset/ex0_1-recipe.yml b/use_cases/ex0_1_sample_dataset/ex0_1-recipe.yml new file mode 100644 index 00000000..06b1e572 --- /dev/null +++ b/use_cases/ex0_1_sample_dataset/ex0_1-recipe.yml @@ -0,0 +1,57 @@ +Description: + Author: V. Agudetse + Description: Run SUNSET workflow with CSTools sample data +Analysis: + Horizon: seasonal + Variables: + name: tas + freq: monthly_mean + Datasets: + System: + name: ECMWF-SEAS5.1 + Multimodel: no + Reference: + name: ERA5 + Time: + sdate: '1101' + fcst_year: + hcst_start: '2000' + hcst_end: '2006' + ftime_min: 1 + ftime_max: 3 + Region: + latmin: 27 + latmax: 48 + lonmin: 0 + lonmax: 359 + Regrid: + method: bilinear + type: to_system + Workflow: + Anomalies: + compute: no + cross_validation: + save: + Calibration: + method: bias + save: 'all' + Skill: + metric: RPSS + save: 'all' + Probabilities: + percentiles: [[1/3, 2/3]] + save: 'all' + Indicators: + index: FALSE + Visualization: + plots: skill_metrics, forecast_ensemble_mean, most_likely_terciles + ncores: # Optional, int: number of cores, defaults to 1 + remove_NAs: # Optional, bool: Whether NAs are removed, defaults to FALSE + Output_format: S2S4E +Run: + Loglevel: INFO + Terminal: yes + output_dir: /tmp/out-logs/ + code_dir: './' + filesystem: sample + -- GitLab From 62e5c83e6890dfc0b4bba5d18a070169ec97cac0 Mon Sep 17 00:00:00 2001 From: VICTORIA AGUDETSE ROURES Date: Mon, 8 Jan 2024 16:59:08 +0100 Subject: [PATCH 375/388] Add option recipe == 'sample' option with CSTools sample data --- conf/archive.yml | 23 ++++++++ modules/Loading/Loading.R | 3 + modules/Loading/R/load_sample.R | 49 ++++++++++++++++ .../recipe_seasonal_provenance.yml | 57 +++++++++++++++++++ tools/CST_ChangeDimName.R | 39 +++++++++++++ 5 files changed, 171 insertions(+) create mode 100644 modules/Loading/R/load_sample.R create mode 100644 recipes/atomic_recipes/recipe_seasonal_provenance.yml create mode 100644 tools/CST_ChangeDimName.R diff --git a/conf/archive.yml b/conf/archive.yml index dbacf0e7..61f62be2 100644 --- a/conf/archive.yml +++ b/conf/archive.yml @@ -254,3 +254,26 @@ mars: monthly_mean: {"tas":""} calendar: "standard" reference_grid: "conf/grid_description/griddes_GRIB_system5_m1.txt" + +sample: + src: + System: + ECMWF-SEAS5.1: + name: "ECMWF SEAS5" + institution: "European Centre for Medium-Range Weather Forecasts" + src: + monthly_mean: {"tas":"", "prlr":""} + nmember: + fcst: 15 + hcst: 15 + calendar: "proleptic_gregorian" + time_stamp_lag: "0" + reference_grid: "conf/grid_description/griddes_GRIB_system51_m1.txt" + Reference: + ERA5: + name: "ERA5" + institution: "European Centre for Medium-Range Weather Forecasts" + src: "GRIB_era5_tas/" + monthly_mean: {"tas":"", "prlr":""} + calendar: "standard" + reference_grid: "conf/grid_description/griddes_GRIB_system5_m1.txt" diff --git a/modules/Loading/Loading.R b/modules/Loading/Loading.R index 43dea065..63fee97b 100644 --- a/modules/Loading/Loading.R +++ b/modules/Loading/Loading.R @@ -8,6 +8,9 @@ Loading <- function(recipe) { if (tolower(recipe$Run$filesystem) == "mars") { source("modules/Loading/R/load_GRIB.R") data <- load_GRIB(recipe) + } else if (tolower(recipe$Run$filesystem) == "sample") { + source("modules/Loading/R/load_sample.R") + data <- load_sample(recipe) } else { # Case: esarchive time_horizon <- tolower(recipe$Analysis$Horizon) diff --git a/modules/Loading/R/load_sample.R b/modules/Loading/R/load_sample.R new file mode 100644 index 00000000..e0d906d3 --- /dev/null +++ b/modules/Loading/R/load_sample.R @@ -0,0 +1,49 @@ +## TODO: remove paths to personal scratchs +source("/esarchive/scratch/vagudets/repos/csoperational/R/get_regrid_params.R") +# Load required libraries/funs +source("tools/CST_ChangeDimName.R") +source("modules/Loading/R/compare_exp_obs_grids.R") + +load_sample <- function(recipe) { + # Hindcast: + # Change hcst dimension names + hcst <- CST_ChangeDimName(lonlat_temp_st$exp, + original_dimnames = c("dataset", "sdate", "ftime", + "lat", "lon", "member"), + final_dimnames = c("dat", "syear", "time", + "latitude", "longitude", + "ensemble")) + # Add sday and sweek dimensions + hcst <- CST_InsertDim(hcst, posdim = 3, lendim = 1, name = "sday", values = 1) + hcst <- CST_InsertDim(hcst, posdim = 4, lendim = 1, name = "sweek", values = 1) + dim(hcst$attrs$Dates) <- c(sday = 1, sweek = 1, + syear = dim(hcst$attrs$Dates)[['syear']], + time = dim(hcst$attrs$Dates)[['time']]) + # Observations: + # Change obs dimension names + obs <- CST_ChangeDimName(lonlat_temp_st$obs, + original_dimnames = c("dataset", "sdate", "ftime", + "lat", "lon"), + final_dimnames = c("dat", "syear", "time", + "latitude", "longitude")) + # Add sday and sweek dimensions + obs <- CST_InsertDim(obs, posdim = 3, lendim = 1, name = "sday", values = 1) + obs <- CST_InsertDim(obs, posdim = 4, lendim = 1, name = "sweek", values = 1) + dim(obs$attrs$Dates) <- c(sday = 1, sweek = 1, + syear = dim(obs$attrs$Dates)[['syear']], + time = dim(obs$attrs$Dates)[['time']]) + # Add ensemble dimension to obs + obs <- CST_InsertDim(obs, posdim = 7, lendim = 1, name = "ensemble", values = 1) + # Adjust name of 'load_parameters$date' attribute + obs$attrs$load_parameters$dat1$file_date <- obs$attrs$load_parameters$dat1$date + + # Sample fcst NULL + fcst <- NULL + # Check for consistency between hcst and obs grid + compare_exp_obs_grids(hcst, obs) + + info(recipe$Run$logger, + "##### DATA LOADING COMPLETED SUCCESSFULLY #####") + .log_memory_usage(recipe$Run$logger, when = "After loading (sample data)") + return(list(hcst = hcst, fcst = fcst, obs = obs)) +} diff --git a/recipes/atomic_recipes/recipe_seasonal_provenance.yml b/recipes/atomic_recipes/recipe_seasonal_provenance.yml new file mode 100644 index 00000000..196b49c9 --- /dev/null +++ b/recipes/atomic_recipes/recipe_seasonal_provenance.yml @@ -0,0 +1,57 @@ +Description: + Author: V. Agudetse + '': split version +Analysis: + Horizon: seasonal + Variables: + name: tas + freq: monthly_mean + Datasets: + System: + name: ECMWF-SEAS5.1 + Multimodel: no + Reference: + name: ERA5 + Time: + sdate: '1101' + fcst_year: + hcst_start: '2000' + hcst_end: '2006' + ftime_min: 1 + ftime_max: 3 + Region: + latmin: 27 + latmax: 48 + lonmin: 0 + lonmax: 359 + Regrid: + method: bilinear + type: to_system + Workflow: + Anomalies: + compute: no + cross_validation: + save: + Calibration: + method: bias + save: 'all' + Skill: + metric: RPSS + save: 'all' + Probabilities: + percentiles: [[1/3, 2/3]] + save: 'all' + Indicators: + index: FALSE + Visualization: + plots: skill_metrics, forecast_ensemble_mean, most_likely_terciles + ncores: # Optional, int: number of cores, defaults to 1 + remove_NAs: # Optional, bool: Whether NAs are removed, defaults to FALSE + Output_format: S2S4E +Run: + Loglevel: INFO + Terminal: yes + output_dir: /tmp/out-logs/ + code_dir: /home/kinow/Development/r/workspace/sunset/ + filesystem: sample + diff --git a/tools/CST_ChangeDimName.R b/tools/CST_ChangeDimName.R new file mode 100644 index 00000000..1ccbbb3d --- /dev/null +++ b/tools/CST_ChangeDimName.R @@ -0,0 +1,39 @@ +## TODO: Documentation + +CST_ChangeDimName <- function(data, original_dimnames, final_dimnames) { + if (!inherits(data, "s2dv_cube")) { + stop("Parameter 'data' must be an object of class 's2dv_cube'") + } + if (!(length(original_dimnames) == length(final_dimnames))) { + stop("The number of dimension names in 'final_dimnames' must be the same + as in 'original_dimnames'") + } + ## TODO: Add check to verify that all original_dimnames are present in the array + for (index in 1:length(original_dimnames)) { + original_name <- original_dimnames[index] + final_name <- final_dimnames[index] + # Step 1: Change dims and data + names(data$dims)[which(names(data$dims) == original_name)] <- final_name + dim(data$data) <- data$dims + # Step 2: Change coords + names(data$coords)[which(names(data$coords) == original_name)] <- final_name + # Step 3: Change attrs + # 3.1 - Dates + if (original_name %in% names(dim(data$attrs$Dates))) { + names(dim(data$attrs$Dates))[which(names(dim(data$attrs$Dates)) + == original_name)] <- final_name + } + # 3.2 - Variable metadata + if (original_name %in% names(data$attrs$Variable$metadata)) { + names(data$attrs$Variable$metadata)[which(names(data$attrs$Variable$metadata) + == original_name)] <- final_name + } + # 3.3 - Source files + if (original_name %in% names(dim(data$attrs$source_files))) { + names(dim(data$attrs$source_files))[which(names(dim(data$attrs$source_files)) + == original_name)] <- final_name + } + } + return(data) +} + -- GitLab From ff0f3ce6739f193755d836d54c027bf009c22fb9 Mon Sep 17 00:00:00 2001 From: vagudets Date: Tue, 16 Jan 2024 15:54:49 +0100 Subject: [PATCH 376/388] Update hands-on 0.1 --- .../ex0_1_sample_dataset/ex0_1-handson.md | 92 ++++++++++--------- .../ex0_1_sample_dataset/ex0_1-recipe.yml | 6 +- 2 files changed, 51 insertions(+), 47 deletions(-) diff --git a/use_cases/ex0_1_sample_dataset/ex0_1-handson.md b/use_cases/ex0_1_sample_dataset/ex0_1-handson.md index ef9abbe1..7dc9927f 100644 --- a/use_cases/ex0_1_sample_dataset/ex0_1-handson.md +++ b/use_cases/ex0_1_sample_dataset/ex0_1-handson.md @@ -1,9 +1,9 @@ # Use case 0.1: Loading a sample dataset ## Goal -Create a SUNSET recipe and use the functions in the suite to reproduce the verification workflow from the previous hands-on exercises. +Load a sample dataset into SUNSET without the need configure an archive of netCDF or GRIB files. -## 0. Cloning the SUNSET repository +## 0. SUNSET software stack The first step to use SUNSET is to create a copy of the code in your local environment. Open a terminal and `cd` to the directory where you would like to store your local copy of SUNSET. For example: `/esarchive/scratch//git/`. If a directory does not exist yet, you can create it with the `mkdir` shell command. @@ -12,24 +12,34 @@ The first step to use SUNSET is to create a copy of the code in your local envir git clone https://earth.bsc.es/gitlab/es/sunset.git ``` -## 1. Modifying the recipe +If you are using BSC infrastructure, all of the software dependencies are already installed within our common environment. However, if you are running SUNSET outside of the BSC facilities, you can install the dependencies by creating a conda environment. A script is provided in the SUNSET repository, and you can install the environment by running the following line from the main folder of the SUNSET repository: -SUNSET uses YAML configuration files called 'recipes' to specify which data you want to load and the details of the different steps of the workflow. In this example, we want to evaluate the temperature-at-surface (tas) monthly means, using MeteoFrance System 7 data as our experiment and ERA5 as our reference dataset, for the initialization month of November. +```shell +bash conda_installation/load_sunset.bash +``` + +To run the line above, you should replace `` with the path where you want the conda environment to be installed. For example, `/home//conda-sunset`. + +## 1. The recipe + +SUNSET uses YAML configuration files called 'recipes' to specify which data you want to load and the details of the different steps of the workflow. In this example, we are using a sample dataset which contains data of temperature-at-surface (tas) monthly means, from ECMWF SEAS5 as the experiment and ERA5 as the reference dataset, for the initialization month of November. There is a template file for this hands-on tutorial, which you can open with a text editor: ```shell # cd to the main SUNSET directory # Open the recipe with a text editor such as vim or emacs -vim use_cases/ex1_1_single_analysis_terminal/ex1_1-recipe.yml +vim use_cases/ex0_1_sample_dataset/ex0_1-recipe.yml ``` Once you have opened your recipe, it is time to edit the contents. Fill in the blank slots according to your preference, based on the options given in the description. +NOTE: In this particular example, the sample data is limited, so the system and reference names, variable, forecast times and region cannot be changed. + ```yaml Description: Author: <___> - Description: Exercise 1.1: Calibration and skill assessment of MeteoFrance System 7 surface temperature + Description: Exercise 0.1: Skill assessment of a sample dataset Analysis: Horizon: Seasonal Variables: @@ -38,26 +48,25 @@ Analysis: units: <___> # Choose your units: C or K Datasets: System: - name: Meteo-France-System7 + name: ECMWF-SEAS5.1 Multimodel: no Reference: name: ERA5 Time: sdate: '1101' - fcst_year: '2020' - hcst_start: '1993' - hcst_end: '2016' - ftime_min: <___> # Choose the first time step! A number from 1 to 6 - ftime_max: <___> # Choose the last time step! A number from 1 to 6 + fcst_year: + hcst_start: '2000' + hcst_end: '2006' + ftime_min: 1 + ftime_max: 3 Region: - name: "EU" - latmin: 20 - latmax: 80 - lonmin: -20 - lonmax: 40 + latmin: 27 + latmax: 48 + lonmin: 0 + lonmax: 359 Regrid: method: bilinear - type: 'r360x181' # options: to_system, to_reference, self-defined grid + type: 'to_system' Workflow: Anomalies: compute: yes @@ -67,34 +76,41 @@ Analysis: method: <___> save: 'none' Skill: - metric: RPSS, BSS10, BSS90 + metric: RPSS, BSS10, BSS90 cross_validation: yes save: 'none' Probabilities: - percentiles: [[1/3, 2/3], [1/10, 9/10]] + percentiles: [[1/3, 2/3]] save: 'none' Visualization: - plots: skill_metrics, forecast_ensemble_mean, most_likely_terciles + plots: skill_metrics multi_panel: no projection: cylindrical_equidistant ncores: 10 remove_NAs: yes Output_format: S2S4E Run: - Loglevel: INFO - Terminal: yes - output_dir: <______> # Path to the directory where you want your outputs to be saved - code_dir: <______> # Path to the directory where your code is + filesystem: sample # This parameter specifies that we want to load the sample data, rather than data from a filesystem + Loglevel: INFO + Terminal: yes + output_dir: <______> # Path to the directory where you want your outputs to be saved + code_dir: <______> # Path to the directory where your code is ``` ## 2. Load the required SUNSET modules and read the recipe -First of all, source the MODULES file to load the environment modules needed to run SUNSET. +If you are running SUNSET within BSC infrastructure, source the MODULES file to load the environment modules needed to run SUNSET. ```shell source MODULES ``` +Otherwise, activate the conda environment: + +```shell +conda activate +``` + Open an R session, by simply typing `R` on the terminal. To run SUNSET, we must run the R session from the directory where the code is. To check your working directory, you can run the shell command `pwd`. From the R session, you can use the commands `getwd()` and `setwd()` to see and change your working directory. @@ -110,7 +126,7 @@ source("modules/Saving/Saving.R") source("modules/Visualization/Visualization.R") # Read recipe -recipe_file <- "use_cases/ex1_1_single_analysis_terminal/ex1_1-recipe.yml" +recipe_file <- "use_cases/ex0_1_sample_dataset/ex0_1-recipe.yml" recipe <- prepare_outputs(recipe_file) ``` @@ -135,7 +151,7 @@ recipe$Run$output_dir ## 3. Load the data and change the units -The **Loading** module retrieves the information from the recipe to load the data that has been requested it in. It loads the experiment data for the hindcast period, the reference data for the corresponding period, and the experiment forecast if a forecast year has been requested. +The **Loading** module retrieves the information from the recipe to load the data that has been requested it in. It loads the experiment data for the hindcast period, the reference data for the corresponding period, and the experiment forecast if a forecast year has been requested. In the case of the sample dataset, we have a hindcast and the corresponding observations, but no forecast. For certain variables like temperature, precipitation or sea level pressure, the user can request for specific units to load the data in. The **Units** module will read the original units as stored in the netCDF files and perform any necessary unit converstions to match the request in the recipe. It also verifies that all of the loaded datasets share the same units, even if no specific unit has been requested. For this reason, users are strongly encouraged to run it even if they did not request any unit conversion. @@ -161,10 +177,9 @@ class(data$hcst) (2) Pay attention to the log messages: Did your units get converted? Are the new units what you expect? You can check the metadata of any of the objects in data. SUNSET also provides the `data_summary()` function, which lets you have a quick look at your objects: ```r -# Check the new units and data of hcst, fcst and/or obs. Are they all the same? +# Check the new units and data of the hindcast (hcst) and/or observations (obs). Are they the same? data$hcst$attrs$Variable$metadata$tas$units data_summary(data$hcst, recipe) -data_summary(data$fcst, recipe) data_summary(data$obs, recipe) ``` (3) What are the dimensions of the datasets? Are they consistent with what is requested in the recipe? *Tip*: Check the data summary! @@ -192,7 +207,7 @@ The **Skill** module returns a list of all the evaluation metrics requested in t - **RPSS (Ranked Probability Skill Score)**: This skill score measures how well a forecast predicts the probability of the tercile categories (below normal, normal and above-normal), compared to the climatology. - **BSS10 and BSS90 (Brier Skill Score):** This skill score measures how well a forecast predicts the probability of the 10th percentile and 90th percentile extreme events, compared to the climatology. -The `Probabilities()` function returns the probability values for each requested category for the hindcast and forecast data, as well as the hindcast percentile values corresponding to each threshold. +The `Probabilities()` function returns the probability values for each requested category for the hindcast (and forecast) data, as well as the hindcast percentile values corresponding to each threshold. ``` # Compute skill metrics skill_metrics <- Skill(recipe, data) @@ -209,10 +224,7 @@ probabilities <- Probabilities(recipe, data) Now, let's visualize the information that was computed! -The **Visualization** module will generate the three types of maps we requested in the recipe: -- Skill maps to visualize the skill distribution of the model, for each metric. -- The ensemble mean of the calibrated forecast anomalies. -- A map showing the most likely tercile category for each point in the grid. +The **Visualization** module will generate the maps we requested in the recipe: Skill maps to visualize the skill distribution of the model, for each metric. With the significance option in the `Visualization()` function, you can choose whether or not to shade the grid points that are statistically significant in each skill metric plot. @@ -224,12 +236,4 @@ Visualization(recipe, data, significance = TRUE) ``` -Now, you can `cd` to the the output directory and inspect the contents of the `plots/` subdirectory. The plots are png files that can be visualized with the `display` command. They have a descriptive name including the content of the plot, the date and the forecast time. - -**Questions** - -(1) Let's take a look at the forecast ensemble mean. What is the sign of the anomalies over Spain? In what regions are the anomalous temperatures strongest? - -(2) Let's take a look at the skill metrics RPSS, BSS10 and BSS90. In what regions and for which metrics is the forecast most skillful? *Tip*: Positive values indicate that the model is a better predictor than the climatology, with 1 being the perfect score. - -(3) Let's take a look at the Most Likely Terciles plots. This plot indicates the probability of the temperature being below normal, near-normal or above normal. What is the most likely category for Spain? +Now, you can `cd` to the the output directory and inspect the contents of the `plots/` subdirectory. The plots are PNG files that can be visualized with the `display` command. They have a descriptive name including the content of the plot, the date and the forecast time. diff --git a/use_cases/ex0_1_sample_dataset/ex0_1-recipe.yml b/use_cases/ex0_1_sample_dataset/ex0_1-recipe.yml index 06b1e572..bdd7a8d2 100644 --- a/use_cases/ex0_1_sample_dataset/ex0_1-recipe.yml +++ b/use_cases/ex0_1_sample_dataset/ex0_1-recipe.yml @@ -1,6 +1,6 @@ Description: Author: V. Agudetse - Description: Run SUNSET workflow with CSTools sample data + '': split version Analysis: Horizon: seasonal Variables: @@ -44,7 +44,7 @@ Analysis: Indicators: index: FALSE Visualization: - plots: skill_metrics, forecast_ensemble_mean, most_likely_terciles + plots: skill_metrics, most_likely_terciles ncores: # Optional, int: number of cores, defaults to 1 remove_NAs: # Optional, bool: Whether NAs are removed, defaults to FALSE Output_format: S2S4E @@ -52,6 +52,6 @@ Run: Loglevel: INFO Terminal: yes output_dir: /tmp/out-logs/ - code_dir: './' + code_dir: filesystem: sample -- GitLab From 99b589f262b5657d2d29777c8e645ceacf8a1093 Mon Sep 17 00:00:00 2001 From: vagudets Date: Tue, 16 Jan 2024 15:57:33 +0100 Subject: [PATCH 377/388] Fix typo in README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5758fbf3..2ae44e8e 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ -SUNSET: SUbseasoNal to decadal climate forecast post-processing and asSEmenT suite +SUNSET: SUbseasoNal to decadal climate forecast post-processing and asSEssmenT suite ====================== This is the Git project for the SUNSET, a collaborative in-house tool developed at BSC-ES for research projects and operational workflows involving subseasonal to seasonal to decadal forecast verification. -- GitLab From a62fa1a0deab64135c5bff75634cd8637d20e1f9 Mon Sep 17 00:00:00 2001 From: vagudets Date: Tue, 16 Jan 2024 16:22:38 +0100 Subject: [PATCH 378/388] add provisional conda environment YAML and script --- conda_installation/environment-sunset.yml | 2 ++ conda_installation/load_sunset.bash | 9 +++++++++ 2 files changed, 11 insertions(+) create mode 100755 conda_installation/load_sunset.bash diff --git a/conda_installation/environment-sunset.yml b/conda_installation/environment-sunset.yml index 0427f523..27dbd8b9 100644 --- a/conda_installation/environment-sunset.yml +++ b/conda_installation/environment-sunset.yml @@ -165,6 +165,7 @@ dependencies: - r-docopt=0.7.1=r42hc72bb7e_3 - r-doparallel=1.0.17=r42hc72bb7e_2 - r-dotcall64=1.0_2=r42h61816a4_2 + - r-dplyr=1.1.2=r42ha503ecb_1 - r-e1071=1.7_13=r42ha503ecb_1 - r-easyncdf=0.1.2=r42hc72bb7e_1 - r-easyverification=0.4.5=r42ha503ecb_0 @@ -187,6 +188,7 @@ dependencies: - r-globals=0.16.2=r42hc72bb7e_1 - r-glue=1.6.2=r42h57805ef_2 - r-gridextra=2.3=r42hc72bb7e_1005 + - r-gridgraphics=0.5_1=r42hc72bb7e_2 - r-gtable=0.3.4=r42hc72bb7e_0 - r-highr=0.10=r42hc72bb7e_1 - r-htmltools=0.5.6=r42ha503ecb_0 diff --git a/conda_installation/load_sunset.bash b/conda_installation/load_sunset.bash new file mode 100755 index 00000000..add332b4 --- /dev/null +++ b/conda_installation/load_sunset.bash @@ -0,0 +1,9 @@ +#!/bin/bash + +prefix=$1 + +conda env create --file environment-sunset.yml --prefix $prefix + +conda activate $prefix + +R -e "options(timeout = 600) ; install.packages('CSTools', repos='https://ftp.cixug.es/CRAN/')" -- GitLab From b77e028cdbdcd2cf87becda821213ef94a7b3b52 Mon Sep 17 00:00:00 2001 From: vagudets Date: Tue, 16 Jan 2024 16:51:12 +0100 Subject: [PATCH 379/388] Correct recipe and hands-on --- use_cases/ex0_1_sample_dataset/ex0_1-handson.md | 5 ++--- use_cases/ex0_1_sample_dataset/ex0_1-recipe.yml | 14 +++++++------- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/use_cases/ex0_1_sample_dataset/ex0_1-handson.md b/use_cases/ex0_1_sample_dataset/ex0_1-handson.md index 7dc9927f..c1dfe48a 100644 --- a/use_cases/ex0_1_sample_dataset/ex0_1-handson.md +++ b/use_cases/ex0_1_sample_dataset/ex0_1-handson.md @@ -76,11 +76,11 @@ Analysis: method: <___> save: 'none' Skill: - metric: RPSS, BSS10, BSS90 + metric: RPSS BSS10 BSS90 cross_validation: yes save: 'none' Probabilities: - percentiles: [[1/3, 2/3]] + percentiles: [[1/3, 2/3]] save: 'none' Visualization: plots: skill_metrics @@ -232,7 +232,6 @@ With the significance option in the `Visualization()` function, you can choose w # Plot data Visualization(recipe, data, skill_metrics = skill_metrics, - probabilities = probabilities, significance = TRUE) ``` diff --git a/use_cases/ex0_1_sample_dataset/ex0_1-recipe.yml b/use_cases/ex0_1_sample_dataset/ex0_1-recipe.yml index bdd7a8d2..662e75cc 100644 --- a/use_cases/ex0_1_sample_dataset/ex0_1-recipe.yml +++ b/use_cases/ex0_1_sample_dataset/ex0_1-recipe.yml @@ -29,14 +29,14 @@ Analysis: type: to_system Workflow: Anomalies: - compute: no - cross_validation: - save: + compute: yes + cross_validation: yes + save: 'all' Calibration: method: bias - save: 'all' + save: 'none' Skill: - metric: RPSS + metric: RPSS BSS10 BSS90 save: 'all' Probabilities: percentiles: [[1/3, 2/3]] @@ -44,7 +44,7 @@ Analysis: Indicators: index: FALSE Visualization: - plots: skill_metrics, most_likely_terciles + plots: skill_metrics ncores: # Optional, int: number of cores, defaults to 1 remove_NAs: # Optional, bool: Whether NAs are removed, defaults to FALSE Output_format: S2S4E @@ -52,6 +52,6 @@ Run: Loglevel: INFO Terminal: yes output_dir: /tmp/out-logs/ - code_dir: + code_dir: ./ filesystem: sample -- GitLab From e08f838019356982ab2f9da8561ec5db84cc8548 Mon Sep 17 00:00:00 2001 From: vagudets Date: Tue, 16 Jan 2024 16:51:30 +0100 Subject: [PATCH 380/388] Improve output_conf warning logic --- modules/Visualization/Visualization.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/Visualization/Visualization.R b/modules/Visualization/Visualization.R index a6b6bd75..ae94ed3d 100644 --- a/modules/Visualization/Visualization.R +++ b/modules/Visualization/Visualization.R @@ -46,7 +46,7 @@ Visualization <- function(recipe, "parameters of the requested plotting function, i.e. ", "PlotEquiMap, PlotRobinson or PlotLayout. There could be ", "plotting erros if the list is incomplete.")) - } else { + } else if (!is.null(output_conf)) { warning(paste("Parameter 'output_conf' should be a list.", "Using default configuration.")) output_conf <- NULL -- GitLab From c3ea974ea17e3007550d3f497b75ee3881f84556 Mon Sep 17 00:00:00 2001 From: vagudets Date: Fri, 2 Feb 2024 15:44:44 +0100 Subject: [PATCH 381/388] Add for loop to go over individual dates --- .../Units/R/transform_units_precipitation.R | 37 ++++++++++--------- .../atomic_recipes/recipe_system7c3s-prlr.yml | 5 ++- 2 files changed, 23 insertions(+), 19 deletions(-) diff --git a/modules/Units/R/transform_units_precipitation.R b/modules/Units/R/transform_units_precipitation.R index 5cc1e812..d0dd7ffd 100644 --- a/modules/Units/R/transform_units_precipitation.R +++ b/modules/Units/R/transform_units_precipitation.R @@ -96,22 +96,25 @@ transform_units_precipitation <- function(data, original_units, new_units, } -.days_in_month <- function(x, cal) { - if (cal %in% c('gregorian', 'standard', 'proleptic_gregorian')) { - N_DAYS_IN_MONTHS <- lubridate:::N_DAYS_IN_MONTHS - if (leap_year(year(x))) { - N_DAYS_IN_MONTHS[2] <- N_DAYS_IN_MONTHS[2] + 1 - } - } else if (cal %in% c('360', '360_day')) { - N_DAYS_IN_MONTHS <- rep(30, 12) - names(N_DAYS_IN_MONTHS) <- month.abb - } else if (cal %in% c('365', '365_day')) { - N_DAYS_IN_MONTHS <- lubridate:::N_DAYS_IN_MONTHS - } else { - stop("Unknown calendar") - } - month_x <- month(x, label = TRUE, locale = "C") - n_days <- N_DAYS_IN_MONTHS[month_x] - n_days[month_x == "Feb" & leap_year(x)] <- 29L +.days_in_month <- function(dates, cal) { + n_days <- array() + for (x in 1:length(dates)) { + if (cal %in% c('gregorian', 'standard', 'proleptic_gregorian')) { + N_DAYS_IN_MONTHS <- lubridate:::N_DAYS_IN_MONTHS + if (leap_year(year(dates[x]))) { + N_DAYS_IN_MONTHS[2] <- N_DAYS_IN_MONTHS[2] + 1 + } + } else if (cal %in% c('360', '360_day')) { + N_DAYS_IN_MONTHS <- rep(30, 12) + names(N_DAYS_IN_MONTHS) <- month.abb + } else if (cal %in% c('365', '365_day')) { + N_DAYS_IN_MONTHS <- lubridate:::N_DAYS_IN_MONTHS + } else { + stop("Unknown calendar") + } + month_x <- month(dates[x], label = TRUE, locale = "C") + n_days[x] <- N_DAYS_IN_MONTHS[month_x] + # n_days[month_x == "Feb" & leap_year(x)] <- 29L + } return(n_days) } diff --git a/recipes/atomic_recipes/recipe_system7c3s-prlr.yml b/recipes/atomic_recipes/recipe_system7c3s-prlr.yml index 1cba3c97..590d4499 100644 --- a/recipes/atomic_recipes/recipe_system7c3s-prlr.yml +++ b/recipes/atomic_recipes/recipe_system7c3s-prlr.yml @@ -4,8 +4,9 @@ Description: Analysis: Horizon: Seasonal Variables: - name: prlr + name: prlr freq: monthly_mean + units: mm Datasets: System: name: Meteo-France-System7 @@ -36,7 +37,7 @@ Analysis: method: mse_min save: 'all' Skill: - metric: RPS RPSS CRPS CRPSS FRPSS BSS10 BSS90 EnsCorr Corr + metric: RPS RPSS CRPS CRPSS FRPSS BSS10 BSS90 EnsCorr save: 'all' Probabilities: percentiles: [[1/3, 2/3], [1/10, 9/10], [1/4, 2/4, 3/4]] -- GitLab From 77bfdcb26f04f8478d2fb66503cc46e9e5b4cf12 Mon Sep 17 00:00:00 2001 From: vagudets Date: Mon, 5 Feb 2024 11:31:34 +0100 Subject: [PATCH 382/388] Correct HPC specification in use case instructions --- use_cases/ex1_2_autosubmit_scorecards/ex1_2-handson.md | 2 +- use_cases/ex1_3_nino_indices_comparison/ex1_3-handson.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/use_cases/ex1_2_autosubmit_scorecards/ex1_2-handson.md b/use_cases/ex1_2_autosubmit_scorecards/ex1_2-handson.md index 7ea0bfa2..56eebb91 100644 --- a/use_cases/ex1_2_autosubmit_scorecards/ex1_2-handson.md +++ b/use_cases/ex1_2_autosubmit_scorecards/ex1_2-handson.md @@ -29,7 +29,7 @@ You should see a git folder "sunset" under the current directory. Now you have a Since we're going to use Autosubmit to dispatch jobs, we need to have an Autosubmit experiment. Note that SUNSET uses Autosubmit >= 4.0.0. -On the workstation or Nord3, you can create an experiment by the following commands. +On the workstation or the Autosubmit machine, you can create an experiment by the following commands. ```shell module load autosubmit/4.0.0b-foss-2015a-Python-3.7.3 diff --git a/use_cases/ex1_3_nino_indices_comparison/ex1_3-handson.md b/use_cases/ex1_3_nino_indices_comparison/ex1_3-handson.md index 9cd82bdf..3696ffe6 100644 --- a/use_cases/ex1_3_nino_indices_comparison/ex1_3-handson.md +++ b/use_cases/ex1_3_nino_indices_comparison/ex1_3-handson.md @@ -76,7 +76,7 @@ A complete, ready-to-use sample of this example script can be found in `use_case ## 3. Launching the jobs with the SUNSET Launcher -When working without Autosubmit, the SUNSET Launcher should be run directly from the HPC machine where the jobs will run(for example, Nord3v2). Make sure to ssh to the machine first. You can obtain detailed usage information by running: +The first step is to connect to the HPC machine through `ssh`. When working without Autosubmit, the SUNSET Launcher should be run directly from the HPC machine where the jobs will run (for example, Nord3v2). There is no need to request an interactive session; the launcher script can be called directly from the login node. You can obtain detailed usage information by running: ```shell bash launch_SUNSET.sh --help -- GitLab From 28ff6e29f12d2fd9fba8935d5c91618602502799 Mon Sep 17 00:00:00 2001 From: vagudets Date: Tue, 6 Feb 2024 10:09:15 +0100 Subject: [PATCH 383/388] Fixes in use case 1.2 --- use_cases/ex1_2_autosubmit_scorecards/ex1_2-handson.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/use_cases/ex1_2_autosubmit_scorecards/ex1_2-handson.md b/use_cases/ex1_2_autosubmit_scorecards/ex1_2-handson.md index 56eebb91..999e02f3 100644 --- a/use_cases/ex1_2_autosubmit_scorecards/ex1_2-handson.md +++ b/use_cases/ex1_2_autosubmit_scorecards/ex1_2-handson.md @@ -74,10 +74,11 @@ In its place, we will use the function read_atomic_recipe(). The recipe path is # Load modules source("modules/Loading/Loading.R") source("modules/Anomalies/Anomalies.R") -source("modules/Indices/Indices.R") source("modules/Skill/Skill.R") +source("modules/Saving/Saving.R") -# Read recipe +# Read recipe +## (leave this part as-is! Autosubmit will automatically pass the atomic recipe as a parameter) args = commandArgs(trailingOnly = TRUE) recipe_file <- args[1] recipe <- read_atomic_recipe(recipe_file) @@ -104,7 +105,7 @@ We will start the jobs with the launcher. The SUNSET Launcher is a bash script n 1. Run the recipe checks, split the recipe into atomic recipes and create the directory for the outputs. 2. Modify the Autosubmit configuration of your experiment according to the parameters in the recipe. -The bash script needs two inputs: (1) [recipe](#2-modifying-the-recipe) (2) [R script](#2-modifying-the-recipe). +The bash script needs two inputs: (1) [recipe](#2-modifying-the-recipe) (2) [R script](#3-the-user-defined-script). On your workstation or Nord3 under the SUNSET code directory, run: -- GitLab From a32e36b59b9e0e661b8816076565f7a0a4481abd Mon Sep 17 00:00:00 2001 From: vagudets Date: Wed, 28 Feb 2024 09:50:23 +0100 Subject: [PATCH 384/388] Add authorship to use cases --- use_cases/ex0_1_sample_dataset/ex0_1-handson.md | 2 ++ use_cases/ex1_1_single_analysis_terminal/ex1_1-handson.md | 2 ++ use_cases/ex1_2_autosubmit_scorecards/ex1_2-handson.md | 2 ++ use_cases/ex1_3_nino_indices_comparison/ex1_3-handson.md | 4 +++- 4 files changed, 9 insertions(+), 1 deletion(-) diff --git a/use_cases/ex0_1_sample_dataset/ex0_1-handson.md b/use_cases/ex0_1_sample_dataset/ex0_1-handson.md index c1dfe48a..c6d824ef 100644 --- a/use_cases/ex0_1_sample_dataset/ex0_1-handson.md +++ b/use_cases/ex0_1_sample_dataset/ex0_1-handson.md @@ -1,5 +1,7 @@ # Use case 0.1: Loading a sample dataset +Author: Victòria Agudetse Roures + ## Goal Load a sample dataset into SUNSET without the need configure an archive of netCDF or GRIB files. diff --git a/use_cases/ex1_1_single_analysis_terminal/ex1_1-handson.md b/use_cases/ex1_1_single_analysis_terminal/ex1_1-handson.md index 6315cd86..ee86459a 100644 --- a/use_cases/ex1_1_single_analysis_terminal/ex1_1-handson.md +++ b/use_cases/ex1_1_single_analysis_terminal/ex1_1-handson.md @@ -1,5 +1,7 @@ # Hands-on 1.1: Single Verification Workflow on the Terminal +Author: Victòria Agudetse Roures + ## Goal Create a SUNSET recipe and use the functions in the suite to reproduce the verification workflow from the previous hands-on exercises. diff --git a/use_cases/ex1_2_autosubmit_scorecards/ex1_2-handson.md b/use_cases/ex1_2_autosubmit_scorecards/ex1_2-handson.md index 999e02f3..c77fb2b1 100644 --- a/use_cases/ex1_2_autosubmit_scorecards/ex1_2-handson.md +++ b/use_cases/ex1_2_autosubmit_scorecards/ex1_2-handson.md @@ -1,5 +1,7 @@ # Hands-on 1.2: Computation of Scorecards with Autosubmit +Author: An-Chi Ho + ## Goal Compute some skill metrics and plots scorecards with SUNSET, using Autosubmit to dispatch jobs in parallel. In the recipe, we request 12 start dates (0101, 0201, ..., 1201). SUNSET will split the recipe into 12 atomic recipes, and Autosubmit will run 12 jobs, which process the verification, for each recipe in parallel. diff --git a/use_cases/ex1_3_nino_indices_comparison/ex1_3-handson.md b/use_cases/ex1_3_nino_indices_comparison/ex1_3-handson.md index 3696ffe6..8417a4f0 100644 --- a/use_cases/ex1_3_nino_indices_comparison/ex1_3-handson.md +++ b/use_cases/ex1_3_nino_indices_comparison/ex1_3-handson.md @@ -1,5 +1,7 @@ # Hands-on 1.3: Computation of El Niño indices for two seasonal models +Author: Victòria Agudetse Roures and Núria Pérez Zanón + ## Goal Create a SUNSET recipe to compute and evaluate the skill of several El Niño indices (Niño1+2, Niño3, Niño3.4 and Niño4) for two models: ECMWF-SEAS5 and MeteoFrance System 7. We include the information for both of the models in a single recipe, and the SUNSET Launcher will split the recipe into two 'atomic recipes': one for each model. The computation for atomic recipe will be run in the cluster as two separate jobs. @@ -35,7 +37,7 @@ The SUNSET Launcher is a bash script named launch_SUNSET.sh that can be found in 1. Running the recipe checks, splitting the recipe into atomic recipes and creating the directory for the outputs. 2. Sending jobs to the cluster to run the user-defined script for each atomic recipe, using SLURM. -The prepare_outputs() function is already incorporated into the first step. For that reason, it does not need to be included in the user-defined script in this particular case. In its place, we will use the function read_atomic_recipe(). The recipe path is passed as an argument onto the R script. The beginning of our script should look like this: +The `prepare_outputs()` function is already incorporated into the first step. For that reason, it does not need to be included in the user-defined script in this particular case. In its place, we will use the function `read_atomic_recipe()`. The recipe path is passed as an argument onto the R script. The beginning of our script should look like this: ```R # Load the modules to be used -- GitLab From 55de3cc265e9552344c73743cdc142645acf46e8 Mon Sep 17 00:00:00 2001 From: vagudets Date: Wed, 6 Mar 2024 10:33:28 +0100 Subject: [PATCH 385/388] Update CSDownscale functions --- modules/Downscaling/tmp/Analogs.R | 451 +++++++++++++++--------- modules/Downscaling/tmp/Intbc.R | 2 +- modules/Downscaling/tmp/Interpolation.R | 2 +- modules/Downscaling/tmp/Intlr.R | 4 +- modules/Downscaling/tmp/LogisticReg.R | 53 +-- 5 files changed, 324 insertions(+), 188 deletions(-) diff --git a/modules/Downscaling/tmp/Analogs.R b/modules/Downscaling/tmp/Analogs.R index 99fc45e7..73b76ae5 100644 --- a/modules/Downscaling/tmp/Analogs.R +++ b/modules/Downscaling/tmp/Analogs.R @@ -1,16 +1,24 @@ #'@rdname CST_Analogs -#'@title Downscaling using Analogs based on large scale fields. +#'@title Downscaling using Analogs based on coarse scale fields. #' #'@author J. Ramon, \email{jaume.ramon@bsc.es} #' #'@description This function performs a downscaling using Analogs. To compute -#'the analogs given a coarse-scale field, the function looks for days with -#'similar conditions in the historical observations. The coarse scale and -#'observation data can be either global or regional. In the latter case, the -#'region is defined by the user. In principle, the coarse and observation data -#'should be of the same variable, although different variables can also be admitted. -#'The analogs function will find the N best analogs based in Minimum Euclidean -#'distance. +#'the analogs given a coarse-scale field, the function looks for days with similar conditions +#'in the historical observations. The analogs function determines the N best analogs based +#'on Euclidian distance, distance correlation, or Spearman's correlation metrics. To downscale +#'a local-scale variable, either the variable itself or another large-scale variable +#'can be utilized as the predictor. In the first scenario, analogs are examined between +#'the observation and model data of the same local-scale variable. In the latter scenario, +#'the function identifies the day in the observation data that closely resembles +#'the large-scale pattern of interest in the model. When it identifies the date of +#'the best analog, the function extracts the corresponding local-scale variable for that day +#'from the observation of the local scale variable. The used local-scale and large-scale +#'variables can be retrieved from independent regions. The input data for the first case must +#'include 'exp' and 'obs,' while in the second case, 'obs,' 'obsL,' and 'exp' are the +#'required input fields. Users can perform the downscaling process over the subregions +#'that can be identified through the 'region' argument, instead of focusing +#'on the entire area of the loaded data. #' #'The search of analogs must be done in the longest dataset posible, but might #'require high-memory computational resources. This is important since it is @@ -21,25 +29,24 @@ #'is intended to downscale climate prediction data (i.e., sub-seasonal, seasonal #'and decadal predictions) but can admit climate projections or reanalyses. It does #'not have constrains of specific region or variables to downscale. -#'@param exp an 's2dv' object with named dimensions containing the experimental field on -#'the coarse scale for which the downscaling is aimed. The object must have, at least, -#'the dimensions latitude, longitude, start date and time. The object is expected to be -#'already subset for the desired region. Data can be in one or two integrated regions, e.g., -#'crossing the Greenwich meridian. To get the correct results in the latter case, -#'the borders of the region should be specified in the parameter 'region'. See parameter -#''region'. -#'@param obs an 's2dv' object with named dimensions containing the observational field. -#'The object must have, at least, the dimensions latitude, longitude and start date. -#'The object is expected to be already subset for the desired region. -#'@param obs2 an 's2dv' object with named dimensions containing a different observational -#'field to that in 'obs'. If provided, these observations will be used in the training, -#'i.e. the searching for analogs, so that they should be in a coarser grid to those in -#''obs'. Training with observations on a grid with a spatial resolution closer to that -#'in 'exp', will in principle ensure better results. The object must have, at least, the -#'dimensions latitude, longitude and start date. The object is expected to be already -#'subset for the desired region. -#'@param grid_exp a character vector with a path to an example file of the exp data. -#'It can be either a path to another NetCDF file which to read the target grid from +#'@param exp an 's2dv_cube' object with named dimensions containing the experimental field +#'on the coarse scale for the variable targeted for downscaling (in case obsL is not provided) +#'or for the large-scale variable used as the predictor (if obsL is provided). +#'The object must have, at least, the dimensions latitude, longitude, start date and time. +#'The object is expected to be already subset for the desired region. Data can be in one +#'or two integrated regions, e.g., crossing the Greenwich meridian. To get the correct +#'results in the latter case, the borders of the region should be specified in the parameter +#''region'. See parameter 'region'. +#'@param obs an 's2dv_cube' object with named dimensions containing the observational field +#'for the variable targeted for downscaling. The object must have, at least, the dimensions +#'latitude, longitude and start date. The object is expected to be already subset for the +#'desired region. +#'@param obsL an 's2dv_cube' object with named dimensions containing the observational +#'field of the large-scale variable. The object must have, at least, the dimensions latitude, +#'longitude and start date. The object is expected to be already subset for the desired region. +#'@param grid_exp a character vector with a path to an example file of the exp (if the +#'predictor is the local scale variable) or expL (if the predictor is a large scale variable) +#'data. It can be either a path to another NetCDF file which to read the target grid from #'(a single grid must be defined in such file) or a character vector indicating the #'coarse grid to be passed to CDO, and it must be a grid recognised by CDO. #'@param nanalogs an integer indicating the number of analogs to be searched @@ -56,6 +63,9 @@ #''data' in exp and obs. Default set to "time". #'@param member_dim a character vector indicating the member dimension name in the element #''data' in exp and obs. Default set to "member". +#'@param metric a character vector to select the analog specification method. Only these +#'options are valid: "dist" (i.e., Euclidian distance), "dcor" (i.e., distance correlation) +#'or "cor" (i.e., Spearman's .correlation). The default metric is "dist". #'@param region a numeric vector indicating the borders of the region defined in exp. #'It consists of four elements in this order: lonmin, lonmax, latmin, latmax. lonmin refers #'to the left border, while lonmax refers to the right border. latmin indicates the lower @@ -68,7 +78,7 @@ #'of the window. It is recommended to be set to TRUE. Default to TRUE. #'@param ncores an integer indicating the number of cores to use in parallel computation. #'The default value is NULL. -#'@return An 's2dv' object. The element 'data' contains the dowscaled field, 'lat' the +#'@return An 's2dv_cube' object. The element 'data' contains the dowscaled field, 'lat' the #'downscaled latitudes, and 'lon' the downscaled longitudes. If fun_analog is set to NULL #'(default), the output array in 'data' also contains the dimension 'analog' with the best #'analog days. @@ -81,31 +91,40 @@ #'dim(obs) <- c(lat = 12, lon = 15, sdate = 5, time = 30) #'obs_lons <- seq(0,6, 6/14) #'obs_lats <- seq(0,6, 6/11) -#'exp <- s2dv_cube(data = exp, lat = exp_lats, lon = exp_lons) -#'obs <- s2dv_cube(data = obs, lat = obs_lats, lon = obs_lons) +#'exp <- s2dv_cube(data = exp, coords = list(lat = exp_lats, lon = exp_lons)) +#'obs <- s2dv_cube(data = obs, coords = list(lat = obs_lats, lon = obs_lons)) #'downscaled_field <- CST_Analogs(exp = exp, obs = obs, grid_exp = 'r360x180') #'@export -CST_Analogs <- function(exp, obs, grid_exp, obs2 = NULL, nanalogs = 3, fun_analog = NULL, lat_dim = "lat", - lon_dim = "lon", sdate_dim = "sdate", time_dim = "time", member_dim = "member", - region = NULL, return_indices = FALSE, loocv_window = TRUE, ncores = NULL) { - - # input exp and obs must be s2dv_cube objects - if (!inherits(exp,'s2dv_cube')) { - stop("Parameter 'exp' must be of the class 's2dv_cube'") - } +CST_Analogs <- function(exp, obs, obsL = NULL, grid_exp, nanalogs = 3, + fun_analog = NULL, lat_dim = "lat", lon_dim = "lon", sdate_dim = "sdate", + time_dim = "time", member_dim = "member", metric = "dist", region = NULL, + return_indices = FALSE, loocv_window = TRUE, ncores = NULL) { # input exp and obs must be s2dv_cube objects if (!inherits(obs,'s2dv_cube')) { stop("Parameter 'obs' must be of the class 's2dv_cube'") } - res <- Analogs(exp = exp$data, obs = obs$data, exp_lats = exp$coords[[lat_dim]], - exp_lons = exp$coords[[lon_dim]], obs_lats = obs$coords[[lat_dim]], - obs_lons = obs$coords[[lon_dim]], grid_exp = grid_exp, nanalogs = nanalogs, - fun_analog = fun_analog, lat_dim = lat_dim, lon_dim = lon_dim, - sdate_dim = sdate_dim, time_dim = time_dim, member_dim = member_dim, - region = region, return_indices = return_indices, loocv_window = loocv_window, - ncores = ncores) + if (!is.null(obsL)) { + # input obs must be s2dv_cube objects + if (!inherits(obsL,'s2dv_cube')) { + stop("Parameter 'obsL' must be of the class 's2dv_cube'") + } + } + # input exp and obs must be s2dv_cube objects + if (!inherits(exp,'s2dv_cube')) { + stop("Parameter 'exp' must be of the class 's2dv_cube'") + } + + res <- Analogs(exp = exp$data, obs = obs$data, obsL = obsL$data, + exp_lats = exp$coords[[lat_dim]], exp_lons = exp$coords[[lon_dim]], + obs_lats = obs$coords[[lat_dim]], obs_lons = obs$coords[[lon_dim]], + obsL_lats = obsL$coords[[lat_dim]], obsL_lons = obsL$coords[[lon_dim]], + grid_exp = grid_exp, nanalogs = nanalogs, fun_analog = fun_analog, + lat_dim = lat_dim, lon_dim = lon_dim, sdate_dim = sdate_dim, + time_dim = time_dim, member_dim = member_dim, metric = metric, + region = region, return_indices = return_indices, + loocv_window = loocv_window, ncores = ncores) # Modify data, lat and lon in the origina s2dv_cube, adding the downscaled data exp$data <- res$data @@ -129,13 +148,21 @@ CST_Analogs <- function(exp, obs, grid_exp, obs2 = NULL, nanalogs = 3, fun_analo #'@author Ll. Lledó, \email{llorenc.lledo@ecmwf.int} #' #'@description This function performs a downscaling using Analogs. To compute -#'the analogs given a coarse-scale field, the function looks for days with -#'similar conditions in the historical observations. The coarse scale and -#'observation data can be either global or regional. In the latter case, the -#'region is defined by the user. In principle, the coarse and observation data -#'should be of the same variable, although different variables can also be admitted. -#'The analogs function will find the N best analogs based in Minimum Euclidean -#'distance. +#'the analogs given a coarse-scale field, the function looks for days with similar conditions +#'in the historical observations. The analogs function determines the N best analogs based +#'on RMSE, distance correlation, or Spearman's correlation metrics. To downscale +#'a local-scale variable, either the variable itself or another large-scale variable +#'can be utilized as the predictor. In the first scenario, analogs are examined between +#'the observation and model data of the same local-scale variable. In the latter scenario, +#'the function identifies the day in the observation data that closely resembles +#'the large-scale pattern of interest in the model. When it identifies the date of +#'the best analog, the function extracts the corresponding local-scale variable for that day +#'from the observation of the local scale variable. The used local-scale and large-scale +#'variables can be retrieved from independent regions. The input data for the first case must +#'include 'exp' and 'obs,' while in the second case, 'obs,' 'obsL,' and 'expL' are the +#'required input fields. Users can perform the downscaling process over the subregions +#'that can be identified through the 'region' and 'regionL' arguments, instead of focusing +#'on the entire area of the loaded data. #' #'The search of analogs must be done in the longest dataset posible, but might #'require high-memory computational resources. This is important since it is @@ -146,19 +173,20 @@ CST_Analogs <- function(exp, obs, grid_exp, obs2 = NULL, nanalogs = 3, fun_analo #'is intended to downscale climate prediction data (i.e., sub-seasonal, seasonal #'and decadal predictions) but can admit climate projections or reanalyses. It does #'not have constrains of specific region or variables to downscale. -#'@param exp an array with named dimensions containing the experimental field on the -#'coarse scale for which the downscaling is aimed. The object must have, at least, -#'the dimensions latitude, longitude, start date and time. The object is expected to be -#'already subset for the desired region. Data can be in one or two integrated regions, e.g., -#'crossing the Greenwich meridian. To get the correct results in the latter case, -#'the borders of the region should be specified in the parameter 'region'. See parameter -#''region'. -#'@param obs an array with named dimensions containing the observational field. The object -#'must have, at least, the dimensions latitude, longitude, start date and time. The object -#'is expected to be already subset for the desired region. Optionally, 'obs' can have the -#'dimension 'window', containing the sampled fields into which the function will look for -#'the analogs. See function 'generate_window()'. Otherwise, the function will look for -#'analogs using all the possible fields contained in obs. +#'@param exp an array with named dimensions containing the experimental field +#'on the coarse scale for the variable targeted for downscaling (in case obsL is not provided) +#'or for the large-scale variable used as the predictor (if obsL is provided). +#'The object must have, at least, the dimensions latitude, longitude, start date and time. +#'The object is expected to be already subset for the desired region. Data can be in one +#'or two integrated regions, e.g., crossing the Greenwich meridian. To get the correct +#'results in the latter case, the borders of the region should be specified in the parameter +#''region'. See parameter 'region'. +#'@param obs an array with named dimensions containing the observational field for the variable +#'targeted for downscaling. The object must have, at least, the dimensions latitude, longitude, +#'start date and time. The object is expected to be already subset for the desired region. +#'Optionally, 'obs' can have the dimension 'window', containing the sampled fields into which +#'the function will look for the analogs. See function 'generate_window()'. Otherwise, +#'the function will look for analogs using all the possible fields contained in obs. #'@param exp_lats a numeric vector containing the latitude values in 'exp'. Latitudes must #'range from -90 to 90. #'@param exp_lons a numeric vector containing the longitude values in 'exp'. Longitudes @@ -167,17 +195,21 @@ CST_Analogs <- function(exp, obs, grid_exp, obs2 = NULL, nanalogs = 3, fun_analo #'range from -90 to 90. #'@param obs_lons a numeric vector containing the longitude values in 'obs'. Longitudes #'can range from -180 to 180 or from 0 to 360. -#'@param grid_exp a character vector with a path to an example file of the exp data. +#'@param obsL an 's2dv_cube' object with named dimensions containing the observational +#'field of the large-scale variable.The object must have, at least, the dimensions latitude, +#'longitude and start date. The object is expected to be already subset for the desired region. +#'Optionally, 'obsL' can have the dimension 'window', containing the sampled fields into which +#'the function will look for the analogs. See function 'generate_window()'. Otherwise, +#'the function will look for analogs using all the possible fields contained in obs. +#'@param obsL_lats a numeric vector containing the latitude values in 'obsL'. Latitudes must +#'range from -90 to 90. +#'@param obsL_lons a numeric vector containing the longitude values in 'obsL'. Longitudes +#'can range from -180 to 180 or from 0 to 360. +#'@param grid_exp a character vector with a path to an example file of the exp (if the +#'predictor is the local scale variable) or expL (if the predictor is a large scale variable) data. #'It can be either a path to another NetCDF file which to read the target grid from #'(a single grid must be defined in such file) or a character vector indicating the #'coarse grid to be passed to CDO, and it must be a grid recognised by CDO. -#'@param obs2 an 's2dv' object with named dimensions containing a different observational -#'field to that in 'obs'. If provided, these observations will be used in the training, -#'i.e. the searching for analogs, so that they should be in a coarser grid to those in -#''obs'. Training with observations on a grid with a spatial resolution closer to that -#'in 'exp', will in principle ensure better results. The object must have, at least, the -#'dimensions latitude, longitude and start date. The object is expected to be already -#'subset for the desired region. #'@param nanalogs an integer indicating the number of analogs to be searched. #'@param fun_analog a function to be applied over the found analogs. Only these options #'are valid: "mean", "wmean", "max", "min", "median" or NULL. If set to NULL (default), @@ -192,6 +224,9 @@ CST_Analogs <- function(exp, obs, grid_exp, obs2 = NULL, nanalogs = 3, fun_analo #''data' in exp and obs. Default set to "time". #'@param member_dim a character vector indicating the member dimension name in the element #''data' in exp and obs. Default set to "member". +#'@param metric a character vector to select the analog specification method. Only these +#'options are valid: "dist" (i.e., Euclidian distance), "dcor" (i.e., distance correlation) +#'or "cor" (i.e., Spearman's .correlation). The default metric is "dist". #'@param region a numeric vector indicating the borders of the region defined in exp. #'It consists of four elements in this order: lonmin, lonmax, latmin, latmax. lonmin refers #'to the left border, while lonmax refers to the right border. latmin indicates the lower @@ -209,7 +244,7 @@ CST_Analogs <- function(exp, obs, grid_exp, obs2 = NULL, nanalogs = 3, fun_analo #'@import multiApply #'@import CSTools #'@importFrom s2dv InsertDim CDORemap -#'@importFrom FNN get.knnx +#'@importFrom energy dcor #' #'@seealso \code{\link[s2dverification]{CDORemap}} #' @@ -229,11 +264,11 @@ CST_Analogs <- function(exp, obs, grid_exp, obs2 = NULL, nanalogs = 3, fun_analo #'downscaled_field <- Analogs(exp = exp, obs = obs, exp_lats = exp_lats, exp_lons = exp_lons, #'obs_lats = obs_lats, obs_lons = obs_lons, grid_exp = 'r360x180') #'@export -Analogs <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, grid_exp, obs2 = NULL, - obs2_lats = NULL, obs2_lons = NULL, nanalogs = 3, fun_analog = NULL, - lat_dim = "lat", lon_dim = "lon", sdate_dim = "sdate", time_dim = "time", - member_dim = "member", region = NULL, return_indices = FALSE, - loocv_window = TRUE, ncores = NULL) { +Analogs <- function(exp, obs, exp_lats = NULL, exp_lons = NULL, obs_lats, obs_lons, + grid_exp, obsL = NULL, obsL_lats = NULL, obsL_lons = NULL, nanalogs = 3, + fun_analog = NULL, lat_dim = "lat", lon_dim = "lon", sdate_dim = "sdate", + time_dim = "time", member_dim = "member", metric = "dist", region = NULL, + return_indices = FALSE, loocv_window = TRUE, ncores = NULL) { #----------------------------------- # Checkings #----------------------------------- @@ -264,7 +299,7 @@ Analogs <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, grid_exp, stop("Parameter 'time_dim' must be of the class 'character'") } - # Do not allow synonims for lat (latitude), lon (longitude) and time (sdate) dimension names + # Do not allow synonims for lat (latitude), lon (longitude) and time (sdate) dimension names if (is.na(match(lon_dim, names(dim(exp)))) | is.na(match(lon_dim, names(dim(obs))))) { stop("Missing longitude dimension in 'exp' and/or 'obs', or does not match the parameter ", "'lon_dim'") @@ -305,38 +340,41 @@ Analogs <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, grid_exp, } } - if (!is.null(obs2)) { + if (!is.null(obsL) ) { + # the code is not yet prepared to handle members in the observations - if (member_dim %in% names(dim(obs2))) { - if (identical(as.numeric(dim(obs2)[member_dim]), 1)) { - obs2 <- ClimProjDiags::Subset(x = obs2, along = member_dim, indices = 1, drop = 'selected') + if (member_dim %in% names(dim(obsL))) { + if (identical(as.numeric(dim(obsL)[member_dim]), 1)) { + obsL <- ClimProjDiags::Subset(x = obsL, along = member_dim, indices = 1, drop = 'selected') } else { - stop("Not implemented for observations with members ('obs2' can have 'member_dim', ", + stop("Not implemented for observations with members ('obsL' can have 'member_dim', ", "but it should be of length = 1).") } } - if (is.null(obs2_lats) | is.null(obs2_lons)) { + if (is.null(obsL_lats) | is.null(obsL_lons)) { stop("Missing latitudes and/or longitudes for the provided training observations. Please ", - "provide them with the parametres 'obs2_lats' and 'obs2_lons'") + "provide them with the parametres 'obsL_lats' and 'obsL_lons'") } - if (is.na(match(lon_dim, names(dim(obs2))))) { - stop("Missing longitude dimension in 'obs2', or does not match the parameter 'lon_dim'") + if (is.na(match(lon_dim, names(dim(obsL))))) { + stop("Missing longitude dimension in 'obsL', or does not match the parameter 'lon_dim'") } - if (is.na(match(lat_dim, names(dim(obs2))))) { - stop("Missing latitude dimension in 'obs2', or does not match the parameter 'lat_dim'") + if (is.na(match(lat_dim, names(dim(obsL))))) { + stop("Missing latitude dimension in 'obsL', or does not match the parameter 'lat_dim'") } - if (is.na(match(sdate_dim, names(dim(obs2))))) { - stop("Missing start date dimension in 'obs2', or does not match the parameter 'sdate_dim'") + if (is.na(match(sdate_dim, names(dim(obsL))))) { + stop("Missing start date dimension in 'obsL', or does not match the parameter 'sdate_dim'") } - if (is.na(match(time_dim, names(dim(obs2))))) { - stop("Missing time dimension in 'obs2', or does not match the parameter 'time_dim'") + if (is.na(match(time_dim, names(dim(obsL))))) { + stop("Missing time dimension in 'obsL', or does not match the parameter 'time_dim'") } + } + ## ncores if (!is.null(ncores)) { if (!is.numeric(ncores) | any(ncores %% 1 != 0) | any(ncores < 0) | @@ -350,15 +388,20 @@ Analogs <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, grid_exp, stopifnot(fun_analog %in% c("mean", "wmean", "max", "min", "median")) } - if (!is.null(obs2)) { - obs_train <- obs2 - obs_train_lats <- obs2_lats - obs_train_lons <- obs2_lons + # metric method to be used to specify the analogs + stopifnot(metric %in% c("cor", "dcor", "dist")) + + + + if (!is.null(obsL)) { + obs_train <- obsL + obs_train_lats <- obsL_lats + obs_train_lons <- obsL_lons } else { obs_train <- obs obs_train_lats <- obs_lats obs_train_lons <- obs_lons - } + } # Correct indices later if cross-validation loocv_correction <- FALSE @@ -366,24 +409,40 @@ Analogs <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, grid_exp, loocv_correction <- TRUE } - #----------------------------------- - # Interpolate high-res observations to the coarse grid - #----------------------------------- + # crop downscaling region, if the argument region is provided. + if (!is.null(region) & is.null(obsL)) { + # if a border is equally distant from two different grids, the map will be cropped from the grid having smaller coordinate + + a <- which.min(abs((region[1]-obs_lons))) + b <- which.min(abs((region[2]-obs_lons))) + c <- which.min(abs((region[3]-obs_lats))) + d <- which.min(abs((region[4]-obs_lats))) + obs <- ClimProjDiags::Subset(x = obs, along = list(lon_dim,lat_dim), + indices = list(a:b,c:d), drop = 'selected') + } + if (is.null(region)) { - warning("The borders of the downscaling region have not been provided. Assuming the four borders of the ", - "downscaling region are defined by the first and last elements of the parametres 'exp_lats' and ", - "'exp_lons'.") - region <- c(exp_lons[1], exp_lons[length(exp_lons)], exp_lats[1], exp_lats[length(exp_lats)]) + warning("The borders of the downscaling region have not been provided. ", + "Assuming the four borders of the downscaling region are defined by the ", + "first and last elements of the parameters 'exp_lats' and 'exp_lons'.") + region <- c(exp_lons[1], exp_lons[length(exp_lons)], exp_lats[1], + exp_lats[length(exp_lats)]) } - obs_interpolated <- Interpolation(exp = obs_train, lats = obs_train_lats, lons = obs_train_lons, - target_grid = grid_exp, lat_dim = lat_dim, lon_dim = lon_dim, - method_remap = "conservative", region = region, ncores = ncores) + obs_interpolated <- Interpolation(exp = obs_train, lats = obs_train_lats, lons = obs_train_lons, + target_grid = grid_exp, lat_dim = lat_dim, lon_dim = lon_dim, + method_remap = "conservative", region = region, + ncores = ncores) + # If after interpolating 'obs' data the coordinates do not match, the exp data is interpolated to # the same grid to force the matching - if (!.check_coords(lat1 = as.numeric(obs_interpolated$lat), lat2 = exp_lats, lon1 = as.numeric(obs_interpolated$lon), lon2 = exp_lons)) { - exp_interpolated <- Interpolation(exp = exp, lats = exp_lats, lons = exp_lons, target_grid = grid_exp, - lat_dim = lat_dim, lon_dim = lon_dim, method_remap = "conservative", + if (!.check_coords(lat1 = as.numeric(obs_interpolated$lat), + lat2 = exp_lats, + lon1 = as.numeric(obs_interpolated$lon), + lon2 = exp_lons)) { + exp_interpolated <- Interpolation(exp = exp, lats = exp_lats, lons = exp_lons, + target_grid = grid_exp, lat_dim = lat_dim, + lon_dim = lon_dim, method_remap = "conservative", region = region, ncores = ncores)$data } else { exp_interpolated <- exp @@ -391,40 +450,57 @@ Analogs <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, grid_exp, # Create window if user does not have it in the training observations if ( !("window" %in% names(dim(obs_interpolated$data))) ) { - obs_train_interpolated <- .generate_window(obj = obs_interpolated$data, sdate_dim = sdate_dim, - time_dim = time_dim, loocv = loocv_window, ncores = ncores) - obs_hres <- .generate_window(obj = obs, sdate_dim = sdate_dim, time_dim = time_dim, loocv = loocv_window, ncores = ncores) + obs_train_interpolated <- .generate_window(obj = obs_interpolated$data, sdate_dim = sdate_dim, + time_dim = time_dim, loocv = loocv_window, + ncores = ncores) + if (!is.null(obsL)) { + if ( ("window" %in% names(dim(obs))) ) { + stop("Either both obs and obsL should include 'window' dimension or none.") + } + } + obs_hres <- .generate_window(obj = obs, sdate_dim = sdate_dim, time_dim = time_dim, + loocv = loocv_window, ncores = ncores) + } else { obs_train_interpolated <- obs_interpolated$data - dim(obs_train_interpolated) <- dim(obs_train_interpolated)[-which(names(dim(obs_train_interpolated))=="time")] + dim(obs_train_interpolated) <- dim(ClimProjDiags::Subset(x = obs_train_interpolated, + along = time_dim, indices = 1, drop = 'selected')) + + if (!is.null(obsL)) { + if ( !("window" %in% names(dim(obs))) ) { + stop("Either both obs and obsL should include 'window' dimension or none.") + } + } obs_hres <- obs - dim(obs_hres) <- dim(obs_hres)[-which(names(dim(obs_hres))=="time")] + dim(obs_hres) <- dim(ClimProjDiags::Subset(x = obs_hres, + along = time_dim, indices = 1, drop = 'selected')) + } #----------------------------------- # Reshape train and test #----------------------------------- - res.data <- Apply(list(obs_train_interpolated, exp_interpolated, obs_hres), - target_dims = list(c("window", lat_dim, lon_dim), c(lat_dim, lon_dim), - c("window", lat_dim, lon_dim)), - fun = function(tr, te, ob) .analogs(train = tr, test = te, obs_hres = ob, k = nanalogs, - fun_analog = fun_analog), ncores = ncores)$output1 - # Return the indices of the best analogs - if (return_indices) { - res.ind <- Apply(list(obs_train_interpolated, exp_interpolated, obs_hres), + RES <- Apply(list(obs_train_interpolated, exp_interpolated, obs_hres), target_dims = list(c("window", lat_dim, lon_dim), c(lat_dim, lon_dim), c("window", lat_dim, lon_dim)), - fun = function(tr, te, ob) .analogs(train = tr, test = te, obs_hres = ob, k = nanalogs, - fun_analog = fun_analog, return_indices = TRUE), ncores = ncores, output_dims = 'ind')$output1 + fun = function(tr, te, ob) .analogs(train = tr, test = te, obs_hres = ob, + k = nanalogs, metric = metric, fun_analog = fun_analog), + ncores = ncores) ## output1 -> data, output2 -> index, output3 -> metric + + res.data <- RES$output1 + + # Return the indices of the best analogs + if (return_indices) { + res.ind <- RES$output2 # If cross-validation has been applied, correct the indices if (loocv_correction) { nsdates <- dim(res.ind)[names(dim(res.ind)) == sdate_dim] ntimes <- dim(res.ind)[names(dim(res.ind)) == time_dim] - res.ind <- Apply(res.ind, target_dims = c("ind", sdate_dim), function(x) + res.ind <- Apply(res.ind, target_dims = c("index", sdate_dim), function(x) sapply(1:nsdates, function(s) seq(ntimes * nsdates)[ - (ntimes * (s - 1) + 1:ntimes)][x[, s]]), - output_dims = c("ind", sdate_dim), ncores = ncores)$output1 + output_dims = c("index", sdate_dim), ncores = ncores)$output1 } # restore ensemble dimension in observations if it existed originally @@ -433,72 +509,92 @@ Analogs <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, grid_exp, } res <- list(data = res.data, ind = res.ind, obs = obs, lon = obs_lons, lat = obs_lats) - } - else { + } else { # restore ensemble dimension in observations if it existed originally - if (restore_ens) { - obs <- s2dv::InsertDim(obs, posdim = 1, lendim = 1, name = member_dim) - } - - res <- list(data = res.data, obs = obs, lon = obs_lons, lat = obs_lats) + if (restore_ens) { + obs <- s2dv::InsertDim(obs, posdim = 1, lendim = 1, name = member_dim) + } + res <- list(data = res.data, obs = obs, lon = obs_lons, lat = obs_lats) } return(res) } # For each element in test, find the indices of the k nearest neigbhors in train -.analogs <- function(train, test, obs_hres, k, fun_analog, return_indices = FALSE) { - - require(FNN) - - # train and obs_hres dim: 3 dimensions window, lat and lon (in this order) +.analogs <- function(train, test, obs_hres, k, fun_analog, metric = NULL, return_indices = FALSE) { + + # train and obs_rs dim: 3 dimensions window, lat and lon (in this order) # test dim: 2 dimensions lat and lon (in this order) # Number of lats/lons of the high-resolution data space_dims_hres <- dim(obs_hres)[c(2,3)] # Reformat train and test as an array with (time, points) - train <- apply(train, 1, as.vector); names(dim(train))[1] <- "space" + train <- apply(train, 1, as.vector); names(dim(train))[1] <- "space" test <- as.vector(test) obs_hres <- apply(obs_hres, 1, as.vector); names(dim(obs_hres))[1] <- "space" - + # Identify and remove NA's - idx_na_tr <- is.na(train[ , 1]) + dum<-which(!apply(train,2,function (x) all(is.na(x))))[1] ## the column in which NA in space will be investigated. it shouldn't be all-NA time-step + idx_na_tr <- is.na(train[ , dum]) # NA in space + idy_na_tr <- is.na(train[1, ]) # NA in time idx_na_te <- is.na(test) idx_na <- idx_na_tr | idx_na_te - tr_wo_na <- t(train[!idx_na , ]) + tr_wo_na <- t(train[!idx_na , !idy_na_tr ]) te_wo_na <- test[!idx_na] te_wo_na <- InsertDim(data = te_wo_na, posdim = 1, lendim = 1, name = "time") - - knn.ind <- get.knnx(tr_wo_na, te_wo_na, k) - dist <- knn.ind$nn.dist - idx <- knn.ind$nn.index - - # Either return only the indices or the analogs - if (return_indices) { - res <- as.numeric(idx) + if (all(is.na(test))) { + res <- array(NA, space_dims_hres) + res_ind <- array(NA, k) + names(dim(res_ind)) <- c("index") + res_metric <- array(NA, k) + names(dim(res_metric)) <- c("metric") } else { + if (metric == "dist") { + dist_all <- sqrt(rowSums((sweep(tr_wo_na, 2, te_wo_na[1,]))^2)) # euc dist + best_vals <- head(sort(dist_all), k) + idx <- match(best_vals, dist_all) + } else if (metric == "cor") { + cor_all <- apply(tr_wo_na, 1, function (x) cor(x,te_wo_na[1, ], method = "spearman")) # cor + best_vals <- head(sort(cor_all, decreasing = TRUE), k) + idx <- match(best_vals, cor_all) + } else if (metric == "dcor") { +# require(energy) + dcor_all <- apply(tr_wo_na, 1, function (x) .dcor(x,te_wo_na[1, ])) # dcor + best_vals <- head(sort(dcor_all, decreasing = TRUE), k,) + idx <- match(best_vals, dcor_all) + } + if (isTRUE(any(idy_na_tr))) { + dum <-(1:length(idy_na_tr))[!idy_na_tr] + idx <- dum[idx] + } + res_ind <- array(idx, k) + names(dim(res_ind)) <- c("index") + res_metric <- array(best_vals, c(k)) + names(dim(res_metric)) <- c("metric") res <- obs_hres[ , idx] dim(res) <- c(space_dims_hres, analogs = k) if (!is.null(fun_analog)) { if (fun_analog == "wmean") { - weight <- 1 / dist + if (metric == "dist") { + weight <- 1 / best_vals + } else { + weight <- best_vals + } res <- apply(res, c(1,2), function(x) weighted.mean(x, weight)) } else if (fun_analog == "min") { - res<-res[,,which.min(dist)] + res <- res[, , which.min(best_vals)] } else if (fun_analog == "max") { - res<-res[,,which.max(dist)] + res <- res[, , which.max(best_vals)] } else { res <- apply(res, c(1,2), fun_analog) } } } - - return(res) + return(list(res, res_ind, res_metric)) } - # Add the dimension window to an array that contains, at least, the start date and time # dimensions # object has at least dimensions sdate and time @@ -548,3 +644,38 @@ Analogs <- function(exp, obs, exp_lats, exp_lons, obs_lats, obs_lons, grid_exp, return(obj_window) } + +# Distance correlation function +.dcor <- function(x, y) { + n <- length(x) + + # Calculate Euclidean distances for x + dist_x <- as.matrix(dist(matrix(x))) + # Calculate Euclidean distances for y + dist_y <- as.matrix(dist(matrix(y))) + + # Centering matrices + H <- diag(n) - 1/n + + # Centered distance matrices + dist_centered_x <- H %*% dist_x %*% H + dist_centered_y <- H %*% dist_y %*% H + + # Calculate the product of mean-centered distance matrices + B <- dist_centered_x %*% t(dist_centered_y) + C <- dist_centered_x %*% t(dist_centered_x) + D <- dist_centered_y %*% t(dist_centered_y) + + # Calculate the distance covariance + dcov_xy <- sqrt(sum(diag(B))) + + # Calculate the variances + cov_xx <- sqrt(sum(diag(C))) + cov_yy <- sqrt(sum(diag(D))) + + # Calculate the distance correlation + dcor_xy <- dcov_xy / sqrt(cov_xx * cov_yy) + + return(dcor_xy) +} + diff --git a/modules/Downscaling/tmp/Intbc.R b/modules/Downscaling/tmp/Intbc.R index dc5d050b..4b952732 100644 --- a/modules/Downscaling/tmp/Intbc.R +++ b/modules/Downscaling/tmp/Intbc.R @@ -82,7 +82,7 @@ CST_Intbc <- function(exp, obs, target_grid, bc_method, int_method = NULL, point res <- Intbc(exp = exp$data, obs = obs$data, exp_lats = exp$coords[[lat_dim]], exp_lons = exp$coords[[lon_dim]], obs_lats = obs$coords[[lat_dim]], obs_lons = obs$coords[[lon_dim]], target_grid = target_grid, int_method = int_method, bc_method = bc_method, points = points, - source_file_exp = exp$attrs$source_files[1], source_file_obs = obs$attrs$source_files[1], + source_file_exp = exp$coords$source_files[1], source_file_obs = obs$coords$source_files[1], method_point_interp = method_point_interp, lat_dim = lat_dim, lon_dim = lon_dim, sdate_dim = sdate_dim, member_dim = member_dim, region = region, ncores = ncores, ...) diff --git a/modules/Downscaling/tmp/Interpolation.R b/modules/Downscaling/tmp/Interpolation.R index ed79f4fd..5d5f70b8 100644 --- a/modules/Downscaling/tmp/Interpolation.R +++ b/modules/Downscaling/tmp/Interpolation.R @@ -69,7 +69,7 @@ CST_Interpolation <- function(exp, points = NULL, method_remap = NULL, target_gr } res <- Interpolation(exp = exp$data, lats = exp$coords[[lat_dim]], lons = exp$coords[[lon_dim]], - source_file = exp$attrs$source_files[1], points = points, + source_file = exp$coords$source_files[1], points = points, method_remap = method_remap, target_grid = target_grid, lat_dim = lat_dim, lon_dim = lon_dim, region = region, method_point_interp = method_point_interp, ncores = ncores) diff --git a/modules/Downscaling/tmp/Intlr.R b/modules/Downscaling/tmp/Intlr.R index 36a7f11b..f108877b 100644 --- a/modules/Downscaling/tmp/Intlr.R +++ b/modules/Downscaling/tmp/Intlr.R @@ -99,9 +99,9 @@ CST_Intlr <- function(exp, obs, lr_method, target_grid = NULL, points = NULL, in stop("Parameter 'obs' must be of the class 's2dv_cube'") } - res <- Intlr(exp = exp$data, obs = obs$data, exp_lats = exp$coords[[lat_dim]], exp_lons = exp$coords[[lon_dim]], + res <- Intlr(exp = exp$data, obs = obs$data, exp_lats = coords[[lat_dim]], exp_lons = exp$coords[[lon_dim]], obs_lats = obs$coords[[lat_dim]], obs_lons = obs$coords[[lon_dim]], points = points, - source_file_exp = exp$attrs$source_files[1], source_file_obs = obs$attrs$source_files[1], + source_file_exp = exp$coords$source_files[1], source_file_obs = obs$coords$source_files[1], target_grid = target_grid, lr_method = lr_method, int_method = int_method, method_point_interp = method_point_interp, predictors = predictors, lat_dim = lat_dim, lon_dim = lon_dim, sdate_dim = sdate_dim, time_dim = time_dim, diff --git a/modules/Downscaling/tmp/LogisticReg.R b/modules/Downscaling/tmp/LogisticReg.R index a85a1b3f..67fa1b28 100644 --- a/modules/Downscaling/tmp/LogisticReg.R +++ b/modules/Downscaling/tmp/LogisticReg.R @@ -86,6 +86,7 @@ #'res <- CST_LogisticReg(exp = exp, obs = obs, int_method = 'bil', target_grid = 'r1280x640', #'probs_cat = c(1/3, 2/3)) #'@export + CST_LogisticReg <- function(exp, obs, target_grid, int_method = NULL, log_reg_method = "ens_mean", probs_cat = c(1/3,2/3), return_most_likely_cat = FALSE, points = NULL, method_point_interp = NULL, lat_dim = "lat", lon_dim = "lon", sdate_dim = "sdate", @@ -106,7 +107,7 @@ CST_LogisticReg <- function(exp, obs, target_grid, int_method = NULL, log_reg_me int_method = int_method, log_reg_method = log_reg_method, points = points, method_point_interp = method_point_interp, lat_dim = lat_dim, lon_dim = lon_dim, sdate_dim = sdate_dim, member_dim = member_dim, - source_file_exp = exp$attrs$source_files[1], source_file_obs = obs$attrs$source_files[1], + source_file_exp = exp$coords$source_files[1], source_file_obs = obs$coords$source_files[1], region = region, loocv = loocv, ncores = ncores) # Modify data, lat and lon in the origina s2dv_cube, adding the downscaled data @@ -391,12 +392,14 @@ obs_cat <- Apply(obs_ref, target_dims = sdate_dim, function(x) { rep(NA,length(x)) } else { terc <- convert2prob(as.vector(x), prob = probs_cat) - apply(terc, 1, function(r) which (r == 1))}}, + as.integer(apply(terc, 1, function(r) which (r == 1)))}}, output_dims = sdate_dim, ncores = ncores)$output1 - res <- Apply(list(predictor, obs_cat), target_dims = list(target_dims_predictor, sdate_dim), fun = function(x, y) - .log_reg(x = x, y = y, loocv = loocv,probs_cat=probs_cat), output_dims = c(sdate_dim, "category"), ncores = ncores)$output1 + res <- Apply(list(predictor, obs_cat), target_dims = list(target_dims_predictor, sdate_dim), + fun = function(x, y) + .log_reg(x = x, y = y, loocv = loocv,probs_cat=probs_cat), + output_dims = c(sdate_dim, "category"), ncores = ncores)$output1 if (return_most_likely_cat) { res <- Apply(res, target_dims = c(sdate_dim, "category"), .most_likely_category, @@ -444,7 +447,7 @@ obs_cat <- Apply(obs_ref, target_dims = sdate_dim, function(x) { require(s2dv) # compute climatology - clim <- Apply(obj_ens, target_dims = c(member_dim, sdate_dim), mean, ncores = ncores)$output1 + clim <- Apply(obj_ens, target_dims = c(member_dim, sdate_dim), mean, ncores = ncores, na.rm = TRUE)$output1 # compute ensemble mean ens_mean <- Apply(obj_ens, target_dims = member_dim, mean, na.rm = TRUE, ncores = ncores)$output1 @@ -472,7 +475,7 @@ obs_cat <- Apply(obs_ref, target_dims = sdate_dim, function(x) { lm1 <- .train_lr(df = tmp_df, loocv = loocv) # prediction - res <- pred_lr(lm1 = lm1, df = tmp_df, loocv = loocv,probs_cat=probs_cat) + res <- pred_lr(lm1 = lm1, df = tmp_df, loocv = loocv, probs_cat=probs_cat) } return(res) } @@ -489,11 +492,11 @@ obs_cat <- Apply(obs_ref, target_dims = sdate_dim, function(x) { if (loocv) { - lm1 <- lapply(1:nrow(df), function(j) multinom(y ~ ., data = df[ -j, ])) + lm1 <- lapply(1:nrow(df), function(j) multinom(y ~ ., data = df[ -j, ], trace = FALSE)) } else { - lm1 <- list(multinom(y ~ ., data = df)) + lm1 <- list(multinom(y ~ ., data = df, trace = FALSE)) } @@ -503,7 +506,7 @@ obs_cat <- Apply(obs_ref, target_dims = sdate_dim, function(x) { #----------------------------------- # Function to apply the logistic regressions. #----------------------------------- -pred_lr <- function(df, lm1, loocv,probs_cat) { +pred_lr <- function(df, lm1, loocv, probs_cat) { require(plyr) @@ -514,35 +517,37 @@ pred_lr <- function(df, lm1, loocv,probs_cat) { pred_vals_ls <-list() for (j in 1:nrow(df)) { - pred_vals_ls[[j]] <- predict(lm1[[j]], df[j,], type = "probs") - } + if (all(is.na(df[j,]))) { + pred_vals_ls[[j]] <- rep(NA, length(probs_cat) + 1) + } else { + pred_vals_ls[[j]] <- predict(lm1[[j]], df[j,], type = "probs") + } + } - pred_vals <- laply(pred_vals_ls, .fun = as.array) + pred_vals <- laply(pred_vals_ls, .fun = as.array) - if( length(probs_cat)+1==2) - { + if( length(probs_cat)+1==2) { pred_vals_dum<-array(NA,dim=c(nrow(df),2)) pred_vals_dum[,2]<-pred_vals pred_vals_dum[,1]<-1-pred_vals pred_vals<-pred_vals_dum colnames(pred_vals)<-c(1,2) - } + } - } else { + } else { # type = class, probs #pred_vals_ls <- lapply(lm1, predict, data = df, type = "probs") #pred_vals <- unlist(pred_vals_ls) pred_vals <- predict(lm1[[1]], df, type = "probs") - if( length(probs_cat)+1==2) - { - pred_vals_dum<-array(NA,dim=c(nrow(df),2)) - pred_vals_dum[,2]<-pred_vals - pred_vals_dum[,1]<-1-pred_vals - pred_vals<-pred_vals_dum - colnames(pred_vals)<-c(1,2) - } + if( length(probs_cat)+1==2) { + pred_vals_dum<-array(NA,dim=c(nrow(df),2)) + pred_vals_dum[,2]<-pred_vals + pred_vals_dum[,1]<-1-pred_vals + pred_vals<-pred_vals_dum + colnames(pred_vals)<-c(1,2) + } } -- GitLab From 456c761a7074434bda83de26dc44adad5395395e Mon Sep 17 00:00:00 2001 From: vagudets Date: Wed, 6 Mar 2024 10:37:13 +0100 Subject: [PATCH 386/388] move scripts --- example_scripts/test_GRIB.R | 52 ++++++++++++++ example_scripts/test_parallel_GRIB.R | 27 ++++++++ tools/verifications.R | 100 +++++++++++++++++++++++++++ 3 files changed, 179 insertions(+) create mode 100644 example_scripts/test_GRIB.R create mode 100644 example_scripts/test_parallel_GRIB.R create mode 100644 tools/verifications.R diff --git a/example_scripts/test_GRIB.R b/example_scripts/test_GRIB.R new file mode 100644 index 00000000..27cf3c9a --- /dev/null +++ b/example_scripts/test_GRIB.R @@ -0,0 +1,52 @@ +source('modules/Loading/GRIB/GrbLoad.R') +source('modules/Loading//Loading_GRIB.R') +source("tools/libs.R") # for prepare_outputs.R + +recipe <- "modules/Loading/testing_recipes/recipe_GRIB_system5_era5.yml" +recipe <- prepare_outputs(recipe) + +# Load datasets +data <- load_datasets(recipe) + +str(data) + +#============================ +# Test the remaining modules +#============================ +source("modules/Calibration/Calibration.R") +source("modules/Skill/Skill.R") +source("modules/Saving/Saving.R") +source("modules/Visualization/Visualization.R") + +# Calibrate data +suppressWarnings({invisible(capture.output( +calibrated_data <- calibrate_datasets(recipe, data) +))}) +#pryr::mem_used() +#975 MB + +# Compute skill metrics +suppressWarnings({invisible(capture.output( +skill_metrics <- compute_skill_metrics(recipe, calibrated_data) +))}) + +suppressWarnings({invisible(capture.output( +probs <- compute_probabilities(recipe, calibrated_data) +))}) + +# Saving +suppressWarnings({invisible(capture.output( +save_data(recipe = recipe, data = calibrated_data, + skill_metrics = skill_metrics, probabilities = probs, + archive = read_yaml("conf/archive_GRIB.yml")$archive) +))}) + +# Plotting +suppressWarnings({invisible(capture.output( +plot_data(recipe = recipe, data = calibrated_data, + skill_metrics = skill_metrics, probabilities = probs, + significance = T, + archive = read_yaml("conf/archive_GRIB.yml")$archive) +))}) +outdir <- get_dir(recipe) + diff --git a/example_scripts/test_parallel_GRIB.R b/example_scripts/test_parallel_GRIB.R new file mode 100644 index 00000000..a13f9e59 --- /dev/null +++ b/example_scripts/test_parallel_GRIB.R @@ -0,0 +1,27 @@ +source("modules/Loading/GRIB/GrbLoad.R") +source("modules/Loading/Loading_GRIB.R") +source('modules/Loading/GRIB/s2dv_cube.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") + +args = commandArgs(trailingOnly = TRUE) +recipe_file <- args[1] +recipe <- read_atomic_recipe(recipe_file) +# Load datasets +data <- load_datasets(recipe) +# Calibrate datasets +data <- calibrate_datasets(recipe, data) +# Compute anomalies +data <- compute_anomalies(recipe, data) +# Compute skill metrics +skill_metrics <- compute_skill_metrics(recipe, data) +# Compute percentiles and probability bins +probabilities <- compute_probabilities(recipe, data) +# Export all data to netCDF +save_data(recipe, data, skill_metrics, probabilities) +# Plot data +plot_data(recipe, data, skill_metrics, probabilities, + significance = T) diff --git a/tools/verifications.R b/tools/verifications.R new file mode 100644 index 00000000..df1026f4 --- /dev/null +++ b/tools/verifications.R @@ -0,0 +1,100 @@ +for (indep in verifications$independent) { + + ## TODO: re-write this condition + if (length(indep) == 1) { + info(logger, + paste(" #*****************************************#", + " # Starting Independent verification of Indicator ", + indep, + sep = "\n")) + ind_table <- read_yaml(paste0(recipe$Run$code_dir, + "conf/indicators_table.yml")) + variable <- ind_table[indep[[1]]][[1]]$ECVs + store.freq <- ind_table[indep[[1]]][[1]]$freq + ind.fun <- ind_table[indep[[1]]][[1]]$fun + } else { + info(logger, + paste(" #*****************************************#", + " # Starting Independent verification of ECV ", + paste(indep, collapse = ' '), + sep = "\n")) + variable <- indep$name + store.freq <- indep$freq + ind.fun <- NULL + } + + + # ========================================================= + # DATA LOADING -------------------------------------------- + # ========================================================= + + source(recipe$Analysis$Data_load$module) + + # ========================================================= + # WORKFLOW MODULES RUN ------------------------------------ + # ========================================================= + + # Translate $Workflow to call modules: + ## 1) Clean step of the workflow set as FALSE or NULL or None: + modules <- names(recipe$Analysis$Workflow) + for (mod in modules) { + if ((is.logical(recipe$Analysis$Workflow[[mod]][[1]]) && + recipe$Analysis$Workflow[[mod]][[1]] == FALSE) || + recipe$Analysis$Workflow[[mod]][[1]] == 'None' || + is.null(recipe$Analysis$Workflow[[mod]][[1]])) { + info(logger, + paste("The module", mod, "won't be executed.")) + recipe$Analysis$Workflow <- recipe$Analysis$Workflow[ + -which(names(recipe$Analysis$Workflow) == mod)] + } + } + + modules <- names(recipe$Analysis$Workflow) + ## 2) Create a common format for all modules + tmp_modules <- list() + for (mod in modules) { + if (length(recipe$Analysis$Workflow[[mod]]) > 1) { + names(recipe$Analysis$Workflow[[mod]]) <- + rep(mod, length(recipe$Analysis$Workflow[[mod]])) + tmp_modules <- append(tmp_modules, + recipe$Analysis$Workflow[[mod]]) + } else { + tmp_modules <- append(tmp_modules, + recipe$Analysis$Workflow[mod]) + } + + modules <- tmp_modules + ## 3) Call each module and pass arguments: + for (mod in 1:length(modules)) { + # In case multiple calls to a module e.g.: Skill_1 --> Skill + if (any(strsplit(names(modules)[mod], "")[[1]] == "_")) { + module_name <- substr(names(modules)[mod], start = 1, + stop = which(strsplit(names(modules)[mod], "")[[1]] == "_") - 1) + } else { + module_name <- names(modules)[mod] + } + info(logger, paste("Start running module", module_name)) + module_code <- file.path(conf$code_dir, "modules", + module_name, + paste0(module_name, ".R")) + # Define variables setup in the recipe + for (param in names(modules[[mod]])) { + if (length(modules[[mod]][[param]])) { + tmp <- paste(modules[[mod]][[param]], + collapse = ",") + } else { + tmp <- modules[[mod]][[param]] + } + info(logger, paste("Variable *", param, "* set as", tmp)) + assign(as.character(param), + modules[[mod]][[param]]) + } + source(module_code) + # TO DO: + # Check the arguments of each module can be an option here: + #... + info(logger, paste(module_name, "module run finished.")) + } + } +} + -- GitLab From efc7749ad7cd4304a767adbf6db4fc6754eaf1ff Mon Sep 17 00:00:00 2001 From: vagudets Date: Wed, 6 Mar 2024 10:39:33 +0100 Subject: [PATCH 387/388] Reorder scripts --- modules/test_GRIB.R | 52 ------------------ modules/test_parallel_GRIB.R | 27 ---------- modules/verifications.R | 100 ----------------------------------- 3 files changed, 179 deletions(-) delete mode 100644 modules/test_GRIB.R delete mode 100644 modules/test_parallel_GRIB.R delete mode 100644 modules/verifications.R diff --git a/modules/test_GRIB.R b/modules/test_GRIB.R deleted file mode 100644 index 27cf3c9a..00000000 --- a/modules/test_GRIB.R +++ /dev/null @@ -1,52 +0,0 @@ -source('modules/Loading/GRIB/GrbLoad.R') -source('modules/Loading//Loading_GRIB.R') -source("tools/libs.R") # for prepare_outputs.R - -recipe <- "modules/Loading/testing_recipes/recipe_GRIB_system5_era5.yml" -recipe <- prepare_outputs(recipe) - -# Load datasets -data <- load_datasets(recipe) - -str(data) - -#============================ -# Test the remaining modules -#============================ -source("modules/Calibration/Calibration.R") -source("modules/Skill/Skill.R") -source("modules/Saving/Saving.R") -source("modules/Visualization/Visualization.R") - -# Calibrate data -suppressWarnings({invisible(capture.output( -calibrated_data <- calibrate_datasets(recipe, data) -))}) -#pryr::mem_used() -#975 MB - -# Compute skill metrics -suppressWarnings({invisible(capture.output( -skill_metrics <- compute_skill_metrics(recipe, calibrated_data) -))}) - -suppressWarnings({invisible(capture.output( -probs <- compute_probabilities(recipe, calibrated_data) -))}) - -# Saving -suppressWarnings({invisible(capture.output( -save_data(recipe = recipe, data = calibrated_data, - skill_metrics = skill_metrics, probabilities = probs, - archive = read_yaml("conf/archive_GRIB.yml")$archive) -))}) - -# Plotting -suppressWarnings({invisible(capture.output( -plot_data(recipe = recipe, data = calibrated_data, - skill_metrics = skill_metrics, probabilities = probs, - significance = T, - archive = read_yaml("conf/archive_GRIB.yml")$archive) -))}) -outdir <- get_dir(recipe) - diff --git a/modules/test_parallel_GRIB.R b/modules/test_parallel_GRIB.R deleted file mode 100644 index a13f9e59..00000000 --- a/modules/test_parallel_GRIB.R +++ /dev/null @@ -1,27 +0,0 @@ -source("modules/Loading/GRIB/GrbLoad.R") -source("modules/Loading/Loading_GRIB.R") -source('modules/Loading/GRIB/s2dv_cube.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") - -args = commandArgs(trailingOnly = TRUE) -recipe_file <- args[1] -recipe <- read_atomic_recipe(recipe_file) -# Load datasets -data <- load_datasets(recipe) -# Calibrate datasets -data <- calibrate_datasets(recipe, data) -# Compute anomalies -data <- compute_anomalies(recipe, data) -# Compute skill metrics -skill_metrics <- compute_skill_metrics(recipe, data) -# Compute percentiles and probability bins -probabilities <- compute_probabilities(recipe, data) -# Export all data to netCDF -save_data(recipe, data, skill_metrics, probabilities) -# Plot data -plot_data(recipe, data, skill_metrics, probabilities, - significance = T) diff --git a/modules/verifications.R b/modules/verifications.R deleted file mode 100644 index df1026f4..00000000 --- a/modules/verifications.R +++ /dev/null @@ -1,100 +0,0 @@ -for (indep in verifications$independent) { - - ## TODO: re-write this condition - if (length(indep) == 1) { - info(logger, - paste(" #*****************************************#", - " # Starting Independent verification of Indicator ", - indep, - sep = "\n")) - ind_table <- read_yaml(paste0(recipe$Run$code_dir, - "conf/indicators_table.yml")) - variable <- ind_table[indep[[1]]][[1]]$ECVs - store.freq <- ind_table[indep[[1]]][[1]]$freq - ind.fun <- ind_table[indep[[1]]][[1]]$fun - } else { - info(logger, - paste(" #*****************************************#", - " # Starting Independent verification of ECV ", - paste(indep, collapse = ' '), - sep = "\n")) - variable <- indep$name - store.freq <- indep$freq - ind.fun <- NULL - } - - - # ========================================================= - # DATA LOADING -------------------------------------------- - # ========================================================= - - source(recipe$Analysis$Data_load$module) - - # ========================================================= - # WORKFLOW MODULES RUN ------------------------------------ - # ========================================================= - - # Translate $Workflow to call modules: - ## 1) Clean step of the workflow set as FALSE or NULL or None: - modules <- names(recipe$Analysis$Workflow) - for (mod in modules) { - if ((is.logical(recipe$Analysis$Workflow[[mod]][[1]]) && - recipe$Analysis$Workflow[[mod]][[1]] == FALSE) || - recipe$Analysis$Workflow[[mod]][[1]] == 'None' || - is.null(recipe$Analysis$Workflow[[mod]][[1]])) { - info(logger, - paste("The module", mod, "won't be executed.")) - recipe$Analysis$Workflow <- recipe$Analysis$Workflow[ - -which(names(recipe$Analysis$Workflow) == mod)] - } - } - - modules <- names(recipe$Analysis$Workflow) - ## 2) Create a common format for all modules - tmp_modules <- list() - for (mod in modules) { - if (length(recipe$Analysis$Workflow[[mod]]) > 1) { - names(recipe$Analysis$Workflow[[mod]]) <- - rep(mod, length(recipe$Analysis$Workflow[[mod]])) - tmp_modules <- append(tmp_modules, - recipe$Analysis$Workflow[[mod]]) - } else { - tmp_modules <- append(tmp_modules, - recipe$Analysis$Workflow[mod]) - } - - modules <- tmp_modules - ## 3) Call each module and pass arguments: - for (mod in 1:length(modules)) { - # In case multiple calls to a module e.g.: Skill_1 --> Skill - if (any(strsplit(names(modules)[mod], "")[[1]] == "_")) { - module_name <- substr(names(modules)[mod], start = 1, - stop = which(strsplit(names(modules)[mod], "")[[1]] == "_") - 1) - } else { - module_name <- names(modules)[mod] - } - info(logger, paste("Start running module", module_name)) - module_code <- file.path(conf$code_dir, "modules", - module_name, - paste0(module_name, ".R")) - # Define variables setup in the recipe - for (param in names(modules[[mod]])) { - if (length(modules[[mod]][[param]])) { - tmp <- paste(modules[[mod]][[param]], - collapse = ",") - } else { - tmp <- modules[[mod]][[param]] - } - info(logger, paste("Variable *", param, "* set as", tmp)) - assign(as.character(param), - modules[[mod]][[param]]) - } - source(module_code) - # TO DO: - # Check the arguments of each module can be an option here: - #... - info(logger, paste(module_name, "module run finished.")) - } - } -} - -- GitLab From 234cef17e555225f634204cf38de6b3ef231829e Mon Sep 17 00:00:00 2001 From: vagudets Date: Wed, 6 Mar 2024 10:57:49 +0100 Subject: [PATCH 388/388] Launcher can launch more than 99 atomic recipes --- launch_SUNSET.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/launch_SUNSET.sh b/launch_SUNSET.sh index 153d64b3..f859a8b2 100644 --- a/launch_SUNSET.sh +++ b/launch_SUNSET.sh @@ -129,7 +129,7 @@ if [ $run_method == "sbatch" ]; then verification_job_list=() echo "Submitting verification jobs..." # Loop over atomic recipes - for atomic_recipe in ${outdir}/logs/recipes/atomic_recipe_??.yml; do + for atomic_recipe in ${outdir}/logs/recipes/atomic_recipe_*.yml; do job_number=$(($job_number + 1)) job_name=$(basename $outdir)_$(printf %02d $job_number) outfile=${logdir}/run-${job_name}.out -- GitLab

    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 _FugaDOo^ybeSv6)M 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

    O9->@Fp~q?o#JzyBg5r{N!1$gP8p4?|Gth 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≷Vq!tOviL7j#gnYJUUH^dS!1Qrt>JDUYymn7+fW^}3aa~YY z7-pb4&DQ0(D-+hYB_AnP0CdR}bNRS$l==24si=YWK4@XYk zoJr8Uv%$nbTOEDO87g1Hq!6{cNEzGSm9B)j3C3fARe(z}Z{@Y--_uaZs>pngW^%Bq zA%{~Z`61)nq{+;X#pDs{dPv)cb8~?F;h(0A4$W95p!Gs47UW6d{_&IOih^y6x^G`A zK`Y6i$zd)2>(r7nN}6P0kvkcpa0on&ZD8dNv<)jP$xyI-rv@2?J_l)x%5;*(fZ

    IP*x%oc%R1uawBWpZm|C(8DSm=u4m1IW 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%0A{xoaz$ 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%0D*6_3NAy$R#PbN!|4xMqWk28Mxd=UJ9=cGRZT?sj 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 z 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