This page refers to the old SeisComP 3 version, and may no longer be accurate.
See seiscomp.de for the latest version.
Dump waveforms to a file
The Goal
dumpwaveform is a python script to dump waveforms from different acquisition sources (File/SeedLink/ArcLink) to stdout.
An example call would be: python dumpwaveform.py -I arclink://localhost:18001 --stream GE.UGM..BHZ --begin "2010-03-29 08:14:00" --end "2010-03-29 08:14:10"
Python script
# -*- coding: utf-8 -*-
############################################################################
# Copyright (C) 2009 by gempa GmbH #
# #
# author: Jan Becker, Bernd Weber (gempa GmbH) #
# email: jabe@gempa.de #
############################################################################
import sys, traceback
import seiscomp3.Client
class DumpWaveform(seiscomp3.Client.Application):
def __init__(self, argc, argv):
seiscomp3.Client.Application.__init__(self, argc, argv)
self.setMessagingEnabled(False)
self.setDatabaseEnabled(False, False)
self.setDaemonEnabled(False)
self._startTime = None
self._endTime = None
self._streamparameter = []
self._recordURL = "combined://localhost:18000;localhost:18001"
def createCommandLineDescription(self):
self.commandline().addGroup("Stream")
self.commandline().addStringOption("Stream", "begin", "specify the lower bound of the time interval")
self.commandline().addStringOption("Stream", "end", "specify the upper bound of the time interval")
self.commandline().addStringOption("Stream", "stream", "specify the stream (Net.Sta.Loc.Chan)")
self.commandline().addGroup("Source")
self.commandline().addStringOption("Source", "record-url,I", "specify the recordURL (combined://localhost:18000;localhost:18001)")
return True
def init(self):
try:
if not seiscomp3.Client.Application.init(self): return False
try:
start = self.commandline().optionString("begin")
self._startTime = seiscomp3.Core.Time()
if self._startTime.fromString(start, "%F %T") == False:
print >> sys.stderr, "Wrong 'begin' format '%s' -> setting to None" % start
except:
print >> sys.stderr, "Wrong 'begin' format -> setting to None"
self._startTime = seiscomp3.Core.Time()
print >> sys.stderr, "Setting start to %s" % self._startTime.toString("%F %T")
try:
self._recordURL = self.commandline().optionString("record-url")
if self._recordURL == "":
print >> sys.stderr, "URL empty setting to 'combined://localhost:18000;localhost:18001'"
except: pass
try:
end = self.commandline().optionString("end")
self._endTime = seiscomp3.Core.Time.FromString(end, "%F %T")
except:
self._endTime = seiscomp3.Core.Time.GMT()
try:
stream = self.commandline().optionString("stream")
self._streamparameter = stream.split(".")
except: pass
if len(self._streamparameter) == 0:
print >> sys.stderr, "stream empty"
return False
print >> sys.stderr, "Setting end to %s" % self._endTime.toString("%F %T")
return True
except:
info = traceback.format_exception(*sys.exc_info())
for i in info: sys.stderr.write(i)
def run(self):
try:
recordStream = seiscomp3.IO.RecordStream.Open(self._recordURL)
if not recordStream:
seiscomp3.Logging.error("could not open recordstream '%s'" % self._recordURL)
return False
recordStream.setStartTime(self._startTime)
recordStream.setEndTime(self._endTime)
recordStream.addStream(self._streamparameter[0], self._streamparameter[1], self._streamparameter[2], self._streamparameter[3])
print >> sys.stderr, "added stream %s" % ".".join(self._streamparameter)
print >> sys.stderr, "waiting for data..."
recordInput = seiscomp3.IO.RecordInput(recordStream, seiscomp3.Core.Array.DOUBLE, seiscomp3.Core.Record.DATA_ONLY)
try:
for record in recordInput:
if record:
data = seiscomp3.Core.DoubleArray.Cast(record.data())
if data:
#print "%s %s %s %f %d" % (record.streamID(), record.startTime().iso(), record.endTime().iso(), record.samplingFrequency(), data.size())
stime = record.startTime()
fsamp = record.samplingFrequency()
delta = 1.0 / fsamp
for i in range(0, data.size()):
print "%s\t%f" % (stime.iso(), data.get(i))
stime = stime + seiscomp3.Core.TimeSpan(delta)
except:
print >> sys.stderr, "end of data..."
return True
except:
info = traceback.format_exception(*sys.exc_info())
for i in info: print >> sys.stderr, i
app = DumpWaveform(len(sys.argv), sys.argv)
sys.exit(app())

