--- title: PivotPy keywords: fastai sidebar: home_sidebar summary: "A Python Processing Tool for Vasp Input/Output. A CLI is available in Powershell, see Vasp2Visual." description: "A Python Processing Tool for Vasp Input/Output. A CLI is available in Powershell, see Vasp2Visual." nb_path: "index.ipynb" ---
pivotpy
in regular terminal to quickly launch documentation any time. splot_[rgb,color,dos]_lines
and iplot_[rgb,dos]_lines
now accept another arguement query_data
which replaces elements, orbs, labels
if provided. This argument is a dictionary whose keys are replaced by labels
, last item in its values is in the form of (elements, orbs). It will be extend in future for fermi plots when you select individul bands as well.
These two are equivalent and later one is simplified with each item showing a single color/line:
plot_command(elements=[range(2),range(2)],orbs=[0,[1,2,3]],labels=['s','p'])
plot_command(query_data = {'s': (range(2),0),'p': (range(2),[1,2,3])}) # version >= 1.1.1
A new module api
is added which consists of selective functions and classes and it is enough for common user.
Now import pivotpy as pp
exports only whaterver is inside api
, access other modules separately.
Use pp.plt2text(colorful=True/False)
after matplotlib's code and your figure will appear in terminal. You need to zoom out alot to get a good view like below.
Tip: Use file matplotlib2terminal.py on github independent of this package to plot in terminal.
See GIF here:
Navigate to ipyslides or do pip install ipyslides
to create beautiful data driven presentation in Jupyter Notebook.
import os, pivotpy as pp
with pp.set_dir('E:/Research/graphene_example/ISPIN_1/bands'):
vr=pp.Vasprun(elim=[-5,5])
vr.data
import pivotpy as pp, numpy as np
import matplotlib.pyplot as plt
vr1=pp.Vasprun('E:/Research/graphene_example/ISPIN_2/bands/vasprun.xml')
vr2=pp.Vasprun('E:/Research/graphene_example/ISPIN_2/dos/vasprun.xml')
axs = pp.get_axes(ncols=3,widths=[2,1,2.2],sharey=True,wspace=0.05,figsize=(8,2.6))
elements=[0,[0],[0,1]]
orbs=[[0],[1],[2,3]]
labels=['s','$p_z$','$(p_x+p_y)$']
ti_cks=dict(ktick_inds=[0,30,60,-1],ktick_vals=['Γ','M','K','Γ'])
args_dict=dict(elements=elements,orbs=orbs,labels=labels,elim=[-20,15])
vr1.splot_bands(ax=axs[0],**ti_cks,elim=[-20,15])
vr1.splot_rgb_lines(ax=axs[2],**args_dict,**ti_cks,colorbar=True,)
vr2.splot_dos_lines(ax=axs[1],vertical=True,spin='both',include_dos='pdos',**args_dict,legend_kwargs={'ncol': 3},colormap='RGB_m')
axs[2].color_wheel(xy=(0.7,1.15),scale=0.2,labels=[l+'$^{⇅}$' for l in labels])
pp._show()
args_dict['labels'] = ['s','p_z','p_x+p_y']
fig1 = vr1.iplot_rgb_lines(**args_dict)
#pp.iplot2html(fig1) #Do inside Google Colab, fig1 inside Jupyter
from IPython.display import Markdown
Markdown("[See Interactive Plot](https://massgh.github.io/InteractiveHTMLs/iGraphene.html)")
pivotpy.sio
module or pivotpy.api.POSCAR
class for details on generating mesh and path of KPOINTS as well as using Materials Projects' API to get POSCAR right in the working folder. Below is a screenshot of interactive BZ plot. You can double click
on blue points and hit Ctrl + C
to copy the high symmetry points relative to reciprocal lattice basis vectors. pivotpy.sio.splot_bz
.
import pivotpy as pp
pp.sio.splot_bz([[1,0,0],[0,1,0],[0,0,1]],color=(1,1,1,0.2),light_from=(0.5,0,2),colormap='RGB').set_axis_off()
#pp.iplot2html(fig2) #Do inside Google Colab, fig1 inside Jupyter
from IPython.display import Markdown
Markdown("[See Interactive BZ Plot](https://massgh.github.io/InteractiveHTMLs/BZ.html)")
import matplotlib.pyplot as plt
import pivotpy as pp
plt.style.use('bmh')
vr1=pp.Vasprun('E:/Research/graphene_example/ISPIN_1/bands/vasprun.xml')
shift_kpath=vr1.data.kpath[-1] # Add last point from first export in second one.
vr2=pp.Vasprun('E:/Research/graphene_example/ISPIN_2/bands/vasprun.xml',shift_kpath=shift_kpath,try_pwsh=False)
last_k=vr2.data.kpath[-1]
axs=pp.get_axes(figsize=(5,2.6))
K_all=[*vr1.data.kpath,*vr2.data.kpath] # Merge kpath for ticks
kticks=[K_all[i] for i in [0,30,60,90,120,150,-1]]
ti_cks=dict(xticks=kticks,xt_labels=['Γ','M','K','Γ','M','K','Γ'])
vr1.splot_bands(ax=axs)
vr2.splot_bands(ax=axs,txt='Graphene(Left: ISPIN=1, Right: ISPIN=2)',ctxt='m')
axs.modify_axes(xlim=[0,last_k],ylim=[-10,10],**ti_cks)
pp._show()
import pivotpy as pp, matplotlib.pyplot as plt
plt.style.use('ggplot')
k = vr1.data.kpath
ef = vr1.data.bands.E_Fermi
evals = vr1.data.bands.evals-ef
#Let's interpolate our graph to see effect. It is useful for colored graphs.
knew,enew=pp.interpolate_data(x=k,y=evals,n=10,k=3)
plot = plt.plot(k,evals,'m',lw=5,label='real data')
plot = plt.plot(k,evals,'w',lw=1,label='interpolated',ls='dashed')
pp.s_plots.add_text(ax=plt.gca(),txts='Graphene')
pp.g_utils.ps2std(ps_command='(Get-Process)[0..4]')
%%ps/%ps
foo
by %%ps --out foo
foo = %ps powershell_command
Put below code in ipython profile's startup file (create one) "~/.ipython/profile_default/startup/powershell_magic.py"
from IPython.core.magic import register_line_cell_magic
from IPython import get_ipython
@register_line_cell_magic
def ps(line, cell=None):
if cell:
return get_ipython().run_cell_magic('powershell',line,cell)
else:
get_ipython().run_cell_magic('powershell','--out posh_output',line)
return posh_output.splitlines()
Additionally you need to add following lines in "~/.ipython/profile_default/ipython_config.py" file to make above magic work.
from traitlets.config.application import get_config
c = get_config()
c.ScriptMagics.script_magics = ['powershell']
c.ScriptMagics.script_paths = {
'powershell' : 'powershell.exe -noprofile -command -',
'pwsh': 'pwsh.exe -noprofile -command -'
}
%%ps
Get-ChildItem 'E:\Research\graphene_example\'
x = %ps (Get-ChildItem 'E:\Research\graphene_example\').Name
x