附录 E · E.1

E.1 软件环境、数据格式与可复现记录

Software Environments, Data Formats and Reproducible Records
本页范围与学习目标
区分处理、模拟、CASE与AI路线,记录已实测的固定环境、原始数据与处理参数,并给出可下载校验清单及明确许可边界。
先读图解和核心解释;需要细节时再展开。
先看图 · 阅读入口

复现记录先固定数据,再固定计算条件

能否复现要由保存的输入、环境和核对记录共同证明。

复现记录先固定数据,再固定计算条件 步骤 1 原始输入 文件、参数与来源 记录校验值和许可 步骤 2 计算环境 软件版本与具体步骤 保存实际运行日志 步骤 3 结果核对 期望输出和差异 明确哪些系统真正运行 复现记录先固定数据,再固定计算条件 步骤 1 原始输入 文件、参数与来源 记录校验值和许可 步骤 2 计算环境 软件版本与具体步骤 保存实际运行日志 步骤 3 结果核对 期望输出和差异 明确哪些系统真正运行
图 E.1-1 本页概念关系图。箭头表示本页采用的检查顺序。

读图时保留这项条件:示例跑通、完整模型推理和训练复现属于不同验证范围。

E.1.1 先按任务选路线,再选择软件

一套能打开谱图的软件环境,不等于完成了处理、模拟、候选生成和评价四项任务。处理从 FID 与采集参数得到谱;模拟从指定自旋参数得到响应;CASE 将分子式与连接约束转成候选;AI 则依具体模型进行预测、检索或生成。复现前先写出输入、输出及成功标准,避免把一个步骤的成功误称为整个结构解析流程已通过。

展开说明与推导

轻量路线适合先检验数据与方法。本书已有小型可下载练习,读者可以在固定环境中处理一份真实存档 FID、重算教学自旋模型,或用标准库检查枚举与评价算术。进阶路线再加入复杂脉冲、自旋动力学、完整 CASE 或大规模模型。是否采用进阶工具应由待解决的问题决定,并为依赖、资源与验证留出记录。

表 E.1-1 处理、模拟、CASE 与 AI 的两条路线及本轮状态;核对日期 2026-10-11
任务轻量起点进阶工具与条件本轮实际状态
处理与人工归属nmrglue 练习;浏览器可查 NMRium 文档多维数据、厂商版本与保存格式逐项核验nmrglue 处理指定 BMRB FID;未运行 NMRium
自旋与线形模拟nmrsim 两自旋及限定交换例Spinach 等复杂动力学;依固定发行版核对 MATLAB 依赖指定 nmrsim 模型已运行;未安装或运行 Spinach
CASE 与约束枚举本书有限候选脚本Sherlock 等完整服务、知识库与约束接口教学脚本已运行;Sherlock 仅核查来源与任务
AI 结构解析与评价先审输入表示与基准划分,再算演示指标NMR-Solver 等代码、权重、检索库;核对资源与先验模型文献与公开入口已核对;没有完整训练或推理复现
展开说明与推导

NMRium 官方文档说明托管应用可用公共数据测试及非商业使用;这与开源组件仓库的 MIT 许可是不同层面。Spinach 当前开发仓库列出的 MATLAB 与工具箱要求,也不能直接套给所有历史版本。读者应固定实际采用的发行版,再读该版本的安装说明,而不是把不同年代的依赖拼成一份清单。

图 E.1-2 从任务定义到软件路线处理FID + 参数 → 谱、积分与处理记录模拟自旋参数 + 模型 → 预测响应CASE分子式 + 约束 → 有限候选与冲突AI 评价固定输入与划分 → 排名、覆盖及误差
图 E.1-2 原创任务路线图。每一行有自己的核验对象,模型名称或软件能启动不自动满足该行的全部成功标准。

E.1.2 固定环境:记录实际版本,而非“最新版”

本书指定 Python 练习的实际核验环境为 Windows、Python 3.12.10,主要依赖为 nmrglue 0.12、nmrsim 0.7.1、NumPy 2.4.6、SciPy 1.18.1 与 Matplotlib 3.11.2。下载包中的 requirements-lock.txt 保存共享教学环境的完整依赖。这里记录的是实际运行版本,不能据此推断其他操作系统或所有库功能都兼容。

