| 
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