Skip to content

Note

Click here to download the full example code

hole traces with deviation flags

bt.plot.holes generalizes the single hand-rolled trace of checking drill holes (one hole, ax.plot(path["x"], path["z"])) to any set of holes at once: grouped by hole, one line each, labeled, in plan or projected on a section, with extra points marked on top.

import sys
from pathlib import Path

HERE = Path(__file__).parent if "__file__" in globals() else Path.cwd()
sys.path.insert(0, str(HERE.parents[1]))
import boitata as bt
import matplotlib.pyplot as plt
import numpy as np
from common import save

the flagged stations

check_drillholes (checking drill holes) flags two survey stations of DD0197, where the azimuth flips and back. their positions come from Drillholes.at, at the measured depths of the flagged stations. bt.plot.holes knows nothing about deviation; it takes the points to mark.

data = bt.datasets.stacked_sulphide_lenses(raw=True)
collar, survey = data["collars"], data["surveys"]
flags, _, _ = bt.check_drillholes(
    collar, survey, {"assays": data["assays"], "lithology": data["lithology"]}, max_depth="LENGTH"
)
deviated = flags["survey"]["deviation"]
flagged_holes = survey["HOLE_ID"][deviated]
flagged_depths = survey["DEPTH"][deviated]
print(f"{deviated.sum()} flagged stations, in {sorted(set(flagged_holes))}")

drillholes = bt.Drillholes.from_tables(data, intervals=None)
marked = drillholes.at(list(flagged_holes), flagged_depths)

Out:

2 flagged stations, in ['DD0197']

plan and section

the holes within 40 m of DD0197's collar, in plan view and on a section across strike (113°, as in contact surfaces, domain cleanup and domain change tables) through it. each view takes one call instead of one ax.plot per hole.

at_dd0197 = collar["HOLE_ID"] == "DD0197"
x0, y0, z0 = (float(collar[c][at_dd0197][0]) for c in ("X", "Y", "Z"))
near = np.hypot(collar["X"] - x0, collar["Y"] - y0) < 40.0
nearby = set(collar["HOLE_ID"][near])

paths = drillholes.paths()
local = paths.filter(np.isin(paths["HOLE_ID"], list(nearby)))

fig, axes = plt.subplots(1, 2, figsize=(11, 5.2), layout="constrained")
bt.plot.holes(local, mark=marked, ax=axes[0])
axes[0].set_title("Plan")
bt.plot.holes(local, plane=((x0, y0, z0), 113.0, 90.0), mark=marked, ax=axes[1])
axes[1].set_title("Section across strike")
save(fig, "traces")

Plan, Section across strike

Total running time of the script: ( 0 minutes 0.179 seconds)

Download Python source code: example_02_17.py

Download Jupyter notebook: example_02_17.ipynb

Gallery generated by mkdocs-gallery