我有一些 Bruker NMR 光谱,我用它们来创建一个程序作为项目的一部分。我的程序需要在实际频谱上工作。所以我将布鲁克核磁共振光谱的 1r 文件转换为 ASCII。对于肉碱,这是 ascii 文件的样子(这不是完整列表。完整列表有数千行。这只是一个快照):
-0.807434 -23644
-0.807067 -22980
-0.806701 -22967
-0.806334 -24513
-0.805967 -27609
-0.805601 -31145
-0.805234 -33951
-0.804867 -35553
-0.804501 -35880
-0.804134 -35240
-0.803767 -34626
-0.8034 -34613
-0.803034 -34312
-0.802667 -32411
-0.8023 -28925
-0.801934 -25177
-0.801567 -22132
-0.8012 -19395
这就是频谱:(来源:wisc.edu)
我的程序必须从这些数据中识别出峰值。所以我需要知道如何解释这些数字。以及它们如何准确地转换为光谱中的适当值。到目前为止,这是我学到的:
1.) 第一列代表光谱点位置(ppm)
2.) 第二列代表每个峰的强度。
3.) 请注意,在第二列中有一些数字不是完全对齐但更接近第一列。例如:-34613、-28925、-19395。我认为这很重要。
为了充分披露——我正在用 R 进行编程。
注意:我也在 Biostar 上问过这个问题,但我认为我在这里比那里更有机会得到答案,因为似乎没有多少人在那里回答问题。
编辑:这是我发现的一种解决方案是合理的:
一位朋友给了我一个想法,即使用 awk 脚本来检查文件中强度从正变为负的确切位置,以找到局部最大值。这是一个工作脚本:
awk 'BEGIN{dydx = 0;}
{
if(NR > 1)
{ dydx = ($2 - y0)/($1 - x0); }
if(NR > 2 && last * dydx < 0)
{ printf( "%.4f %.4f\n", (x0 + $1)/2, log((dydx<0)?-dydx:dydx)); } ;
last=dydx; x0=$1; y0=$2
}' /home/chaitanya/Work/nmr_spectra/caffeine/pdata/1/spectrumtext.txt | awk '$2 > 17'
如果你不明白,请告诉我。我会改进解释。
另外,我问了这个相关的问题。