RecordStream

RecordStream interface for SeisComP.

Description

SeisComP applications access waveform data through the RecordStream interface. The following tables lists available implementations:

Name

Service Prefix

Description

SeedLink

slink

Connects to SeedLink server

ArcLink

arclink

Connects to an ArcLink server

FDSNWS

fdsnws

Connects to FDSN Web service

File

file

Reads records from file

SDSArchive

sdsarchive

Reads records from SeisComP archive (SDS)

ODCArchive

odcarchive

Reads records from Orpheus Data Center archive (ODC 1)

Memory

memory

Reads records from memory

Combined

combined

Combines archive and real-time stream

Balanced

balanced

Distributes requests to multiple proxy streams

Decimation

dec

Decimates (resamples) a proxy stream

Resample

resample

Resamples (up or down) a proxy stream to a given sampling rate

Application

The RecordStream parameters considered by an application can be provided like a URI in 2 alternative ways:

Implementations

FDSNWS

This RecordStream fetches data from a FDSN Web service. The source is read as an URL.

Examples

URI: service://source?options

  • fdsnws://service.iris.edu:80/fdsnws/dataselect/1/query

File

This RecordStream reads data from a file. The source is read as an file path. If the source is set to ‘-‘ the data is read from stdin. By default the record type is set to mseed. If a file name extension is available the record type is set as follows:

Extension

Record Type

*.xml

xml

*.bin

binary

*.mseed

mseed

Examples

URI: service://source

  • file://-

  • file:///tmp/input.mseed

SDSArchive

This RecordStream reads data from one or more SeisComP (SDS) archives using the File RecordStream. The source is interpreted as a directory path list separated using commas.

Example

URI: service://source

  • sdsarchive:///home/sysop/seiscomp/var/lib/archive

  • sdsarchive:///SDSA,/SDSB,/SDSC

Different SDS are not merged, but are read sequentially depending on data existence. If a requested file is missing in the current SDS, it is searched for in the archive next in the list. On success it will deliver all the rest of files for the current channel from this SDS archive. On failure the next SDS archive is searched.

This process is repeated for each requested channel individually. It always starts to search data from the first given SDS to the last one, for each data channel.

ODCArchive

This RecordStream reads data from an ODC 1 archive using the File RecordStream. The source is interpreted as a directory path.

Example

URI: service://source

  • odcarchive:///path/to/record/archive

Memory

This RecordStream reads data from memory and is only useful for developing applications. For instance a record sequence stored in an internal buffer could be passed to an instance of this RecordStream for reading.

Combined

This RecordStream combines one archive and one real-time RecordStream, e.g. ArcLink and SeedLink. First the archive stream is read up to the size of the real-time buffer. Then the acquisition is switched to the real-time stream. The syntax for the source is similar to an URL:

URI: service://source??options

combined://real-time-stream;archive-stream??parameters

By default the real-time stream is set to SeedLink and the archive-stream is set to ArcLink. Any other streams may be configured. The parameters of the combined stream are separated by 2 question marks (??) in order to distinguish them from the parameters used in the proxy streams:

  • slinkMax|rtMax|1stMax - Buffer size in seconds of the first stream (typically the real-time stream), default: 3600

    Time spans can be configured with an additional and optional suffix:

    Suffix

    Multiplicator

    s

    1

    m

    60

    h

    3600

    d

    86400

    w

    86400*7

  • splitTime - The absolute time of the separation of both sources. The argument is an ISO time string, e.g. 2018-05-10T12:00:00Z or a year, e.g. 2018, which is the same as 2018-01-01T00:00:00.000Z. splitTime can be used if the waveform archives are spread over several directories or harddisks. See also the examples.

The combined record stream may be nested allowing the configuration of a (theoretically) infinite number of archive streams. The URI syntax for a nested configuration uses parenthesis:

combined://real-time-stream;combined/(archive-stream1;archive-stream2??parameters)??parameters

Examples

URI: service://source?options

URI

Description

combined://localhost:18000;localhost:18001

Seedlink on localhost:18000 combined with Arclink on localhost 18001

combined://slink/localhost:18000;arclink/localhost:18001

Same as above

combined://;

Same as above

combined://:18042;?user=foo&pwd=secret??rtMax=1800

Seedlink on localhost:18042 combined with Arclink on localhost 18001, real-time (SeedLink) buffer size set to 30min

combined://slink/localhost:18000;sdsarchive//home/sysop/seiscomp/var/lib/archive

Seedlink combined with SDS archive

combined://slink/localhost:18000;combined/(arclink/localhost:18001;arclink/localhost:18002??1stMax=30d)??1stMax=1h

Seedlink combined with a combined record stream using two Arclink sources

combined://slink/localhost:18000;combined/(sdsarchive//home/sysop/seiscomp/var/lib/archive;combined/(sdsarchive//home/sysop/seiscomp/var/lib/archive2017;sdsarchive//home/sysop/seiscomp/var/lib/archive2016??splitTime=2017)??splitTime=2018)

Seedlink combined with a combined recordStream providing access to 3 different SDS archives separated by time. The first SDS archive contains the most recent archived data. The other two contain the data from 2016 and 2017.

combined://slink/localhost:18000;combined/(sdsarchive//home/sysop/seiscomp/var/lib/archive;combined/(sdsarchive//home/sysop/seiscomp/var/lib/archive2017;sdsarchive//home/sysop/seiscomp/var/lib/archive2016??splitTime=2017-06-01T00:00:00Z)??splitTime=2018-06-01T00:00:00Z)

Seedlink combined with a combined recordStream providing access to 3 different SDS archives separated by time. The first SDS archive contains the most recent archived data. The other two are separated in mid of 2016.

Balanced

This RecordStream distributes requests quasi-equally (but deterministically) to multiple proxy streams. It can be used for load balancing and to improve failure tolerance. The algorithm to choose a proxy stream (counting from 0) is based on station code and can be expressed in Python as follows:

stationCode = "WLF"
nproxies = 2

x = 0
for c in stationCode:
    x += ord(c)

print("choosing proxy stream", x % nproxies)

Examples

URI: service://source

URI

Description

balanced://slink/server1:18000;slink/server2:18000

Distribute requests to 2 SeedLink RecordStreams

balanced://combined/(server1:18000;server1:18001);combined/(server2:18000;server2:18001)

Distribute requests to 2 Combined RecordStreams

Decimation

This RecordStream decimates (resamples) a proxy stream, e.g. SeedLink. The syntax for the source is similar to an URL:

dec://proxy-stream?parameters/address

Optional parameters are:

  • rate - target sampling rate in Hz, default: 1

  • fp - default: 0.7

  • fs - default: 0.9

  • cs - coefficient scale, default: 10

Examples

URI: service://source?options

  • dec://slink/localhost:18000

  • dec://file?rate=2/-

  • dec://combined/;

Resample

This RecordStream resamples (up or down) a proxy stream, e.g. SeedLink, to a given sampling rate. The syntax for the source is similar to an URL:

resample://proxy-stream?parameters/address

Optional parameters are:

  • rate - target sampling rate in Hz, default: 1

  • fp - default: 0.7

  • fs - default: 0.9

  • cs - coefficient scale, default: 10

  • lw - lanczos kernel width, default: 3

  • debug - enables debug output, default: false

Examples

URI: service://source?options

  • resample://slink/localhost:18000

  • resample://file?rate=2/-

  • resample://combined/;