Nothing
      #' @title Generic methods for objects with class \code{'wrsp'}.
#' 
#' @description
#' An object with class 'wrsp' is a list containing the
#' response information, and the
#' mechanical, hydraulic, and material properties used to
#' generate the response for a sealed well.
#' 
#' @details
#' The response information is a
#' matrix with frequency, complex response
#' [\eqn{\omega}, \eqn{Z_\alpha (\omega)}]
#' where the units of \eqn{\omega} will be as they were input.
#' The amplitude of \eqn{Z}
#' is in meters per strain, 
#' and the phase is in radians.
#' 
#' @name wrsp-methods
#' @aliases wrsp
#' @rdname wrsp-methods
#' @docType methods
#'
#' @seealso 
#' \code{\link{well_response}}
#' 
#' \code{\link{kitagawa-package}}
#' 
#' @author A. J. Barbour <andy.barbour@@gmail.com>
#' 
#' @param x 'wrsp' object
#' @param object 'wrsp' object
#' @param n numeric; the number of \code{head} and \code{tail} to print
#' @param series character; the series to plot (amplitude or phase)
#' @param pch point character, as in \code{\link{par}}
#' @param xlims limits for x-axis (applies to both amp and phs frames)
#' @param ylims optional list of limits for y-axis (i.e., \code{list(amp=c(..),phs=c(...))})
#' @param logamp logical; should the amplitude be in log10 units
#' @param ... optional arguments
#' 
#' @examples
#' W <- well_response(1:10, T.=1, S.=1, Vw.=1, Rs.=1, Ku.=1, B.=1)
#' str(W)
#' print(W)
#' print(summary(W))
#' #
#' # Plot the response
#' plot(rnorm(10), xlim=c(-1,11), ylim=c(-2,2))
#' lines(W)
#' lines(W, "phs", col="red")
#' points(W)
#' points(W, "phs")
#' #
#' Wdf <- as.data.frame(W)
#' plot(Mod(wellresp) ~ omega, Wdf) # amplitude
#' plot(Arg(wellresp) ~ omega, Wdf) # phase
#' #
#' # or use the builtin method plot.wrsp
#' plot(W)
#' # change limits:
#' plot(W, xlims=c(-1,1), ylims=list(amp=c(5,8), phs=185*c(-1,1)))
NULL
#' @rdname wrsp-methods
#' @aliases as.data.frame.wrsp
#' @export
as.data.frame.wrsp <- function(x, ...){
  WR <- x[["Response"]]
  df <- as.data.frame(WR)
  return(df)
}
#' @rdname wrsp-methods
#' @aliases data.frame.wrsp
#' @export
data.frame.wrsp <- as.data.frame.wrsp
#' @rdname wrsp-methods
#' @aliases print.wrsp
#' @export
print.wrsp <- function(x, n=3, ...){
  message("Sealed well response:")
  WR <- as.data.frame(x)
  print(head(WR, n))
  message("\t...")
  print(tail(WR, n))
  return(invisible(x))
}
#' @rdname wrsp-methods
#' @aliases summary.wrsp
#' @export
summary.wrsp <- function(object, ...){
  WR <- object[["Response"]]
  toret <- summary.default(WR)
  class(toret) <- "summary.wrsp"
  return(toret)
}
#' @rdname wrsp-methods
#' @aliases print.summary.wrsp
#' @export
print.summary.wrsp <- function(x, ...){
  message("Sealed well response summary:")
  print.summaryDefault(x)
}
#' @rdname wrsp-methods
#' @aliases lines.wrsp
#' @export
lines.wrsp <- function(x, series=c("amp","phs"), ...){
  series <- match.arg(series)
  WR <- x[["Response"]]
  x <- WR[,1]
  y <- WR[,2]
  y <- switch(series, amp=Mod(y), phs=Arg(y))
  graphics::lines(x, y, ...)
}
#' @rdname wrsp-methods
#' @aliases points.wrsp
#' @export
points.wrsp <- function(x, series=c("amp","phs"), pch="+", ...){
  series <- match.arg(series)
  WR <- x[["Response"]]
  x <- WR[,1]
  y <- WR[,2]
  y <- switch(series, amp=Mod(y), phs=Arg(y))
  graphics::points(x, y, pch=pch, ...)
}
#' @rdname wrsp-methods
#' @aliases plot.wrsp
#' @export
plot.wrsp <- function(x, 
                      xlims=c(-3,1), 
                      ylims=list(amp=NULL, phs=185*c(-1,1)), logamp=TRUE, ...){
  WR <- x[["Response"]]
  au <- x[["Response.units"]]
  fu <- x[["Omega"]][["Units"]]
  mdl <- x[["Model"]][["Model"]]
  # enforce freq units in Hz
  fc <- switch(fu, rad_per_sec=2*pi, Hz=1)
  stopifnot(!is.null(fc))
  frq <- log10(WR[,1] / fc)
  amp <- Mod(WR[,2])
  if (logamp){
    amp <- log10(amp)
    au <- paste("log10",au)
  }
  phs <- Arg(WR[,2])*180/pi
  ##
  origpar <- par(no.readonly = TRUE)
  par(mar=c(2,4,1,1), 
      oma=c(2,0.1,1,0.1), 
      tcl=-0.3,
      mgp=c(2.5, 0.5, 0), las=1)
  layout(matrix(c(1,2), ncol=1), heights=c(0.5,0.5))
  # amplitude
  alims <- ylims[["amp"]]
  if (is.null(alims)) alims <- range(pretty(amp))
  plot(0,0,col=NA,
       ylim=alims,
       yaxs="i", ylab=sprintf("[%s]",au),
       xlim=xlims,
       xaxs="i", xaxt="n", xlab=""
  )
  lines(frq, amp, type="l", lwd=1.5, ...)
  log10_ticks()
  mtext(sprintf("Sealed well-response (%s)",mdl), font=2, line=1.0, cex=1.0)
  mtext("(a) Amplitude", adj=0.015, font=4, line=0.1, cex=0.8)
  # phase shift
  plot(0,0,col=NA,
       ylim=ylims[["phs"]],
       yaxs="i", yaxt="n", ylab="[degrees]",
       xlim=xlims,
       xaxs="i", xaxt="n", xlab=""
  )
  abline(h=c(-1,-0.5,0,0.5,1)*180, col="grey80", lty=2)
  lines(frq, phs, type="l", lwd=1.5, ...)
  lbls <- ats <- seq(-180,180,by=30)
  lbls[seq_along(lbls)%%2==0] <- ""
  axis(2, at=ats, labels=lbls)
  log10_ticks()
  mtext("(b) Phase", adj=0.015, font=4, line=0.1, cex=0.8)
  mtext("Frequency [Hz]", side=1, line=2)
  on.exit(par(origpar))
  return(invisible(NULL))
}
#' @details \code{\link{kitplot}} was previously a standalone function, but
#' is now simply a reference to \code{\link{plot.wrsp}}.
#' @rdname wrsp-methods
#' @export
#' @family PlotUtilities
kitplot <- function(x, ...) UseMethod("kitplot")
#' @rdname wrsp-methods
#' @aliases kitplot.wrsp
#' @export
kitplot.wrsp <- plot.wrsp
#' @title Generic methods for objects with class \code{'owrsp'}.
#' 
#' @description
#' An object with class 'owrsp' is a list containing the
#' response information, and the
#' mechanical, hydraulic, and material properties used to
#' generate the response for an open well.
#' 
#' @details
#' The response information is a
#' matrix with frequency, complex response
#' [\eqn{\omega}, \eqn{Z_\alpha (\omega)}]
#' where the units of \eqn{\omega} will be as they were input.
#' The amplitude of \eqn{Z}
#' is in meters per strain, 
#' and the phase is in radians.
#' 
#' @name owrsp-methods
#' @aliases owrsp
#' @rdname owrsp-methods
#' @docType methods
#'
#' @seealso 
#' \code{\link{open_well_response}}
#' 
#' \code{\link{kitagawa-package}}
#' 
#' @author A. J. Barbour <andy.barbour@@gmail.com>
#' 
#' @param x 'owrsp' object
#' @param object 'owrsp' object
#' @param n numeric; the number of \code{head} and \code{tail} to print
#' @param series character; the series to plot (amplitude or phase)
#' @param pch point character, as in \code{\link{par}}
#' @param xlims limits for x-axis (applies to both amp and phs frames)
#' @param ylims optional list of limits for y-axis (i.e., \code{list(amp=c(..),phs=c(...))})
#' @param logamp logical; should the amplitude be in log10 units
#' @param ... optional arguments
#' 
#' @examples
#' S. <- 1e-5  	# Storativity [nondimensional]
#' T. <- 1e-4		# Transmissivity [m**2 / s]
#' frq <- 1/(1:200)
#' # Defaults to the Rojstaczer formulation
#' W <- open_well_response(frq, T. = T., S. = S., Rs. = 0.12, freq.units="Hz")
#' # (warning message about missing 'z')
#' W <- open_well_response(frq, T. = T., S. = S., Rs. = 0.12, freq.units="Hz", z=1)
#' str(W)
#' print(W)
#' print(summary(W))
# #
# # Plot the response
#' plot(rnorm(10), xlim=c(-1,11), ylim=c(-2,2))
#' lines(W)
#' lines(W, "phs", col="red")
#' points(W)
#' points(W, "phs")
#' #
#' Wdf <- as.data.frame(W)
#' plot(Mod(wellresp) ~ omega, Wdf) # amplitude
#' plot(Arg(wellresp) ~ omega, Wdf) # phase
# #
# # or use the builtin method
#' plot(W)
#' # change limits:
#' plot(W, xlims=c(-4,0), ylims=list(amp=c(-7,-3), phs=185*c(-1,1)))
NULL
#' @rdname owrsp-methods
#' @aliases as.data.frame.owrsp
#' @export
as.data.frame.owrsp <- function(x, ...){
  WR <- x[["Response"]]
  df <- as.data.frame(WR)
  return(df)
}
#' @rdname owrsp-methods
#' @aliases data.frame.owrsp
#' @export
data.frame.owrsp <- as.data.frame.owrsp
#' @rdname owrsp-methods
#' @aliases print.owrsp
#' @export
print.owrsp <- function(x, n=3, ...){
  message("Open well response:")
  WR <- as.data.frame(x)
  print(head(WR, n))
  message("\t...")
  print(tail(WR, n))
  return(invisible(x))
}
#' @rdname owrsp-methods
#' @aliases summary.owrsp
#' @export
summary.owrsp <- function(object, ...){
  WR <- object[["Response"]]
  toret <- summary.default(WR)
  class(toret) <- "summary.owrsp"
  return(toret)
}
#' @rdname owrsp-methods
#' @aliases print.summary.owrsp
#' @export
print.summary.owrsp <- function(x, ...){
  message("Open well response summary:")
  print.summaryDefault(x)
}
#' @rdname owrsp-methods
#' @aliases lines.owrsp
#' @export
lines.owrsp <- function(x, series=c("amp","phs"), ...){
  series <- match.arg(series)
  WR <- x[["Response"]]
  x <- WR[,1]
  y <- WR[,2]
  y <- switch(series, amp=Mod(y), phs=Arg(y))
  graphics::lines(x, y, ...)
}
#' @rdname owrsp-methods
#' @aliases points.owrsp
#' @export
points.owrsp <- function(x, series=c("amp","phs"), pch="+", ...){
  series <- match.arg(series)
  WR <- x[["Response"]]
  x <- WR[,1]
  y <- WR[,2]
  y <- switch(series, amp=Mod(y), phs=Arg(y))
  graphics::points(x, y, pch=pch, ...)
}
#' @rdname owrsp-methods
#' @aliases plot.owrsp
#' @export
plot.owrsp <- function(x, 
                      xlims=c(-3,1), 
                      ylims=list(amp=NULL, phs=185*c(-1,1)), logamp=TRUE, ...){
  #
  WR <- x[["Response"]]
  au <- x[["Response.units"]]
  fu <- x[["Omega"]][["Units"]]
  mdl <- x[["Model"]][["Model"]]
  # enforce freq units in Hz
  fc <- switch(fu, rad_per_sec=2*pi, Hz=1)
  stopifnot(!is.null(fc))
  frq <- log10(WR[,1] / fc)
  amp <- Mod(WR[,2])
  if (logamp){
    amp <- log10(amp)
    au <- paste("log10",au)
  }
  phs <- Arg(WR[,2])*180/pi
  ##
  origpar <- par(no.readonly = TRUE)
  par(mar=c(2,4,1,1), 
      oma=c(2,0.1,1,0.1), 
      tcl=-0.3,
      mgp=c(2.5, 0.5, 0), las=1)
  layout(matrix(c(1,2), ncol=1), heights=c(0.5,0.5))
  # amplitude
  alims <- ylims[["amp"]]
  if (is.null(alims)) alims <- range(pretty(amp))
  plot(0,0,col=NA,
       ylim=alims,
       yaxs="i", ylab=sprintf("[%s]",au), 
       xlim=xlims,
       xaxs="i", xaxt="n", xlab=""
  )
  lines(frq, amp, type="l", lwd=1.5, ...)
  log10_ticks()
  mtext(sprintf("Open well-response (%s)",mdl), font=2, line=1.0, cex=1.0)
  mtext("(a) Amplitude", adj=0.015, font=4, line=0.1, cex=0.8)
  # phase shift
  plot(0,0,col=NA,
       ylim=ylims[["phs"]],
       yaxs="i", yaxt="n", ylab="[degrees]",
       xlim=xlims,
       xaxs="i", xaxt="n", xlab=""
  )
  abline(h=c(-1,-0.5,0,0.5,1)*180, col="grey80", lty=2)
  lines(frq, phs, type="l", lwd=1.5, ...)
  lbls <- ats <- seq(-180,180,by=30)
  lbls[seq_along(lbls)%%2==0] <- ""
  axis(2, at=ats, labels=lbls)
  log10_ticks()
  mtext("(b) Phase", adj=0.015, font=4, line=0.1, cex=0.8)
  mtext("Frequency [Hz]", side=1, line=2)
  on.exit(par(origpar))
  return(invisible(NULL))
}
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.