完整的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