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インタフェースのタスクリスト中のタイトルが数秒で書き換わります。ちなみに日本語は通りません [sad]
遊び終わったらデータベースへの接続を切断しておきます。

wish> dbccp4i_close_project PROJECT
 

ドキュメントをちゃんと読んだ訳ではないので結構強引な使い方かもしれませんが、やっぱりCCP4は奥が深いですね・・・

参考サイト  

メモ  

内部関数を使わずにデータベースを操作する。
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プロセスがシャットダウンされる。