Skip to content

Commit 575604f

Browse files
Merge pull request #4 from analysiscenter/remove_samples
Change processing of file samples
2 parents e11a40d + dced74f commit 575604f

File tree

4 files changed

+21
-27
lines changed

4 files changed

+21
-27
lines changed

examples/01_Basic_usage.ipynb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@
132132
"name": "stdout",
133133
"output_type": "stream",
134134
"text": [
135-
"data/A.sgy 2.0 500.0\n"
135+
"data/A.sgy 2000\n"
136136
]
137137
}
138138
],
@@ -141,7 +141,7 @@
141141
"\n",
142142
"# Context manager: recommended\n",
143143
"with segfast.open(path=path) as file:\n",
144-
" print(file.path, file.sample_interval, file.sample_rate)"
144+
" print(file.path, file.sample_interval)"
145145
]
146146
},
147147
{
@@ -163,7 +163,7 @@
163163
"name": "stdout",
164164
"output_type": "stream",
165165
"text": [
166-
"data/A.sgy 2.0 500.0\n"
166+
"data/A.sgy 2000\n"
167167
]
168168
}
169169
],
@@ -174,7 +174,7 @@
174174
"with open('tester.pckl', 'rb') as file:\n",
175175
" reloaded = pickle.load(file)\n",
176176
"\n",
177-
"print(reloaded.path, reloaded.sample_interval, reloaded.sample_rate)"
177+
"print(reloaded.path, reloaded.sample_interval)"
178178
]
179179
},
180180
{

segfast/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@
33
from .memmap_loader import MemmapLoader
44
from .loader import Loader, File, open #pylint: disable=redefined-builtin
55

6-
__version__ = '1.0.0'
6+
__version__ = '1.0.1'

segfast/memmap_loader.py

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ def _make_mmap_headers_dtype(headers, endian_symbol='>'):
223223

224224

225225
# Data loading
226-
def load_traces(self, indices, limits=None, buffer=None, return_samples=False):
226+
def load_traces(self, indices, limits=None, buffer=None):
227227
""" Load traces by their indices.
228228
Under the hood, we use a pre-made memory mapping over the file, where trace data is viewed with a special dtype.
229229
Regardless of the numerical dtype of SEG-Y file, we output IEEE float32:
@@ -237,8 +237,6 @@ def load_traces(self, indices, limits=None, buffer=None, return_samples=False):
237237
Slice of the data along the depth axis.
238238
buffer : np.ndarray, optional
239239
Buffer to read the data into. If possible, avoids copies.
240-
return_samples : bool
241-
Whether to return samples of loaded traces in accordance to `limits`.
242240
"""
243241
limits = self.process_limits(limits)
244242

@@ -251,11 +249,10 @@ def load_traces(self, indices, limits=None, buffer=None, return_samples=False):
251249
traces = self._ibm_to_ieee(traces)
252250

253251
if buffer is None:
254-
buffer = np.require(traces, dtype=self.dtype, requirements='C')
255-
return buffer if return_samples is False else (buffer, self.samples[limits])
252+
return np.require(traces, dtype=self.dtype, requirements='C')
256253

257254
buffer[:len(indices)] = traces
258-
return buffer if return_samples is False else (buffer, self.samples[limits])
255+
return buffer
259256

260257
def load_depth_slices(self, indices, buffer=None):
261258
""" Load horizontal (depth) slices of the data.

segfast/segyio_loader.py

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -64,19 +64,13 @@ def __init__(self, path, endian='big', strict=False, ignore_geometry=True):
6464
self.n_traces = self.file_handler.trace.length
6565
self.dtype = self.file_handler.dtype
6666

67-
# Sample interval, rate and delay
68-
self.sample_interval = self._infer_sample_interval() # ms
69-
self.sample_rate = 1000 / self.sample_interval # Hz
70-
self.samples = np.arange(self.n_samples) * self.sample_interval
71-
self.delay = self.file_handler.header[0].get(segyio.TraceField.DelayRecordingTime)
72-
7367
# Misc
7468
self.metrics = self.file_handler.xfd.metrics()
7569
self.text = [self.file_handler.text[i] for i in range(1 + self.file_handler.ext_headers)]
7670

77-
78-
def _infer_sample_interval(self):
79-
""" Get sample interval from file headers. """
71+
@property
72+
def sample_interval(self):
73+
""" Sample interval of seismic traces. """
8074
bin_sample_interval = self.file_handler.bin[segyio.BinField.Interval]
8175
trace_sample_interval = self.file_handler.header[0][segyio.TraceField.TRACE_SAMPLE_INTERVAL]
8276
# 0 means undefined sample interval, so it is removed from the set
@@ -87,7 +81,12 @@ def _infer_sample_interval(self):
8781
"either both `Interval` (bytes 3217-3218 in the binary header) "
8882
"and `TRACE_SAMPLE_INTERVAL` (bytes 117-118 in the header of the first trace) "
8983
"are undefined or they have different values.")
90-
return union_sample_interval.pop() / 1000 # convert from microseconds to milliseconds
84+
return union_sample_interval.pop()
85+
86+
@property
87+
def delay(self):
88+
""" Delay recording time of seismic traces. """
89+
return self.file_handler.header[0].get(segyio.TraceField.DelayRecordingTime)
9190

9291

9392
# Headers
@@ -160,7 +159,7 @@ def make_tsf_header(self):
160159

161160

162161
# Data loading: traces
163-
def load_traces(self, indices, limits=None, buffer=None, return_samples=False):
162+
def load_traces(self, indices, limits=None, buffer=None):
164163
""" Load traces by their indices.
165164
By pre-allocating memory for all of the requested traces, we significantly speed up the process.
166165
@@ -172,19 +171,16 @@ def load_traces(self, indices, limits=None, buffer=None, return_samples=False):
172171
Slice of the data along the depth axis.
173172
buffer : np.ndarray, optional
174173
Buffer to read the data into. If possible, avoids copies.
175-
return_samples : bool
176-
Whether to return samples of loaded traces in accordance to `limits`.
177174
"""
178175
limits = self.process_limits(limits)
179-
samples = self.samples[limits]
180-
n_samples = len(samples)
176+
n_samples = len(range(*limits.indices(self.n_samples)))
181177

182178
if buffer is None:
183179
buffer = np.empty((len(indices), n_samples), dtype=self.dtype)
184180

185181
for i, index in enumerate(indices):
186182
self.load_trace(index=index, buffer=buffer[i], limits=limits)
187-
return buffer if return_samples is False else (buffer, samples)
183+
return buffer
188184

189185
def process_limits(self, limits):
190186
""" Convert given `limits` to a `slice`. """
@@ -209,6 +205,7 @@ def load_trace(self, index, buffer, limits):
209205
limits.start, limits.stop, limits.step,
210206
buffer.size)
211207

208+
212209
# Data loading: depth slices
213210
def load_depth_slices(self, indices, buffer=None):
214211
""" Load horizontal (depth) slices of the data.

0 commit comments

Comments
 (0)