pymatgen:从投影DOS画价带XPS
用实际Fe投影DOS做随库截面加权,显式处理费米能参考、占据、均匀网格与高斯展宽。
阅读本篇目录
价带XPS的简化模型可以从元素/轨道投影DOS出发,按光电离截面加权。本例复用鸢算科技集群实际Fe自旋分辨VASP DOS,用pymatgen生成价带谱形。
这是价带DOS截面模型,不是芯能级结合能计算;也没有包含实验几何、完整跃迁矩阵元、寿命和仪器响应的全部效应。
unzip pymatgen-spectra-tools-wave719-*.zip
cd pymatgen-spectra-tools
module load pymatgen/2026.9.24
bash results.sh
bash plot.sh
环境为pymatgen2026.9.24、Python3.11、NumPy/SciPy和Matplotlib。run.sh重新后处理到新建的analysis,不会运行DFT或FEFF;参考数据在reference-data,绘图输出到figures。已有分析目录时,保留它并在另一份解压目录操作。

1. 读取实际VASP投影DOS#
包内inputs/Fe-DOS-vasprun.xml保存自有计算输出。换自己的结果时,需要有元素和轨道分辨的投影DOS,例如按适用版本设置LORBIT=11并完成DOS计算。
python - <<'PY'
from pymatgen.io.vasp.outputs import Vasprun
from pymatgen.analysis.xps import XPS
v = Vasprun('inputs/Fe-DOS-vasprun.xml',
parse_projected_eigen=False, parse_potcar_file=False)
dos = v.complete_dos
spectrum = XPS.from_dos(dos)
print('电子收敛:', v.converged_electronic)
print('EF / eV:', dos.efermi)
print('网格数:', len(spectrum.x))
print('原生横坐标前5项:', spectrum.x[:5])
PY
本例EF=5.39505673eV。原生from_dos把各元素/轨道DOS乘随库截面,并对总强度做峰值归一化。本例独立按每个原子、轨道和自旋通道求和核对了该结果。
2. 别直接把原生横坐标当相对EF的结合能#
这个版本的原生横坐标是−E,E仍为VASP输出的能量参考;它不会自动加上EF。因此常用的相对费米能结合能是:
E_binding = EF−E = spectrum.x+dos.efermi。
同样,from_dos会使用所给DOS范围,不会自动去掉空态。若要这里的零温占据模型,应在展宽前对E>EF的部分置0,再归一化占据价带。
3. 均匀网格、占据与展宽的终端操作#
python - <<'PY'
import numpy as np
from pymatgen.io.vasp.outputs import Vasprun
from pymatgen.analysis.xps import XPS
v = Vasprun('inputs/Fe-DOS-vasprun.xml',
parse_projected_eigen=False, parse_potcar_file=False)
dos = v.complete_dos
native = XPS.from_dos(dos)
binding = native.x + dos.efermi
order = np.argsort(binding)
x = np.linspace(binding.min(), binding.max(), len(binding))
y = np.interp(x, binding[order], native.y[order])
y = np.where(x >= 0, y, 0)
y /= y.max()
spectrum = XPS(x, y)
spectrum.smear(sigma=0.3)
np.savetxt('my-valence-xps.csv', np.column_stack([x, spectrum.y]),
delimiter=',', header='binding_energy_eV,relative_intensity', comments='')
PY
VASP打印网格可能受舍入影响,并非数学上严格等间距。原生展宽按均匀网格卷积,因此这里先明确线性插值到相同边界、相同点数的均匀网格。0.3eV是高斯标准差σ,不是半高全宽;高斯FWHM约为2.355σ。
展宽后EF附近向负结合能方向出现尾部,是卷积结果,不表示展宽前加入了空态DOS。绘图常把结合能轴从大到小显示。
4. 查看实际数据与截面#
cat reference-data/Fe-XPS-cross-section-weights.csv
head -n 8 reference-data/Fe-valence-XPS.csv
bash plot.sh
本例使用当前库提供的截面权重,不是可随意设定光子能量的完整实验模拟器。换元素时检查轨道是否有对应权重,缺少权重不能静默解释成不存在该轨道。
原始强度先做占据区峰值归一化,再展宽;CSV保留展宽前后两列。比较不同样品绝对强度时,还需要额外对齐截面、粒子数、仪器条件和归一化方案。
接口见pymatgen XPS,截面模型参考Galore原始工作。