ctdFindProfiles {oce} | R Documentation |
Examine the pressure record looking for extended periods of either ascent or descent, and return either indices to these events or a vector of CTD records containing the events.
ctdFindProfiles(x, cutoff = 0.5, minLength = 10, minHeight = 0.1 * diff(range(x[["pressure"]])), smoother = smooth.spline, direction = c("descending", "ascending"), breaks, arr.ind = FALSE, distinct, debug = getOption("oceDebug"), ...)
x |
A |
cutoff |
criterion on pressure difference; see “Details”. |
minLength |
lower limit on number of points in candidate profiles. |
minHeight |
lower limit on height of candidate profiles. |
smoother |
The smoothing function to use for identifying down/up
casts. The default is |
direction |
String indicating the travel direction to be selected. |
breaks |
optional logical vector indicating the indices of data
at the edges of profiles. If this is given, then the preceding arguments
|
arr.ind |
Logical indicating whether the array indices should be returned; the alternative is to return a vector of ctd objects. |
distinct |
An optional string indicating how to identify profiles
by unique values. Use |
debug |
an integer specifying whether debugging information is
to be printed during the processing. This is a general parameter that
is used by many |
... |
Optional extra arguments that are passed to the smoothing function, |
The method works by examining the pressure record. First, this is smoothed using
smoother()
(see “Arguments”), and then the result is first-differenced
using diff
. Median values of the positive and
negative first-difference values are then multiplied by cutoff
. This establishes criteria
for any given point to be in an ascending profile, a descending profile, or a non-profile.
Contiguous regions are then found, and those that have fewer than minLength
points are
discarded. Then, those that have pressure ranges less than minHeight
are discarded.
Caution: this method is not well-suited to all datasets. For example, the default
value of smoother
is smooth.spline
, and this works well for just a few
profiles, but poorly for a tow-yo with a long sequence of profiles; in the latter case,
it can be preferable to use simpler smoothers (see “Examples”). Also, depending
on the sampling protocol, it is often necessary to pass the resultant profiles through
ctdTrim
, to remove artifacts such as an equilibration phase, etc.
Generally, one is well-advised to use the present function for a quick look at the data,
relying on e.g. plotScan
to identify profiles visually, for a final product.
If arr.ind=TRUE
, a data frame with columns start
and end
, the indices
of the downcasts. Otherwise, a vector of ctd
objects.
Dan Kelley and Clark Richards
The documentation for ctd-class
explains the structure
of CTD objects, and also outlines the other functions dealing with them.
Other things related to ctd
data: [[,ctd-method
,
[[<-,ctd-method
, as.ctd
,
cnvName2oceName
, ctd-class
,
ctdDecimate
, ctdRaw
,
ctdTrim
, ctd
,
handleFlags,ctd-method
,
oceNames2whpNames
,
oceUnits2whpUnits
,
plot,ctd-method
, plotProfile
,
plotScan
, plotTS
,
read.ctd.itp
, read.ctd.odf
,
read.ctd.sbe
,
read.ctd.woce.other
,
read.ctd.woce
, read.ctd
,
subset,ctd-method
,
summary,ctd-method
,
woceNames2oceNames
,
woceUnit2oceUnit
, write.ctd
## Not run: library(oce) ## Example 1. d <- read.csv("towyow.csv", header=TRUE) towyow <- as.ctd(d$salinity, d$temperature, d$pressure) casts <- ctdFindProfiles(towyow) par(mfrow=c(length(casts), 3)) for (cast in casts) { plotProfile(cast, "salinity") plotProfile(cast, "temperature") plotTS(cast, type='o') } ## Example 2. ## Using a moving average to smooth pressure, instead of the default ## smooth.spline() method. This avoids a tendency of smooth.spline() ## to smooth out the profiles in a tow-yo with many (dozens or more) cycles. movingAverage <- function(x, n = 11, ...) { f <- rep(1/n, n) stats::filter(x, f, ...) } casts <- ctdFindProfiles(towyo, smoother=movingAverage) ## Example 3: glider data, with profiles separated by >10dbar jump. breaks <- which(diff(ctd[["pressure"]]) > 10)) profiles <- ctdFindProfiles(ctd, breaks=breaks) ## End(Not run)