XDSとaimlessでデータ処理

2017.5.19 S. Fushinobu

XDSはフレーム処理ごとのpredictionが追えないなどの弱点はあるのですが、昔からよく使われている有名なデータ処理ソフトのひとつです。
恥ずかしながらいままであまり使ったことはなかったのですが、今回色んな人に聞いて、xdsguiを利用して、途中からccp4のaimlessに移行する方法も含めて、ひととおり使ってみたので、やりかたをメモしておきます。間違っているところがあったら伏信までお知らせください。

1. XDSのインストール (macOS Sierra)

ここのコマンドをターミナルにコピペしてインストールする。
少なくとも、XDS, XDS-Viewer, XDSGUIは入れる。macOSのsystem-wide installationでやるとgenerate_XDS.INPだけコケるので、
ここのThe Scriptの中身をテキストエディットなどにコピペしてファイル名
generate_XDS.INP
というのを作り、
>sudo cp generate_XDS.INP /usr/local/bin
>sudo chmod +x /usr/local/bin/generate_XDS.INP
とする。

注:インストール方法は今後バージョンが変わると変わる可能性があるので悪しからず。

注2:macOSをMojaveにversion upすると
xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun
this is not a MAR, ADSC/SMV or PILATUS detector - fill in XXX values manually!
というエラーがターミナルに出てXDS.INPのパラメータの数字がXXXになってしまうが、ここを参考に"xcode-select --install"するとうまいくいく。

2. XDSで処理:indexingまで

ターミナルでどこか専用のディレクトリを作りそこで
>xdsgui
で起動。
上のタブを左から右へ行く。
CPU usageをモニタしておけば(Mac OSの場合はアプリケーション/ユーティリティ/アクティビティモニタ)、処理が進行中かどうか分かる ので便利。

Frameタブ:
Loadボタンを押し1枚めのイメージを読み込む。
XDS-Viewerが正しくインストールされていれば反射の画像が出て来る。
Zoom, Contrast, Brightnessなどを調節して反射が見やすいようにできる。
generate XDS.INPのボタンを押すと右のXDS.INPのタブが黒くなって押せるようになる。

XDS.INPタブ:
基本的にはここの内容を書き加えながら処理を進めていく。
以下の記述は、空間群などが決まっていないデータセットを処理する場合を想定している。
2行目の
JOB= XYCORR INIT COLSPOT IDXREF DEFPIX INTEGRATE CORRECT
をそのまま3行目にコピペ、2行目の最初に!をつけてコメントアウトしておく。
最初は3行目を
JOB= XYCORR INIT COLSPOT IDXREF
として、indexingの結果を見るところまでにしておく。
空間群などが分かっていてうまくいくことがわかっていれば、空間群、格子定数(大体の値で良い)を入れておいてINTEGRATE以降まで一気に進めてもよい。
ここでいったんSaveボタンを押してRun XDSボタンを押す。

XYCORRタブ:(大したことは書いていない)
INITタブ:(10枚目までのフレームを使ってダークカレントなどを取っているようだ)
以下の2つはしばらく経つと黒くなり押せるようになる。
COLSPOTタブ:(反射を拾っているようだ。最後の方にacceptされた反射のスポットの数が書かれている)
IDXREFタブ:
Indexing後にパラメータをrefinementした結果が書かれている。
ここを見てcrystal systemを推定する。
下の方に、LATTICE, QUALITY OF FIT, UNIT CELL CONSTANTSが書かれた表が出てくる。
*(アステリスク)がついているものがあり得る格子。
aP、mPなど略称で書かれているが、その下を見れば、具体的にどのような空間群を含む格子なのかが分かる。
例:oPはP orthorhombicのことで、空間群番号19のP2(1)2(1)2(1)などが含まれる。

*が付いているもので表の一番下に書かれているのが一番対称性が高いものなので通常はこれを選ぶ。
(注:必ずしもこれが正しいとは限らない)
Indexingがうまく行っていれば、*のついている格子とその下の格子のQUALITY OF FITで大きな差が出る。
STANDARD DEVIATION OF SPOT POSITION (PIXELS)も小さな数字になるはず(1.0以下とか?)。
そして、反射とprediction spotsが合っているかどうか、必ず目で確認する。(下の方の6. yam_scriptsを使う、を参照)

xxxxx OUT OF xxxxx SPOTS INDEXED.は、うまくいっていれば左の数字が右の数字の50%以上になるが、それ以下だと、一番下にERRORが出て以降の自動処理をストップする。そこに書かれているように、もう一度DEFPIX以降をrunすれば進めることが出来るが、そのような場合はindexingがコケていることが多い。

