XRD 物相自动识别助手

XRD 物相自动识别助手

Automated XRD Phase Identification

填图谱和元素,剩下的交给脚本:自动完成载图、寻峰、定相检索、逐行取线、逐峰归属,最后产出一份带 PDF 卡片号的真实报告。

它能做什么

人工在 Jade 里找相,靠的是肉眼判断和记忆:逐行切换候选,判断并记住每个杂峰的位置和数量——杂峰一多,过程极其繁琐,还容易漏。脚本用机器记忆和比对来规避这个麻烦:位置对齐到 0.15°,相对高度逐峰核对,精准度高于肉眼。

双链自动切换

文本链优先(峰表/定相列表,事实准确、带 PDF 卡片号);跑不通自动换像素链(屏幕取线 + 底部刻度标定)。

主相判定

先做元素一致性检查——元素超出用户输入范围的行直接剔除(化学上不可能),再看峰线吻合度。

杂相判定

候选线与杂峰逐条对位:位置容差 0.15°,相对高度比例用 MAD 度量,要求至少解释 2 个峰且零假线。

带 PDF 卡片号

报告给出主相、杂相候选的 PDF 卡片号与判定明细,可直接对照 ICDD 数据库核查。

环境自检

一键检查 Jade 版本、子相库指纹(ICSD-所有 / 187989 相)、提权状态等前置条件,问题在开跑前就暴露。

工作原理

脚本自动完成从载图到出报告的整个定相流程,全程无需手动操作 Jade。两条实现路线,任一条中途失败自动换链到另一条;两条链共用同一套判据,结论按同一格式出报告。

文本链 —— 使用 Jade 的宏作业与导出数据

结果直接来自软件自身的峰表与定相列表,更精确。

🤖 自动会话整理
复用/重启 Jade、清场
🤖 自动宏作业 542
载图 + 寻峰 + 定相检索
🤖 自动观测峰表
导出并校验峰数/峰位
🤖 自动元素限定检索
圈定 ICSD 候选池
🤖 自动逐行取线
读回行号核对身份
🤖 自动认主相行
解释最多 + 杂峰最少
🤖 自动逐峰归属
杂峰 → 候选对位判定

像素链 —— 截屏识别谱图线条与坐标

不依赖宏作业,环境兼容性更好;青线位置按窗口当场标定。

🤖 自动主窗 S/M
打开定相列表
🤖 自动屏幕取线
截图 + 青线检测
🤖 自动底部刻度标定
2θ = a·x + b
🤖 自动逐峰归属
复用同一套判据

人只需要提供:图谱文件 + 元素(扫描范围尽量填)。其余全部自动。

每一步留证据:截图、行日志、导出的峰表 XML——「没取到/没评估」的部分,报告里明说,不假装做过。

效果展示

一次真实运行(样品 H.raw,元素 Ca La Ta O):脚本在 Jade 里自动完成全部操作,人只需要在开始前填两样东西。

Jade 主窗:载入图谱并完成寻峰
载图 + 寻峰:脚本自动完成宏作业 542
元素限定检索窗口
元素限定检索:候选池按样品元素圈定
逐行取线:候选相的青线叠加在谱图上
逐行取线:读回行号核对身份,青线按窗当场标定
分析完成后的结果窗口
运行完成:主相与杂相结论直接给出
生成的报告文件
报告落盘:Markdown + JSON 双格式,每条结论带来源

实样报告(样品 H)

主相:Ca2La(TaO6) PDF 番号 97-002-0916 峰线数 122

相名:Dicalcium Lanthanum Tantalate

观测峰被主相解释未解释小峰杂峰假设候选总数已评未评估
4821270330

杂相候选 3 行全部 rejected(命中 0 / 假线 1–17 条)⇒ 结论:单相,没有杂相——这是合法结论,不是失败。

未解释峰 27 个(多为 <5% 的弱峰,属背景/装样伪峰);完整报告见仓库 docs/样例报告_H.md。

