Coverage for /opt/obspy/update-docs/src/obspy/obspy/earthworm/waveserver : 42%

Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
# -*- coding: utf-8 -*- Low-level Earthworm Wave Server tools.
:copyright: The ObsPy Development Team (devs@obspy.org) & Victor Kress :license: GNU General Public License (GPLv2) (http://www.gnu.org/licenses/old-licenses/gpl-2.0.html) """
'F': 'success', 'FR': 'requested data right (later) than tank contents', 'FL': 'requested data left (earlier) than tank contents', 'FG': 'requested data lie in tank gap', 'FB': 'syntax error in request', 'FC': 'data tank corrupt', 'FN': 'requested tank not found', 'FU': 'unknown error' }
't4': '>f4', 't8': '>f8', 's4': '>i4', 's2': '>i2', 'f4': '<f4', 'f8': '<f8', 'i4': '<i4', 'i2': '<i2' }
""" given a tracebuf2 type string from header, return appropriate numpy.dtype object """ dtypestr = DATATYPE_KEY[tpstr] tp = np.dtype(dtypestr) return tp
""" """
""" Reads single tracebuf2 packet from beginning of input byte array tb. returns number of bytes read or 0 on read fail. """ if len(tb2) < 64: return 0 # not enough array to hold header head = tb2[:64] self.parseHeader(head) nbytes = 64 + self.ndata * self.inputType.itemsize if len(tb2) < nbytes: return 0 # not enough array to hold data specified in header dat = tb2[64:nbytes] self.parseData(dat) return nbytes
""" Parse tracebuf header into class variables """ packStr = '2i3d7s9s4s3s2s3s2s2s' dtype = head[-7:-5] if dtype[0] in 'ts': endian = '>' elif dtype[0] in 'if': endian = '<' else: raise ValueError self.inputType = getNumpyType(dtype) (self.pinno, self.ndata, ts, te, self.rate, self.sta, self.net, self.chan, self.loc, self.version, tp, self.qual, _pad) = \ struct.unpack(endian + packStr, head) if not tp.startswith(dtype): print 'Error parsing header: %s!=%s' % (dtype, tp) self.start = UTCDateTime(ts) self.end = UTCDateTime(te) return
""" Parse tracebuf char array data into self.data """ self.data = np.fromstring(dat, self.inputType) ndat = len(self.data) if self.ndata != ndat: print 'data count in header (%d) != data count (%d)' % (self.nsamp, ndat) self.ndata = ndat return
""" Return class contents as obspy.Trace object """ stat = Stats() stat.network = self.net.split('\x00')[0] stat.station = self.sta.split('\x00')[0] location = self.loc.split('\x00')[0] if location == '--': stat.location = '' else: stat.location = location stat.channel = self.chan.split('\x00')[0] stat.starttime = UTCDateTime(self.start) stat.sampling_rate = self.rate stat.npts = len(self.data) return Trace(data=self.data, header=stat)
""" Sets up socket to server and port, sends reqStr to socket and returns open socket """ else: s.send(reqStr + '\n')
""" Retrieves one newline terminated string from input open socket """ # see http://obspy.org/ticket/383 # indat = sock.recv(8192) except socket.timeout: print 'socket timeout in getSockCharLine()' return None else: return None
""" Listens for nbytes from open socket. Returns byte array as python string or None if timeout """ if timeout: sock.settimeout(timeout) chunks = [] btoread = nbytes try: while btoread: indat = sock.recv(min(btoread, 8192)) btoread -= len(indat) chunks.append(indat) except socket.timeout: print 'socket timeout in getSockBytes()' return None if chunks: response = ''.join(chunks) return response else: return None
""" Return list of tanks on server """ # only works on regular waveservers (not winston) getstr = 'MENUSCNL: %s %s %s %s %s\n' % (rid, scnl[0], scnl[1], scnl[2], scnl[3]) else: # added SCNL not documented but required print 'request returned %s - %s' % (flag, RETURNFLAG_KEY[flag]) return [] elif tokens[6] in DATATYPE_KEY: elen = 7 # length of return entry if location omitted else: print 'no type token found in getMenu' return [] float(l[5]), float(l[6]), l[7])) else: outlist.append((int(l[0]), l[1], l[2], l[3], '--', float(l[4]), float(l[5]), l[6])) return []
""" Reads data for specified time interval and scnl on specified waveserverV.
Returns list of tracebuf2 objects """ return [] nbytes = int(tokens[-1]) dat = getSockBytes(sock, nbytes) sock.close() tbl = [] new = tracebuf2() # empty..filled below bytesread = 1 p = 0 while bytesread and p < len(dat): bytesread = new.readTB2(dat[p:]) if bytesread: tbl.append(new) new = tracebuf2() # empty..filled on next iteration p += bytesread return tbl
""" Returns obspy.Stream object from input list of tracebuf2 objects """ if not tbuflist: return None tlist = [] for tb in tbuflist: tlist.append(tb.getObspyTrace()) strm = Stream(tlist) return strm |