Skip to main content

Periodic atom-centered voxel grids for atomistic structures.

Project description

AtomVoxelizer

AtomVoxelizer builds periodic atom-centered voxel grids for atomistic structures. The core VoxelGrid class stores a 3D NumPy grid over a periodic cell and provides helpers for adding, setting, scaling, sampling, and plotting spherical regions.

Installation

Install the latest released package from PyPI:

pip install AtomVoxelizer

Install from the GitLab repository for development or unreleased changes:

git clone https://gitlab.com/tgmaxson/atomvoxelizer.git
cd atomvoxelizer
pip install -e ".[dev,examples]"

Install optional acceleration backends directly if you need them:

pip install numba
pip install taichi
# Choose the CuPy package matching your CUDA runtime, for example:
pip install cupy-cuda12x
pip install ".[analysis]"

VoxelGrid is always the NumPy backend. Optional acceleration backends are explicit: VoxelGridNumba, VoxelGridTaichi, and VoxelGridCuPy. VoxelGridAnalysis uses scikit-image for connected-volume and marching-cubes analysis when the analysis extra is installed. The examples extra installs ASE for CIF loading and Wulff construction examples.

AtomVoxelizer also includes experimental field grids for scalar, vector, and matrix-valued data at each voxel. Use FieldVoxelGrid / VectorVoxelGrid for the NumPy implementation, or FieldVoxelGridNumba / VectorVoxelGridNumba when Numba is installed.

Basic Usage

import numpy as np

from atomvoxelizer import VoxelGrid

cell = np.eye(3) * 10.0
grid = VoxelGrid(cell=cell, resolution=0.25)

grid.add_sphere(center=np.array([5.0, 5.0, 5.0]), radius=1.0, value=1.0)
grid.set_sphere(center=np.array([2.0, 2.0, 2.0]), radius=0.5, value=-1.0)
grid.clamp_grid(min_val=-1.0, max_val=1.0)

Use dtype= to choose the grid storage dtype when needed. The default is np.float32; integer dtypes are useful for count-like masks, and complex dtypes support arithmetic sphere operations but not ordered operations such as min_sphere, clamp_grid, or value-range sampling.

Sphere operations accept two masks. mask="constant" writes the supplied value or factor across the sphere. mask="distance" writes the real-space distance from the sphere center at each voxel. Combining a distance mask with min_spheres gives a nearest-atom distance field:

from atomvoxelizer import VoxelGridAnalysis

grid.grid.fill(np.inf)
grid.min_spheres(atom_positions, cutoff_radii, mask="distance")

analysis = VoxelGridAnalysis(grid)
vertices, faces = analysis.mesh_at_value(2.0, periodic=True)
surface_area = analysis.mesh_surface_area(vertices, faces)

Periodic scalar meshes are clipped at the primary cell boundary so triangles that cross a periodic boundary are cut at the cell edge.

Zeolite Example

The zeolite example and CIF files live in examples/zeolite/.

pip install -e ".[examples]"
python examples/zeolite/zeolite_voxel.py BEA

The script reads a framework CIF, builds voxel grids at several resolutions, plots middle XZ slices, benchmarks supercell scaling, and opens a 3D scatter plot.

The analysis example estimates geometric pore volume and geometric internal surface area:

pip install -e ".[examples,analysis]"
python examples/zeolite/zeolite_analysis.py BEA --resolution 0.25
python examples/zeolite/zeolite_analysis.py BEA --convergence 1.00 0.95 0.90 0.85 0.80 0.75 0.70 0.65 0.60 0.55 0.50 0.45 0.40 0.35 0.30 0.25 0.20 0.15 0.10 0.05 --plot bea_convergence.png

The analysis example reports geometric voxel estimates, not probe-accessible BET surface areas. It uses a fast voxel-face surface-area estimate by default. Use --surface-method marching-cubes for a smoother marching-cubes estimate on smaller grids.

Wulff Distance-Surface Example

The Wulff example builds a nanoparticle, voxelizes the nearest-atom distance field, and exports a marching-cubes mesh at a requested distance:

pip install -e ".[examples,analysis]"
python examples/wulff/distance_surface.py --symbol Pt --size 147 --distance 2.0 --output pt_surface.npz
python examples/wulff/distance_surface.py --symbol Pt --size 147 --distance 2.0 --plot pt_surface.png
python examples/wulff/distance_surface.py --symbol Pt --size 147 --distance 2.0 --show

Periodic Surface Example

The Pt(211) example traces a periodic nearest-atom distance surface for a stepped slab:

pip install -e ".[examples,analysis]"
python examples/surfaces/pt211_distance_surface.py --distance 1.8 --show

Tests and Benchmarks

Run the correctness tests with:

pytest

Run the backend benchmark with:

python benchmarks/benchmark_backends.py --backends numpy numba taichi cupy
python benchmarks/benchmark_backends.py --zeolite-scaling --framework BEA --resolution 0.5 --plot zeolite_scaling.png
python benchmarks/benchmark_backends.py --workload zeolite --backends taichi-gpu
python benchmarks/benchmark_dtypes.py --backend numpy

Run the built-in structure benchmarks for a zeolite and a roughly 1000 atom Wulff construction with:

python benchmarks/benchmark_structures.py

Backends whose optional dependencies are not installed are reported as missing.

Documentation

The hosted documentation is available at:

https://atomvoxelizer.readthedocs.io/en/latest/index.html

Documentation is built with Sphinx for Read the Docs.

Build it locally with:

pip install -e ".[docs]"
sphinx-build -b html docs/source docs/build/html

Read the Docs can use .readthedocs.yaml directly.

Publishing

Build and check PyPI artifacts with:

pip install -e ".[publish]"
python -m build
twine check dist/*

Upload to TestPyPI first, then PyPI:

twine upload --repository testpypi dist/*
twine upload dist/*

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

atomvoxelizer-0.2.11.tar.gz (2.7 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

atomvoxelizer-0.2.11-py3-none-any.whl (27.5 kB view details)

Uploaded Python 3

File details

Details for the file atomvoxelizer-0.2.11.tar.gz.

File metadata

  • Download URL: atomvoxelizer-0.2.11.tar.gz
  • Upload date:
  • Size: 2.7 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.12

File hashes

Hashes for atomvoxelizer-0.2.11.tar.gz
Algorithm Hash digest
SHA256 78a80d19cac3dbebff5d6acfaf355696a8bec43deab06cd71c2b4977d26cb836
MD5 4d2ea4bf443e452b47170e08d271b3c1
BLAKE2b-256 742d42bd8f25745a0e9e988fc3fbf8a8747b288d457404d67e99f5c55a0a12bd

See more details on using hashes here.

File details

Details for the file atomvoxelizer-0.2.11-py3-none-any.whl.

File metadata

  • Download URL: atomvoxelizer-0.2.11-py3-none-any.whl
  • Upload date:
  • Size: 27.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.12

File hashes

Hashes for atomvoxelizer-0.2.11-py3-none-any.whl
Algorithm Hash digest
SHA256 34091c2858299cf904613c556fc5ded247cef31fb207e2762fae971b29139c9a
MD5 a8a57bb213aecdc5c5fa8ae654bc0d7f
BLAKE2b-256 84142827d01bd9a77890e848b95b47c1278111f853ae993b8f5c09cd9ddbf926

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page