用python读取MiniSEED格式文件

本文介绍如何使用Python读取和处理MiniSEED格式的数据,详细解析解压缩过程,虽然目前尚未支持输出为SAC格式,但能将数据导出为文本文件。
摘要由CSDN通过智能技术生成

完整的MiniSEED解压缩处理,不过输出SAC暂时未实现,只输出一个文本文件。

import struct
import sys,datetime
import pylab

def mseed_btime2pydatetime(btime0):
	year=int(btime0[0])
	nDay=int(btime0[1])
	y0=year-1
	dt0=datetime.datetime(y0,12,31)
	td=datetime.timedelta(days=nDay)
	dt1=dt0+td

	dt9=datetime.datetime(dt1.year,dt1.month,dt1.day,int(btime0[2]),int(btime0[3]),int(btime0[4]),int(btime0[6])*100)
	return dt9

#xx	
class mseed_data_record():
	#only data
	def __init__(self):
		dataDiff=[]
		dataVal=[]
		dataTime=[]
		dataTimeFlag=[]
		x0=0
		x1=0
		#dataBtime
		#dataOption
		#dataFirst
	
class mseed_record_parser:
	def parse(self,recordBin,infoLevel):
		#m_recordBin=recordBin
		self.m_InfoLevel=infoLevel
		dataDiff=[]
		dataVal=[]
		dataTime=[]
		dataTimeFlag=[]
	
		#frame0
		sFrame=recordBin[:64]
		(dataBtime,dataOption,dataFirst)=self._parse_frame0(sFrame)
		if self.m_InfoLevel>0:
			print '='*4,(dataFirst),"="*4
		if self.m_InfoLevel>1:
			print 'btime,samplenum:',dataBtime,dataOption
		
		self.time0=mseed_btime2pydatetime(dataBtime)
		#print self.time0.strftime('%Y-%m-%d %H:%M:%S %f')
		
		#frame1
		sFrame=recordBin[64:128]
		dataBuff=self._parse_frame1(sFrame)
		dataDiff.extend(dataBuff)
		
		#frame2-7
		for i in range(2,8): #512/64=8
			sFrame=recordBin[i*64:(i+1)*64]
			(dataBuff,n1)=self._parse_frame(sFrame)
			if n1==0:
				pass
			else:
				dataDiff.extend(dataBuff)
		if self.m_InfoLevel>1:
			print "x0,xn:",x0,xn
			print "datacount(read,get):",dataOption[0],len(dataDiff)
			
		#value from diff
		if len(dataDiff)>0 :
			v=self.x0
			dataVal.append(self.x0)
			dataTime.append(self.time0)
			dataTi
% Known encoding formats are the following FDSN codes: % 0: ASCII % 1: 16-bit integer % 2: 24-bit integer (untested) % 3: 32-bit integer % 4: IEEE float32 % 5: IEEE float64 % 10: Steim-1 % 11: Steim-2 % 12: GEOSCOPE 24-bit (untested) % 13: GEOSCOPE 16/3-bit gain ranged % 14: GEOSCOPE 16/4-bit gain ranged (untested) % 19: Steim-3 (alpha and untested) % % See also MKMSEED to export data in miniSEED format. % % % Author: Franois Beauducel % Institut de Physique du Globe de Paris % Created: 2010-09-17 % Updated: 2012-04-21 % % Acknowledgments: % Ljupco Jordanovski, Jean-Marie Saurel, Mohamed Boubacar, Jonathan Berger, % Shahid Ullah. % % References: % IRIS (2010), SEED Reference Manual: SEED Format Version 2.4, May 2010, % IFDSN/IRIS/USGS, http://www.iris.edu % Trabant C. (2010), libmseed: the Mini-SEED library, IRIS DMC. % Steim J.M. (1994), 'Steim' Compression, Quanterra Inc. % History: % [2012-04-21] % - Correct bug with Steim + little-endian coding % (thanks to Shahid Ullah) % [2012-03-21] % - Adds IDs for warning messages % [2011-11-10] % - Correct bug with multiple channel name length (thanks to % Jonathan Berger) % [2011-10-27] % - Add LocationIdentifier to X.ChannelFullName % [2011-10-24] % - Validation of IEEE double encoding (with PQL) % - Import/plot data even with file integrity problem (like PQL) % [2011-07-21] % - Validation of ASCII encoding format (logs) % - Blockettes are now stored in substructures below a single % field X.BLOCKETTES % - Add import of blockettes 500 and 2000 % - Accept multi-channel files with various data coding % [2010-10-16] % - Alpha-version of Steim-3 decoding... % - Extend output parameters with channel detection % - Add gaps and overlaps on plots % - Add possibility to force the plot % [2010-10-02] % - Add the input formats for GEOSCOPE multiplexed old data files % - Additional output argument with gap and overlap analysis % - Create a plot when no output argument are specified % - Optimize script coding (30 times faster STEIM decoding!) % % [2010-09-28] % - Correction of a problem with STEIM-1 nibble 3 decoding (one % 32-bit difference) % - Add reading of files without blockette 1000 with additional % input arguments (like Seismic Handler output files). % - Uses warning() function instead of fprintf().
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值