{ "cells": [ { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "# Create an Empty MDIO\n", "\n", "```{article-info}\n", ":author: Altay Sansal\n", ":date: \"{sub-ref}`today`\"\n", ":read-time: \"{sub-ref}`wordcount-minutes` min read\"\n", ":class-container: sd-p-0 sd-outline-muted sd-rounded-3 sd-font-weight-light\n", "```\n", "\n", "Here we will create an empty MDIO file and populate its fields.\n", "\n", "```{warning}\n", "For plotting, the notebook requires [Matplotlib](https://matplotlib.org/) as a dependency. Please install it before executing using\n", "`pip install matplotlib` or `conda install matplotlib`.\n", "```\n", "\n", "We first need to import the configuration classes and create function to be able to create the empty MDIO." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "ExecuteTime": { "end_time": "2025-04-16T14:50:04.371422Z", "start_time": "2025-04-16T14:50:04.368107Z" }, "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "\n", "from mdio import Dimension\n", "from mdio import Grid\n", "from mdio import MDIOCreateConfig\n", "from mdio import MDIOReader\n", "from mdio import MDIOVariableConfig\n", "from mdio import MDIOWriter\n", "from mdio import create_empty\n", "from mdio.converters.segy import get_compressor\n", "from mdio.segy.compat import mdio_segy_spec" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "## Setting Up Grid Dimensions and Variable(s)\n", "\n", "Let's try to create an MDIO file in 3D with known `inline`, `crossline`, and `sample`\n", "dimensions. This is exactly like a 3D Post-Stack dataset.\n", "\n", "We will use the standard `chunked_012` access pattern. All variable names must start\n", "with `chunked_*` for `MDIOReader` to be able to open them with any access pattern.\n", "\n", "We will also use an MDIO private utility function to get the compressor easily. The\n", "compressor is fully customizable, but this function gives us ones available in SEG-Y\n", "ingestion.\n", "\n", "If we want headers, we can also provide `header_dtype` which is a Numpy `dtype`. Again,\n", "we will be using the standard one MDIO uses for ingesting SEG-Ys. (Similar to SEG-Y Rev1).\n", "\n", "At the end we create empty MDIO on local disk or cloud, based on the path string." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "ExecuteTime": { "end_time": "2025-04-16T14:50:06.121450Z", "start_time": "2025-04-16T14:50:06.002634Z" }, "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "grid = Grid(\n", " dims=[\n", " Dimension(name=\"inline\", coords=range(100, 300, 1)), # 100-300 with step 1\n", " Dimension(name=\"crossline\", coords=range(1000, 1600, 2)), # 1000-1600 with step 2\n", " Dimension(name=\"sample\", coords=range(0, 3000, 4)), # 0-3 seconds 4ms sample rate\n", " ]\n", ")\n", "\n", "compressor = get_compressor(lossless=True)\n", "header_dtype = mdio_segy_spec().trace.header.dtype\n", "variable = MDIOVariableConfig(\n", " name=\"chunked_012\",\n", " dtype=\"float32\",\n", " chunks=(128, 128, 128),\n", " compressors=compressor,\n", " header_dtype=header_dtype,\n", ")\n", "\n", "create_conf = MDIOCreateConfig(path=\"demo.mdio\", grid=grid, variables=[variable])\n", "create_empty(config=create_conf);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Populating the MDIO\n", "\n", "Once empty MDIO is created, you can populate it with sample data, header data,\n", "metadata, and statistics. The `live_mask` is automatically flipped to 1 after\n", "every write. However, the consistency of the `live_mask` is up to the user. If\n", "not populated correctly, at read time, traces may be skipped.\n", "\n", "We will read the usual stats and as you can see they're all empty. Text header\n", "and binary header are only required if we are going to export this back to SEG-Y,\n", "and can be modified. We can edit these if necessary using the writer." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "ExecuteTime": { "end_time": "2025-04-16T14:50:09.974442Z", "start_time": "2025-04-16T14:50:09.951257Z" }, "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/plain": [ "(['C00 ',\n", " 'C01 ',\n", " 'C02 ',\n", " 'C03 ',\n", " 'C04 '],\n", " {},\n", " {'rms': 0, 'min': 0, 'mean': 0, 'max': 0, 'std': 0})" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "writer = MDIOWriter(create_conf.path)\n", "\n", "# Truncate text header for display\n", "writer.text_header[:5], writer.binary_header, writer.stats" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Updating File and Checking with `MDIOReader`.\n", "\n", "We write traces here, the headers are still empty. If you need the headers\n", "populated, this is where they would be written to file as well.\n", "\n", "All the extra metadata we are writing is so that we can export back to SEG-Y\n", "in the future. If that's not a requirement most of the metadata can be\n", "omitted.\n", "\n", "If you already have an MDIO prior to this, all the metadata can be copied\n", "over from the previous version." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "ExecuteTime": { "end_time": "2025-04-16T14:50:12.498287Z", "start_time": "2025-04-16T14:50:11.670230Z" }, "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/plain": [ "({'data_sample_format': 1,\n", " 'sample_interval': 4,\n", " 'samples_per_trace': 750,\n", " 'segy_revision_major': 1,\n", " 'segy_revision_minor': 0},\n", " {'rms': 3, 'min': -4, 'mean': 12, 'max': 4, 'std': 5})" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sample_dim = writer.grid.select_dim(\"sample\")\n", "sample_interval = int(sample_dim.coords[1] - sample_dim.coords[0])\n", "num_samples = sample_dim.size\n", "writer.binary_header = {\n", " \"data_sample_format\": 1,\n", " \"sample_interval\": sample_interval,\n", " \"samples_per_trace\": num_samples,\n", " \"segy_revision_major\": 1,\n", " \"segy_revision_minor\": 0,\n", "}\n", "\n", "# Write some values to the file\n", "writer[:5] = 1\n", "writer[5:10] = 2\n", "writer[50:100] = 3\n", "writer[150:175] = -1\n", "\n", "# Write some made up stats\n", "writer.stats = {\"mean\": 12, \"std\": 5, \"rms\": 3, \"min\": -4, \"max\": 4}\n", "\n", "reader = MDIOReader(create_conf.path)\n", "reader.binary_header, reader.stats" ] }, { "cell_type": "markdown", "metadata": {}, "source": "Plot some of the data we populated:" }, { "cell_type": "code", "execution_count": 6, "metadata": { "ExecuteTime": { "end_time": "2025-04-16T14:50:14.256953Z", "start_time": "2025-04-16T14:50:14.036094Z" } }, "outputs": [ { "data": { "image/png": "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+wEoWAh2AOADOtK1Zs2aXq/VqFFDDhw4YL4uU6aMeTx69KjXMfrc2aePKSkpXvszMjLMSFnnmOwiIyPNCFrPDUDwINgBgA/oiNikpCSv1/773/9KxYoV3QMpNJwlJia692t/OO07Fx8fb57r4/Hjx2Xbtm3uY1atWmVqA7UvHgBkx6hYAPCBgQMHym233WaaYh988EHZvHmzvP3222ZTISEhMmDAAHnhhRdMPzwNeiNGjDAjXTt06OCu4WvVqpW7CTc9PV369etnRswyIhZATgh2AOADDRs2lAULFpg+b2PGjDHBTac30XnpHM8884ykpqaa/ndaM9ekSRMzvUlUVJT7mPfff9+EuebNm5vRsJ06dTJz3wFATgh2AOAjf/zjH82WG62109CnW250BOzcuXN9dIYAbEMfOwAAAEsQ7AAAACzh12CnE2lqP5SiRYuaSTi1w3D2UWRNmzY1zRWe2xNPPOF1jE4f0LZtWylcuLD5nCFDhpgpAQAAAIKJX/vYrVmzRvr27WvCnQax5557Tlq2bGkWy9bFsB06IsyzD4oGOEdmZqYJdTptwPr16+XIkSPy6KOPmoW3dTQaAABAsPBrsNPRX55mzZplatx0zqY777zTK8jlNhnn8uXLTRBcuXKlWYqnXr16MnbsWBk6dKiMHj1aIiIifH4dAAAABUGB6mOny984o8A86XD/kiVLys0332ymDjhz5ox7ny6SXbt2ba/1FhMSEsxEnzt37szx+7BINgAAsFGBme5EZ1LXyTp1tnYNcI6HH37YzNSuk3F+++23piZO++F98sknZr8uhJ3TItrOvtz69j3//PM+vR4AAICgDXba1+67776TdevWeb2uE3c6tGZO11/UiTr37dsnVapUuazvpbV+gwYNcj/XGrvy5ctfwdkDAAD4X4FoitVZ1RcvXixffPGFXH/99Rc81lkfce/eveZR+97ltIi2sy8nLJINAABs5Ndg53K5TKjTZXd0YWtdcuditm/fbh615s5ZJHvHjh2SkpLiPmbFihUmrNWsWdOHZw8AAFCwhPm7+VWXyvn000/NXHZOn7jY2FiJjo42za26v02bNlKiRAnTx04X1tYRs3Xq1DHH6vQoGuC6desm48ePN58xfPhw89laMwcAABAs/FpjN3XqVDMSVich1ho4Z/vggw/Mfp2qRKcx0fBWvXp1efrpp80C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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(1, 2, sharex=\"all\")\n", "ax[0].imshow(writer.live_mask[:].T, aspect=\"auto\")\n", "ax[1].imshow(reader[:, 150].T, aspect=\"auto\")\n", "\n", "ax[0].set_xlabel(\"inline\")\n", "ax[0].set_ylabel(\"crossline\")\n", "ax[1].set_xlabel(\"inline\")\n", "ax[1].set_ylabel(\"sample\")\n", "ax[0].set_title(\"Live Mask\")\n", "ax[1].set_title(\"Middle Crossline\")\n", "fig.tight_layout();" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Write to SEG-Y\n", "\n", "Because we populated all the fields necessary for SEG-Y output, we can call the\n", "MDIO to SEGY converter and get a file out." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "ExecuteTime": { "end_time": "2025-04-16T14:50:15.788812Z", "start_time": "2025-04-16T14:50:15.009889Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Unwrapping MDIO Blocks: 100%|██████████| 7/7 [00:00<00:00, 10.55it/s]\n", "Merging lines: 100%|██████████| 1/1 [00:00<00:00, 17.26it/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[(0, 0, 0, 0, 0, 4, 4000, 750, 750, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0)]\n", "[[1. 1. 1. ... 1. 1. 1.]\n", " [1. 1. 1. ... 1. 1. 1.]\n", " [1. 1. 1. ... 1. 1. 1.]\n", " ...\n", " [1. 1. 1. ... 1. 1. 1.]\n", " [1. 1. 1. ... 1. 1. 1.]\n", " [1. 1. 1. ... 1. 1. 1.]]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\n" ] } ], "source": [ "from segy import SegyFile\n", "\n", "from mdio import mdio_to_segy\n", "\n", "mdio_to_segy(\"demo.mdio\", \"demo.segy\")\n", "segy = SegyFile(\"demo.segy\")\n", "print(segy.binary_header)\n", "print(segy.sample[:100])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Copying an Existing MDIO without Data and Headers\n", "\n", "We also provide a `create_empty_like` function which allows us to create an MDIO file\n", "with the same structure and basic metadata as an existing one.\n", "\n", "This will carry over:\n", "* All access patterns in source MDIO\n", "* Grid (shape, coordinates, dimensions, etc)\n", "* Text Header\n", "* Binary Header\n", "\n", "It will **NOT** carry over:\n", "* Trace data\n", "* Header data\n", "* Statistics\n", "* Live Mask" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "ExecuteTime": { "end_time": "2025-04-16T14:50:17.246513Z", "start_time": "2025-04-16T14:50:17.111779Z" } }, "outputs": [], "source": [ "from mdio import create_empty_like\n", "\n", "copy_path = \"copy_of_existing.mdio\"\n", "create_empty_like(create_conf.path, copy_path)\n", "\n", "copy_reader = MDIOReader(copy_path)\n", "assert copy_reader.shape == reader.shape\n", "assert copy_reader.binary_header == reader.binary_header\n", "assert copy_reader.stats != reader.stats" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.3" }, "widgets": { "application/vnd.jupyter.widget-state+json": { "state": { "104c0d4e90244ebc959e51a58794dcf4": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "display": "inline-flex", "flex_flow": "row wrap", "width": "100%" } }, "1c0f5b458ee1401eaa8de63c65802073": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLStyleModel", "state": { "description_width": "", "font_size": null, "text_color": null } }, "21b25dd6080d42368afc06770d5e1755": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": { "layout": "IPY_MODEL_35fb49026dac479eba87217c2f6bcb9a", "style": "IPY_MODEL_3ab3e27c83aa423d9ecdac94e576f0fe", "value": "Ingesting SEG-Y in 6 chunks: 100%" } }, "2693aae410f04e7587f0400b5eef1079": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "ProgressStyleModel", "state": { "description_width": "" } }, "318aea09479a479981dcfa29bc856c67": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "ProgressStyleModel", "state": { "description_width": "" } }, "35fb49026dac479eba87217c2f6bcb9a": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, "3ab3e27c83aa423d9ecdac94e576f0fe": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLStyleModel", "state": { "description_width": "", "font_size": null, "text_color": null } }, "420b4a9492c54eb48d7779f38a09fd20": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "flex": "2" } }, "42afe4fae9dd4bc4a341a231cf7a9c32": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, "4df685a95de542ffab6f265df89b8949": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLStyleModel", "state": { "description_width": "", "font_size": null, "text_color": null } }, "58eaddb54c8840da83d1f6503d6ba64f": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, "5b3e72b71f304230bc36bb91f9c173be": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLStyleModel", "state": { "description_width": "", "font_size": null, "text_color": null } }, "5c1fab0ccc7e42c69c2b663b67ca9e3c": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, "63a54817ae8b4c8d85b30d8c97e7ed0d": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HBoxModel", "state": { "children": [ "IPY_MODEL_e170d60a55a14c489d32b101293a9d33", "IPY_MODEL_662ad93cf7b3470f8e197350441f09ca", "IPY_MODEL_ac4abab2367e461e956e4e0edb27be44" ], "layout": "IPY_MODEL_c59d6fe969a04f4da332ae2a6fdb9c77" } }, "63f87a2410ba47d38ad9f55a81357a29": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": { "layout": "IPY_MODEL_ca48140488574a28a7469552441560e4", "style": "IPY_MODEL_ae2037efb9cc459e84bcc28ca7243437", "value": " 2/2 [00:03<00:00, 3.01s/block]" } }, "64eb2b9c8a094a1ea5f1991e5f09f5d9": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, "662ad93cf7b3470f8e197350441f09ca": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "FloatProgressModel", "state": { "bar_style": "success", "layout": "IPY_MODEL_420b4a9492c54eb48d7779f38a09fd20", "max": 1, "style": "IPY_MODEL_d16e93f72f3d4aeda2f5deee87e9754f", "value": 1 } }, "74283969ff5446c89bb83b00a70226cf": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": { "layout": "IPY_MODEL_5c1fab0ccc7e42c69c2b663b67ca9e3c", "style": "IPY_MODEL_1c0f5b458ee1401eaa8de63c65802073", "value": " 6/6 [00:09<00:00, 2.48s/block]" } }, "75cf0c1ed25e47aab20b060f3bb44fb8": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HBoxModel", "state": { "children": [ "IPY_MODEL_21b25dd6080d42368afc06770d5e1755", "IPY_MODEL_c33f32b62a204ef094f67b10f8adbdc1", "IPY_MODEL_74283969ff5446c89bb83b00a70226cf" ], "layout": "IPY_MODEL_91df4ac76fd744539d4237d6099f34a5" } }, "7ff32d7deac14f21ab0f0939fe09e440": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "ProgressStyleModel", "state": { "description_width": "" } }, "91df4ac76fd744539d4237d6099f34a5": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "display": "inline-flex", "flex_flow": "row wrap", "width": "100%" } }, "981634b52a7a4ffdae6186061c0b6482": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HBoxModel", "state": { "children": [ "IPY_MODEL_f65266f861cf40ef84e9ec74a8e0b44c", "IPY_MODEL_9aaf514a5035413d8cbbad58aa0221f4", "IPY_MODEL_63f87a2410ba47d38ad9f55a81357a29" ], "layout": "IPY_MODEL_104c0d4e90244ebc959e51a58794dcf4" } }, "9aaf514a5035413d8cbbad58aa0221f4": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "FloatProgressModel", "state": { "bar_style": "success", "layout": "IPY_MODEL_b25523a221fd4b5e9211d07ef39cccf5", "max": 2, "style": "IPY_MODEL_318aea09479a479981dcfa29bc856c67", "value": 2 } }, "9fe5348964cd4f7880bcd33204bbc7a2": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, "a03d238db31145b881a1be478f9eb72f": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLStyleModel", "state": { "description_width": "", "font_size": null, "text_color": null } }, "a6aabcd2e57348a49bb59477f6a9fd90": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "FloatProgressModel", "state": { "bar_style": "success", "layout": "IPY_MODEL_cfb02c9c7447491ca00bbb6acd99bb79", "max": 26, "style": "IPY_MODEL_7ff32d7deac14f21ab0f0939fe09e440", "value": 26 } }, "ac4abab2367e461e956e4e0edb27be44": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": { "layout": "IPY_MODEL_58eaddb54c8840da83d1f6503d6ba64f", "style": "IPY_MODEL_a03d238db31145b881a1be478f9eb72f", "value": " 3/? [00:00<00:00, 8.29block/s]" } }, "ae2037efb9cc459e84bcc28ca7243437": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLStyleModel", "state": { "description_width": "", "font_size": null, "text_color": null } }, "b25523a221fd4b5e9211d07ef39cccf5": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "flex": "2" } }, "b9810ee38bbe43f4bba100e53379be65": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": { "layout": "IPY_MODEL_42afe4fae9dd4bc4a341a231cf7a9c32", "style": "IPY_MODEL_fdcea609ee7349629604217b625371d3", "value": " 26/26 [00:01<00:00, 18.92block/s]" } }, "c33f32b62a204ef094f67b10f8adbdc1": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "FloatProgressModel", "state": { "bar_style": "success", "layout": "IPY_MODEL_d23d88490a1b4941b8ca228b7d4a39cb", "max": 6, "style": "IPY_MODEL_2693aae410f04e7587f0400b5eef1079", "value": 6 } }, "c59d6fe969a04f4da332ae2a6fdb9c77": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "display": "inline-flex", "flex_flow": "row wrap", "width": "100%" } }, "ca48140488574a28a7469552441560e4": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, "cfb02c9c7447491ca00bbb6acd99bb79": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "flex": "2" } }, "d16e93f72f3d4aeda2f5deee87e9754f": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "ProgressStyleModel", "state": { "description_width": "" } }, "d23d88490a1b4941b8ca228b7d4a39cb": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "flex": "2" } }, "d565a20d37e84ed0a1195e9a90154960": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HBoxModel", "state": { "children": [ "IPY_MODEL_db696e15587c4a54b82886b3eb5a0c96", "IPY_MODEL_a6aabcd2e57348a49bb59477f6a9fd90", "IPY_MODEL_b9810ee38bbe43f4bba100e53379be65" ], "layout": "IPY_MODEL_eab4b060672b4dd5a73ca7bb8f782cd2" } }, "db696e15587c4a54b82886b3eb5a0c96": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": { "layout": "IPY_MODEL_64eb2b9c8a094a1ea5f1991e5f09f5d9", "style": "IPY_MODEL_5b3e72b71f304230bc36bb91f9c173be", "value": "Step 1 / 2 Writing Blocks: 100%" } }, "e170d60a55a14c489d32b101293a9d33": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": { "layout": "IPY_MODEL_9fe5348964cd4f7880bcd33204bbc7a2", "style": "IPY_MODEL_4df685a95de542ffab6f265df89b8949", "value": "Step 2 / 2 Concat Blocks: " } }, "e66368cda8124001b16459a0634029e2": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLStyleModel", "state": { "description_width": "", "font_size": null, "text_color": null } }, "eab4b060672b4dd5a73ca7bb8f782cd2": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "display": "inline-flex", "flex_flow": "row wrap", "width": "100%" } }, "f65266f861cf40ef84e9ec74a8e0b44c": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": { "layout": "IPY_MODEL_fff4199774534d9f982f03738fbb08e7", "style": "IPY_MODEL_e66368cda8124001b16459a0634029e2", "value": "Scanning SEG-Y for geometry attributes: 100%" } }, "fdcea609ee7349629604217b625371d3": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLStyleModel", "state": { "description_width": "", "font_size": null, "text_color": null } }, "fff4199774534d9f982f03738fbb08e7": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} } }, "version_major": 2, "version_minor": 0 } } }, "nbformat": 4, "nbformat_minor": 4 }