diff redelacSticsInputGenerator.R @ 9:2a6d7d053ba7 draft

"planemo upload for repository https://forgemia.inra.fr/redelac commit adcac73e150f1f821b4b7f7673a490dc0fadc936"
author siwaa
date Mon, 25 Sep 2023 16:25:51 +0000
parents fb6f7d60508d
children f707c2fb725b
line wrap: on
line diff
--- a/redelacSticsInputGenerator.R	Wed Aug 30 08:23:12 2023 +0000
+++ b/redelacSticsInputGenerator.R	Mon Sep 25 16:25:51 2023 +0000
@@ -1,7 +1,10 @@
 library(SticsRFiles)
 library(dplyr)
 library(lubridate)
+library(parallel)
+library(doParallel)
 
+sessionInfo()
 
 startTime <- Sys.time()
 
@@ -19,6 +22,8 @@
 args = commandArgs(trailingOnly = TRUE)
 
 genUSMsXmlOneAfterOther <- (args[1] == "usmx_one_after_other")
+parallel <- (args[2] == "parallel")
+nbSlots <- as.integer(args[3])
 
 # USMs file loading
 
@@ -68,97 +73,120 @@
 gen_sta_xml(param_df = sta_param, out_dir = workspace)
 
 if (genUSMsXmlOneAfterOther) {
+
   durGenX <- lubridate::as.duration(0)
   durGenT <- lubridate::as.duration(0)
-  
+
+  if (parallel) {
+    cl <- makeCluster(nbSlots)
+    print(cl)
+    registerDoParallel(cl)
+    `%dordopar%` <- `%dopar%`
+  } else {
+    `%dordopar%` <- `%do%`
+  }
+
   # looping on USMs
-  for (i in 1:nrow(usms_param)) {
-    row <- usms_param[i, ]
-    
+  loopRes <- foreach::foreach(i = 1:nrow(usms_param),
+    .packages = c("SticsRFiles", "lubridate")) %dordopar% {
+
     beforeGenXmlTimeI <- Sys.time()
-    
-    gen_usms_xml(file = file.path(workspace, "usms.xml"),
-                 param_df = row)
-    
+
+    usmxFileName = paste0("usms", as.character(i) , ".xml")
+
+    usmxFilePath  = file.path(workspace, usmxFileName)
+
+    gen_usms_xml(file = usmxFilePath,
+                 param_df = usms_param[i, ])
+
     afterGenXmlTimeI <- Sys.time()
     durGenXI <-
       lubridate::as.duration(lubridate::interval(beforeGenXmlTimeI,
                                                  afterGenXmlTimeI))
-    
+
     # one after the other generating txt folder
-    
+
     beforeGenTxtTimeI <- Sys.time()
-    
+
     gen_usms_xml2txt(
+      usms_file = usmxFileName,
       javastics = javastics_path,
       workspace = workspace,
       out_dir = txt_path,
       verbose = TRUE
     )
-    
+
     afterGenTxtTimeI <- Sys.time()
     durGenTI <-
       lubridate::as.duration(lubridate::interval(beforeGenTxtTimeI,
                                                  afterGenTxtTimeI))
-    
-    durGenX <- durGenX + durGenXI
-    durGenT <- durGenT + durGenTI
+
+    return(c(durGenXI, durGenTI))
   }
+
+  if (parallel) stopCluster(cl)
+
+  durDS <- as.data.frame(do.call(rbind, loopRes))
+  durGenX <- sum(durDS[1])
+  durGenT <- sum(durDS[2])
+
 } else {
+
   beforeGenXmlTime <- Sys.time()
-  
+
   gen_usms_xml(file = file.path(workspace, "usms.xml"),
                param_df = usms_param)
-  
+
   afterGenXmlTime <- Sys.time()
   durGenX <-
     lubridate::as.duration(lubridate::interval(beforeGenXmlTime,
                                                afterGenXmlTime))
-  
+
   beforeGenTxtTime <- Sys.time()
-  
+
   gen_usms_xml2txt(
     javastics = javastics_path,
     workspace = workspace,
     out_dir = txt_path,
     verbose = TRUE
   )
-  
+
   afterGenTxtTime <- Sys.time()
   durGenT <-
     lubridate::as.duration(lubridate::interval(beforeGenTxtTime,
                                                afterGenTxtTime))
-  
+
 }
 
 endTime <- Sys.time()
+
 dur <-
   lubridate::as.period(lubridate::as.duration(lubridate::interval(startTime, endTime)))
 durGenXP <- lubridate::as.period(durGenX)
 durGenTP <- lubridate::as.period(durGenT)
 
-print("REDELAC Report")
-print("==============")
+print("REDELACSticsInputGenerator Report")
+print("=================================")
 print(paste0("number of usms: ", nrow(usms_param)))
 print(paste("usms.xml one after the other:", genUSMsXmlOneAfterOther))
+
 sprintf(
   'overall duration: %g jour(s) %g heure(s) %g minute(s) %g seconde(s)',
   lubridate::day(dur),
   lubridate::hour(dur),
   lubridate::minute(dur),
-  lubridate::second(dur)
-)
+  lubridate::second(dur))
+
 sprintf(
   'inside gen_usms_xml duration: %g jour(s) %g heure(s) %g minute(s) %g seconde(s)',
   lubridate::day(durGenXP),
   lubridate::hour(durGenXP),
   lubridate::minute(durGenXP),
-  lubridate::second(durGenXP)
-)
+  lubridate::second(durGenXP))
+
 sprintf(
   'inside gen_usms_xml2txt duration: %g jour(s) %g heure(s) %g minute(s) %g seconde(s)',
   lubridate::day(durGenTP),
   lubridate::hour(durGenTP),
   lubridate::minute(durGenTP),
-  lubridate::second(durGenTP)
-)
+  lubridate::second(durGenTP))