adv
.read.adv(file, from=1, to, by=1, tz=getOption("oceTz"),
type=c("nortek", "sontek", "sontek.adr", "sontek.text"),
header=TRUE,
longitude=NA, latitude=NA,
start, deltat,
debug=getOption("oceDebug"), monitor=FALSE, processingLog)read.adv.nortek(file, from=1, to, by=1, tz=getOption("oceTz"),
header=TRUE,
longitude=NA, latitude=NA,
type=c("vector", "aquadopp"),
haveAnalog1=FALSE, haveAnalog2=FALSE,
debug=getOption("oceDebug"), monitor=FALSE, processingLog)
read.adv.sontek.serial(file, from=1, to, by=1, tz=getOption("oceTz"),
longitude=NA, latitude=NA,
start, deltat,
debug=getOption("oceDebug"), monitor=FALSE, processingLog)
read.adv.sontek.adr(file, from=1, to, by=1, tz=getOption("oceTz"),
header=TRUE,
longitude=NA, latitude=NA,
debug=getOption("oceDebug"), monitor=FALSE, processingLog)
read.adv.sontek.text(basefile, from=1, to, by=1, tz=getOption("oceTz"),
originalCoordinate="xyz",
transformationMatrix,
longitude=NA, latitude=NA,
debug=getOption("oceDebug"), monitor=FALSE, processingLog)
file
as a vector of filenames, to handle the case of
data split into files by a data logger. In the multi-file case, header
read.adv.sontek.text
). The actual filenames are constructed by appending ".hd1"
and ".ts1"
to the base name.as.POSIXct
(hint: use tz="UTC"
). This argument is ignored if
header==FALSE
. Sfrom
. This
is ignored if header==FALSE
.header==FALSE
. Otherwise, if this is an integer, then by-1
profiles
are skipped between each pair of profiles that is read. as.POSIXct
. This
is mandatory if header
is FALSE
. This may be a vector of times, if
filename
is a vecheader=FALSE
.)"beam"
,
"xyz"
, "enu"
or "other"
. (This is needed for the case of multiple files
that were created by a data logger, because the header inforrbind(c(2.710, -1.409, -1.299), c(0.071, 2.372, -2.442), c(0.344, 0.344, 0.34
read.adv
to dispatch to
one of the speciality functions.read.adv.nortek()
calls
read.header.nortek()
, so that read.adv.nortek(...,debug=2)
TRUE
to provide an indication of every data burst read.class
"adv"
, which contains measurements made with an
ADV device. This is a list containing lists named metadata
, data
, and
processingLog
.
The metadata
contains information as given in the following table. The ``Nortek name'' is
the name used in the Nortek System Integrator Guide [reference 1] and the ``Sontek name'' is the
name used in the relevant Sontek documentation. References are given in square brackets. metadata
name Nortek name Sontek name Meaning
manufacturer
- - Either "nortek"
or "sontek"
instrumentType
- - Either "vector"
or "adv"
filename
- - Name of data file(s)
latitude
- - Latitude of mooring (if applicable)
longitude
- - Longitude of mooring (if applicable)
numberOfSamples
- - Number of data samples in file
numberOfBeams
NBeams [1 p18] - Number of beams (always 3)
numberOfBeamSequencesPerBurst
NPings - number of beam sequences per burst
measurementInterval
MeasInterval [1 p31] -
samplingRate
512/(AvgInterval) [1 p30; 4] -
}
The data
list contains items with names corresponding to adp
objects, with an
exception for Nortek data. Nortek instruments report some things at a time interval that is
longer than the velocity sampling, and these are stored in data
as timeSlow
,
headingSlow
, pitchSlow
, rollSlow
, and temperatureSlow
; if burst
sampling was used, there will also be items recordsBurst
and timeBurst
.
The processingLog
is in the standard format.
read.adv.nortek
contains some assumptions that are noted here, so that
users will be aware of possible problems. A prominent example is the specification of the sampling rate, stored in
metadata$sampingRate
in the return value. Repeated examination of the System Integrator
Guide [1] failed to indicate where this value is stored in the various headers contained in
Vector datasets. After some experimentation with a few data files, read.adv.nortek
was
set up to calculate metadata$samplingRate
as 512/AvgInterval
where
AvgInterval
is a part of the ``User Configuration'' header [1 p30], where the
explanation is ``average interval in seconds''). This formula was developed through trial and
error, but it was confirmed later on the Nortek discussion group, and it should appear in
upcoming versions of [1].
Another basic issue is the determination of whether an instrument had recorded in continuous
mode or burst mode. One might infer that TimCtrlReg
in the ``User Configuration'' header
[1 p30] determines this, in bits 1 and 2. However, this was the case in test files available to
the author. For this reason, read.adv.nortek
infers the mode by reverse engineering of
data files of known configuration. The present version of read.adv.nortek
determines the
sampling mode from the ``NRecords
'' item of the ``Vector Velocity Data'' header, which
seems to be 0 for data collected continuously, and non-zero for data collected in bursts.
Taking these things together, we come upon the issue of how to infer sampling times for Nortek
instruments. There do not seem to be definitive documents on this, and so
read.adv.nortek
is based partly on information (of unknown quality) found on Nortek
discusson boards. The present version of read.adv.nortek
infers the times of velocity
observations differently, depending on whether the instrument was set to record in burst mode or
continuous mode. For burst mode, times stated in the burst headers are used, but for continous
mode, times stated in the ``vector system data'' are used. On the advice found on a Nortek
discussion board, the burst-mode times are offset by 2 seconds to allow for the instrument
warm-up period.
c(0x81,0x12)
for an ADV with no optional sensors
installed.c(0x83,0x18)
if a compass/tilt sensor is installed,
but no temperature or pressure sensors.c(0x85,0x16)
if temperature and/or pressure sensors
are installed, but no compass/tilt sensor.c(0x87,0x1c)
if a compass/tilt sensor is installed
in addition to temperature and/or pressure sensors.by
argument only has an effect on quickly-varying variables, such as the
fast timescale, velocity, backscatter, and amplitude It has no effect on slowly-varying
variables, such as heading, temperature, etc. And, for the Nortek case, it also has no effect on
the burst information. The reason for all of this is that it is not altogether clear what
by
should mean, for those variables. Indeed, this is an argument for deleting
by
from the argument list, and this may be done in a future version of read.adv
.Files without headers may be created in experiments in which a data logger was set up to monitor the serial data stream from an instrument. The lack of header information places a burden on the user, who must supply such basic information as the times of observations, the instrument orientation, the instrument coordinate system, etc. Example 3 below shows how to deal with such files. Three things should be noted.
read.adv
variant corresponding to the
instrument in question. (This is necessary becauseoceMagic
, which is used by the
genericread.oce
routine, cannot determine the type of instrument by examining a
file that lacks a header.)read
function must include a start time (start
) and the
number of seconds between data (deltat
), again, because the instrument data stream may
lack those things when the device is set to a serial mode. Also, of course, it is necessary to
setheader=FALSE
in the function call.read
function will have no way of knowing
the instrument orientation, the coordinate system being used, the transformation matrix to go
from"beam"
to"xyz"
coordinates, or the instrument heading, pitch, and roll, to
go from"xyz"
coordinates to"enu"
coordinates. Such things are illustrated in
example 3 below. In ADV data files, velocities are coded to signed 2-byte integers, with a
scale factor being used to convert to velocity in metres per second. These
two facts control the maximum recordable velocity and the velocity
resolution, values that may be retrieved for an ADV object name d
with
d[["velocityMaximum"]]
and d[["velocityResolution"]]
.
2. SonTek/YSI ADVField/Hydra Acoustic Doppler Velocimeter (Field) Technical Documentation (Sept 1, 2001).
3. Appendix 2.2.3 of the Sontek ADV operation Manual, Firmware Version 4.0 (Oct 1997).
4. Nortek Knowledge Center
adv-class
explains the structure
of ADV objects, and also outlines the other functions dealing with them.library(oce)
# A nortek Vector file
d <- read.oce("/data/archive/sleiwex/2008/moorings/m05/adv/nortek_1943/raw/adv_nortek_1943.vec",
from=as.POSIXct("2008-06-26 00:00:00", tz="UTC"),
to=as.POSIXct("2008-06-26 00:00:10", tz="UTC"))
plot(d, which=c(1:3,15))
Run the code above in your browser using DataLab