├── .gitignore ├── 0_Synthetic data.ipynb ├── 1_Pre-process data.ipynb ├── 2_By-depth plots.ipynb ├── 3_Contexual analysis.ipynb ├── 4_Stereonet plots.ipynb ├── 5_Rose diograms.ipynb ├── 6_Tadpole plot.ipynb ├── 7_DLIS_files.ipynb ├── LICENSE ├── README.md ├── environment.yml └── utilities.py /.gitignore: -------------------------------------------------------------------------------- 1 | # folders 2 | 3 | fractoolbox/ 4 | 5 | # file types 6 | *.csv 7 | *.png 8 | 9 | # Byte-compiled / optimized / DLL files 10 | __pycache__/ 11 | *.py[cod] 12 | *$py.class 13 | 14 | # C extensions 15 | *.so 16 | 17 | # Distribution / packaging 18 | .Python 19 | build/ 20 | develop-eggs/ 21 | dist/ 22 | downloads/ 23 | eggs/ 24 | .eggs/ 25 | lib/ 26 | lib64/ 27 | parts/ 28 | sdist/ 29 | var/ 30 | wheels/ 31 | share/python-wheels/ 32 | *.egg-info/ 33 | .installed.cfg 34 | *.egg 35 | MANIFEST 36 | 37 | # PyInstaller 38 | # Usually these files are written by a python script from a template 39 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 40 | *.manifest 41 | *.spec 42 | 43 | # Installer logs 44 | pip-log.txt 45 | pip-delete-this-directory.txt 46 | 47 | # Unit test / coverage reports 48 | htmlcov/ 49 | .tox/ 50 | .nox/ 51 | .coverage 52 | .coverage.* 53 | .cache 54 | nosetests.xml 55 | coverage.xml 56 | *.cover 57 | *.py,cover 58 | .hypothesis/ 59 | .pytest_cache/ 60 | cover/ 61 | 62 | # Translations 63 | *.mo 64 | *.pot 65 | 66 | # Django stuff: 67 | *.log 68 | local_settings.py 69 | db.sqlite3 70 | db.sqlite3-journal 71 | 72 | # Flask stuff: 73 | instance/ 74 | .webassets-cache 75 | 76 | # Scrapy stuff: 77 | .scrapy 78 | 79 | # Sphinx documentation 80 | docs/_build/ 81 | 82 | # PyBuilder 83 | .pybuilder/ 84 | target/ 85 | 86 | # Jupyter Notebook 87 | .ipynb_checkpoints 88 | 89 | # IPython 90 | profile_default/ 91 | ipython_config.py 92 | 93 | # pyenv 94 | # For a library or package, you might want to ignore these files since the code is 95 | # intended to run in multiple environments; otherwise, check them in: 96 | # .python-version 97 | 98 | # pipenv 99 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 100 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 101 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 102 | # install all needed dependencies. 103 | #Pipfile.lock 104 | 105 | # poetry 106 | # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. 107 | # This is especially recommended for binary packages to ensure reproducibility, and is more 108 | # commonly ignored for libraries. 109 | # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control 110 | #poetry.lock 111 | 112 | # pdm 113 | # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. 114 | #pdm.lock 115 | # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it 116 | # in version control. 117 | # https://pdm.fming.dev/#use-with-ide 118 | .pdm.toml 119 | 120 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm 121 | __pypackages__/ 122 | 123 | # Celery stuff 124 | celerybeat-schedule 125 | celerybeat.pid 126 | 127 | # SageMath parsed files 128 | *.sage.py 129 | 130 | # Environments 131 | .env 132 | .venv 133 | env/ 134 | venv/ 135 | ENV/ 136 | env.bak/ 137 | venv.bak/ 138 | 139 | # Spyder project settings 140 | .spyderproject 141 | .spyproject 142 | 143 | # Rope project settings 144 | .ropeproject 145 | 146 | # mkdocs documentation 147 | /site 148 | 149 | # mypy 150 | .mypy_cache/ 151 | .dmypy.json 152 | dmypy.json 153 | 154 | # Pyre type checker 155 | .pyre/ 156 | 157 | # pytype static type analyzer 158 | .pytype/ 159 | 160 | # Cython debug symbols 161 | cython_debug/ 162 | 163 | # PyCharm 164 | # JetBrains specific template is maintained in a separate JetBrains.gitignore that can 165 | # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore 166 | # and can be added to the global gitignore or merged into this file. For a more nuclear 167 | # option (not recommended) you can uncomment the following to ignore the entire idea folder. 168 | #.idea/ 169 | -------------------------------------------------------------------------------- /0_Synthetic data.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Synthetic dataset\n", 8 | "\n", 9 | "This notebook generates a synthetic dataset that is based on the following conceptual framework: \n", 10 | "- Log interval from 500 - 1000 mMD in a vertical well. \n", 11 | "- Two lithologies: 500 - 750 and 750 - 1000 mMD. \n", 12 | "- Two fault zones with associated increased fracture frequency, centered at 600 and 900 mMD.\n", 13 | "\n", 14 | "A CSV file is generated that replicates an output from BHI analysis done with log analysis software." 15 | ] 16 | }, 17 | { 18 | "cell_type": "code", 19 | "execution_count": 1, 20 | "metadata": {}, 21 | "outputs": [], 22 | "source": [ 23 | "import pandas as pd\n", 24 | "import numpy as np\n", 25 | "import matplotlib.pyplot as plt\n", 26 | "import mplstereonet as mps\n", 27 | "\n", 28 | "from utilities import *\n", 29 | "from fractoolbox import strike2dipaz" 30 | ] 31 | }, 32 | { 33 | "cell_type": "code", 34 | "execution_count": 2, 35 | "metadata": {}, 36 | "outputs": [], 37 | "source": [ 38 | "strike_cluster1 = random_strikes(100, 90, 10) # n, mean, std_dev\n", 39 | "dip_cluster1 = random_dips(100, 65, 10)\n", 40 | "depth_cluster1 = random_depths_normal(100, 600, 80, 500, 1000) # n, mean, std_dev, lower_bound, upper_bound\n", 41 | "aperture_cluster1 = random_aperture_lognormal(2.5, 3, 0.01, 20, 100) #(0.02, 3, 0.01, 20, 100) \n", 42 | "attribute_cluster1 = 100 * ['Conductive, HC']\n", 43 | "\n", 44 | "strike_cluster2 = random_strikes(100, 280, 10)\n", 45 | "dip_cluster2 = random_dips(100, 65, 10)\n", 46 | "depth_cluster2 = random_depths_normal(100, 900, 50, 500, 1000)\n", 47 | "aperture_cluster2 = random_aperture_lognormal(0.1, 3, 0.01, 10, 100)\n", 48 | "attribute_cluster2 = 100 * ['Conductive, HC']\n", 49 | "\n", 50 | "strike_background = np.random.randint(0, 360, 50)\n", 51 | "dip_background = np.random.randint(0, 90, 50)\n", 52 | "depth_background = random_depths_normal(50, 750, 250, 500, 1000)\n", 53 | "aperture_background = random_aperture_lognormal(0.02, 5, 0.01, 5, 50)\n", 54 | "attribute_background = 50 * ['Conductive, LC']\n", 55 | "\n", 56 | "strike_bedding1 = random_strikes(100, 170, 15)\n", 57 | "dip_bedding1 = random_dips(100, 15, 5)\n", 58 | "depth_bedding1 = random_depths_uniform(100, 500, 750)\n", 59 | "aperture_bedding1 = 100 * [0]\n", 60 | "attribute_bedding1 = 100 * ['Bed boundary']\n", 61 | "\n", 62 | "strike_bedding2 = random_strikes(100, 220, 30)\n", 63 | "dip_bedding2 = random_dips(100, 20, 15)\n", 64 | "depth_bedding2 = random_depths_uniform(100, 750, 1000)\n", 65 | "aperture_bedding2 = 100 * [0]\n", 66 | "attribute_bedding2 = 100 * ['Bed boundary']\n", 67 | "\n" 68 | ] 69 | }, 70 | { 71 | "cell_type": "code", 72 | "execution_count": 3, 73 | "metadata": {}, 74 | "outputs": [ 75 | { 76 | "data": { 77 | "image/png": "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", 78 | "text/plain": [ 79 | "
" 80 | ] 81 | }, 82 | "metadata": {}, 83 | "output_type": "display_data" 84 | } 85 | ], 86 | "source": [ 87 | "fig = plt.figure(figsize=(4,4))\n", 88 | "ax = fig.add_subplot(111, projection='stereonet')\n", 89 | "\n", 90 | "ax.pole(strike_cluster1, dip_cluster1, marker = 'o', color = 'tab:red', markersize=1)\n", 91 | "ax.pole(strike_cluster2, dip_cluster2, marker = 'o', color = 'tab:blue', markersize=1)\n", 92 | "ax.pole(strike_background, dip_background, marker = 'o', color = 'tab:orange', markersize=1)\n", 93 | "ax.pole(strike_bedding1, dip_bedding1, marker = 'o', color = 'tab:green', markersize=1)\n", 94 | "ax.pole(strike_bedding2, dip_bedding2, marker = 'o', color = 'tab:brown', markersize=1)\n", 95 | "\n", 96 | "ax.set_azimuth_ticks([])\n", 97 | "plt.show()" 98 | ] 99 | }, 100 | { 101 | "cell_type": "code", 102 | "execution_count": 4, 103 | "metadata": {}, 104 | "outputs": [ 105 | { 106 | "data": { 107 | "text/plain": [ 108 | "Text(0, 0.5, 'Frequency')" 109 | ] 110 | }, 111 | "execution_count": 4, 112 | "metadata": {}, 113 | "output_type": "execute_result" 114 | }, 115 | { 116 | "data": { 117 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAA/YAAAFzCAYAAACU+pIWAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAAArEElEQVR4nO3deZyVBb0/8O+wjWAjGgoDymZKqJiiVFc0Ew0yxOvyurihkFpXLy6omUZ4fy5XGZcbUvIClwr1uma5dV9ikZoblMnmUoEhAiKEJc0IyiDM8/vDy4mRYWQOZ+ach+f9fr3OK8+zfp8z32/6meecM2VJkiQBAAAApFKrYhcAAAAA5E+wBwAAgBQT7AEAACDFBHsAAABIMcEeAAAAUkywBwAAgBQT7AEAACDFBHsAAABIsTbFLqC51dXVxTvvvBMVFRVRVlZW7HLImCRJ4v33349u3bpFq1Yt/3s0/U+xmQGyTP+TdWaALGvp/t/ug/0777wT3bt3L3YZZNzSpUtjjz32aPHz6n9KhRkgy/Q/WWcGyLKW6v/tPthXVFRExMcv6E477VTkasiampqa6N69e64PW5r+p9jMAFmm/8k6M0CWtXT/b/fBfuPbbnbaaScDTdEU6+1f+p9SYQbIMv1P1pkBsqyl+t+X5wEAAECKCfYAAACQYoI9AAAApJhgDwAAACkm2AMAAECKCfYAAACQYoI9AAAApFhRg/1zzz0Xxx57bHTr1i3Kysri0Ucfrbc+SZK46qqrolu3btG+ffs44ogj4vXXXy9OsQAAAFCCihrs16xZEwcccEBMmjSpwfU33nhjTJgwISZNmhR/+MMforKyMgYPHhzvv/9+C1cKAAAApalNMU/+jW98I77xjW80uC5Jkpg4cWKMGzcuTjzxxIiIuOuuu6JLly5x3333xTnnnNOSpQIAAEBJKmqwb8yiRYtixYoVMWTIkNyy8vLy+OpXvxozZszYYrCvra2N2tra3POamppmrxVKhf4n68wAWab/yTozQJaV7JfnrVixIiIiunTpUm95ly5dcusaUlVVFR07dsw9unfv3qx1bq13b5mUe0BzKdX+h5ZiBsgy/U/WmQGyrGSD/UZlZWX1nidJstmyTY0dOzaqq6tzj6VLlzZ3iVAy9D9ZZwbIMv1P1pkBsqxk34pfWVkZER/fue/atWtu+cqVKze7i7+p8vLyKC8vb/b6oBTpf7LODJBl+p+sMwNkWcnese/du3dUVlbG9OnTc8vWrVsXzz77bAwcOLCIlQEAAEDpKOod+9WrV8df/vKX3PNFixbF3Llz47Of/Wz06NEjLrroohg/fnzsvffesffee8f48eOjQ4cOcdpppxWxagAAACgdRQ32L7/8cgwaNCj3/JJLLomIiFGjRsWdd94Zl112WXz44YcxevToWLVqVXz5y1+OX//611FRUVGskgEAAKCkFDXYH3HEEZEkyRbXl5WVxVVXXRVXXXVVyxUFAAAAKVKyn7EHAAAAPp1gDwAAACkm2AMAAECKCfYAAACQYoI9AAAApJhgDwAAACkm2AMAAECKCfYAAACQYoI9AAAApJhgDwAAACkm2AMAAECKCfYAAACQYoI9AAAApJhgDwAAACkm2AMAAECKCfYAAACQYoI9AAAApJhgDwAAACkm2AMAAECKCfYAAACQYoI9AAAApJhgDwAAACkm2AMAAECKCfYAAACQYoI9AAAApJhgDwAAACkm2AMAAECKCfYAAACQYoI9AAAApJhgDwAAACkm2AMAAECKCfYAAACQYoI9AAAApJhgDwAAACkm2AMAAECKCfYAAACQYoI9AAAApJhgDwAAACkm2AMAAECKCfYAAACQYoI9AAAApJhgDwAAACkm2AMAAECKCfYAAACQYoI9AAAApJhgDwAAACkm2AMAAECKCfYAAACQYiUd7NevXx9XXHFF9O7dO9q3bx977rlnXHPNNVFXV1fs0gAAAKAktCl2AY254YYb4tZbb4277ror9ttvv3j55ZfjzDPPjI4dO8aYMWOKXR4AAAAUXUkH+5kzZ8Zxxx0XxxxzTERE9OrVK+6///54+eWXi1wZAAAAlIaSDvaHHXZY3HrrrbFgwYLo06dPzJs3L1544YWYOHHiFvepra2N2tra3POampoWqBRKg/4n68wAWab/yTozQJaV9GfsL7/88jj11FOjb9++0bZt2+jfv39cdNFFceqpp25xn6qqqujYsWPu0b179xasuHm8e8uk3AMasz32P4V18/QFucf2yAyQZfqfrDMDZFlJB/sHH3ww7rnnnrjvvvti9uzZcdddd8V///d/x1133bXFfcaOHRvV1dW5x9KlS1uwYigu/U/WmQGyTP+TdWaALCvpt+J/97vfje9973txyimnRETE/vvvH4sXL46qqqoYNWpUg/uUl5dHeXl5S5YJJUP/k3VmgCzT/2SdGSDLSvqO/QcffBCtWtUvsXXr1v7cHQAAAPyfkr5jf+yxx8Z1110XPXr0iP322y/mzJkTEyZMiLPOOqvYpQEAAEBJKOlgf8stt8R//ud/xujRo2PlypXRrVu3OOecc+L//b//V+zSAAAAoCSUdLCvqKiIiRMnNvrn7QAAACDLSvoz9gAAAEDjBHsAAABIMcEeAAAAUkywBwAAgBQT7AEAACDFBHsAAABIMcEeAAAAUkywBwAAgBQT7AEAACDFBHsAAABIMcEeAAAAUkywBwAAgBQT7AEAACDFBHsAAABIMcEeAAAAUkywBwAAgBQT7AEAACDFBHsAAABIMcEeAAAAUkywBwAAgBQT7AEAACDFBHsAAABIsTbFLiCL3r1lUkRE7HbB+UWuBMiym6cviIiIiwf3KXIlJeKZqq3fdtDY5qsDKJjJcydHRMToA0cXuRJgezfjoXsjImLg8BFFOb879gAAAJBigj0AAACkmGAPAAAAKSbYAwAAQIoJ9gAAAJBigj0AAACkmGAPAAAAKSbYAwAAQIoJ9gAAAJBigj0AAACkmGAPAAAAKSbYAwAAQIoJ9gAAAJBigj0AAACkmGAPAAAAKSbYAwAAQIoJ9gAAAJBigj0AAACkWF7BftGiRYWuAwAAAMhDXsF+r732ikGDBsU999wTa9euLXRNAAAAwFbKK9jPmzcv+vfvH9/5zneisrIyzjnnnHjppZcKXRsAAADwKfIK9v369YsJEybEsmXLYurUqbFixYo47LDDYr/99osJEybEu+++W+g6AQAAgAZs05fntWnTJk444YT42c9+FjfccEMsXLgwLr300thjjz1i5MiRsXz58kLVCQAAADRgm4L9yy+/HKNHj46uXbvGhAkT4tJLL42FCxfG008/HcuWLYvjjjuuUHUCAAAADWiTz04TJkyIqVOnxvz582Po0KFx9913x9ChQ6NVq49/T9C7d++47bbbom/fvgUtFgAAAKgvrzv2U6ZMidNOOy2WLFkSjz76aAwbNiwX6jfq0aNH/OQnP9nmApctWxann356dOrUKTp06BAHHnhgzJo1a5uPCwAAANuDvO7Yv/HGG5+6Tbt27WLUqFH5HD5n1apVceihh8agQYNi2rRp0blz51i4cGHsvPPO23RcAAAA2F7kFeynTp0an/nMZ2L48OH1lj/00EPxwQcfbHOg3+iGG26I7t27x9SpU3PLevXqVZBjAwAAwPYgr7fiX3/99bHrrrtutrxz584xfvz4bS5qo8cffzwGDBgQw4cPj86dO0f//v3jjjvuaHSf2traqKmpqfeArND/ZJ0ZIMv0P1lnBsiyvIL94sWLo3fv3pst79mzZyxZsmSbi9rozTffjClTpsTee+8dv/rVr+Lcc8+NCy+8MO6+++4t7lNVVRUdO3bMPbp3716weqDU6f9suXn6grh5+oJG1zW2TVOOlxZmgCzbUv/f8UrjN0Vge+HfAZSCGQ/dGzMeurfFz5tXsO/cuXO88sormy2fN29edOrUaZuL2qiuri4OOuigGD9+fPTv3z/OOeec+Pa3vx1TpkzZ4j5jx46N6urq3GPp0qUFqwdKnf4n68wAWab/yTozQJbl9Rn7U045JS688MKoqKiIww8/PCIinn322RgzZkyccsopBSuua9euse+++9Zbts8++8QvfvGLLe5TXl4e5eXlBasB0kT/k3VmgCzT/2SdGSDL8gr21157bSxevDiOOuqoaNPm40PU1dXFyJEjC/oZ+0MPPTTmz59fb9mCBQuiZ8+eBTsHAAAApFlewb5du3bx4IMPxn/913/FvHnzon379rH//vsXPHBffPHFMXDgwBg/fnycdNJJ8dJLL8Xtt98et99+e0HPAwAAAGmVV7DfqE+fPtGnT59C1bKZL37xi/HII4/E2LFj45prronevXvHxIkTY8SIEc12TgAAAEiTvIL9hg0b4s4774ynnnoqVq5cGXV1dfXWP/300wUpLiJi2LBhMWzYsIIdDwAAALYneQX7MWPGxJ133hnHHHNM9OvXL8rKygpdFwAAALAV8gr2DzzwQPzsZz+LoUOHFroeAAAAoAny+jv27dq1i7322qvQtQAAAABNlFew/853vhM//OEPI0mSQtcDAAAANEFeb8V/4YUX4plnnolp06bFfvvtF23btq23/uGHHy5IcQAAAEDj8gr2O++8c5xwwgmFrgUAAABooryC/dSpUwtdBwAAAJCHvD5jHxGxfv36+M1vfhO33XZbvP/++xER8c4778Tq1asLVhwAAADQuLzu2C9evDiOPvroWLJkSdTW1sbgwYOjoqIibrzxxli7dm3ceuutha4TAAAAaEBed+zHjBkTAwYMiFWrVkX79u1zy0844YR46qmnClYcAAAA0Li8vxX/xRdfjHbt2tVb3rNnz1i2bFlBCgMAAAA+XV537Ovq6mLDhg2bLX/77bejoqJim4sCAAAAtk5ewX7w4MExceLE3POysrJYvXp1XHnllTF06NBC1QYAAAB8irzein/zzTfHoEGDYt999421a9fGaaedFm+88Ubsuuuucf/99xe6RgAAAGAL8gr23bp1i7lz58b9998fs2fPjrq6ujj77LNjxIgR9b5MDwAAAGheeQX7iIj27dvHWWedFWeddVYh6wEAAACaIK9gf/fddze6fuTIkXkVAwAAADRNXsF+zJgx9Z5/9NFH8cEHH0S7du2iQ4cOgj0AAAC0kLy+FX/VqlX1HqtXr4758+fHYYcd5svzAAAAoAXlFewbsvfee8f111+/2d18AAAAoPkULNhHRLRu3TreeeedQh4SAAAAaERen7F//PHH6z1PkiSWL18ekyZNikMPPbQghQEAAACfLq9gf/zxx9d7XlZWFrvttlsceeSR8YMf/KAQdaXOu7dMKnYJW7Sxtt0uOL/IlQDN4ebpC4q6P5/imaqt33bQ2OarAwpo8tzJEREx+sDRRa6k8Lbna4NtNeOhe3P/PHD4iG3eduM2n3YsPl1ewb6urq7QdQAAAAB5KOhn7AEAAICWldcd+0suuWSrt50wYUI+pwAAAAC2Ql7Bfs6cOTF79uxYv359fP7zn4+IiAULFkTr1q3joIMOym1XVlZWmCoBAACABuUV7I899tioqKiIu+66K3bZZZeIiFi1alWceeaZ8ZWvfCW+853vFLRIAAAAoGF5fcb+Bz/4QVRVVeVCfUTELrvsEtdee21mvxUfAAAAiiGvYF9TUxN//etfN1u+cuXKeP/997e5KAAAAGDr5BXsTzjhhDjzzDPj5z//ebz99tvx9ttvx89//vM4++yz48QTTyx0jQAAAMAW5PUZ+1tvvTUuvfTSOP300+Ojjz76+EBt2sTZZ58dN910U0ELBAAAALYsr2DfoUOHmDx5ctx0002xcOHCSJIk9tprr9hxxx0LXR8AAADQiLzeir/R8uXLY/ny5dGnT5/YcccdI0mSQtUFAAAAbIW8gv3f//73OOqoo6JPnz4xdOjQWL58eUREfOtb3/Kn7gAAAKAF5RXsL7744mjbtm0sWbIkOnTokFt+8sknx5NPPlmw4gAAAIDG5fUZ+1//+tfxq1/9KvbYY496y/fee+9YvHhxQQoDAAAAPl1ed+zXrFlT7079Rn/729+ivLx8m4sCAAAAtk5ewf7www+Pu+++O/e8rKws6urq4qabbopBgwYVrDgAAACgcXm9Ff+mm26KI444Il5++eVYt25dXHbZZfH666/He++9Fy+++GKhawQAAAC2IK879vvuu2+88sor8aUvfSkGDx4ca9asiRNPPDHmzJkTn/vc5wpdIwAAALAFTb5j/9FHH8WQIUPitttui6uvvro5agIAAAC2UpPv2Ldt2zZee+21KCsra456AAAAgCbI6634I0eOjJ/85CeFrgUAAABoory+PG/dunXx4x//OKZPnx4DBgyIHXfcsd76CRMmFKQ4AAAAoHFNCvZvvvlm9OrVK1577bU46KCDIiJiwYIF9bbxFn0AAABoOU0K9nvvvXcsX748nnnmmYiIOPnkk+NHP/pRdOnSpVmKAwAAABrXpM/YJ0lS7/m0adNizZo1BS2oMVVVVVFWVhYXXXRRi50TAAAASlleX5630SeDfnP6wx/+ELfffnt84QtfaLFzAgAAQKlrUrAvKyvb7DP0LfGZ+tWrV8eIESPijjvuiF122aXZzwcAAABp0aTP2CdJEt/85jejvLw8IiLWrl0b55577mbfiv/www8XrsKIOO+88+KYY46Jr33ta3Httdc2um1tbW3U1tbmntfU1BS0Fihl+p+sMwNkmf4n68wAWdakYD9q1Kh6z08//fSCFtOQBx54IGbPnh1/+MMftmr7qqqquPrqqz91u3dvmRQREbtdcP5WLdt0eUPLSkVD10B2bG3/03xunv7xXwq5eHCfgh5n4/N8j73p/k3Zdluvo6W12Aw8U9X850iD5nodBo1tnuOmrd4m2tr+nzx3ckREjD5wdIPPG9p2o4a2aep58j1ePuckW/x3UOHNeOjeFtmnUDaee+DwEdu0zdbsk89xmlOTgv3UqVObq44GLV26NMaMGRO//vWvY4cddtiqfcaOHRuXXHJJ7nlNTU107969uUqEkqL/yTozQJbpf7LODJBlTQr2LW3WrFmxcuXKOPjgg3PLNmzYEM8991xMmjQpamtro3Xr1vX2KS8vz31UALJG/5N1ZoAs0/9knRkgy0o62B911FHx6quv1lt25plnRt++fePyyy/fLNQDAABA1pR0sK+oqIh+/frVW7bjjjtGp06dNlsOAAAAWbRNf8ceAAAAKK6SvmPfkN/+9rfFLgEAAABKhjv2AAAAkGKCPQAAAKSYYA8AAAApJtgDAABAign2AAAAkGKCPQAAAKSYYA8AAAApJtgDAABAign2AAAAkGKCPQAAAKSYYA8AAAApJtgDAABAign2AAAAkGKCPQAAAKSYYA8AAAApJtgDAABAign2AAAAkGKCPQAAAKSYYA8AAAApJtgDAABAign2AAAAkGKCPQAAAKSYYA8AAAAp1qbYBaTJu7dMavbj7XbB+c12PmD7cPP0BSV1zosH92nBSsjLM1Vbv+2gsc1XR3NoyrVl2OS5k5t929EHjm7y/ls658Zj5euTx2uopm09B1DfjIfuzWvdtpxr4PAR23yMTW08XqHrbQnu2AMAAECKCfYAAACQYoI9AAAApJhgDwAAACkm2AMAAECKCfYAAACQYoI9AAAApJhgDwAAACkm2AMAAECKCfYAAACQYoI9AAAApJhgDwAAACkm2AMAAECKCfYAAACQYoI9AAAApJhgDwAAACkm2AMAAECKCfYAAACQYoI9AAAApJhgDwAAACkm2AMAAECKCfYAAACQYoI9AAAApJhgDwAAAClW0sG+qqoqvvjFL0ZFRUV07tw5jj/++Jg/f36xywIAAICSUdLB/tlnn43zzjsvfve738X06dNj/fr1MWTIkFizZk2xSwMAAICS0KbYBTTmySefrPd86tSp0blz55g1a1YcfvjhRaoKAAAASkdJB/tPqq6ujoiIz372s1vcpra2Nmpra3PPa2pqmr0uKBX6n6wzA2SZ/ifrzABZlppgnyRJXHLJJXHYYYdFv379trhdVVVVXH311Q2ue/eWSXkvKxUN1bbbBedv1XZbWt/Q/tuiOY9N4xrrf0rHzdMXRETExYP71Hu+6bJSsWltaZCpGXimqtgVsNGWfhZr1rZoGaXa/5PnTm7yuk2Xjz5wdJOP25S6Nh5/W49H8ZXqDJCfGQ/dW+wSUqWkP2O/qfPPPz9eeeWVuP/++xvdbuzYsVFdXZ17LF26tIUqhOLT/2SdGSDL9D9ZZwbIslTcsb/gggvi8ccfj+eeey722GOPRrctLy+P8vLyFqoMSov+J+vMAFmm/8k6M0CWlXSwT5IkLrjggnjkkUfit7/9bfTu3bvYJQEAAEBJKelgf95558V9990Xjz32WFRUVMSKFSsiIqJjx47Rvn37IlcHAAAAxVfSn7GfMmVKVFdXxxFHHBFdu3bNPR588MFilwYAAAAloaTv2CdJUuwSAAAAoKSV9B17AAAAoHGCPQAAAKSYYA8AAAApJtgDAABAign2AAAAkGKCPQAAAKSYYA8AAAApJtgDAABAign2AAAAkGKCPQAAAKSYYA8AAAApJtgDAABAign2AAAAkGKCPQAAAKSYYA8AAAApJtgDAABAign2AAAAkGKCPQAAAKSYYA8AAAApJtgDAABAign2AAAAkGKCPQAAAKRYm2IXkHbv3jKp2CVscw0b99/tgvO36pibblfIOqCU3Dx9QUREXDy4T5PW5XOOxpY1tE2p2VKN2/r6FNRzP4jYcYdiV/HpnqkqdgVqyLDJcycXdf+tPf7oA0c3y3GBppnx0L1FP+6Wts23tk/br6H1zfU6NJU79gAAAJBigj0AAACkmGAPAAAAKSbYAwAAQIoJ9gAAAJBigj0AAACkmGAPAAAAKSbYAwAAQIoJ9gAAAJBigj0AAACkmGAPAAAAKSbYAwAAQIoJ9gAAAJBigj0AAACkmGAPAAAAKSbYAwAAQIoJ9gAAAJBigj0AAACkmGAPAAAAKSbYAwAAQIoJ9gAAAJBigj0AAACkmGAPAAAAKSbYAwAAQIoJ9gAAAJBiqQj2kydPjt69e8cOO+wQBx98cDz//PPFLgkAAABKQskH+wcffDAuuuiiGDduXMyZMye+8pWvxDe+8Y1YsmRJsUsDAACAoiv5YD9hwoQ4++yz41vf+lbss88+MXHixOjevXtMmTKl2KUBAABA0bUpdgGNWbduXcyaNSu+973v1Vs+ZMiQmDFjRoP71NbWRm1tbe55dXV1RETU1NTEug8/bL5iC6S8pib3z+8XuN5PO/bWnnvT7Tb1acfMopr/u/4kSVrkfI31P02zds3qiGj4tct33Se32d7V1NSUzgx8ULulXaDZbOy7Yvf/2jVrG9x+43x+uHrr/3sjn3221SfP2VI1+HfntiuZfwf4WeZtzQcftMh5Nv0ZtdQ5m1tL938kJWzZsmVJRCQvvvhiveXXXXdd0qdPnwb3ufLKK5OI8PAoqcfChQtbYmT0v0fJPsyAR5Yf+t8j6w8z4JHlR0v1f1mStNSvEJrunXfeid133z1mzJgRhxxySG75ddddF//zP/8Tf/7znzfb55O/qaurq4v33nsvOnXqFGVlZS1S96Zqamqie/fusXTp0thpp51a/PzFlvXrr66ujh49esSqVati5513bvbzlVr/R+iBrF9/1mcg6z//rF+//s/2zz/r1x9hBrLeA1m//pbu/5J+K/6uu+4arVu3jhUrVtRbvnLlyujSpUuD+5SXl0d5eXm9ZS3xQn6anXbaKZMNvVHWr79Vq5b5OotS7f8IPZD168/6DGT955/169f/2f75Z/36I8xA1nsg69ffUv1f0l+e165duzj44INj+vTp9ZZPnz49Bg4cWKSqAAAAoHSU9B37iIhLLrkkzjjjjBgwYEAccsghcfvtt8eSJUvi3HPPLXZpAAAAUHQlH+xPPvnk+Pvf/x7XXHNNLF++PPr16xdPPPFE9OzZs9ilbZXy8vK48sorN3tbUFa4/mxff4TXwPW7ftfv+l2/68+qrL8Grt/1t+T1l/SX5wEAAACNK+nP2AMAAACNE+wBAAAgxQR7AAAASDHBHgAAAFJMsM/TsmXL4vTTT49OnTpFhw4d4sADD4xZs2bl1idJEldddVV069Yt2rdvH0cccUS8/vrr9Y5RW1sbF1xwQey6666x4447xr/+67/G22+/3dKX0mTr16+PK664Inr37h3t27ePPffcM6655pqoq6vLbbM9Xf9zzz0Xxx57bHTr1i3Kysri0Ucfrbe+UNe6atWqOOOMM6Jjx47RsWPHOOOMM+If//hHM19dfvR/dvo/wgw0xAxkZwb0/+b0v/7fSP9nq/8jzEBJz0BCk7333ntJz549k29+85vJ73//+2TRokXJb37zm+Qvf/lLbpvrr78+qaioSH7xi18kr776anLyyScnXbt2TWpqanLbnHvuucnuu++eTJ8+PZk9e3YyaNCg5IADDkjWr19fjMvaatdee23SqVOn5H//93+TRYsWJQ899FDymc98Jpk4cWJum+3p+p944olk3LhxyS9+8YskIpJHHnmk3vpCXevRRx+d9OvXL5kxY0YyY8aMpF+/fsmwYcNa6jK3mv7PVv8niRn4JDOQrRnQ//Xpf/2/Kf2frf5PEjNQyjMg2Ofh8ssvTw477LAtrq+rq0sqKyuT66+/Prds7dq1SceOHZNbb701SZIk+cc//pG0bds2eeCBB3LbLFu2LGnVqlXy5JNPNl/xBXDMMcckZ511Vr1lJ554YnL66acnSbJ9X/8nB7pQ1/rHP/4xiYjkd7/7XW6bmTNnJhGR/PnPf27mq2oa/Z/d/k8SM5AkZiDLM6D/9b/+fyT3XP9vbnv++W9kBh7JPS+1GfBW/Dw8/vjjMWDAgBg+fHh07tw5+vfvH3fccUdu/aJFi2LFihUxZMiQ3LLy8vL46le/GjNmzIiIiFmzZsVHH31Ub5tu3bpFv379ctuUqsMOOyyeeuqpWLBgQUREzJs3L1544YUYOnRoRGz/17+pQl3rzJkzo2PHjvHlL385t82//Mu/RMeOHUvu9dD/+n9TZsAMZHkG9L/+1//6P0v9H2EGNlVqM9BmWy8oi958882YMmVKXHLJJfH9738/XnrppbjwwgujvLw8Ro4cGStWrIiIiC5dutTbr0uXLrF48eKIiFixYkW0a9cudtlll8222bh/qbr88sujuro6+vbtG61bt44NGzbEddddF6eeempExHZ//Zsq1LWuWLEiOnfuvNnxO3fuXHKvh/7X/5syA2YgyzOg//W//tf/Wer/CDOwqVKbAcE+D3V1dTFgwIAYP358RET0798/Xn/99ZgyZUqMHDkyt11ZWVm9/ZIk2WzZJ23NNsX24IMPxj333BP33Xdf7LfffjF37ty46KKLolu3bjFq1Kjcdtvr9TekENfa0Pal+Hrof/3fEDNgBrI8A/pf/+v/f9L/2/fP3wxsrlRmwFvx89C1a9fYd9996y3bZ599YsmSJRERUVlZGRGx2W9YVq5cmfuNTmVlZaxbty5WrVq1xW1K1Xe/+9343ve+F6ecckrsv//+ccYZZ8TFF18cVVVVEbH9X/+mCnWtlZWV8de//nWz47/77rsl93rof/2/KTPwMTOQzRnQ/x/T//p/U/p/+/75m4F/KrUZEOzzcOihh8b8+fPrLVuwYEH07NkzIiJ69+4dlZWVMX369Nz6devWxbPPPhsDBw6MiIiDDz442rZtW2+b5cuXx2uvvZbbplR98MEH0apV/dZp3bp17s9cbO/Xv6lCXeshhxwS1dXV8dJLL+W2+f3vfx/V1dUl93rof/2/KTPwMTOQzRnQ/x/T//p/I/2//f/8zcA/ldwMbPXX7JHz0ksvJW3atEmuu+665I033kjuvffepEOHDsk999yT2+b6669POnbsmDz88MPJq6++mpx66qkN/umDPfbYI/nNb36TzJ49OznyyCNL8s88fNKoUaOS3XffPfdnLh5++OFk1113TS677LLcNtvT9b///vvJnDlzkjlz5iQRkUyYMCGZM2dOsnjx4iRJCnetRx99dPKFL3whmTlzZjJz5sxk//33L8k/9aL/s9X/SWIGPskMZGsG9H99+l//6//s9n+SmIFSngHBPk+//OUvk379+iXl5eVJ3759k9tvv73e+rq6uuTKK69MKisrk/Ly8uTwww9PXn311XrbfPjhh8n555+ffPazn03at2+fDBs2LFmyZElLXkZeampqkjFjxiQ9evRIdthhh2TPPfdMxo0bl9TW1ua22Z6u/5lnnkkiYrPHqFGjkiQp3LX+/e9/T0aMGJFUVFQkFRUVyYgRI5JVq1a10FU2jf7PTv8niRloiBnIzgzo/83pf/2v/7PZ/0liBkp5BsqSJEm2/v4+AAAAUEp8xh4AAABSTLAHAACAFBPsAQAAIMUEewAAAEgxwR4AAABSTLAHAACAFBPsAQAAIMUEexr11ltvRVlZWcydO7fJ+z799NPRt2/fqKury/v8tbW10aNHj5g1a1bex4B86X+yTP+TdWaALNP/6SPYl7BvfvObUVZWFmVlZdG2bdvo0qVLDB48OH76059u06A0dr7jjz++YMe77LLLYty4cdGqVf5tVl5eHpdeemlcfvnlBauLdND/+j/L9L/+zzozYAayTP/r/3wI9iXu6KOPjuXLl8dbb70V06ZNi0GDBsWYMWNi2LBhsX79+mKXt0UzZsyIN954I4YPH77NxxoxYkQ8//zz8ac//akAlZEm+l//Z5n+1/9ZZwbMQJbpf/3fVIJ9iSsvL4/KysrYfffd46CDDorvf//78dhjj8W0adPizjvvzG1XXV0d//7v/x6dO3eOnXbaKY488siYN29ebv1VV10VBx54YNx2223RvXv36NChQwwfPjz+8Y9/5Nbfdddd8dhjj+V+Q/jb3/42t/+bb74ZgwYNig4dOsQBBxwQM2fObLTuBx54IIYMGRI77LDDZjX89Kc/jR49esRnPvOZ+I//+I/YsGFD3HjjjVFZWRmdO3eO6667rt6xOnXqFAMHDoz7778//xeSVNL/+j/L9L/+zzozYAayTP/r/6YS7FPoyCOPjAMOOCAefvjhiIhIkiSOOeaYWLFiRTzxxBMxa9asOOigg+Koo46K9957L7ffX/7yl/jZz34Wv/zlL+PJJ5+MuXPnxnnnnRcREZdeemmcdNJJud8OLl++PAYOHJjbd9y4cXHppZfG3Llzo0+fPnHqqac2+tvC5557LgYMGLDZ8oULF8a0adPiySefjPvvvz9++tOfxjHHHBNvv/12PPvss3HDDTfEFVdcEb/73e/q7felL30pnn/++W163dg+6H+yTP+TdWaALNP/NCqhZI0aNSo57rjjGlx38sknJ/vss0+SJEny1FNPJTvttFOydu3aett87nOfS2677bYkSZLkyiuvTFq3bp0sXbo0t37atGlJq1atkuXLl2/xfIsWLUoiIvnxj3+cW/b6668nEZH86U9/2mLtHTt2TO6+++56y6688sqkQ4cOSU1NTW7Z17/+9aRXr17Jhg0bcss+//nPJ1VVVfX2/eEPf5j06tVri+dj+6P//0n/Z4/+/yf9n01m4J/MQPbo/3/S/1uvTbF+ocC2SZIkysrKIiJi1qxZsXr16ujUqVO9bT788MNYuHBh7nmPHj1ijz32yD0/5JBDoq6uLubPnx+VlZWNnu8LX/hC7p+7du0aERErV66Mvn37Nrj9hx9+WO8tOBv16tUrKioqcs+7dOkSrVu3rvflGl26dImVK1fW2699+/bxwQcfNFoj2aH/yTL9T9aZAbJM/7Mlgn1K/elPf4revXtHRERdXV107dq13udhNtp55523eIyN/6ew8X8b07Zt2832a+xbOXfddddYtWpVo8fZeKyGln3y2O+9917stttun1on2aD/yTL9T9aZAbJM/7Mlgn0KPf300/Hqq6/GxRdfHBERBx10UKxYsSLatGkTvXr12uJ+S5YsiXfeeSe6desWEREzZ86MVq1aRZ8+fSIiol27drFhw4aC1Ni/f//44x//WJBjRUS89tpr0b9//4Idj/TS/2SZ/ifrzABZpv9pjC/PK3G1tbWxYsWKWLZsWcyePTvGjx8fxx13XAwbNixGjhwZERFf+9rX4pBDDonjjz8+fvWrX8Vbb70VM2bMiCuuuCJefvnl3LF22GGHGDVqVMybNy+ef/75uPDCC+Okk07KvQWnV69e8corr8T8+fPjb3/7W3z00Ud51/31r389XnjhhW27+E08//zzMWTIkIIdj3TQ/x/T/9mk/z+m/7PLDHzMDGST/v+Y/t96gn2Je/LJJ6Nr167Rq1evOProo+OZZ56JH/3oR/HYY49F69atI+Ljt6088cQTcfjhh8dZZ50Vffr0iVNOOSXeeuut6NKlS+5Ye+21V5x44okxdOjQGDJkSPTr1y8mT56cW//tb387Pv/5z8eAAQNit912ixdffDHvuk8//fT44x//GPPnz8//4v/PzJkzo7q6Ov7t3/5tm49Fuuh//Z9l+l//Z50ZMANZpv/1f1OVJUmSFLsImt9VV10Vjz76aMydO7fFznnZZZdFdXV13Hbbbdt0nOHDh0f//v3j+9//foEqI2v0P1mm/8k6M0CW6f/scMeeZjNu3Ljo2bPnNn1mp7a2Ng444IDcZ4kgLfQ/Wab/yTozQJbp/+Jwxz4jivHbOigV+p8s0/9knRkgy/R/dgj2AAAAkGLeig8AAAApJtgDAABAign2AAAAkGKCPQAAAKSYYA8AAAApJtgDAABAign2AAAAkGKCPQAAAKSYYA8AAAAp9v8Bkkq6M9IWhgcAAAAASUVORK5CYII=", 118 | "text/plain": [ 119 | "
" 120 | ] 121 | }, 122 | "metadata": {}, 123 | "output_type": "display_data" 124 | } 125 | ], 126 | "source": [ 127 | "# make a set of five histograms using plt.subplots and defining explicitly the axes\n", 128 | "\n", 129 | "fig, axes = plt.subplots(nrows=1, ncols=5, figsize=(12, 4), sharey=True)\n", 130 | "\n", 131 | "axes[0].hist(depth_cluster1, bins=36, color = 'tab:red', alpha = 0.5)\n", 132 | "axes[1].hist(depth_cluster2, bins=36, color = 'tab:blue', alpha = 0.5)\n", 133 | "axes[2].hist(depth_background, bins=36, color = 'tab:orange', alpha = 0.5)\n", 134 | "axes[3].hist(depth_bedding1, bins=36, color = 'tab:green', alpha = 0.5)\n", 135 | "axes[4].hist(depth_bedding2, bins=36, color = 'tab:brown', alpha = 0.5)\n", 136 | "\n", 137 | "for ax in axes:\n", 138 | " ax.set_xlabel('Depth (m)')\n", 139 | " ax.set_xlim(500, 1000)\n", 140 | "\n", 141 | "axes[0].set_ylabel('Frequency')" 142 | ] 143 | }, 144 | { 145 | "cell_type": "code", 146 | "execution_count": 5, 147 | "metadata": {}, 148 | "outputs": [ 149 | { 150 | "data": { 151 | "text/plain": [ 152 | "Text(0, 0.5, 'Frequency')" 153 | ] 154 | }, 155 | "execution_count": 5, 156 | "metadata": {}, 157 | "output_type": "execute_result" 158 | }, 159 | { 160 | "data": { 161 | "image/png": "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aIFSof8pdeYApUz/U+rMAQ5XBYX2P/3pTzFkyJD40pe+FFVVVXHttdfGH//4x4IKeOKJJ+Loo4+OsrKyuO666+L++++P9773vVFXVxcREZWVlY22r6yszK9rzrRp06Jbt275pU+fPgXVBYci/U+pMwcoZfqfUmcOcLgqKLQPHjw4ampq4oUXXojZs2dHXV1dnH322XHyySdHTU1NvPzyywe8rxNPPDFWrFgRjz76aHz+85+PsWPHxp///Of8+lwu12j7LMuajO3t5ptvjo0bN+aXdevWtfwXhEOU/qfUmQOUMv1PqTMHOFwd1I3oOnbsGJdcckn89Kc/jW9/+9vx7LPPxk033RTHH398XHHFFbF+/fq33UenTp3ihBNOiKFDh8a0adPi1FNPje9+97tRVVUVEdHkqvqGDRuaXH3fW1lZWf5u9G8uUCr0P6XOHKCU6X9KnTnA4eqgQvtjjz0W48aNi169ekVNTU3cdNNN8eyzz8aDDz4YL7zwQlx88cUt3meWZdHQ0BADBgyIqqqqqK2tza/bsWNHLFq0KIYNG3YwZQMAAMAhoWMhT6qpqYnZs2fH008/HRdeeGHcfffdceGFF8YRR+z5G8CAAQPirrvuipNOOukt9/PVr341LrjggujTp09s3rw55s2bFw899FDMnz8/crlcTJw4MaZOnRoDBw6MgQMHxtSpU6Nz585x2WWXFVI2AAAAHFIKCu133HFHXH311XHVVVfl38a+r759+8asWbPecj8vvfRSfOYzn4n169dHt27d4pRTTon58+fHyJEjIyJi0qRJsW3bthg3blzU19fHGWecEQsWLIiKiopCygYAAIBDSkGhffXq1W+7TadOnWLs2LFvuc3bhfpcLhfV1dVRXV3dkvIAAADgsFDQZ9pnz54dP/vZz5qM/+xnP4s5c+YcdFEAAABAgaH91ltvje7duzcZ79mzZ0ydOvWgiwIAAAAKDO3PPfdcDBgwoMl4v379Yu3atQddFAAAAFBgaO/Zs2esXLmyyfif/vSnOO644w66KAAAAKDA0P7JT34yvvCFL8TChQtj165dsWvXrnjwwQdjwoQJ8clPfrK1awQAAICSVNDd42+55ZZ47rnn4kMf+lB07LhnF7t3744rrrjCZ9oBAACglRQU2jt16hT33ntvfPOb34w//elPUV5eHu973/uiX79+rV0fAAAAlKyCQvubBg0aFIMGDWqtWgAAAIC9FBTad+3aFT/+8Y/jd7/7XWzYsCF2797daP2DDz7YKsUBAABAKSsotE+YMCF+/OMfx8c+9rEYPHhw5HK51q4LAAAASl5BoX3evHnx05/+NC688MLWrgcAAAD4XwV95VunTp3ihBNOaO1aAAAAgL0UFNq/9KUvxXe/+93Isqy16wEAAAD+V0Fvj//DH/4QCxcujN/85jdx8sknx5FHHtlo/X333dcqxQEAAEApKyi0v+Md74hLLrmktWsBAAAA9lJQaJ89e3Zr1wEAAADso6DPtEdE7Ny5M37729/GXXfdFZs3b46IiBdffDG2bNnSasUBAABAKSvoSvtzzz0XH/3oR2Pt2rXR0NAQI0eOjIqKipg+fXps37497rzzztauEwAAAEpOQVfaJ0yYEEOHDo36+vooLy/Pj19yySXxu9/9rtWKAwAAgFJW8N3jFy9eHJ06dWo03q9fv3jhhRdapTAAAAAodQVdad+9e3fs2rWryfjzzz8fFRUVB10UAAAAUGBoHzlyZMyYMSP/OJfLxZYtW2LKlClx4YUXtlZtAAAAUNIKenv87bffHuedd168973vje3bt8dll10Wq1evju7du8c999zT2jUCAABASSootPfu3TtWrFgR99xzTzz++OOxe/fuuOaaa+Lyyy9vdGM6AAAAoHAFhfaIiPLy8rj66qvj6quvbs16AAAAgP9VUGi/++6733L9FVdcUVAxAAAAwP8pKLRPmDCh0eM33ngjXn/99ejUqVN07txZaAcAAIBWUNDd4+vr6xstW7ZsiaeffjrOPvtsN6IDAACAVlJQaG/OwIED49Zbb21yFR4AAAAoTKuF9oiIDh06xIsvvtiauwQAAICSVdBn2h944IFGj7Msi/Xr18fMmTPjgx/8YKsUBgAAAKWuoNA+evToRo9zuVz06NEjzj///PjOd77TGnUBAABAySsotO/evbu16wAAAAD20aqfaQcAAABaT0FX2m+88cYD3rampqaQQwAAAEDJKyi0L1++PB5//PHYuXNnnHjiiRER8cwzz0SHDh3itNNOy2+Xy+Vap0oAAAAoQQWF9osuuigqKipizpw5ccwxx0RERH19fVx11VVxzjnnxJe+9KVWLRIAAABKUUGfaf/Od74T06ZNywf2iIhjjjkmbrnlFnePBwAAgFZSUGjf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0D9QbenJJ5+MIUOGFO34pUb/76H/S5P+30P/ly5zYA9zoDTp/z30f+vylW9t5Je//GXU19fHNddcE4MHD260fOITn4hZs2Y12v4b3/hG/O53v4snn3wyrrzyyujevXuMHj06IiK+/OUvxyOPPBLXX399rFixIlavXh0PPPBAjB8//i1r6NmzZ5SXl8f8+fPjpZdeio0bN0ZExPnnnx+/+tWv4le/+lU89dRTMW7cuPj73//+tr9TIXUMGTIkevToEYsXL37b/belhx9+uMk/nLQd/b+H/i9N+n8P/V+6zIE9zIHSpP/30P+tS2hvI7NmzYoPf/jD0a1btybrPv7xj8eKFSvi8ccfz4/deuutMWHChDj99NNj/fr18cADD+T/SnbKKafEokWLYvXq1XHOOefEkCFD4mtf+1r06tXrLWvo2LFjfO9734u77rorevfuHRdffHFERFx99dUxduzYuOKKK2L48OExYMCAt/0LW6F1dOjQIa6++upGn4Fpb4888khs3LgxPvGJTxSthlKj//fQ/6VJ/++h/0uXObCHOVCa9P8e+r915bJ9P9hAu3rooYfivPPOi/r6+njHO95R7HLaxEsvvRQnn3xyLFu2LPr169fux//Hf/zHGDJkSHz1q19t92Pz1vR/29P/6dL/bU//p80caHvmQLr0f9s7nPrflXbaXGVlZcyaNSvWrl3b7sduaGiIU089Nb74xS+2+7EhQv9T2vQ/pc4coJTp/9bjSnuRlcJf2WB/9D+lTP9T6swBSpn+pyWEdgAAAEiUt8cDAABAooR2AAAASJTQDgAAAIkS2gEAACBRQjsAAAAkSmgHAACARAntAAAAkCihHQAAABL1/wGHc8wV74vAyQAAAABJRU5ErkJggg==", 162 | "text/plain": [ 163 | "
" 164 | ] 165 | }, 166 | "metadata": {}, 167 | "output_type": "display_data" 168 | } 169 | ], 170 | "source": [ 171 | "# make a set of five histograms using plt.subplots and defining explicitly the axes\n", 172 | "\n", 173 | "fig, axes = plt.subplots(nrows=1, ncols=5, figsize=(12, 4), sharey=True)\n", 174 | "\n", 175 | "axes[0].hist(aperture_cluster1, bins=30, color = 'tab:red', alpha = 0.5)\n", 176 | "axes[1].hist(aperture_cluster2, bins=30, color = 'tab:blue', alpha = 0.5)\n", 177 | "axes[2].hist(aperture_background, bins=30, color = 'tab:orange', alpha = 0.5)\n", 178 | "axes[3].hist(aperture_bedding1, bins=5, color = 'tab:green', alpha = 0.5)\n", 179 | "axes[4].hist(aperture_bedding2, bins=5, color = 'tab:brown', alpha = 0.5)\n", 180 | "\n", 181 | "for ax in axes:\n", 182 | " ax.set_xlabel('Aperture (mm)')\n", 183 | " ax.set_xlim(-1, 20)\n", 184 | " ax.set_ylim(0,50)\n", 185 | "\n", 186 | "axes[0].set_ylabel('Frequency')" 187 | ] 188 | }, 189 | { 190 | "cell_type": "code", 191 | "execution_count": 6, 192 | "metadata": {}, 193 | "outputs": [], 194 | "source": [ 195 | "# concatenate lists\n", 196 | "\n", 197 | "strike = np.concatenate((strike_cluster1, strike_cluster2, strike_background, strike_bedding1, strike_bedding2), axis=None)\n", 198 | "dip = np.concatenate((dip_cluster1, dip_cluster2, dip_background, dip_bedding1, dip_bedding2), axis=None)\n", 199 | "depth = np.concatenate((depth_cluster1, depth_cluster2, depth_background, depth_bedding1, depth_bedding2), axis=None)\n", 200 | "aperture = np.concatenate((aperture_cluster1, aperture_cluster2, aperture_background, aperture_bedding1, aperture_bedding2), axis=None)\n", 201 | "attribute = np.concatenate((attribute_cluster1, attribute_cluster2, attribute_background, attribute_bedding1, attribute_bedding2), axis=None)\n", 202 | "\n", 203 | "# convert to dataframe\n", 204 | "\n", 205 | "df = pd.DataFrame({'strike': strike, 'dip': dip, 'depth_m': depth, 'aperture_mm': aperture, 'type': attribute})\n" 206 | ] 207 | }, 208 | { 209 | "cell_type": "code", 210 | "execution_count": 7, 211 | "metadata": {}, 212 | "outputs": [ 213 | { 214 | "data": { 215 | "text/html": [ 216 | "
\n", 217 | "\n", 230 | "\n", 231 | " \n", 232 | " \n", 233 | " \n", 234 | " \n", 235 | " \n", 236 | " \n", 237 | " \n", 238 | " \n", 239 | " \n", 240 | " \n", 241 | " \n", 242 | " \n", 243 | " \n", 244 | " \n", 245 | " \n", 246 | " \n", 247 | " \n", 248 | " \n", 249 | " \n", 250 | " \n", 251 | " \n", 252 | " \n", 253 | " \n", 254 | " \n", 255 | " \n", 256 | " \n", 257 | " \n", 258 | " \n", 259 | " \n", 260 | " \n", 261 | " \n", 262 | " \n", 263 | " \n", 264 | " \n", 265 | " \n", 266 | " \n", 267 | " \n", 268 | " \n", 269 | " \n", 270 | " \n", 271 | " \n", 272 | " \n", 273 | " \n", 274 | " \n", 275 | " \n", 276 | " \n", 277 | " \n", 278 | " \n", 279 | " \n", 280 | " \n", 281 | " \n", 282 | " \n", 283 | " \n", 284 | " \n", 285 | " \n", 286 | " \n", 287 | " \n", 288 | " \n", 289 | " \n", 290 | " \n", 291 | " \n", 292 | " \n", 293 | " \n", 294 | " \n", 295 | " \n", 296 | " \n", 297 | " \n", 298 | "
strikedipdepth_maperture_mm
count450.000000450.000000450.000000450.000000
mean188.85662642.696792752.1223501.395988
std75.79483724.645009157.4838822.913713
min5.0000000.000000157.6535060.000000
25%108.79817917.358540610.5418910.000000
50%186.98123344.734488752.2706370.049566
75%265.71482765.568442895.3148761.289191
max348.00000089.0000001386.52096918.159196
\n", 299 | "
" 300 | ], 301 | "text/plain": [ 302 | " strike dip depth_m aperture_mm\n", 303 | "count 450.000000 450.000000 450.000000 450.000000\n", 304 | "mean 188.856626 42.696792 752.122350 1.395988\n", 305 | "std 75.794837 24.645009 157.483882 2.913713\n", 306 | "min 5.000000 0.000000 157.653506 0.000000\n", 307 | "25% 108.798179 17.358540 610.541891 0.000000\n", 308 | "50% 186.981233 44.734488 752.270637 0.049566\n", 309 | "75% 265.714827 65.568442 895.314876 1.289191\n", 310 | "max 348.000000 89.000000 1386.520969 18.159196" 311 | ] 312 | }, 313 | "execution_count": 7, 314 | "metadata": {}, 315 | "output_type": "execute_result" 316 | } 317 | ], 318 | "source": [ 319 | "df.describe()" 320 | ] 321 | }, 322 | { 323 | "cell_type": "code", 324 | "execution_count": 8, 325 | "metadata": {}, 326 | "outputs": [], 327 | "source": [ 328 | "# calculate dip azimuths\n", 329 | "\n", 330 | "dipazs = []\n", 331 | "\n", 332 | "for strike in df.strike.values:\n", 333 | " dipazs.append(strike2dipaz(strike))\n", 334 | "\n", 335 | "df['dip_az'] = dipazs" 336 | ] 337 | }, 338 | { 339 | "cell_type": "code", 340 | "execution_count": 9, 341 | "metadata": {}, 342 | "outputs": [], 343 | "source": [ 344 | "# subselect a dataframe for export\n", 345 | "\n", 346 | "export_df = df[['depth_m','dip_az','dip', 'aperture_mm', 'type']].copy()\n", 347 | "export_df = export_df[(export_df.depth_m > 500) & (export_df.depth_m < 1000)]" 348 | ] 349 | }, 350 | { 351 | "cell_type": "code", 352 | "execution_count": 10, 353 | "metadata": {}, 354 | "outputs": [ 355 | { 356 | "data": { 357 | "text/html": [ 358 | "
\n", 359 | "\n", 372 | "\n", 373 | " \n", 374 | " \n", 375 | " \n", 376 | " \n", 377 | " \n", 378 | " \n", 379 | " \n", 380 | " \n", 381 | " \n", 382 | " \n", 383 | " \n", 384 | " \n", 385 | " \n", 386 | " \n", 387 | " \n", 388 | " \n", 389 | " \n", 390 | " \n", 391 | " \n", 392 | " \n", 393 | " \n", 394 | " \n", 395 | " \n", 396 | " \n", 397 | " \n", 398 | " \n", 399 | " \n", 400 | " \n", 401 | " \n", 402 | " \n", 403 | " \n", 404 | " \n", 405 | " \n", 406 | " \n", 407 | " \n", 408 | " \n", 409 | " \n", 410 | " \n", 411 | " \n", 412 | " \n", 413 | " \n", 414 | " \n", 415 | " \n", 416 | " \n", 417 | " \n", 418 | " \n", 419 | " \n", 420 | " \n", 421 | " \n", 422 | " \n", 423 | " \n", 424 | " \n", 425 | " \n", 426 | " \n", 427 | " \n", 428 | " \n", 429 | " \n", 430 | " \n", 431 | " \n", 432 | " \n", 433 | " \n", 434 | " \n", 435 | " \n", 436 | " \n", 437 | " \n", 438 | " \n", 439 | " \n", 440 | "
depth_mdip_azdipaperture_mm
count446.000000446.000000446.000000446.000000
mean752.315736201.73426342.5685131.395895
std150.197112111.33793924.7120212.920963
min500.0347010.0132270.0000000.000000
25%611.794292168.17120317.2837040.000000
50%752.270637239.08776244.3798440.049566
75%895.062074284.39598665.5684421.289191
max998.242393359.88575789.00000018.159196
\n", 441 | "
" 442 | ], 443 | "text/plain": [ 444 | " depth_m dip_az dip aperture_mm\n", 445 | "count 446.000000 446.000000 446.000000 446.000000\n", 446 | "mean 752.315736 201.734263 42.568513 1.395895\n", 447 | "std 150.197112 111.337939 24.712021 2.920963\n", 448 | "min 500.034701 0.013227 0.000000 0.000000\n", 449 | "25% 611.794292 168.171203 17.283704 0.000000\n", 450 | "50% 752.270637 239.087762 44.379844 0.049566\n", 451 | "75% 895.062074 284.395986 65.568442 1.289191\n", 452 | "max 998.242393 359.885757 89.000000 18.159196" 453 | ] 454 | }, 455 | "execution_count": 10, 456 | "metadata": {}, 457 | "output_type": "execute_result" 458 | } 459 | ], 460 | "source": [ 461 | "export_df.describe()" 462 | ] 463 | }, 464 | { 465 | "cell_type": "code", 466 | "execution_count": 11, 467 | "metadata": {}, 468 | "outputs": [], 469 | "source": [ 470 | "export_df.to_csv('0_Synthetic_data.csv', index=False)" 471 | ] 472 | }, 473 | { 474 | "cell_type": "code", 475 | "execution_count": null, 476 | "metadata": {}, 477 | "outputs": [], 478 | "source": [] 479 | }, 480 | { 481 | "cell_type": "code", 482 | "execution_count": null, 483 | "metadata": {}, 484 | "outputs": [], 485 | "source": [] 486 | } 487 | ], 488 | "metadata": { 489 | "kernelspec": { 490 | "display_name": "bhi_env", 491 | "language": "python", 492 | "name": "python3" 493 | }, 494 | "language_info": { 495 | "codemirror_mode": { 496 | "name": "ipython", 497 | "version": 3 498 | }, 499 | "file_extension": ".py", 500 | "mimetype": "text/x-python", 501 | "name": "python", 502 | "nbconvert_exporter": "python", 503 | "pygments_lexer": "ipython3", 504 | "version": "3.9.18" 505 | }, 506 | "orig_nbformat": 4 507 | }, 508 | "nbformat": 4, 509 | "nbformat_minor": 2 510 | } 511 | -------------------------------------------------------------------------------- /1_Pre-process data.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Pre-process data\n", 8 | "\n", 9 | "Data will often require some pre-processing for analysis. Here we calculate strike, append lithology data, and calculate depth in ft." 10 | ] 11 | }, 12 | { 13 | "cell_type": "code", 14 | "execution_count": 1, 15 | "metadata": {}, 16 | "outputs": [], 17 | "source": [ 18 | "from fractoolbox import dip2strike\n", 19 | "import pandas as pd" 20 | ] 21 | }, 22 | { 23 | "cell_type": "markdown", 24 | "metadata": {}, 25 | "source": [ 26 | "## 1. Calculate strike from dip azimuth\n", 27 | "\n", 28 | "Exports from log analysis software typically do not contain strike, only dip and dip azimuth. \n", 29 | "\n", 30 | "The following code calculates strike from dip azimuth using the right hand rule." 31 | ] 32 | }, 33 | { 34 | "cell_type": "code", 35 | "execution_count": 2, 36 | "metadata": {}, 37 | "outputs": [ 38 | { 39 | "name": "stdout", 40 | "output_type": "stream", 41 | "text": [ 42 | "\n", 43 | "RangeIndex: 446 entries, 0 to 445\n", 44 | "Data columns (total 5 columns):\n", 45 | " # Column Non-Null Count Dtype \n", 46 | "--- ------ -------------- ----- \n", 47 | " 0 depth_m 446 non-null float64\n", 48 | " 1 dip_az 446 non-null float64\n", 49 | " 2 dip 446 non-null float64\n", 50 | " 3 aperture_mm 446 non-null float64\n", 51 | " 4 type 446 non-null object \n", 52 | "dtypes: float64(4), object(1)\n", 53 | "memory usage: 17.5+ KB\n" 54 | ] 55 | } 56 | ], 57 | "source": [ 58 | "picks = pd.read_csv('0_Synthetic_data.csv')\n", 59 | "picks.info()" 60 | ] 61 | }, 62 | { 63 | "cell_type": "code", 64 | "execution_count": 3, 65 | "metadata": {}, 66 | "outputs": [], 67 | "source": [ 68 | "strike = []\n", 69 | "\n", 70 | "for dipaz in picks.dip_az:\n", 71 | " strike.append(dip2strike(dipaz))\n", 72 | "\n", 73 | "picks['strike'] = strike" 74 | ] 75 | }, 76 | { 77 | "cell_type": "markdown", 78 | "metadata": {}, 79 | "source": [ 80 | "## 2. Append lithology type to data\n", 81 | "\n", 82 | "Contextual data can inform our analysis. We can append lithology (and other from - to data) as attributes to the picks." 83 | ] 84 | }, 85 | { 86 | "cell_type": "code", 87 | "execution_count": 4, 88 | "metadata": {}, 89 | "outputs": [ 90 | { 91 | "data": { 92 | "text/html": [ 93 | "
\n", 94 | "\n", 107 | "\n", 108 | " \n", 109 | " \n", 110 | " \n", 111 | " \n", 112 | " \n", 113 | " \n", 114 | " \n", 115 | " \n", 116 | " \n", 117 | " \n", 118 | " \n", 119 | " \n", 120 | " \n", 121 | " \n", 122 | " \n", 123 | " \n", 124 | " \n", 125 | " \n", 126 | " \n", 127 | " \n", 128 | " \n", 129 | " \n", 130 | "
from_mto_mlithology
0500750Rock A
17501000Rock B
\n", 131 | "
" 132 | ], 133 | "text/plain": [ 134 | " from_m to_m lithology\n", 135 | "0 500 750 Rock A\n", 136 | "1 750 1000 Rock B" 137 | ] 138 | }, 139 | "execution_count": 4, 140 | "metadata": {}, 141 | "output_type": "execute_result" 142 | } 143 | ], 144 | "source": [ 145 | "# make synthetic data\n", 146 | "\n", 147 | "data = {\n", 148 | " 'from_m': [500, 750], \n", 149 | " 'to_m': [750, 1000], \n", 150 | " 'lithology': ['Rock A', \n", 151 | " 'Rock B'],\n", 152 | "}\n", 153 | "\n", 154 | "mudlog = pd.DataFrame(data=data)\n", 155 | "mudlog" 156 | ] 157 | }, 158 | { 159 | "cell_type": "markdown", 160 | "metadata": {}, 161 | "source": [ 162 | "The method provided here allows for repeated values in the lithology column by allocating a code to each depth interval. \n", 163 | "\n", 164 | "There are simpler approaches that can be used if the lithology column does not contain repeated values.\n", 165 | "\n", 166 | "This method can be adapted for any from-to categorical data." 167 | ] 168 | }, 169 | { 170 | "cell_type": "code", 171 | "execution_count": 5, 172 | "metadata": {}, 173 | "outputs": [], 174 | "source": [ 175 | "# number the mudlog DataFrame rows from 0 to n\n", 176 | "mudlog['lith_num'] = range(len(mudlog))\n", 177 | "\n", 178 | "# call the unit tops to a list\n", 179 | "depth_bins = mudlog['from_m'].to_list()\n", 180 | "\n", 181 | "# append the deepest value to the bins list\n", 182 | "depth_bins.append(mudlog['to_m'].iloc[-1])\n", 183 | "\n", 184 | "# make a list containing the unique codes\n", 185 | "lith_num_label = mudlog['lith_num'].to_list()\n", 186 | "\n", 187 | "# append lithology numbers to the picks DataFrame based on depth\n", 188 | "picks['lithology'] = pd.cut(\n", 189 | " picks.depth_m,\n", 190 | " bins=depth_bins, \n", 191 | " labels = lith_num_label\n", 192 | " )\n", 193 | "\n", 194 | "# turn mudlog['lith_num'] and mudlog['lithology'] columns into a dictionary, with the lith_num as the key\n", 195 | "lith_dict = dict(zip(mudlog['lith_num'], mudlog['lithology']))\n", 196 | "\n", 197 | "# replace the lithology number with the lithology name using the dictionary above\n", 198 | "picks.lithology.replace(lith_dict, inplace=True)" 199 | ] 200 | }, 201 | { 202 | "cell_type": "markdown", 203 | "metadata": {}, 204 | "source": [ 205 | "## 3. Calculate pick depth in ft" 206 | ] 207 | }, 208 | { 209 | "cell_type": "code", 210 | "execution_count": 6, 211 | "metadata": {}, 212 | "outputs": [], 213 | "source": [ 214 | "picks['depth_ft'] = round(picks.depth_m * 3.281, 2) # rounded to 2 decimal places" 215 | ] 216 | }, 217 | { 218 | "cell_type": "markdown", 219 | "metadata": {}, 220 | "source": [ 221 | "## 4. Export processed data for use elsewhere" 222 | ] 223 | }, 224 | { 225 | "cell_type": "code", 226 | "execution_count": 7, 227 | "metadata": {}, 228 | "outputs": [], 229 | "source": [ 230 | "picks.to_csv('1_Pre-processed data.csv', index=False)" 231 | ] 232 | }, 233 | { 234 | "cell_type": "code", 235 | "execution_count": 8, 236 | "metadata": {}, 237 | "outputs": [], 238 | "source": [ 239 | "mudlog.to_csv('1_Pre-processed mudlog.csv', index=False)" 240 | ] 241 | }, 242 | { 243 | "cell_type": "code", 244 | "execution_count": null, 245 | "metadata": {}, 246 | "outputs": [], 247 | "source": [] 248 | } 249 | ], 250 | "metadata": { 251 | "kernelspec": { 252 | "display_name": "bhi_env", 253 | "language": "python", 254 | "name": "python3" 255 | }, 256 | "language_info": { 257 | "codemirror_mode": { 258 | "name": "ipython", 259 | "version": 3 260 | }, 261 | "file_extension": ".py", 262 | "mimetype": "text/x-python", 263 | "name": "python", 264 | "nbconvert_exporter": "python", 265 | "pygments_lexer": "ipython3", 266 | "version": "3.9.18" 267 | }, 268 | "orig_nbformat": 4 269 | }, 270 | "nbformat": 4, 271 | "nbformat_minor": 2 272 | } 273 | -------------------------------------------------------------------------------- /6_Tadpole plot.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "import matplotlib.pyplot as plt\n", 10 | "import numpy as np\n", 11 | "import pandas as pd\n", 12 | "import math" 13 | ] 14 | }, 15 | { 16 | "cell_type": "code", 17 | "execution_count": 2, 18 | "metadata": {}, 19 | "outputs": [], 20 | "source": [ 21 | "picks = pd.read_csv('1_Pre-processed data.csv')\n", 22 | "beds = picks[(picks['type'] == 'Bed boundary')].copy()\n", 23 | "fractures = picks[(picks['type'] == 'Conductive, HC') | (picks['type'] == 'Conductive, LC')].copy()\n", 24 | "mudlog = pd.read_csv('1_pre-processed mudlog.csv')\n", 25 | "\n", 26 | "# these imports and boolean statements are from the second notebook, \n", 27 | "# so we have not included the usual checks" 28 | ] 29 | }, 30 | { 31 | "cell_type": "code", 32 | "execution_count": 9, 33 | "metadata": {}, 34 | "outputs": [], 35 | "source": [ 36 | "\n", 37 | "\n", 38 | "def tail_endpoint(depths, dipazs, dips, tail_length, fig_x_width, fig_y_width, ylim_max, xlim_max):\n", 39 | " \"\"\"\n", 40 | " Calculate and return the x and y coordinates for the tadpole tail endpoints.\n", 41 | "\n", 42 | " Parameters:\n", 43 | " - depths (list or array): List of depths for each data point.\n", 44 | " - dipazs (list or array): List of dip azimuths for each data point.\n", 45 | " - dips (list or array): List of dip angles for each data point.\n", 46 | " - tail_length (float): The length of the tail as a decimal percentage of the axis scale.\n", 47 | " - fig_x_width (float): Width of the figure in inches.\n", 48 | " - fig_y_width (float): Height of the figure in inches.\n", 49 | " - ylim_max (float): Maximum depth of the plot.\n", 50 | " - xlim_max (float): Maximum dip of the plot.\n", 51 | "\n", 52 | " Returns:\n", 53 | " - tuple: A tuple containing two lists, the first with x coordinates of tail endpoints\n", 54 | " and the second with y coordinates of tail endpoints.\n", 55 | " \n", 56 | " Notes:\n", 57 | " - fig_x_width and fig_y_width are the values passed in when making the figure (fig_size=(x,y))\n", 58 | " and these widths determine the aspect ratio of the plot (n pixels in each direction).\n", 59 | " - fig_ratio is a multiplier on y or x axis tail length depending on which plot axis has more pixels\n", 60 | " \"\"\"\n", 61 | " tail_endpoints_y = []\n", 62 | " tail_endpoints_x = []\n", 63 | "\n", 64 | " for depth, dipaz, dip in zip(depths, dipazs, dips):\n", 65 | "\n", 66 | " if fig_x_width < fig_y_width:\n", 67 | " fig_ratio = fig_y_width / fig_x_width # this is the ratio of y to x inches (pixels)\n", 68 | " tail_endpoints_y.append(depth - (ylim_max * tail_length) * math.cos(math.radians(dipaz)))\n", 69 | " tail_endpoints_x.append(dip + (xlim_max * tail_length * fig_ratio) * math.sin(math.radians(dipaz)))\n", 70 | "\n", 71 | " else:\n", 72 | " fig_ratio = fig_x_width / fig_y_width\n", 73 | " tail_endpoints_y.append(depth - (ylim_max * tail_length * fig_ratio) * math.cos(math.radians(dipaz)))\n", 74 | " tail_endpoints_x.append(dip + (xlim_max * tail_length) * math.sin(math.radians(dipaz)))\n", 75 | " \n", 76 | " return tail_endpoints_x, tail_endpoints_y\n", 77 | "\n" 78 | ] 79 | }, 80 | { 81 | "cell_type": "code", 82 | "execution_count": 4, 83 | "metadata": {}, 84 | "outputs": [], 85 | "source": [ 86 | "\n", 87 | "# # make a test dataset using np.linspace\n", 88 | "# dips = np.linspace(45, 45, 20)\n", 89 | "# dipazs = np.linspace(0, 360, 20)\n", 90 | "# depths = np.linspace(0, 4000, 20)\n", 91 | "\n", 92 | "# # Log length\n", 93 | "# log_top = min(depths)\n", 94 | "# log_bot = max(depths)\n", 95 | "\n", 96 | "# # Fix the aspect ratio of the plot\n", 97 | "# fig_x_width = 2 \n", 98 | "# fig_y_width = 10\n", 99 | "\n", 100 | "# # make the figure\n", 101 | "# fig, ax = plt.subplots(1,1,figsize=(fig_x_width,fig_y_width))\n", 102 | "\n", 103 | "# # fix the axis scales\n", 104 | "# xlim_max = 90\n", 105 | "# ylim_max = log_bot\n", 106 | "\n", 107 | "# # Calculate tail endpoints\n", 108 | "# tail_endpoints_y = []\n", 109 | "# tail_endpoints_x = []\n", 110 | "\n", 111 | "# tail_length = 0.1 # as a % of the axis scale\n", 112 | "\n", 113 | "# tail_endpoints_x_test, tail_endpoints_y_test = tail_endpoint(\n", 114 | "# depths, dipazs, dips, tail_length, fig_x_width, fig_y_width, ylim_max, xlim_max\n", 115 | "# )\n", 116 | "\n", 117 | "# # Plot the tadpoles\n", 118 | "\n", 119 | "# for depth, dip, tail_endpoint_x, tail_endpoint_y in zip(depths, dips, tail_endpoints_x_test, tail_endpoints_y_test):\n", 120 | " \n", 121 | "# # plot the head\n", 122 | " \n", 123 | "# ax.scatter(\n", 124 | "# dip,\n", 125 | "# depth,\n", 126 | "# s = 30,\n", 127 | "# color = 'k',\n", 128 | "# )\n", 129 | " \n", 130 | "# # plot the tail\n", 131 | " \n", 132 | "# ax.plot(\n", 133 | "# [dip, tail_endpoint_x],\n", 134 | "# [depth, tail_endpoint_y],\n", 135 | "# color = 'k'\n", 136 | "# )\n", 137 | "\n", 138 | "# # Format plot\n", 139 | "\n", 140 | "# ax.xaxis.set_ticks([0,20,40,60,80,])\n", 141 | "# ax.set_xlim(0,90)\n", 142 | "# ax.set_ylabel('Depth (m)')\n", 143 | "# ax.grid(alpha=0.6)\n", 144 | "# ax.set_ylim(log_bot, log_top)\n" 145 | ] 146 | }, 147 | { 148 | "cell_type": "code", 149 | "execution_count": 10, 150 | "metadata": {}, 151 | "outputs": [ 152 | { 153 | "data": { 154 | "text/plain": [ 155 | "(995.4908070349536, 506.6371652931456)" 156 | ] 157 | }, 158 | "execution_count": 10, 159 | "metadata": {}, 160 | "output_type": "execute_result" 161 | }, 162 | { 163 | "data": { 164 | "image/png": "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", 165 | "text/plain": [ 166 | "
" 167 | ] 168 | }, 169 | "metadata": {}, 170 | "output_type": "display_data" 171 | } 172 | ], 173 | "source": [ 174 | "# The tadpole tails are different lengths when I use the \"real\" data\n", 175 | "# Tadpole tails are too long on the y axis and too short on the x axis\n", 176 | "# I can't see why this would be the case - the function is the same and the variables passed in are also the same\n", 177 | "\n", 178 | "dips = fractures['dip'].values\n", 179 | "dipazs = fractures['dip_az'].values\n", 180 | "depths = fractures['depth_m'].values\n", 181 | "\n", 182 | "# Log length\n", 183 | "log_top = min(depths)\n", 184 | "log_bot = max(depths)\n", 185 | "\n", 186 | "# Fix the aspect ratio of the plot\n", 187 | "fig_x_width = 2 \n", 188 | "fig_y_width = 10\n", 189 | "\n", 190 | "# make the figure\n", 191 | "fig, ax = plt.subplots(1,1,figsize=(fig_x_width,fig_y_width))\n", 192 | "\n", 193 | "# fix the axis scales\n", 194 | "xlim_max = 90\n", 195 | "ylim_max = log_bot\n", 196 | "\n", 197 | "# Calculate tail endpoints\n", 198 | "tail_endpoints_y = []\n", 199 | "tail_endpoints_x = []\n", 200 | "\n", 201 | "tail_length = 0.03 # as a % of the axis scale\n", 202 | "\n", 203 | "tail_endpoints_x_test, tail_endpoints_y_test = tail_endpoint(\n", 204 | " depths, dipazs, dips, tail_length, fig_x_width, fig_y_width, ylim_max, xlim_max\n", 205 | " )\n", 206 | "\n", 207 | "# Plot the tadpoles\n", 208 | "\n", 209 | "for depth, dip, tail_endpoint_x, tail_endpoint_y in zip(depths, dips, tail_endpoints_x_test, tail_endpoints_y_test):\n", 210 | " \n", 211 | " # plot the head\n", 212 | " \n", 213 | " ax.scatter(\n", 214 | " dip,\n", 215 | " depth,\n", 216 | " s = 30,\n", 217 | " color = 'k',\n", 218 | " )\n", 219 | " \n", 220 | " # plot the tail\n", 221 | " \n", 222 | " ax.plot(\n", 223 | " [dip, tail_endpoint_x],\n", 224 | " [depth, tail_endpoint_y],\n", 225 | " color = 'k'\n", 226 | " )\n", 227 | "\n", 228 | "# Format plot\n", 229 | "\n", 230 | "ax.xaxis.set_ticks([0,20,40,60,80,])\n", 231 | "ax.set_xlim(0,90)\n", 232 | "ax.set_ylabel('Depth (m)')\n", 233 | "ax.grid(alpha=0.6)\n", 234 | "ax.set_ylim(log_bot, log_top)\n", 235 | "\n" 236 | ] 237 | }, 238 | { 239 | "cell_type": "code", 240 | "execution_count": null, 241 | "metadata": {}, 242 | "outputs": [], 243 | "source": [] 244 | }, 245 | { 246 | "cell_type": "code", 247 | "execution_count": null, 248 | "metadata": {}, 249 | "outputs": [], 250 | "source": [] 251 | } 252 | ], 253 | "metadata": { 254 | "kernelspec": { 255 | "display_name": "bhi_env", 256 | "language": "python", 257 | "name": "python3" 258 | }, 259 | "language_info": { 260 | "codemirror_mode": { 261 | "name": "ipython", 262 | "version": 3 263 | }, 264 | "file_extension": ".py", 265 | "mimetype": "text/x-python", 266 | "name": "python", 267 | "nbconvert_exporter": "python", 268 | "pygments_lexer": "ipython3", 269 | "version": "3.9.18" 270 | }, 271 | "orig_nbformat": 4 272 | }, 273 | "nbformat": 4, 274 | "nbformat_minor": 2 275 | } 276 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright [yyyy] [name of copyright owner] 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # borehole-image-analysis-with-python 2 | 3 | Recipes for analyzing data extracted from borehole image logs. Part of in-person training provided by Cubic Earth. 4 | 5 | These notebooks use methods from fractoolbox, which has not yet been registered with PyPi. Download it from https://github.com/ICWallis/fractoolbox. 6 | 7 | The content of this repository is licensed under the Apache License, Version 2.0 (the "License"); you may use these files if you comply with the License, which includes attribution. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 8 | -------------------------------------------------------------------------------- /environment.yml: -------------------------------------------------------------------------------- 1 | name: sandpit 2 | channels: 3 | - conda-forge 4 | - defaults 5 | dependencies: 6 | - python=3.9 7 | - pip 8 | - numpy=1.19.5 9 | - matplotlib 10 | - jupyter 11 | - ipykernel 12 | - pandas 13 | - openpyxl 14 | - scipy 15 | - pip: 16 | - chemicals 17 | - mplstereonet 18 | - dlisio 19 | - lasio 20 | - seaborn -------------------------------------------------------------------------------- /utilities.py: -------------------------------------------------------------------------------- 1 | 2 | import numpy as np 3 | 4 | def random_strikes(n, mean, std_dev, lower_bound=0, upper_bound=360): 5 | """ 6 | Generate a list of n random strike angles with a normal distribution, limited to a specified range. 7 | 8 | Parameters: 9 | - n (int): The number of random strike angles to generate. 10 | - mean (float): The mean strike angle in degrees. 11 | - std_dev (float): The standard deviation of the strike angles in degrees. 12 | - lower_bound (float, optional): The lower bound for the generated strike angles (default: 0 degrees). 13 | - upper_bound (float, optional): The upper bound for the generated strike angles (default: 360 degrees). 14 | 15 | Returns: 16 | - List of random strike angles following a normal distribution within the specified range. 17 | 18 | Notes: 19 | - This function generates random strike angles with parameters mean and std_dev. 20 | - Strike angles are in degrees and may wrap around within the specified range. 21 | - Values outside the specified range [lower_bound, upper_bound] are adjusted to fall within the range. 22 | """ 23 | 24 | # Rest of the function code... 25 | 26 | 27 | random_strikes = np.random.normal(mean, std_dev, n) 28 | 29 | strikes = [] 30 | for strike in random_strikes: 31 | if strike < lower_bound: 32 | strikes.append(strike + 180) 33 | elif strike > upper_bound: 34 | strikes.append(strike - 180) 35 | else: 36 | strikes.append(strike) 37 | 38 | return strikes 39 | 40 | 41 | 42 | def random_dips(n, mean, std_dev, lower_bound=0, upper_bound=90): 43 | """ 44 | Generate a list of n random dip angles with a normal distribution, limited to a specified range. 45 | 46 | Parameters: 47 | - n (int): The number of random dip angles to generate. 48 | - mean (float): The mean dip angle of the normal distribution. 49 | - std_dev (float): The standard deviation of the dip angles. 50 | - lower_bound (float, optional): The lower bound for the generated dip angles (default: 0 degrees). 51 | - upper_bound (float, optional): The upper bound for the generated dip angles (default: 90 degrees). 52 | 53 | Returns: 54 | - List of random dip angles following a normal distribution within the specified range. 55 | 56 | Notes: 57 | - This function generates random dip angles with parameters mean and std_dev. 58 | - Dip angles are in degrees and may wrap around within the specified range. 59 | - Values outside the specified range [lower_bound, upper_bound] are adjusted to fall within the range. 60 | """ 61 | 62 | random_dips = np.random.normal(mean, std_dev, n) 63 | 64 | dips = [] 65 | for dip in random_dips: 66 | if dip < lower_bound: 67 | dips.append(dip + 45) 68 | elif dip > upper_bound: 69 | dips.append(dip - 45) 70 | else: 71 | dips.append(dip) 72 | 73 | return dips 74 | 75 | 76 | def random_depths_normal(n, mean, std_dev, lower_bound, upper_bound, outlier_handling=4): 77 | """Generate a list of n random depths a normal distribution within a specified range. 78 | 79 | Parameters: 80 | - n (int): The number of random depths to generate. 81 | - mean (float): The mean depth of the normal distribution. 82 | - std_dev (float): The standard deviation of the normal distribution. 83 | - lower_bound (float): The lower bound for the generated depths. 84 | - upper_bound (float): The upper bound for the generated depths. 85 | - outlier_handling (int, optional): A factor used for handling values outside the range. 86 | Default is 4, which moves values back into the desired depth range. 87 | 88 | Returns: 89 | - List of random depths following a normal distribution within the specified range.""" 90 | 91 | random_depths = np.random.normal(mean, std_dev, n) 92 | 93 | depths = [] 94 | for depth in random_depths: 95 | if depth < lower_bound: 96 | depths.append(depth + lower_bound/outlier_handling) 97 | elif depth > upper_bound: 98 | depths.append(depth - upper_bound/outlier_handling) 99 | else: 100 | depths.append(depth) 101 | 102 | return depths 103 | 104 | def random_depths_uniform(n, lower_bound, upper_bound): 105 | """Generate a list of n random depths with a uniform distribution within a specified range. 106 | 107 | Parameters: 108 | - n (int): The number of random depths to generate. 109 | - lower_bound (float): The lower bound for the generated depths. 110 | - upper_bound (float): The upper bound for the generated depths. 111 | 112 | Returns: 113 | - List of random depths following a uniform distribution within the specified range. 114 | """ 115 | 116 | random_depths = np.random.uniform(lower_bound, upper_bound, n) 117 | 118 | return random_depths 119 | 120 | def random_aperture_lognormal(mean, std_dev, min_limit, max_limit, num_values): 121 | """ 122 | Generate random lognormal values within a specified range. 123 | 124 | Parameters: 125 | - mean_ln: Mean of the underlying normal distribution. 126 | - std_dev_ln: Standard deviation of the underlying normal distribution. 127 | - min_limit: Minimum limit for the generated values. 128 | - max_limit: Maximum limit for the generated values. 129 | - num_values: Number of values to generate. 130 | 131 | Returns: 132 | - List of generated lognormal values within the specified range. 133 | 134 | Notes: 135 | - Values outside the specified range [min_limit, max_limit] are not sampled. 136 | """ 137 | lognormal_values = [] 138 | count = 0 139 | 140 | while count < num_values: 141 | value = np.random.lognormal(mean, std_dev) 142 | if min_limit <= value <= max_limit: 143 | lognormal_values.append(value) 144 | count += 1 145 | 146 | return lognormal_values --------------------------------------------------------------------------------