XDSを使ってみる
XDSはHKL2000のようなGUIを持たないデータ処理&スケーリングプログラムパッケージです。毎年年末にプログラムの期限が切れるので、忘れずに12月になったら最新版を取得しましょう。
玄人好みのプログラムですが、自動化などにも使われているようです。細かなパラメータ等は自動で決定してくれるので慣れると便利な気がします。
使用する手順
- 指数付けおよび積分(XDS)
- 複数データのスケーリングおよびマージ(XSCALE)
- 必要な形式に変換(XDSCONV)
XDS Packageにはいくつかのプログラムが含まれており、基本はXDS、XSCALE、XDSCONVを使います。また、プログラムを実行する際にはインプットファイルを用意しますが、インプットファイル名は固定されており、それぞれ実行ディレクトリにあるXDS.INP、XSCALE.INP、XDSCONV.INPが使用されます。処理の出力も基本的には実行ディレクトリになります。単一のデータセットのみを使う場合はXSCALEの手順は不要みたいです。
プレディクション(観測反射位置と計算反射位置の重ね合わせ)が見れないとどうしても嫌だ、という方はHKL2000とかiMOSFLMを使いましょう。
なお、簡単に処理できるXDSME(XDS Made Easier)ってのがあるようです -- http://code.google.com/p/xdsme/
XDSの実行
プログラムパッケージ名にもなっているXDSですが、実際のXDSプログラムは指数付けおよび積分を行うプログラムです。インプットファイルを作成し、プログラムを実行します。処理結果ファイルやログファイルはプログラムを実行したディレクトリに出力されるので、適当なディレクトリを作成したほうがいいでしょう。XDSはバージョンにより出力内容が結構変わるみたいなので、バージョンが異なると多少手順が変わるかもしれません。ここでは2010-12-06版(2011-12-31まで)を基にしています。
インプットファイル雛形の取得
XDSインプットファイルはゼロからでも作れますが(相当大変そうですが・・・)、SPring-8およびPFの場合はINPファイルがビームラインのホームページに用意してあるのでそれらを使います。ビームラインや検出器によって異なるので、どれを使えばいいかよく分からない場合はビームラインスタッフに確認しましょう。
取得したファイルを修正して処理を流します。
- PF -- http://pfweis.kek.jp/~protein/manual/software/process.html
- SPring-8 -- http://bioxtal.spring8.or.jp/ja/manuals/analysis_ja.html
- XDSサイト内のINPファイルテンプレート -- http://xds.mpimf-heidelberg.mpg.de/html_doc/xds_prepare.html
インプットファイルを自分で書く場合は相当難しいので別ページに紹介することにします -- インプットファイルの作成
インプットファイルの修正
いろいろ細かい点が修正できますが、最低限修正する項目は、カメラ距離、オシレーション振幅、測定波長、空間群および格子定数、ファイル名および枚数です。なお、!以降はコメントとして無視されます。
ここではSPring-8 BL41XU(Q315)のインプットファイルを例に説明します。ここで挙げた項目とパラメータ名の対応は以下の表の通りです。
パラメータ名 | 内容 | 例 |
DETECTOR_DISTANCE | カメラ距離(mm) | 100 |
---|---|---|
OSCILLATION_RANGE | オシレーション振動角(°) | 1.00 |
X-RAY_WAVELENGTH | 測定波長(Å) | 1.0000 |
SPACE_GROUP_NUMBER | 空間群番号(不明の場合は0) | 154(この場合P3221) |
UNIT_CELL_CONSTANTS | 格子定数(上が0なら無視される) | 80.684 80.684 100.314 90.000 90.000 120.000 |
NAME_TEMPLATE_OF_DATA_FRAMES | ファイル名テンプレートおよびフォーマット | ../nn37_p01_??????.img DIRECT TIFF |
DATA_RANGE | ファイル名の数字範囲(StartからEnd) | 1 180 |
テンプレートにはコメントが書いてあるのでそれに従えばよいでしょう。
SPACE_GROUP_NUMBER、UNIT_CELL_CONSTANTSはインデックス(指数付け)の目安として使用されます。不明の場合はSPACE_GROUP_NUMBER=0にしておくと良いでしょう。なお、XDSMEを使うと処理後、空間群をPOINTLESSを使って決めてくれるようです。
作成したインプットファイルはXDS.INPという名前(大文字)で保存します。
インプットファイルの修正(その2)
複数のデータセットをマージしたい場合、P31など軸の取り方が複数ある空間群ではデータセット毎に軸が異なってしまう場合があります。その時、合わせる手系をXDSに知らせるため、REFERENCE_DATA_SETでマージ先のHKLファイルを指定すると軸を合わせてくれるようです(たぶん)。例えばデータセットとしてxds1およびxds2がある場合、xds1に合わせるならxds2/XDS.INPのREFERENCE_DATA_SETを以下のようにします。
REFERENCE_DATA_SET= ../xds1/XDS_ASCII.HKL !Name of a reference data set (optional)
こうすることで軸を統一することができます。
インプットファイルの修正(いろいろ)
その他細かい修正が可能です。
パラメータ名 | 内容 | 例 |
INCLUDE_RESOLUTION_RANGE | 分解能範囲(0までにした場合は自動判断) | 30.0 0.0 |
---|
プログラムの実行
読み込まれるインプットファイルはXDS.INP固定なので、プログラムを実行するだけです。
% xds_par | tee xds.log
とするだけで、(必要なら)指数付け、積分、までやってくれます。
並列処理ができない環境の場合はxds_parではなく、オリジナルのxdsを使う事になりますが、処理時間は当然長くなります。
処理の結果を見てみる
- 指数付けの結果
- プログラム出力の最後の方に、
THE DATA COLLECTION STATISTICS REPORTED BELOW ASSUMES: SPACE_GROUP_NUMBER= 150 UNIT_CELL_CONSTANTS= 72.80 72.80 97.46 90.000 90.000 120.000
という感じで出力されます。
処理が終わると、実行したディレクトリにいくつかのファイルが出力されます。
この中で重要なのが.LPファイルおよびXDS_ASCII.HKLファイルです。LPファイルはログファイルであり、処理の結果がまとめられています。またXDS_ASCII.HKLが処理の結果作成された反射ファイルです。なお、複数データ間のマージを行わない場合はXSCALEは不要です。
CORRECT.LPはスケーリングの前に強度補正(吸収、LPなど)を行っているプロセスですが、ほぼスケーリングをしたときと同様の統計値がテーブルで出力されています。このテーブルを見ることにより、少なくとも積分までのデータ処理がうまく行っていたかどうか分かります。XSCALEのインプットファイルを準備する前に、CORRECT.LPを確認しておきましょう。
XSCALEの実行
XDSで積分が終わったら、続いてスケーリングおよびマージを行います。このプログラムもXDSと同様にXSCALE.INPというインプットファイルを用意します。設定項目は少ないのでテンプレートをちょっと修正すればいいはずです。
単一のデータセットの場合はXSCALEをしなくてもいいようです。XDSで得られたXDS_ASCII.HKLをXDSCONVでフォーマット変換を行ってください。
P31などのマージ
軸の取り方が複数ある空間群のデータセット同士をマージするとき、軸が異なっているとcorrelationが低くなり警告が出ます。
CORRELATIONS BETWEEN INPUT DATA SETS AFTER CORRECTIONS DATA SETS NUMBER OF COMMON CORRELATION RATIO OF COMMON B-FACTOR #i #j REFLECTIONS BETWEEN i,j INTENSITIES (i/j) BETWEEN i,j 1 2 38169 0.265 0.9999 0.0000 !!! WARNING !!! SOME CORRELATION FACTORS ARE DANGEROUSLY SMALL. <-- これ *** DATA SETS MAY BE INCOMPATIBLE.***
軸の取り方が複数ある空間群でマージする場合は最低限この項目はチェックした方がいいでしょう。通常0.99ぐらいになるはずです。
警告が出た場合、REFERENCE_DATA_SETパラメータをセットしてマージする軸に合わせてXDSで再処理しましょう。XSCALE.INP内で各データセットのReindexができるならそれでいいのですが、まだ調べ切れてません・・・
- Reindexについて(CCP4) -- http://www.ccp4.ac.uk/dist/html/reindexing.html
マージ後のReindex
マージした後にReindexを行いたいときは、OUTPUT_FILEパラメータの前に、SPACE_GROUP_NUMBER、UNIT_CELL_CONSTANTS、REIDXを追加します。
SPACE_GROUP_NUMBER= 154 UNIT_CELL_CONSTANTS= 82.66 82.66 102.06 90.000 90.000 120.000 REIDX=-1 0 0 0 0 -1 0 0 0 0 1 0 OUTPUT_FILE=output_085.hkl !at minimum of f' INPUT_FILE= ../xds2/XDS_ASCII.HKL INPUT_FILE= ../xds_low2/XDS_ASCII.HKL
REIDXパラメータの内容は以下の通り。
H'=(REIDX(1)*H+REIDX( 2)*K+REIDX( 3)*L)/IDXV+REIDX( 4) K'=(REIDX(5)*H+REIDX( 6)*K+REIDX( 7)*L)/IDXV+REIDX( 8) L'=(REIDX(9)*H+REIDX(10)*K+REIDX(11)*L)/IDXV+REIDX(12)
つまり、-h,-k,lに変換したい場合は、
REIDX=-1 0 0 0 0 -1 0 0 0 0 1 0
となります。これは、
H' = -1*H + 0*K + 0*L + 0 <-- パラメータ (-1, 0,0,0) K' = 0*H + -1*K + 0*L + 0 ( 0,-1,0,0) L' = 0*H + 0*K + 1*L + 0 ( 0, 0,1,0)
を並べて表現したものですね。
プログラムの実行
インプットファイルの修正が終わったら実行します。
% xscale | tee xscale.log
実行後はXSCALE.LPで統計値を確認しておきましょう。
XDSCONVの実行
最終結果はXDSCONVで使用するプログラムにあわせてフォーマット変換を行います。FreeRフラグを付けることもできます。
対応しているフォーマットは以下の通り。
フォーマット名 | 内容 |
CCP4 | amplitudes and their anomalous differences for the CCP4 package |
---|---|
CCP4_F | amplitudes {F,F(+),F(-)} for the CCP4 package |
CCP4_I | intensities {IMEAN,I(+),I(-)} for use by CCP4's 'truncate' |
CNS | structure factor amplitudes for the CNS (X-PLOR) package |
SHELX | intensities for use by the SHELX package |
XtalView | structure factor amplitudes for use by XtalView |
XDSCONV.INPの編集
テンプレートを見れば編集箇所はすぐ分かると思いますが、最低限以下の項目を編集します。
INPUT_FILE=nn37_p01.hkl !XDS_ASCII UNIQUE OLDHKL ANOMAL NORMAL OUTPUT_FILE=nn37_p01.shkl SHELX !CNS CCP4 CCP4_F CCP4_I SHELX XtalView GENERATE_FRACTION_OF_TEST_REFLECTIONS=0.05 <-- 先頭の"!"を外す
OUTPUT_FILEの拡張子は何でもいいと思いますが、ここでは区別のためにSHELXのsをつけてshklとしています。GENERATE_FRACTION_OF_TEST_REFLECTIONSを有効にすると後からFreeRフラグを付ける必要がなく便利。もし、過去のデータとFreeRを統一するなら後ろにあるINHERIT_の項目を使用します。その他、Wilsonプロット、ネガティブインテンシティのCutoffなどが使用可能です。
プログラムの実行
プログラムを実行すれば変換が行われます。
% xdsconv
MTZ形式への変換
XDSCONVで取得できるのはMTZ変換前のFデータですので、F2MTZを使って変換します。そのためのF2MTZ.INPファイルが実行ディレクトリに生成されるはずです。XDSCONV実行後にも手順が出力されますが、以下のようにして変換します。
% f2mtz HKLOUT temp.mtz < F2MTZ.INP % cad HKLIN1 temp.mtz HKLOUT output.mtz <<EOS LABIN FILE 1 ALL END EOS
これで生成されるoutput.mtzが目的のMTZファイルです。
Peak search
マニアックな使用方法
XDS for Manias
Sigma cutoffをする(たぶん)
禁断のパラメータですが、SCALEPACKのSIGMA CUTOFFマクロと同じようなことができるようです。慎重に使えとHKL2000マニュアルにも書いてありますのでその弊害をHKL2000マニュアルで確認しておきましょう。
XDSではSigma cutoffはディフォルトでは-3で、XDSおよびXSCALEにはSigma cutoffの機能はないとXDSwikiに書いてありますが、XDSが出力するHKLファイルはテキストファイルなので手動でできるようです。以下の例ではXDS_ASCII.HKLから0σ未満の反射を除外します。
% head -100 XDS_ASCII.HKL | grep \! | grep -v END_OF_DATA > SIG_CUTOFF_0.hkl
% grep -v \! XDS_ASCII.HKL | awk '{if ($4/sqrt($5*$5)>0) print $0}' >> SIG_CUTOFF_0.hkl
% echo \!END_OF_DATA >> SIG_CUTOFF_0.hkl
これで得られるSIG_CUTOFF_0.HKLが得られたファイルです。
かんたんスクリプト
スクリプトにしてみました。あんまり試してないので使用は自己責任で。
-
1 2 3 4 5 6 7 8 9 10 11 12
#!/bin/bash # XDS Sigma Cutoff # 2011-05-24 by Nob-rin # http://strucbio.biologie.uni-konstanz.de/xdswiki/index.php/FAQ ORIG_HKL=XDS_ASCII.HKL CUTOFF=$1 OUTFILE=SIG_CUTOFF_$CUTOFF.HKL echo "SIGMA <= $CUTOFF CUTOFF FROM $ORIG_HKL" echo "OUTPUT FILE [$OUTFILE]" head -100 $ORIG_HKL | grep \! | grep -v END_OF_DATA > $OUTFILE grep -v \! $ORIG_HKL | awk '{if ($4/sqrt($5*$5)>'$CUTOFF') print $0}' >> $OUTFILE echo \!END_OF_DATA >> $OUTFILE
- 使用方法
% xdscutoff -1 SIGMA <= -1 CUTOFF FROM XDS_ASCII.HKL OUTPUT FILE [SIG_CUTOFF_-1.HKL]
カレントディレクトリのXDS_ASCII.HKLから指定したI/σ以下の反射を除きます。出力ファイル名はSIG_CUTOFF_値.HKLです。
XDS_ASCII.HKLファイルをSCALAにてスケーリング
POINTLESSを使って簡単にSCALAでスケーリング(自己責任で)
準備(前提条件)
- データのマージはしないやつ
- pointlessが利用可能であること
- scalaが利用可能であること
- スクリプトディレクトリにXDS_ASCII.HKLが存在していること
スクリプト
=========================== #!/bin/csh pointless -copy xdsin XDS_ASCII.HKL hklout xds.mtz > xds_pointless.log scala hklin xds.mtz hklout scala.mtz scalepack merge.sca << end-scala | tee scala.log # scale using default parameters run 1 all scales rotation spacing 5 secondary 5 bfactor on brotation spacing 20 output polish #anomalous on end-scala ============================
使うときはファイルにコピペしてね。
何をやってるか
- pointlessにてXDS_ASCII.HKLをMulit-recordのMTZファイルに変換する。
- sortもpointlessで出来ているのでscala前のsortmtz不要。
- scalaの中→scalesなどのオプションついては別途scalaの使い方をお好みで。
- scalaのアウトプットファイルのこと
- 基本的にはTRUNCATEできるMTZファイルは吐く(例だとscala.mtz)
- オプションで output polish とするとHKL2000でいうところの merged .scaファイルが出力できちゃう
- scala 最初の行でscalepack出力ファイルを指定すると(例ではmerge.sca).scaファイルの名前を指定可能
- output unmerged polish と指定すると同様に unmerged .scaファイルも出力可能→ただしフォーマットが変になることがあるので実用的でない
- anomalous行の#をはずすと異常分散ありのスケール可能
- scalaのlogファイルはscala.log