R/jjm.config-class.R

Defines functions runJJM.jjm.config runJJM.jjm.output runJJM.default print.summary.jjm.config summary.jjm.config print.jjm.config .getJjmConfig

.getJjmConfig = function(data, control, ...) {
  
  out = list()
  out[[1]] = list()
  Mname = control$modelName
  
  out[[1]]$Dat = data
  out[[1]]$Ctl = control
  names(out) = Mname
  
  # Define jjm.output class
  class(out) = c("jjm.config")
  
  return(out)
  
}

#' @export
print.jjm.config = function(x, ...) {
  
  return(invisible())
}

#' @export
summary.jjm.config = function(object,...) {
  
  output = NULL
  
  class(output) = "summary.jjm.config"
  
  return(output)  
}

#' @export
print.summary.jjm.config = function(x, ...) {
  
  return(invisible())
}


# runJJM ------------------------------------------------------------------

#' @export
runJJM.default = function(models, path=NULL, output="results", input=NULL, 
                          exec=NULL, version=NULL, useGuess=FALSE, guess=NULL, piner=NULL,
                          iprint=100, wait = TRUE, parallel=FALSE, 
                          temp=NULL, ...) {
  
  oldwd = getwd()
  on.exit(setwd(oldwd))
  
  if(!file.exists(output)) dir.create(output, recursive = TRUE)
  output = normalizePath(output, mustWork = TRUE)
  
  guess  = .checkGuess(models, guess, output) 
  
  if(!is.null(path)) models = file.path(path, models)
  
  exec   = .checkExecutable(exec=exec, version=version)
  models = .checkModels(models)
  
  # Run models
  base  = getwd()
  start = proc.time() 
  
  if(is.null(temp)) temp = tempdir()
  
  if(!isTRUE(parallel)) {
    
    cat("\nRunning models", paste(models, collapse=", "), "\n")
    cat("\tStarting at", as.character(Sys.time()), "\n")
    
    res = NULL
    for(i in seq_along(models)) {
      setwd(base)
      rtime = .runJJM(model=models[i], output=output, input=input, exec=exec, 
                      useGuess=useGuess, guess=guess[i], iprint=iprint, piner=piner,
                      wait=wait, temp=temp, ...)
      res = c(res, rtime)  
    }
    
  } else {
    
    cat("\nRunning models", paste(models, collapse=", "), "in parallel.\n")
    cat("\tStarting at", as.character(Sys.time()), "\n")
    tempDir = tempdir()
    res = foreach(i=seq_along(models), .combine=c, .packages='jjmR') %dopar% {
      setwd(base)
      .runJJM(model=models[i], output=output, input=input, exec=exec, useGuess=useGuess, 
              guess=guess[i], iprint=iprint, piner=piner, wait=wait, temp=temp, ...)  
    }  
    
  }
  
  setwd(base)
  cat("\tEnded at", as.character(Sys.time()), "\n")
  
  elapsed = proc.time() - start
  names(res) = models
  cat("\nModel runs finished.\nTotal models run time:\n")
  print(res)
  cat("\nEffective running time:", round(elapsed[3], 1), "s.\n")
  
  cat("\n Models were run at", temp, "folder.")
  cat("\n\n")
  
  return(invisible(temp))
}

#' @export
runJJM.jjm.output = function(models, path=NULL, output="results", input=NULL, 
                             exec=NULL, version=NULL, useGuess=FALSE, guess=NULL, piner=NULL,
                             iprint=100, wait = TRUE, parallel=FALSE, 
                             temp=NULL, ...) {
  
  modNames = tolower(names(models))
  if(is.null(temp)) temp = tempdir()
  
  writeJJM(models, path=temp)
  
  # for(i in seq_along(models)){
  #   .writeJJM(object = models[[i]]$Dat, outFile = models[[i]]$Ctl$dataFile, path = temp) 
  #   .writeJJM(object = models[[i]]$Ctl, outFile = paste0(modNames[i], ".ctl"), path = temp) 
  # }
  
  runJJM.default(models = modNames, path=temp, output=output, input=temp, 
                 exec=exec, version=version, useGuess=useGuess, guess=guess, 
                 iprint=iprint, piner=piner, wait = wait, parallel=parallel, 
                 temp=temp, ...)
  
  return(invisible())
}

#' @export
runJJM.jjm.config = function(models, path=NULL, output="results", input=NULL, 
							exec=NULL, version=NULL, useGuess=FALSE, guess=NULL, piner=NULL,
							iprint=100, wait = TRUE, parallel=FALSE, 
							temp=NULL, ...) {
  
  modNames = tolower(names(models))
  if(is.null(temp)) temp = tempdir()
  
  for(i in seq_along(models)){
	.writeJJM(object = models[[i]]$Dat, outFile = models[[i]]$Ctl$dataFile, path = temp) 
	.writeJJM(object = models[[i]]$Ctl, outFile = paste0(modNames[i], ".ctl"), path = temp, transpose=FALSE) 
  }
  
  runJJM.default(models = modNames, path=temp, output=output, input=temp, 
                 exec=exec, version=version, useGuess=useGuess, guess=guess, 
                 iprint=iprint, piner=piner, wait = wait, parallel=parallel, 
                 temp=temp, ...)
  
  return(invisible())
}
SPRFMO/jjmr documentation built on March 27, 2024, 6:16 a.m.