{ "cells": [ { "cell_type": "markdown", "id": "0ffadc5d-57f6-47e2-82a0-86ffee57b45c", "metadata": {}, "source": [ "# Seismic SEG-Y files processing" ] }, { "cell_type": "markdown", "id": "9a17747a-6a2c-413d-9c81-24e4ee3c9231", "metadata": {}, "source": [ "## Introduction" ] }, { "cell_type": "markdown", "id": "edacaf63-644f-409c-9e44-5db03d4c9e75", "metadata": {}, "source": [ "This Python notebook is designed for anyone working with seismic data. It simplifies the process of handling SEG-Y files by extracting important metadata, analyzing the data, and creating visual representations. Whether you're a seasoned geophysicist or new to the field, this tool helps make sense of complex seismic information, providing clear insights and visualizations to support your work." ] }, { "cell_type": "markdown", "id": "a2d76a9c-fcd3-4072-bf06-4afb1d90ad26", "metadata": {}, "source": [ "## Environment" ] }, { "cell_type": "markdown", "id": "d5affd43-dc6b-4ec5-aa78-7aa127235c41", "metadata": {}, "source": [ "Make sure you have the following packages installed." ] }, { "cell_type": "code", "execution_count": 2, "id": "db61c217-5b38-4d9e-ae6f-15659e118585", "metadata": {}, "outputs": [], "source": [ "from obspy.io.segy.core import _read_segy\n", "import obspy as obs\n", "import obspy.signal.filter\n", "import matplotlib.pyplot as plt\n", "import matplotlib.dates as mdates\n", "import folium\n", "from pyproj import Transformer\n", "import numpy as np\n", "import pandas as pd" ] }, { "cell_type": "markdown", "id": "b14e569b-9f3d-4f5b-bdf5-4e4c8d0f878f", "metadata": {}, "source": [ "## Reading SEG-Y files" ] }, { "cell_type": "markdown", "id": "dd1e77d2-83be-44ff-85e8-4d18ddabffc6", "metadata": {}, "source": [ "The data is ingested through ObsPy's obspy.io.segy.core._read_segy function, which efficiently organizes individual seismic traces into a stream. This method is designed to streamline the import process by packing header information, thereby reducing data loading times. It also offers the flexibility to unpack header information as needed. The following example illustrates how to read SEG-Y data with header unpacking:" ] }, { "cell_type": "code", "execution_count": 3, "id": "067729fb-8105-4512-802a-ca7550f96468", "metadata": {}, "outputs": [], "source": [ "# Load the SEG-Y file while unpack header\n", "# File name (User Input)\n", "name = 'F1R1'\n", "data = _read_segy(name + '.SGY', unpack_trace_headers=True)" ] }, { "cell_type": "markdown", "id": "9ef65535-9995-4414-b784-e291e4ea768c", "metadata": {}, "source": [ "This code block prints the header info for the Stream" ] }, { "cell_type": "code", "execution_count": 4, "id": "6c7dccae-deb5-4fdc-87ca-81fc77c18346", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Seq. No. in line: 1 | 2010-06-19T17:08:22.000000Z - 2010-06-19T17:08:25.998000Z | 500.0 Hz, 2000 samples" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data[0]" ] }, { "cell_type": "markdown", "id": "b6fc3eba-b532-4966-a237-b83c094c40b0", "metadata": {}, "source": [ "SEG-Y files contain a substantial number of trace header fields that provide critical metadata for each seismic trace. These fields can be accessed by referencing the specific header key. Below is an example demonstrating how to access the trace headers information:" ] }, { "cell_type": "code", "execution_count": 5, "id": "c6cc431b-a04a-4bc0-b849-c62710eb6bca", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", " | endian | \n", "unpacked_header | \n", "trace_sequence_number_within_line | \n", "trace_sequence_number_within_segy_file | \n", "original_field_record_number | \n", "trace_number_within_the_original_field_record | \n", "energy_source_point_number | \n", "ensemble_number | \n", "trace_number_within_the_ensemble | \n", "trace_identification_code | \n", "... | \n", "transduction_units | \n", "device_trace_identifier | \n", "scalar_to_be_applied_to_times | \n", "source_type_orientation | \n", "source_energy_direction_mantissa | \n", "source_energy_direction_exponent | \n", "source_measurement_mantissa | \n", "source_measurement_exponent | \n", "source_measurement_unit | \n", "unassigned | \n", "
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | \n", "> | \n", "None | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "0 | \n", "0 | \n", "8 | \n", "... | \n", "0 | \n", "0 | \n", "7 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "b'\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00' | \n", "
1 | \n", "> | \n", "None | \n", "2 | \n", "2 | \n", "1 | \n", "2 | \n", "1 | \n", "0 | \n", "0 | \n", "1 | \n", "... | \n", "0 | \n", "0 | \n", "1865 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "b'\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00' | \n", "
2 | \n", "> | \n", "None | \n", "3 | \n", "3 | \n", "1 | \n", "3 | \n", "1 | \n", "0 | \n", "0 | \n", "1 | \n", "... | \n", "0 | \n", "0 | \n", "777 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "b'\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00' | \n", "
3 | \n", "> | \n", "None | \n", "4 | \n", "4 | \n", "1 | \n", "4 | \n", "1 | \n", "0 | \n", "0 | \n", "1 | \n", "... | \n", "0 | \n", "0 | \n", "1369 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "b'\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00' | \n", "
4 | \n", "> | \n", "None | \n", "5 | \n", "5 | \n", "1 | \n", "5 | \n", "1 | \n", "0 | \n", "0 | \n", "1 | \n", "... | \n", "0 | \n", "0 | \n", "923 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "b'\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00' | \n", "
5 rows × 92 columns
\n", "