展开说明与推导

网页文档标签可能与安装发行版不同。例如核查时 nmrglue 的 latest 教程页标为 0.9-dev,而本书实际运行的是 0.12;nmrsim 的部分 latest 文档标为 0.6.0,实际运行版本为 0.7.1。复现时以安装记录、包版本和使用的接口为准,同时保存相应文档入口,不能用网页标题替代环境记录。

隔离环境与最小验证

在独立虚拟环境中按练习包说明安装固定依赖,先运行该包的小型例子。成功后再扩展数据维度或模型复杂度。若接口或依赖不匹配,保留实际报错与版本,修正环境后重新核验,不把失败输出当成缺峰数据。

展开说明与推导

安装记录需要包括解释器路径或清楚的启动方式,以免命令调用了另一套 Python。依赖锁定能提高重复性,但不能保证跨平台安装一定成功;编译依赖、数学库与硬件也可能改变运行条件。数值比较应依据任务允许的容差,例如自旋跃迁频率误差,而不是要求每个平台输出字节完全一样。

随机算法还应记录种子、数据顺序和随机源;GPU 模型需要保留框架及驱动等相关版本。固定随机种子并不能无条件保证所有后端逐位相同。若评价依赖多次随机划分或初始化,应按预先规定的重复方案报告分布,不挑选最好的单次结果作为整体性能。

E.1.3 数据格式:保留原始量和轴定义

原始 FID、处理谱、峰表、指认表和结构文件不是可互相替代的数据。FID 与采集参数使读者能够重新处理;处理谱保存既定处理后的响应;峰表只保存选取的峰信息;指认表把响应连接到原子;结构文件表达连接与立体标签。一张图片即使标注很完整,也不能恢复未保存的复数 FID。

表 E.1-2 常见数据层级及应保存的附属信息
层级或格式核心信息不能默认包含的内容
厂商原始目录FID、采集参数、脉冲及必要读取信息单独一个二进制文件不一定足够解释轴与点数
JCAMP-DX 或处理谱数组数值谱与格式规定的参数是否含原始数据、复通道和完整参数需逐文件核对
峰表 CSV / JSON坐标、强度或面积、选峰及单位峰间基线、未选峰与全部原始线形
NMReDATA 记录结构、位移、J、指认及相关对应格式有效不保证结构与观测正确
nmrML原始或谱数据与元数据的标准化表达转换过程可能有限制,不负责自动求结构
结构及候选文件原子编号、键及所声明立体信息SMILES 存在不表示已有完整实验指认
展开说明与推导

每个数组都需要轴方向、单位、载频、谱宽、点数与复数编码的定义。二维数据还需注明两轴核种和采样方式;非均匀采样要保留采样表。一次转置或反向排列可能仍画出合理图像,却改变坐标含义。格式转换后,应拿若干已知参数与原图核对,不能只检查文件能否打开。

原始目录应按只读副本保存,后续处理输出另建目录。若文件转换改变了精度、参数字段或数据排列,应记录转换软件和损失信息。标准格式可以改善交换,但通用字典有时只保留基础参数,不能代替原厂商文件的所有细节。关键元数据缺失时应明确写出缺项。

E.1.4 一份真实 FID 的可复现处理记录

处理路线可从 乙醇 FID 练习包开始。数据是 BMRB bmse000297 实验 1 的存档:100 mM 乙醇,D₂O,DSS 参考,298 K,pH 7.4,Bruker DMX 400 MHz。包中保留来源、条目文件及参数,不把它标成教学模拟谱。运行前阅读 README 与 provenance.json,确认当前文件对应这份记录。

展开说明与推导

本书实际处理顺序为读取 Bruker 数据、移除数字滤波延迟、施加 1 Hz 指数窗、零填充到 32768、FFT、ACME 自动相位,再按采集参数构造 ppm 轴。读取的 16384 个复数点在数字滤波移除后为 16310。相位参数与输入散列在报告中保存;本书没有为了吻合指认表而强行移动轴。

