pyscal- A python module for structural analysis of atomic environments

pyscal is a python module for the calculation of local atomic structural environments including Steinhardt’s bond orientational order parameters 1 during post-processing of atomistic simulation data. The core functionality of pyscal is written in C++ with python wrappers using pybind11 which allows for fast calculations and easy extensions in python.

Steinhardt’s order parameters are widely used for the identification of crystal structures 3. They are also used to distinguish if an atom is in a solid or liquid environment 4. pyscal is inspired by the BondOrderAnalysis code, but has since incorporated many additional features and modifications. The pyscal module includes the following functionalities:


  • calculation of Steinhardt’s order parameters and their averaged version 2.

  • links with the Voro++ code, for the calculation of Steinhardt parameters weighted using the face areas of Voronoi polyhedra 3.

  • classification of atoms as solid or liquid 4.

  • clustering of particles based on a user defined property.

  • methods for calculating radial distribution functions, Voronoi volumes of particles, number of vertices and face area of Voronoi polyhedra, and coordination numbers.

  • calculation of angular parameters to identify diamond structure 5.


Steinhardt, P. J., Nelson, D. R., & Ronchetti, M. (1983). Physical Review B, 28.


Lechner, W., & Dellago, C. (2008). The Journal of Chemical Physics, 129.


Mickel, W., Kapfer, S. C., Schröder-Turk, G. E., & Mecke, K. (2013). The Journal of Chemical Physics, 138.


Auer, S., & Frenkel, D. (2005). Advances in Polymer Science, 173.


Uttormark, M. J., Thompson, M. O., Clancy, P. (1993). Physical Review B, 47.

Getting started

For general documentation and examples see here .