Source code for schrodinger.application.matsci.nano.util
"""
Utility functions for nanostructures.
Copyright Schrodinger, LLC. All rights reserved."""
# Contributor: Thomas F. Hughes
from past.utils import old_div
import numpy
from schrodinger.infra import mm
from schrodinger.structutils import transform
_version = '$Revision 0.0 $'
[docs]def get_atomic_element_symbols():
"""
Return a set of symbols of atomic elements in the periodic table.
:rtype: set of strs
:return: symbols, set of atomic elements
"""
max_atomic_number = mm.MMELEMENTS_MAX
symbols = set()
for atomicnumber in range(1, max_atomic_number + 1):
atomicsymbol = mm.mmelement_get_symbol_by_atomic_number(atomicnumber)
symbols.add(atomicsymbol)
return symbols
[docs]def get_rotated_vector(invector, angle, length=None, axis=None):
"""
Return a rotated vector of a given length.
:type invector: numpy.array
:param invector: input vector
:type angle: float
:param angle: rotation angle in radians
:type length: float
:param length: length of output vector
:type axis: numpy.array
:param axis: rotation axis
:rtype: numpy.array
:return: outvector, output vector
"""
if not axis:
axis = transform.Z_AXIS
inveclen = numpy.linalg.norm(invector)
inunitvec = transform.get_normalized_vector(invector)
rotmatrix = transform.get_rotation_matrix(axis, angle)
outunitvec = transform.transform_atom_coordinates(inunitvec, rotmatrix)
if length:
outvector = outunitvec * length
else:
outvector = outunitvec * inveclen
return outvector
[docs]def get_inversion_index(index):
"""
Return the atom index obtained by applying an inversion operation
to the given index in a given hexagon.
:type index: int
:param index: atom index of an atom in a honeycomb cell
:rtype: invindex, int
:return: invindex, atom index after inversion
"""
numatoms = 6
invindex = index + old_div(numatoms, 2)
if invindex > numatoms:
invindex = invindex - numatoms
return invindex