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: - 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
-