Illumina 社のアレイデータを扱うのであれば GenomeStudio を使うことが多いでしょう。この GenomeStudio には C# スクリプト機能があり,高度な解析を行うのに利用できます。しかしドキュメントが一切ないので, Visual Studio のインテリセンスやオブジェクトブラウザーなどを活用して API を調べながらスクリプトを構築してやる必要がありますが,基本的な使い方は GC Content Polynomial Fit v1.4.6 C# Script for GenomeStudio を見ながら推測できます。
きちんと調べたわけではありませんが, GenomeStudio は .NET 3.5 で, C# スクリプトをメモリー上でコンパイルして実行しています。参照アセンブリーの指定ができるので, F# で DLL を作成して,それを C# から呼び出すというのが簡単でしょう。
必要なものは以下の通りです。
- GenomeStudio の DLL
- 自分で作成した DLL
- DLL を呼び出すスクリプトファイル
以下詳しく見ていきます。
まず GenomeStudio の DLL ですが,これは GenomeStudio をインストールしたフォルダに入っています。
- AnalyteModelLib.dll
- ClusterAlgInterface.dll
- Common.dll
- FrameworkClassLibrary.dll
- FrameworkInterfaceLibrary.DLL
- IGVInterface.dll
- Table.dll
- UIUtils.DLL
GenomeStudio の共通 DLL のほかに, Modules フォルダ内にプロジェクトタイプごとの拡張 DLL が入っています。 Genotyping モジュールの場合は以下の DLL を参照します。
- Modules\BSGT\GenotypingBSM.dll
さらに, GenomeStudio は Windows Forms なので,以下の DLL も参照しましょう。
- System.Drawing
- System.Windows.Forms
これらを Visual Studio で参照すれば,インテリセンス上に必要な関数が表示されると思われます。不足する場合は適宜探して追加します。
以上の DLL を参照して関数を定義した独自 DLL を作成し,それを C# スクリプトから呼び出す形にします。上で述べたように, GenomeStudio は .NET 3.5 なので,作成する DLL も .NET 3.5 でビルドします。
C# スクリプトは, Execute ボタンを押せばわかるように,おおむね以下のような形に展開されます。
public class Eval { public object EntryPoint(IFramework framework, string outputFilename) { object ret = null; // user code here return ret; } }
最も重要なのは, C# スクリプトを包含するメソッドの第一引数である framework
になります。これを F# 側に渡してやる形でロジックを完成させます。たとえば以下のような形式になるでしょう。
GenomeStudioExtension.DoSomething(framework);
上のコードの // user code here
の部分にこのコードが来ることになります。必要に応じてパラメーターを追加してユーザーに変更してもらうと良いでしょう。
あとは単純にロジック側の F# を書くだけです。上の C# スクリプトに対応させると以下のような感じになります。
module GenomeStudioExtension open Illumina.GenomeStudio [<CompiledName("DoSomething")>] let doSomething (framework:IFramework) = // logic here
作成した DLL は,本来どこに置いても良いのですが,簡単のために Modules 内に配置してもらうと良いかもしれません。
作成した DLL を呼び出すコードを C# スクリプトという形で配布します。 C# スクリプトは以下のファイルからなります。
- .cs ファイル (User Script): スクリプト本体。
- .adl ファイル (Additional Methods): 追加メソッド。使わない。
- .bdl ファイル (GenomeStudio DLLs): GenomeStudio 内の DLL。 GenomeStudio のインストールフォルダからの相対パスで指定。
- .sdl ファイル (System DLLs): その他の DLL。
- .usg ファイル (Using):
using
のリスト。一部は自動でusing
されている。
拡張子を除いて同じ名前のファイルを作成します。 Load すると,それぞれのファイルの内容が,コントロール内に読み込まれ,あとは Execute ボタンを押せば実行できるという状態になります。
注意すべき点としては, plaint text ではなく, rich text format (RTF) でファイルを作成するということがあります。 F# で plain text を RTF に書き出すには,以下の方法が簡単だと思われます[A]。スクリプトは plain text で作成しておいて,配布時に変換するようにしておけば良いでしょう。
open System.IO open System.Windows.Forms // you can choose (path:string) instead of (stream:Stream) let createRtf (stream:Stream) text = use richTextBox = new RichTextBox () richTextBox.AppendText (text) richTextBox.SaveFile (stream, RichTextBoxStreamType.RichText)
配布時は, Modules 内の決まった場所に DLL を配置してもらい, .bdl ファイルにその DLL への参照を追加しておき,スクリプトファイル群はユーザーの好きな場所に保存してもらうのが良いのではないでしょうか。
脚注
- もっと良い方法があれば教えてください。 [↩]