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())