使用 1.00—1.35 与 3.45—3.85 ppm 两个积分窗口及记录的局部基线估计,本地面积比约为 1.47865;条目已有处理谱在同区间的面积比约为 1.49028。二者都接近结构氢数比 3∶2,但来自同一份 FID,不能当成两次独立结构验证;也不能由此宣布真实 qNMR 方法已经验证。

python -m venv .venv
.\.venv\Scripts\python.exe -m pip install -r requirements-lock.txt
.\.venv\Scripts\python.exe process_ethanol.py --input data --output results

以上为 Windows PowerShell 示例,在练习包解压目录中使用,明确调用新环境中的解释器;其他平台采用其虚拟环境对应的解释器路径。复现后检查点数、处理顺序、轴和报告,而不只是谱的外观。若面积比变化,应先比较窗、相位、基线、区间与软件版本;一个参数变化可能合理,却需要形成新的处理版本及说明。

E.1.5 模拟、CASE 与 AI 的验证边界

AB 自旋练习固定两个自旋二分之一、J=7 Hz 和四种频率差,实际将 nmrsim 的跃迁频率及强度与独立解析式对账。双位点交换练习使用等占比、相同内禀弛豫、无 J 的限定模型,比较解析式、矩阵及适用的软件函数。成功范围是这些具体案例,不能写成整个模拟库已被验证。

展开说明与推导

CASE 枚举练习展示有限候选与约束的排除过程,适合检查证据逻辑。完整 Sherlock 流程涉及实际服务、知识库与更复杂约束,本轮没有执行它。用于立体候选比较的 DP4-AI 也有外部计算与误差模型条件;概率必须依候选集解释,不能替换成全结构空间的确定性。

AI 路线应先读 9.9 节的任务与发表状态核查,再依据公开代码固定版本、权重、数据表示、分子式及其他先验。NMR-Solver 的大规模检索路线需要相应数据库资源;本轮没有下载完整大型库,也没有声称在本地复现论文排名。算出教学 Top-k 指标只检验评价算术,没有执行论文模型。

不同阶段可采用不同成功标准:读取阶段检查数据形状与参数;模拟阶段检查解析极限与数值响应;CASE 检查候选覆盖和约束;AI 检查独立测试划分、失败样本与校准。记录应明确“已运行”“仅核查文档”“依赖尚缺”或“结果不符”,让后续读者能准确判断目前进度。

公开仓库并不等于完整可运行系统

代码之外可能还需要权重、数据库、访问许可或外部服务。README 中的安装命令也不能证明所有依赖已满足。只有固定输入、完整运行并检查输出后,才报告相应范围的运行成功。

E.1.6 分别记录代码许可、数据许可和服务条款

代码许可证规定代码如何使用与再分发,数据许可证规定数据的复用条件,托管服务条款规定在线应用的使用条件。三者可能由不同主体制定。nmrglue 的代码采用 BSD-3-Clause,nmrsim 与 NMRium 组件仓库采用 MIT;这些许可不能自动覆盖其示例数据、外部谱库或托管服务。

展开说明与推导

BMRB 的任务与数据政策说明公开数据的传播方式;本书保留提交者、条目 DOI 与来源,没有把该数据改标为 CC0。乙醇与 AB 练习中新写的脚本和说明采用教材所声明的 CC BY-NC-SA 4.0;综合项目起步包则单独标出教学数据的 CC0 与脚本的 MIT。使用者应读取每个包的说明,不能由共同文件扩展名推断统一许可。

将材料上传归档平台前,需要核对数据权利、作者、引用和记录许可。nmrXiv 的发布文档要求填写许可等元数据;平台代码的许可与各记录的许可分开判断。本页只提供复现与归档路线,没有替读者上传或发布样品。若课堂要重新分发第三方谱图,应按该记录的具体许可办理。

E.1.7 归档清单与一次可核验的交付

最小归档应包含原始数据与来源、样品和采集条件、处理脚本与参数、环境版本、结构及原子编号、峰与相关表、结果报告、许可和引用。随机过程增加种子与划分;模型增加权重版本及检索库标识。文件名不必采用某一种风格,但必须能把输入、处理与结论稳定地连起来。

