各種プログラム使用方法

XDSを使ってみる  

XDSHKL2000のようなGUIを持たないデータ処理&スケーリングプログラムパッケージです。毎年年末にプログラムの期限が切れるので、忘れずに12月になったら最新版を取得しましょう。
玄人好みのプログラムですが、自動化などにも使われているようです。細かなパラメータ等は自動で決定してくれるので慣れると便利な気がします。

使用する手順  

  1. 指数付けおよび積分(XDS)
  2. 複数データのスケーリングおよびマージ(XSCALE)
  3. 必要な形式に変換(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ファイルがビームラインのホームページに用意してあるのでそれらを使います。ビームラインや検出器によって異なるので、どれを使えばいいかよく分からない場合はビームラインスタッフに確認しましょう。
取得したファイルを修正して処理を流します。

インプットファイルを自分で書く場合は相当難しいので別ページに紹介することにします -- インプットファイルの作成

インプットファイルの修正  

いろいろ細かい点が修正できますが、最低限修正する項目は、カメラ距離、オシレーション振幅、測定波長、空間群および格子定数、ファイル名および枚数です。なお、!以降はコメントとして無視されます。
ここでは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  

マージした後にReindexを行いたいときは、OUTPUT_FILEパラメータの前に、SPACE_GROUP_NUMBERUNIT_CELL_CONSTANTSREIDXを追加します。

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フラグを付けることもできます。
対応しているフォーマットは以下の通り。

フォーマット名内容
CCP4amplitudes and their anomalous differences for the CCP4 package
CCP4_Famplitudes {F,F(+),F(-)} for the CCP4 package
CCP4_Iintensities {IMEAN,I(+),I(-)} for use by CCP4's 'truncate'
CNSstructure factor amplitudes for the CNS (X-PLOR) package
SHELXintensities for use by the SHELX package
XtalViewstructure 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が得られたファイルです。

かんたんスクリプト  

スクリプトにしてみました。あんまり試してないので使用は自己責任で。

XDS_ASCII.HKLファイルをSCALAにてスケーリング  

POINTLESSを使って簡単にSCALAでスケーリング(自己責任で)

準備(前提条件)  

  1. データのマージはしないやつ
  2. pointlessが利用可能であること
  3. scalaが利用可能であること
  4. スクリプトディレクトリに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
============================

使うときはファイルにコピペしてね。

何をやってるか  

  1. pointlessにてXDS_ASCII.HKLをMulit-recordのMTZファイルに変換する。
  2. sortもpointlessで出来ているのでscala前のsortmtz不要。
  3. scalaの中→scalesなどのオプションついては別途scalaの使い方をお好みで。
  4. scalaのアウトプットファイルのこと
    1. 基本的にはTRUNCATEできるMTZファイルは吐く(例だとscala.mtz)
    2. オプションで output polish とするとHKL2000でいうところの merged .scaファイルが出力できちゃう
    3. scala 最初の行でscalepack出力ファイルを指定すると(例ではmerge.sca).scaファイルの名前を指定可能
    4. output unmerged polish と指定すると同様に unmerged .scaファイルも出力可能→ただしフォーマットが変になることがあるので実用的でない
  5. anomalous行の#をはずすと異常分散ありのスケール可能
  6. scalaのlogファイルはscala.log
添付ファイル: filexdscutoff 965件 [詳細]