From 74fdd183061d81d085e3e765cc6f1bdce335faf5 Mon Sep 17 00:00:00 2001 From: benjamink Date: Tue, 4 Mar 2025 11:04:11 -0800 Subject: [PATCH 01/11] first draft --- .../images/apply_mask.png | Bin 0 -> 39239 bytes .../images/save_sensitivities.png | Bin 0 -> 4563 bytes .../images/sensitivity_models.png | Bin 0 -> 10592 bytes docs/depth_of_investigation/images/uijson.png | Bin 0 -> 8949 bytes .../sensitivity_cutoff.ipynb | 95 ++++++++++++++++++ docs/inversion/fundamentals.ipynb | 12 +++ docs/inversion/joint_inversion.ipynb | 12 +++ 7 files changed, 119 insertions(+) create mode 100644 docs/depth_of_investigation/images/apply_mask.png create mode 100644 docs/depth_of_investigation/images/save_sensitivities.png create mode 100644 docs/depth_of_investigation/images/sensitivity_models.png create mode 100644 docs/depth_of_investigation/images/uijson.png create mode 100644 docs/depth_of_investigation/sensitivity_cutoff.ipynb diff --git a/docs/depth_of_investigation/images/apply_mask.png b/docs/depth_of_investigation/images/apply_mask.png new file mode 100644 index 0000000000000000000000000000000000000000..29af72f680e2d2bede7dc6dcedb291fb84ba1d95 GIT binary patch literal 39239 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 literal 0 HcmV?d00001 diff --git a/docs/depth_of_investigation/images/save_sensitivities.png b/docs/depth_of_investigation/images/save_sensitivities.png new file mode 100644 index 0000000000000000000000000000000000000000..61ca2aabd7c6d2bd031d83b752ee626aef52c044 GIT binary patch literal 4563 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 literal 0 HcmV?d00001 diff --git a/docs/depth_of_investigation/images/sensitivity_models.png b/docs/depth_of_investigation/images/sensitivity_models.png new file mode 100644 index 0000000000000000000000000000000000000000..dac74157af4b7fe79e06f87a29e4a5f339b3298d GIT binary patch literal 10592 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 literal 0 HcmV?d00001 diff --git a/docs/depth_of_investigation/sensitivity_cutoff.ipynb b/docs/depth_of_investigation/sensitivity_cutoff.ipynb new file mode 100644 index 00000000..c7acf37c --- /dev/null +++ b/docs/depth_of_investigation/sensitivity_cutoff.ipynb @@ -0,0 +1,95 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "c6c8ad14-6e0f-405b-8356-3b9b6ab049f8", + "metadata": {}, + "source": [ + "# Sensitivity Cutoff\n", + "\n", + "One way to measure the depth of investigation of a sensitivity based inversion algorithm is to filter the model cells as a percentage (or percentile) of the sensitivity matrix. SimPEG inversion routines calculate sensitivities at each iteration. A mask can be calculated at each iteration by asking what cells in the inversion model are associated with a sensitivity that exceeds some threshold. There are a number of ways to calculate a threshold including percentage, log percentage, and percentile. In each calculation, the resulting mask should broadly look like a heterogeneous depth cutoff since the data are naturally less sensitive to deeper cells in all geophysical methods. In the following, we discuss the algorithm and implementation of the sensitivity cutoff strategy." + ] + }, + { + "cell_type": "markdown", + "id": "c13ffcec-8d95-4ee9-876f-9aa92e2c534a", + "metadata": {}, + "source": [ + "## Sensitivities\n", + "\n", + "The sensitivity matrix is calculated as part of the optimization problem solved by SimPEG while inverting geophysical data. The sensitivity matrix represents the degree to which each predicted datum changes with respect to a perturbation in each model cell. It is given in matrix form by\n", + "\n", + "$$\n", + "\\mathbf{J} = \\frac{\\mathbf\\partial{F}(\\mathbf{m})}{\\partial{\\mathbf{m}}}\n", + "$$\n", + "\n", + "where $\\mathbf{m}$ is the model vector, and $\\mathbf{F}(\\mathbf{m})$ represents the forward modelling operation as a function of the model. The dimensions of the sensitivity are $n\\times m$ where $n$ is the number of data and $m$ are the number of mesh cells.\n", + "\n", + "The depth of investigation mask is a property of the cells of the mesh only so the rows of the matrix (data) are sum-square normalized as follows.\n", + "\n", + "$$\n", + "\\mathbf{J} = \\Bigg|\\frac{\\mathbf\\partial{F}_{n}(\\mathbf{m})}{\\partial{\\mathbf{m}}}\\Bigg|_{n=1:N}^{2}\n", + "$$\n", + "\n", + "The resulting vector can then be thought of as the degree to which the aggregate data changes due to a small perturbation in each model cell. The depth of investigation mask is then computed by thresholding those sensitivities" + ] + }, + { + "cell_type": "markdown", + "id": "d8bb85c5-5e63-4617-ab6b-a7b6536c1d2c", + "metadata": {}, + "source": [ + "## Thresholding\n", + "\n", + "The depth of investigation can be estimated by assigning a threshold on the sum-squared sensitivity vector. This can be done as a percentile, percentage, or log-percentage. In the percentile method, the mask is formed by eliminating all cells in which the sensitivity falls below the lowest $n$% of the number of data where $n$ is the chosen cutoff. In the percent method the data are transformed into a percentage of the largest value\n", + "\n", + "$$\n", + "d_{scaled} = \\frac{100 \\cdot d}{max(d)}\n", + "$$\n", + "\n", + "and the mask is formed by eliminating all cells in which the sensitivity falls below the lowest $n$% of the data values where $n$ is the chosen cutoff. Finally, the log-percent mask transforms the data into log-space before carrying out the percentage thresholding described above." + ] + }, + { + "cell_type": "markdown", + "id": "83b4ae8f-5509-40b1-98c2-39acefba438c", + "metadata": {}, + "source": [ + "## Usage\n", + "\n", + "The depth of investigation methods based on sensitivity cutoffs described above are exposed to Geoscience ANALYST Pro Geophysics users through a ui.json interface. In order to compute the sensitivities required for these methods, the 'Save sensitivities' option must be selected from the 'Optional parameters' tab of the ui.json window.\n", + "\n", + "![save_sensitivities](./images/save_sensitivities.png)\n", + "\n", + "This will result in a new model generated and saved into the computational mesh at each iteration.\n", + "\n", + "![sensitivity_models](./images/sensitivity_models.png)\n", + "\n", + "The ui.json interface allows the user to select a mesh from the **simpeg-drivers** result and any of the generated sensitivity models, a cutoff threshold, method, and optional name for the output.\n", + "\n", + "![interface](./images/uijson.png)" + ] + } + ], + "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.10.16" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/inversion/fundamentals.ipynb b/docs/inversion/fundamentals.ipynb index b9cd8b5f..0df0b67c 100644 --- a/docs/inversion/fundamentals.ipynb +++ b/docs/inversion/fundamentals.ipynb @@ -291,6 +291,18 @@ "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.10.16" } }, "nbformat": 4, diff --git a/docs/inversion/joint_inversion.ipynb b/docs/inversion/joint_inversion.ipynb index b914998f..529c9b1a 100644 --- a/docs/inversion/joint_inversion.ipynb +++ b/docs/inversion/joint_inversion.ipynb @@ -136,6 +136,18 @@ "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.10.16" } }, "nbformat": 4, From 598bb2fcb9da6f3322181016bf6f12e8606f8f32 Mon Sep 17 00:00:00 2001 From: benjamink Date: Wed, 5 Mar 2025 13:56:40 -0800 Subject: [PATCH 02/11] finished notebook, generated .py files --- docs/_toc.yml | 1 + docs/case_study/airborne_tem.py | 2 +- docs/case_study/background.py | 2 +- docs/case_study/dc_resistivity.py | 2 +- docs/case_study/gravity.py | 2 +- docs/case_study/introduction.py | 2 +- docs/case_study/joint_inversion.py | 2 +- docs/case_study/magnetic.py | 2 +- docs/case_study/tipper.py | 2 +- .../images/apply_mask.png | Bin docs/inversion/data_misfit.py | 2 +- .../depth_of_investigation.ipynb} | 16 +++- docs/inversion/depth_of_investigation.py | 69 ++++++++++++++++++ docs/inversion/fundamentals.py | 2 +- docs/inversion/images/masked_model.png | Bin 0 -> 47614 bytes .../images/save_sensitivities.png | Bin docs/inversion/images/sensitivity_mask.png | Bin 0 -> 3638 bytes .../images/sensitivity_models.png | Bin .../images/uijson.png | Bin docs/inversion/index.ipynb | 22 ++++++ docs/inversion/index.py | 8 +- docs/inversion/joint_inversion.py | 2 +- docs/inversion/mesh_design.py | 2 +- docs/inversion/regularization.py | 2 +- 24 files changed, 120 insertions(+), 22 deletions(-) rename docs/{depth_of_investigation => }/images/apply_mask.png (100%) rename docs/{depth_of_investigation/sensitivity_cutoff.ipynb => inversion/depth_of_investigation.ipynb} (86%) create mode 100644 docs/inversion/depth_of_investigation.py create mode 100644 docs/inversion/images/masked_model.png rename docs/{depth_of_investigation => inversion}/images/save_sensitivities.png (100%) create mode 100644 docs/inversion/images/sensitivity_mask.png rename docs/{depth_of_investigation => inversion}/images/sensitivity_models.png (100%) rename docs/{depth_of_investigation => inversion}/images/uijson.png (100%) diff --git a/docs/_toc.yml b/docs/_toc.yml index 92c31edb..18bb7317 100644 --- a/docs/_toc.yml +++ b/docs/_toc.yml @@ -11,6 +11,7 @@ chapters: - file: inversion/regularization - file: inversion/mesh_design - file: inversion/joint_inversion + - file: inversion/depth_of_investigation - file: case_study/introduction sections: - file: case_study/background diff --git a/docs/case_study/airborne_tem.py b/docs/case_study/airborne_tem.py index e75c7a62..157b97f0 100644 --- a/docs/case_study/airborne_tem.py +++ b/docs/case_study/airborne_tem.py @@ -5,7 +5,7 @@ # extension: .py # format_name: light # format_version: '1.5' -# jupytext_version: 1.16.2 +# jupytext_version: 1.16.7 # kernelspec: # display_name: Python 3 (ipykernel) # language: python diff --git a/docs/case_study/background.py b/docs/case_study/background.py index 873e3fa9..044f7157 100644 --- a/docs/case_study/background.py +++ b/docs/case_study/background.py @@ -5,7 +5,7 @@ # extension: .py # format_name: light # format_version: '1.5' -# jupytext_version: 1.16.2 +# jupytext_version: 1.16.7 # kernelspec: # display_name: Python 3 (ipykernel) # language: python diff --git a/docs/case_study/dc_resistivity.py b/docs/case_study/dc_resistivity.py index ff712ca3..f1ecf5ef 100644 --- a/docs/case_study/dc_resistivity.py +++ b/docs/case_study/dc_resistivity.py @@ -5,7 +5,7 @@ # extension: .py # format_name: light # format_version: '1.5' -# jupytext_version: 1.16.2 +# jupytext_version: 1.16.7 # kernelspec: # display_name: Python 3 (ipykernel) # language: python diff --git a/docs/case_study/gravity.py b/docs/case_study/gravity.py index 8a7f9766..da717e2f 100644 --- a/docs/case_study/gravity.py +++ b/docs/case_study/gravity.py @@ -5,7 +5,7 @@ # extension: .py # format_name: light # format_version: '1.5' -# jupytext_version: 1.16.2 +# jupytext_version: 1.16.7 # kernelspec: # display_name: Python 3 (ipykernel) # language: python diff --git a/docs/case_study/introduction.py b/docs/case_study/introduction.py index d7555c0b..b643aad1 100644 --- a/docs/case_study/introduction.py +++ b/docs/case_study/introduction.py @@ -5,7 +5,7 @@ # extension: .py # format_name: light # format_version: '1.5' -# jupytext_version: 1.16.2 +# jupytext_version: 1.16.7 # kernelspec: # display_name: Python 3 (ipykernel) # language: python diff --git a/docs/case_study/joint_inversion.py b/docs/case_study/joint_inversion.py index ad2e9ceb..24317b63 100644 --- a/docs/case_study/joint_inversion.py +++ b/docs/case_study/joint_inversion.py @@ -5,7 +5,7 @@ # extension: .py # format_name: light # format_version: '1.5' -# jupytext_version: 1.16.2 +# jupytext_version: 1.16.7 # kernelspec: # display_name: Python 3 (ipykernel) # language: python diff --git a/docs/case_study/magnetic.py b/docs/case_study/magnetic.py index a00e2018..c5cc6859 100644 --- a/docs/case_study/magnetic.py +++ b/docs/case_study/magnetic.py @@ -5,7 +5,7 @@ # extension: .py # format_name: light # format_version: '1.5' -# jupytext_version: 1.16.2 +# jupytext_version: 1.16.7 # kernelspec: # display_name: Python 3 (ipykernel) # language: python diff --git a/docs/case_study/tipper.py b/docs/case_study/tipper.py index cd0ec0a6..e4dcfa7c 100644 --- a/docs/case_study/tipper.py +++ b/docs/case_study/tipper.py @@ -5,7 +5,7 @@ # extension: .py # format_name: light # format_version: '1.5' -# jupytext_version: 1.16.2 +# jupytext_version: 1.16.7 # kernelspec: # display_name: Python 3 (ipykernel) # language: python diff --git a/docs/depth_of_investigation/images/apply_mask.png b/docs/images/apply_mask.png similarity index 100% rename from docs/depth_of_investigation/images/apply_mask.png rename to docs/images/apply_mask.png diff --git a/docs/inversion/data_misfit.py b/docs/inversion/data_misfit.py index 3475cd5e..97665429 100644 --- a/docs/inversion/data_misfit.py +++ b/docs/inversion/data_misfit.py @@ -5,7 +5,7 @@ # extension: .py # format_name: light # format_version: '1.5' -# jupytext_version: 1.16.2 +# jupytext_version: 1.16.7 # kernelspec: # display_name: Python 3 (ipykernel) # language: python diff --git a/docs/depth_of_investigation/sensitivity_cutoff.ipynb b/docs/inversion/depth_of_investigation.ipynb similarity index 86% rename from docs/depth_of_investigation/sensitivity_cutoff.ipynb rename to docs/inversion/depth_of_investigation.ipynb index c7acf37c..b0b94013 100644 --- a/docs/depth_of_investigation/sensitivity_cutoff.ipynb +++ b/docs/inversion/depth_of_investigation.ipynb @@ -5,7 +5,9 @@ "id": "c6c8ad14-6e0f-405b-8356-3b9b6ab049f8", "metadata": {}, "source": [ - "# Sensitivity Cutoff\n", + "# Depth of Investigation\n", + "\n", + "![masked_model](./images/masked_model.png)\n", "\n", "One way to measure the depth of investigation of a sensitivity based inversion algorithm is to filter the model cells as a percentage (or percentile) of the sensitivity matrix. SimPEG inversion routines calculate sensitivities at each iteration. A mask can be calculated at each iteration by asking what cells in the inversion model are associated with a sensitivity that exceeds some threshold. There are a number of ways to calculate a threshold including percentage, log percentage, and percentile. In each calculation, the resulting mask should broadly look like a heterogeneous depth cutoff since the data are naturally less sensitive to deeper cells in all geophysical methods. In the following, we discuss the algorithm and implementation of the sensitivity cutoff strategy." ] @@ -57,7 +59,7 @@ "source": [ "## Usage\n", "\n", - "The depth of investigation methods based on sensitivity cutoffs described above are exposed to Geoscience ANALYST Pro Geophysics users through a ui.json interface. In order to compute the sensitivities required for these methods, the 'Save sensitivities' option must be selected from the 'Optional parameters' tab of the ui.json window.\n", + "The depth of investigation methods based on sensitivity cutoffs described above are exposed to Geoscience ANALYST Pro Geophysics users through a ui.json interface. In order to save the sensitivities during a SimPEG inversion, the 'Save sensitivities' option must be selected from the 'Optional parameters' tab of the SimPEG inversion ui.json window.\n", "\n", "![save_sensitivities](./images/save_sensitivities.png)\n", "\n", @@ -67,7 +69,15 @@ "\n", "The ui.json interface allows the user to select a mesh from the **simpeg-drivers** result and any of the generated sensitivity models, a cutoff threshold, method, and optional name for the output.\n", "\n", - "![interface](./images/uijson.png)" + "![interface](./images/uijson.png)\n", + "\n", + "It will create a sensitivity cutoff mask saved on the mesh\n", + "\n", + "![mask](./images/sensitivity_mask.png)\n", + "\n", + "which can then be applied to any of the iterations to show only the cells that exceeded the sensitivity threshold.\n", + "\n", + "![masked_model](./images/masked_model.png)" ] } ], diff --git a/docs/inversion/depth_of_investigation.py b/docs/inversion/depth_of_investigation.py new file mode 100644 index 00000000..ae7a664b --- /dev/null +++ b/docs/inversion/depth_of_investigation.py @@ -0,0 +1,69 @@ +# --- +# jupyter: +# jupytext: +# text_representation: +# extension: .py +# format_name: light +# format_version: '1.5' +# jupytext_version: 1.16.7 +# kernelspec: +# display_name: Python 3 (ipykernel) +# language: python +# name: python3 +# --- + +# # Sensitivity Cutoff +# +# ![masked_model](./images/masked_model.png) +# +# One way to measure the depth of investigation of a sensitivity based inversion algorithm is to filter the model cells as a percentage (or percentile) of the sensitivity matrix. SimPEG inversion routines calculate sensitivities at each iteration. A mask can be calculated at each iteration by asking what cells in the inversion model are associated with a sensitivity that exceeds some threshold. There are a number of ways to calculate a threshold including percentage, log percentage, and percentile. In each calculation, the resulting mask should broadly look like a heterogeneous depth cutoff since the data are naturally less sensitive to deeper cells in all geophysical methods. In the following, we discuss the algorithm and implementation of the sensitivity cutoff strategy. + +# ## Sensitivities +# +# The sensitivity matrix is calculated as part of the optimization problem solved by SimPEG while inverting geophysical data. The sensitivity matrix represents the degree to which each predicted datum changes with respect to a perturbation in each model cell. It is given in matrix form by +# +# $$ +# \mathbf{J} = \frac{\mathbf\partial{F}(\mathbf{m})}{\partial{\mathbf{m}}} +# $$ +# +# where $\mathbf{m}$ is the model vector, and $\mathbf{F}(\mathbf{m})$ represents the forward modelling operation as a function of the model. The dimensions of the sensitivity are $n\times m$ where $n$ is the number of data and $m$ are the number of mesh cells. +# +# The depth of investigation mask is a property of the cells of the mesh only so the rows of the matrix (data) are sum-square normalized as follows. +# +# $$ +# \mathbf{J} = \Bigg|\frac{\mathbf\partial{F}_{n}(\mathbf{m})}{\partial{\mathbf{m}}}\Bigg|_{n=1:N}^{2} +# $$ +# +# The resulting vector can then be thought of as the degree to which the aggregate data changes due to a small perturbation in each model cell. The depth of investigation mask is then computed by thresholding those sensitivities + +# ## Thresholding +# +# The depth of investigation can be estimated by assigning a threshold on the sum-squared sensitivity vector. This can be done as a percentile, percentage, or log-percentage. In the percentile method, the mask is formed by eliminating all cells in which the sensitivity falls below the lowest $n$% of the number of data where $n$ is the chosen cutoff. In the percent method the data are transformed into a percentage of the largest value +# +# $$ +# d_{scaled} = \frac{100 \cdot d}{max(d)} +# $$ +# +# and the mask is formed by eliminating all cells in which the sensitivity falls below the lowest $n$% of the data values where $n$ is the chosen cutoff. Finally, the log-percent mask transforms the data into log-space before carrying out the percentage thresholding described above. + +# ## Usage +# +# The depth of investigation methods based on sensitivity cutoffs described above are exposed to Geoscience ANALYST Pro Geophysics users through a ui.json interface. In order to save the sensitivities during a SimPEG inversion, the 'Save sensitivities' option must be selected from the 'Optional parameters' tab of the SimPEG inversion ui.json window. +# +# ![save_sensitivities](./images/save_sensitivities.png) +# +# This will result in a new model generated and saved into the computational mesh at each iteration. +# +# ![sensitivity_models](./images/sensitivity_models.png) +# +# The ui.json interface allows the user to select a mesh from the **simpeg-drivers** result and any of the generated sensitivity models, a cutoff threshold, method, and optional name for the output. +# +# ![interface](./images/uijson.png) +# +# It will create a sensitivity cutoff mask saved on the mesh +# +# ![mask](./images/sensitivity_mask.png) +# +# which can then be applied to any of the iterations to show only the cells that exceeded the sensitivity threshold. +# +# ![masked_model](./images/masked_model.png) diff --git a/docs/inversion/fundamentals.py b/docs/inversion/fundamentals.py index 608b7428..801126dd 100644 --- a/docs/inversion/fundamentals.py +++ b/docs/inversion/fundamentals.py @@ -5,7 +5,7 @@ # extension: .py # format_name: light # format_version: '1.5' -# jupytext_version: 1.16.2 +# jupytext_version: 1.16.7 # kernelspec: # display_name: Python 3 (ipykernel) # language: python diff --git a/docs/inversion/images/masked_model.png b/docs/inversion/images/masked_model.png new file mode 100644 index 0000000000000000000000000000000000000000..606726cc341e0ac294922d4e045bc14a90e3e18f GIT binary patch literal 47614 zcmb5V1yof18!kG6h_rNrlF~giD5=1ZDka@8bT>+eAPqBwk}5rPcRPe2Fmy>scf;9y z|2X&DbZfANnk^H_0Z*`?^K4U0HV?RYpY1Yw*`SyAwV$M1yl9|1qK!}CK>yu3sp>lCW zbdEwr4#RT>PYk|aat}V_pBeJhZeQO{rOyfMWeJE^iZ_Z^p820=4DV*xSXp|c9?hPS za8Z5wYfKSla(}RVKK4HF=4}0I3q$f^6oy#x;&%S~P^l@0^8fcNs}s@x-~V~x53>B{ zGTaqWPWZnsBUblvdfGGme|=vkZ_N6CZ&Cp*wSS;!{Xco$|8gHNhX2PP9|U7!ntlZR ze~RnDwajo5J(}*#)C;q_~I4?ryVAgFPmh z!+h*p;8fdQQmWzB1&V4UAeXwLYN&$78kXoUEymi97TR;rjDO{7sD{Qy{nGS#^{-tE z!=jN8c|y!|%?59XojNu6mf8Hc+URF{%^y2wvsQ=mQVW4WOD^_-gB@C7yk=u4F z&MnZF*EVbowGJP08{N7_S}+%<95P4hLr*CFvwI{u;Pj_UMV3`Q29mbxH$jcksVfhgS#HYf7PaEu6SvcQ^QA?fEShZf$1)MnxS(YutOou&c5dEK) zLD&+HycD9Y*rFdco7^GD-5t{%@!Wm{QrVlPqo)~3cgP}~u{$;E=&-0;E>YVLXA`I} z?d5L3`k%k>03#I{#wA|9wRA9baMY+FY(b{31=rEm&RH^23@I=BIU|+oyY=^A?M(R~ zH+7*iTlxxn#`bg!@^AYNGfCro{tY@YWEeu*dW~bdaEbd(&3;1cyA^A(&1jOPuL8s$ z-4Is$Sk}mgymHbp>`tug-$t)Ovs>2x@YBb>0z>UMNgha7X(L^D3uG?oBy--t=AG(P zQ|%+^Kwo~kEYY|tm;ZW-*Nb@zftuP!jkkyN;}S>s+p7yi`$p3m(-P1AzXsW`O-qhznc(KGWLMUp>{69{uI&XeI1o69T5nJh~k+*DJf_U^k zf@mfBZXidV_hClO!ldqad<|k8ZnWpeMe=oK+YfPXPC6-WXIP!v_p&-ZZ}lu|pT%_Q zYgy*jaMvd2Kd#xEj@Bym2934q%4qZb+hVlxR^`Dbmp{aX5z&zXKsQ=5yr|J+IKbG+wWwQjoEe1DCw zr8%7>OLYQ&f8JZ&*|{;-jBe2VpI{W9K#rQd`pY!#AK$WB+`o&^+-5uTXh>A?3OsPR zUWe}?$cApJPbiMA&5Ly!F$k^~LhFt*UT#d4TA2EWgSqx|2RfY=9C_Nx0>Kmz_5sc- z%uGwjfb-72((&#@R;lT~){dr)ag_fh(>kJFnx8;uxEZs~I-#K`2lqtp5+B}xzcHer znGi6eVm;!1y)`I$ZrZKaFhEKyl^Oiqh^J@4kv3L6E>_(@Z!)$-!`saWmMLRzAo*MAKDb(OUs%zjZd5-_E$14Aq=b{S)Zs@>}@ zOUa!s4=`6IrNz@rJ-T!LQ155g{vb4H#Q2lXEV4Udc>V_?c(mrNKm(g`#P1mI!Tssp zyUxFOGwO!#qH+mDLE3lca&8(i$Bm|Q@0yP1RXFu39w6cG7V{WoMOH#&M~dvk8`waL zMUJUv9Z90+Ccjy%LHK)|UtY^o z4v9H~0z4)vtWiyo7LC=^wPwFk7gqjeXM`|w2rpMm7MlFNw13Vv>a_7;&S@?*c(hrI zdQghNmAtGcdT*#L>SRVe$3~>d$n(9&(2L`(a_Y)C-FMA|*u9jJUQ8pu=*Cj&ur&zBhOJ_ksThl&82O#o zsTr>1ruy}Ev6<6$kYPkA>SMU!1qmx1p-kfhlIv=FzLB1wNrZAwB{RBGl_qFOHnv9t z^Q>#&ME_u)Bm1lGI{5L)hBa!vd3fFI*lf>i#H87IEi(Me-UHeLe>e2oo9T6HO~bIx zOLsNs%*d0@h3p%OyUb&}j^5+$;UNh!Ryq_WymqhWW;pO8?8aTh4jn ztU}RRe@k6OT5PW&JdAuk^8oTc2Woa7Nt;RX*JU>zU9 z-X$$<*8bqTKF&QD6Nv3->+~_(DcJE^?C!s}osID!_K<3Kz|WS=o33wFGTeWGaHUtC z!YO*#!KUyluR${*}{#PO0%d} z0{=vjRalMdy785U;utjSKu9ziI#KpMj<)rZLtRT*JKw@$(6Y{}ui~5Xm;~4;9s+tk zD%j-O&r36pGHC78W*O=rU*K$C@ib7<7G1lsIl5ofrOi?8ykp<%Vg27;fzy5x`tHor zwKnm6tw5B6qFONT8g{I#A&>N760Xl~4_D=`cT%#MU^~0BTET;Req_Q%K4M{6f^CSK zQ-iCKC(&Pnov*{fD6)K9#Vm*7mPf^TUPr#*jw$WkZNB2$FQ1QW+JAetf(*RDo)cqX zjN=L1C%wJu7xvnYOVwjY00MO|52XFa$qW#E!gF&Z=rppd6E|# z+xuI}2r;;(E~Ph?RjuCLq{s1k9#Bd6^*(lEiSOTlA*U+K$ik@+7dMELx|{ae{Ym|R zkBnDm<QyYoO^h5dNbmRWTnnHMf5^(!d1$dy6Sz$w!=L7K zdnS%&om+X8OTU@YD6p1j(oj8}0S0oqYzuZ;j(-+&wOAxKKkr{XrLVE??x(gf-U=g zfeVd4CL1F)%u?w~x2|pfS_3vtn2LITBy@sHKlsx23~2?Ko|t%6Wygc$7TM#DHT^v_ zCpeQb-S9~8`}0B+DCkToJKSjgCV|=DqIdn^Z+IoqOz~V5`d00BSACRJaf!ZQccfz2 z{+}jm2FJsgJ?9QWf8PBO!xVdnlCrYXjeMc;Jb_)g$)GCe1>pLljdtP^0?$4oXSU0n z|4v4aeud!RiWL(W{7IAN02@0(xB@)Z_}oZAi$SG3qlLbhat|XP1*z`nEq{?R;Phsh z6R(vYi*hNRF6W9DcAqe%885_972`KYz3aI*JJ(y641sgrq*n^gwx}koA@M&>KhvzZ zi2svEzOTxG&jKaTFK@+QI}{Miu##!H$_F5-pd}Xg&!vw2bGu){Tp0V4gAKj07g zlGB7+p@XnEPk4LayA+bVRh!dPHD05(7KGkta`MP7{XcN;b+;>O{A@C3cd%Y?hP0ZQ zSx4znla1!Pu&vJCXZ(lc6aih&&P`ED*Snc&Kc%Ub2U4G*-hmqcT{mxzns zXUCABwY9*+s-P*;eiL|Cc3b7fn+-{Jgk$SQcR^8{>-uxrS{(L&IdUxnB~K@RFHMi~ zP1p?{-?jIlXIgzVE!mFk2Zs{ z2P1WA2OZ7QYPd;>vEn_dZ9(eV?{5+lH`sBcTTYy3-RDF_Zk@bcr;@j7mZgb*5T;k+ z-a|E!zl-NW3#VnZBM5Ken3mi34benmFGdu9=%r8qk? z8hML#zwEPDaQc<02bdtx?P+%0NRBRsL-RFmgAF!Ls$*N(9%Z<5U~3P!;a|)(QLS#6 zh4_s`96$%&f3C0wTT^9;pM#>U@g=^98#Z0D)?MY=oX@ZtEpDU~@tzz%rjxLIa4EPD z+9;JC=PP|hrdTx>YV`=&?i<`HGyLoA`B8ZG^1F6Qeh=A`;P>|G|_)`GtoKCKJJpHB~hp$uThmK77 z1z@o*H`>8Thy0>{xd1j=Gz+nLQ!>OraVKf@aiN3v_dtRsCv}&GNW-1!#U-4f9@;%f z`^UG@2eSvRP8NH=&wm%^I$c_sTnEg9B$|uKv-GB^?}XRYGp=ozZ;yALQF!n3OZaTp zo}V{j)E%@EAM}Mv%dDsLkG`q2IK4!Es~{AOKSXH0_nyZ(H}8>oGpwtmU6`+52;M;D z)6U=i^d4Ikh?S-Q0(@jyOR};vXTi#*aN)|7tnXJ@{i`cY&77sW2hHUczAhtQv|@L{ zKk0ie1um47L$|_io5gbNi`KjjnkjW(+li@)mP(T;OmggnzB(!(eN6BEbpFbZj*80E zP3S*?k9+?OcuU(cq$L0c>Cq)jJG0pTpjktoh(|NB00?q{A>#A!kM$g>i~S#54{oQ2 z>UOts%bm29ZCd*u8FUKIOfUXTS2UZLs5u}0BKpm+0rxJQkJ|HY<4qD}?@)?+FP1nrpU^9@Ies{=E{7bRM$N=l)Ta`46(6}Fxk!deIG6?^x_b|h^`MmD*1`>MAb^e z;lIvYhgWM5DWzH_YUGX*mGrgk*1!?Jb_k*=QJ zM>w}AsiWT^9?S4K9UtPLCe!y|HL$gf{g=@=m!w$jKfp22+m>PNuDl1qU9ffTvdiBj z#4PG^xK~Q^@sC}t@oZO_CPU|yt?hjx+(({GZ0h_s!sffJ_QiXS{Z#o5Z+%#u9RR5u zBN`LDHW_Kx;lW*XnSC(lq_kjIw>S1Uz*n8b?o_B#OW9Y}lXn6dTxv3O3Kl6jdKaR% z-CZZoH>)oCq{wr->#zhB$29$AOQczi;MiscR+^AwLv;^Q^Yf_y2rT$hw~7j&HdED} z(i8U6AIe(wBZZ|d9u2o1F{_F&geZsOA#mHqO0=lmHbEWZf6(whCV=W1+iCDte- zb7S%`XvTA=vxt7EBm6f`xvvpd&E9M@kh~Y`JsHw!z3_JH)}U23C|urBs~6um0RDkr z=66ndIx#LY=?>&=JmP|%?MHilk+N4Fy#VG9vc&y${4?Y+x73wLm2FnWS*2$!{&TM1 z`{VGj3Rh3Odkog(FKqcUdien0K>+UgCUNWFRY|dUDB70`;AH}8fXQ;yp+B4 zF%BKGnc-(!u@*(bE6I_SBTvRO^tI!F%(zs-R(WvUDByJ5E=kNdQ3IWSC@EgseGd`| zIKVO-qvd92Qhtr*T(?K>gru%~_*Ci5C8hpxAeB;UaZmgjdUrvjW!j6yP0&kUql?E^ zS+EzCV~5KxB@fDZt;}>^W3eoFVJI{UP$F$xy6rJ}+U4UvOwqfNr$gUO2k{JN#Bx~C zM7K0QT86E}^{8cee{x7643xMKxjvkdweira*_{do@MPz9Xi(r0z; z443zTZZ->1y9vfS1+@3r{kq(g(bjfr1VB$2ZsQ+BjzVPB^HR*n2MCGWRYA8yQ56-Q6(Q{zcFyt&#WQwq>hQzN-A!<0yIrbil5`)FwZZdbnZx z4a1hu@aooV;`yDi-}k6qXHqq-+LlWYxuQh+DHC%7s=7L zYIv;xovF>X{I?PmV^wbb1B=TD4wE^eWo41}qC(9ETyM+gkO-z z7GC8T98Itb`S19NsfwUsDP{S(o1&7HFO^)e6v53Y$OXxWFh{aqP-c5o>X3lp8w}n@ z@n1KtCYSPS1A?;ylMMU>U9bv4n zIWzpJW0Hx+NQ}QXMW#(Vk!mSkP}=gqH>RL2pPAV@pCYL6^Y*k>aF~u?OFtPB_9a8m z6Cce^c&DwWq!9$7ovwNj$8E2XbH1X$Sx~6bo`8=`>k0j5U_Ev^V1q>gl=*1P%6I5) z)79&7$W54~GRjErV{|x8^lzg6%YH)4m5+@0?ZZaim`3>Nv4lo+;ctCQAoiKRzQ5+m zq7x)1e?!obOP&?H-U5r(GJ*A`2dtFI;v^_(3yjBKe?aRCEFBfbcly=%l7Eq;AD`lc4p2Lbks zKjX2B0lJ5L`#^RaL*_{ce5D#zi2#9OMOQ)BR|Kge5F$arF5bUJjwWl@&p}_TQa!x> z(6_!wms$J^a8CfNM3#{kgFpaz=n7OYinWAr5Y3EF{9gG@(AopnvNRJ&7p^kcS`)e5 zm#X`FP5k8V=qSSBCr;wQL=q~c$t|x@>L0I4Q?ZFbq{mx-v=}Svvpc5DsaDEVmFB~`zv1(sp+yv=)1qw`RQ_=mM?MXB(+sMnRO#0Q@`tqaDP0Y8K~~!$rWCy_;JjL%JGFE=g1N|LO!4Hr(`O|w z7hi=_`tt7^C@-ufYW%k_kPchqnx91k$L)l>KGKJqNS}E;BrXh$*5NcfH#C@8`bkXC z{=N4^ahQ9D2x2YlIP`gL(a3ef?T1NlX7$!W>dkG%$HO z8|@lQM@uK_d`2|9c8luW5@R;!3P_PIDkt0d-->DnT-|oaIE@;AC#)yE-KsSKkdC!S z&pnk>*0x8iZi?}m4A3ZNX(y$mEFQYXDFU<=)Rsc)yMMcWv|*VB$eC+Av4Mtyc<0?} zohdBsfV$>cz;Y(Om&CX~YZMUc>mWfN*m_dvwKSi-;;D`I@?H$6HnW@cIMGcB_%?aH z%G7jtW~B2A!-_6ZC-8d7UvuJav%!^U>)+8i3_ikg@D6-+`bAfXy`f88gQzpHceppW zm+M6|e~}-=0D)!?2h0EY(7ZpnceOIROYP*$V`X1AsOjl!Fxl;t*$5}O*v)19);@iKDO6oPHaJ>e<9tjBeuL%8M+P77TtjBQS} z8bEEUl>L^)n5Wxm6rAUky3rLD;huzV;ybV0d-J8K(sZ)+H{TD|19^GBqfvk;zV9C1 zW1iFur8oGjcmP2T9b`RU#UQT$7h>xLWXSfxz{W>+b?#nD3%^-NE$+2nW+67U0c&qv zn*pB+ES~>>_t!w)J2W)-5NmH!lk{uN+2%P<{XPiDy@$h))Ql9Jv(4h}DWk0xHZEMst4ZZV4J~~|?RuHX z4{?kKgrUlS#4~77xH8f*_W&gBvDcaEni?8gtLt)7 z>XLqqJ4&&3a8Sv)GeV1aOQp-Q4=|L=N8V#w9wqR?2=;$XSxbkXjwa%OD{Fv75Ra6V z6;3<-HC}*z%7w>J%m!>IeGz!BarVjDz%b5T+|%qhJbOh=R;~S|f$vIKSzK4%N#?eR(f$d4g+?p(T-eBcoZ*+w}9XuHka` zJ*h3M%Eb}Yoe{xKn-?wTmak3KVU?;>LAeCGkz~l_(TaOzKK)sas%VqZ`-cyVHQdm9 z0*|E!eQM<zuQKUQf8aPTf_E$mpBLIl>5D4Wv?g z?0kQDl93<8M}bsR6(>T%l2(#dF3~{%7QaWIh*U|dOhHf~)m5(>?Xc>%o{!AwcW*ax z`#iDIB`&4{tS73_fD4{Jb6)UkC8Dm)$DdyzO$8Lw2Db=djrlrv@~q1}wLaBz~k5~hb$b_ToVmpfCQ+kCm4NAAehCKU z*6+RaZvcTj_U7W!JF2)0$BJz*6mG6nlBl%4`W+yNn)Y{7BTuw5d?oZ=uUQIRv=$A? z4X*Xu*Z>GTEKuT#uk^h0=zMF8UP-b3Uj-WziXPwbp44Z0W7tWVZcIp3lRK&_tuwo7 zOo&qAjqus{#L{=3)^;ocsbGRu{g2NuL-!9!J4Z|0m2o$I5th9dr9mgyh)ul{re~Et zL^DhiBCn2;@d1N&_N@WcH+m9PemKbDJ3z2fQsLcj%B9PGT}2C;VYO&*yI$zd*e-XaE-xi%%QL8|tXLZl0 zLH<6Hj<5MMpg@;^YhA0Qv#FyW<*(zW#0UJpSS^OnEP_6j39>~lh2S5w1T*;BZt(`3 zqFt{c37qH0%1q~m=FS5;Eph!#X#&npnVJLw32ph)%6?(x!@@XXt5Ru60SeoV%g8VV zw|2BRA&FZ;lX)>qJr*O6g%;o5p@&2L5l0qY*% zEgIzpgpEC-4dG{0!e->ZT3bccmHxHRCNu};TR?bdNxE-IdifK3R4CSj&4NPoYjv-# zrUGE^3yH)i&b=|b{9YQFO0I1qqmN;dr-U8P4Ce4s675uRPF|FOxquADGOQEfV`luN z1=CGN-kZ&1dp`A*;^|(zwV0Uas4aA6Q#AyTcY4ZoOE*!gZBR+e2E{kViSn) zSm`J`794J|dhU+&fO3~L!23BXqyUz9dwHxFY1ILMG!o3Lfw|D!4>*cu7hj$O^V8M* zC|nfOTQssB{8_NReGDO>^5ML5`ZK=;SE^L_m0dvsF)F0sYd0P_8ZyCu{rQQw;COKj z{pd*t`b4f=C05{CJR*T;R`7Wx!AQ%EyO--BAe7{6JbLfE?wWEOt~mdJF51ZMAMIy% zeRg}SnNh)zkBRWZHK26#q674y@h88_79@~5TeGJcz6^mrSOjvp3%f1sk=xE^8s{3< ztBI6Xh13n64$(8EQaE?@SJ*Umg2Na==|{Ob6)ATNJ-oPM6wVwTgP8JMZ0*3@s1?jE z>NRYX_Pt1*TuCoy=`~pj>)0CM_LPD5b@OgH2Xo>V-g^$#J}8u+cqIPzWp=X!&A5;7 z(1xZLUJr(?rod3}5M^`flG^lNu`RZv0%S_MgPztpIdR$D;;Y`jz(qaNTa2(f5 zGC{B$YOtX-odc1-VGZv&~(#t0;RQ4p}%XBB`{%m9FrWd!|>|A!@r8G)hZFeS9Xukfab5Ys+#7z!HcPz@W5WhFVC!*Uu=|0T6@<`i@1YY zv%HzIj8ZbBNAu+6MO&Iz9zmy@F?*%YaSe8`fc^om!=^DOpKLm}WX4lKl1vWt!`~9_ zEj0FCR!d##yFD}$66|uClUxBR9dsb4T{gwVxYldJIoy9y$;jyWZ`s+AIAJuh!tK#} z$TlrURmGpyFdR@Xz6j{-ZdYcoO&Y{|n_G5Y$9({LL_0xEFvr({Ff_kMYBL3+{a$YKRP_Z9H3= zZZzt-7ecpiFwM?C=V}d{?v8t(ue;LAPOjX%&u(02KPFa~%a53J=>d8t<`=Hh9PYi^ z9E+6nZQjVHhpLkg=Wh?qB^n{ITOU{3Dv}^(pYLL&xD8z0$d(`WSF`j{gB;_3)Y@m~ zU${ew3oUH6AJ$Xa_aM?=n~zx``fr5(tiA_7FrFlK%sH)A%j-Z{s?++!O;bA-{V@JL zZz-~r+dkE_AVy>(Wqx$|A$%!zz|5w`?7re$dv-?-8u@OZ+$4D#CYP;5xxy0gPoW(& zQemJRb2THxcBCX0j|7U;yFSMTez&dkMBe-;sCC5B#|6nq$czU%Xt&Ptd4S8MM&wD- z{c1#sXLkam26VsXXm79?w?01Bn|X(HVoDE_%gZSyX>E3SJY5~DcEhmz4t#gK=gDVb zi72yMKP};14Uy#qs@@|pZ2Bw#2lhE-oA(V3jIFIx{CZrW7KuPl;TaRtYL;Nak=44( zO7c{lsA_{f7onWiI1|!KJ|!-qK(bW3PEyU(x7LLn>S!aS(pM+(XtU;wgA)uofCO>zyLOQ8utgXI`eTvrb@ajLtC{!}q352@@mv>3VLi)FB;YQ(l9+K5 zSSm4~OTuhcy7XmjEKojInH{h+AL74WsgJ8bJ+Tr8nhicE?ln>PH}on_y=}kmn@sf0 zQ2J=b7W%Zn>_?DBZgOu(^ig3a(mBInX8lB+-_$4ax`7K~XFwyaKbxgk(`-*{7?}~J zu8~YDO`E=*sQi%=W{k?yRcSFN2AMXV8c%K%s^1}H8n8(XOgHX^=bqb_ax3|(bndO= zw&h04^6H0yIe0p2J!gYxg@i;revY}N7E{a?QD;f)2?`E7J$wVwX*QvDxSTnc8{a=@ z$-B0a-wQMtdMtHF)0;ZI%si}#mdU^h*9iroY85$ z`a9BtO{>)~Mq26+-;LIKv=}Y!?m+W+>$hk{i#h@e1h3uc(a#=g&+GHlsr6P=;%x@{ zf9^}ew|hSXoQ;Q%(WNTx`%874^+Y`zGO1^2#t`|QN9`L& zSa$|-Gp_kFQu1%c`q(Tk?9&xL3C!`(zWj`=9t*w7D!yIPfa_pHTdpuW0uRQs6E>MN z%9ii^XyHcMV5k{9M9x$=|5<~aqdhs^Y=7cMDJbaw)kY;eoR-_*(M7zT6;;Zm1@~w$ z0aWEQ(ZKrABa(aV3k60A>Nc4&0wVt--bYoGF3ZoJ6Hdh4asSL{ zrBT*)?3ma&U}?>quI_RUKkWfNGKtt$fpSmE@)g%>M3x?(7;OVElL|dj$-@Tra+|97 zE<3L%#@E2x(^aCOq@*}a#!OB-)u@C_^i{0AHh$TcbvHLj{I2m3I%)06)l-SmTJo#! z1y{ijyRXqhUpBb5n_OIT!^uV;4i;by7QmVYSU?+Br)KMOYF`4@JX8EiNJRG4d`Fhm zuhy#E`S4mV|2~h2KJANy;%_ZbpJkH{vF8Bp(8(Lx@j4Vtok6$2p1(fw`@7)JnAQ{r z46134I2>{drzrT!sQnmt(|vT9Bw?j+#xM+SHezqzJuXKwuDA_<4j(xZL9x=C>y>r| zr~>pNSo+O3bAd4zw65g_vmTIcXTh&X<|>LG|^a~ZzU@NRaHzfN$X4DAiDH8DLF4r>b|oxhTd6= z&AqZDa?C%&!O9dh->acj+p7dE+i+wC1z?6m{T&vf3or$Bz=a#20>{5GjB#Zhf2SQpSfZui2KwOMY&F^t z0a?jPD%^;By%-ykBjcMB9JP&`i#BuV0%|*SEYUKH9En0C4pakfw(zO#fegI@dZU@| zr=qO}$)sNk2{Q2d2GJI6a~IV?DTi!$g(U6c*9t5agXEh71yQyix2Z40>jSwh1pKbB zBF_eMSGcxR-p!MBu$Aey3dd{rc{hKCu)|1YZtgIBo}o!4K*%7z*sSnJcw1o81rGYJ zr-@}>CcAPoNHfhgF1Gxwy+iy%h(YSV9&RbccE>I7bYAb25C>z5ezlMn4e)b%T$|y< z)KF!upncyW7Q>oXWbP9QcOA8dY$hRGGb~1T>*~W�_+R^|K{Y)b^ewxUGALJ;zVh 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 literal 0 HcmV?d00001 diff --git a/docs/depth_of_investigation/images/save_sensitivities.png b/docs/inversion/images/save_sensitivities.png similarity index 100% rename from docs/depth_of_investigation/images/save_sensitivities.png rename to docs/inversion/images/save_sensitivities.png diff --git a/docs/inversion/images/sensitivity_mask.png b/docs/inversion/images/sensitivity_mask.png new file mode 100644 index 0000000000000000000000000000000000000000..5b2155cbb54388de1d555ecca0be5082854f21be GIT binary patch literal 3638 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 tBqE1V$)&B}{}Mch$c9ZK{+fw5 Date: Wed, 5 Mar 2025 14:02:56 -0800 Subject: [PATCH 03/11] add apply_mask image update .py files --- docs/inversion/depth_of_investigation.ipynb | 2 ++ docs/inversion/depth_of_investigation.py | 4 +++- docs/{ => inversion}/images/apply_mask.png | Bin docs/inversion/index.py | 2 ++ 4 files changed, 7 insertions(+), 1 deletion(-) rename docs/{ => inversion}/images/apply_mask.png (100%) diff --git a/docs/inversion/depth_of_investigation.ipynb b/docs/inversion/depth_of_investigation.ipynb index b0b94013..483718f6 100644 --- a/docs/inversion/depth_of_investigation.ipynb +++ b/docs/inversion/depth_of_investigation.ipynb @@ -77,6 +77,8 @@ "\n", "which can then be applied to any of the iterations to show only the cells that exceeded the sensitivity threshold.\n", "\n", + "![apply_mask](./images/apply_mask.png)\n", + "\n", "![masked_model](./images/masked_model.png)" ] } diff --git a/docs/inversion/depth_of_investigation.py b/docs/inversion/depth_of_investigation.py index ae7a664b..25f3b4f2 100644 --- a/docs/inversion/depth_of_investigation.py +++ b/docs/inversion/depth_of_investigation.py @@ -12,7 +12,7 @@ # name: python3 # --- -# # Sensitivity Cutoff +# # Depth of Investigation # # ![masked_model](./images/masked_model.png) # @@ -66,4 +66,6 @@ # # which can then be applied to any of the iterations to show only the cells that exceeded the sensitivity threshold. # +# ![apply_mask](./images/apply_mask.png) +# # ![masked_model](./images/masked_model.png) diff --git a/docs/images/apply_mask.png b/docs/inversion/images/apply_mask.png similarity index 100% rename from docs/images/apply_mask.png rename to docs/inversion/images/apply_mask.png diff --git a/docs/inversion/index.py b/docs/inversion/index.py index b6510a45..a1acbb68 100644 --- a/docs/inversion/index.py +++ b/docs/inversion/index.py @@ -27,4 +27,6 @@ # # - [Joint/Coupling Strategies](joint_inversion.ipynb): Inverting multiple geophysical surveys. # +# - [Depth of Investigation](depth_of_investigation.ipynb): Using sensitivities to set depth extents +# # ![inversion_ui](./images/inversion_ui.png) From 0901fb50ee9eea4ab27e022c95a54ce0ba78f5db Mon Sep 17 00:00:00 2001 From: benk-mira <81254271+benk-mira@users.noreply.github.com> Date: Thu, 6 Mar 2025 13:51:55 -0800 Subject: [PATCH 04/11] Update docs/inversion/depth_of_investigation.ipynb Co-authored-by: domfournier --- docs/inversion/depth_of_investigation.ipynb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/inversion/depth_of_investigation.ipynb b/docs/inversion/depth_of_investigation.ipynb index 483718f6..23a34a36 100644 --- a/docs/inversion/depth_of_investigation.ipynb +++ b/docs/inversion/depth_of_investigation.ipynb @@ -9,7 +9,9 @@ "\n", "![masked_model](./images/masked_model.png)\n", "\n", - "One way to measure the depth of investigation of a sensitivity based inversion algorithm is to filter the model cells as a percentage (or percentile) of the sensitivity matrix. SimPEG inversion routines calculate sensitivities at each iteration. A mask can be calculated at each iteration by asking what cells in the inversion model are associated with a sensitivity that exceeds some threshold. There are a number of ways to calculate a threshold including percentage, log percentage, and percentile. In each calculation, the resulting mask should broadly look like a heterogeneous depth cutoff since the data are naturally less sensitive to deeper cells in all geophysical methods. In the following, we discuss the algorithm and implementation of the sensitivity cutoff strategy." + "In geophysics, "depth of investigation" refers to the maximum depth below the surface from which a geophysical survey can reliably measure. It depends on factors like the survey design and physical properties of the subsurface material. Several strategies have been proposed to assess uncertainties in models recovered from inversion. Nabighian & Macnae (1989) used a skin depth approach for electromagnetic surveys, assuming a background halfspace resistivity. Li&O (1999) implemented a cut-off value based on two inverted models obtained with slightly different assumptions. Christiansen & Auken (2012) proposed a mask based on the sum-square of sensitivities to estimate a volume of low confidence. + +In the following, we discuss the algorithm and implementation of the sensitivity cutoff strategy." ] }, { From 11d1fbeddd6b33b0fe09ae4fcddace559f979355 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 6 Mar 2025 21:52:10 +0000 Subject: [PATCH 05/11] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- docs/inversion/depth_of_investigation.ipynb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/inversion/depth_of_investigation.ipynb b/docs/inversion/depth_of_investigation.ipynb index 23a34a36..eedd4ce6 100644 --- a/docs/inversion/depth_of_investigation.ipynb +++ b/docs/inversion/depth_of_investigation.ipynb @@ -9,8 +9,8 @@ "\n", "![masked_model](./images/masked_model.png)\n", "\n", - "In geophysics, "depth of investigation" refers to the maximum depth below the surface from which a geophysical survey can reliably measure. It depends on factors like the survey design and physical properties of the subsurface material. Several strategies have been proposed to assess uncertainties in models recovered from inversion. Nabighian & Macnae (1989) used a skin depth approach for electromagnetic surveys, assuming a background halfspace resistivity. Li&O (1999) implemented a cut-off value based on two inverted models obtained with slightly different assumptions. Christiansen & Auken (2012) proposed a mask based on the sum-square of sensitivities to estimate a volume of low confidence. - + "In geophysics, "depth of investigation" refers to the maximum depth below the surface from which a geophysical survey can reliably measure. It depends on factors like the survey design and physical properties of the subsurface material. Several strategies have been proposed to assess uncertainties in models recovered from inversion. Nabighian & Macnae (1989) used a skin depth approach for electromagnetic surveys, assuming a background halfspace resistivity. Li&O (1999) implemented a cut-off value based on two inverted models obtained with slightly different assumptions. Christiansen & Auken (2012) proposed a mask based on the sum-square of sensitivities to estimate a volume of low confidence. + In the following, we discuss the algorithm and implementation of the sensitivity cutoff strategy." ] }, From 7cff3cf9f289f21d094f9168dab1ba3f0f3cd3ae Mon Sep 17 00:00:00 2001 From: benk-mira <81254271+benk-mira@users.noreply.github.com> Date: Thu, 6 Mar 2025 13:53:04 -0800 Subject: [PATCH 06/11] Update docs/inversion/depth_of_investigation.ipynb Co-authored-by: domfournier --- docs/inversion/depth_of_investigation.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/inversion/depth_of_investigation.ipynb b/docs/inversion/depth_of_investigation.ipynb index eedd4ce6..05de7952 100644 --- a/docs/inversion/depth_of_investigation.ipynb +++ b/docs/inversion/depth_of_investigation.ipynb @@ -27,7 +27,7 @@ In the following, we discuss the algorithm and implementation of the sensitivity "\\mathbf{J} = \\frac{\\mathbf\\partial{F}(\\mathbf{m})}{\\partial{\\mathbf{m}}}\n", "$$\n", "\n", - "where $\\mathbf{m}$ is the model vector, and $\\mathbf{F}(\\mathbf{m})$ represents the forward modelling operation as a function of the model. The dimensions of the sensitivity are $n\\times m$ where $n$ is the number of data and $m$ are the number of mesh cells.\n", + "where $\\mathbf{m}$ is the model vector, and $F(\\mathbf{m})$ represents the forward modelling operation as a function of the model. The sensitivity matrix $\\mathbf{J}$ is a dense array with dimensions $N\\times M$, where $N$ is the number of data and $M$ are the number of mesh cells.\n", "\n", "The depth of investigation mask is a property of the cells of the mesh only so the rows of the matrix (data) are sum-square normalized as follows.\n", "\n", From cf84a9574a6e5a3cb3acbf0249f0a1d8f557bd44 Mon Sep 17 00:00:00 2001 From: benk-mira <81254271+benk-mira@users.noreply.github.com> Date: Thu, 6 Mar 2025 13:53:13 -0800 Subject: [PATCH 07/11] Update docs/inversion/depth_of_investigation.ipynb Co-authored-by: domfournier --- docs/inversion/depth_of_investigation.ipynb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/inversion/depth_of_investigation.ipynb b/docs/inversion/depth_of_investigation.ipynb index 05de7952..c80e7db0 100644 --- a/docs/inversion/depth_of_investigation.ipynb +++ b/docs/inversion/depth_of_investigation.ipynb @@ -32,7 +32,9 @@ In the following, we discuss the algorithm and implementation of the sensitivity "The depth of investigation mask is a property of the cells of the mesh only so the rows of the matrix (data) are sum-square normalized as follows.\n", "\n", "$$\n", - "\\mathbf{J} = \\Bigg|\\frac{\\mathbf\\partial{F}_{n}(\\mathbf{m})}{\\partial{\\mathbf{m}}}\\Bigg|_{n=1:N}^{2}\n", + "\mathbf{doi} = \left[\sum_{n=1}^{N}\left(\frac{\mathbf{J}_{n:}}{w_n}\right)^{2}\right]^{(1/2)}\n", + + "where $w_n$ are the data uncertainties associated with the $n^{th}$ datum. "$$\n", "\n", "The resulting vector can then be thought of as the degree to which the aggregate data changes due to a small perturbation in each model cell. The depth of investigation mask is then computed by thresholding those sensitivities" From 3e8cd2bdf84c84ed9a98cb5c34da055566d2574f Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 6 Mar 2025 21:53:30 +0000 Subject: [PATCH 08/11] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- docs/inversion/depth_of_investigation.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/inversion/depth_of_investigation.ipynb b/docs/inversion/depth_of_investigation.ipynb index c80e7db0..18ba69f9 100644 --- a/docs/inversion/depth_of_investigation.ipynb +++ b/docs/inversion/depth_of_investigation.ipynb @@ -33,7 +33,7 @@ In the following, we discuss the algorithm and implementation of the sensitivity "\n", "$$\n", "\mathbf{doi} = \left[\sum_{n=1}^{N}\left(\frac{\mathbf{J}_{n:}}{w_n}\right)^{2}\right]^{(1/2)}\n", - + "where $w_n$ are the data uncertainties associated with the $n^{th}$ datum. "$$\n", "\n", From 2f6494a2a174362d418a92611c8a3e9bf0079155 Mon Sep 17 00:00:00 2001 From: benjamink Date: Thu, 6 Mar 2025 14:18:17 -0800 Subject: [PATCH 09/11] Dom's comments --- docs/inversion/depth_of_investigation.ipynb | 8 +++-- docs/inversion/depth_of_investigation.py | 8 +++-- docs/inversion/images/cutoff_options.png | Bin 0 -> 3278 bytes docs/inversion/images/save_sensitivities.png | Bin 4563 -> 5027 bytes docs/references.bib | 30 +++++++++++++++++++ 5 files changed, 40 insertions(+), 6 deletions(-) create mode 100644 docs/inversion/images/cutoff_options.png diff --git a/docs/inversion/depth_of_investigation.ipynb b/docs/inversion/depth_of_investigation.ipynb index 483718f6..1dc15e8b 100644 --- a/docs/inversion/depth_of_investigation.ipynb +++ b/docs/inversion/depth_of_investigation.ipynb @@ -7,8 +7,6 @@ "source": [ "# Depth of Investigation\n", "\n", - "![masked_model](./images/masked_model.png)\n", - "\n", "One way to measure the depth of investigation of a sensitivity based inversion algorithm is to filter the model cells as a percentage (or percentile) of the sensitivity matrix. SimPEG inversion routines calculate sensitivities at each iteration. A mask can be calculated at each iteration by asking what cells in the inversion model are associated with a sensitivity that exceeds some threshold. There are a number of ways to calculate a threshold including percentage, log percentage, and percentile. In each calculation, the resulting mask should broadly look like a heterogeneous depth cutoff since the data are naturally less sensitive to deeper cells in all geophysical methods. In the following, we discuss the algorithm and implementation of the sensitivity cutoff strategy." ] }, @@ -71,7 +69,11 @@ "\n", "![interface](./images/uijson.png)\n", "\n", - "It will create a sensitivity cutoff mask saved on the mesh\n", + "The cutoff methods are selectable in the dropdown\n", + "\n", + "![cutoff_options](./images/cutoff_options.png)\n", + "\n", + "Whatever the options, the application will create a sensitivity cutoff mask saved on the mesh\n", "\n", "![mask](./images/sensitivity_mask.png)\n", "\n", diff --git a/docs/inversion/depth_of_investigation.py b/docs/inversion/depth_of_investigation.py index 25f3b4f2..c93deef7 100644 --- a/docs/inversion/depth_of_investigation.py +++ b/docs/inversion/depth_of_investigation.py @@ -14,8 +14,6 @@ # # Depth of Investigation # -# ![masked_model](./images/masked_model.png) -# # One way to measure the depth of investigation of a sensitivity based inversion algorithm is to filter the model cells as a percentage (or percentile) of the sensitivity matrix. SimPEG inversion routines calculate sensitivities at each iteration. A mask can be calculated at each iteration by asking what cells in the inversion model are associated with a sensitivity that exceeds some threshold. There are a number of ways to calculate a threshold including percentage, log percentage, and percentile. In each calculation, the resulting mask should broadly look like a heterogeneous depth cutoff since the data are naturally less sensitive to deeper cells in all geophysical methods. In the following, we discuss the algorithm and implementation of the sensitivity cutoff strategy. # ## Sensitivities @@ -60,7 +58,11 @@ # # ![interface](./images/uijson.png) # -# It will create a sensitivity cutoff mask saved on the mesh +# The cutoff methods are selectable in the dropdown +# +# ![cutoff_options](./images/cutoff_options.png) +# +# Whatever the options, the application will create a sensitivity cutoff mask saved on the mesh # # ![mask](./images/sensitivity_mask.png) # diff --git a/docs/inversion/images/cutoff_options.png b/docs/inversion/images/cutoff_options.png new file mode 100644 index 0000000000000000000000000000000000000000..d9e0ba51d59ec3dd9cc5422bba6f5fc00ef75ccb GIT binary patch literal 3278 zcmV;<3^DVGP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D3}Z<|K~#8N?VW#2 z8|N9vKL#3pB@0cQ#1c$uh{+EWwHjhbg{E3IK?Zacq)XIJtBTS#geeM+I#k^C$C`E_ z8kN8(os(2)Q$} zz5M>Ko%9V&h)p_SvL-QxSAM;b-5Ex)3A7}p)Mx(5UmpJn<_(ErlTMhpdxrSk>3`ul z`ctt9wA9V@4Nd4mnkVKBi6Jw)X2hhk@aSUFi5LqfCXb!GJUbrI9xn5Z*ZIMjDJGAd zyrd+OEX{uAW=j%DvwgU_0On8UarPA*=WEfv1ehr%fUFWqoYmMBRe0=FJG00V+;rxN zS~yEsL<)h$#1;yRq2Z!eP0e*y(u<3yo0aU9ltfZeo-8^K_5)U0TC8LwC6RaT1^^c= zieD1GWak%e!IuNo_6#d6id~JzPM+^Qmk}Ee^7?xR`LSqUKqe-}>FN4PH2di3`ihB( zanT%uC1asdiRzXqVE`j3wh575)A6_xIC(xtN9nc08m~cA|=`tST<| z_w&(j)HZZ3hb#E9wSwZ5c=rAI zk25nm#(DeVlh6J&1#g9Np2z6W3+?rw`G5SpI-pE9m^?2(8zTlT8Qbi;Cc^?00>H zXLg1YE5DcRIA61gM{26MJF}XG>m$6rM;uiSalQx<+}Pg%?;<+ z_tXpAu_D$lCKMsW1i6Q*$fATo@dK8#Prq-gMRd9C$$W_WHp=@uf5mRD^3|s<+??i+ zk_~oL@MUY8_XEtV=Fy$9e`gcTsEz?T!;HOaD|f5Hf)eU{5hN}?(N9onA;rbt+8}R8 zF?q9qAe2-y=`B|3{BQQA36`Z4gm}-z23krA$xStr-qL_vrg`mtfieqSGs&4k$vECj z6ejbD4Me2R7X-DS<|-s+6;nWRsl8l!&~Lj}G=rwaB#J{P zEJBHC4&9uNPGGbtrbQSa)B>6j)0)H>+&x30S?3mT_YAQnF-A1|&`ix#XFnsFbmqvR zvJ%k*S`*Xr-|a$LU5w$o2K{x8uSZs2)WuY1Kf`mJ!0=sz*rXFC(&}Pf;y_R_X{KfZ zmWGf_MqG!D3o_C@UuL_0ni7+=TJ(|}gO4)9GcFMlEXn^y4v zs$&3Cn6W)$xK&|633a|jLb-lDJw5dG^)Wm=?3bAgZns+#Lj&jPKj8WACX)%X*^J3# zB0fHz=;&yoj7B3`*bp<5ntOgk{x<{EUm3%--pI2`{S=Ju0X{(R>kczkBv`hY>-iQC z<@zNgB(Q4LDw2|tSi5$u?;2~WoAa-kyoIk+wH4`MD6Q$m!2kueUeX?(E|w*+CkZx=xLs$;rtX*LcZiriqCO zR<2x0bab@X^-mSDr)h62vh8%3}=?r2kHDEB5;&pAJ)aNJ1&l;FAvNyj zR6!|CG*O!7`9{l)KTn(B!HNJ+*<0{Gc5+0)UuDJS3ap%39iM-mJ{+C zOnVN1vhQ1uDbRXO3&A>!YnA=YJow;d@9vFT80VHVg_3c+nJ7%=6T1uuEGBt59cQ)h zp{p~@o-^Qdd)u>$*_A424^{S2o(DWXs zviDN>i_L6zSg2O&r(l>1*^A(34l`Cn$zIEVpkgAmj1$ET)LoR1J$CXk8YsRzhn3xa zp!J+KKPY!`Tid*K)BEjkqnB@Simo6Rz6OH58kc7Qt|GOp0<5aFC6%lbYW*aU+17JXn0L*jV)KJkR_-R<*+x6S zy8A^Bp-WPAN9J-ask^F6<(SRoT)I?_Ux_UEoy?zU3m7XL=b!ZYF4F>BO)jJhB7aGig_tHMCrM0947uqNh2kGwarlX^So}M0t zhliQEg?}TeRaUNC$%YLZ*tBUACXih(a}-*`ugbV>Y}f&kFl{aBzZ|a zo#4d9#j$418j_Qfx%19DiH(ib#WX%X&gkeU0|NsL4-flROVJ5UOiYY#!LPWuIAUUA zytSj2#WXcFix(0n1~4*>MKx@c;k- M07*qoM6N<$f;G%aEdT%j literal 0 HcmV?d00001 diff --git a/docs/inversion/images/save_sensitivities.png b/docs/inversion/images/save_sensitivities.png index 61ca2aabd7c6d2bd031d83b752ee626aef52c044..df92780c393dfe52669dc89dc0583274caa77439 100644 GIT binary patch literal 5027 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 Js#L7Q{|A=>G#~%~ delta 4327 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 mHbzA1Ad!bd``Ro diff --git a/docs/references.bib b/docs/references.bib index de256cfb..11dfaadd 100644 --- a/docs/references.bib +++ b/docs/references.bib @@ -1,6 +1,14 @@ --- --- +@book{nabighian_1989, + title={Time-domain electromagnetic prospecting methods}, + volume={2}, + publisher={Society of Exploration Geophysicists}, + author={Nabighian, M. N., and Macnae, J. C.}, + year={1989}, +} + @book{nabigian_1991, title = {Time Domain Electromagnetic Prospecting Methods}, @@ -101,3 +109,25 @@ @article{fournier_2019 pages = {268-282}, doi = {10.1093/gji/ggz156} } + + +@article{li_1999, + title = {Estimating depth of investigation in DC resistivity and IP surveys}, + volume = {2}, + journal = {Geophysics}, + issue = {64}, + author = {Li Y., and D. W. Oldenburg}, + year = {1999}, + pages = {403-416}, +} + + +@article{christiansen_2012, + title={A global measure for depth of investigation.}, + volume={4}, + issue={77}, + journal={Geophysics}, + author={Christiansen A.V. and Auken E.}, + year={2012}, + pages={WB171–WB177} +} From a71e3c60f2e8b41d4a1ba1398a1a90dea99a4002 Mon Sep 17 00:00:00 2001 From: benjamink Date: Thu, 6 Mar 2025 14:40:19 -0800 Subject: [PATCH 10/11] fix suggestions that broke the json format --- docs/inversion/depth_of_investigation.ipynb | 33 ++++++++++++++------- docs/inversion/depth_of_investigation.py | 12 ++++---- 2 files changed, 30 insertions(+), 15 deletions(-) diff --git a/docs/inversion/depth_of_investigation.ipynb b/docs/inversion/depth_of_investigation.ipynb index d6142ffe..3eb7b429 100644 --- a/docs/inversion/depth_of_investigation.ipynb +++ b/docs/inversion/depth_of_investigation.ipynb @@ -7,10 +7,7 @@ "source": [ "# Depth of Investigation\n", "\n", - - "In geophysics, "depth of investigation" refers to the maximum depth below the surface from which a geophysical survey can reliably measure. It depends on factors like the survey design and physical properties of the subsurface material. Several strategies have been proposed to assess uncertainties in models recovered from inversion. Nabighian & Macnae (1989) used a skin depth approach for electromagnetic surveys, assuming a background halfspace resistivity. Li&O (1999) implemented a cut-off value based on two inverted models obtained with slightly different assumptions. Christiansen & Auken (2012) proposed a mask based on the sum-square of sensitivities to estimate a volume of low confidence. - -In the following, we discuss the algorithm and implementation of the sensitivity cutoff strategy." + "In geophysics, \"depth of investigation\" refers to the maximum depth below the surface from which a geophysical survey can reliably measure. It depends on factors like the survey design and physical properties of the subsurface material. Several strategies have been proposed to assess uncertainties in models recovered from inversion. Nabighian & Macnae (1989) used a skin depth approach for electromagnetic surveys, assuming a background halfspace resistivity. Li&O (1999) implemented a cut-off value based on two inverted models obtained with slightly different assumptions. Christiansen & Auken (2012) proposed a mask based on the sum-square of sensitivities to estimate a volume of low confidence. In the following, we discuss the algorithm and implementation of the sensitivity cutoff strategy." ] }, { @@ -26,17 +23,17 @@ In the following, we discuss the algorithm and implementation of the sensitivity "\\mathbf{J} = \\frac{\\mathbf\\partial{F}(\\mathbf{m})}{\\partial{\\mathbf{m}}}\n", "$$\n", "\n", - "where $\\mathbf{m}$ is the model vector, and $\\mathbf{F}(\\mathbf{m})$ represents the forward modelling operation as a function of the model. The dimensions of the sensitivity are $n\\times m$ where $n$ is the number of data and $m$ are the number of mesh cells.\n", + "where $\\mathbf{m}$ is the model vector, and $F(\\mathbf{m})$ represents the forward modelling operation as a function of the model. The sensitivity matrix $\\mathbf{J}$ is a dense array with dimensions $N\\times M$, where $N$ is the number of data and $M$ are the number of mesh cells.\n", "\n", - "The depth of investigation mask is a property of the cells of the mesh only so the rows of the matrix (data) are sum-square normalized as follows.\n", + "The depth of investigation mask is a property of the cells of the mesh only so the rows of the sensitivity matrix (data) are sum-square normalized as follows.\n", "\n", "$$\n", - "\mathbf{doi} = \left[\sum_{n=1}^{N}\left(\frac{\mathbf{J}_{n:}}{w_n}\right)^{2}\right]^{(1/2)}\n", - - "where $w_n$ are the data uncertainties associated with the $n^{th}$ datum. + "\\mathbf{J}_{norm} = \\left[\\sum_{n=1}^{N}\\left(\\frac{\\mathbf{J}_{n:}}{w_n}\\right)^{2}\\right]^{(1/2)}\n", "$$\n", "\n", - "The resulting vector can then be thought of as the degree to which the aggregate data changes due to a small perturbation in each model cell. The depth of investigation mask is then computed by thresholding those sensitivities" + "where $w_n$ are the data uncertainties associated with the $n^{th}$ datum.\n", + "\n", + "The resulting vector $J_{norm}$ can then be thought of as the degree to which the aggregate data changes due to a small perturbation in each model cell. The depth of investigation mask is then computed by thresholding those sensitivities" ] }, { @@ -88,6 +85,22 @@ In the following, we discuss the algorithm and implementation of the sensitivity "\n", "![masked_model](./images/masked_model.png)" ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1079da0d-4ea2-4f00-b957-92199dd39cdb", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "920f0637-4028-40c7-b2c6-5976f5e90afd", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { diff --git a/docs/inversion/depth_of_investigation.py b/docs/inversion/depth_of_investigation.py index c93deef7..75147abe 100644 --- a/docs/inversion/depth_of_investigation.py +++ b/docs/inversion/depth_of_investigation.py @@ -14,7 +14,7 @@ # # Depth of Investigation # -# One way to measure the depth of investigation of a sensitivity based inversion algorithm is to filter the model cells as a percentage (or percentile) of the sensitivity matrix. SimPEG inversion routines calculate sensitivities at each iteration. A mask can be calculated at each iteration by asking what cells in the inversion model are associated with a sensitivity that exceeds some threshold. There are a number of ways to calculate a threshold including percentage, log percentage, and percentile. In each calculation, the resulting mask should broadly look like a heterogeneous depth cutoff since the data are naturally less sensitive to deeper cells in all geophysical methods. In the following, we discuss the algorithm and implementation of the sensitivity cutoff strategy. +# In geophysics, "depth of investigation" refers to the maximum depth below the surface from which a geophysical survey can reliably measure. It depends on factors like the survey design and physical properties of the subsurface material. Several strategies have been proposed to assess uncertainties in models recovered from inversion. Nabighian & Macnae (1989) used a skin depth approach for electromagnetic surveys, assuming a background halfspace resistivity. Li&O (1999) implemented a cut-off value based on two inverted models obtained with slightly different assumptions. Christiansen & Auken (2012) proposed a mask based on the sum-square of sensitivities to estimate a volume of low confidence. In the following, we discuss the algorithm and implementation of the sensitivity cutoff strategy. # ## Sensitivities # @@ -24,15 +24,17 @@ # \mathbf{J} = \frac{\mathbf\partial{F}(\mathbf{m})}{\partial{\mathbf{m}}} # $$ # -# where $\mathbf{m}$ is the model vector, and $\mathbf{F}(\mathbf{m})$ represents the forward modelling operation as a function of the model. The dimensions of the sensitivity are $n\times m$ where $n$ is the number of data and $m$ are the number of mesh cells. +# where $\mathbf{m}$ is the model vector, and $F(\mathbf{m})$ represents the forward modelling operation as a function of the model. The sensitivity matrix $\mathbf{J}$ is a dense array with dimensions $N\times M$, where $N$ is the number of data and $M$ are the number of mesh cells. # -# The depth of investigation mask is a property of the cells of the mesh only so the rows of the matrix (data) are sum-square normalized as follows. +# The depth of investigation mask is a property of the cells of the mesh only so the rows of the sensitivity matrix (data) are sum-square normalized as follows. # # $$ -# \mathbf{J} = \Bigg|\frac{\mathbf\partial{F}_{n}(\mathbf{m})}{\partial{\mathbf{m}}}\Bigg|_{n=1:N}^{2} +# \mathbf{J}_{norm} = \left[\sum_{n=1}^{N}\left(\frac{\mathbf{J}_{n:}}{w_n}\right)^{2}\right]^{(1/2)} # $$ # -# The resulting vector can then be thought of as the degree to which the aggregate data changes due to a small perturbation in each model cell. The depth of investigation mask is then computed by thresholding those sensitivities +# where $w_n$ are the data uncertainties associated with the $n^{th}$ datum. +# +# The resulting vector $J_{norm}$ can then be thought of as the degree to which the aggregate data changes due to a small perturbation in each model cell. The depth of investigation mask is then computed by thresholding those sensitivities # ## Thresholding # From 2efb1ae20929aceaf5809327f95abb758547720b Mon Sep 17 00:00:00 2001 From: benjamink Date: Fri, 7 Mar 2025 09:01:24 -0800 Subject: [PATCH 11/11] cite the added references in text --- docs/inversion/depth_of_investigation.ipynb | 2 +- docs/inversion/depth_of_investigation.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/inversion/depth_of_investigation.ipynb b/docs/inversion/depth_of_investigation.ipynb index 3eb7b429..7f32087f 100644 --- a/docs/inversion/depth_of_investigation.ipynb +++ b/docs/inversion/depth_of_investigation.ipynb @@ -7,7 +7,7 @@ "source": [ "# Depth of Investigation\n", "\n", - "In geophysics, \"depth of investigation\" refers to the maximum depth below the surface from which a geophysical survey can reliably measure. It depends on factors like the survey design and physical properties of the subsurface material. Several strategies have been proposed to assess uncertainties in models recovered from inversion. Nabighian & Macnae (1989) used a skin depth approach for electromagnetic surveys, assuming a background halfspace resistivity. Li&O (1999) implemented a cut-off value based on two inverted models obtained with slightly different assumptions. Christiansen & Auken (2012) proposed a mask based on the sum-square of sensitivities to estimate a volume of low confidence. In the following, we discuss the algorithm and implementation of the sensitivity cutoff strategy." + "In geophysics, \"depth of investigation\" refers to the maximum depth below the surface from which a geophysical survey can reliably measure. It depends on factors like the survey design and physical properties of the subsurface material. Several strategies have been proposed to assess uncertainties in models recovered from inversion. {cite:t}`nabighian_1989` used a skin depth approach for electromagnetic surveys, assuming a background halfspace resistivity. {cite:t}`li_1999` implemented a cut-off value based on two inverted models obtained with slightly different assumptions. {cite:t}`christiansen_2012` proposed a mask based on the sum-square of sensitivities to estimate a volume of low confidence. In the following, we discuss the algorithm and implementation of the sensitivity cutoff strategy." ] }, { diff --git a/docs/inversion/depth_of_investigation.py b/docs/inversion/depth_of_investigation.py index 75147abe..8a9cc3b8 100644 --- a/docs/inversion/depth_of_investigation.py +++ b/docs/inversion/depth_of_investigation.py @@ -14,7 +14,7 @@ # # Depth of Investigation # -# In geophysics, "depth of investigation" refers to the maximum depth below the surface from which a geophysical survey can reliably measure. It depends on factors like the survey design and physical properties of the subsurface material. Several strategies have been proposed to assess uncertainties in models recovered from inversion. Nabighian & Macnae (1989) used a skin depth approach for electromagnetic surveys, assuming a background halfspace resistivity. Li&O (1999) implemented a cut-off value based on two inverted models obtained with slightly different assumptions. Christiansen & Auken (2012) proposed a mask based on the sum-square of sensitivities to estimate a volume of low confidence. In the following, we discuss the algorithm and implementation of the sensitivity cutoff strategy. +# In geophysics, "depth of investigation" refers to the maximum depth below the surface from which a geophysical survey can reliably measure. It depends on factors like the survey design and physical properties of the subsurface material. Several strategies have been proposed to assess uncertainties in models recovered from inversion. {cite:t}`nabighian_1989` used a skin depth approach for electromagnetic surveys, assuming a background halfspace resistivity. {cite:t}`li_1999` implemented a cut-off value based on two inverted models obtained with slightly different assumptions. {cite:t}`christiansen_2012` proposed a mask based on the sum-square of sensitivities to estimate a volume of low confidence. In the following, we discuss the algorithm and implementation of the sensitivity cutoff strategy. # ## Sensitivities #