Source code for masci_tools.vis.kkr_plot_FS_qdos

###############################################################################
# Copyright (c), Forschungszentrum Jülich GmbH, IAS-1/PGI-1, Germany.         #
#                All rights reserved.                                         #
# This file is part of the Masci-tools package.                               #
# (Material science tools)                                                    #
#                                                                             #
# The code is hosted on GitHub at https://github.com/judftteam/masci-tools.   #
# For further information on the license, see the LICENSE.txt file.           #
# For further information please visit http://judft.de/.                      #
#                                                                             #
###############################################################################
"""
Tool to plot a Fermi surface calculated with the qdos mode of KKR
"""
from matplotlib import cm


[docs]def FSqdos2D( # pylint: disable=inconsistent-return-statements p0='./', s=20, reload_data=False, clrbar=True, atoms=None, ax=None, nosave=False, noalat=False, cmap=cm.jet, noplot=False, return_data=False, pclrmesh=False, logscale=True, ef=None): """ plotting routine for dos files """ # import dependencies import numpy as np import matplotlib.pyplot as plt from os import listdir from os.path import isdir from subprocess import check_output # deal with input of file handle instead of path (see plot_kkr of aiida_kkr) if not isinstance(p0, str): pathname_with_file = p0.name p0 = pathname_with_file.replace('/qdos.01.1.dat', '') #dos.atom1 # read in data if p0[-1] != '/': p0 += '/' # read EF if not given as input if ef is None: if 'potential' in listdir(p0): with open(p0 + 'potential', encoding='utf-8') as potfile: ef = float(potfile.readlines()[3].split()[1]) else: ef = 0 if noalat: a0 = 1. alat = 1. else: alat = float( check_output('grep ALATBASIS ' + p0 + 'inputcard', shell=True).decode('utf-8').split('=')[1].split()[0]) a0 = 2 * np.pi / alat / 0.52918 if reload_data or 'saved_data_qdos.npy' not in np.sort(listdir(p0)): first = True print('reading qdos') j = 0 for i in np.sort(listdir(p0)): if 'qdos.' in i[:6] and not isdir(p0 + i): j += 1 iatom = int(i.replace('qdos.', '').split('.')[0]) if atoms is None or iatom in atoms: tmp = np.loadtxt(p0 + i) tmp[:, 2:5] = tmp[:, 2:5] * a0 print(i, iatom) if first: d = tmp first = False else: d[:, 5:] += tmp[:, 5:] if not nosave: np.save(p0 + 'saved_data_qdos', d) else: d = np.load(p0 + 'saved_data_qdos.npy') xlab = r'kx' ylab = r'ky' if a0 != 1.: xlab = r'$k_x (\AA^{-1})$' ylab = r'$k_y (\AA^{-1})$' # plot dos data = np.abs(np.sum(d[:, 5:], axis=1)) if logscale: data = np.log(data) x, y = d[:, 2], d[:, 3] if not noplot: if ax is None: if pclrmesh: lx = len(set(x)) ly = len(set(y)) x = np.linspace(x.min(), x.max(), lx) y = np.linspace(y.min(), y.max(), ly) plt.pcolormesh(x, y, data.reshape(lx, ly).T, cmap=cmap) else: plt.scatter(x, y, c=data, s=s, lw=0, cmap=cmap) if clrbar: plt.colorbar() else: ax.scatter(x, y, c=data, lw=0, cmap=cmap) # set axis labels if ax is None: plt.xlabel(xlab) plt.ylabel(ylab) plt.axis('equal') if return_data: return x, y, data