From 45590e53953e163ea92399d333a2af3bf902fef0 Mon Sep 17 00:00:00 2001 From: Thomas Mejer Hansen Date: Tue, 30 Jan 2018 20:27:23 +0100 Subject: [PATCH] version 0.4 uploade to PyPi.org --- MANIFEST.in | 3 + segypy/__init__.py | 1 + segypy/__init__.pyc | Bin 0 -> 182 bytes segypy/__init__.py~ | 1 + segypy/__pycache__/__init__.cpython-36.pyc | Bin 0 -> 164 bytes segypy/__pycache__/segypy.cpython-36.pyc | Bin 0 -> 25296 bytes segypy/segypy.py | 1081 ++++++++++++++++++++ segypy/segypy.pyc | Bin 0 -> 29943 bytes 8 files changed, 1086 insertions(+) create mode 100644 MANIFEST.in create mode 100644 segypy/__init__.py create mode 100644 segypy/__init__.pyc create mode 100644 segypy/__init__.py~ create mode 100644 segypy/__pycache__/__init__.cpython-36.pyc create mode 100644 segypy/__pycache__/segypy.cpython-36.pyc create mode 100644 segypy/segypy.py create mode 100644 segypy/segypy.pyc diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 0000000..597592d --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1,3 @@ +# Include the data files +include README.rst +include example/* diff --git a/segypy/__init__.py b/segypy/__init__.py new file mode 100644 index 0000000..487bb56 --- /dev/null +++ b/segypy/__init__.py @@ -0,0 +1 @@ +from .segypy import * diff --git a/segypy/__init__.pyc b/segypy/__init__.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0163797c8f27a471011859e16a3292ba82c8e908 GIT binary patch literal 182 zcmZSn%*&;Fq#!Dp0ScIav;z0pSymr qt9xWXq&~z1{rLFIyv&mLc)fzk5)Pnto80`A(wtN~kcGuS%m4t3=_8K- literal 0 HcmV?d00001 diff --git a/segypy/__init__.py~ b/segypy/__init__.py~ new file mode 100644 index 0000000..556c5e3 --- /dev/null +++ b/segypy/__init__.py~ @@ -0,0 +1 @@ +from .traveltime import * diff --git a/segypy/__pycache__/__init__.cpython-36.pyc b/segypy/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a48768ab45848cab4a27bb35e14e5e1999678d3f GIT binary patch literal 164 zcmXr!<>k^nQV=D^z`*brh~a<<$Z`PUVjduo!jQt4!w|xd!W7J)$^4QLD5S}Fi&4uD zNU{~DrdJkJu4E`;0SbeOUsn1V`MIh3CAp~?iTXjV!LE)$&K~*!LH_PRj=sL0e(w6g ouI`Zmk@^t5`tk9Zd6^~g@p=W7w>WHa^HWN5Qtd#t6az5>0EfsX#sB~S literal 0 HcmV?d00001 diff --git a/segypy/__pycache__/segypy.cpython-36.pyc b/segypy/__pycache__/segypy.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e2e1d84c1dd8742d44b03a03eb286f048411de4c GIT binary patch literal 25296 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 128: + Data[i][j] = Data[i][j] - 256 + + printverbose("readSegyData : Finished reading segy data", 1) + + return Data, SH, STH + + +# %% +def getSegyTrace(SH, itrace, endian='>'): # modified by A Squelch + """ + SegyTraceHeader,SegyTraceData=getSegyTrace(SegyHeader,itrace) + itrace : trace number to read + THIS DEF IS NOT UPDATED. NOT READY TO USE + """ + data = open(SH["filename"], 'rb').read() + + bps = getBytePerSample(SH) + + # GET TRACE HEADER + index = 3200 + (itrace - 1) * (240 + SH['ns'] * bps) + SegyTraceHeader = []; + # print index + + # GET TRACE + index = 3200 + (itrace - 1) * (240 + SH['ns'] * bps) + 240 + SegyTraceData = getValue(data, index, 'float', endian, SH['ns']) + return SegyTraceHeader, SegyTraceData + + +# %% +def getSegyHeader(filename, endian='>'): # modified by A Squelch + """ + SegyHeader=getSegyHeader(filename) + """ + + data = open(filename, 'rb').read() + + SegyHeader = {'filename': filename} + + j = 0; + for key in SH_def.keys(): + j = j + 1; + pos = SH_def[key]["pos"] + format = SH_def[key]["type"] + + txt = "i=%3d, pos=%5d, format=%2s, key=%s" % (j, pos, format, key); + printverbose(txt, 10) + + SegyHeader[key], index = getValue(data, pos, format, endian); + + txt = "SegyHeader[%s] = %f" % (key, SegyHeader[key]) + printverbose(txt, 2) + + # SET NUMBER OF BYTES PER DATA SAMPLE + bps = getBytePerSample(SegyHeader) + + filesize = len(data) + ntraces = (filesize - 3600) / (SegyHeader['ns'] * bps + 240) + SegyHeader["ntraces"] = ntraces + SegyHeader["time"]=np.arange(SegyHeader['ns']) * SegyHeader['dt'] / 1e+6 + + + printverbose('getSegyHeader : succesfully read ' + filename, 1) + + return SegyHeader + + +# %% +def writeSegy(filename, Data, dt=1000, STHin={}, SHin={}): + """ + writeSegy(filename,Data,dt) + + Write SEGY + + See also readSegy + + (c) 2005, Thomas Mejer Hansen + + MAKE OPTIONAL INPUT FOR ALL SEGYHTRACEHEADER VALUES + + """ + + printverbose("writeSegy : Trying to write " + filename, 0) + + N = Data.shape + ns = N[0] + ntraces = N[1] + print(ntraces) + print(ns) + + SH = getDefaultSegyHeader(ntraces, ns); + STH = getDefaultSegyTraceHeaders(ntraces, ns, dt) + + # ADD STHin, if exists... + for key in STHin.keys(): + print(key) + for a in range(ntraces): + STH[key] = STHin[key][a] + + # ADD SHin, if exists... + for key in SHin.keys(): + print(key) + SH[key] = SHin[key] + + writeSegyStructure(filename, Data, SH, STH) + + +# %% +def writeSegyStructure(filename, Data, SH, STH, endian='>'): # modified by A Squelch + """ + writeSegyStructure(filename,Data,SegyHeader,SegyTraceHeaders) + + Write SEGY file using SegyPy data structures + + See also readSegy + + (c) 2005, Thomas Mejer Hansen + + """ + + printverbose("writeSegyStructure : Trying to write " + filename, 0) + + f = open(filename, 'wb') + + # VERBOSE INF + revision = SH["SegyFormatRevisionNumber"] + dsf = SH["DataSampleFormat"] + if (revision == 100): + revision = 1 + if (revision == 256): # added by A Squelch + revision = 1 + + try: # block added by A Squelch + DataDescr = SH_def["DataSampleFormat"]["descr"][revision][dsf] + except KeyError: + print("") + print(" An error has ocurred interpreting a SEGY binary header key") + print(" Please check the Endian setting for this file: ", SH["filename"]) + sys.exit() + + printverbose("writeSegyStructure : SEG-Y revision = " + str(revision), 1) + printverbose("writeSegyStructure : DataSampleFormat=" + str(dsf) + "(" + DataDescr + ")", 1) + + # 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 + + ctype = SH_def['DataSampleFormat']['datatype'][revision][dsf] + bps = SH_def['DataSampleFormat']['bps'][revision][dsf] + + sizeT = 240 + SH['ns'] * bps; + + 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 + 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 + + +# %% +def getValue(data, index, ctype='l', endian='>', number=1): + """ + getValue(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 + ctype = 'ibm' + else: + printverbose('Bad Ctype : ' + ctype, -1) + + index_end = index + size * number + + printverbose("index=%d, number=%d, size=%d, ctype=%s" % (index, number, size, ctype), 8); + printverbose("index, index_end = " + str(index) + "," + str(index_end), 9) + + if (ctype == 'ibm'): + # ASSUME IBM FLOAT DATA + Value = list(range(int(number))) + for i in np.arange(number): + index_ibm_start = i * 4 + index + index_ibm_end = index_ibm_start + 4; + ibm_val = ibm2ieee2(data[index_ibm_start:index_ibm_end]) + Value[i] = ibm_val; + # this resturn an array as opposed to a tuple + else: + # ALL OTHER TYPES OF DATA + cformat = 'f' * number + cformat = endian + ctype * number + + printverbose("getValue : cformat : '" + cformat + "'", 11) + + Value = struct.unpack(cformat, data[index:index_end]) + + if (ctype == 'B'): + printverbose('getValue : Ineficient use of 1byte Integer...', -1) + + vtxt = 'getValue : ' + 'start=' + str(index) + ' size=' + str(size) + ' number=' + str( + number) + ' Value=' + str(Value) + ' cformat=' + str(cformat) + printverbose(vtxt, 20) + + if number == 1: + return Value[0], index_end + else: + return Value, index_end + + +# %% +def print_version(): + print('SegyPY version is ', version) + + +# %% +def printverbose(txt, level=1): + if level <= verbose: + print('SegyPY' + version + ': ', txt) + + +# %% +############## +# MISC FUNCTIONS +def ibm2Ieee(ibm_float): + """ + ibm2Ieee(ibm_float) + Used by permission + (C) Secchi Angelo + with thanks to Howard Lightstone and Anton Vredegoor. + """ + """ + I = struct.unpack('>I',ibm_float)[0] + sign = [1,-1][bool(i & 0x100000000L)] + characteristic = ((i >> 24) & 0x7f) - 64 + fraction = (i & 0xffffff)/float(0x1000000L) + return sign*16**characteristic*fraction + """ + + +def ibm2ieee2(ibm_float): + """ + ibm2ieee2(ibm_float) + Used by permission + (C) Secchi Angelo + with thanks to Howard Lightstone and Anton Vredegoor. + """ + dividend = float(16 ** 6) + + if ibm_float == 0: + return 0.0 + istic, a, b, c = struct.unpack('>BBBB', ibm_float) + if istic >= 128: + sign = -1.0 + istic = istic - 128 + else: + sign = 1.0 + mant = float(a << 16) + float(b << 8) + float(c) + return sign * 16 ** (istic - 64) * (mant / dividend) + + +def getBytePerSample(SH): + revision = SH["SegyFormatRevisionNumber"] + if (revision == 100): + revision = 1 + if (revision == 256): # added by A Squelch + revision = 1 + + dsf = SH["DataSampleFormat"] + + try: # block added by A Squelch + bps = SH_def["DataSampleFormat"]["bps"][revision][dsf] + except KeyError: + print("") + print(" An error has ocurred interpreting a SEGY binary header key") + print(" Please check the Endian setting for this file: ", SH["filename"]) + sys.exit() + + printverbose("getBytePerSample : bps=" + str(bps), 21); + + return bps + + +############## +# segy class +class SegyTraceheaderClass: + def __init__(self): + self.cdp = 0 + + +class SegyHeaderClass: + def __str__(self): + return "SegyHeaderClass " + + def __init__(self): + self.filename = 0 + self.Trace = version + + def cdp(self): + return "Getting CDP trace header" + + def InlineX(self): + return "Getting CDP trace header" + + +class SegyClass: + STH_def = STH_def + SH_def = SH_def + STH = SegyTraceheaderClass() + SH = SegyHeaderClass() + + def __init__(self): + self.THOMAS = 'Thomas' diff --git a/segypy/segypy.pyc b/segypy/segypy.pyc new file mode 100644 index 0000000000000000000000000000000000000000..775e176e2b92c4fa1db733453f2f643ba5a95bc2 GIT binary patch literal 29943 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 Nu611-)^w~{@$Y?){ZRk_ literal 0 HcmV?d00001