From a68525cc82d99f6d3508a254c09694ca2fa50bb5 Mon Sep 17 00:00:00 2001 From: Patrice Lecharpentier Date: Wed, 7 Oct 2026 14:45:59 +0200 Subject: [PATCH 1/3] fix: plant lists initialisation, and plant2 variables assignement, optional snow parameters detection for initialisation or assignement --- R/get_param_txt.R | 98 ++++++++++++++++++++++++++++++++--------------- 1 file changed, 68 insertions(+), 30 deletions(-) diff --git a/R/get_param_txt.R b/R/get_param_txt.R index f18e7fc5..0cacd9b0 100644 --- a/R/get_param_txt.R +++ b/R/get_param_txt.R @@ -403,16 +403,29 @@ get_ini_txt <- function( densinitial = params[[12]] ) - ini$plant$plant2 <- list( - stade0 = params[[14]], - lai0 = params[[15]], - masec0 = params[[16]], - QNplante0 = params[[17]], - magrain0 = params[[18]], - zrac0 = params[[19]], - resperenne0 = params[[20]], - densinitial = params[[22]] - ) + if (ini$nbplantes > 1) { + ini$plant$plant2 <- list( + stade0 = params[[14]], + lai0 = params[[15]], + masec0 = params[[16]], + QNplante0 = params[[17]], + magrain0 = params[[18]], + zrac0 = params[[19]], + resperenne0 = params[[20]], + densinitial = params[[22]] + ) + } else { + ini$plant$plant2 <- list( + stade0 = "", + lai0 = "0", + masec0 = "0", + QNplante0 = "0", + magrain0 = "0", + zrac0 = "0", + resperenne0 = "0", + densinitial = "0" + ) + } ini$hinit <- params[[24]] ini$NO3init <- params[[26]] @@ -442,34 +455,59 @@ get_ini_txt <- function( densinitial = params[[18]] ) - ini$plant$plant2 <- list( - stade0 = params[[20]], - lai0 = params[[21]], - magrain0 = params[[22]], - zrac0 = params[[23]], - code_acti_reserve = params[[25]], - maperenne0 = params[[26]], - QNperenne0 = params[[27]], - masecnp0 = params[[28]], - QNplantenp0 = params[[29]], - masec0 = params[[30]], - QNplante0 = params[[31]], - restemp0 = params[[32]], - densinitial = params[[34]] - ) + if (ini$nbplantes > 1) { + ini$plant$plant2 <- list( + stade0 = params[[20]], + lai0 = params[[21]], + magrain0 = params[[22]], + zrac0 = params[[23]], + code_acti_reserve = params[[25]], + maperenne0 = params[[26]], + QNperenne0 = params[[27]], + masecnp0 = params[[28]], + QNplantenp0 = params[[29]], + masec0 = params[[30]], + QNplante0 = params[[31]], + restemp0 = params[[32]], + densinitial = params[[34]] + ) + } else { + ini$plant$plant2 <- list( + stade0 = "", + lai0 = "0", + magrain0 = "0", + zrac0 = "0", + code_acti_reserve = "0", + maperenne0 = "0", + QNperenne0 = "0", + masecnp0 = "0", + QNplantenp0 = "0", + masec0 = "0", + QNplante0 = "0", + restemp0 = "0", + densinitial = "0" + ) + } ini$Hinitf <- params[[36]] ini$NO3initf <- params[[38]] ini$NH4initf <- params[[40]] - ini$Sdepth0 <- params[[43]] - ini$Sdry0 <- params[[45]] - ini$Swet0 <- params[[47]] - ini$ps0 <- params[[49]] + if (any(grepl(":snow:", params, fixed = TRUE))) { + ini$Sdepth0 <- params[[43]] + ini$Sdry0 <- params[[45]] + ini$Swet0 <- params[[47]] + ini$ps0 <- params[[49]] + } else { + ini$Sdepth0 <- "0" + ini$Sdry0 <- "0" + ini$Swet0 <- "0" + ini$ps0 <- "0" + } } ini <- character_to_numeric_list(ini) - return(ini) + ini } #' @rdname get_param_txt From ef628bf410cb8ee089d44e62b790a13e9809522b Mon Sep 17 00:00:00 2001 From: Patrice Lecharpentier Date: Wed, 7 Oct 2026 16:13:31 +0200 Subject: [PATCH 2/3] fixes: management of plant_id value according to files types, set ini parameters values using values ids, added tests for get/set ini parameters --- R/set_param_txt.R | 19 ++++++---- man/set_param_txt.Rd | 4 +-- tests/testthat/test-set_get_param_txt.R | 46 +++++++++++++++++++++++++ 3 files changed, 60 insertions(+), 9 deletions(-) diff --git a/R/set_param_txt.R b/R/set_param_txt.R index 08e34e36..0931120d 100644 --- a/R/set_param_txt.R +++ b/R/set_param_txt.R @@ -63,7 +63,7 @@ set_param_txt <- function( param, value, append = FALSE, - plant_id = 1, + plant_id = NULL, variety = NULL, value_id = NULL, stics_version = "latest" @@ -107,7 +107,9 @@ set_param_txt <- function( "\nPlease use the set_* functions directly to set the parameter value." ) } - switch(file_type, + + switch( + file_type, ini = { set_ini_txt( file = file.path(workspace, "ficini.txt"), @@ -160,6 +162,7 @@ set_param_txt <- function( ) }, tec = { + if (is.null(plant_id)) plant_id <- 1 lapply(plant_id, function(x) { set_tec_txt( file = file.path(workspace, paste0("fictec", x, ".txt")), @@ -171,6 +174,7 @@ set_param_txt <- function( }) }, plant = { + if (is.null(plant_id)) plant_id <- 1 lapply(plant_id, function(x) { if (is.null(variety)) { variety <- @@ -251,7 +255,7 @@ set_ini_txt <- function( param, value, append = FALSE, - plant_id = 1, + plant_id = NULL, value_id = NULL, stics_version = "latest" ) { @@ -494,8 +498,8 @@ set_soil_txt <- function( #' @param file Path to the parameter file #' @param param Parameter name #' @param value New parameter value -#' @param append Boolean. Append input to existing file -#' @param plant_id The plant identifier (main crop: 1 ; associated crop: 2). +#' @param append Boolean. Append input to existing file +#' @param plant_id The plant identifier (main crop: 1 ; associated crop: 2). #' @param variety The plant variety to set the parameter value, #' either the variety #' name (`codevar` in the plant file) or the index @@ -536,7 +540,8 @@ set_file_txt <- function( type <- strsplit(deparse(sys.call(-1)), split = "\\(")[[1]][1] params <- readLines(file) param_ <- paste0("^:{0,1}", param, "$") - switch(type, + switch( + type, set_usm_txt = { ref <- get_usm_txt(file) if (grep(param_, names(ref)) < grep("fplt", names(ref))) { @@ -581,7 +586,7 @@ set_file_txt <- function( value_id = value_id, value = value ) - ref[[param]][[value_id]] <- value + ref[[param]][value_id] <- value } } else { plt_tag <- paste0("plant", plant_id) diff --git a/man/set_param_txt.Rd b/man/set_param_txt.Rd index b98198d4..377dda7a 100644 --- a/man/set_param_txt.Rd +++ b/man/set_param_txt.Rd @@ -17,7 +17,7 @@ set_param_txt( param, value, append = FALSE, - plant_id = 1, + plant_id = NULL, variety = NULL, value_id = NULL, stics_version = "latest" @@ -32,7 +32,7 @@ set_ini_txt( param, value, append = FALSE, - plant_id = 1, + plant_id = NULL, value_id = NULL, stics_version = "latest" ) diff --git a/tests/testthat/test-set_get_param_txt.R b/tests/testthat/test-set_get_param_txt.R index a26837c5..6b4952d0 100644 --- a/tests/testthat/test-set_get_param_txt.R +++ b/tests/testthat/test-set_get_param_txt.R @@ -363,3 +363,49 @@ test_that("get for NO3init, for a wrong version", { ) ) }) + +path <- get_examples_path("txt", stics_version = "V9.2") +# Getting values for an unknown parameter +test_that("get for Hinitf, for a wrong version", { + expect_equal( + get_param_txt(workspace = path, param = "Hinitf", stics_version = "v9.2"), + list() + ) +}) + +test_that("set/get for hinit", { + # Setting parameters + # all values + set_param_txt( + workspace = path, + param = "hinit", + value = 1:5, + stics_version = "v9.2" + ) + expect_equal( + get_param_txt( + workspace = path, + param = "hinit", + stics_version = "v9.2" + )$ini$hinit, + 1:5 + ) + + # for a subset + set_param_txt( + workspace = path, + param = "hinit", + value = c(10, 15), + value_id = c(1, 5), + stics_version = "v9.2" + ) + expect_equal( + get_param_txt( + workspace = path, + param = "hinit", + value_id = c(1, 5), + stics_version = "v9.2" + )$ini$hinit, + c(10, 15) + ) +}) From aac52d93239f2ac99debde08c5d49be4afe20f7e Mon Sep 17 00:00:00 2001 From: plecharpent Date: Wed, 7 Oct 2026 14:25:20 +0000 Subject: [PATCH 3/3] Style code (GHA) --- R/set_param_txt.R | 6 ++---- README.Rmd | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/R/set_param_txt.R b/R/set_param_txt.R index 0931120d..2c3cb8c1 100644 --- a/R/set_param_txt.R +++ b/R/set_param_txt.R @@ -108,8 +108,7 @@ set_param_txt <- function( ) } - switch( - file_type, + switch(file_type, ini = { set_ini_txt( file = file.path(workspace, "ficini.txt"), @@ -540,8 +539,7 @@ set_file_txt <- function( type <- strsplit(deparse(sys.call(-1)), split = "\\(")[[1]][1] params <- readLines(file) param_ <- paste0("^:{0,1}", param, "$") - switch( - type, + switch(type, set_usm_txt = { ref <- get_usm_txt(file) if (grep(param_, names(ref)) < grep("fplt", names(ref))) { diff --git a/README.Rmd b/README.Rmd index 79402604..7b1329c1 100644 --- a/README.Rmd +++ b/README.Rmd @@ -67,7 +67,7 @@ The package will install the packages for you at the latest release version. ```{r eval=FALSE, results='asis'} install.packages("SticsRFiles") -or +or pak::pkg_install("SticsRFiles") ```