各種プログラム使用方法
 #floatcontents
 * [[XDS]]を使ってみる [#r7821434]
 [[XDS]]はHKL2000のようなGUIを持たないデータ処理&スケーリングプログラムパッケージです。毎年年末にプログラムの期限が切れるので、忘れずに12月になったら最新版を取得しましょう。~
 玄人好みのプログラムですが、自動化などにも使われているようです。細かなパラメータ等は自動で決定してくれるので慣れると便利な気がします。
 
 ** 使用する手順 [#rfd7874e]
 + 指数付けおよび積分(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の実行 [#ed71a89b]
 プログラムパッケージ名にもなっているXDSですが、実際のXDSプログラムは指数付けおよび積分を行うプログラムです。インプットファイルを作成し、プログラムを実行します。処理結果ファイルやログファイルはプログラムを実行したディレクトリに出力されるので、適当なディレクトリを作成したほうがいいでしょう。XDSはバージョンにより出力内容が結構変わるみたいなので、バージョンが異なると多少手順が変わるかもしれません。ここでは2010-12-06版(2011-12-31まで)を基にしています。
 
 *** インプットファイル雛形の取得 [#o3b4df71]
 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
 
 インプットファイルを自分で書く場合は相当難しいので別ページに紹介することにします -- [[インプットファイルの作成>XDS/インプットファイルの作成]]~
 
 *** インプットファイルの修正 [#u018bef4]
 いろいろ細かい点が修正できますが、最低限修正する項目は、カメラ距離、オシレーション振幅、測定波長、空間群および格子定数、ファイル名および枚数です。なお、''!''以降はコメントとして無視されます。~
 ここではSPring-8 BL41XU(Q315)のインプットファイルを例に説明します。ここで挙げた項目とパラメータ名の対応は以下の表の通りです。
 |パラメータ名                 |内容                                 |例|h
 |~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) [#b439d11d]
 複数のデータセットをマージしたい場合、'''P'''3&sub{1};など軸の取り方が複数ある空間群ではデータセット毎に軸が異なってしまう場合があります。その時、合わせる手系を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)
 こうすることで軸を統一することができます。
 
 *** インプットファイルの修正(いろいろ) [#h93d4c22]
 その他細かい修正が可能です。
 |パラメータ名                 |内容                                 |例|h
 |~INCLUDE_RESOLUTION_RANGE    |分解能範囲(0までにした場合は自動判断)|30.0 0.0|
 
 *** プログラムの実行 [#v8778b80]
 読み込まれるインプットファイルはXDS.INP固定なので、プログラムを実行するだけです。
  % xds_par | tee xds.log
 とするだけで、(必要なら)指数付け、積分、までやってくれます。~
 並列処理ができない環境の場合はxds_parではなく、オリジナルの''xds''を使う事になりますが、処理時間は当然長くなります。
 
 *** 処理の結果を見てみる [#t57aa81d]
 :指数付けの結果|
 プログラム出力の最後の方に、
  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の実行 [#k4cd288b]
 XDSで積分が終わったら、続いてスケーリングおよびマージを行います。このプログラムもXDSと同様に''XSCALE.INP''というインプットファイルを用意します。設定項目は少ないのでテンプレートをちょっと修正すればいいはずです。~
 単一のデータセットの場合はXSCALEをしなくてもいいようです。XDSで得られたXDS_ASCII.HKLをXDSCONVでフォーマット変換を行ってください。
 
 *** '''P'''3&sub{1};などのマージ [#fff87cdb]
 軸の取り方が複数ある空間群のデータセット同士をマージするとき、軸が異なっているとcorrelationが低くなり警告が出ます。
        CORRELATIONS BETWEEN INPUT DATA SETS AFTER CORRECTIONS
  
   DATA SETS  NUMBER OF COMMON  &color(red){CORRELATION};   RATIO OF COMMON   B-FACTOR
    #i   #j     REFLECTIONS     &color(red){BETWEEN i,j};  INTENSITIES (i/j)  BETWEEN i,j
      1    2       38169           &color(red){0.265};            0.9999         0.0000
  
   &color(red){!!! WARNING !!! SOME CORRELATION FACTORS ARE DANGEROUSLY SMALL.};   <-- これ
   &color(red){*** 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 [#x691a15a]
 マージした後にReindexを行いたいときは、''OUTPUT_FILE''パラメータの前に、''SPACE_GROUP_NUMBER''、''UNIT_CELL_CONSTANTS''、''REIDX''を追加します。
  &color(red){SPACE_GROUP_NUMBER= 154};
  &color(red){UNIT_CELL_CONSTANTS= 82.66    82.66   102.06  90.000  90.000 120.000};
  &color(red){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)
 を並べて表現したものですね。
 
 *** プログラムの実行 [#df933b54]
 インプットファイルの修正が終わったら実行します。
  % xscale | tee xscale.log
 実行後はXSCALE.LPで統計値を確認しておきましょう。
 
 ** XDSCONVの実行 [#d37c25e1]
 最終結果はXDSCONVで使用するプログラムにあわせてフォーマット変換を行います。FreeRフラグを付けることもできます。~
 対応しているフォーマットは以下の通り。
 |フォーマット名|内容|h
 |~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の編集 [#ca9fc6a0]
 テンプレートを見れば編集箇所はすぐ分かると思いますが、最低限以下の項目を編集します。
  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などが使用可能です。
 
 *** プログラムの実行 [#ec4ede55]
 プログラムを実行すれば変換が行われます。
  % xdsconv
 
 *** MTZ形式への変換 [#w7d03482]
 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 [#d9e9e9ce]
 
 * マニアックな使用方法 [#a3b6c7fe]
 XDS for Manias
 
 ** Sigma cutoffをする(たぶん) [#xa84f70d]
 禁断のパラメータですが、SCALEPACKのSIGMA CUTOFFマクロと同じようなことができるようです。慎重に使えとHKL2000マニュアルにも書いてありますのでその弊害をHKL2000マニュアルで確認しておきましょう。~
 XDSではSigma cutoffはディフォルトでは-3で、XDSおよびXSCALEにはSigma cutoffの機能はないとXDSwikiに書いてありますが、XDSが出力するHKLファイルはテキストファイルなので手動でできるようです。以下の例ではXDS_ASCII.HKLから0&sigma;未満の反射を除外します。
  % 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)>&color(red){0};) print $0}' >> SIG_CUTOFF_0.hkl
  % echo \!END_OF_DATA >> SIG_CUTOFF_0.hkl
 これで得られるSIG_CUTOFF_0.HKLが得られたファイルです。
 - [[XDSwiki - Why do the latest XDS/XSCALE versions only give a single table, with I/sigma&gt;=3 cutoff?>http://strucbio.biologie.uni-konstanz.de/xdswiki/index.php/FAQ#why_do_the_latest_XDS.2FXSCALE_versions_only_give_a_single_table.2C_with_I.2Fsigma.3E.3D-3_cutoff.3F]]
 
 *** かんたんスクリプト [#gfb1a604]
 スクリプトにしてみました。あんまり試してないので使用は自己責任で。
 #script(xdscutoff)
 - 使用方法
  % xdscutoff -1
  SIGMA <= -1 CUTOFF FROM XDS_ASCII.HKL
  OUTPUT FILE [SIG_CUTOFF_-1.HKL]
 カレントディレクトリのXDS_ASCII.HKLから指定したI/&sigma;以下の反射を除きます。出力ファイル名はSIG_CUTOFF_'''値'''.HKLです。
 
 ** XDS_ASCII.HKLファイルをSCALAにてスケーリング [#tbc077c9]
 POINTLESSを使って簡単にSCALAでスケーリング(自己責任で)
 
 *** 準備(前提条件) [#i3a5cbef]
 +データのマージはしないやつ
 +pointlessが利用可能であること
 +scalaが利用可能であること
 +スクリプトディレクトリにXDS_ASCII.HKLが存在していること
 *** スクリプト [#c32087d6]
  ===========================
  #!/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
  ============================
 
 使うときはファイルにコピペしてね。
 
 *** 何をやってるか [#xebb14af]
 +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