2D spin-texture — PyProcar 6.2.1 documentation

Skip to main content
`Ctrl`+`K`

# 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 \(S_x\) spin component at a constant energy surface \(E = E_{F} + 0.60\,eV\) (spin=1, 2, 3 for \(S_x\), \(S_y\), \(S_z\), 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 (\(k_x\), \(k_y\), 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 \(S_x\), \(S_y\) and \(S_z\) all will be rotated according to the user’s choice. \(S_y\) will be same as before but \(S_x\) would now be \(S_z\) and \(S_z\) would be \(-S_x\).

## 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)

  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