Indexingがうまくいかない場合:まずはここを見る。私自身もノウハウ蓄積中ですが、XDS.INPでの以下のようなパラメータを変えて色々試すとよいでしょう。
・まずはORGX=, ORGXY=をチェック。ほとんどの場合、これが原因です。Frameでビームセンターの位置が目でも確認できる。もしこの数字がずれてると、indexingが非常にコケやすくなります。まずはここを参考に(1.のxdsguiを使う方法)、Frameタブのセンターの緑の十字とマウスオンで右上に出てくるxとyの数字を入れ直してみる。Adxvで座標をチェックする方法でもいいです。AdxvのView Image Headerでmm単位のビームセンターが見られる場合がありますので、カーソルを動かして、pixel単位のORGX, ORGYを割り出すこともできます。
あるいは、同じ日のビームラインで、同じくらいのカメラ長(最大分解能)で取ったデータセットに処理がうまくいっているのがあれば、そこのディレクトリで、
 >grep "DETECTOR COORDINATES" INTEGRATE.LP
などとやって、そこでの平均値的な数字をXDS.INPに入れてみる、といいような気がする。
・SPOT_RANGE=(indexingで使用するイメージの番号を指定。10枚以上指定する)を変える。実践的にはこれが一番効くとのこと。デフォルトだとたいてい0-90度の範囲を拾うようになっているので、拾うスポットが信頼できない(反射が汚い?)領域を外すような感じでしょうか? オフィシャルBioKids Wikiにかかれているように、COLSPOTで広めの範囲でピークサーチをしておいて、このパラメータで選択する範囲を変えながらJOBをIDXREFのみで走らせれば速く正しいindexingを探しに行けるはず。
 SPOT_RANGE=1 10
 SPOT_RANGE=20 30
 SPOT_RANGE=45 60
 SPOT_RANGE=70 70
のように複数行書けば飛び飛びの範囲を使ってくれる。
 adxvで反射を見てみて、
・INCLUDE_RESOLUTION_RANGE=で分解能を区切る(例えば広角はデフォルトで0になっているので有効な分解能にして弱い反射をカットする)とよい場合もあるらしい。
・スポット間隔が狭い(格子定数に大きなのがある)場合は、SEPMIN=、CLUSTER_RADIUS=を変える(小さくする)必要があるかも。前者は反射間隔(デフォルト6.0ピクセル)、後者はdifference vector clusterの最小値(ピクセル単位)。 ただし、オフィシャルの説明には、ほとんどの場合変える必要がない、とあるので注意。

レアケースとして:ROTATION_AXISが逆の場合がある。回転軸が水平なら1 0 0、垂直なら0 1 0のようだが、ビームラインによっては軸が逆(reverse phi)の場合があるので、-1 0 0などとする必要がある。詳しくはビームライン担当者に聞いてみよう。

3. XDSで処理:integrate以降

XDS.INPに戻り、3行目を
JOB= DEFPIX INTEGRATE CORRECTなどとしてscale/mergeまで一気にやってしまいましょう。
SPACE_GROUP_NUMBER には想定される空間群の番号を書き(上記IDXREFタブのリストを参照)、
UNIT_CELL_CONSTANTSにはそこからコピペした格子定数を書いておくとよい(かも)
Save -> Run XDS

INTEGRATEタブ:
処理が進むに従い自動的にログとグラフが伸びていく。
グラフに出てくるパラメータが途中から大きく動いていたりすると、おそらくダメ。
最後まで進むと次のタブが押せるようになる。

CORRECTタブ:
右のグラフの、R-FACTOR observedの左側(低角/低分解能側)が変に大きかったら(例えば30%以上とか)、空間群(ラウエ群)が間違っているので、XDS.INPに戻り、もっと低い対称性の空間群を入れてやり直す。

ログにはSUMMARY OF DATA SET STATISTICS FOR IMAGE
の表が沢山出ているが、下の方に行けばいくほど、多くのフレームを使っている(DATA_RANGE=を参照)。
右のグラフの横軸がDATA_RANGEになっているのを見て、例えばcompletenessとかが十分あって、I/sigmaやR-measが途中から悪くなっていなければ、基本的に全部のフレームを使ってもよい(INTEGRATEタブのSCALEのグラフなども参考にする)。
私はいつも、ログ(通常は一番下のやつ)の、RESOLUTION LIMITごとの表を見ています。
そのすぐ上に、0 0 L, 0 K 0, H 0 0の反射のI/sigmaの表が出て来るので、消滅則の判定に使える。

分解能がどのくらい出ているかは、右のグラフや、左のログの表で、I/sigma、R-FACTOR obs、CC(1/2)などを見ながら判断する。
個人的には、CC(1/2)が0.6以上(最低でも0.5)、最外殻のR-FACTORが100%を超えない、I/sigmaは1以上(できれば1.5-2.0くらいはあったほうがよい)、くらいを目安にしています。

XDS.INPタブに戻り、高分解能の範囲を入れたり
例:INCLUDE_RESOLUTION_RANGE=50 1.8 とか
空間群を書き換えたりしてやり直す。
RESOLUTION RANGEを変更したら、Frameタブを見てみよう。その範囲が緑色の円になって見られるはず。
空間群の書き換えがラウエ群の変更を伴わないようなもので、分解能をカットオフするだけならば、
JOB=はCORRECTだけでいいはず。
なお、
FRIEDEL'S_LAW=FALSEはバイフット対を分けて処理(anomalousあり:SADなどの場合)
FRIEDEL'S_LAW=TRUE はバイフット対を一緒に処理(anomalousなし:通常の場合)
ということなので状況に合わせて書き直すことができる。
ただし後述のXDSCONVのところでも書き直せるし、INTEGRATE後にaimlessなどで処理することなどを考えれば、ここはいつでもFALSEにしておいてかまわない(。。はず。)

