Source code for pyiron_atomistics.atomistics.structure.pyscal

# coding: utf-8
# Copyright (c) Max-Planck-Institut für Eisenforschung GmbH - Computational Materials Design (CM) Department
# Distributed under the terms of "New BSD License", see the LICENSE file.

import numpy as np
import structuretoolkit as stk
from pyiron_base import state
from pyiron_snippets.deprecate import Deprecator

import pyiron_atomistics.atomistics.structure.atoms

deprecate = Deprecator()

__author__ = "Sarath Menon, Jan Janssen"
__copyright__ = (
    "Copyright 2021, Max-Planck-Institut für Eisenforschung GmbH - "
    "Computational Materials Design (CM) Department"
)
__version__ = "1.0"
__maintainer__ = "Sarath Menon"
__email__ = "sarath.menon@rub.de"
__status__ = "development"
__date__ = "Nov 6, 2019"


[docs] @deprecate(arguments={"clustering": "use n_clusters=None instead of clustering=False."}) def get_steinhardt_parameter_structure( structure, neighbor_method="cutoff", cutoff=0, n_clusters=2, q=None, averaged=False, clustering=None, ): """ Calculate Steinhardts parameters Args: structure (Atoms): The structure to analyse. neighbor_method (str) : can be ['cutoff', 'voronoi']. (Default is 'cutoff'.) cutoff (float) : Can be 0 for adaptive cutoff or any other value. (Default is 0, adaptive.) n_clusters (int/None) : Number of clusters for K means clustering or None to not cluster. (Default is 2.) q (list) : Values can be integers from 2-12, the required q values to be calculated. (Default is None, which uses (4, 6).) averaged (bool) : If True, calculates the averaged versions of the parameter. (Default is False.) Returns: numpy.ndarray: (number of q's, number of atoms) shaped array of q parameters numpy.ndarray: If `clustering=True`, an additional per-atom array of cluster ids is also returned """ if clustering == False: n_clusters = None state.publications.add(publication()) return stk.analyse.get_steinhardt_parameters( structure=structure, neighbor_method=neighbor_method, cutoff=cutoff, n_clusters=n_clusters, q=q, averaged=averaged, )
[docs] def analyse_centro_symmetry(structure, num_neighbors=12): """ Analyse centrosymmetry parameter Args: structure: Atoms object num_neighbors (int) : number of neighbors Returns: csm (list) : list of centrosymmetry parameter """ state.publications.add(publication()) return stk.analyse.get_centro_symmetry_descriptors( structure=structure, num_neighbors=num_neighbors )
[docs] def analyse_diamond_structure(structure, mode="total", ovito_compatibility=False): """ Analyse diamond structure Args: structure: Atoms object mode ("total"/"numeric"/"str"): Controls the style and level of detail of the output. - total : return number of atoms belonging to each structure - numeric : return a per atom list of numbers- 0 for unknown, 1 fcc, 2 hcp, 3 bcc and 4 icosa - str : return a per atom string of sructures ovito_compatibility(bool): use ovito compatiblity mode Returns: (depends on `mode`) """ state.publications.add(publication()) return stk.analyse.get_diamond_structure_descriptors( structure=structure, mode=mode, ovito_compatibility=ovito_compatibility )
[docs] def analyse_cna_adaptive(structure, mode="total", ovito_compatibility=False): """ Use common neighbor analysis Args: structure (pyiron_atomistics.structure.atoms.Atoms): The structure to analyze. mode ("total"/"numeric"/"str"): Controls the style and level of detail of the output. - total : return number of atoms belonging to each structure - numeric : return a per atom list of numbers- 0 for unknown, 1 fcc, 2 hcp, 3 bcc and 4 icosa - str : return a per atom string of sructures ovito_compatibility(bool): use ovito compatiblity mode Returns: (depends on `mode`) """ state.publications.add(publication()) return stk.analyse.get_adaptive_cna_descriptors( structure=structure, mode=mode, ovito_compatibility=ovito_compatibility )
[docs] def analyse_voronoi_volume(structure): """ Calculate the Voronoi volume of atoms Args: structure : (pyiron_atomistics.structure.atoms.Atoms): The structure to analyze. """ state.publications.add(publication()) return stk.analyse.get_voronoi_volumes(structure=structure)
[docs] def pyiron_to_pyscal_system(structure): """ Converts atoms to ase atoms and than to a pyscal system. Also adds the pyscal publication. Args: structure (pyiron atoms): Structure to convert. Returns: Pyscal system: See the pyscal documentation. """ state.publications.add(publication()) return stk.common.ase_to_pyscal( pyiron_atomistics.atomistics.structure.atoms.pyiron_to_ase(structure) )
[docs] def analyse_find_solids( structure, neighbor_method="cutoff", cutoff=0, bonds=0.5, threshold=0.5, avgthreshold=0.6, cluster=False, q=6, right=True, return_sys=False, ): """ Get the number of solids or the corresponding pyscal system. Calls necessary pyscal methods as described in https://pyscal.org/en/latest/methods/03_solidliquid.html. Args: neighbor_method (str, optional): Method used to get neighborlist. See pyscal documentation. Defaults to "cutoff". cutoff (int, optional): Adaptive if 0. Defaults to 0. bonds (float, optional): Number or fraction of bonds to consider atom as solid. Defaults to 0.5. threshold (float, optional): See pyscal documentation. Defaults to 0.5. avgthreshold (float, optional): See pyscal documentation. Defaults to 0.6. cluster (bool, optional): See pyscal documentation. Defaults to False. q (int, optional): Steinhard parameter to calculate. Defaults to 6. right (bool, optional): See pyscal documentation. Defaults to True. return_sys (bool, optional): Whether to return number of solid atoms or pyscal system. Defaults to False. Returns: int: number of solids, pyscal system: pyscal system when return_sys=True """ state.publications.add(publication()) return stk.analyse.find_solids( structure=structure, neighbor_method=neighbor_method, cutoff=cutoff, bonds=bonds, threshold=threshold, avgthreshold=avgthreshold, cluster=cluster, q=q, right=right, return_sys=return_sys, )
[docs] def publication(): return { "pyscal": { "Menon2019": { "doi": "10.21105/joss.01824", "url": "https://doi.org/10.21105/joss.01824", "year": "2019", "volume": "4", "number": "43", "pages": "1824", "author": ["Sarath Menon", "Grisell Diaz Leines", "Jutta Rogal"], "title": "pyscal: A python module for structural analysis of atomic environments", "journal": "Journal of Open Source Software", } } }