diff options
author | Johannes Ranke <jranke@uni-bremen.de> | 2015-06-11 15:23:22 +0200 |
---|---|---|
committer | Johannes Ranke <jranke@uni-bremen.de> | 2015-06-11 15:23:22 +0200 |
commit | 3aa5fb86772c28402047c7ebd07841061dbcdbba (patch) | |
tree | 524b67e02e6eee8584bf85211bc522e4918e8708 | |
parent | d3daa7b73fa5d0508ff51a843247d126c2a11691 (diff) |
Add facilities to calculate decline curves
-rw-r--r-- | pkg/DESCRIPTION | 2 | ||||
-rw-r--r-- | pkg/NAMESPACE | 4 | ||||
-rw-r--r-- | pkg/R/SFO_actual_twa.R | 36 | ||||
-rw-r--r-- | pkg/R/pfm_degradation.R | 48 | ||||
-rw-r--r-- | pkg/man/PEC_sw_drift_ini.Rd | 42 | ||||
-rw-r--r-- | pkg/man/SFO_actual_twa.Rd | 29 | ||||
-rw-r--r-- | pkg/man/pfm_degradation.Rd | 35 | ||||
-rw-r--r-- | pkg/tests/testthat/test_SFO_actual_twa.R | 13 |
8 files changed, 208 insertions, 1 deletions
diff --git a/pkg/DESCRIPTION b/pkg/DESCRIPTION index 98e9142..4c41019 100644 --- a/pkg/DESCRIPTION +++ b/pkg/DESCRIPTION @@ -7,7 +7,7 @@ Authors@R: person("Johannes Ranke", email = "jranke@uni-bremen.de", role = c("aut", "cre", "cph")) Description: Utilities for simple PEC calculations and for dealing with data from some FOCUS pesticide fate modelling software. -Depends: R6 +Depends: R6, mkin Suggests: testthat License: GPL LazyLoad: yes diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index 00b0022..2d95da4 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -3,7 +3,11 @@ S3method(plot,TOXSWA_cwa) export(PEC_soil) export(PEC_sw_drift) +export(PEC_sw_drift_ini) +export(SFO_actual_twa) export(TOXSWA_cwa) export(geomean) +export(pfm_degradation) export(read.TOXSWA_cwa) +import(mkin) importFrom(R6,R6Class) diff --git a/pkg/R/SFO_actual_twa.R b/pkg/R/SFO_actual_twa.R new file mode 100644 index 0000000..7facb6a --- /dev/null +++ b/pkg/R/SFO_actual_twa.R @@ -0,0 +1,36 @@ +# Copyright (C) 2015 Johannes Ranke +# Contact: jranke@uni-bremen.de +# This file is part of the R package pfm + +# This program is free software: you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free Software +# Foundation, either version 3 of the License, or (at your option) any later +# version. + +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +# details. + +# You should have received a copy of the GNU General Public License along with +# this program. If not, see <http://www.gnu.org/licenses/> + +#' Actual and maximum moving window time average concentrations for SFO kinetics +#' +#' @param DT50 The half-life. +#' @param times The output times, and window sizes for time weighted average concentrations +#' @export +#' @author Johannes Ranke +#' @source FOCUS (2014) Generic Guidance for Estimating Persistence and Degradation +#' Kinetics from Environmental Fate Studies on Pesticides in EU Registratin, Version 1.1, +#' 18 December 2014, p. 251 +#' @examples +#' SFO_actual_twa(10) +SFO_actual_twa <- function(DT50 = 1000, times = c(0, 1, 2, 4, 7, 14, 21, 28, 42, 50, 100)) +{ + k = log(2)/DT50 + result <- data.frame(actual = 1 * exp(-k * times), + twa = (1 - exp(-k * times))/(k * times), + row.names = times) + return(result) +} diff --git a/pkg/R/pfm_degradation.R b/pkg/R/pfm_degradation.R new file mode 100644 index 0000000..d1d2f9d --- /dev/null +++ b/pkg/R/pfm_degradation.R @@ -0,0 +1,48 @@ +# Copyright (C) 2015 Johannes Ranke +# Contact: jranke@uni-bremen.de +# This file is part of the R package pfm + +# This program is free software: you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free Software +# Foundation, either version 3 of the License, or (at your option) any later +# version. + +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +# details. + +# You should have received a copy of the GNU General Public License along with +# this program. If not, see <http://www.gnu.org/licenses/> + +#' Calculate a time course of relative concentrations based on an mkinmod model +#' +#' @import mkin +#' @param model The degradation model to be used. Either a parent only model like +#' 'SFO' or 'FOMC', or an mkinmod object +#' @param DT50 The half-life. This is only used when simple exponential decline +#' is calculated (SFO model). +#' @param parms The parameters used for the degradation model +#' @param years For how many years should the degradation be predicted? +#' @param step_days What step size in days should the output have? +#' @param times The output times +#' @export +#' @author Johannes Ranke +#' @examples +#' pfm_degradation("SFO", DT50 = 10) +pfm_degradation <- function(model = "SFO", DT50 = 1000, parms = c(k_parent_sink = log(2)/DT50), + years = 1, step_days = 1, + times = seq(0, years * 365, by = step_days)) +{ + if (model %in% c("SFO", "FOMC", "DFOP", "HS", "IORE")) { + model <- mkinmod(parent = list(type = model)) + } + initial_state = c(1, rep(0, length(model$diffs) - 1)) + names(initial_state) <- names(model$diffs) + time_course <- mkinpredict(model, odeparms = parms, + odeini = initial_state, + outtimes = times, + solution_type = ifelse(length(model$spec) == 1, + "analytical", "deSolve")) + invisible(time_course) +} diff --git a/pkg/man/PEC_sw_drift_ini.Rd b/pkg/man/PEC_sw_drift_ini.Rd new file mode 100644 index 0000000..0bcbf97 --- /dev/null +++ b/pkg/man/PEC_sw_drift_ini.Rd @@ -0,0 +1,42 @@ +% Generated by roxygen2 (4.1.0.9001): do not edit by hand +% Please edit documentation in R/PEC_sw_drift_ini.R +\name{PEC_sw_drift_ini} +\alias{PEC_sw_drift_ini} +\title{Calculate initial predicted environmental concentrations in surface water due to drift} +\usage{ +PEC_sw_drift_ini(rate, applications = 1, water_depth = 30, + drift_data = "JKI", crop = "Ackerbau", distances = c(1, 5, 10, 20), + rate_units = "g/ha", PEC_units = "µg/L") +} +\arguments{ +\item{rate}{Application rate in units specified below} + +\item{applications}{Number of applications for selection of drift percentile} + +\item{water_depth}{Depth of the water body in cm} + +\item{drift_data}{Source of drift percentage data} + +\item{crop}{Crop name (use German names for JKI data), defaults to "Ackerbau"} + +\item{distances}{The distances in m for which to get PEC values} + +\item{rate_units}{Defaults to g/ha} + +\item{PEC_units}{Requested units for the calculated PEC. Only µg/L currently supported} +} +\value{ +The predicted concentration in surface water +} +\description{ +This is a basic, vectorised form of a simple calculation of a contaminant +concentration in surface water based on complete, instantaneous mixing +with input via spray drift. +} +\examples{ +PEC_sw_drift_ini(100) +} +\author{ +Johannes Ranke +} + diff --git a/pkg/man/SFO_actual_twa.Rd b/pkg/man/SFO_actual_twa.Rd new file mode 100644 index 0000000..967b60f --- /dev/null +++ b/pkg/man/SFO_actual_twa.Rd @@ -0,0 +1,29 @@ +% Generated by roxygen2 (4.1.0.9001): do not edit by hand +% Please edit documentation in R/SFO_actual_twa.R +\name{SFO_actual_twa} +\alias{SFO_actual_twa} +\title{Actual and maximum moving window time average concentrations for SFO kinetics} +\source{ +FOCUS (2014) Generic Guidance for Estimating Persistence and Degradation + Kinetics from Environmental Fate Studies on Pesticides in EU Registratin, Version 1.1, + 18 December 2014, p. 251 +} +\usage{ +SFO_actual_twa(DT50 = 1000, times = c(0, 1, 2, 4, 7, 14, 21, 28, 42, 50, + 100)) +} +\arguments{ +\item{DT50}{The half-life.} + +\item{times}{The output times, and window sizes for time weighted average concentrations} +} +\description{ +Actual and maximum moving window time average concentrations for SFO kinetics +} +\examples{ +SFO_actual_twa(10) +} +\author{ +Johannes Ranke +} + diff --git a/pkg/man/pfm_degradation.Rd b/pkg/man/pfm_degradation.Rd new file mode 100644 index 0000000..b875434 --- /dev/null +++ b/pkg/man/pfm_degradation.Rd @@ -0,0 +1,35 @@ +% Generated by roxygen2 (4.1.0.9001): do not edit by hand +% Please edit documentation in R/pfm_degradation.R +\name{pfm_degradation} +\alias{pfm_degradation} +\title{Calculate a time course of relative concentrations based on an mkinmod model} +\usage{ +pfm_degradation(model = "SFO", DT50 = 1000, parms = c(k_parent_sink = + log(2)/DT50), years = 1, step_days = 1, times = seq(0, years * 365, by = + step_days)) +} +\arguments{ +\item{model}{The degradation model to be used. Either a parent only model like +'SFO' or 'FOMC', or an mkinmod object} + +\item{DT50}{The half-life. This is only used when simple exponential decline +is calculated (SFO model).} + +\item{parms}{The parameters used for the degradation model} + +\item{years}{For how many years should the degradation be predicted?} + +\item{step_days}{What step size in days should the output have?} + +\item{times}{The output times} +} +\description{ +Calculate a time course of relative concentrations based on an mkinmod model +} +\examples{ +pfm_degradation("SFO", DT50 = 10) +} +\author{ +Johannes Ranke +} + diff --git a/pkg/tests/testthat/test_SFO_actual_twa.R b/pkg/tests/testthat/test_SFO_actual_twa.R new file mode 100644 index 0000000..b0a5537 --- /dev/null +++ b/pkg/tests/testthat/test_SFO_actual_twa.R @@ -0,0 +1,13 @@ +library(pfm) +context("Actual and time weighted average concentrations for SFO kinetics") + +test_that("SFO_actual_twa calculates correctly", { + test_times <- c(0, 1, 7, 21, 42) + # This was calculated with the CRD spreadsheet for multiple applications + reference <- data.frame( + actual = c(10, 9.330, 6.156, 2.333, 0.544), + twa = c(NaN, 9.661, 7.923, 5.267, 3.248), + row.names = test_times) + result <- round(10 * SFO_actual_twa(10, times = test_times), 3) + expect_equal(result, reference) +}) |