diff options
author | Johannes Ranke <jranke@uni-bremen.de> | 2017-06-17 16:36:13 +0200 |
---|---|---|
committer | Johannes Ranke <jranke@uni-bremen.de> | 2017-06-17 16:36:13 +0200 |
commit | c9bcd8e68db61515080ff377c6a04fa807337258 (patch) | |
tree | 4ff0e1226951c4ff76824883888a290b1d81f99a | |
parent | e6f968cf97ed6ca9268e6098d86ba63ff2c6d2b0 (diff) |
Start with the generation of an input file
-rw-r--r-- | R/PEC_sw_focus.R | 59 | ||||
-rw-r--r-- | man/PEC_sw_focus.Rd | 12 | ||||
-rw-r--r-- | tests/testthat/test_step_1.R | 15 |
3 files changed, 80 insertions, 6 deletions
diff --git a/R/PEC_sw_focus.R b/R/PEC_sw_focus.R index c098fb2..e6f2689 100644 --- a/R/PEC_sw_focus.R +++ b/R/PEC_sw_focus.R @@ -27,6 +27,7 @@ #' applications are given explicitly #' @param n The number of applications #' @param i The application interval +#' @param comment A comment for the input file #' @param met A list containing metabolite specific parameters. e.g. #' conveniently generated by \code{\link{chent_focus_sw}}. If not NULL, #' the PEC is calculated for this compound, not the parent. @@ -39,6 +40,12 @@ #' parent or a metabolite #' @param scenario The name of the scenario. Must be one of the scenario #' names given in \code{\link{FOCUS_Step_12_scenarios}} +#' @param txt_file the name, and potentially the full path to the +#' Steps.12 input text file to which the specification of the run(s) +#' should be written +#' @param overwrite Should an existing file a the location specified in +#' \code{txt_file} be overwritten? +#' @param append Should the input text file be appended? #' @examples #' # Parent only #' dummy_1 <- chent_focus_sw(cwsat = 6000, DT50_ws = 6, Koc = 344.8) @@ -49,9 +56,11 @@ #' M1 <- chent_focus_sw(mw = 100, cwsat = 100, DT50_ws = 100, Koc = 50, max_ws = 0, max_soil = 0.5) #' PEC_sw_focus(new_dummy, 1000, scenario = "cereals, winter", met = M1) PEC_sw_focus <- function(parent, rate, n = 1, i = NA, + comment = "", met = NULL, f_drift = NA, f_rd = 0.1, - scenario = FOCUS_Step_12_scenarios$names) + scenario = FOCUS_Step_12_scenarios$names, + txt_file = "pesticide.txt", overwrite = FALSE, append = TRUE) { if (n > 1 & is.na(i)) stop("Please specify the interval i if n > 1") @@ -66,7 +75,37 @@ PEC_sw_focus <- function(parent, rate, n = 1, i = NA, # } } + # Write to txt file if requested + add_line <- function(x) cat(paste0(x, "\r\n"), file = txt, append = TRUE) + add <- function(x) cat(paste(x, "\t"), file = txt, append = TRUE) + if (file.exists(txt_file)) { + if (append) { + txt <- file(txt_file, "a") + } else { + if (overwrite) { + txt <- file(txt_file, "w") + } else { + stop("The file", txt_file, "already exists, and you did not request", + "appending or overwriting it") + } + } + } + on.exit(close(txt)) + + # Write header to txt file + header <- c("Active Substance", "Compound", "Comment", "Mol mass a.i.", + "Mol mass met.", "Water solubility", "KOC assessed compound", + "KOC parent compound", "DT50", "Max. in Water", + "Max. in Soil asessed compound", # we reproduce the typo... + "App. Rate", "Number of App.", "Time between app.", + "App. Type", "DT50 soil parent compound", "DT50 soil", + "DT50 water", "DT50 sediment", "Region / Season", + "Interception class") + add_line(paste(header, collapse = "\t")) + + if (is.null(met)) { + compound = parent$name cwsat = parent$cwsat mw_ratio = 1 max_soil = 1 @@ -74,6 +113,7 @@ PEC_sw_focus <- function(parent, rate, n = 1, i = NA, Koc = parent$Koc DT50_ws = parent$DT50_ws } else { + compound = met$name cwsat = met$cwsat mw_ratio = met$mw / parent$mw max_soil = met$max_soil @@ -82,6 +122,18 @@ PEC_sw_focus <- function(parent, rate, n = 1, i = NA, DT50_ws = met$DT50_ws } + add(parent$name) + add(compound) + add(comment) + if (is.na(parent$mw)) add("-99.00") + else add(sprintf("%.2f", parent$mw)) + if (is.na(met$mw)) add("-99.00") + else add(sprintf("%.2f", met$mw)) + add(sprintf("%.2f", cwsat)) + add(sprintf("%.2f", Koc)) + if (is.null(met)) add("0.00E+00") + else add(sprintf("%.2f", parent$Koc)) + # Rates for a single application eq_rate_drift_s = mw_ratio * max_ws * rate # Parent only, or metabolite formed in soil: @@ -182,16 +234,17 @@ PEC_sw_focus <- function(parent, rate, n = 1, i = NA, #' Create a chemical compound object for FOCUS Step 1 calculations #' #' @export +#' @param name Length one character vector containing the name #' @param cwsat Water solubility in mg/L #' @param DT50_ws Half-life in water/sediment systems in days #' @param Koc Partition coefficient between organic carbon and water #' in L/kg. -#' @param mw Molar weight in g/mol +#' @param mw Molar weight in g/mol. #' @param max_soil Maximum observed fraction (dimensionless) in soil #' @param max_ws Maximum observed fraction (dimensionless) in water/sediment #' systems #' @return A list with the substance specific properties -chent_focus_sw <- function(Koc, DT50_ws = NA, cwsat = 1000, mw = NA, max_soil = 1, max_ws = 1) +chent_focus_sw <- function(name, Koc, DT50_ws = NA, cwsat = 1000, mw = NA, max_soil = 1, max_ws = 1) { list(Koc = Koc, DT50_ws = DT50_ws, cwsat = cwsat, mw = mw, max_soil = max_soil, max_ws = max_ws) diff --git a/man/PEC_sw_focus.Rd b/man/PEC_sw_focus.Rd index 7562b88..a5628d7 100644 --- a/man/PEC_sw_focus.Rd +++ b/man/PEC_sw_focus.Rd @@ -5,7 +5,8 @@ \title{Calculate FOCUS Step 1 PEC surface water} \usage{ PEC_sw_focus(parent, rate, n = 1, i = NA, met = NULL, f_drift = NA, - f_rd = 0.1, scenario = FOCUS_Step_12_scenarios$names) + f_rd = 0.1, scenario = FOCUS_Step_12_scenarios$names, + txt_file = "pesticide.txt", overwrite = FALSE, append = TRUE) } \arguments{ \item{parent}{A list containing substance specific parameters, e.g. @@ -33,6 +34,15 @@ parent or a metabolite} \item{scenario}{The name of the scenario. Must be one of the scenario names given in \code{\link{FOCUS_Step_12_scenarios}}} + +\item{txt_file}{the name, and potentially the full path to the +Steps.12 input text file to which the specification of the run(s) +should be written} + +\item{overwrite}{Should an existing file a the location specified in +\code{txt_file} be overwritten?} + +\item{append}{Should the input text file be appended?} } \description{ This is reimplementation of Step 1 of the FOCUS Step 1 and 2 calculator diff --git a/tests/testthat/test_step_1.R b/tests/testthat/test_step_1.R index 2be5df8..0c8710b 100644 --- a/tests/testthat/test_step_1.R +++ b/tests/testthat/test_step_1.R @@ -1,10 +1,20 @@ context("FOCUS Step 1 calculations") t_out <- c(0, 1, 2, 4) # Checking the first four days is sufficient for Step 1 +test_txt <- readLines( + system.file("testdata/Steps_12_pesticide.txt", package = "pfm") +) test_that("Results of Steps 1/2 calculator for Dummy 1 are reproduced", { - dummy_1 <- chent_focus_sw(cwsat = 6000, DT50_ws = 6, Koc = 344.8) - res_dummy_1 <- PEC_sw_focus(dummy_1, 3000, f_drift = 0) + dummy_1 <- chent_focus_sw("Dummy 1", cwsat = 6000, DT50_ws = 6, Koc = 344.8) + res_dummy_1 <- PEC_sw_focus(dummy_1, 3000, + comment = "Potatoes, Southern Europe, spring, 1 app/season, soil incorporation", + f_drift = 0, + append = FALSE, overwrite = TRUE) + + pest_txt <- readLines("pesticide.txt") + expect_equal(test_txt[1], pest_txt[1]) + strsplit(test_txt[2], "\t")[[1]] PEC_orig_1 = matrix(NA, nrow = length(t_out), ncol = 4, dimnames = list(Time = t_out, type = c("PECsw", "TWAECsw", "PECsed", "TWAECsed"))) @@ -112,3 +122,4 @@ test_that("Results of Steps 1/2 calculator for New Dummy (M1-M3) are reproduced" expect_equal(res_M2$PEC[1:4, ], PEC_orig_M2[, ], tolerance = 0.01, scale = 1) }) +unlink("pesticide.txt") |