CCP4i APIを使ってみる
CCP4iは奥が深いインタフェースですが、このインタフェースのAPI(Application Programming Interface)を使ってみます。
通常はCCP4iのタスクとして実行しますが、ここではbltwishプロンプトから使ってみます。まだ遊んでみただけなのでとりあえずCCP4iのデータベースを操作するメソッドをちょっとだけ。たぶん、こんな使い方はイレギュラーだと思います(^^;。
なお、環境はVer.6.1.1です。
初期化
CCP4i APIを使用するためにはファイルをインポートする必要があります。必要なファイルは以下の通りです。
最低限これらのファイルをsourceします。なお、system.tclを読み込む際にはOPSYSを設定します。だいたいこんな感じ。
% bltwish
でbltwishプロンプトに入った後、必要なファイルをsourceします。
wish> array set system {OPSYS UNIX} wish> source [file join $env(CCP4I_TOP) bin $system(OPSYS) startup.tcl] wish> source [file join $env(CCP4I_TOP) src system.tcl] table <- 戻り値 wish> source [file join $env(CCP4I_TOP) src utils.tcl]
これが基本の初期化みたいです。はじめのset systemでUNIXをセットし、続いてstartup.tclで必要な変数が代入されます。
dbCCP4iを使う
CCP4iはdbCCP4iというデータベースを使いタスク情報の管理をしています。まずはこのデータベースにAPIを使ってアクセスしてみます。なお、この時にはdbCCP4iが起動してる必要があるので、CCP4iを起動しておきます。
上記の初期化に続いて、
wish> source [file join $env(CCP4I_TOP) src database.tcl] wish> source [file join $env(CCP4I_TOP) src projectdb.tcl] wish> DbInitialise wrong # args: should be "dbccp4i_open_project project args wish> dbccp4i_open_project PROJECT 1 <- 0の時は接続できてません。
で、プロジェクトPROJECTに接続されるはずです。例えばタスクのタイトルを取得してみます。
wish> dbccp4i_get_data PROJECT 16 TITLE Rigid body refinement using isotropic B factors
こんな感じで取得できます。また、タイトルをセットする場合は、
wish> dbccp4i_set_data PROJECT 16 TITLE "This is TEST" 1
とすると、開いているCCP4iインタフェースのタスクリスト中のタイトルが数秒で書き換わります。ちなみに日本語は通りません
遊び終わったらデータベースへの接続を切断しておきます。
wish> dbccp4i_close_project PROJECT
ドキュメントをちゃんと読んだ訳ではないので結構強引な使い方かもしれませんが、やっぱりCCP4は奥が深いですね・・・
参考サイト
- CCP4i Documentation for Programmers -- http://www.ccp4.ac.uk/dist/ccp4i/help/programmers/intro.html
メモ
内部関数を使わずにデータベースを操作する。
tclshをインタラクティブモードで使用した。
初期化
tclsh> array set system {OPSYS UNIX RUN_MODE script} tclsh> source [file join $env(CCP4I_TOP) bin $system(OPSYS) startup.tcl] tclsh> source [file join $env(CCP4I_TOP) src system.tcl] tclsh> source [file join $env(CCP4I_TOP) src utils.tcl] tclsh> source [file join $env(CCP4I_TOP) src CCP4_utils.tcl] tclsh> source [file join $env(CCP4I_TOP) src database.tcl] tclsh> source [file join $env(CCP4I_TOP) src projectdb.tcl]
DBへの接続初期化
DbInitialise()でデータベース接続を初期化するとdbccp4iコマンドが自動的に起動する。
tclsh> SetCurrentProject M2 <-- 対象となるプロジェクトを選択 tclsh> DbInitialise <-- dbCCP4i初期化(dbccp4i起動) 12:24:36 DbOpen: db loaded okay 12:24:36 DbInitialise: CURRENT_PROJECT = M2 12:24:36 DbInitialise: PROJECT_DATABASE = /home/nobrin/xtal/M2/MR2/CCP4i/CCP4_DATABASE
データ取得
tclsh> DbGetJobData 2 TITLE TEST
データ入力
DbUpdateStatus()を実行しないとデータベースに反映されないようだ(コミットのようなもの?)。
tclsh> DbSetJobData 2 TITLE "タイトル" tclsh> DbUpdateStatus <-- 変更を反映する
接続断
tclsh> DbClose <-- 接続終了 12:24:48 DbClose: closing M2 tclsh> exit
現行プロセスを終了してしばらくするとdbccp4iプロセスがシャットダウンされる。