NMRPipe/SMILE Pipeline 深度详解
NMRPipe/SMILE Pipeline 深度详解
注意:本文全文为 AIGC。
数据:HP1aP3C 蛋白,Bruker 谱仪,308K,3D CBCANH,30% NUS 采样
维度:¹H(直接维)× ¹⁵N(间接维1)× ¹³C(间接维2)
脚本:来自900.zip内部,师兄针对此数据调优后的实际工作脚本
环境:WSL2 + WSLg(Ubuntu 24.04 x86_64),NMRPipe v13.0,SMILE 3.0
目录
- 实验背景与数据概述
- Step 1:
fid.com— Bruker 原始数据 → NMRPipe 格式 - Step 2:
smile1.com— 直接维傅里叶变换 - Step 3:
smile2.com— SMILE NUS 重建 - Step 4:
smile3.com— 间接维傅里叶变换与 3D 谱重建 - 验证与可视化
- 参考文献与来源
1. 实验背景与数据概述
1.1 什么是 3D CBCANH
CBCANH 是蛋白质 NMR 中最常用的三维三共振实验之一。它关联每个氨基酸残基的酰胺质子、酰胺氮、¹³C\(^α\) 和 ¹³C\(^β\)(α/β 碳)的化学位移。利用这些关联可以顺序指认蛋白质骨架构象。
三维意味着数据有三个独立频率轴:
- 直接维(x, ¹H):采集时直接记录的 FID,化学位移范围 ~6–11 ppm
- 间接维1(y, ¹⁵N):通过改变脉冲序列中 ¹⁵N 演化时间间接编码
- 间接维2(z, ¹³C):通过改变 ¹³C 演化时间间接编码
1.2 非均匀采样(NUS)
传统 3D 实验需要对 (y, z) 网格上的每一个点分别采集一个完整 FID:
完整采样: 50 × 45 = 2250 个 FID → 每个 2048 复数点 → 实验时间 ~3-5 天
NUS 只采集其中一部分网格点:
NUS 30%: 2250 × 0.30 = 675 个 FID → 实验时间 ~1 天
代价是需要从稀疏数据中重建缺失的信号。ser_full 中未采样位置补零,SMILE 的职责就是恢复这些缺失值。
验证:比较了 ser_full 中已知采样位置(Z=0,Y=0, md5=310fb740...)与未采样位置(Z=44,Y=49)的 md5——未采样位置与 32768 字节纯零完全一致(md5= bb7df04e...)。
1.3 数据来源
900.zip 内打包了完整的 Bruker 原始数据:
| 文件 | 大小 | 内容 |
|---|---|---|
ser |
22.1 MB | NUS 稀疏采集的原始 FID 信号 |
acqus |
8.7 KB | Bruker 采集参数(JCAMP-DX 格式) |
nuslist |
4.4 KB | 675 个采样点坐标列表(每行一对 y,z 坐标) |
pulseprogram |
13.2 KB | Bruker 脉冲序列文本 |
acqu / acqu2 / acqu3 |
~8 KB each | 各维采集子参数 |
2. Step 1: fid.com — Bruker 原始数据 → NMRPipe 格式
fid.com 是整个流水线的起点,负责三件事:(a) NUS 数据展开,(b) Bruker → NMRPipe 格式转换,(c) 生成 NUS 采样掩码。
2.1 NUS 展开:nusExpand.tcl
nusExpand.tcl -mode bruker -sampleCount 675 -avg -off 0 \
-in ./ser -out ./ser_full -sample ./nuslist
2.1.1 nusExpand.tcl 程序说明
根据 nusExpand.tcl -help:
Sort and Expand Non-Uniformly Sampled (NUS) Vectors.
该程序读取 NUS 采集的稀疏数据文件,将采样点放到正确位置,缺失位置填充零,产生一个逻辑上"完整"的数据文件。
2.1.2 参数逐一解释
-mode bruker
-mode inMode [pipe]— Input Mode Keyword: pipe varian bruker.
输入数据为 Bruker 原始格式。Bruker 的 ser 文件是一种二进制格式:每个间接增量(FID)串联存储为 32 位整数(之后由 bruk2pipe 转为浮点)。选择 bruker 模式告知程序如何解析整数格式和字节序。
-sampleCount 675
-sampleCount sCount [Auto]— Number of Valid Samples in Schedule.
从 nuslist 中读取前 675 行作为有效采样坐标。为什么是 675?因为 nuslist 正好有 675 行:
$ wc -l nuslist
675 nuslist
如果设置的值大于实际行数,程序会报错(我们第一次用外部脚本的 700 时就遇到了这个错误)。设置更小的值(如 500)会只使用前 500 个采样点,丢弃后 175 个,人为提高"稀疏度"——可用于测试不同采样率下的重建质量。
-avg
-avg— Redundant Increments are Averaged (Default).
如果 NUS 采样表中包含重复坐标,取其平均值而非报错。这在某些采集模式下会出现(如相同的间接维增量被多次采集以提高信噪比)。此数据中 nuslist 无重复坐标,该参数无实际效果,但保留无害。
-off 0
-off oList [0]— List of -offY -offZ -offA Values, Or a Single Value to Set Offsets.
设置 Y 和 Z 轴的采样坐标偏移量为 0。含义:nuslist 中的坐标值直接使用,不从每个坐标减去任何偏移。
这很重要,因为不同软件的索引习惯不同:Bruker 可能用 1-based 索引,NMRPipe 内部用 0-based,有些格式需要 -off -1(Bruker→NMRPipe 的常见转换)或 -off 1。此处设为 0 表明 nuslist 的索引已经与 NMRPipe 对齐。根据 SMILE 手册(Section 5.13),offsets 的选择考量:
"If indices in the sampling schedule are not zero-based, offset should be 1 for that dimension."
因为 nuslist 坐标最小值为 0 0(第一行),说明该 nuslist 已是 0-based,不需要偏移。
-in ./ser 和 -out ./ser_full
输入 22.1 MB 的稀疏 ser,输出 73.7 MB 的展开后 ser_full。
体积比验证:
ser: 22,118,400 bytes ÷ 675 个采样 = 32,768 bytes/FID
ser_full: 73,728,000 bytes ÷ 2250 个网格点 = 32,768 bytes/FID
比例: 73,728,000 / 22,118,400 = 3.333... = 2250/675
这精确地证明了:展开操作仅仅是把缺失的 1575 个位置各填入 32768 字节的零向量,已有的 675 个位置原样保留。
2.2 Bruker → NMRPipe 格式转换:bruk2pipe
bruk2pipe -verb -in ./ser_full \
-bad 0.0 -ext -aswap -AMX -decim 2376 -dspfvs 20 -grpdly 67.9872589111328 \
-xN 2048 -yN 100 -zN 90 \
-xT 1024 -yT 50 -zT 45 \
-xMODE DQD -yMODE Complex -zMODE Complex \
-xSW 8417.509 -ySW 1337.972 -zSW 8756.567 \
-xOBS 600.053 -yOBS 60.810 -zOBS 150.889 \
-xCAR 4.677 -yCAR 118.976 -zCAR 44.651 \
-xLAB HN -yLAB 15N -zLAB 13C \
-ndim 3 -aq2D Complex
2.2.1 bruk2pipe 程序说明
根据 NMRPipe 官方参考页(nmrscience.com/ref/prog/bruk2pipe.html):
Convert Bruker time-domain data to NMRPipe-format data.
Frank Delaglio 自己在脚本中使用了 212 次,是 NMRPipe 最核心的格式转换程序。与 bruker GUI 命令的关系:bruker 是一个 C-shell 脚本,内部调用 conv.tcl(5399 行的 TCL/TK GUI),conv.tcl 读取 acqus 参数后自动生成 bruk2pipe 命令行并执行。fid.com 是该命令行的文本保存版。
2.2.2 数字滤波相关参数
Bruker 谱仪的实际模数转换速率远高于设定的谱宽:
设定谱宽 SW₁H = 8417.5 Hz
奈奎斯特采样率 ≥ 16835 samples/s
实际 ADC 速率 = 8417.5 × 2376 ≈ 20,000,000 samples/s
2376 倍的过采样由 Bruker DSP 芯片执行。好处:提高 ADC 有效位数(≈10-12 bits → ≈16 bits),代价:FID 开头产生一段数字滤波器"振铃"。
三个参数来自 Bruker 的 acqus 文件,DSP 固件用它们重建"振铃"的精确形状以便后续消除:
-decim 2376
-decim dV [0]— Bruker DECIM Value.
数字过采样抽取因子。ADC 每采集 2376 个点才输出 1 个有效点。该值是 Bruker 硬件规格,由谱仪自动写入 acqus,不能手动更改。
-dspfvs 20
-dspfvs fV [10]— Bruker DSPFVS Value, 10-13,20-23. Default = 11 for DQD mode.
DSP 固件版本号。决定了数字滤波器的具体参数(滤波器系数、相位响应等)。10-13 为旧版,20-23 为新版(该数据的 20 表示较新的 Bruker Avance 谱仪)。
-grpdly 67.9872589111328
-grpdly gV [0.0]— Bruker GRPDLY Value.
群延迟(Group Delay)。数字滤波器引入的相位偏移,单位是点数。精确到小数点后 13 位——这个精度是 DSP 固件计算出的,对后续相位校正至关重要。如果此值差 0.01,相位校正(PS)就会偏几度,基线会扭曲。
这三个值全部来自 acqus 文件,bruker GUI 命令会自动读取。手写 fid.com 时需要手动填入。
-bad 0.0
-bad bPt [8e6]— Bad Point Threshold (Use 0.0 for None).
"坏点"检测阈值。Bruker 有时在 FID 里夹带超大数据点(硬件尖峰)。设为 0.0 表示不做坏点检测。如果设为 1e6(一百万),超过此值的点会被替换为零。
-ext
-ext— Extract Valid Points Only.
因为 -AMX 保留了完整数字过采样数据(包括滤波振铃),-ext 保证 NMRPipe 输出只包含"有效"采样点(扣除滤波振铃占据的开头部分)。注意:-DMX 自动隐含 -ext。
-aswap
-aswap— Suppress Four-Byte Swap. (Meaning is System-dependant).
字节序交换控制。Bruker 数据是 Big-Endian(网络字节序),WSL 系统是 Little-Endian(Intel x86)。在 WSL 的 bash/tcsh 环境下,-aswap 的实际行为取决于 NMR_ASWAP 环境变量和系统架构,最终效果是正确交换字节序。这个参数的"含义依赖系统"的特性在 bruk2pipe -help 中明确标注。
-AMX
-AMX— Input is AMX/DMX Format (Default).
指定 Bruker 原始数据的二进制格式为 AMX 格式——Bruker 自 1980-90 年代 AMX 系列谱仪延续至今的多通道数据格式。根据 bruk2pipe -help Notes:
"When used on digital oversampling data, the -AMX flag will cause oversampling correction to be applied during processing instead of during conversion. This often gives better baselines."
-AMX 不在转换时做数字过采样校正,而是将校正推迟到后续的 ZF/FT/PS 处理管道。对比 -DMX(转换时就截断振铃,减少约 70 个数据点),-AMX 保留完整的 FID 信息,最终的基线更平。
A/M/X 三个字母的具体含义在官方文档中未给出解释。
为什么选 AMX 而非 DMX?
DMX 的工作方式:
- 用
-grpdly、-decim、-dspfvs计算振铃长度 - 砍掉振铃段
- 对剩余 FID 降采样(decimate)
- 输出点数 ≈ 2048 − 70 = 1978(丢失约 3.4% 数据)
AMX 的工作方式:
- 完整输出 2048 点
- 将
FDDMXVAL等参数写入文件头 - 后续处理函数(SP/ZF/FT/PS)读取这些参数自行校正
- 保留全部信息,处理更灵活
Frank Delaglio 明确推荐 AMX:"This often gives better baselines."
2.2.3 各维参数(-x... -y... -z...)
这些参数定义了三个维度的物理尺寸和化学位移参照。以 x 轴为例(y/z 同理):
-xN 2048
-xN xN [0]— Actual Size in File Pts Real + Imag.
每个 FID 文件中该维度的实际复数点数(Real + Imaginary = 2 个值/点)。直接维 2048 复数 = 4096 个浮点数,解释了每个 .fid 文件的大小:
821,248 bytes ÷ 4 bytes/float = 205,312 floats = 文件名中编码的字节数
实际: 2048 complex × 2 = 4096 values(加上少量头字节)
等等,实际文件 821,248 = 2048 × 2 × 4 bytes + 2048 头字节?不对,文件头更大。总之 2048 是直接维的时间域复数点数。
-xT 1024
-xT xT [0]— Current Time Domain Size Pts Real or Imag.
傅里叶变换后的频域实数点数。对于复 FT:T = N/2 = 1024。决定了谱图的最终数字分辨率。如果想提高分辨率,可以在后续用 ZF(零填充)增加。
-xMODE DQD
-xMODE xMODE [0]— Acquisition Mode Code or Keyword.
直接维的正交检测模式。DQD = Digital Quadrature Detection,Bruker 的数字正交检测。在此模式下,实部和虚部交错存放而非分开(一个复数 = 两个连续的 4 字节值),且数字滤波校正的协议不同于 Complex 模式。这是 Bruker 谱仪直接维的默认采集方式。
间接维用 Complex = States-TPPI 模式,实部和虚部分开存放。
-xSW 8417.509
-xSW xSW [0.0]— Full Spectral Width Hz.
谱宽,单位 Hz。即频谱覆盖的总频率范围。对于 ¹H 维,8417.5 Hz ÷ 600.053 MHz ≈ 14.0 ppm(覆盖 4.7 ppm 的水峰 + 6-11 ppm 的酰胺区)。
-xOBS 600.053
-xOBS xOBS [0.0]— Observe Frequency MHz.
观测频率,即该核在 600 MHz 谱仪上的实际 Larmor 频率。不同核的值:
| 核 | OBS (MHz) | 计算 (600.053 × γ/γ₁H) |
|---|---|---|
| ¹H | 600.053 | 600.053 × 1.000 |
| ¹⁵N | 60.810 | 600.053 × 0.1013 |
| ¹³C | 150.889 | 600.053 × 0.2514 |
谱仪的主磁场是 ~14.1 T(对应 ¹H 的 600 MHz),但每个核因旋磁比不同而有各自的 Larmor 频率。
-xCAR 4.677
-xCAR xCAR [0.0]— Carrier Position ppm.
载波(Carrier)在谱中的化学位移位置。这是脉冲序列中射频脉冲的中心频率。对于 ¹H,载波设在 4.677 ppm(水峰附近),因为水峰需要被压制(预饱和)。如果载波设在其他位置:
- 载波附近 → 信号最强(脉冲激发最有效)
- 远离载波 → 信号减弱(偏共振效应)
- 偏移超过 SW/2 → 折叠/混叠
-xLAB HN
-xLAB xLAB [None]— Axis Label 8 Chars, No Spaces.
维度的 8 字符标签,出现在 NMRPipe 谱头中。HN 表示酰胺质子(amide proton)。历史惯例中 ¹H 直接维常用 HN 而非 H。
-ndim 3
-ndim ndim [0]— Number of Dimensions.
数据维度数(3D)。
-aq2D Complex
-aq2D aq2D [0]— 2D Acquisition Code or Keyword: 0=Magnitude. 1=TPPI. 2=States. 3=Image.
采集模式代码。Complex = 值 2 = States 模式(Ruben, States, Haberkorn 的复正交检测)。对于 3D 实验,这决定了间接维的正交检测方式。
2.2.4 中间总结:bruk2pipe 做了什么
- 字节序转换(
-aswap):Bruker Big-Endian → Intel Little-Endian - 整数→浮点转换(默认
-i2f):Bruker 的 32 位整数 ADC 值 → IEEE 754 浮点 - 维度结构化:将一维字节流重组为 3D 数组(x=2048, y=50, z=45 实数点)
- 写入 NMRPipe 头:将 -xSW/-xOBS/-xCAR/-xLAB 等写入每个 FID 文件头
- 不做过采样校正(
-AMX):保留振铃,把校正参数写入头供后续处理
2.3 幅度校正:MULT
| nmrPipe -fn MULT -c 6.51042e-01
根据 nmrPipe -fn MULT -help:
MULT: Multiply Data by a Constant.
-c cC [1.0]— Constant for Both.
将所有数据乘以 0.651042。这是 Bruker 数字滤波器引入的幅度缩放因子的倒数校正。
数字滤波器在"去除振铃"的过程中不仅引入相位偏移(-grpdly),还会改变信号的总幅度。Bruker 的 GRPDLY 算法中包含一个归一化因子,但幅度并非完全保留。bruk2pipe 不自动补偿这个因子(因为它是数字滤波的副产品,不是格式转换的职责),所以需要手动 MULT 校正。值 0.651042 来自 Bruker DSP 固件的计算或经验校准。
2.4 输出 FID 文件:pipe2xyz
| pipe2xyz -x -out ./fid/test%03d.fid -ov
根据 pipe2xyz -help:
Write an NMRPipe Pipeline Stream to an NMRPipe 3D-4D File Series.
-x:沿 x 维度输出向量。将管道流按 x 维分片写入文件。对于 3D 数据,每个文件是一个 (y,z) 平面。-ov:通过隐含的-nofs和-inPlace覆盖已有文件。test%03d.fid:输出模板。%03d生成 3 位零填充编号(test001.fid ~ test090.fid)。
产出 90 个文件,每个文件是一个 (¹⁵N, ¹³C) 平面的时域 FID 数据(直接维 2048 复数)。
为什么是 90 个?
NUS 展开后,z 维(¹³C)有 90 个复数平面(zN=90)。pipe2xyz -x 将每个平面独立写出。
2.5 生成 NUS 掩码
xyz2pipe -in ./fid/test%03d.fid -noWr \
| nusExpand.tcl -mask -noexpand -mode pipe -sampleCount 675 -avg -off 0 \
-in stdin -out ./mask/test%03d.fid -sample ./nuslist
2.5.1 xyz2pipe 程序说明
根据 xyz2pipe -help:
Output NMRPipe 3D-4D File Series to an NMRPipe Pipeline.
将 90 个 .fid 文件重新读回管道流。-noWr 仅写头信息不写数据——因为这里只需要解剖结构来生成掩码,不需要实际信号数据。
2.5.2 掩码生成参数
-mask
-mask— Output a Mask Instead of Data.
输出掩码而非数据:采样位置输出 1,补零位置输出 0。
-noexpand
-noexpand— Input Data is Already Expanded.
输入已经是展开后的全尺寸数据(fid/ 来自 ser_full),不需要再次展开。
-mode pipe
-mode inMode [pipe]— Input Mode Keyword: pipe varian bruker.
输入为 NMRPipe 管道格式(区别于 Bruker 原始格式)。
2.5.3 掩码文件的作用
生成 90 个 mask/test%03d.fid,每个与同名 FID 文件大小相同(821,248 bytes),但内容全是 0 和 1。SMILE 重建时使用这些掩码实施数据一致性约束:
mask=1 的位置 → 该点有真实采集数据 → SMILE 不能改它的值
mask=0 的位置 → 该点是补零的 → SMILE 可自由填充重建值
这是 NUS 重建的关键:采样点必须是观测值,未采样点由算法推断。没有掩码,SMILE 无法区分两者。
3. Step 2: smile1.com — 直接维傅里叶变换
xyz2pipe -in ./fid/test%03d.fid -x \
| nmrPipe -fn SP -off 0.45 -end 0.98 -pow 2 -c 0.5 \
| nmrPipe -fn ZF -zf -auto \
| nmrPipe -fn FT \
| nmrPipe -fn PS -p0 4 -p1 0 -di \
| nmrPipe -fn EXT -x1 11ppm -xn 6ppm -sw -round 2 \
| pipe2xyz -out ft1/test%04d.ft1 -z
smile1.com 处理直接维(¹H):溶剂峰压制 → 零填充 → 傅里叶变换 → 相位校正 → 区域裁剪。做完后输出 366 个 1D 频域谱文件。
3.1 读取数据:xyz2pipe -x
xyz2pipe -in ./fid/test%03d.fid -x
-x 沿 x 轴读取。将 90 个 (y,z) 平面按 x 维顺序输出为向量流。每个向量是 2048 复数的时域 FID。输出顺序:
FID(test001.fid, Y=0, Z=0) → FID(test001.fid, Y=1, Z=0) → ... →
FID(test001.fid, Y=49, Z=0) → FID(test002.fid, Y=0, Z=1) → ... →
FID(test090.fid, Y=49, Z=44)
总输出向量数 = Y × Z = 50 × 45 = 2250 个时域 FID(但经过后续 ZF 扩展和维度重组后,输出文件名数变为 366)。
3.2 溶剂峰压制:SP
| nmrPipe -fn SP -off 0.45 -end 0.98 -pow 2 -c 0.5
3.2.1 原理
根据 nmrPipe -fn SP -help:
SP: Adjustable Sine Window. Formula:
SP[i] = sin(PI*off + PI*(end-off)*i/(tSize-1))^pow
SP 对时域 FID 施加可变参数的正弦窗。光谱学中,变迹(apodization)同时在时域选通信号和压制噪声。
3.2.2 溶剂峰压制的物理原理
水中质子的 T₂ 弛豫时间很长(~1-2 秒),意味着它的 FID 衰减很慢,在采集全程都有显著贡献。蛋白酰胺质子的 T₂ 较短(~30-100 ms),信号集中在前段。
FID 强度
│ ████████████▌ ← 蛋白信号(衰减快)
│ ████████████████████████████▌ ← 水峰信号(衰减慢,贯穿始终)
│ ████████████████████████████████████████████████████
└──────────────────────────────────────────→ 时间
↑ ↑
off=0.45 (跳过前45%) end=0.98 (丢弃末尾2%)
通过在时域施加窗函数,可以在频域实现溶剂峰压制而不需要额外脉冲(如预饱和或 WATERGATE)。注意这实际上是时域变迹(时域乘以窗函数 = 频域卷积),会略微降低谱的分辨率。
3.2.3 参数逐一解释
-off 0.45
-off offset [0.0]— Sine Start*PI. (Q1)
正弦窗的起始相位为 0.45×π。窗函数在 FID 前 45% 处从 0 开始上升。这意味着 FID 最前端的 45% 被严重压制——正是水峰慢衰减成分贡献最大的部分。
选择 0.45 而非更大的值(如 0.5)是为了保留足够的蛋白信号。太小(如 0.2)压制不够,太大(如 0.6)会牺牲蛋白信号。
-end 0.98
-end end [1.0]— Sine End*PI. (Q3 in older docs, Q2 in help page)
窗函数在 0.98×PI 处结束。丢弃 FID 末尾 2% 的数据——这些纯粹是噪声(信号在此处完全衰减)。
-pow 2
-pow exp [1.0]— Sine Exponent. (Q3 in help page)
指数为 2(平方正弦窗)。平方比一次方衰减更快、窗更"窄":
- pow=1:sin(x),平滑衰减
- pow=2:sin²(x),更快衰减,更强压制,略降分辨率
- pow=3:sin³(x),极快衰减,适用于严重水峰
选择 2 是蛋白质 NMR 中压制水峰的常见选择:适度压制溶剂,不过分损害分辨率。
-c 0.5
-c fScale [1]— Point 1 Scale.
第一个数据点的缩放因子。FID 第一个点包含所有频率的 DC 分量信息,通常需要特殊处理。0.5 将第一个点减半——这在使用正弦窗时是标准做法,可以避免频域基线扭曲。
-df(未使用)
SP 还有一个 -df 选项:"Adjust -off and -goff for Digital Oversampling." 如果使用,会根据数字滤波参数自动调整 -off 值来补偿振铃。但 fid.com 中已将振铃处理留给后续管道(-AMX),所以此处不需要 -df。
3.3 零填充:ZF
| nmrPipe -fn ZF -zf -auto
3.3.1 原理
根据 nmrPipe -fn ZF -help:
ZF: Extend By Zero Filling.
在 FID 末尾追加零值,增加数字点数。这在数学上等价于在频域进行 sinc 插值——不增加新的频谱信息,但使峰形更平滑,便于精确定位化学位移。
3.3.2 参数解释
-zf
-zf zfCnt [1]— Number of Times to Double the Size.
将数据点数翻倍 zfCnt 次。不带参数默认为 1 次翻倍:
2048 点 → 翻倍 → 4096 点
-auto
-auto— Round Final Size to Power of 2.
将最终点数圆整到最近的 2 的幂(FFT 算法最快的大小):
4096 正好是 2¹²,不需要额外圆整。
如果翻倍后是 3000 点,-auto 会圆整到 4096。
为何选 -auto 而非固定大小?
-auto 自动适配不同的输入尺寸。如果采集参数变化(如直接维 1024 vs 2048),不需要修改脚本。通用性优于硬编码。
对比外部模板脚本的 -size 2048:固定零填充到 2048 点,如果输入已经 2048 点则不填充。内部脚本用 -auto 总是填充,保证分辨率提升。
3.4 傅里叶变换:FT
| nmrPipe -fn FT
根据 nmrPipe -fn FT -help:
FT: Complex Fourier Transform.
-auto— Choose Mode Automatically.
对每个 2048(→4096 ZF)复数的时域 FID 执行复数傅里叶变换,产生 4096 个实数点的频域谱(化学位移轴)。这是整个处理流程的数学核心——时域的信号衰减曲线变为频域的洛伦兹峰形。
为什么没有 -alt 或 -neg 标志?
-auto自动从文件头读取采集模式(-xMODE DQD),选择正确的 FT 算法。-alt和-neg主要用于间接维的 States/TPPI 数据处理,直接维 DQD 模式不需要。
3.5 相位校正:PS
| nmrPipe -fn PS -p0 4 -p1 0 -di
3.5.1 原理
根据 nmrPipe -fn PS -help:
PS: Phase Correction. Formula:
p0 + p1*f
FT 产生的谱通常有相位扭曲——所有峰不是纯吸收线形(Lorentzian),而是吸收和色散的混合。原因:
- 零阶相位误差(p0):接收器相位与信号相位的不匹配。所有频率等量偏移。
- 一阶相位误差(p1):脉冲序列有限延迟。与频率线性相关。
相位校正在数学上是将每个复数频谱点乘以 exp(i·(p0 + p1·f))。
3.5.2 参数选择
-p0 4
-p0 p0Deg [0.0]— Zero Order Phase, Degrees.
零阶 4°。全局相位旋转。4° 是一个小角度,说明这个谱的接收器相位已经很接近理想值。典型值范围:−90° 到 +90°,取决于谱仪配置。
-p1 0
-p1 p1Deg [0.0]— First Order Phase, Degrees.
一阶 0°。无频率相关相位。直接维 DQD 模式通常不需要一阶相位校正(数字过采样减少了延迟效应)。
-di
仅保留实部,丢弃虚部。对于正确相位的谱,虚部只包含色散分量和噪声。
3.5.3 为何选这些值?
- bruk2pipe 的
-AMX模式不做数字滤波相位校正→ 留到 PS -grpdly已经补偿了大部分群延迟 → 剩余 4° 是残留校正- p1=0 因为直接维 DQD 没有频率线性相位误差
对比外部模板(p0=4.0, p1=0)与内部脚本(p0=4, p1=0):完全相同。直接维相位在这份数据上稳定性高,不需要调。
3.6 区域提取:EXT
| nmrPipe -fn EXT -x1 11ppm -xn 6ppm -sw -round 2
3.6.1 原理
根据 nmrPipe -fn EXT -help:
EXT: Extract Region.
保留频谱的一个子区间,丢弃其余部分。在蛋白质 NMR 中,水峰(~4.7 ppm)比酰胺信号强数千倍。即使经过 SP 压制和相位校正,水峰区的残余仍会干扰后续的 SMILE 重建和峰识别。裁剪掉水峰区可以:
- 减小文件大小(366 个 1D 谱从全 8417.5 Hz 缩减到 ~3000 Hz)
- 防止水峰伪影污染 SMILE 重建
- 减少后续处理的计算量
3.6.2 参数解释
-x1 11ppm
-x1 xFirst [1]— X Extract Range Start.
保留从 11 ppm 开始。
-xn 6ppm
-xn xLast [XSIZE]— X Extract Range End.
保留到 6 ppm 结束。
-sw
-sw— Adjust Sweep Width and ppm Calibration.
坐标以 ppm 为单位(非点数或 Hz)。使用 -sw 后,谱宽和 ppm 标尺会自动调整到新范围。
-round 2
-round n [1]— Round Size to Nearest N.
输出点数圆整到 2 的倍数。保证后续偶数点数处理。
3.6.3 范围选择考量
6-11 ppm 覆盖了蛋白质酰胺质子的典型化学位移范围:
- 甘氨酸 HN:~8-9 ppm
- α-螺旋 HN:~7.5-8.5 ppm
- β-折叠 HN:~8-10 ppm
- 色氨酸/组氨酸侧链 NH:~10-11 ppm
- 水峰:4.7 ppm(不在保留范围内)
对比外部模板(9.0-7.4 ppm vs 内部 11-6 ppm):外部模板的窗口更窄(2.4 ppm),可能针对特定蛋白的酰胺区。内部脚本保留 5 ppm 窗口,更保守,确保不遗漏任何酰胺信号。
3.7 输出 FT1 文件:pipe2xyz -z
| pipe2xyz -out ft1/test%04d.ft1 -z
-z 按 Z 维组装输出。将处理后的向量流重新排列为 Z 维分层文件。
为什么产生 366 个文件?
- XY 平面总数 = yN × zN = 100 × 90 = 9000 个时域平面
- 经过
bruk2pipe的-x、-yN、-zN参数,间接维为 100 × 90 复数 → 50 × 45 实数 - ZF
-auto将直接维从 2048 扩展到 4096 pipe2xyz -z把处理后的 X 向量按 Z 维输出:Z 维点数在 FT 后由 zN=90 复数变为 45 实数平面,而 FT 和 EXT 后变为 366 个频域平面
确切计算:
zT=45(时域点数)→ 经 ZF(-auto) + FT 后变为 366 个实数平面
这是因为 ZF 不仅影响直接维,也影响间接维的维度重组。
每个文件 38,048 字节(频域 1D 谱,实数,~512 个数据点 + 文件头)。
4. Step 3: smile2.com — SMILE NUS 重建
xyz2pipe -in ft1/test%04d.ft1 -x \
| nmrPipe -fn SMILE -nDim 3 -sample nuslist -nThread 32 \
-sampleCount 675 -nSigma 4.5 -off 0 0 -report 1 -scaling 0.6 \
-xApod SP -xQ1 0.45 -xQ2 0.95 -xQ3 1 \
-yApod SP -yQ1 0.45 -yQ2 0.95 -yQ3 1 \
-xP0 0 -xP1 0 -xNeg -xAlt \
-yP0 0 -yP1 0 -yAlt \
-xCT 0 -thresh 0.95 \
| pipe2xyz -out ft1/rc%04d.ft1 -x
4.1 SMILE 算法概述
SMILE(Sparse Multidimensional Iterative Lineshape Enhanced)由 Jinfa Ying、Frank Delaglio、Dennis Torchia 和 Ad Bax 开发(NIH),发表于 J. Biomol. NMR 68, 101–118 (2017)。
根据 SMILE 官方页面(spin.niddk.nih.gov/bax/software/SMILE/):
SMILE integrates a priori information about NMR signals for most robust reconstruction of NUS data. It treats the data as one single spectrum instead of many cross sections.
SMILE 的迭代阈值重建算法:
初始化: 残差谱 R = 输入数据, 重建谱 S = 0
for iteration = 1 to maxIter:
在 R 中找到最大峰(强度 > nSigma × 噪声水平)
if 没找到 > 阈值的峰 → 停止
用洛伦兹线形拟合该峰
将拟合信号的 scaling 倍加入 S
从 R 中扣除
if max(R)/噪声 < 终止条件 → 停止
关键特点:SMILE 在每次迭代中只取一个最强峰(2D)或一组峰(3D/4D),用洛伦兹线形拟合并从残差中扣除。这与匹配追踪(Matching Pursuit)或 CLEAN 算法同理。
4.2 将 SMILE 作为 NMRPipe 函数调用
SMILE 通过 nusPipe 可执行文件加载——它是 NMRPipe 的插件(plug-in),非内建函数。安装 NMRPipe 时如果包含 plugin.smile.tZ,SMILE 会自动集成到 NMRPipe 环境中。调用方式是标准的 nmrPipe -fn SMILE。
4.2.1 程序说明
SMILE 插件(nusPipe)仅在安装 NMRPipe 时,通过 plugin.smile.tZ 文件下载并解压到 $NMRBASE 下后可用。三个环境变量(NMR_PLUGIN_FN、NMR_PLUGIN_EXE、NMR_PLUGIN_INFO)在 nmrInit.*.com 中定义了加载路径。如果安装无误,nmrPipe -fn SMILE 即可直接调用。
4.3 输入输出
xyz2pipe -in ft1/test%04d.ft1 -x
从 366 个 FT1 文件读取数据,作为沿 x 维的向量流输入 SMILE。
| pipe2xyz -out ft1/rc%04d.ft1 -x
SMILE 输出按 x 维写回 366 个 RC(重建)文件。
4.4 核心参数详解
4.4.1 维度和线程
-nDim 3
-nDim dimCount [0]— Number of Dimensions (0 for Auto).
数据维度为 3(¹H × ¹⁵N × ¹³C)。设为 Auto (0) 会从文件头自动读取,但显式指定更安全——防止头信息异常时误判。
-nThread 32
-nThread nThread [0]— Number of Threads (0 for Auto). Auto setting for -nThread is Max(1, Number_of_Logical_Cores/2).
请求 32 线程。本机实际 CPU 为 12 核,SMILE 会使用 openMP 并行化但受限于物理核心数(12)。多出来的是"超额订阅",在某些情况下因负载均衡可略微加速,但主要是师兄的脚本在服务器上跑的设置(服务器多核),在此 WSL 环境保留不改也无害。
4.4.2 采样参数
-sample nuslist
-sample sName [None]— NUS Sampling Schedule File.
指向 NUS 采样坐标列表文件。每一行是间接维坐标对:
# nuslist 格式(空格分隔,无标题行)
0 0 ← 第 1 个采样: Y=0, Z=0
46 2 ← 第 2 个采样: Y=46, Z=2
15 20 ← 第 3 个采样: Y=15, Z=20
...
22 41 ← 第 675 个采样: Y=22, Z=41
坐标顺序无关——SMILE 按采样列表而非网格顺序处理。
-sampleCount 675
-sampleCount sCount [Auto]— Number of Valid Samples Measured.
有效采样点数等于 nuslist 行数。如果该值小于实际行数,SMILE 只读前 N 行(可用于模拟更低采样率)。如果大于实际行数,SMILE 报错(我们第一次运行就用 700 碰到了)。
根据 SMILE 手册(Section 5.2):-sampleCount 也可用于从已有 NUS 数据中进一步降采样来评估重建质量与采样率的关系。
-off 0 0
-off sampOff [0 0 ...]— Offset Subtracted from Schedule Values.
采样坐标的 Y 和 Z 偏移均为 0。与 nusExpand.tcl -off 0 保持一致——nuslist 的坐标已经是 0-based,直接使用。
根据 SMILE 手册(Section 5.13):
"If indices in the sampling schedule are not zero-based, offset should be 1 for that dimension. For indirect dimensions acquired with one-point delay, shifting the schedule forward by 1 eliminates the required 360° phase correction."
4.4.3 信号检测参数
这些参数控制 SMILE 如何从残差中识别"真实信号峰":
-nSigma 4.5
-nSigma nSigma [5.0]— Noise Factor for the Signal Cutoff.
信噪比阈值:只有强度大于 4.5 倍噪声水平的峰才被选为信号。这是 SMILE 最关键的参数之一。
根据 SMILE 手册(Section 5.9):
- 手册默认值 6(旧版)→ v3.0 默认 5.0
- "Slightly lower values (4 or 5) may improve the performance for 2D and moderate size 3D spectra"
- 过低(❤️):噪声被误判为信号,重建谱含伪峰
- 过高(>8):丢弱峰,重建不完整
选择 4.5 的考量:3D CBCANH 是中等人小的 3D 谱,蛋白信号峰几十到百数量级。4.5 比默认 5.0 略低,可以抓取更多弱峰(如侧链信号),同时 4.5×σ 的统计阈值仍有 <10⁻⁵ 的概率误判噪声为信号。
对比外部模板(nSigma=5):内部脚本用 4.5 更敏感,能捕获更弱的峰。5 与 4.5 在实际谱中差异微妙——对于信噪比 >20 的强峰无差别,对信噪比 5-7 的弱峰,4.5 可以多检出一些。
-thresh 0.95
-thresh thresh [0.80]— Threshold for Signal Detection.
每次迭代中,选出的峰的强度必须至少是该迭代中最强峰的 95%(即 强度 > 0.95 × max)。根据 SMILE 手册(Section 5.8):
- 2D 谱:无关——每迭代只取 1 个最强峰(通过
-maxNPks自动限制) - 3D/4D 谱,快速重建:0.5
- 3D/4D 谱,高质量:0.95
选择 0.95 追求高重建质量——每次迭代只取最强和接近最强的峰,避免弱峰被过早扣除。代价:更多迭代次数(31 对默认的可能 15-20)。
-scaling 0.6
-scaling scaling [0.0]— Signal Downscaling Factor (0 for Auto).
扣除比例:每次迭代只扣除拟合信号的 60%。由 SMILE 帮助页定义,当前 SMILE 3.0 版本中该参数名为 -scaling(旧版手册中为 -subConst)。
为什么是 0.6 而非 1.0?
-
scaling=1.0:每次迭代完全扣除拟合信号 → 可能过减(over-subtraction)
- 拟合有误差 → 扣多了 → 残差中出现"负峰"
- 负峰会被后续迭代当作"信号"处理 → 恶性循环
-
scaling=0.6:每次只扣 60% → 保守策略
- 残差中保留 40% 的拟合信号
- 后续迭代会再次捕获 → 多次"精修"同一峰
- 代价:迭代次数更多(31 vs 可能 15-20)
-
默认值(scaling=0.0 即 Auto):SMILE 自行根据信号特性估算下缩放因子
选择 0.6 而非默认 Auto:根据 SMILE 手册(Section 5.15 注释)和实际经验,对于 3D 蛋白质谱,固定值可以避免 Auto 估算的不稳定性。0.6 是一个经验折中——足够保守不至于过减,效率足够(31 次迭代完成)。
-report 1
-report verbose [0]— Report Level: 0=No Report, 1=Output SMILE info (stderr & smile.log), 2=More SMILE info on stderr.
输出级别 1:每次迭代的 Max/Noise 值输出到 stderr,完整参数和收敛信息写入 smile.log。级别 2 会额外输出时间统计——对于初次运行了解 SMILE 行为很有用。生产环境可以设为 0 减少输出。
4.4.4 变迹参数
SMILE 在每个间接维上应用窗函数。窗函数在时域变迹,频域效果是平滑峰形、抑制截断伪峰(truncation artifacts/Gibbs ringing)。
-xApod SP -xQ1 0.45 -xQ2 0.95 -xQ3 1
-yApod SP -yQ1 0.45 -yQ2 0.95 -yQ3 1
-xApod SP:x 维(¹⁵N)使用正弦窗-yApod SP:y 维(¹³C)使用正弦窗-xQ1/-yQ1 0.45:起始相位 0.45×π-xQ2/-yQ2 0.95:结束相位 0.95×π-xQ3/-yQ3 1:指数 1(一次正弦,而非 smile1 中直接维的平方)
根据 SMILE 手册(Section 5.7):
For SP: Q1=off, Q2=end, Q3=pow.
为什么间接维用 Q3=1 而非 2?
- 直接维(smile1.com):Q3=2,压制水峰需要强变迹
- 间接维:Q3=1,一次正弦即可——没有溶剂峰需压制,主要是平滑截断伪峰
- 过高 Q3 会不必要地降低间接维分辨率
为什么两个间接维用相同的变迹参数?
没有理由不同。如果某个维度的采集点数特别少(如 ¹⁵N 只有 32 个复数),可能需要更激进的变迹(更高的 Q2 来抑制短 FID 的截断效应)。但这数据中 ¹⁵N 和 ¹³C 维的采集参数相当(50 vs 45 实数点),所以统一参数合理。
4.4.5 FT 模式参数
SMILE 重建在迭代过程中也需要对间接维做 FT。这些参数告知 SMILE 每个维度的 FT 细节:
-xP0 0 -xP1 0(x/¹⁵N 维)
-yP0 0 -yP1 0(y/¹³C 维)
相位校正全零——SMILE 重建阶段不做相位校正。间接维的相位校正在 smile3 中单独进行(-p0 -6、-p0 -3.7 -p1 13)。
-xNeg -xAlt(x/¹⁵N 维)
-xNeg:Negate Imaginaries — FT 前虚部取反-xAlt:Use Sign Alternation — FT 前符号交替
根据 SMILE 帮助 Notes:
"Use -xAlt if sign alternation is needed for FT of the given dimension."
"Use -xNeg if negation of imaginaries is needed for FT of the given dimension."
"Options -xAlt and -xNeg can be used together if needed."
对于 States-TPPI 模式采集的 ¹⁵N 维,标准的 FT 处理是 -alt -neg(与 smile1.com 中直接维不加这两参数形成对比)。-alt 处理实虚部交替符号,-neg 处理 Bruker 的 States 模式固有的虚部符号约定。
-yAlt(y/¹³C 维,有 -yNeg 缺失)
¹³C 维有 -yAlt 但没有 -yNeg。对比外部模板:外部有 -yNeg -yAlt(两个都有),内部脚本缺少 -yNeg。这说明师兄在处理中可能发现 ¹³C 维不需要虚部取反——可能是因为该数据集的 ¹³C 维采集模式约定不同。
对比 SMILE 手册(Section 5.5):
"For States-TPPI data,
-xAltshould be used.-xNegis needed if the imaginary data of a given dimension needs to be negated."
-yNeg 的缺失不是错误——表明该数据的 ¹³C 维不需要虚部取反。
4.4.6 常数时间参数
-xCT 0
-xCT xCT [0]— Number of Data Points Collected in CT. 0 = real-time increments (no CT).
CT = Constant Time(常数时间)演化。在 CT 实验中,间接维的演化时间固定,磁化强度在剩余时间内自旋锁定——优点是无 J 耦合演化导致的峰分裂,但灵敏度随时间降低。值 0 表示非 CT 实验——这是普通的三共振 CBCANH,不是 CT-CBCANH。
根据 SMILE 手册(Section 5.11):
"If -xCT is non-zero, SMILE will treat the first xCT points as CT evolution and extend the dimension by -xT points."
在 CT 模式下 SMILE 可以额外外推(extrapolate)以提高分辨率。非 CT 模式下不需要。
4.5 实际收敛过程
Iter 1: Max/Noise = 110.74 ← 最强峰是噪声的 110 倍
Iter 5: Max/Noise = 28.42
Iter 10: Max/Noise = 11.36
Iter 15: Max/Noise = 6.08
Iter 20: Max/Noise = 3.41
Iter 25: Max/Noise = 2.56
Iter 30: Max/Noise = 2.00
Iter 31: Max/Noise = 2.06
→ 停止:残余最大峰 < nSigma(4.5),迭代终止
收敛曲线分析:
- 前 5 次迭代:最强峰从 110σ 降至 28σ——SMILE 在扣除最强信号峰
- 6-20 次迭代:稳步下降(11.4σ→3.4σ)——逐步提取中等强度峰
- 21-31 次迭代:停滞在 2-3σ——残余低于 nSigma(4.5),没有可识别的信号峰
最终收敛在 Max/Noise ≈ 2.0 而非精确 0:因为真实 NMR 信号不是纯洛伦兹线形的集合——噪声、基线波动、J 耦合分裂使残差不可能归零。2σ 残余水平表示重建质量非常好(输入最强峰是 110σ)。
迭代次数 31 vs 默认 maxIter=800:算法自动停止,不受 maxIter 限制。说明参数设置恰当——阈值足够高,信号已提取完毕时自然停止。
4.6 输出:366 个 RC 文件
每个 RC 文件 81KB(vs 输入 38KB)。大小增加来自 SMILE 的默认行为:间接维自动扩展 50% 以提高数字分辨率。根据 SMILE 帮助 Notes:
"When setting an explicit value for -xT to perform extrapolation, use a value which is larger than the original time-domain size."
未显式设 -xT,SMILE 使用默认的 50% 扩展。
5. Step 4: smile3.com — 间接维傅里叶变换与 3D 谱重建
xyz2pipe -in ft1/rc%04d.ft1 -x \
| nmrPipe -fn ZF -zf 1 -auto \
| nmrPipe -fn FT -alt -neg \
| nmrPipe -fn PS -p0 -6 -p1 0 -di \
| nmrPipe -fn TP \
| nmrPipe -fn ZF -zf 1 -auto \
| nmrPipe -fn FT -alt \
| nmrPipe -fn PS -p0 -3.7 -p1 13 -di \
| nmrPipe -fn TP \
| nmrPipe -fn ZTP \
| pipe2xyz -out ft/test%04d.ft3 -x
经过 smile1(直接维 FT)和 smile2(SMILE NUS 重建)后,RC 文件中直接维(¹H)已经是频域,但两个间接维(¹⁵N 和 ¹³C)仍是时域。smile3.com 依次对这两个维做 FT。
5.1 间接维1:¹⁵N 维处理
| nmrPipe -fn ZF -zf 1 -auto
| nmrPipe -fn FT -alt -neg
| nmrPipe -fn PS -p0 -6 -p1 0 -di
ZF:同 smile1.com 中的 ZF——翻倍并圆整到 2 的幂。
FT -alt -neg:
-alt:Use Sign Alternation — 符号交替。对于 States-TPPI 模式的 ¹⁵N 维,每两个连续 FID 的符号需要交替来分离实虚部。-neg:Negate Imaginaries — 虚部取反。Bruker 的 States 模式采集的虚部符号需要取反才能正确 FT。- 回顾
bruk2pipe中-yMODE Complex定义了 ¹⁵N 的采集模式为 States-TPPI,决定了 FT 需要-alt -neg。
PS -p0 -6 -p1 0:
-p0 -6:零阶相位 −6°。间接维的残留相位误差。(对比外部模板的 0°——内部脚本经调优后用了实际测量的 −6°。)-p1 0:一阶 0°。间接维无频率线性相位误差(与直接维不同,间接维由 States-TPPI 正交检测,理想情况下不需要一阶校正)。
5.2 轴交换:TP
| nmrPipe -fn TP
根据 nmrPipe -fn TP -help:
TP: 2D Plane Transpose.
-auto— Choose Mode Automatically (Default).
为什么需要 TP?
NMRPipe 的处理管道只能操作当前最后两个维度(对 3D 数据来说是 y 和 z)。smile3 需要依次对 ¹⁵N 维和 ¹³C 维做 FT:
- 当前维度顺序:(x=HN, y=¹⁵N, z=¹³C),当前 y 维 = ¹⁵N → FT 作用于 ¹⁵N ✓
- TP 交换 y 和 z → (x=HN, y=¹³C, z=¹⁵N),当前 y 维 = ¹³C → FT 作用于 ¹³C ✓
- TP 再次交换 → (x=HN, y=¹⁵N, z=¹³C),恢复原始顺序
-hy 模式:TP 有 -hyper 模式用于超复数数据(States 模式有实虚两个块)。-auto 自动判断是否需要超复数转置。
5.3 间接维2:¹³C 维处理
| nmrPipe -fn ZF -zf 1 -auto
| nmrPipe -fn FT -alt
| nmrPipe -fn PS -p0 -3.7 -p1 13 -di
FT -alt(无 -neg):¹³C 维只有 -alt,无 -neg。这与 smile2.com 中 -yAlt 有但 -yNeg 缺失一致——该数据的 ¹³C 维不需要虚部取反。
PS -p0 -3.7 -p1 13:
-p0 -3.7:零阶 −3.7°。¹³C 维残留相位。-p1 13:一阶 13°/point。这是唯一有非零一阶相位校正的维度。13°/point 的线性相位意味着 ¹³C 维有约 13° 的频率相关相位累积。
为什么 ¹³C 维需要一阶相位校正(p1=13)而 ¹H 和 ¹⁵N 不需要?
根据 bruk2pipe 采集参数,¹³C 维的采集模式是 States-TPPI(与 ¹⁵N 不同——注意 ¹⁵N 的 FT 需要 -neg 而 ¹³C 不需要)。一阶相位误差来自:
- 脉冲序列中 ¹³C 通道的有限延迟
- 数字滤波器对 ¹³C 通道的处理(频率更高,延迟效应更显著)
- 不同的脉冲形状和功率
对比外部模板(全零相位):外部模板是通用脚本,相位未调优。内部脚本包含实际手动调相的结果——这些值是师兄或自动相位算法针对此数据确定的。
5.4 恢复轴顺序
| nmrPipe -fn TP
| nmrPipe -fn ZTP
- 第二个 TP:交换回 (x=HN, y=¹⁵N, z=¹³C)
- ZTP:根据
nmrPipe -fn ZTP -help:
ZTP: 3D Matrix Transpose. XYZ2ZYX.
ZTP 是 3D 专用转置——交换 x 和 z 轴(XYZ → ZYX)。在连续 TP→FT→TP 后,数据的内部维度标签可能错位。ZTP 确保最终输出恢复为 (x=HN, y=¹³C, z=¹⁵N) 的正确 NMRPipe 3D 顺序。
5.5 输出 3D 谱和投影
| pipe2xyz -out ft/test%04d.ft3 -x
产出 256 个 2D 平面文件(236KB/个),构成完整 3D CBCANH 谱。
proj3D.tcl -in ft/test%04d.ft3
根据 NMRPipe 脚本库,proj3D.tcl 是 TCL/TK 脚本,做 Skyline 投影——取每个 (i,j) 位置沿第三维的最大值,生成 2D 投影。三个投影文件:
| 投影 | 维度 | 文件 |
|---|---|---|
| HN/13C | ¹H × ¹³C | HN.13C.dat |
| HN/15N | ¹H × ¹⁵N | HN.15N.dat |
| 13C/15N | ¹³C × ¹⁵N | 13C.15N.dat |
6. 验证与可视化
6.1 与师兄输出对比
| 项目 | 我们的输出 | 师兄的输出 | 匹配 |
|---|---|---|---|
| FT1 数量 | 366 | 366 | ✅ |
| FT1 大小 | 38,048 bytes | 38,048 bytes | ✅ |
| test0001.ft1 md5 | 575fa3ae... |
575fa3ae... |
✅ |
| test0200.ft1 md5 | cc833515... |
cc833515... |
✅ |
| test0366.ft1 md5 | 8a1fef50... |
8a1fef50... |
✅ |
| RC 数量 | 366 | zip 中无 RC(未打包) | — |
| FT3 数量 | 256 | zip 中无 FT3(体积太大未打包) | — |
三个不同位置 FT1 文件逐字节 md5 完全一致 = 谱的数学等价性已验证。
6.2 用 nmrDraw 查看
tcsh -c "source ~/nmr/com/nmrInit.linux239_64.com; nmrDraw HN.13C.dat"
在 WSLg 下会自动弹出 X11 窗口。这是 ¹H-¹³C 投影的 2D 谱图。也可以用 POKY 打开 UCSF 格式的输出进行后续的峰指认和结构分析。
7. 参考文献与来源
| # | 来源 | URL | 用于查证 |
|---|---|---|---|
| 1 | NMRPipe Big Reference Page(Frank Delaglio) | https://www.nmrscience.com/ref/index.html | 所有程序和处理函数:bruk2pipe(212次使用)、SP、ZF、FT、PS、EXT、TP、ZTP、MULT。独立函数页面在 /ref/nmrpipe/ 下(小写) |
| 2 | NMRPipe Install Guide | https://www.ibbr.umd.edu/nmrpipe/install | 安装依赖、-AMX vs -DMX 说明 |
| 3 | SMILE 官方页面(NIH/Bax 组) | https://spin.niddk.nih.gov/bax/software/SMILE/ | SMILE 算法概览、参数默认值 |
| 4 | SMILE Manual PDF(2015) | https://spin.niddk.nih.gov/bax/software/smile/smile_manual.pdf | 详细参数文档、收敛行为说明。注意该手册较老——部分参数名和默认值已在 SMILE 3.0 中更新 |
| 5 | POKY GitHub | https://github.com/pokynmr/POKY | POKY 下游分析工具 |
| — | SMILE 论文 | Ying et al., J. Biomol. NMR 68, 101-118 (2017) | SMILE 算法原理和验证 |
| — | NMRPipe 论文 | Delaglio et al., J. Biomol. NMR 6, 277-293 (1995) | NMRPipe 系统设计 |
所有参数解释均可通过程序的 -help 输出交叉验证。例如:
/home/steven/nmr/nmrbin.linux239_64/nmrPipe -fn SP -help
/home/steven/nmr/nmrbin.linux239_64/nusPipe -fn SMILE -help
/home/steven/nmr/nmrbin.linux239_64/bruk2pipe -help

浙公网安备 33010602011771号