* ファイル内容の操作 [#w0e45f6c]
 #floatcontents
 ファイルの内容を操作します。おそらくはMTZファイルやPDBファイルの操作が主な内容になると思います。~
 簡単にファイル内容を変更したいけどプログラムがわからない、という疑問を解消できればいいな。
 
 * MTZファイル [#o30fd790]
 CCP4のMTZファイルは含まれる情報が多いだけに慣れるまで扱いがよくわかりません。そんな偉大なファイルを扱うためのレシピを集めてみます。
 
 ** 以前のデータとFree-Rフラッグを一致させるには [#w2ab6818]
 *** 準備するもの [#k96e66da]
 + 前のデータのMTZファイル
 + 今度のMTZファイル(Fとsig(F)があればよい)
 
 *** 使用するスクリプト [#f1e9cd62]
  cad hklin1 previous.mtz \
      hklin2 current.mtz \
      hklout newtmp.mtz << eof > cad.log
  labi file 1 E1=FreeR_flag
  labi file 2 E1=FP E2=SIGFP
  END
  eof
  
  freerflag hklin newtmp.mtz hklout new.mtz << eof > freer.log
  COMPLETE FREE=FreeR_flag
  eof
 
 *** 解説 [#j719ce9c]
 previous.mtzに、FreeR_flagというカラム(CCP4を勉強してね)があり、それを新しいデータcurrent.mtzに取り入れてnew.mtz に吐き出したいとしますね。上のはそういうスクリプトです。~
 -コマンド行は"labi"というのが、CCP4御用達の"LABIN"の前四文字(CCP4は基本的にコマンドの前四文字で全てが識別されるように出来ています)。その後、スペースで区切られた数字が入っていますが、これが"HKLIN"の数字(上記例では1 or 2)に対応しています。つ・ま・り
 -- "labi file 1" -> hklin1 つまり previous.mtz
 -- "labo file 2" -> hklin2 つまり current.mtz
 -を指し示すと言うわけだ。元々、CAD(CCP4)君は二つのMTZファイルをマージしたり、必要な情報(カラム)を抜き出したりしてくれるアプリケーションなのだが、最もよく使うのがマージ(融合:フュージョン)じゃなかろうかと思われます。これ、覚えておくとらくだよ!とか書きながら思ってんけど、&color(red){みんなこれCCP4iでやってる???};なんか、そう考えると急になえてきたよ・・・。でもね、自動化スクリプトがかけないのがCCP4iの弱みなのよ。だから、覚えておいて損は無いわ。プンプン。
 - ままま、ほんで、出力ファイル(アウトプットファイルですな)newtmp.mtzにしましたと。このスクリプトは結構、CCP4のスクリプトでは基本形なのでよく覚えておくが良いさ。ちなみにね、スクリプトの例はねCCP4環境でね、$CEXAM/unix/runnable/ ディレクトリにた〜くさん入っているので、困ったら行ってみると良いよ。ちなみにアチキの場合は
 +$CDOCの中のプログラムドキュメントを読んで
 +$CEXAMの中の例をパクって来て
 +流してみてから、後のことを考える
 - というパターンが多いかな。参考にしてみてプサイ。
 - 二つ目のスクリプト(上)はFREERFLAG(CCP4)君を走らせるヤツ。COMPLETEオプションは既存のフラッグ(この例の場合は一つ目のMTZファイルからパクって来たフラッグ)で、カバーし切れなかった残りにフラッグを立ててくれるものらしい。意味がわかるかしら?つまり、例えば一つ目と二つ目のデータで分解能が変わる場合がある、というよりむしろ、そればっかりやん!!
 -で、そういう場合、最初のMTZにあったフラッグだけで二つ目の全ての反射にフラッグが立てれない場合があるわな。ちゅうときに、そこをカバーしてくれるっちゅう頼もしい仲間なんだよFREERFLAGは。まぁ、お心づけ大歓迎、という宴会で大盤振る舞いする上司みたいなもんやな。
 #br
 ちゅうわけで、スクリプトを実行形式にいたしまして走らせてみてください。
 
 ** MTZファイルのパラメータを編集するには [#e27ac0d9]
 CCP4iのReflection Data UtilitiesのEdit MTZ File (SFTOOLS)を使用します。
 
 * PDBファイル [#o98af9cc]
 ** PDBフォーマットを正規化したい [#k05d0fed]
 #anno2(2010-07-28 : 追加)
 CNSなどで生成したPDBファイルの場合、CCP4のプログラムによってはエラーがでることがあります。
 - 例えば、NCONTの
  The program run with command: ncont XYZIN "foo.pdb" has failed with error message
  NCONT:  NO SOURCE ATOMS SELECTED
 というエラーなど。
 
 そんな時は、PDBSETを使って正しいフォーマットにしてみて下さい。
  % pdbset xyzin refine.pdb xyzout refine_ccp4.pdb <<EOF
  EOF
 ELEMENTカラムを追加されたフォーマットへ変換してくれます。
 
 ** 水分子の番号を付け直すには [#z946480f]
 構造の精密化を進めていくと、水分子の番号が飛び飛びになることがよくあります。少しぐらいなら手で直しても大した手間ではありませんがそれが100, 200やもっととなるとそれどころではありません。そんな時は1)Emacs用スクリプトpdb-mode.elを使うようにする、2)COOTで直す、3)PDBSETを使う、などがあります。
 
 *** Emacsにpdb-mode.elを読み込ませる [#y2d345d4]
 Emacsの拡張スクリプトであるpdb-mode.elをEmacs起動時に読み込ませるようにすると、拡張子が''.pdb''のファイルを編集するときにPDB用編集コマンドが使えるようになります。私はこの作業を行うときぐらいしかEmacsを使わないので細かいことはわかりませんが、Emacs起動スクリプトに、
  (load-file "/usr/local/ccp4-6.1/ccp4-6.1.0/include/pdb-mode.el")
  (setq auto-mode-alist
      (cons (cons "pdb$" 'pdb-mode)
              auto-mode-alist ) )
  (autoload 'pdb-mode "PDB")
 を追加します。~
 Vine 4.2の場合はホームディレクトリに''.emacs.my.el''を作成しその中に記述します。他のディストリビューションは確認していないので不明ですが、おそらく.emacs.elあたりが怪しいような・・・
 
 *** COOTで付け直す [#r1a10685]
 Emacsの設定がめんどくさい人はCOOTを使いましょう。[Extensions]の中にそのコマンドがあります。~
 Ver.0.5.1以降なら分類されてますので[Extensions]->[Modeling]->[Renumber Waters...]で、それ以前のバージョンなら[Extensions]->[Renumber Waters...]で付け直すことができます。~
 [Calculate]->[Renumber Residues...]は残基番号をシフトさせるだけなのでこの場合使えないようです。
 
 *** PDBSETを使う [#wda2a118]
 COOTを立ち上げるのもイヤな場合、またはXが使えない環境の場合はCCP4のPDBSETを使います。
 
 - ''CCP4i''~
 CCP4iが使える場合は[Coordinate Utils]->[Edit PDB File]でUse [pdbset] to [rename chains and/or renumber residues]を選択します。そこで'''Rename chains and/or renumber residues'''セクションの[Renumber residue]を選択し、initial: [] to [] on chain[W(それ以外なら適当に)]、result:(starting at)[1]というような感じで設定すれば変換できます。initialの残基範囲を指定しなければ指定したChain ID内すべてが対象になるようです。
 - ''スクリプト''~
 スクリプトの場合は、
  % pdbset XYZIN in.pdb XYZOUT out.pdb <<EOS
  renumber -
  1 -
  chain W
  EOS
 これで変換できるようです。
 
 ** 水のChain IDを割り当てるには [#d372909c]
 #anno2(2012-07-31:追加)
 PDB Annotation Policy 2.5またはそれ以降では、水(やリガンド)のChain IDは独立したもの(慣用的にはWあたり)ではなく、近接したタンパク分子と一致させたものが自動的に割り当てられるようになっています。しかし、論文中で水分子の議論を行う際は水の残基番号が必要になりますので、できればあらかじめ割り当てておきたいところです。それを自動で行うにはCCP4のSORTWATERを使います。~
 ただし、どの程度PDB Deposit時の処理と一致するかは確認しておく必要があるでしょう(Chain IDや番号の変更については登録時に要望を出せば相談に乗ってくれるそうです)。
 
 - PDBj ADITチュートリアル 登録前の確認事項 - http://pdbdep.protein.osaka-u.ac.jp/tutorial/ja/before_deposition.html
 - PDB講習会 in 京都(2008) 資料PDF 3-2-9節 - http://www.pdbj.org/workshop/20081127/20-3-2.pdf
 - CCP4BB manipulation of water molecules in pdb files - http://www.mail-archive.com/ccp4bb@jiscmail.ac.uk/msg27923.html
 
 ** ELEMENTカラムを追加するには [#n16a4b30]
 CNSで精密化などをした場合、77,78桁目のフィールドが空白になってしまうことがあります。ここは元素名が入るところですが、プログラムによっては必要なこともあるようです(COOT 0.5のみ必要; 0.5.1以降は不要になりました)。
  % pdbset xyzin refine.pdb xyzout refine_ccp4.pdb <<EOF
  EOF
 これで出力された''refine_ccp4.pdb''には元素名が出力されています。