easyunfold.effective_mass#

Module for obtaining effective mass

Module Contents#

Classes#

EffectiveMass

Calculate effective mass from unfolding data

Functions#

fit_effective_mass

Fit the effective masses using either a parabolic or nonparabolic fit.

fitted_band

Return fitted effective mass curve

points_with_tol

Return the indices and values of points in an array close to the value with a tolerance

locate_kpoint_segment

Locate the labels and indices of the kpoints defining a segment

Data#

eV_to_hartree

bohr_to_m

angstrom_to_bohr

TMP_DATA

API#

easyunfold.effective_mass.eV_to_hartree#

None

easyunfold.effective_mass.bohr_to_m#

None

easyunfold.effective_mass.angstrom_to_bohr#

None

easyunfold.effective_mass.TMP_DATA#

None

easyunfold.effective_mass.fit_effective_mass(distances, energies, parabolic=True)#

Fit the effective masses using either a parabolic or nonparabolic fit.

Adapted from sumo.

Args: distances (:obj:numpy.ndarray): The x-distances between k-points in reciprocal Angstroms, normalised to the band extrema. energies (:obj:numpy.ndarray): The band eigenvalues normalised to the eigenvalue of the band extrema. parabolic (:obj:bool, optional): Use a parabolic fit of the band edges. If False then nonparabolic fitting will be attempted. Defaults to True.

Returns: float: The effective mass in units of electron rest mass, :math:m_0.

easyunfold.effective_mass.fitted_band(x: numpy.ndarray, eff_mass: float) numpy.ndarray#

Return fitted effective mass curve

easyunfold.effective_mass.points_with_tol(array, value, tol=0.0001)#

Return the indices and values of points in an array close to the value with a tolerance

class easyunfold.effective_mass.EffectiveMass(unfold: easyunfold.unfold.UnfoldKSet, intensity_tol: float = 0.1, extrema_tol: float = 0.001, degeneracy_tol: float = 0.01, parabolic: bool = True, npoints: float = 3)#

Calculate effective mass from unfolding data

Initialization

Instantiate the object

Args: unfold (UnfoldKSet): The UnfoldKSet object that holes unfolding data. intensity_tol (float): Intensity tolerance for detecting band edges. parabolic (bool): Perform parabolic fit or not. Defaults to True as non-parabolic fit is not working at the moment…

set_nocc(nocc)#
property kpoints#
property kpoints_labels#
get_band_extrema(mode: str = 'cbm', extrema_tol: float = None, degeneracy_tol: float = None, ispin=0)#

Obtain the kpoint idx of band maximum, sub indices in th set and the band indices.

The search takes two steps, first the kpoints at the band extrema is located by comparing the band energies with that recorded in supplied cbm and vbm, based on the exgtrema_tol. Afterwards, the band indices are selected at the these kpoints using degeneracy_tol.

Returns: A tuple of extrema locations including a list of kpoint indices, sub-indices within the set and the band indices at each kpoint that is within the tol set.

_get_kpoint_distances()#

Distances between the kpoints along the path in the reciprocal space. This does not take account of the breaking of the path NOTE: the reciprocal lattice vectors includes the 2pi factor, e.g. np.linalg.inv(L).T * 2 * np.pi

_get_fitting_data(kidx: int, iband: int, direction=1, ispin=0, npoints=None)#

Get fitting data for a specific combination of kpoint and band index

get_npoints(override: Union[float, None] = None)#

Get the number of points used for fitting

get_effective_masses(npoints: Union[float, None] = None, ispin=0)#

Workout the effective masses based on the unfolded band structure

_get_effective_masses(mode: str = 'cbm', ispin: int = 0, npoints: Union[None, int] = None)#

Work out the effective masses based on the unfolded band structure for CBM or VBM

easyunfold.effective_mass.locate_kpoint_segment(idxk: int, label_idx: list, label_names: list, direction: int)#

Locate the labels and indices of the kpoints defining a segment