PDOS

sisl.physics.electron.PDOS(E, eig, state, S=None, distribution='gaussian', spin=None)[source]

Calculate the projected density of states (PDOS) for a set of energies, E, with a distribution function

The PDOS(E) is calculated as:

PDOSi(E)=αψα,i[S|ψα]iD(Eϵα)

where D(ΔE) is the distribution function used. Note that the distribution function used may be a user-defined function. Alternatively a distribution function may be acquired from Distribution functions.

In case of an orthogonal basis set S is equal to the identity matrix. Note that DOS is the sum of the orbital projected DOS:

DOS(E)=iPDOSi(E)

For non-colinear calculations (this includes spin-orbit calculations) the PDOS is additionally separated into 4 components (in this order):

  • Total projected DOS

  • Projected spin magnetic moment along x direction

  • Projected spin magnetic moment along y direction

  • Projected spin magnetic moment along z direction

These are calculated using the Pauli matrices σx, σy and σz:

PDOSiσ(E)=αψα,iσzσz[S|ψα]iD(Eϵα)PDOSix(E)=αψα,iσx[S|ψα]iD(Eϵα)PDOSiy(E)=αψα,iσy[S|ψα]iD(Eϵα)PDOSiz(E)=αψα,iσz[S|ψα]iD(Eϵα)

Note that the total PDOS may be calculated using σγσγ where γ may be either of x, y or z.

Parameters:
  • E (ndarray) – energies to calculate the projected-DOS from

  • eig (ndarray) – eigenvalues

  • state (ndarray) – eigenvectors

  • S (ndarray, optional) – overlap matrix used in the ψ|S|ψ calculation. If None the identity matrix is assumed. For non-colinear calculations this matrix may be halve the size of len(state[0, :]) to trigger the non-colinear calculation of PDOS.

  • distribution (Literal['gaussian', 'lorentzian', 'fermi', 'bose-einstein', 'cold', 'step-function', 'heaviside'] | ~typing.Callable[[~collections.abc.Buffer | ~numpy._typing._array_like._SupportsArray[~numpy.dtype[~typing.Any]] | ~numpy._typing._nested_sequence._NestedSequence[~numpy._typing._array_like._SupportsArray[~numpy.dtype[~typing.Any]]] | bool | int | float | complex | str | bytes | ~numpy._typing._nested_sequence._NestedSequence[bool | int | float | complex | str | bytes]], ~numpy.ndarray]) – a function that accepts Eϵ as argument and calculates the distribution function.

  • spin (str or Spin, optional) – the spin configuration. This is generally only needed when the eigenvectors correspond to a non-colinear calculation.

See also

Distribution functions

a selected set of implemented distribution functions

DOS

total DOS (same as summing over orbitals)

COP

calculate COOP or COHP curves

spin_moment

spin moment

Geometry.apply

allows one to convert orbital data, to atomic data

Returns:

projected DOS calculated at energies, has dimension (1, state.shape[1], len(E)). For non-colinear calculations it will be (4, state.shape[1] // 2, len(E)), ordered as indicated in the above list. For Nambu calculations it will be (8, state.shape[1] // 4, len(E)).

Return type:

numpy.ndarray

Parameters:

distribution (Literal['gaussian', 'lorentzian', 'fermi', 'bose-einstein', 'cold', 'step-function', 'heaviside'] | ~typing.Callable[[~collections.abc.Buffer | ~numpy._typing._array_like._SupportsArray[~numpy.dtype[~typing.Any]] | ~numpy._typing._nested_sequence._NestedSequence[~numpy._typing._array_like._SupportsArray[~numpy.dtype[~typing.Any]]] | bool | int | float | complex | str | bytes | ~numpy._typing._nested_sequence._NestedSequence[bool | int | float | complex | str | bytes]], ~numpy.ndarray])