COOTのスクリプティング機能を使う
COOTには強力なスクリプト機能があり、スクリプティングによりCOOTの動作を制御することができます。通常はウィンドウを操作してマップのパラメータなどを変更しますが、スクリプトで制御することでCOOTの起動時などに決まった動作を行わせることも可能です。設定次第ではExtensionsに組み込むこともできると思います。スクリプト言語はPython(拡張子.py)およびScheme(拡張子.scm;Embedding guileインタプリタ)のようです。
なお、Linux版でPythonを使うときはインストールにあるようにPython対応版を用意する必要があります。Windows版でSchemeを使う方法は試してません・・・
初期化スクリプト
COOT使うときに自分好みのセッティングがあるという人は多いと思います。が、普通に使っている場合、そのセッティングは保存されませんね(たぶん)。ドキュメントを読んでいたら、COOTにもシェルなどと同じく初期化スクリプトがあるということを知りました。
- Pythonの場合:ホームディレクトリの.coot.pyファイル(例えば、/home/nobrin/.coot.py)
- Schemeの場合:ホームディレクトリの.cootファイル(例えば、/home/nobrin/.coot)
それぞれの言語で記述すればいいみたいです。私は今のところ初期化スクリプトは使っていませんが、ちょっとSchemeによるスクリプティングを体験してみましたので、そのメモを書いておきます。
使ってみた
CNSとCOOTを組み合わせる
とりあえずCOOTのスクリプト機能を試すためにちょっとしたテストをしてみました。私は普段精密化にCNSを使っているのでrefine.inpを流した後COOTを起動するまでを自動化してみました。
動作の流れ
一連の動作は以下のようになります。
- CNSでrefine.inpを流す
- 出力されたrefine.pdbにPDBSETでELEMENTカラムを追加する
- MAPMANでマップファイルをCCP4形式にする
- COOTで変換後のrefine.pdbおよびマップを読み込む
- 読み込んだマップのパラメータをセットする <-- ここでCOOTのスクリプト機能を使います
これを実装してみました。
実際のファイル
必要なファイルは
- 実行用シェルスクリプト(refine.inpを流し、ファイルフォーマットを変換)
- COOT用スクリプトファイル
になります。
- refproc (実行用シェルスクリプト)
1: #!/bin/sh 2: cns < refine.inp | tee refine.log 3: pdbset xyzin refine.pdb xyzout refine_ccp4.pdb <<EOS 4: EOS 5: mapman <<EOS 6: re m1 refine_2fofc.map cns 7: wr m1 2fofc.map ccp4 11: re m2 refine_fofc.map cns 12: wr m2 fofc.map ccp4 13: quit 14: EOS 15: coot --pdb refine_ccp4.pdb --map 2fofc.map --map fofc.map --no-state-script --script cnsref.scm
2行目でCNSを流します。3-14行目でファイルを変換、15行目でCOOTを起動します。この時、refine_ccp4.pdb、2fofc.map、fofc.mapを読み込み、読み込み後にcnsref.scmというCOOTスクリプトを実行します。続いてcnsref.scmファイルの内容を示します。
- cnsref.scm (COOTスクリプト;Scheme)
1: ; Coot scripting test by Nob-rin. 2: (set-map-is-difference-map 2) 3: (set-contour-level-in-sigma 2 2.5) 4: (set-map-colour 2 0.3 0.84 0.24)
ファイルを読み込んだ後にこのコマンドが実行されます。
- 1行目:セミコロン(;)はコメント行です
- 2行目:Map 2(ここでは2番目に読み込んだfofc.map)をディファレンスマップとします
- 3行目:σ=2.5にセットします
- 4行目:マップの色を緑っぽい色にします
これで一連の動作は完了します。実はCOOTスクリプトで外部コマンドも実行できるようなので、REFMACを走らせるようにCNSを走らせることも(おそらく)可能だと思います。Pythonで作るかSchemeで作るか、というところですね*1。
ドキュメントをざっと見たところ、もっと本気のスクリプトを書けば本格的な機能も作れるみたいです。詳しくは関連サイトのドキュメントを参考にしてみてください。便利機能を作ればCOOTに組み込まれるかも?
スクリプトの開発
COOTでスクリプトコマンドを実行させるにはメニューから[Calculate] -> [Scripting...]でスクリプティングウィンドウが開きます。ここで1行ずつコマンドを実行することが可能です。また、[Calculate] -> [Run Script...]で作成したスクリプトファイルを実行することができます。
なお、COOTに組み込まれている機能はスクリプトとして実装されているものもあり、それらはCOOTインストールディレクトリ/share/coot/python/またはscheme/に格納されているようです。高機能なスクリプトを作成する際の参考になると思います。
関連サイト
- スクリプト機能に付いての解説 -- COOTユーザーマニュアルのScripting
- スクリプトサンプル -- COOT Wiki内のサンプルスクリプト
- COOTリファレンスマニュアル -- スクリプトで使えるコマンドリスト