我试图用pymatgen来绘制DOS (状态密度),但我无法使它工作。第一次在python中遇到self和class函数,所以我感到很困惑。
这个链接解释了具有我需要的函数的包(我需要使用类CompleteDos的get_site_t2g_eg_resolved_dos(site)部分)。这个链接有这些函数的源代码。看看网上找到的示例,我做了这段代码
from pymatgen.electronic_structure.dos import CompleteDos
from pymatgen.electronic_structure.plotter import DosPlotter
from pymatgen.electronic_structure.core import Spin, Orbital
data = CompleteDos.get_site_t2g_eg_resolved_dos
plot = DosPlotter(data)
plot.get_plot(-5,5).show()该代码返回一个错误,我确信这是因为函数get_site_t2g_eg_resolved_dos没有正确使用。
即使您不知道pymatgen的链接,如果我认为您可以帮助我在正确的方式使用这些功能,我会非常感激。提前感谢!
编辑:我现在正在尝试的代码是什么样子的,请离开,因为我不确定我是否做得对。
from pymatgen.electronic_structure.dos import CompleteDos
from pymatgen.electronic_structure.plotter import DosPlotter
from pymatgen.electronic_structure.core import Spin, Orbital
from pymatgen.io.vasp.outputs import Vasprun, Procar
from pymatgen.core.ion import Ion
vasprun = Vasprun("./vasprun.xml")
pdos = vasprun.pdos
tdos = vasprun.tdos
efermi = vasprun.efermi
energy = vasprun.eigenvalues
structure = vasprun.structures
a = CompleteDos(structure, tdos, pdos)
data = a.get_site_t2g_eg_resolved_dos(structure)
plot = DosPlotter(data)
plot.get_plot().show()输出错误:
Traceback (most recent call last):
File "t2g2g.py", line 21, in <module>
data= a.get_site_t2g_eg_resolved_dos(structure)
File "/usr/local/lib/python2.7/dist-packages/pymatgen/electronic_structure/dos.py", line 351, in get_site_t2g_eg_resolved_dos
for s, atom_dos in self.pdos.items():
AttributeError: 'list' object has no attribute 'items'发布于 2017-07-08 12:58:38
如果你还没有放弃这里是解决办法
from pymatgen.electronic_structure.dos import CompleteDos
from pymatgen.electronic_structure.plotter import DosPlotter
from pymatgen.electronic_structure.core import Spin, Orbital
from pymatgen.io.vasp.outputs import Vasprun, Procar
from pymatgen.core.ion import Ion
vasprun = Vasprun("./vasprun.xml")
pdos = vasprun.pdos
tdos = vasprun.tdos
efermi = vasprun.efermi
energy = vasprun.eigenvalues
structure = vasprun.structures
data = vasprun.complete_dos.get_site_t2g_eg_resolved_dos(vasprun.structures[0][0])
plot = DosPlotter()
plot.add_dos("t2g",data['t2g'])
plot.show()您需要指定站点和模式(t2g/例如)才能进行绘图。
https://stackoverflow.com/questions/42377164
复制相似问题