Skip to content

Repository files navigation

差分电荷密度查看器 · Charge Density Difference Viewer

读取 VASP 的 CHGDIFF.vasp,一键显示 VESTA 风格的「纯黄 / 纯青」正负等值面, 等值面水平与配色随手可调

Release License Python PySide6 3Dmol.js Platform

差分电荷密度查看器

俯视图:左侧为稳定的 Qt 彩条,上方为六个标准视角,右侧为实时控制面板

⬇️ 直接下载 · Windows 免安装便携版

前往 Releases · Latest 下载 CHARGEDIFF_Viewer_portable_win64.zip,解压后双击 CHARGEDIFF_Viewer\CHARGEDIFF_Viewer.exe 即可运行,无需安装 Python。


✨ 功能特性

功能
🧊 VESTA 风格等值面:同一体数据上抽取正、负两个等值面
🟡🔵 纯黄 / 纯青配色(无白):默认「青 → 黄」方案,色条范围自动等于 ±等值面水平,正/负表面呈现与 VESTA 一致的纯黄 / 纯青
📂 给定目录自动读取:识别 CHGDIFF.vasp / CHGDIFF / CHGCAR / CHG,取第一个网格块
➕ 差分定义:ρ_diff = ρ(AB) − ρ(A) − ρ(B),+level = 电子积聚,−level = 电子耗散
📏 等值面水平可调:`
🅰️🅱️ 显示内容可选:正 + 负 / 仅正(积聚)/ 仅负(耗散)
🎚️ 彩条范围可自定义:默认跟随等值面水平,也可手动输入区间,左侧彩条实时同步
🌈 配色方案:青-黄(VESTA)/ 黄-青 / 蓝-白-红 / 红-白-蓝 / 彩虹 / 自定义三色
📐 正交投影:远近同大,旋转时结构大小恒定
🧭 六个标准视角:俯视 / 正视 / 右视 / 仰视 / 后视 / 左视(基于实际晶胞矢量)
🖱️ 拖动旋转、滚轮缩放(正交相机距离驱动)
👁️ 不透明度、原子样式(球棍/球体/棍棒/线框/隐藏)、原子半径、晶胞、背景色
📸 一键导出 PNG(含左侧彩条)
🌗 深色 / 浅色主题
📦 可打包便携 exe:免安装、无需 Python,拷到别的 Windows 电脑即可运行
🌐 离线可用:本地 3Dmol.js,无需联网

🖼️ 效果预览

俯视 正视(侧视)

图中为 Mo–O 体系吸附 C 后的差分电荷密度: 黄色等值面 = 电子积聚区,青色等值面 = 电子耗散区。


📂 目录结构

plot_chargediff/
├─ chargediff_viewer_gui.py   # ★ 主程序 (PySide6 窗口 + 控制面板)
├─ viewer3d.py                # ★ 3Dmol.js 查看器 (正/负等值面 / 正交投影 / 六视角)
├─ vasp_io.py                 # ★ VASP 解析 / 网格降采样 / cube 几何 / 视角四元数
├─ ui_kit.py                  # ★ iOS 风格 Qt 控件与主题
├─ 3dmol/3Dmol-min.js         # ★ 本地 3Dmol.js (离线)
├─ assets/app.ico             # 应用图标
├─ docs/                      # README 配图
├─ CHARGEDIFF_Viewer.spec     # PyInstaller 打包配置
├─ build_exe.bat              # 双击打包便携程序包
├─ install_deps.bat           # 双击安装依赖
├─ PORTABLE_README.txt        # 便携包使用说明
├─ selftest_render.py         # 可选: 渲染自检 (统计等值面并导出 PNG)
├─ requirements.txt
├─ run_viewer.bat             # 双击启动 (无控制台)
└─ run_viewer_debug.bat       # 双击启动 (保留控制台, 看报错)

🚀 快速开始

1. 安装依赖

python -m pip install -r requirements.txt

只依赖 numpy 与 PySide6(含 QtWebEngine)。

2. 运行

:: 双击 run_viewer.bat
:: 或命令行 (可传入数据目录)
python chargediff_viewer_gui.py path\to\vasp\dir

启动后自动读取目录中的差分电荷密度文件。

3. 使用流程

  1. 数据文件:「数据目录」指向含 CHGDIFF.vasp 的目录 → 自动识别 → 点「重新载入」(启动时已自动载入)。
  2. 等值面:拖动「等值面水平」(e/ų,程序按数据自动建议); 选择「显示内容」(正 + 负 / 仅正 / 仅负)。
  3. 颜色 / 图例:默认「青-黄 (VESTA)」配色,且「范围=等值面」开启—— 色条范围自动等于 ±等值面水平,正/负表面呈现近似纯黄 / 纯青(与 VESTA 一致); 也可选择蓝-白-红、彩虹等,或关闭「按数值着色」改用固定纯色。
  4. 视角:视图上方 6 个按钮;也可拖动旋转、滚轮缩放。
  5. 显示选项:不透明度、原子样式、原子半径、晶胞、背景色。
  6. 右上角「导出 PNG」(含彩条)。

提示:单位为 e/ų。VASP 的 CHGCAR 类文件数值为 ρ·V_cell, 程序会自动除以晶胞体积得到 e/ų。


🔬 实现要点

正 / 负两个等值面(对齐 VESTA 差分电荷图)

// 同一体数据抽取 +level 与 −level 两个等值面
sh_pos = viewer.addIsosurface(diffVD, {isoval: +level, opacity: op});
sh_neg = viewer.addIsosurface(diffVD, {isoval: -level, opacity: op});
// 用 ρ_diff 数值给两个面着色(青 -> 黄,无白)
sh_pos.updateStyle({voldata: diffVD, volscheme: scheme(cfg)});
sh_neg.updateStyle({voldata: diffVD, volscheme: scheme(cfg)});
  • VESTA 风格纯色:VESTA 的差分电荷图是纯黄(正)/ 纯青(负),中间没有白色。 程序默认使用「青 → 黄」双色方案(#00C8D7 → #FFE100),并让色条范围 自动等于 ±等值面水平(默认开启「范围=等值面」)。由于 MarchingCube 抽取的等值面顶点数值恰好等于 ±level,正好落在色条两端,于是正/负表面 呈现近似纯黄 / 纯青(无渐变、无白)。
  • 若想看到数值渐变(如靠近界面处颜色不同),关闭「范围=等值面」并把色条范围 调大,或改用蓝-白-红 / 彩虹等方案。
  • 「按数值着色」关闭时,改传 color 参数使用固定纯色(默认 正黄 / 负青)。

⚠️ 网格读取方向(容易弄反)

  • VASP 以 x 最快 / z 最慢写出;3Dmol 的 VolumeData 与 MarchingCube 以 x 最慢 / z 最快索引。因此用 reshape((nx,ny,nz), order='F') 得到 axes=(x,y,z) 的物理数组,否则等值面方向就错了。
  • 自适应降采样:网格点数不超过 70 万(大网格自动 ×2/×3)。
  • 单位:CHGCAR 类数值为 ρ·V_cell,除以晶胞体积得到 e/ų。

正交投影 + 六视角

  • viewer.setProjection('orthographic');3Dmol 的 show() 会按相机距离重算正交视锥, 因此用相机距离驱动缩放:dist = halfH / (zoom·tan fov),滚轮改 ORTHO_ZOOM。
  • 逐视角贴合:把原子 + 晶胞角点用当前四元数旋转到相机系,取投影后 x/y 半宽, 据此设置正交视锥 —— 俯视时铺满画面,侧视时完整装下高真空晶胞。
  • 六视角四元数由实际晶胞矢量计算,与 VESTA 惯例一致。

彩条 colorbar(稳定不闪)

彩条是独立的 Qt 控件(位于 3D 视图左侧,与网页层叠无关),切换视角时绝不闪烁。 颜色由页面用当前配色方案 sampleColors() 采样后回传,保证与表面完全一致; 「导出 PNG」时用 QPainter 把彩条合成到图上。


🧪 渲染自检(可选)

python selftest_render.py test

载入数据 → 等待 3D 视图就绪 → 统计正/负等值面数量 → 导出 _selftest_chargediff.png,输出 SELFTEST OK。


📦 打包成便携程序包

双击 build_exe.bat(默认生成便携文件夹,推荐):

dist\CHARGEDIFF_Viewer\
  CHARGEDIFF_Viewer.exe   <- 双击即用
  使用说明.txt
  _internal\              <- 依赖 (Qt / QtWebEngine / 3dmol / 图标)

把整个 CHARGEDIFF_Viewer 文件夹拷到任何 Windows 10/11 机器上双击即可运行, 免安装、无需 Python。

  • 用户数据:把含 CHGDIFF.vasp 的目录放到 exe 旁 test\ 或 data\,程序自动读取。
  • 单文件模式(不推荐):set CHG_ONEFILE=1 后再运行 build_exe.bat。

📄 许可

MIT License。3Dmol.js 遵循其自身许可(BSD-3-Clause)。

About

读取 VASP 差分电荷密度 (CHGDIFF.vasp) 的桌面查看器:VESTA 风格纯黄/纯青正负等值面,正交投影 + 六视角 + 彩条 + PNG 导出,可打包免安装 exe。

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages