它能做什么
人工在 Jade 里找相,靠的是肉眼判断和记忆:逐行切换候选,判断并记住每个杂峰的位置和数量——杂峰一多,过程极其繁琐,还容易漏。脚本用机器记忆和比对来规避这个麻烦:位置对齐到 0.15°,相对高度逐峰核对,精准度高于肉眼。
双链自动切换
文本链优先(峰表/定相列表,事实准确、带 PDF 卡片号);跑不通自动换像素链(屏幕取线 + 底部刻度标定)。
主相判定
先做元素一致性检查——元素超出用户输入范围的行直接剔除(化学上不可能),再看峰线吻合度。
杂相判定
候选线与杂峰逐条对位:位置容差 0.15°,相对高度比例用 MAD 度量,要求至少解释 2 个峰且零假线。
带 PDF 卡片号
报告给出主相、杂相候选的 PDF 卡片号与判定明细,可直接对照 ICDD 数据库核查。
环境自检
一键检查 Jade 版本、子相库指纹(ICSD-所有 / 187989 相)、提权状态等前置条件,问题在开跑前就暴露。
工作原理
脚本自动完成从载图到出报告的整个定相流程,全程无需手动操作 Jade。两条实现路线,任一条中途失败自动换链到另一条;两条链共用同一套判据,结论按同一格式出报告。
文本链 —— 使用 Jade 的宏作业与导出数据
结果直接来自软件自身的峰表与定相列表,更精确。
复用/重启 Jade、清场
载图 + 寻峰 + 定相检索
导出并校验峰数/峰位
圈定 ICSD 候选池
读回行号核对身份
解释最多 + 杂峰最少
杂峰 → 候选对位判定
像素链 —— 截屏识别谱图线条与坐标
不依赖宏作业,环境兼容性更好;青线位置按窗口当场标定。
打开定相列表
截图 + 青线检测
2θ = a·x + b
复用同一套判据
人只需要提供:图谱文件 + 元素(扫描范围尽量填)。其余全部自动。
每一步留证据:截图、行日志、导出的峰表 XML——「没取到/没评估」的部分,报告里明说,不假装做过。
效果展示
一次真实运行(样品 H.raw,元素 Ca La Ta O):脚本在 Jade 里自动完成全部操作,人只需要在开始前填两样东西。
实样报告(样品 H)
主相:Ca2La(TaO6) PDF 番号 97-002-0916 峰线数 122
相名:Dicalcium Lanthanum Tantalate
| 观测峰 | 被主相解释 | 未解释小峰 | 杂峰假设 | 候选总数 | 已评 | 未评估 |
|---|---|---|---|---|---|---|
| 48 | 21 | 27 | 0 | 3 | 3 | 0 |
杂相候选 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。
主相怎么定
先做元素一致性检查:某行解析出的元素若超出用户输入的范围(样品只有 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 的硬性要求,不是脚本的偏好。