diff --git a/CHANGELOG.md b/CHANGELOG.md index 76dee2104..ff37fc07e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,7 +13,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - ### added -- +- **scripts** Introduce new optional argument to compare scenario scripts ``validationConfig`` to enable plotting validation thresholds from piamValidation directly + into line plots of cs documents. + [[#2493](https://github.com/remindmodel/remind/pull/2493)] ### removed - **scripts** Drop the `gdxrrw`/`gdx` R dependency from REMIND scripts; GDX writes now use `gamstransfer`-based `quitte::write.gdx` diff --git a/scripts/cs2/profiles.json b/scripts/cs2/profiles.json index 5969d5b09..77a7c975e 100644 --- a/scripts/cs2/profiles.json +++ b/scripts/cs2/profiles.json @@ -2,6 +2,7 @@ "_TITLE_": "Profiles for compareScenarios2", "_NOTE_": "Entries on the top level with a name starting with _ are ignored.", "_DESCRIPTION_": "The top level entries identify the profiles for compareScenarios2 (cs2) when called via 'Rscript output.R'. The sub-entries define the arguments passed to piamPlotComparison::compareScenarios(). See the R help page of this function for the meaning of the arguments. The values of the sub-entries are strings, i.e., they start and end with a double quote. These strings will be evaluated as R-code. Use single quotes inside these expressions when quotes are needed. The expressions may contain a variable named '.'. It refers to the value of the variable before applying the profile, e.g., setting outputFile to paste0(., '-suffix') will add a suffix to the file name. For more details, see 'scripts/cs2/run_compareScenarios2.R' and 'output/comparison/compareScenarios2.R'.", + "_VALIDATION_": "A profile may set validationConfig (name of or path to a piamValidation config, e.g. \"'default'\") to show validation thresholds as colored background bands in line plots. Alternatively, pass --validationConfig= on the command line.", "default": { "projectLibrary": "'remind2'" }, diff --git a/scripts/cs2/run_compareScenarios2.R b/scripts/cs2/run_compareScenarios2.R index da53d777f..d4f5d7456 100644 --- a/scripts/cs2/run_compareScenarios2.R +++ b/scripts/cs2/run_compareScenarios2.R @@ -8,17 +8,19 @@ library(piamPlotComparison) if (!exists("source_include")) { - lucode2::readArgs("outputdirs", "outFileName", "profileName", "aliases", "sections") + lucode2::readArgs("outputdirs", "outFileName", "profileName", "aliases", "sections", "validationConfig") } if (!exists("aliases")) { aliases <- NULL } if (!exists("sections")) { sections <- "all" } +if (!exists("validationConfig")) { validationConfig <- NULL } run_compareScenarios2 <- function( outputdirs, outFileName, profileName, aliases, - sections + sections, + validationConfig ) { stopifnot(length(profileName) == 1 && is.character(profileName) && !is.na(profileName)) @@ -60,6 +62,9 @@ run_compareScenarios2 <- function( sections = sections ) + # show piamValidation thresholds in line plots, can be overwritten by profiles + args$validationConfig <- validationConfig + # Load cs2 profile and change args. message("Applying profile ", profileName) profile <- profiles[[profileName]] @@ -99,4 +104,4 @@ run_compareScenarios2 <- function( message("Done!\n") } -run_compareScenarios2(outputdirs, outFileName, profileName, aliases, sections) +run_compareScenarios2(outputdirs, outFileName, profileName, aliases, sections, validationConfig) diff --git a/scripts/output/comparison/compareScenarios2.R b/scripts/output/comparison/compareScenarios2.R index 9202a3fa8..f16647aa6 100644 --- a/scripts/output/comparison/compareScenarios2.R +++ b/scripts/output/comparison/compareScenarios2.R @@ -11,6 +11,9 @@ #' @param sections List of section numbers to be included in the PDF #' separated by commas. Default: "all". #' Examples: --sections=2 --sections=2,3 +#' @param validationConfig Name of or path to a piamValidation config. If +#' given, validation thresholds are shown as colored background bands in +#' line plots. Example: --validationConfig=default @@ -48,7 +51,8 @@ startComp <- function( nameCore, profileName, aliases, - sections + sections, + validationConfig ) { if (!exists("slurmConfig")) { slurmConfig <- "--qos=standby" @@ -77,6 +81,7 @@ startComp <- function( " --outFileName=", shQuote(outFileName), " --aliases=", shQuote(paste(aliases, collapse = ",")), " --sections=", shQuote(paste(sections, collapse = ",")), + if (!is.null(validationConfig)) paste0(" --validationConfig=", shQuote(validationConfig)), "\"") cat(clcom, "\n") system(clcom) @@ -97,11 +102,14 @@ startComp <- function( # Load cs2 profiles. profiles <- piamPlotComparison::getCs2Profiles() -lucode2::readArgs("profileNames", "sections") +lucode2::readArgs("profileNames", "sections", "validationConfig") if (! exists("sections")) { sections = "all" } +if (! exists("validationConfig")) { + validationConfig <- NULL +} # Let user choose cs2 profile(s). profileNamesDefault <- determineDefaultProfiles(outputdirs[1]) @@ -137,5 +145,6 @@ for (profileName in profileNames) { nameCore = nameCore, profileName = profileName, aliases = aliases, - sections = sections) + sections = sections, + validationConfig = validationConfig) }