Working with Data

This section is a tutorial for tracking and managing SeisBase data.

Creating Data Containers

Create a new, empty object using any of the following commands:

ObjectPurpose
SeisChannel()A single channel of univariate (usually time-series) data
SeisData()Multichannel univariate (usually time-series) data
SeisHdr()Header structure for discrete seismic events
SeisEvent()Discrete seismic events; includes SeisHdr and SeisData objects

Acquiring Data

  • Read files with read_data<readdata>
  • Make web requets with get_data<getdata>
  • Initiate real-time streaming sessions to SeisData objects with seedlink<seedlink-section>

Keeping Track

A number of auxiliary functions exist to keep track of channels:

SeisBase.findchanFunction
findchan(id::String, S::GphysData)

Get all channel indices i in S with id ∈ S.id[i]

Can do partial id matches, e.g. findchan(S, "UW.") returns indices to all channels whose IDs begin with "UW.".

source
SeisBase.findidFunction
findid(id::String, S::GphysData)
findid(S::GphysData, id::String)

Get the index of the first channel in S where id .== S.id is true. Returns 0 for failure.

findid(S::GphysData, T::GphysData)

Get index corresponding to the first channel in T that matches each ID in S; equivalent to [findid(id,T) for id in S.id].

findid(C::SeisChannel, S::SeisData)
findid(S::SeisData, C::SeisChannel)

Get the index to the first channel c in S where S.id[c]==C.id.

source
ConventionCharacters Removed:sup:¹
"File""$*/:<>?@\^|~DEL
"HTML""&';<>©DEL
"Julia"$\DEL
"Markdown"!#()*+-.[\]_`{}
"SEED".DEL
"Strict"!"#$%&'()*+,-./:;<=>?@[\]^`{|}~DEL

¹ DEL here is \x7f (ASCII/Unicode U+007f).

SeisBase.timestampFunction
timestamp()
timestamp(t::DateTime)
timestamp(t::Real)
timestamp(t::String)

Return current time formatted YYYY-mm-ddTHH:MM:SS.

source
SeisBase.track_off!Function
u = track_off!(S::SeisData)

Turn off tracking in S and return a boolean vector of which channels have been added or altered significantly.

source
SeisBase.track_on!Function
track_on!(S::SeisData)

Track changes to S.id, changes to channel structure of S, and the sizes of data vectors in S.x. Does not track data processing operations to any channel i unless length(S.x[i]) changes for channel i.

Warning: If you have or suspect gapped data in any channel, do not use ungap! while tracking is active.

source

Source Logging

The :src field records the last data source used to populate each channel; usually a file name or URL.

When a data source is added to a channel, including the first time data are added, it's also recorded in the :notes field. Use show_src(S, i) to print all data sources for channel S[i] to stdout (see below for details).

Channel Maintenance

A few functions exist specifically to simplify data maintenance:

SeisBase.prune!Function
prune!(S::SeisData)

Delete all channels from S that have no data (i.e. S.x is empty or non-existent).

source
SeisBase.pullFunction
T = pull(S::SeisData, id::String)

Extract the first channel with id = id from S and return it as a new SeisChannel structure. The corresponding channel in S is deleted.

T = pull(S::SeisData, i::Union{Integer, UnitRange, Array{In64,1}}

Extract channel i from S as a new SeisChannel struct, deleting it from S.

source

Taking Notes

Functions that add and process data note these operations in the :notes field of each object affected. One can also add custom notes with the note! command:

SeisBase.note!Function
note!(S::SeisData, i::Int64, s::String)

Append s with a timestamp to the :notes field of channel number i of S.

note!(S::SeisData, id::String, s::String)

As above for the first channel in S whose id is an exact match to id.

note!(S::SeisData, s::String)

Append s to S.notes and time stamp. If txt contains a channel name or ID, only the channel mentioned is annotated; otherwise, all channels are annotated.

See also: clear_notes!, show_processing, show_src, show_writes

source
SeisBase.clear_notes!Function
clear_notes!(S::GphysData)

Clear all notes from S and leaves a note about this.

clear_notes!(S::SeisData, i::Int64, s::String)

Clear all notes from channel i of S and leaves a note about this.

clear_notes!(S::SeisData, id::String, s::String)

As above for the first channel in S whose id is an exact match to id.

See also: note!, show_processing, show_src

source

Checking Your Work

If you need to check what's been done to a channel, or the sources present in the channel data, these commands are helpful:

SeisBase.show_processingFunction
show_processing(S::GphysData)
show_processing(S::GphysData, i::Int64)
show_processing(C::GphysChannel)

Tabulate and print all processing steps in :notes to stdout in human-readable format.

See also: show_src, show_writes, note!, clear_notes!

source
SeisBase.show_srcFunction
show_src(S::GphysData)
show_src(S::GphysData, i::Int64)
show_src(C::GphysChannel)

Tabulate and print all data sources logged in :notes to stdout in human-readable format.

See also: show_processing, show_writes, note!, clear_notes!

source
SeisBase.show_writesFunction
show_writes(S::GphysData)
show_writes(S::GphysData, i::Int64)
show_writes(C::GphysChannel)

Tabulate and print all data writes logged in :notes to stdout in human-readable format.

See also: show_processing, show_src, note!, clear_notes!

source