schrodinger.application.matsci.nano.plane module

Classes and functions for crystal planes.

Copyright Schrodinger, LLC. All rights reserved.

schrodinger.application.matsci.nano.plane.ext_gcd(a, b)

Solve ax + by = gcd(a, b) using the Extended Euclidean Algorithm. Return (1) the greatest common divisor (gcd) of integers a and b and (2) the integer Bezout coefficients x and y.

Parameters:
  • a (int) – the a coefficient

  • b (int) – the b coefficient

Return type:

int, int, int

Returns:

gcd(a, b), Bezout coefficient x, and Bezout coefficient y

schrodinger.application.matsci.nano.plane.reduce_hkl(hkl)

Reduce hkl to the smallest set of indices

param list hkl: Miller indices

Retype:

list, int

Returns:

Reduced Miller indices, divisor

class schrodinger.application.matsci.nano.plane.CrystalPlane(h_index, k_index, l_index, a_vec, b_vec, c_vec, origin=None, logger=None)

Bases: object

Manage a crystal plane object.

SQUARE = {1: array([-1.,  1.,  0.]), 2: array([-1., -1.,  0.]), 3: array([ 1., -1.,  0.]), 4: array([1., 1., 0.])}
DISTANCE_THRESH = -0.001
SAME_VECTOR_THRESH = 0.0001
SLAB_THRESHOLD = 1e-07
__init__(h_index, k_index, l_index, a_vec, b_vec, c_vec, origin=None, logger=None)

Create an instance.

Parameters:
  • h_index (int) – the h Miller index

  • k_index (int) – the k Miller index

  • l_index (int) – the l Miller index

  • a_vec (numpy.array) – the a lattice vector

  • b_vec (numpy.array) – the b lattice vector

  • c_vec (numpy.array) – the c lattice vector

  • origin (numpy.array) – the origin of the lattice vectors in Angstrom

  • logger (logging.getLogger) – output logger

checkMillerIndices()

Check the user provided Miller indices.

getReciprocals()

Return the reciprocal lattice vectors.

Return type:

three numpy.array

Returns:

the three reciprocal lattice vectors.

getNormal()

Return the normal vector.

Return type:

numpy.array

Returns:

the normal vector for this plane

getLinDepPlaneVectors()

Return three typically used plane vectors that are linearly dependent.

Return type:

numpy.array, numpy.array, numpy.array

Returns:

typically used plane vectors that are linearly dependent

transformVectors(a_vec, b_vec, c_vec)

Transform the given vectors using the basis transform.

Parameters:
  • a_vec (numpy.array) – the first vector

  • b_vec (numpy.array) – the second vector

  • c_vec (numpy.array) – the third vector

Return type:

numpy.array, numpy.array, numpy.array

Returns:

the three transformed vectors

getSimpleSlabVectors()

This sets the simple, i.e. two of the Miller indices are zero, transformation matrix into self.basis and sets the simple slab vectors.

getSlabVectors()

This sets the transformation matrix into self.basis. Basis vectors are chosen such that a and b axes are in the plane of the Miller plane, and c-axis is out of this plane (NOT necessarily normal to it). Also sets the slab vectors.

getSpanningVectors(st)

Return the spanning vectors of this bounding box.

Parameters:

st (schrodinger.structure.Structure) – the structure

Return type:

list of numpy.array

Returns:

contains vectors spanning the parallelepiped and its sides

getBestSpanningVector(st)

Return the spanning vector with the largest projection onto the plane normal vector.

Parameters:

st (schrodinger.structure.Structure) – the structure

Return type:

numpy.array

Returns:

the best spanning vector

getNumPlanes(st)

Return the number of planes that will fit inside the bounding box.

Parameters:

st (schrodinger.structure.Structure) – the structure

Return type:

int

Returns:

the number of planes that will fit inside the bounding box

getInterPlanarSeparation()

Return the inter-planar separation in Angstrom.

Return type:

float

Returns:

the inter-planar separation in Angstrom

getRotationToZ()

Return the rotation matrix needed to rotate this plane to the XY-plane as well as its inverse.

Return type:

two numpy.array

Returns:

the rotation matrix that rotates this plane to the XY-plane and its inverse.

getSquareVertices()

Return the vertices of a square that lies in this plane. The square has and edge-length of 2 Angstrom. It is rotated from the XY-plane, centered on origin, into this plane.

Return type:

list of numpy.array

Returns:

the vertices of the squre that lies in this plane

getParallelepipedLineSegments(st)

Return the line segments that make this bounding box.

Parameters:

st (schrodinger.structure.Structure) – the structure

Return type:

list of tuples of heads and tails of 12 line segments.

Returns:

the line segments that make this bounding box

getPlaneBoxIntersections(st, vertices)

Return the points where the plane containing the specified vertices intersects the parallelepiped.

Parameters:
Return type:

list of numpy.array

Returns:

the points of intersection

getOrderedIntersections(intersections)

Return the provided list of planar points in counter-clockwise order.

Parameters:

intersections (list of numpy.array) – some intersection points in a plane

Return type:

list of numpy.array

Returns:

those planar intersections in counter-clockwise order

getVertices(normal_vec, idx, draw_location=0, thickness=1)

Return a list of numpy.array containing vertices of a plane with the given index.

Parameters:
  • normal_vec (numpy.array) – the normal vector

  • idx (int) – the plane index, the sign of the index controls whether behind or ahead of the normal vector origin

  • draw_location (float) – specifies the starting location at which planes will be drawn in terms of a fraction of the normal vector which has a length of one inter-planar spacing

  • thickness (float) – specifies the thickness or distance between consecutive planes in terms of a fraction of the normal vector which has a length of one inter-planar spacing

Return type:

list of numpy.array

Returns:

the plane vertices

getVerticesOfAllPlanes(st, draw_location=0, thickness=1, also_draw_planes_behind=True)

Return a list of lists of points where the set of planes intersect the parallelepiped.

Parameters:
  • st (schrodinger.structure.Structure) – the structure

  • draw_location (float) – specifies the starting location at which planes will be drawn in terms of a fraction of the normal vector which has a length of one inter-planar spacing

  • thickness (float) – specifies the thickness or distance between consecutive planes in terms of a fraction of the normal vector which has a length of one inter-planar spacing

  • also_draw_planes_behind (bool) – whether to also draw planes behind the specified draw location, this is in addition to always drawing planes ahead of the draw location

Return type:

list of list of numpy.array

Returns:

where the planes intersect the parallelepiped