Source code for pycsamt.metadata.rocks

__all__ = [
    "GEO_ROCK_RESISTIVITY",
    "ROCK_HATCH_PATTERNS",
    "RockProperties",
]

# Global resistivity ranges for common geological units
GEO_ROCK_RESISTIVITY: dict[str, list[float]] = {
    "hard rock": [1e99, 1e6],
    "igneous rock": [1e6, 1e3],
    "duricrust": [5.1e3, 5.1e2],
    "gravel/sand": [1e4, 7.943],
    "conglomerate": [1e4, 8.913e1],
    "dolomite/limestone": [1e5, 1e3],
    "permafrost": [1e5, 4.169e2],
    "metamorphic rock": [5.1e2, 1e1],
    "tills": [8.1e2, 8.512e1],
    "standstone conglomerate": [1e4, 8.318e1],
    "lignite/coal": [7.762e2, 1e1],
    "shale": [5.012e1, 3.20e1],
    "clay": [1e2, 5.012e1],
    "saprolite": [6.310e2, 3.020e1],
    "sedimentary rock": [1e4, 1e0],
    "fresh water": [3.1e2, 1e0],
    "salt water": [1e0, 1.41e0],
    "massive sulphide": [1e0, 1e-2],
    "sea water": [1.231e-1, 1e-1],
    "ore minerals": [1e0, 1e-4],
    "graphite": [3.1623e-2, 3.162e-3],
}

# Hatching patterns and colors for geological units
ROCK_HATCH_PATTERNS: dict[str, tuple[str, tuple[float, float, float]]] = {
    "hard rock": (".+++++.", (0.25, 0.5, 0.5)),
    "igneous rock": (".o.o.", (1.0, 1.0, 1.0)),
    "duricrust": ("+.+", (1.0, 0.2, 0.36)),
    "gravel": ("oO", (0.75, 0.86, 0.12)),
    "sand": ("....", (0.23, 0.36, 0.45)),
    "conglomerate": (".O.", (0.55, 0.0, 0.36)),
    "dolomite": (".-.", (0.0, 0.75, 0.23)),
    "limestone": ("//.", (0.52, 0.23, 0.125)),
    "permafrost": ("o.", (0.2, 0.26, 0.75)),
    "metamorphic rock": ("*o.", (0.2, 0.2, 0.3)),
    "tills": ("-.", (0.7, 0.6, 0.9)),
    "standstone ": ("..", (0.5, 0.6, 0.9)),
    "lignite coal": ("+/.", (0.5, 0.5, 0.4)),
    "coal": ("*.", (0.8, 0.9, 0.0)),
    "shale": ("=", (0.0, 0.0, 0.7)),
    "clay": ("=.", (0.9, 0.8, 0.8)),
    "saprolite": ("*/", (0.3, 1.2, 0.4)),
    "sedimentary rock": ("...", (0.25, 0.0, 0.25)),
    "fresh water": (".-.", (0.0, 1.0, 0.2)),
    "salt water": ("o.-", (0.2, 1.0, 0.2)),
    "massive sulphide": (".+O", (1.0, 0.5, 0.5)),
    "sea water": (".--", (0.0, 1.0, 0.0)),
    "ore minerals": ("--|", (0.8, 0.2, 0.2)),
    "graphite": (".++.", (0.2, 0.7, 0.7)),
}


[docs] class RockProperties: """ Access and query geological rock metadata: * resistivity ranges * plotting hatch patterns Examples -------- >>> rp = RockProperties() >>> rp.get_resistivity("shale") [50.12, 32.0] >>> pattern, color = rp.get_pattern("shale") "=", (0.0, 0.0, 0.7) """ def __init__(self): self._ranges = GEO_ROCK_RESISTIVITY self._patterns = ROCK_HATCH_PATTERNS
[docs] @property def resistivity_ranges(self) -> dict[str, list[float]]: """ All resistivity ranges keyed by rock name. """ return self._ranges.copy()
[docs] @property def hatch_patterns( self, ) -> dict[str, tuple[str, tuple[float, float, float]]]: """ All hatch patterns keyed by rock name. """ return self._patterns.copy()
[docs] def get_resistivity(self, rock: str) -> list[float]: """ Return [max, min] resistivity for a given rock. Raises KeyError if rock not found. """ return self._ranges[rock]
[docs] def get_pattern( self, rock: str ) -> tuple[str, tuple[float, float, float]]: """ Return (hatch, color) tuple for a given rock. Raises KeyError if rock not found. """ return self._patterns[rock]
[docs] def find_matching_rocks(self, keyword: str) -> list[str]: """ Return list of rock names containing keyword (case‑insensitive). """ kw = keyword.lower() return [r for r in self._ranges if kw in r.lower()]