快速上手

环境要求:Windows + Jade 9(MDI 商业软件)+ Python 3。运行时需管理员权限(非提权进程读不了 Jade 的控件,会弹一次 UAC,允许即可)。

① 下载解压

从下方「获取」版块下载打包 zip 并解压。

② 填图谱和元素

双击 启动统一入口.bat 打开 GUI,选择 .raw 图谱,填元素(如 Ca Gd Ta O),扫描范围尽量填真实值。

③ 等报告

点「开始分析」后不要碰鼠标键盘——脚本正在操作 Jade,人工输入会打断它。跑完后窗口直接给出主相、杂相与报告路径。

python spike\run_unified.py --raw H.raw --elements Ca La Ta O --range 15 70

命令行与 GUI 功能完全一致;只跑某一条链用 --primary pixel,关掉自动换链用 --no-fallback。完整用法见仓库使用手册。

判据与可信度

每条判据都写在代码里、都有单测锁定,且经过真实样品验证。完整口径见仓库 README。

442项单测
0.15°位置容差
4%杂峰阈值
187989相指纹校验

主相怎么定

先做元素一致性检查:某行解析出的元素若超出用户输入的范围(样品只有 Ca Gd Ta O 却出现 Ca₂SmSbO₆),这一行直接剔除——化学上不可能。再看峰线吻合度,取解释最多观测峰的那行。

杂相怎么定

杂峰 = 主相没解释、高度 ≥ 4% 最高峰的观测峰。命中 = 位置对得上(|Δ2θ| ≤ 0.15°)且相对高度比例一致(MAD 度量)。门槛:至少解释 2 个峰 + 假线 0 条。

⚠ 元素未知:放行但标注

相名解析不出元素 = 既证明不了它可能、也证明不了它不可能。程序不拿不可靠的输入去否决候选,放行但明确标注「少了元素这道保险,需人工多看一眼」——其余门槛不放松。

已知边界(诚实声明)

候选池由 Jade 决定、只评前 N 行、每行约 15 秒、元素限定窗的青线比主窗薄……任何「没取到/没评估」的部分都在报告里显式写出,不假装做过。

完整判据口径 →

常见问题

跑不通先看这里;还不行就到 GitHub 提 Issues,带上 _row_*.txt 行日志。

候选池 0 条?

多半是复用了上一轮已开的 ICDD 窗口、继承了子相库状态(如只剩某个库)。重启 Jade 或先清场再跑;报告里会写「命中列表条目数为 0」。

提示「找不到图谱主窗」?

Jade 会把主窗停到屏幕外。程序会自动搬回;若失败,手动把 Jade 窗口拖回屏幕内再跑。

寻峰表 0 峰?

寻峰列表是「当前图谱」的内存状态,未寻峰就导出会得到 0 峰。本程序按「载图 → 寻峰 → 导出」顺序做;若仍为 0,看 _row_*.txt。

逐行取线大量失败?

程序每换一行都会读回行号核对身份,核对不过就不会用错行继续。看每行日志 _row_<样品>_<k>.txt。

报告里出现「未评估」?

候选池大于本次评估行数。加大 --max-rows(0 = 全池,一个不漏但很慢)。

为什么必须提权?

UIPI 会把跨完整性级别的窗口消息(WM_COMMAND、LVM_*)拦掉——非提权进程既指挥不动 Jade 也读不了它的控件。提权是 Windows 的硬性要求,不是脚本的偏好。

获取与贡献

代码以 GPL-3.0 开源。运行需要本机安装 Jade 9(MDI 商业软件):脚本免费,Jade 许可证需自行解决。

📦 下载

打包好的「使用版」zip(含脚本、判据模块与启动入口)。

下载最新版

📂 源码

查看代码、判据口径与完整使用手册。

⭐ Star 🍴 Fork

🐛 反馈

报问题或提建议:GitHub Issues(带上行日志),或邮件联系。

提交 Issue