前回のブログでは、JASONの外部コマンド処理としてpythonを使用し、NMR処理過程のどのポイントでもデータに対して操作を実行できることを説明しました。これは、例えば新しいデータ処理のアプローチを開発するユーザーにとっては、非常に強力でかつ柔軟なツールとなります。

しかし、もしあなたのお気に入りのプログラミング言語がpythonでなかったら?JASONの外部コマンド処理機能は、HDF5フォーマットのデータを読むことができるすべての外部プログラムやスクリプトにデータを送ることができます。これには、最新のプログラミング言語の大半(そしてそうでないものも!)が含まれます。

このブログでは、MATLABとRスクリプトの両方をJASONから呼び出し、前のブログで説明したのと同じ操作を実行する方法を紹介します。MATLABはネイティブでHDF5ファイルの読み書きをサポートしていますが、Rは追加のライブラリをインストールする必要があります。このブログで紹介する例では、rhdf5ライブラリを使用します。

MATLABスクリプトは、前回説明したinvert.py pythonスクリプトと概念的に非常に似ています。MATLABファイルはデータに適用される関数を実装しています。MATLABはすでにinvert()と呼ばれる関数を持っているので、誤って間違った関数を呼び出さないように、この関数に別の名前、この場合はinvertspec()を付けます。h5read()関数とh5write()関数は、HDF5ファイルからデータを読み書きします:

A MATLAB example for using the External command in JASON

前のブログ記事のpythonスクリプトのように、データセットのサイズを変更しないので、元のデータを変更後のデータに置き換えるだけです。

JASONからこのスクリプトを呼び出すのは簡単です。外部コマンドの処理項目を処理リストに追加し、いくつかのオプションを設定するだけです。MATLABの場合、コマンドは単に “matlab “で、引数は以下の通りです: -nojvm -batch “invertspec(‘$TMPFILE’)””です。nojvm -batchフラグは、メインMATLAB GUIの起動を停止し、MATLABカーネルのみを使用してバックグラウンドで処理が行われるようにします。

 

関数の引数がMATLABに渡される方法のため、JASONが送信しようとする一時ファイルの名前を明示的に指定し、文字列の最後に括弧を閉じなければなりません。しかし、セキュリティ上の理由から、このファイル名は処理リストが実行されるたびにランダムに生成されます。では、どうやってこれを実現するのか?ですが、JASONには、外部コマンド用に呼び出される特別な変数があり、JASONはこれをランダムに生成されたファイル名に置き換えます。

このMATLABスクリプトを処理リストに含めた結果は、前のブログ記事のpythonスクリプトを使った結果と同じになるはずです。

An image of two spectra in the JEOL JASON NMR Software. The spectrum on the left is phased positively whilst the spectrum on the right is inverted

R言語は一般的な統計解析に非常によく使われており、メタボロミクスのコミュニティでも多用されています。同じ例を今度はRスクリプトとして実装します。HDF5ファイルを読み込むには追加のライブラリが必要で、この場合はrhdf5ライブラリです。rhdf5ライブラリがインストールされていない場合は、Rプロンプトでinstall.packages(“BiocManager”)とBiocManager::install(“rhdf5”)を実行すればインストールされます。

Rスクリプトの一般的なレイアウトは、pythonやMATLABのバージョンと同じです。commandArgs() 関数を使ってファイル名を取得し、rhdf5ライブラリのh5read()関数とh5write() 関数を使って、pythonやMATLABの例と同じ操作をデータに対して行います。

 

 

An R example for using the External command in JASON

この場合、JASONから実行したいコマンドはRscriptコマンドです。これはRのlightweightバージョンで、インタラクティブ・インターフェースを一切起動しません。前の例でGUIを表示させないためにMATLABに渡した引数と同様の機能になります。

An image of two spectra in the JEOL JASON NMR Software. The spectrum on the left is phased positively whilst the spectrum on the right is inverted

MATLABスクリプトとRスクリプトの出力は、前回の記事のpythonスクリプトの出力と同じです。異なる言語の間で、HDF5バインディングのサポート方法や、高レベル/ユーティリティ関数とHDF5データへの低レベルのアクセスとのバランスの取り方などに微妙な違いがありますが、外部処理にどのプログラミング言語を使うかは問題ではありません。あなたのお好きなプログラミング言語において利用可能なHDF5ライブラリがあるかを確認してみてください!

データがスクリプトからJASONに戻されると、残りの処理過程が適用され、結果がCanvasに表示されます。これで、JASONで可能な通常の可視化、分析操作をデータに対して行うことができます。

このシリーズの次の記事では、より高度なデータ処理を外部コマンドの実装法を見ていきます。

このブログで使用したスクリプトはこちら(https://github.com/ijday/JASON-External_command)で入手可能です。MATLAB版とR版のinvert.pyとdouble.pyが含まれています。