これまでこのシリーズでは、JASONが処理中のデータを外部プログラムに渡すことで、JASON内では現在利用できない処理を実行できることを紹介しました。今回は、t1ノイズ除去のための処理関数をpythonでプロトタイピングした後、開発チームがJASONのメインコードに実装した実際のアプリケーションを紹介します。

高ダイナミックレンジのサンプルは、2次元スペクトルの間接観測軸の方向に好ましからざる様相を呈することがあります。これはいわゆるt1ノイズと呼ばれるもので、各t1インクリメント間の信号強度の小さな変動から生じます。これらの変動はt1では変調されないため、スペクトル上のt1/F方向に平行な縞模様として現れ、かつスペクトル中の強い信号と関連しています。最新の分光計ハードウェアはこのようなアーティファクトを大幅に減少させますが、データ処理段階で除去する必要がある場合もあります。

 

t1ノイズを抑制するアルゴリズムは数多く存在しますが、このブログでは、ManolerasとNortonが提案し、Journal of Biomolecular NMRに掲載されたものを紹介します(J. Biomol. NMR 2 (1992) 485-494)。このアプローチでは、t1/F1軸に平行な各トレース(すなわち各列)の平均ノイズが決定され、次にt2/F2次元に沿って(すなわち各行に)、先に決定されたノイズプロファイルから導出された重みを用いて重み付けフィルターを適用します。

ManolerasとNortonのアルゴリズムはpythonスクリプトで実装されています。尚、このアルゴリズムはphase sensitiveデータにのみ適しています。

 

h5pyライブラリは、JASONで生成された一時的なHDF5ファイルにアクセスするための関数を提供し、NumPyは、配列に対する標準的な数学演算のために一般的に使用されているライブラリです。これに続いて、平滑化アルゴリズムに関連するいくつかのパラメータが設定されます。これらは、ノイズ除去の強さを制御するためにユーザーが調整することができま

できますが、これらの値は合理的な結果を提供し、元の論文で使用されたものと同様です。

 

Some Python code for using the JASON External command for t1 noise reduction

次にJASONから渡されたファイルが開かれ、スペクトルの実部分がpythonの配列に抽出されます。またこの時、データセットのサイズが決定され、最終結果を格納する空の配列が作成されます。

Some Python code for using the JASON external command for t1 noise reduction

ManolerasとNortonのアルゴリズムには2つの部分があります。1つ目は、スペクトルの各列の平均ノイズを決定します。これは、データセットの各列をループし、etaパラメータで設定されたある閾値以上のピークを除去することで行われます。

Some Python code for using the JASON external command for t1 noise reduction

アルゴリズムの第2段階は、前のステップで求めた平均ノイズレベルによって決定される重み付けで、データにスムージング・フィルタを適用することです。このとき、アルゴリズムはスペクトルの各行をループします。このアルゴリズムは、スムージングの最大値が1であるため、データへの積極的な変更は不可能です。

 

Some Python code for using the JASON external command for t1 noise reduction

最後に、平滑化されたデータは、一時的なHDF5ファイルに書き戻され、JASONに戻され、最終的な処理が施されます。

Some Python code for using the JASON external command for t1 noise reduction

下の図は、このフィルターを適用する前と後の2-エチルインダノンの同じ1H-1H NOESYスペクトルを示しています。データは同じ等高線レベルでプロットされています。

Two 2D NMR spectra showing the reduction of t1 noise. The figure shows the same 1H-1H NOESY spectrum of 2-ethyl indanone before (on the left) and after (on the right) the application of this filter. The data are plotted at the same contour level.

このスクリプトを使用して、JASONにt1ノイズ除去アルゴリズムを実装しました。この処理項目はピーク検出の点で少し改良されており、マグニチュードモードと位相感度の両方のデータセットで動作します。このブログ記事が、pythonのシンプルさとパワーを使って、新しい処理関数のプロトタイプを迅速に作成し、テストできることを示してくれることを願っています。

この一連の投稿で使用したスクリプトはこちらから(https://github.com/ijday/JASON-External_command)入手でき、独自の外部コマンドのベースとして使用できます。