SEGY writing support....

This commit is contained in:
cultpenguin
2005-09-26 20:29:37 +00:00
parent 0dc603820f
commit cf3154a61e
2 changed files with 137 additions and 0 deletions
+127
View File
@@ -365,6 +365,30 @@ def imageSegy(Data):
pylab.imshow(Data)
pylab.title('pymat test')
pylab.grid(True)
pylab.show()
def wiggle(Data,SH,skipt=1,maxval=8,lwidth=2):
"""
imageSegy(Data)
Image segy Data
"""
import pylab
t = range(SH['ns'])
# t = range(SH['ns'])*SH['dt']/1000000;
for i in range(0,SH['ntraces'],skipt):
trace=Data[:,i]
pylab.plot(i+trace/maxval,t,color='black',linewidth=lwidth)
for a in range(len(trace)):
if (trace[a]<0):
trace[a]=0;
# pylab.fill(i+Data[:,i]/maxval,t,color='k',facecolor='g')
pylab.fill(i+Data[:,i]/maxval,t,'k',linewidth=0)
pylab.title(SH['filename'])
pylab.grid(True)
pylab.show()
def getSegyTraceHeader(SH,THN='cdp',data='none'):
@@ -559,6 +583,109 @@ def getSegyHeader(filename):
printverbose('getSegyHeader : succesfully read '+filename,1)
return SegyHeader
def writeSegyStructure(filename,Data,SH,STH):
"""
writeSegyHeader(filename,Data,SegyHeader,SegyTraceHeaders)
Write SEGY file using SegyPy data structures
See also readSegy
(c) 2005, Thomas Mejer Hansen
"""
printverbose("writeSegy : Trying to write "+filename,0)
f = open(filename,'w')
# WRITE SEGY HEADER
for key in SH_def.keys():
pos=SH_def[key]["pos"]
format=SH_def[key]["type"]
value=SH[key]
# SegyHeader[key],index = putValue(value,f,pos,format,endian);
putValue(value,f,pos,format,endian);
txt = str(pos) + " " + str(format) + " Reading " + key + "=" + str(value)
#+"="+str(SegyHeader[key])
# printverbose(txt,-1)
# SEGY TRACES
sizeT = 240 + SH['ns']*4;
for itrace in range(SH['ntraces']):
index=3600+itrace*sizeT
printverbose('Writing Trace #'+str(itrace+1)+'/'+str(SH['ntraces']),10)
# WRITE SEGY TRACE HEADER
for key in STH_def.keys():
pos=index+STH_def[key]["pos"]
format=STH_def[key]["type"]
value=STH[key][itrace]
txt = str(pos) + " " + str(format) + " Writing " + key + "=" + str(value)
printverbose(txt,40)
putValue(value,f,pos,format,endian);
# Write Data
ctype='f'
#cformat= endian + ctype*SH['ns']
cformat= endian + ctype
for s in range(SH['ns']):
strVal=struct.pack(cformat, Data[s,itrace])
f.seek(index+240+s*struct.calcsize(cformat))
f.write(strVal);
f.close
#return segybuffer
def putValue(value,fileid,index,ctype='l',endian='>',number=1):
"""
putValue(data,index,ctype,endian,number)
"""
if (ctype=='l')|(ctype=='long')|(ctype=='int32'):
size=l_long
ctype='l'
elif (ctype=='L')|(ctype=='ulong')|(ctype=='uint32'):
size=l_ulong
ctype='L'
elif (ctype=='h')|(ctype=='short')|(ctype=='int16'):
size=l_short
ctype='h'
elif (ctype=='H')|(ctype=='ushort')|(ctype=='uint16'):
size=l_ushort
ctype='H'
elif (ctype=='c')|(ctype=='char'):
size=l_char
ctype='c'
elif (ctype=='B')|(ctype=='uchar'):
size=l_uchar
ctype='B'
elif (ctype=='f')|(ctype=='float'):
size=l_float
ctype='f'
elif (ctype=='ibm'):
size=l_float
else:
printverbose('Bad Ctype : ' +ctype,-1)
cformat=endian + ctype*number
printverbose('putValue : cformat : ' + cformat + ' ctype=' + ctype,40)
strVal=struct.pack(cformat, value)
fileid.seek(index)
fileid.write(strVal);
return 1
+10
View File
@@ -18,6 +18,8 @@ filename='mini.sgy'
f_ieee='data_IEEE.segy';
f_ibm='data_IBM_REV1.segy';
filename='data_IEEE.segy';
# Set verbose level
segypy.verbose=1;
@@ -25,6 +27,14 @@ segypy.verbose=1;
Data,SH,STH=segypy.readSegy(filename);
filename_out='testout.segy';
segypy.writeSegyStructure(filename_out,Data,SH,STH);
segypy.wiggle(Data,SH,1,2)
exit
d_ieee,SH,STH=segypy.readSegy(f_ieee);
d_ibm,SH,STH=segypy.readSegy(f_ibm);