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