admin管理员组文章数量:1552323
2024年1月31日发(作者:)
pass else: (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 (self.x0) (0) ('b') for i in range(1,len(dataDiff)): v+=dataDiff[i] (v) ("m")
#hits=100,btime step=10000/hits=100,microseconds step=10000 msc=10000*i msv=msc%1000000 sv=msc/1000000 td=lta(seconds=sv,microseconds=msv)
dt1=0+td (dt1) dataTimeFlag[len(dataDiff)-1]='e'
##!! #must match for data count if len(dataDiff)!=dataOption[0]: print "data count from parsing error(fromFile,parse):",dataOption[0],len(dataDiff) ()
return (dataDiff,dataVal,dataTime,dataTimeFlag,True)
def _frame_getW0Ck(self,w0): w0ck=[] w0b=bin(w0) bn=len(w0b)-2 #remove 0b ck='0'*(32-bn)+w0b[2:] for i in range(0,16): (ck[i*2:(i+1)*2]) return w0ck
def _parse2_Dnib4Ck11(self,val): vals=[] h2=(val>>30)&0x3 nv=0; bits=0 if h2==0: #6bit*5 bits=6; nv=5; m1 = 0x0000003f
if h2==1: #5bit*6 bits=5; nv=6; m1 = 0x0000001f
if h2==2: #4bit*7 bits=4; nv=7; m1 = 0x0000000f;
for i in range(0,nv): ((val>>(bits*i))&m1)
for i in range(len(vals)): if vals[i]>(2**bits)/2: vals[i]=vals[i]-(2**bits)
##print valW,bin(valW)
e() ##print "##(dnib-11)h2,vals:",h2,vals
return vals
def _parse2_Dnib4Ck10(self,val): vals=[] h2=(val>>30)&0x3 nv=0; bits=0 if h2==1: #30bit*1 ?? ==1 bits=30; nv=1; m1 = 0x3fffffff
#print "30bit:",val,bin(val) #()
if h2==2: #15bit*2 bits=15; nv=2; m1 = 0x00007fff
if h2==3: #10bit*3 bits=10; nv=3; m1 = 0x000003ff;
for i in range(0,nv): ((val>>(bits*i))&m1)
#sign for i in range(len(vals)): if vals[i]>(2**bits)/2: vals[i]=vals[i]-(2**bits)
##print valW,bin(valW) e() ##print "##(dnib-10)h2,vals:",h2,vals return vals
def _parse2_Byte1x4(self,val): vals=[] bits=8; nv=4; m1 = 0x000000ff;
for i in range(0,nv): ((val>>(bits*i))&m1)
for i in range(len(vals)): if vals[i]>(2**bits)/2: vals[i]=vals[i]-(2**bits)
##print valW,bin(valW) e() ##print "byte1x4",vals return vals
def _parse_package(self,valW,ck): vals0=[] if ck=='00': pass #print "ck=0" #()
if ck=='01': #1byte*4 vals0=self._parse2_Byte1x4(valW) ''' #ok,ok, same as cpp code sFmt='>bbbb' #sFmt_byte1='>bbbb' valBin=('>i',valW)
vals=(sFmt,valBin) vals0=list(vals) print valW print "ck,vals",ck,vals '''
if ck=='10':
vals0=self._parse2_Dnib4Ck10(valW) if ck=="11": vals0=self._parse2_Dnib4Ck11(valW) return vals0
#ok def _parse_frame0(self,sFrame): lineFlag=sFrame[:8] lineData=sFrame[8:] sSta=lineData[:5] sPos=lineData[5:7] sChn=lineData[7:10] sNet=lineData[10:12] sFmtBTime='>HHBBBBH' sFmtDataHeader='>HhhBBBBiHH' hdrDataBtime=lineData[12:22] hdrDataOption=lineData[22:40] dataBtime=(sFmtBTime,hdrDataBtime) dataOption=(sFmtDataHeader,hdrDataOption) return (dataBtime,dataOption,{'sta':sSta,'pos':sPos,'chn':sChn,'net':sNet,'flag':lineFlag})
#ok
def _parse_frame1(self,sFrame): dataBuff=[] Wn=('>Iii'+'i'*13,sFrame) w0=Wn[0] self.x0=Wn[1] =Wn[2] w0ck=self._frame_getW0Ck(w0) #print 'w0ck:',w0ck #print 'Wn:',Wn
for i in range(3,16): vals=self._parse_package(Wn[i],w0ck[i]) if not vals: pass else: (vals) return dataBuff
def _parse_frame(self,sFrame): dataBuff=[] Wn=('>I'+'i'*15,sFrame) w0=Wn[0] #maybe not exist data if w0>0 :
w0ck=self._frame_getW0Ck(w0) #print 'w0',w0ck #print 'Wn:',Wn
for i in range(1,16): vals=self._parse_package(Wn[i],w0ck[i]) if not vals: pass else:
(vals) return (dataBuff,1)
else: return (dataBuff,0)
class mseed_reader: ''' seed file read/write. 2013-06-20 by WangBin. '''
#ok def read(self,sFile): self.m_mseedfile=sFile #try f=open(sFile,'rb') n_all=() ()
self.g_dataDiff=[] self.g_dataVal=[] self.g_dataTime=[] self.g_dataTimeFlag=[] _bin_ok=True return True
def exportSacFile(self,sSacFile,pydatetimeFrom,pydatetimeTo,bBin): #export to sac file
#find gap fsac=open("d:","wt") dc=len(self.g_dataTimeFlag) for i in range(1,dc): #skip first b if self.g_dataTimeFlag[i]=='b': dt1=self.g_dataTime[i] dt0=self.g_dataTime[i-1] ts0=dt1-dt0 #hits=100 #if (s>0) or (econds>10000): ?? if _seconds()>0.01: (str(i)+"n") else: pass ()
if bBin==True: pass
if bBin==False: pass
def parseData(self,infoLevel): self.m_InfoLevel=infoLevel idxData=0 blocksize=512 self.g_dataDiff=[] self.g_dataVal=[]
self.g_dataTime=[] self.g_dataTimeFlag=[]
while True: recordBin=n_all[blocksize*idxData:blocksize*(idxData+1)] #seed=4096,mseed=512 if not recordBin: print ""
break;
if recordBin[6]=='D':
mrs=mseed_record_parser() (dataDiff,dataVal,dataTime,dataTimeFlag,result)=(recordBin,infoLevel)
if result==True: self.g_(dataDiff) self.g_(dataVal) self.g_(dataTime) self.g_(dataTimeFlag)
idxData=idxData+1
_ok=True
if self.m_InfoLevel==0: print "record,data count:",idxData,len(self.g_dataDiff)
def _export_temp(self): #export to file if len(self.g_dataDiff)>0 : #diff f3=open(self.m_mseedfile+"_","wt") for i in range(len(self.g_dataDiff)): (str(self.g_dataDiff[i])+'n') ()
if len(self.g_dataVal)>0 : #value
f4=open(self.m_mseedfile+"_","wt") for v in range(len(self.g_dataVal)): (self.g_dataTimeFlag[v]+" "+self.g_dataTime[v].strftime('%Y-%m-%d %H.%M.%S %f')+" "+str(self.g_dataVal[v])+'n') #(str(self.g_dataVal[v])+'n') ()
def plot(self): (1) npts=len(self.g_dataVal) (range(1,npts+1),self.g_dataVal,linewidth=0.3) g(self.m_mseedfile+".") ()if __name__=='__main__': ''' g_InfoLevel: 0=rec count,data count; 1=rec-index,net,station; 2=frame0,x0,xn,datacount; 3=
''' g_InfoLevel=0
mseed=mseed_reader()
sFile='d:data_.D.2013.001' (sFile) ata(g_InfoLevel) #mseed._export_temp() #() sSacFile="d:" dt0=me(2013,01,01,0,0,1) dt1=me(2013,01,01,23,59,59) bBin=True
SacFile(sSacFile,dt0,dt1,bBin)
版权声明:本文标题:用python读取MiniSEED格式文件 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1706671946a180806.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论