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

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:
  • st (schrodinger.structure.Structure) – the structure
  • vertices (list of numpy.array) – the vertices of the square that lies in this plane
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