Last chance! 50% off unlimited learning
Sale ends in
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"), ...)
A ctd
object, i.e. one inheriting from ctd-class
.
criterion on pressure difference; see “Details”.
lower limit on number of points in candidate profiles.
lower limit on height of candidate profiles.
The smoothing function to use for identifying down/up
casts. The default is smooth.spline
, which performs well for
a small number of cycles; see “Examples” for a method that is
better for a long tow-yo. The return value from smoother
must
be either a list containing an element named y
or something
that can be coerced to a vector with as.vector
. To
turn smoothing off, so that cycles in pressure are determined by
simple first difference, set smoother
to NULL
.
String indicating the travel direction to be selected.
optional integer vector indicating the indices of last
datum in each profile stored within x
. Thus, the first profile
in the return value will contain the x
data from indices 1
to breaks[1]
. If breaks
is given, then all
other arguments except x
are ignored. Using breaks
is handy in cases where other schemes fail, or when the author
has independent knowledge of how the profiles are strung together
in x
; see example 3 for how breaks
might be used
for towyo data.
Logical indicating whether the array indices should be returned; the alternative is to return a vector of ctd objects.
An optional string indicating how to identify profiles
by unique values. Use "location"
to find profiles by a change in longitude and latitude, or use the name of any
of item in the data
slot in x
. In these cases, all the
other arguments except x
are ignored. However, if distinct
is not supplied, the other arguments are handled as described above.
an integer specifying whether debugging information is
to be printed during the processing. This is a general parameter that
is used by many oce
functions. Generally, setting debug=0
turns off the printing, while higher values suggest that more information
be printed. If one function calls another, it usually reduces the value of
debug
first, so that a user can often obtain deeper debugging
by specifying higher debug
values.
Optional extra arguments that are passed to the smoothing function, smoother
.
If arr.ind=TRUE
, a data frame with columns start
and end
, the indices
of the downcasts. Otherwise, a vector of ctd
objects. In this second case,
the station names are set to a form like "10/3"
, for the third profile within an
original ctd object with station name "10"
, or to "3"
, if the original
ctd object had no station name defined.
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.
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)
# }
# NOT RUN {
# }
Run the code above in your browser using DataLab