From d81df21307060bd496c9562c6cf9bb4a76a77a51 Mon Sep 17 00:00:00 2001
From: Moritz Shore <moritzshore@gmail.com>
Date: Fri, 3 Feb 2023 15:59:33 -0500
Subject: [PATCH] documentation changes

---
 R/run_soft_cal.R | 88 ++++++++++++++++++++++--------------------------
 1 file changed, 41 insertions(+), 47 deletions(-)

diff --git a/R/run_soft_cal.R b/R/run_soft_cal.R
index f400dc4..4cc21e7 100644
--- a/R/run_soft_cal.R
+++ b/R/run_soft_cal.R
@@ -1,11 +1,9 @@
 #' Runs the SWAT+ soft-calibration routine.
 #'
-#' more info here
+#' write more info here?
 #'
 #' @param project_path Character string, path to the SWAT+ project folder
-#'   (i.e. TxtInOut).
 #' @param os string of operating system
-#'   to only activate nutrient plant stress.
 #' @param keep_folder (optional) If \code{keep_folder = TRUE}
 #'   '.model_run/verification' is kept and not deleted after finishing model runs.
 #'   In this case '.model_run' is reused in a new model run if \code{refresh = FALSE}.
@@ -21,7 +19,6 @@ soft_calibrate <- function(project_path, os, keep_folder = FALSE) {
   # create a temporary directory copy of the model setup
   temp_directory = build_model_run(project_path)
 
-
   print("downloading sft files")
   # downloads any missing sft file
   download_sft_files(temp_directory)
@@ -46,6 +43,9 @@ soft_calibrate <- function(project_path, os, keep_folder = FALSE) {
 
   print("disabling the SFT routine")
   # disables the soft-calibration routine
+  # I originally wrote this since i was working in the original swat directory
+  # it technically isnt needed when working with a copy, but it might be useful
+  # so i'll leave it in here for now...
   toggle_sft(temp_directory, switch = "off")
 
   print("reading results")
@@ -64,6 +64,7 @@ soft_calibrate <- function(project_path, os, keep_folder = FALSE) {
 #' @importFrom dplyr %>%
 #'
 download_sft_files <- function(path) {
+  # "water_balance.sft" currently does not exist on bitbucket but needs to be downloaded!!
   # TEMP until the water_balance.sft file is hosted
   if ("water_balance.sft" %in% list.files(path) == FALSE) {
     stop("water_balance.sft needs to present in your directory TEMP: for now...")
@@ -72,27 +73,27 @@ download_sft_files <- function(path) {
   # add a backslash onto the path, so its compatible with build_model_run()
   path = paste0(path, "/")
 
-
-  # this could be passed as a parameter
+  # the desired files might be better passed as a parameter instead of hard coded here
   required_files = c("codes.sft", "wb_parms.sft")
 
-  # "water_balance.sft" currently does not exist on bitbucket but needs to be downloaded!!
-
+  # The download repository for the sft files:
   # I hope this remains constant for all the files???
   # or can we host this on our own gitlab?
-  # this could be passed as a parameter
+  # this could also be passed as a parameter
   source__online_directory = "https://bitbucket.org/blacklandgrasslandmodels/modular_swatplus/raw/3d2126fb115077b51be90526238c83cd79e3ef4c/database_files/"
 
-  # find out which sft files are missing and download them.
+  # find out which .sft files are missing and download them.
   for (file in required_files) {
     if (file %in% list.files(path) == FALSE) {
       paste(file, "not in your SWAT+ directory. downloading now...") %>% print()
 
+      # not sure how we want to handle error-prone code?
       try(download.file(
         url = paste0(source__online_directory, file),
         destfile = paste0(path, file)
       ))
 
+      # check to see if the file was downloaded
       if (file %in% list.files(path)) {
         paste(file, "downloaded successfully") %>% print()
       } else{
@@ -104,43 +105,38 @@ download_sft_files <- function(path) {
   }
 }
 
-
 #' toggles the soft calibration routine either ON or OFF
 #'
-#' @param path text string to (temporary) directory
+#' @param path string to (temporary) directory
 #' @param switch string, either "off" or "on"
 #' @keywords internal
 #' @importFrom dplyr %>%
 #'
 toggle_sft <- function(path, switch) {
-  # file.cio modifications
-
   # add a backslash onto the path, so its compatible with build_model_run()
   path = paste0(path, "/")
 
+  # file.cio modification:
   # read the file.cio in
   file.cio = readLines(con = paste0(path, "file.cio"))
-  # grab the 22nd line
-  file_cio_line_22 = file.cio[22]
 
-  # split that line based of white space
-  line22 = file_cio_line_22 %>% base::strsplit("\\s+") %>% unlist()
+  # grab the 22nd line and split that line based of white space
+  line22 = file.cio[22] %>% base::strsplit("\\s+") %>% unlist()
 
   if (switch == "on") {
-    # replace the the column values 4,5,6 with the sft file names
+    # replace the the column values 4,5,6 with the .sft file names
     line22[4] = "codes.sft"
     line22[5] = "wb_parms.sf"
     line22[6] = "water_balance.sft"
   }
 
   if (switch == "off") {
-    # replace the the column values 4,5,6 with the sft file names
+    # replace the the column values 4,5,6 with NULL to disable
     line22[4] = "null"
     line22[5] = "null"
     line22[6] = "null"
   }
 
-
   # merge them back together
   new_line22 = paste(line22, collapse = "   ")
 
@@ -151,15 +147,16 @@ toggle_sft <- function(path, switch) {
   writeLines(text = file.cio, con = paste0(path, "file.cio"))
 
   # codes.sft modifications:
-
-  # read in the codes.sft file (warnings turned off because of "incomplete final line)
+  # read in the codes.sft file (warnings turned off because of "incomplete final line")
   codes.sft = readLines(con = paste0(path, "codes.sft"), warn = F)
-  # split that line based of white space
 
-  # find out what the column index is of HYD_HRU
+  # split that line based on white space
   line2 = codes.sft[2] %>% base::strsplit("\\s+") %>% unlist()
+
+  # find out what the column index is of HYD_HRU
   hyd_hru_col_index = which(line2 == "HYD_HRU")
 
+  # split line 3 based on white space
   line3 = codes.sft[3] %>% base::strsplit("\\s+") %>% unlist()
 
   if (switch == "on") {
@@ -172,11 +169,9 @@ toggle_sft <- function(path, switch) {
     line3[hyd_hru_col_index] = "n"
   }
 
-  # merge line 3 back together
-  line3 = paste(line3, collapse = "   ")
 
-  # and apply it to the file
-  codes.sft[3] = line3
+  # merge line 3 back together and apply it to the file
+  codes.sft[3] = paste(line3, collapse = "   ")
 
   # write the modified codes.sft file
   writeLines(text = codes.sft, con = paste0(path, "codes.sft"))
@@ -189,9 +184,9 @@ toggle_sft <- function(path, switch) {
   }
 }
 
-#' reads and reformats the SWAT+ soft calibration routine output
+#' reads and re-formats the SWAT+ soft calibration output
 #'
-#' @param path text string to (temporary) directory
+#' @param path string to (temporary) directory
 #' @keywords internal
 #' @importFrom data.table fread
 #' @importFrom tidyr unite
@@ -203,9 +198,10 @@ read_wb_aa <- function(path) {
   # add a backslash onto the path, so its compatible with build_model_run()
   path = paste0(path, "/")
 
-
-  # read the wb_aa file from its PATH
-  basin_wb_aa = fread(paste0(path, "basin_wb_aa.txt"), fill = TRUE, )
+  # read the wb_aa file from its path
+  # fill = TRUE then in case the rows have unequal length, blank fields are
+  # implicitly filled. (which is the case for this file)
+  basin_wb_aa = fread(paste0(path, "basin_wb_aa.txt"), fill = TRUE)
 
   # change the column names to those of the second row in the text file.
   colnames(basin_wb_aa) <-
@@ -226,7 +222,7 @@ read_wb_aa <- function(path) {
   # Unite the last three rows into one string (as they were intended to be)
   # the new column will be named description and describes what the softcal
   # algorithm did in that step. (So its probably important).
-  # the united columns are separated by a space (trailing space exists now)
+  # the united columns are separated by a space (trailing space exists now..)
   basin_wb_aa = tidyr::unite(data = basin_wb_aa,
                              col = description,
                              no_name_columns,
@@ -239,13 +235,14 @@ read_wb_aa <- function(path) {
   # and convert them to numeric
   basin_wb_aa = basin_wb_aa %>% mutate_at(dbl_cols, as.numeric)
 
+  # return the formatted table as a tibble
   return(basin_wb_aa %>% tibble())
 }
 
 #' Modify ‘water_balance.sft’ with values for fractions. Only the values WYR and
 #' BFR columns need to be modified
 #'
-#' @param path text string to (temporary) directory
+#' @param path string to (temporary) directory
 #' @keywords internal
 #' @importFrom dplyr %>%
 #'
@@ -257,33 +254,30 @@ modify_wb_parms <- function(path) {
   WYLD_PCP_Ratio = readline(prompt = "Enter your value for WYLD_PCP_Ratio: ") %>% as.numeric()
   Subsurface_WYLD_Ratio = readline(prompt = "Enter your value for Subsurface_WYLD_Ratio: ") %>% as.numeric()
 
-
   # read the water balance file
   water_balance_sft = readLines(paste0(path, "water_balance.sft"))
 
-  # extract the line with the column names
+  # extract the line with the column names and split based off whitespace
   line5 = water_balance_sft[5] %>% base::strsplit("\\s+") %>% unlist()
 
   # locate the desired parameters
   WYLD_PCP_Ratio_INDEX = which(line5 == "WYLD_PCP_Ratio")
   Subsurface_WYLD_Ratio_INDEX = which(line5 == "Subsurface_WYLD_Ratio")
 
-  # extract the line with the parameter values
+  # extract the line with the parameter values based off whitespace
   line6 = water_balance_sft[6] %>% base::strsplit("\\s+") %>% unlist()
 
   # change the values with the user given values
   line6[WYLD_PCP_Ratio_INDEX] = WYLD_PCP_Ratio
   line6[Subsurface_WYLD_Ratio_INDEX] = Subsurface_WYLD_Ratio
 
-  # merge them back together
-  line6 = paste(line6, collapse = "   ")
-
-  # add the modified parameter line back to the text file
-  water_balance_sft[6] = line6
+  # merge them back together and add the modified parameter line back to the text file
+  water_balance_sft[6] = paste(line6, collapse = "   ")
 
   # and write it
   writeLines(text = water_balance_sft, con = paste0(path, "water_balance.sft"))
 
+  # diagnostic printout
   paste(
     "water balance parameters updated with values:",
     WYLD_PCP_Ratio,
@@ -319,6 +313,9 @@ modify_wb_parms <- function(path) {
 #
 # - Rename the function to something like "run_swat_soft_calibration()?
 #   - and rename the script file to match?
+#
+# - Allow the user to keep or discard any changes made
+#   if(!keep_folder) unlink(run_path, recursive = TRUE, force = TRUE)
 
 # code to be executed: -----
 
@@ -328,10 +325,7 @@ modify_wb_parms <- function(path) {
 
 # basin_wb_aa %>% ggplot() + geom_col(mapping = aes(x = description, y = wateryld))
 
-
 # Next steps: ------
 # Implement the crop yield soft cal routine
 # Link WB and crop yield routines (iteratively)
-# Allow the user to keep or discard any changes made
-#   if(!keep_folder) unlink(run_path, recursive = TRUE, force = TRUE)
 # ....
-- 
GitLab