Mercurial > repos > siwaa > redelac_stics_s
diff redelacSticsSimulator.R @ 7:2586f7dbcde1 draft
"planemo upload for repository https://forgemia.inra.fr/redelac/redelac-toolbox/-/tree/af2d1fcb63a2ae897e02f11e82cc76c4f6e8ca5e/tools/REDELACSticsSimulator commit af2d1fcb63a2ae897e02f11e82cc76c4f6e8ca5e-dirty"
author | siwaa |
---|---|
date | Mon, 02 Oct 2023 13:51:01 +0000 |
parents | 41f652e6616f |
children | 65c00476f417 |
line wrap: on
line diff
--- a/redelacSticsSimulator.R Tue Sep 26 15:21:42 2023 +0000 +++ b/redelacSticsSimulator.R Mon Oct 02 13:51:01 2023 +0000 @@ -3,9 +3,21 @@ library(parallel) library(doParallel) library(readxl) +library(tidyr) +library(data.table) +library(readr) +library(dplyr) +library(stringr) +library(readr) sessionInfo() +args = commandArgs(trailingOnly = TRUE) + +parallel <- (args[1] == "parallel") +nbSlots <- as.integer(args[2]) +scenario <- args[3] + workspace <- paste0(getwd(), "/WS") javastics_path <- getwd() default_config_path <- paste0(javastics_path, "/config") @@ -14,15 +26,32 @@ # List of successive USMs successive_usms_file <- ("successionPlan.csv") -successive_usms_tab <- read.csv(file = file.path(workspace, successive_usms_file), sep =";") +successive_usms_tab <- + read.csv(file = file.path(workspace, successive_usms_file), + sep = ";") + +# from succesions to simulate retrieving upcSol Cases + +successRef <- successive_usms_tab["Treatment"] -args = commandArgs(trailingOnly = TRUE) +successRef <- successRef %>% + separate( + col = Treatment, + into = c("upc", "sol", "systeme", "rotation", "tete_rotation", "horizon"), + sep = "-", + remove = FALSE + ) -parallel <- (args[1] == "parallel") -nbSlots <- as.integer(args[2]) +successRef$upcSol <- paste0(successRef$upc, "-", successRef$sol) + +casesUpcSol <- unique(successRef$upcSol) + +systeme <- successRef$systeme[1] +rotation <- successRef$rotation[1] if (parallel) { cl <- makeCluster(nbSlots) + print("Inside R, info on the cluster:") print(cl) registerDoParallel(cl) `%dordopar%` <- `%dopar%` @@ -30,35 +59,242 @@ `%dordopar%` <- `%do%` } -result <- foreach(i=1:nrow(successive_usms_tab), - .packages = c("foreach", "SticsRFiles", "SticsOnR") ) %dordopar% { +successive_usms_tab_split <- list() + +for (j in 1:length(casesUpcSol)) { + splited <- strsplit(casesUpcSol[j], split = "-")[[1]] + + upc <- splited[1] + + sol <- splited[2] + + successive_usms_tab_split[[j]] <- + successive_usms_tab[successRef$upcSol == casesUpcSol[j],] +} + +result <- foreach(j = 1:length(casesUpcSol)) %:% + foreach( + i = 1:nrow(successive_usms_tab_split[[j]]), + .packages = c("foreach", "SticsRFiles", "SticsOnR") + ) %dordopar% { + if (parallel) + sink("./logPaRedelac.txt", append = TRUE) + + nusms <- as.numeric(successive_usms_tab_split[[j]][i, 2]) - nusms <- as.numeric(successive_usms_tab[i,2]) - - vec <- as.character(successive_usms_tab[i,c(3:(2+nusms))]) - - list_successive_usms <- list(vec) - - sim_options <- stics_wrapper_options(javastics = javastics_path, - stics_exe = paste0(javastics_path,"/bin/stics_modulo"), - workspace = txt_path, - verbose = TRUE, - successive = list_successive_usms) - list_usms <- vec + vec <- + as.character(successive_usms_tab_split[[j]][i, c(3:(2 + nusms))]) + + list_successive_usms <- list(vec) + + sim_options <- stics_wrapper_options( + javastics = javastics_path, + stics_exe = paste0(javastics_path, "/bin/stics_modulo"), + workspace = txt_path, + verbose = TRUE, + successive = list_successive_usms + ) - return(stics_wrapper(model_options = sim_options, situation = list_usms)) + list_usms <- vec + + cat(paste0("-->", successive_usms_tab_split[[j]][i, 1], "launched\n")) + + return(stics_wrapper(model_options = sim_options, situation = list_usms)) + } + +if (parallel) { + stopCluster(cl) + sink() + cat(read_file("./logPaRedelac.txt")) } -if (parallel) stopCluster(cl) +for (j in 1:length(casesUpcSol)) { + splited <- strsplit(casesUpcSol[j], split = "-")[[1]] + + upc <- splited[1] + + sol <- splited[2] + + for (i in 1:nrow(successive_usms_tab_split[[j]])) { + #i=1 + if (i == 1) { + simPCP <- result[[j]][[i]] + } else { + simPCP$sim_list <- c(simPCP$sim_list, result[[j]][[i]]$sim_list) + } + + } + + #agregation des sorties dans un dataframe + sim_df <- + rbindlist(simPCP$sim_list, use.names = TRUE, idcol = "usm") -for (i in 1:nrow(successive_usms_tab)) { #i=1 - if (i == 1) { - simPCP <- result[[i]] - } else { - simPCP$sim_list <- c(simPCP$sim_list, result[[i]]$sim_list) + #ajout des colonnes explicatives + de l'horizon temporel + sim_df <- sim_df %>% + separate( + col = usm, + into = c( + "upc", + "sol", + "systeme", + "rotation", + "tete_rotation", + "horizon", + "annee", + "culture" + ), + sep = "-", + remove = FALSE + ) + + #sauvegarde sous la forme d'un fichier rds + + if (dir.exists(paste0( + workspace, + "/analyse_simulations_STICS/", + systeme, + "/", + rotation + )) == FALSE) { + dir.create( + paste0( + workspace, + "/analyse_simulations_STICS/", + systeme, + "/", + rotation + ), + recursive = TRUE + ) } -} + saveRDS( + sim_df, + paste0( + workspace, + "/analyse_simulations_STICS/", + systeme, + "/", + rotation, + "/outputs-", + rotation, + "-", + upc, + "-", + sol, + "-", + scenario, + ".rds" + ) + ) + + successive_usms_tab_split[[j]]$Treatment <- NULL + successive_usms_tab_split[[j]]$Number_USM <- NULL + + list_usms <- + unlist(unname(as.list( + transpose(successive_usms_tab_split[[j]]) + ))) + list_usms <- list_usms[!is.na(list_usms)] + list_usms <- list_usms[list_usms != ''] + + list_usms_yr1 <- successive_usms_tab_split[[j]]$USM_1 + + for (i in 1:length(list_usms)) { + if (i == 1) { + #ajout d'une condition sur l'existence du fichier "mod_rapport.sti" pour la concatenation + #en attendant que toutes les simulations tournent correctement + #if(exists(file.path(txt_path, list_usms[i], "mod_rapport.sti"))==TRUE){ + rap_1 <- + read_delim(file.path(txt_path, list_usms[i], "mod_rapport.sti"), + col_names = TRUE) + names_col <- colnames(rap_1) + + rap_string <- + read_lines(file = file.path(txt_path, list_usms[i], "mod_rapport.sti"), + skip = 1) + + rap <- as_tibble(rap_string) %>% + separate(col = value, + sep = ";", + into = names_col) %>% + mutate(USM = list_usms[i]) + # } + + } else { + #if (list_usms[i] %in% list_usms_yr1) { + #ajout d'une condition sur l'existence du fichier "mod_rapport.sti" pour la concatenation + #en attendant que toutes les simulations tournent correctement + #if(exists(file.path(txt_path, list_usms[i], "mod_rapport.sti"))==TRUE){ + rap_string <- + read_lines(file = file.path(txt_path, list_usms[i], "mod_rapport.sti"), + skip = 1,)#} -save(simPCP, file = "results.RData") + # } else { + #ajout d'une condition sur l'existence du fichier "mod_rapport.sti" pour la concatenation + #en attendant que toutes les simulations tournent correctement + #if(exists(file.path(txt_path, list_usms[i], "mod_rapport.sti"))==TRUE){ + # rap_string <- + # read_file(file = file.path(txt_path, list_usms[i], "mod_rapport.sti"))#} + # } + rap_i <- as_tibble(rap_string) %>% + separate(col = value, + sep = ";", + into = names_col) %>% + mutate(USM = list_usms[i]) + + rap <- bind_rows(rap, rap_i) + + } + + } + rm(rap_1, names_col, rap_string, rap_i) + + rap <- rap %>% + select(USM, everything()) %>% + mutate(P_usm = str_replace_all(P_usm, " ", "")) %>% + mutate(wlieu = str_replace_all(wlieu, " ", "")) %>% + mutate(stade = str_replace_all(stade, " ", "")) %>% + mutate(nomversion = str_replace_all(nomversion, " ", "")) %>% + mutate(across(3:9, as.numeric)) %>% + mutate(across(13:ncol(rap), as.numeric)) %>% + #separate(col=P_usm,into=c("upc","sol","systeme","rotation","tete_rotation","horizon","annee","culture"),sep="-",remove = FALSE) + separate( + col = USM, + into = c( + "upc", + "sol", + "systeme", + "rotation", + "tete_rotation", + "horizon", + "annee", + "culture" + ), + sep = "-", + remove = FALSE + ) + + write_delim( + x = rap, + file = paste0( + workspace, + "/analyse_simulations_STICS/", + systeme, + "/", + rotation, + "/report-", + rotation, + "-", + upc, + "-", + sol, + "-", + scenario, + ".csv" + ), + delim = ";" + ) + +} \ No newline at end of file