ctdFindProfiles {oce} | R Documentation

## Find Profiles within a Tow-Yow CTD Record

### Description

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.

### Usage

    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"), ...)

### Arguments

`x` | A `ctd` object, i.e. one inheriting from `ctd-class`.
`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 `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`.

`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 `cutoff` through `direction` are ignored. This argument can be handy when the other scheme fails, because it gives complete control to the user (example 3).
`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 `"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.

`debug`

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`.

### Details

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.

### Value

If `arr.ind=TRUE`, a data frame with columns `start` and `end`, the indices of the downcasts. Otherwise, a vector of `ctd` objects.

### Author(s)

Dan Kelley and Clark Richards

### See Also

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`

### Examples

    ## 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)

[Package oce version 0.9-22 Index]