Source code for nanomesh.data

"""Module containing sample data."""

from __future__ import annotations

from pathlib import Path
from typing import TYPE_CHECKING

import numpy as np
from skimage.data import binary_blobs

from nanomesh._doc import doc

data_dir = Path(__file__).parent

if TYPE_CHECKING:
    from nanomesh import MeshContainer


[docs]@doc(dim='2d') def binary_blobs2d(**kwargs) -> np.ndarray: """Generate {dim} binary blobs. Parameters ---------- **kwargs These parameters are passed to :func:`skimage.data.binary_blobs` Returns ------- numpy.ndarray {dim} array with binary blobs """ kwargs.setdefault('length', 50) kwargs.setdefault('n_dim', 2) kwargs.setdefault('volume_fraction', 0.2) kwargs.setdefault('blob_size_fraction', 0.3) return binary_blobs(**kwargs).astype(int)
[docs]@doc(binary_blobs2d, dim='3d') def binary_blobs3d(**kwargs) -> np.ndarray: kwargs.setdefault('length', 50) kwargs.setdefault('n_dim', 3) kwargs.setdefault('volume_fraction', 0.2) kwargs.setdefault('blob_size_fraction', 0.2) return binary_blobs(**kwargs).astype(int)
[docs]def nanopores() -> np.ndarray: """Fetch 2D slice of nanopore dataset. Returns ------- nanopores : numpy.ndarray 2D image of nanopores """ i = 161 return nanopores3d()[:, :, i]
[docs]def nanopores_gradient() -> np.ndarray: """Fetch 2D slice of nanopore dataset with a gradient. Returns ------- nanopores : (i,j) numpy.ndarray 2D image of nanopores with gradient """ return np.rot90(np.load(data_dir / 'nanopores_gradient.npy'))
[docs]def nanopores3d() -> np.ndarray: """Fetch 3D nanopore dataset. Returns ------- nanopores : (i,j,k) numpy.ndarray 3D image of nanopores """ return np.load(data_dir / 'nanopores3d.npy')
[docs]@doc(dim='2d', kind='triangle', func='triangulate') def blob_mesh2d(opts: str = 'q30a10', **kwargs) -> MeshContainer: """Return a {dim} {kind} mesh generated from binary blobs. Parameters ---------- opts : str, optional Options passed to :func:`{func}`. **kwargs These parameters are passed to :func:`binary_blobs{dim}`. Returns ------- mesh : MeshContainer {dim} {kind} mesh generated from binary blobs. """ from nanomesh import plane2mesh data = binary_blobs2d(**kwargs) return plane2mesh(data, opts=opts)
[docs]@doc(blob_mesh2d, dim='3d', kind='tetrahedral', func='tetrahedralize') def blob_mesh3d(opts: str = '-pAq', **kwargs) -> MeshContainer: from nanomesh import volume2mesh data = binary_blobs3d(**kwargs) return volume2mesh(data, opts=opts)
__all__ = [ 'nanopores', 'nanopores3d', 'binary_blobs3d', 'blob_mesh2d', 'blob_mesh3d', ]