|
28 | 28 | logger = logging.getLogger(__name__) |
29 | 29 |
|
30 | 30 |
|
31 | | -def _filter_raw_unspecified_fields(headers: NDArray) -> NDArray: |
32 | | - """Filter out __MDIO_RAW_UNSPECIFIED_Field_* fields from headers array. |
33 | | -
|
34 | | - These fields are added during SEGY import to preserve raw header bytes, |
35 | | - but they cause dtype mismatches during export. This function removes them. |
36 | | -
|
37 | | - Args: |
38 | | - headers: Header array that may contain raw unspecified fields. |
39 | | -
|
40 | | - Returns: |
41 | | - Header array with raw unspecified fields removed. |
42 | | - """ |
43 | | - if headers.dtype.names is None: |
44 | | - return headers |
45 | | - |
46 | | - # Find field names that don't start with __MDIO_RAW_UNSPECIFIED_ |
47 | | - field_names = [name for name in headers.dtype.names if not name.startswith("__MDIO_RAW_UNSPECIFIED_")] |
48 | | - |
49 | | - if len(field_names) == len(headers.dtype.names): |
50 | | - # No raw unspecified fields found, return as-is |
51 | | - return headers |
52 | | - |
53 | | - # Create new structured array with only the non-raw fields |
54 | | - new_dtype = [(name, headers.dtype.fields[name][0]) for name in field_names] |
55 | | - filtered_headers = np.empty(headers.shape, dtype=new_dtype) |
56 | | - |
57 | | - for name in field_names: |
58 | | - filtered_headers[name] = headers[name] |
59 | | - |
60 | | - return filtered_headers |
61 | | - |
62 | | - |
63 | 31 | def make_segy_factory(spec: SegySpec, binary_header: dict[str, int]) -> SegyFactory: |
64 | 32 | """Generate SEG-Y factory from MDIO metadata.""" |
65 | 33 | sample_interval = binary_header["sample_interval"] |
@@ -199,9 +167,7 @@ def serialize_to_segy_stack( # noqa: PLR0913 |
199 | 167 | samples = samples[live_mask] |
200 | 168 | headers = headers[live_mask] |
201 | 169 |
|
202 | | - # Filter out raw unspecified fields that cause dtype mismatches |
203 | | - filtered_headers = _filter_raw_unspecified_fields(headers) |
204 | | - buffer = segy_factory.create_traces(filtered_headers, samples) |
| 170 | + buffer = segy_factory.create_traces(headers, samples) |
205 | 171 |
|
206 | 172 | global_index = block_start[0] |
207 | 173 | record_id_str = str(global_index) |
@@ -233,9 +199,7 @@ def serialize_to_segy_stack( # noqa: PLR0913 |
233 | 199 | rec_samples = samples[rec_index][rec_live_mask] |
234 | 200 | rec_headers = headers[rec_index][rec_live_mask] |
235 | 201 |
|
236 | | - # Filter out raw unspecified fields that cause dtype mismatches |
237 | | - filtered_headers = _filter_raw_unspecified_fields(rec_headers) |
238 | | - buffer = segy_factory.create_traces(filtered_headers, rec_samples) |
| 202 | + buffer = segy_factory.create_traces(rec_headers, rec_samples) |
239 | 203 |
|
240 | 204 | global_index = tuple(block_start[i] + rec_index[i] for i in range(record_ndim)) |
241 | 205 | record_id_str = "/".join(map(str, global_index)) |
|
0 commit comments