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].
[1]Steinhardt, P. J., Nelson, D. R., & Ronchetti, M. (1983). Physical Review B, 28.
[2]Lechner, W., & Dellago, C. (2008). The Journal of Chemical Physics, 129.
[3](1, 2) Mickel, W., Kapfer, S. C., Schröder-Turk, G. E., & Mecke, K. (2013). The Journal of Chemical Physics, 138.
[4](1, 2) Auer, S., & Frenkel, D. (2005). Advances in Polymer Science, 173.
[5]Uttormark, M. J., Thompson, M. O., Clancy, P. (1993). Physical Review B, 47.

Getting started

For general documentation and examples see here .