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 k-mesh 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('PROCAR', outcar='OUTCAR', st=True, energy=0.60, noarrow=True, spin=1, code='vasp')

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('PROCAR', outcar='OUTCAR', exportplt=True)
plt.title('Using matplotlib options')
plt.show()
pyprocar.scriptFermi2D.fermi2D(file, outcar=None, abinit_output=None, spin=0, atoms=None, orbitals=None, energy=None, fermi=None, rec_basis=None, rot_symm=1, translate=[0, 0, 0], rotation=[0, 0, 0, 1], human=False, mask=None, savefig=None, st=False, noarrow=False, exportplt=False, code='vasp', repair=True)[source]

This module plots 2D Fermi surface.