ODF (Ocean Data Format) is a
format developed at the Bedford Institute of Oceanography and also used
at other Canadian Department of Fisheries and Oceans (DFO) facilities
(see references 1 and 2).
It can hold various types of time-series data, which includes a variety
of instrument types. Thus,
is used by
read.ctd.odf for CTD data, etc. As of mid-2018,
read.odf() is still in development, with features being added as a
project with DFO makes available more files.
read.odf( file, columns = NULL, header = "list", exclude = NULL, debug = getOption("oceDebug") )
the file containing the data.
An optional list that can be used to convert unrecognized
data names to resultant variable names. For example,
An indication of whether, or how, to store the entire
ODF file header in the
either a character value holding a regular
expression that is used with
an integer specifying whether debugging information is
to be printed during the processing. This is a general parameter that
is used by many
An oce object.
Note that some elements of the metadata are particular to ODF objects,
are inferred from ODF items named
SOUNDING, respectively. In addition, the more common metadata
waterDepth, which is used in
ctd objects to refer to
the total water depth, is set to
sounding if that is finite,
ODFNames2oceNames() is used to translate
data names from the ODF file to standard
oce names, and
handles conversion for a few non-standard units. The documentation
ODFNames2oceNames() should be consulted for more
Some metadata items may be specific to certain instruments, and
certain research groups. It can be important for analysts to be aware of
the conventions used in datasets that are under study.
For example, as of June 2018,
objects created at the Bedford Institute of Oceanography may
have a metadata item named
DEPTH_OFF_BOTTOM in ODF files), which is not typically
ctd files. This item illustrates the renaming
convention, from the CAMEL_CASE used in ODF files to the snakeCase
used in oce. Bearing this conversion in mind, users should not
find it difficult to understand the meaning of items that
stores within the
metadata slot. Users should bear in mind
that the whole ODF header is saved as a list by
calling the function with
header="list", after which
(rval[["header"]]) or View
can be used to isolate any information of interest (but bear in mind
that suffices are used to disambiguate sibling items of identical
name in the ODF header).
ODF files do not store information on the temperature or salinity scale, and
assumes these to be ITS-90 and PSS-78, respectively. These scales may be incorrect for old
data files. Note that the temperature scale can be converted from old scales
T90fromT48(), although the change will be in
a fraction of a millidegree, which probably exceeds reasonable confidence in old data.
For sources that describe the ODF format, see the documentation for the odf.
ODF2oce() will be an alternative to this, once (or perhaps if) a
package is released by the Canadian Department of Fisheries and Oceans.
Other things related to odf data:
library(oce) # # 1. Read a CTD cast made on the Scotian Shelf. Note that the file's metadata # states that conductivity is in S/m, but it is really conductivity ratio, # so we must alter the unit before converting to a CTD object. Note that # read.odf() on this data file produces a warning suggesting that the user # repair the unit, using the method outlined here. odf <- read.odf(system.file("extdata", "CTD_BCD2014666_008_1_DN.ODF.gz", package="oce"))#> Warning: "CRAT_01" should be unitless, but the file states the unit as "S/m" so that is retained in the object metadata. This will likely cause problems. See ?read.odf for an example of rectifying this unit error.ctd <- as.ctd(odf) ## so we can e.g. extract potential temperature ctd[["conductivityUnit"]] <- list(unit=expression(), scale="") # # 2. Make a CTD, and plot (with span to show NS) plot(ctd, span=500)# # 3. Highlight bad data on TS diagram. (Note that the eos # is specified, because we will extract practical-salinity and # UNESCO-defined potential temperatures for the added points.) plotTS(ctd, type="o", eos="unesco") # use a line to show loopsbad <- ctd[["QCFlag"]]!=0 points(ctd[['salinity']][bad],ctd[['theta']][bad],col='red',pch=20)