14
« on: August 8, 2013, 10:31 »
Respected ATK users,
In calculating the normal band structure I know that the output is calibrated with respect to the Fermi level. Is it also true for complex band structure (CBS). The default figure for CBS which I found is not calibrated with respect to Fermi level. Will it be wise to calibrate CBS w.r.t. to Fermi level? If yes, then how can I do this calibration?
The script I'm using is as below -
from NanoLanguage import *
import matplotlib.pyplot as plt
import math
# Read the complex bandstructure object from the NC file
cbs = nlread('/home/swapanchem/mehboob/cdcomplex-complexbandk5-121-k55-10001points-e-0-5.nc', object_id="gID003")[0]
energies = cbs.energies().inUnitsOf(eV)
k_real, k_complex = cbs.evaluate()
ax = plt.axes()
cmap="Spectral"
# First plot the real bands
kvr = numpy.array([])
e = numpy.array([])
for (j, energy) in enumerate(energies):
k = k_real[j]*cbs.layerSeparation()/math.pi
if len(k)>0:
e = numpy.append(e,[energy,]*len(k))
kvr = numpy.append(kvr,k)
# Plot
ax.scatter(kvr, e,
c=numpy.abs(kvr),
cmap=cmap, marker='o', linewidths=0, s=10)
# Next plot the complex bands
kvr = numpy.array([])
kvi = numpy.array([])
e = numpy.array([])
for (j, energy) in enumerate(energies):
if len(k_complex[j])>0:
kr = [numpy.abs(x.real) for x in k_complex[j]]
ki = [numpy.abs(x.imag) for x in k_complex[j]]
e = numpy.append(e,[energy,]*len(kr))
kvr = numpy.append(kvr,kr)
kvi = numpy.append(kvi,ki)
# Plot with color depending on the imaginary part (corresponding to real k-points)
sc = ax.scatter(-kvi,e,
c=kvr,
cmap=cmap, marker='o', linewidths=0, s=10)
# Put on labels and decorations
ax.axvline(0,color='b')
ax.grid(True, which='major')
ax.set_xlim(-1, 1)
ax.set_ylim(-3.5, -1.0)
plt.xticks([-1,-0.75,-0.50,-0.25])
plt.yticks([-3.5,-3.0,-2.5,-2.0,-1.5,-1.0])
ax.annotate('$\kappa$ (1/Ang)', xy=(0.25,-0.07), xycoords="axes fraction", ha="center")
ax.annotate('$kL / \pi$', xy=(0.75,-0.07), xycoords="axes fraction", ha="center")
ax.set_ylabel('Energy / eV')
# Add a colorbar
fig = plt.gcf()
x1, x2, y1, y2 = 0., 1, ax.get_ylim()[0], ax.get_ylim()[0]+1
trans = ax.transData + fig.transFigure.inverted()
ax_x1, ax_y1 = trans.transform_point([x1, y1])
ax_x2, ax_y2 = trans.transform_point([x2, y2])
ax_dx, ax_dy = ax_x2 - ax_x1, ax_y2 - ax_y1
cmap_axes = plt.axes([ax_x1, ax_y1, ax_dx, ax_dy])
a = numpy.outer(numpy.arange(0,1,0.01),numpy.ones(10)).transpose()
cmap_plt = plt.imshow(a,aspect='auto',cmap=plt.get_cmap(cmap),origin=[0,0])
plt.show()
With best regards,
Mehboob