Spin-orbit coupling[1] means the system has a non-collinear spin. Therefore, spin exists as a spinor, hence there is no meaning to 'up' and 'down' spin. Still, is there any way to get fat-band plot separating 'up' and 'down' spin for a system with SOC?


  1. Xu, X.; Ma, Y.; Zhang, T.; Lei, C.; Huang, B.; Dai, Y. Nonmetal-Atom-Doping-Induced Valley Polarization in Single-Layer Tl2O. J. Phys. Chem. Lett. 2019, 10 (16), 4535–4541. DOI: 10.1021/acs.jpclett.9b01602.

2 Answers 2


Phil's answer is absolutely correct. In non-collinear spinor calculation The spin for each state (at a specific k-point and specific band) can points towards different direction. However, since spin is still a good quantum number, we still have pairs of states in which one electron's spin points toward one direction and the other toward the opposite direction, the only difference is that for different pairs, the axis of which spins lie on can differ.

What Phil said in his answer is probably the most direct way of calculating this. Here, on a technical note, I can think of two ways of actually doing this:

  1. Using the Wannier90's spin projection option (see example 17 in Wannier90's tutorial).

  2. Using the weights obtained from spinor projections onto atomic orbitals. This can be achieved for VASP using pyband package. You can use the following command line option to enable this feature:

pyband --occ 1 --lsorbit --spin z --occL --occLC_cbar_vmin -1 --occLC_cbar_vmax 1

the meaning of each command line option can be checked using:

pyband -h

I'm not familiar with quantum espresso but presumably the same thing can also be done. 🤓

  • $\begingroup$ I also found a python library called PyProcar for Spinor Projection. Sadly, its crashes when used with Quantum Espresso. $\endgroup$ Jan 6, 2022 at 4:41

Non-collinear spin doesn't mean there's no "up" and "down", it means that the natural quantisation axis (which defines "up" and "down") can vary in space. In other words, at each point in space there's a local "up" direction, but that direction may change throughout space so we no longer have a global spin direction.

In order to plot the spin of each band, you need to decide what you are actually interested in. You could choose a global direction and project the spin onto that, for example project onto the Cartesian $z$-axis and plot the bands coloured (or fattened) according to $S_z$, as you probably would for a collinear spin calculation.

Perhaps a more natural method would be to use colour to map out the actual expectation value of the spin vector, $(S_x,S_y,S_z)$, e.g. as the three components of an RGB colour.

  • $\begingroup$ Thank You! Could you suggest me a way to do this for Quantum Espresso output? $\endgroup$ Jan 4, 2022 at 9:56
  • 1
    $\begingroup$ Sorry @AshiqueLal I don't know Quantum Espresso well enough to suggest a direct plotting tool. Wannier90 would do it, though, and there's a QE interface. $\endgroup$ Jan 4, 2022 at 23:07

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .