2D spin-texture#

This module can be utilized to visualize the constant energy surface spin textures in a given system. This feature is particularly useful in identifying Rashba and Dresselhaus type spin-splitting effects, analyzing the topology of Fermi-surface, and examining Lifshitz transitions. To plot 2D spin texture, we require a 2D k-grid centered a certain special k-point in Brillouin zone near which we want to examine the spin-texture in k-space (see section Example of kmesh_generator regarding generation of 2D k-mesh).

Usage: To plot Sx spin component at a constant energy surface E=EF+0.60eV (spin=1, 2, 3 for Sx, Sy, Sz, respectively):

pyprocar.fermi2D(code='vasp', dirname = 'fermi', st=True, energy=0.60, noarrow=True, spins=[1], )

One could also plot spin texture using arrows instead of a heat map. This can be done by setting the tag: noarrow=False. To set maximum and minimum energy values for color map, one could use vmin and vmax tags.

Translate and Rotate the 2D KPOINT mesh#

For any spin-texture in a 2D K-plane, PyProcar usually treats Z-direction as the normal, and makes plot in the X-Y plane. It works fine when we have a 2D k-mesh in (kx, ky, 0) plane, but for other 2D k-meshes (e.g. Y-Z or X-Z), it gives us Value Error or Segmentation Fault.

The solution is to rotate the PROCAR by 90 degrees and make the Z-axis perpendicular to the 2D plane. But we should first translate our mesh to a particular K-point (which is mostly the center of the k-mesh) to define the rotation point, and then decide the rotation axis and rotation angle.

To translate the k-mesh:

translate=[2,2,0]

220 is the index of the k-point in the 2D k-mesh to define the rotation point (counting starts from 0).

To define the rotation angle and rotation axis:

rotation=[90,0,1,0]

This defines the rotation angle = 90, and Y-axis as the rotation axis. PyProcar always performs the translation operation first and then does the rotation.

Be careful: Now Sx, Sy and Sz all will be rotated according to the user’s choice. Sy will be same as before but Sx would now be Sz and Sz would be Sx.

Export plot as a matplotlib.pyplot object#

PyProcar allows the plot to be exported as a matplotlib.pyplot object. This allows for further processing of the plot through options available in matplotlib. This can be enabled by setting exportplt = True. Usage:

import matplotlib.pyplot as plt
import pyprocar

plt = pyprocar.fermi2D(code='vasp', dirname = 'fermi', exportplt=True)
plt.title('Using matplotlib options')
plt.show()
pyprocar.scripts.scriptFermi2D.fermi2D(code: str, dirname: str, mode: str = 'plain', fermi: float | None = None, fermi_shift: float = 0.0, band_indices: List[List] | None = None, band_colors: List[List] | None = None, spins: List[int] | None = None, atoms: List[int] | None = None, orbitals: List[int] | None = None, energy: float | None = None, k_z_plane: float = 0.0, k_z_plane_tol: float = 0.01, rot_symm=1, translate: List[int] = [0, 0, 0], rotation: List[int] = [0, 0, 0, 1], spin_texture: bool = False, exportplt: bool = False, savefig: str | None = None, print_plot_opts: bool = False, **kwargs)[source]#

This function plots the 2d fermi surface in the z = 0 plane

Parameters:
  • code (str,) – This parameter sets the code to parse, by default “vasp”

  • dirname (str, optional) – This parameter is the directory of the calculation, by default ‘’

  • fermi (float, optional) – The fermi energy. If none is given, the fermi energy in the directory will be used, by default None

  • fermi_shift (float, optional) – The fermi energy shift, by default 0.0

  • lobster (bool, optional) – A boolean value to determine to use lobster, by default False

  • band_indices (List[List]) – A list of list that contains band indices for a given spin

  • band_colors (List[List]) – A list of list that contains colors for the band index corresponding the band_indices for a given spin

  • spins (List[int], optional) – List of spins, by default [0]

  • atoms (List[int], optional) – List of atoms, by default None

  • orbitals (List[int], optional) – List of orbitals, by default None

  • energy (float, optional) – The energy to generate the iso surface. When energy is None the 0 is used by default, which is the fermi energy, by default None

  • k_z_plane (float, optional) – Which K_z plane to generate 2d fermi surface, by default 0.0

  • rot_symm (int, optional) – _description_, by default 1

  • translate (List[int], optional) – Matrix to translate the kpoints, by default [0, 0, 0]

  • rotation (List[int], optional) – Matrix to rotate the kpoints, by default [0, 0, 0, 1]

  • savefig (str, optional) – The filename to save the plot as., by default None

  • spin_texture (bool, optional) – Boolean value to determine if spin arrows are plotted, by default False

  • exportplt (bool, optional) – Boolean value where to return the matplotlib.pyplot state plt, by default False

  • print_plot_opts (bool, optional) – Boolean to print the plotting options

Returns:

matplotlib.pyplot – Returns the matplotlib.pyplot state plt

Raises:

RuntimeError – invalid option –translate