4. aimless(+pointless)で処理:

空間群などが分かっていない場合には、ccp4のpointlessなどに判断してもらうのが楽なので(CORRECTのログは消滅則などを書いてくれない(っぽい)のでらせん軸の判定などがやりにくい?)、上記の処理で大体処理できていそうだったら(低分解能のR-FACTOR observedが変に高くなければ)、こっちに進んでみるのがオススメ。
ccp4i2αを使う想定で説明します。

Task menu -> X-ray data reduction analysis -> Data reduction -AIMLESSでNew Job
(ccp4iならData Reduction and Analysis -> Symmetry, Scale, Merge (Aimless))

赤枠の中の..must be selectedの右のフォルダアイコンを押してXDSで使ったディレクトリの中のINTEGRATE.HKLをOpen
Crystal Nameとdataset nameを適当に入れる(赤枠が消える)。
空間群の決定法は
Options for symmetry determination
で選択できる。色々試してみよう。
なおAdditional optionsはScale (with automatic default settings)になっていることを確認。
XDSのCORRECT(scaleずみ)の結果であるXDS_ASCII.HKLを入力として使う場合には、スケーリングしないでマージだけする(Scale (No scaling only merge)を選択する)こともできるようだ。
-> Run で走らせる。
右のResultsのDetails of space group determinationを見れば空間群決定に参考になる情報が載っている。
まずはData internal consistency statisticsを見て、Rmerge in top intensity binが十分低いこと(<0.1より十分低いとか)は最低確認する。

Aimless(2回め)
1回目のaimlessの結果を元に分解能をどこまで切るかを決めて、もう一度処理する。ccp4i2αだと左側のJobを右クリック→Cloneすると同じのが出る。分解能上限の目安としては、Outer shellのパラメータ、具体的にはMean ((I)/sd(I)) (>1.0 〜 1.5)、Half-set correlation CC(1/2) (>0.5〜0.6)、あたりを参考にする。多数の結晶データをマージしたものでなければ、Rmerge (al)があまり大きくない (できれば<1.0)方が良い。

5. うまくいったと判断できた場合に次のステップに進む方法

精密化に使う反射ファイルを作ったり、ログを書き出したり。

XDSを最後まで使うならば、XDSGUIの右の方のXDSCONVを走らせる。
最初の3行のコメントを外し、1行目に格子定数、2行目に空間群番号を入れて走らせると(おそらく)ccp4で使えるアスキー形式のhklファイルが出力されるようだ。
FRIEDEL'S_LAWはFALSEにすることがおすすめされていますが。。本当にそうなんですかね?
なお、XSCALEは複数データ間のマージを行う場合に使う。

ccp4などで使う場合には、上記項目3のように、INTEGRATEの結果をaimlessで処理するのが、ログファイルが分かりやすいという点からも(分解能の推定も色々な観点から出てきます)、おそらく相性の面からも、(今のところ)オススメです。
その場合、ccp4i2αの場合だと上の方のExport MTZで.mtzファイルを書き出せます。
いわゆるTable 1を書く時に必要なパラメータもaimlessのログを見れば書いてある。。はず。

6. yam_scriptsを使う

keitaroyamさんのXDS関連のスクリプトを使って、prediction file (FRAME.cbf)を見てみる。

ここ(GitHub)からスクリプトをダウンロード(Clone or downloadからzipで落とせる)。
>mv 〜/Downloads/yam_scripts-master/ 〜
などとして適当な場所に置く。

phenixをインストールしている必要があるが、さらに、〜/.bash_profileや〜/.bashrcあたりに
export PATH=$PATH:〜/yam_scripts-master
source /Applications/phenix-1.xx.x-xxxx/phenix_env.sh
のような二行を書き込んでおく。xx.x-xxxxはPHENIXのバージョン番号(アプリケーションフォルダを見よ)。
その後ターミナル再起動。

ここからAdxvの実行ファイルをダウンロードしてコマンドラインから実行できるようにしておく。
例えば、adxv.macOSX_10.12.dmgをダウンロードして展開、アプリケーションフォルダに移動後、
>ln -s /Applications/Adxv.app/Contents/MacOS/Adxv /usr/local/bin/adxv
などとしてシンボリックリンクを張るなど。

XDSのファイルがある場所から、
>xds_predict_mitai.py -f 1
などとする。ちなみにこのスクリプト、INTEGRATEまでは走らせておく必要があるので注意。
最後に出てくる
>adxv FRAME_0001.cbf INTEGRATE_0001.adx
のような行をコピペして実行すれば1枚目のimgファイルのprediction spotsが見られる。

起動したadxvで、右クリックでズームウインドウが開き、Adxv ControlのMagnificationで拡大倍率を変えられる(4倍くらいがオススメ)。