pymatgen.analysis.diffraction.tem module
This module implements a TEM pattern calculator.
- class TEMCalculator(symprec: float | None = None, voltage: float = 200, beam_direction: tuple[int, int, int] = (0, 0, 1), camera_length: int = 160, debye_waller_factors: dict[str, float] | None = None, cs: float = 1)[source]
Bases:
AbstractDiffractionPatternCalculator
Computes the TEM pattern of a crystal structure for multiple Laue zones. Code partially inspired from XRD calculation implementation. X-ray factor to electron factor
conversion based on the International Table of Crystallography.
- #TODO: Could add “number of iterations”, “magnification”, “critical value of beam”,
“twin direction” for certain materials, “sample thickness”, and “excitation error s”
- Parameters:
symprec (float) – Symmetry precision for structure refinement. If set to 0, no refinement is done. Otherwise, refinement is performed using spglib with provided precision.
voltage (float) – The wavelength is a function of the TEM microscope’s voltage. By default, set to 200 kV. Units in kV.
beam_direction (tuple) – The direction of the electron beam fired onto the sample. By default, set to [0,0,1], which corresponds to the normal direction of the sample plane.
camera_length (int) – The distance from the sample to the projected diffraction pattern. By default, set to 160 cm. Units in cm.
symbol (debye_waller_factors ({element) – float}): Allows the specification of Debye-Waller factors. Note that these factors are temperature dependent.
cs (float) – the chromatic aberration coefficient. set by default to 1 mm.
- bragg_angles(interplanar_spacings: dict[tuple[int, int, int], float]) dict[tuple[int, int, int], float] [source]
Gets the Bragg angles for every hkl point passed in (where n = 1). :param interplanar_spacings: dictionary of hkl to interplanar spacing :type interplanar_spacings: dict
- Returns:
dict of hkl plane (3-tuple) to Bragg angle in radians (float)
- cell_intensity(structure: Structure, bragg_angles: dict[tuple[int, int, int], float]) dict[tuple[int, int, int], float] [source]
Calculates cell intensity for each hkl plane. For simplicity’s sake, take I = |F|**2. :param structure: The input structure. :type structure: Structure :param bragg_angles: The Bragg angles for each hkl plane. :type bragg_angles: dict of 3-tuple to float
- Returns:
dict of hkl plane to cell intensity
- cell_scattering_factors(structure: Structure, bragg_angles: dict[tuple[int, int, int], float]) dict[tuple[int, int, int], int] [source]
Calculates the scattering factor for the whole cell. :param structure: The input structure. :type structure: Structure :param bragg_angles: The Bragg angles for each hkl plane. :type bragg_angles: dict of 3-tuple to float
- Returns:
dict of hkl plane (3-tuple) to scattering factor (in angstroms).
- electron_scattering_factors(structure: Structure, bragg_angles: dict[tuple[int, int, int], float]) dict[str, dict[tuple[int, int, int], float]] [source]
Calculates atomic scattering factors for electrons using the Mott-Bethe formula (1st order Born approximation). :param structure: The input structure. :type structure: Structure :param bragg_angles: The Bragg angles for each hkl plane. :type bragg_angles: dict of 3-tuple to float
- Returns:
dict from atomic symbol to another dict of hkl plane to factor (in angstroms)
- static generate_points(coord_left: int = -10, coord_right: int = 10) ndarray [source]
Generates a bunch of 3D points that span a cube. :param coord_left: The minimum coordinate value. :type coord_left: int :param coord_right: The maximum coordinate value. :type coord_right: int
- Returns:
Numpy 2d array
- get_first_point(structure: Structure, points: list) dict[tuple[int, int, int], float] [source]
Gets the first point to be plotted in the 2D DP, corresponding to maximum d/minimum R. :param structure: The input structure. :type structure: Structure :param points: All points to be checked. :type points: list
- Returns:
dict of a hkl plane to max interplanar distance.
- static get_interplanar_angle(structure: Structure, p1: tuple[int, int, int], p2: tuple[int, int, int]) float [source]
Returns the interplanar angle (in degrees) between the normal of two crystal planes. Formulas from International Tables for Crystallography Volume C pp. 2-9. :param structure: The input structure. :type structure: Structure :param p1: plane 1 :type p1: 3-tuple :param p2: plane 2 :type p2: 3-tuple
- Returns:
float
- get_interplanar_spacings(structure: Structure, points: list[tuple[int, int, int]] | np.ndarray) dict[tuple[int, int, int], float] [source]
- Parameters:
structure (Structure) – the input structure.
points (tuple) – the desired hkl indices.
- Returns:
Dict of hkl to its interplanar spacing, in angstroms (float).
- get_pattern(structure: Structure, scaled: bool | None = None, two_theta_range: tuple[float, float] | None = None) pd.DataFrame [source]
Returns all relevant TEM DP info in a pandas dataframe. :param structure: The input structure. :type structure: Structure :param scaled: Required value for inheritance, does nothing in TEM pattern :type scaled: bool :param two_theta_range: Required value for inheritance, does nothing in TEM pattern :type two_theta_range: Tuple
- Returns:
PandasDataFrame
- get_plot_2d(structure: Structure) Figure [source]
Generates the 2D diffraction pattern of the input structure. :param structure: The input structure. :type structure: Structure
- Returns:
Figure
- get_plot_2d_concise(structure: Structure) Figure [source]
Generates the concise 2D diffraction pattern of the input structure of a smaller size and without layout. Does not display. :param structure: The input structure. :type structure: Structure
- Returns:
Figure
- static get_plot_coeffs(p1: tuple[int, int, int], p2: tuple[int, int, int], p3: tuple[int, int, int]) ndarray [source]
Calculates coefficients of the vector addition required to generate positions for each DP point by the Moore-Penrose inverse method. :param p1: The first point. Fixed. :type p1: 3-tuple :param p2: The second point. Fixed. :type p2: 3-tuple :param p3: The point whose coefficients are to be calculted. :type p3: 3-tuple
- Returns:
Numpy array
- get_positions(structure: Structure, points: list) dict[tuple[int, int, int], numpy.ndarray] [source]
Calculates all the positions of each hkl point in the 2D diffraction pattern by vector addition. Distance in centimeters. :param structure: The input structure. :type structure: Structure :param points: All points to be checked. :type points: list
- Returns:
dict of hkl plane to xy-coordinates.
- get_s2(bragg_angles: dict[tuple[int, int, int], float]) dict[tuple[int, int, int], float] [source]
Calculates the s squared parameter (= square of sin theta over lambda) for each hkl plane. :param bragg_angles: The bragg angles for each hkl plane. :type bragg_angles: dict
- Returns:
- Dict of hkl plane to s2 parameter, calculates the s squared parameter
(= square of sin theta over lambda).
- is_parallel(structure: Structure, plane: tuple[int, int, int], other_plane: tuple[int, int, int]) bool [source]
Checks if two hkl planes are parallel in reciprocal space. :param structure: The input structure. :type structure: Structure :param plane: The first plane to be compared. :type plane: 3-tuple :param other_plane: The other plane to be compared. :type other_plane: 3-tuple
- Returns:
boolean
- normalized_cell_intensity(structure: Structure, bragg_angles: dict[tuple[int, int, int], float]) dict[tuple[int, int, int], float] [source]
Normalizes the cell_intensity dict to 1, for use in plotting. :param structure: The input structure. :type structure: Structure :param bragg_angles: The Bragg angles for each hkl plane. :type bragg_angles: dict of 3-tuple to float
- Returns:
dict of hkl plane to normalized cell intensity
- tem_dots(structure: Structure, points) list [source]
Generates all TEM_dot as named tuples that will appear on the 2D diffraction pattern. :param structure: The input structure. :type structure: Structure :param points: All points to be checked. :type points: list
- Returns:
list of TEM_dots
- wavelength_rel() float [source]
- Calculates the wavelength of the electron beam with relativistic kinematic effects taken
into account.
- Parameters:
none –
- Returns:
Relativistic Wavelength (in angstroms)
- x_ray_factors(structure: Structure, bragg_angles: dict[tuple[int, int, int], float]) dict[str, dict[tuple[int, int, int], float]] [source]
Calculates x-ray factors, which are required to calculate atomic scattering factors. Method partially inspired by the equivalent process in the xrd module. :param structure: The input structure. :type structure: Structure :param bragg_angles: Dictionary of hkl plane to Bragg angle. :type bragg_angles: dict
- Returns:
dict of atomic symbol to another dict of hkl plane to x-ray factor (in angstroms).
- zone_axis_filter(points: list[tuple[int, int, int]] | np.ndarray, laue_zone: int = 0) list[tuple[int, int, int]] [source]
Filters out all points that exist within the specified Laue zone according to the zone axis rule. :param points: The list of points to be filtered. :type points: np.ndarray :param laue_zone: The desired Laue zone. :type laue_zone: int
- Returns:
list of 3-tuples