PyTessel: isosurface generation tool
PyTessel is a Python package for building isosurfaces from 3D scalar fields. It is originally designed to create isosurfaces of (molecular) orbitals and electron densities, but is agnotistic with respect to data input. The majority of the instructions of PyTessel are coded in C++ and are coupled to a number of Python routines using the Cython extension. PyTessel makes use of shared-memory parallelization via OpenMP ensuring efficient use is made of trivial parallelization strategies. For more information about the algorithm, please consult the Background section.
To construct an isosurface, PyTessel requires a scalar field and a description of the unit cell wherein the scalar field resides. A very succinct example of its operation is illustrated by the script below
from pytessel import PyTessel
import numpy as np
def main():
pytessel = PyTessel()
# generate some data
x = np.linspace(0, 10, 50)
# the grid is organized with z the slowest moving index and x the fastest moving index
grid = np.flipud(np.vstack(np.meshgrid(x, x, x, indexing='ij')).reshape(3,-1)).T
R = [5,5,5]
scalarfield = np.reshape(np.array([gaussian(r,R) for r in grid]), (len(x),len(x),len(x)))
unitcell = np.diag(np.ones(3) * 10.0)
vertices, normals, indices = pytessel.marching_cubes(scalarfield.flatten(), scalarfield.shape, unitcell.flatten(), 0.1)
pytessel.write_ply('test.ply', vertices, normals, indices)
def gaussian(r, R):
return np.exp(-(r-R).dot((r-R)))
if __name__ == '__main__':
main()
The isosurface is represented by thee arrays, containing vertex coordinates, the normals at those vertices and a list of indices containing the polygons (here triangles) that compose the isosurface. PyTessel offers the option to save the isosurface as a .ply file.
PyTessel has been developed at the Eindhoven University of Technology, Netherlands. PyTessel and its development are hosted on github. Bugs and feature requests are ideally submitted via the github issue tracker.