Nodal

The Nodal submodule is intended to handle data from nodal arrays. Nodal arrays differ from standard seismic data in that the start and end times of data segments are usually synchronized.

Reading Nodal Data Files

SeisBase.Nodal.read_nodalFunction
S = read_nodal(fmt, filestr [, keywords])

Read nodal data from file filestr into new NodalData object S.

Keywords

KWTypeDefaultUsed ByMeaning
chansChanSpecInt64[]allchannel numbers to read in
nnString"N0"allnetwork name in :id
sTimeSpecsilixastart time [1]
tTimeSpecsilixaend time
vInteger0silixaverbosity
  1. Special behavior: Real values supplied to s= and t= are treated as seconds from file begin; most SeisBase functions treat Real as seconds relative to current time.

Non-Standard Behavior

Real values supplied to keywords $s=$ and $t=$ are treated as seconds relative to file begin time. Most SeisBase functions that accept TimeSpec arguments treat Real values as seconds relative to $now()$.

Supported File Formats

File FormatStringNotes
Silixa TDMSsilixaLimited support; see below
SEG YsegyField values are different from read_data output

Silixa TDMS Support Status

  • Currently only reads file header and samples from first block
  • Not yet supported (test files needed):
    • first block additional samples
    • second block
    • second block additional samples
  • Awaiting manufacturer clarification:
    • parameters in :info
    • position along cable; currently loc.(x,y,z) = 0.0 for all channels
    • frequency response; currently $:resp$ is an all-pass placeholder

Nodal SEG Y Support Status

See SEG Y Support.

See also: TimeSpec, parsetimewin, read_data

source

Working with NodalData objects

NodalData objects have one major structural difference from SeisData objects: the usual data field :x is a set of views to an Array{Float32, 2} (equivalent to a Matrix{Float32}) stored in field :data. This allows the user to apply two-dimensional data processing operations directly to the data matrix.

NodalData Assumptions

  • S.t[i] is the same for all i.
  • S.fs[i] is constant for all i.
  • length(S.x[i]) is constant for all i.

Other Differences from SeisData objects

  • Operations like push! and append! must regenerate :data using hcat(), and therefore consume a lot of memory.
  • Attempting to push! or append! channels of unequal length throws an error.
  • Attempting to push! or append! same-length channels with different :t or :fs won't synchronize them! You will instead have columns in :data that aren't time-aligned.
  • Irregularly-sampled data (:fs = 0.0) are not supported.

Types

SeisBase.NodalLocType
NodalLoc

Instrument position along a nodal array

Nodal location. Currently only stores position along optical cable.

  • x::Float64 (meters)
  • y::Float64 (meters)
  • z::Float64 (meters)
source
SeisBase.Nodal.NodalDataType
NodalData

SeisData variant for multichannel nodal array data.

NodalChannel

SeisChannel variant for a channel from a nodal array.

Fields

FieldDescription
:nNumber of sensors
:oxOrigin longitude
:oyOrigin latitude
:ozOrigin elevation
:infoCritical array info, shared by all sensors. [1]
:idChannel id. Uses NET.STA.LOC.CHA format when possible
:nameFreeform channel name
:locLocation (position) vector; only accepts NodalLoc
:fsSampling frequency in Hz
:gainScalar gain
:respInstrument response
:unitsString describing data units. UCUM standards are assumed.
:srcFreeform string describing data source.
:miscDictionary for non-critical information.
:notesTimestamped notes; includes automatically-logged information.
:tMatrix of time gaps in integer μs, formatted [Sample# Length]
:dataMatrix underlying time-series data
:xViews into :data corresponding to each channel
  1. Not present in, or retained by, NodalChannel objects.

See also: SeisData, InstrumentPosition, InstrumentResponse

source