图 E.1-3 可复现归档的四层来源与输入FID、条件、数据版本、散列环境与方法依赖、脚本、参数、种子结果与解释处理谱、指认、限制、报告许可与引用代码、数据、来源各自记录manifest 清单
图 E.1-3 原创归档图。散列帮助核对文件版本,不能检查科学结论;结果仍需与输入及方法一起解释。
展开说明与推导

复现记录与校验包保存本书七个练习包的文件名、大小和 SHA-256,以及上述已核验环境版本。它附带标准库校验脚本;本轮从新解压目录运行,七项散列均匹配。使用者下载七个对应包后,可运行下列命令,确认文件是否属于这份发布记录。

python verify_archives.py --assets PATH_TO_DOWNLOADED_ARCHIVES

散列不匹配时先检查文件名、下载完整性与是否使用更新版本。匹配只能说明字节一致,不证明数据真实或结论正确。进一步复现仍要运行每个练习、检查其预期结果与科学边界。综合项目起步包中的算术检查尤其不能冒充 FID 处理或 AI 模型运行。

可复现记录的完成标准

另一位读者能够取得同一输入、识别同一方法与环境、产生可比较的输出,并看清尚未解决的问题。归档既保存成功结果,也保存影响结论的限制和失败记录。

E.1.8 习题与解答

习题 E.1-1 同一 FID 的两种处理

乙醇 FID 的本地处理比为 1.47865,原有处理谱比为 1.49028。能否称为两次独立实验确认 3∶2?

解答不能。它们来自同一采集,只是不同处理。可比较处理敏感性,但独立实验需要独立采集及相应条件记录;qNMR 还需验证定量响应。

习题 E.1-2 代码与服务

组件仓库是 MIT,是否意味着托管服务和任意上传谱数据均可按 MIT 使用?

解答否。MIT 对应其代码范围,托管服务另有条款,数据另有许可或权利条件。应分别核对三个对象,保留出处及访问版本。

习题 E.1-3 散列与科学有效性

七个包的 SHA-256 全部匹配,是否可宣布 NMR-Solver 在本地通过复现?

解答不可。散列只核对指定包的字节,包中的演示指标没有运行 NMR-Solver。模型复现需要固定权重、完整依赖、实际数据及推理输出,再按合适基准评价。

E.1.9 关键术语

固定版本 version pinning
明确实际使用的发行版或提交。
锁定依赖 dependency lock
保存实际依赖版本以提高环境重复性。
原始数据 raw data
可追溯至采集的观测及必要参数。
数据层级 data level
FID、处理谱、峰表等不同信息对象。
清单 manifest
连接文件、版本和方法的归档索引。
散列 checksum
核对文件字节是否一致的摘要。
服务条款 service terms
在线应用的使用条件,与代码许可分开。
复现范围 reproduction scope
实际执行并检查过的任务及条件。

E.1.10 参考文献与官方资源

  1. Helmus JJ, Jaroniec CP. nmrglue: An open source Python package for the analysis of multidimensional NMR data. J Biomol NMR, 2013, 55:355–367. 论文;官方教程;代码与许可。
  2. nmrsim contributors. nmrsim. 官方代码;文档。本书运行版本与范围见正文。
  3. cheminfo / NMRium contributors. NMRium. 官方使用文档;组件仓库。核对日期 2026-10-11,托管应用条款另查。
  4. Kuprov I and Spinach contributors. Spinach. 官方仓库及版本依赖。开发分支要求与历史发行版不混用。
  5. NFDI4Chem / Sherlock contributors. Sherlock. 官方 CASE 服务代码;2023 年原始论文。
  6. Pupier M, Nuzillard JM, Wist J, et al. NMReDATA, a standard to report the NMR assignment and parameters of organic compounds. Magn Reson Chem, 2018, 56:703–715. 指认标准;nmrML 项目:原始与谱数据格式仓库。
  7. BMRB. Ethanol, bmse000297. 数据条目 DOI;任务声明;代谢组学数据政策。
  8. NFDI4Chem / nmrXiv. Publication Deposition. 官方归档与许可记录说明,访问核对 2026-10-11。
  9. Jin Y, Wang JJ, Xu F, et al. NMR-Solver: automated structure elucidation via large-scale spectral matching and physics-guided fragment optimization. Nat Commun, 2026, 17:4740. 原始研究;代码与资产要求。