* ファイルフォーマット [#t7741e3d]
 #floatcontents
 構造解析のプログラムはいろいろな種類があるのでファイルフォーマットも様々な物があります。しかし、一通り変換手順を覚えてしまえばたいした問題ではありません。ここではそんなファイルフォーマットの変換を取り上げてみます。
 
 * 電子密度図 [#r2c38ae4]
 ** 位相情報付きMTZから電子密度図を描きたい [#e35c6373]
 CCP4のFFTを使います。~
 CCP4パッケージ中のFFTを使用することで電子密度図を出力できます。
 - 参考:[[FFT>FFT]]
 
 ** 電子密度図を変換したい [#va53d0a3]
 MAPMANを使います。~
 電子密度の変換にはUppsala Software FactoryのRAVEパッケージに含まれているMAPMANを使用します。MAPMANはCNSやCCP4だけでなくO(オー)のbrix形式などにも変換することができます。その他、マップを操作するコマンドが提供されています。
 
 *** MAPMANの基本的な使い方 [#o423781b]
 コマンドラインで実行して、マップを読み込む→書き出す、という手順を行うだけです。
  % mapman
  MAPMAN > re m1 refine_2fofc.map cns <-- CNS形式のrefine_2fofc.mapを読み込む
  MAPMAN > wr m1 2fofc.map ccp4       <-- CCP4形式で書き出す
  MAPMAN > quit
 
 *** MAPMANコマンドリファレンス [#k9ed097a]
 :REad '''map''' '''file''' '''format'''|'''format'''形式の'''file'''を'''map'''として読み込みます。
 :WRite '''map''' '''file''' '''format'''|'''format'''形式で'''map'''を'''file'''に書き出します。
 
 * 構造因子ファイル [#b9d60091]
 構造因子ファイルのフォーマットはプログラムの数だけ存在すると言っても過言ではないでしょう。ここでは私が遭遇したフォーマット変換について記述しておきます。
 
 ** SCAファイル(SCALEPACK)からの変換 [#k9b744bc]
 *** SCAファイルをMTZ形式に変換する [#f76f7426]
 HKL2000(DENZO/SCALEPACK)のscaファイルをCCP4iを使ってmtzに変換します。~
 CCP4iを起動して[Data Reduction]->[Import Merged Data]を開きます。開いたら、
 - Convert scaled data output from ''[Scakepack (DENZO)]'' into MTZ format
 - In(sca), Out(mtz)のファイルを指定
 - MTZ Project, Crystal, Dataset Names & Data Harvesting
 -- Crystal ''[適当に(NATIVEなど)]'' belonging to Project ''[プロジェクト名(PROJECTなど)]''
 -- Dataset name ''[適当に(NATIVEなど)]''
 - Extra Inofrmation for MTZ File
 -- 空間群と格子定数、測定波長、非対称単位中の残基数を入力
 
 で、Runで変換されます。
 
 *** SCA形式をCV形式に変換する [#ha6249ef]
 to_cnsユーティリティとmake_cv.inpを利用します。~
 HKL2000のscaファイルをto_cnsユーティリティを使用してCNSで使用するhklファイルに変換します。このプログラムはCNSのインストールディレクトリの下のutilsディレクトリに存在します。私の場合は実行ファイルになってなかったのでコンパイルしました。rootで作業します。
  # cd /usr/local/cns_solve_1.2/utils   <-- プログラムがあるディレクトリ
  # gcc -o to_cns -lm to_cns.c          <-- コンパイル
 これで実行ファイルができたので''to_cns''コマンドが使用できます。
  % to_cns scakepack.sca start.hkl
 でscakepack.scaファイルがstart.hklファイルに変換されます。
  usage: to_cns [-f hkl|dtrek] [-nomean] in-file out-file
  defaults: format is hkl
            mean I written for anomalous d*trek files
 このようになっていますのでd*trekのファイルも使えるようです。~
 この段階ではFreeRフラグが付いていないのでmake_cv.inpでcvを作成します。
  % cns < make_cv.inp
 
 *** SCA形式をSHELX HKL形式に変換する [#n7a380cc]
 SHELXPROを使います。~
 SHELXPROのメニュー中の''[D] Convert DENZO/SCALEPACK .sca to .hkl''および作成した.hklファイルに対して''[V] R(free) files''を使用します。
 
 ** CVファイルをMTZ形式に変換する [#zbe90429]
 CNSのFファイルであるcv形式をCCP4iを使ってmtzに変換します。
 CCP4iを起動して[Reflection Data Utilities]->[Convert to/modify/extend MTZ]を開きます。開いたら、
 - Import reflection file in ''[X-PLOR/CNS]'' format and create MTZ file
 - In(cv), Out(mtz)のファイルを指定
 - MTZ Project, Crystal & Dataset Names
 -- Crystal [てきとうに] belonging to Project [PROJECT]
 -- Dataset name [てきとうに]
 - Cell and Spacegroup to be saved in MTZ file
 -- 空間群と格子定数を入力
 - Detailed specification of import file format
 -- 通常、特に変更なし
 
 で、Runで変換できるはずです。~
 ディフォルトでは入力ファイルが.hklになってるので.cvにして表示させます。
 
 *** うまくいかないとき [#kd08a2bf]
 変換してみたとき、以下のようなエラーが出て失敗しました。
  *** Read error
  Check FORMAT -- especially the need for REALs
   f2mtz:  problems reading reflection       0  
 これはおそらく行のフォーマットがcvに合っていないときに起こります。この時は、Detailed specification of import file formatの''Fortran format''を修正します。~
 ディフォルトでは
  '(6X,3F5.0,6X,F10.3,7X,F10.3,6X,F10.0)'
 になっていますが、わたしの場合は、
  '(6X,3F5.0,6X,F10.3,17X,F10.3,6X,F10.0)'
 に変更して使いました。cvのファイル形式が微妙に違うときに起こるようです。これを利用すると2行構成のcvファイルも変換できるようです &rarr; [[CCP4bb #675>http://www.ysbl.york.ac.uk/ccp4bb/2000/msg00675.html]]
 
 *** FORMATパラメータの書式 [#q8632076]
 正確に調べたわけではありませんが、Fortran formatの意味は以下の通りだと推測されます。
 フィールドはコンマで区切られており、各要素の書式は
  [繰返しの回数]Symbol[パラメータ]
 のようになっています。~
 例えば、''(6X,3F5.0)''なら6Xと3F5.0の要素から構成されています。また、3F5.0は繰り返しの回数が3なのでF5.0,F5.0,F5.0と等価になります。Symbolの意味は以下の通りです。
 |~X|パディング            |IOBS=などのデータとしての意味がない部分を表し、無視される                                                    |
 |~F|浮動小数点型フィールド|実数。&br;F10.3という場合はフィールドの桁数が10で小数点以下の桁数が3ということ|
 Xはフィールドとして扱われないので、''(6X,3F5.0,6X,F10.3,7X,F10.3,6X,F10.0)''ならF5.0,F5.0,F5.0,F10.3,F10.3,F10.0の6つのフィールドが定義されていることになります。~
 なお、前出のCCP4bbによると''/25X''とすると(つまりフィールドの先頭)、''/(スラッシュ)''が改行として解釈されるようです。
 
 ** MTZファイルからCVファイルを作成する [#ie8eedbd]
 いくつか方法があります。
 
 *** mtz_to_cnsとmake_cvを使う [#i9822a26]
 CNSインストールディレクトリ下のutilsにある''mtz_to_cns''を使います。
  % mtz_to_cns infile.mtz outfile.hkl
  % cns < make_cv.inp
 これで変換されます。ただし、make_cv.inpではFreeRフラグが新たに作成されてしまうので次のCCP4iを使う方がいいかもしれません。
 
 *** CCP4iを使う [#aa263c9c]
 - CCP4iで.hklファイルに変換後、CNSのmake_cv.inpで処理します
 
 CCP4i -> Reflection Data Utilities -> Convert from MTZを使用します。実際に実行されるプログラムは''MTZ2VARIOUS''です。~
 実行ダイアログでは、
 
 - Convert MTZ to [CNS] format
 - MTZ File Labels
 -- FP [F] SIGFP [SIGF]
 -- FreeR [FreeR_flag]
 
 で設定します。MTZを作成したときのカラム名の設定によって名前が異なる場合がありますが、大体はF_とかSIGF_なのでそのような名前のものを選択しましょう。また、''FP, SIGFP以外のFPHなどは全部[Unassigned]にするところがポイント。''値が入っているとCNSで使えるフォーマットになりません。また、''FreeR flagをMTZと同じ条件にしておきたいならFreeRに[FreeR_flag]を選択しておきます。''~
 ここで得られた.hklファイルをCNSのmake_cv.inpで処理するとCVファイルを得ることができます。
 
 *** スクリプトで行う [#m54fa462]
 まず回折データをCNSが利用できる形式で準備します。このファイルは構造因子と&sigma;値が含まれた反射ファイルにクロスバリデーション(Cross validation)情報を追加したものです。この時にmake_cv.inpを使用します。
 
 + ''反射ファイル(.hkl)を作成する''~
 CCP4のmtz2variousを使用します。
  mtz2various HKLIN foo.mtz HKLOUT foo.hkl <<EOF
      LABIN FP=F SIGFP=SIGF FREE=FreeR_flag
      RESOLUTION 10000 2
      OUTPUT CNS/XPLOR
      END
  EOF
 これでfoo.hklという反射ファイルが得られます。得られた反射ファイル名をmake_cv.inpにセットすることで変換が行われます。
 + ''make_cv.inpの編集''~
 make_cvには格子定数と反射ファイル名、出力ファイル名、分解能などを指定します。
 
 ** MTZ形式からSHELX HKL形式に変換する [#p25237f8]
 SHELX付属のmtz2hklを使用します。~
  % mtz2hkl -r FREE -o foo.hkl foo.mtz
   ** Reading data. Number of reflections in file: 146277
                              reflections read:    146188
      (Discrepancies can be due to completion of indices up to
       maximal resolution and are generally nothing to worry about)
  
  *** WARNING *** WARNING *** WARNING *** WARNING *** WARNING ********
  *                                                                  *
  *  Data are amplitudes as opposed to intensities.                  *
  *  It is strongly recommended to use shelx with intensities.       *
  *  If you can get hold of you original data, please rerun truncate *
  *   with the option to keep intensities.                           *
  *  The created hkl-file will have HKLF 3 instead of HKLF 4 format. *
  *  You have to tell this to SHELX.                                 *
  *                                                                  *
  *** WARNING *** WARNING *** WARNING *** WARNING *** WARNING ********
  
   ** Summary:
      Data:  column 4, label: "FP"
      Sigma: column 5, label: "SIGFP"
      Rfree: column 3, label: "FREE"
      7323 Reflections with FREE = 0 marked for test set (-1)
      146188 reflections written to file "foo.hkl"
      in HKLF 3 format
      Cells stored in mtz-file:
          62.211 42.511 97.477 90 90 120
          62.211 42.511 97.477 90 90 120
 こんな感じで変換されます。&color(red){この例では''HKLF 3''フォーマットを使えという警告が出てますのでSHLEXで流すときはinsファイル中の''HKLF 4''の部分を''HKLF 3''に変更して使用します。}; 出ない場合もあるのかどうかは不明です&smile;
 こんな感じで変換されます。&color(red){この例では''HKLF 3''フォーマットを使えという警告が出てますのでSHLEXで流すときはinsファイル中の''HKLF 4''の部分を''HKLF 3''に変更して使用します。}; 出ない場合もあるのかどうかは不明です&smile;~
 なお、CCP4iのmtz2variousでも変換できますが、私の場合うまくいきませんでした・・・(出力されたhklファイルの内容がおかしかった)
 
 ** HKL2MAPのPHSファイルをMTZに変換する [#sadea199]
 HKL2MAPで配布しているphs2mtzを使うか、CCP4のF2MTZで変換します。~
 HKL2MAPの位相情報ファイルである.phsはそのままでは使いにくいのでMTZ形式に変換します。[[HKL2MAPのサイト>http://schneider.group.ifom-ieo-campus.it/hkl2map/index.html]]にphs2mtzというスクリプトが用意されているのでダウンロードして使います。F2MTZの実行部分の格子定数の部分を修正します。
  42: f2mtz hklin $1 hklout $1:r.mtz > t_$1:r_f2mtz.log <<END
  43: cell 96.0 120.0 166.1 90.0 90.0 90.0 <-- 格子定数を変更
  44: symmetry C2221                       <-- 空間群を変更
  45: labout H K L FP FOM PHIB SIGFP
  46: CTYPOUT H H H F W P Q
  47: END
 これを実行すればOK。
  % ./phs2mtz mymad.phs
 で変換されます。スクリプトの処理の都合上、親ディレクトリのファイルなどは指定できないようです。
  % ./phs2mtz ../mymad.phs <-- エラーで停止する
 
 ** PDB.orgの構造因子ファイル(mmCIF)をMTZに変換する [#s9d283b2]
 CIF2MTZを使います。~
 Protein Data Bank(PDB)の構造因子(structure factor;sf)ファイルはmmCIF形式です。これをMTZ形式に変換するにはCCP4iの[Reflection Data Utilities]->[Convert to/modify/extend MTZ]を使います。~
 ''Import reflection file in [mmCIF] format and create MTZfile''を選択すればCIF2MTZのGUIになります。Inには取得したCIFファイル、Outには出力するMTZファイル名を指定します。~
 その他のパラメータは記録されている情報により異なりますので注意してください。
 
 *** CELLパラメータがない [#n3931aed]
   $TEXT:Warning: $$ comment $$ 
   WARNING:  Warning in ccp4ccif_setup_context: Category CELL                                                                             n
   $$
    Warning: no cell information in file!
   cif2mtz:  No cell information in keywords or file!
 このエラーが出た場合、CIFファイルがCELLパラメータを情報として持っていません。対応するPDBファイルなどを参考にして格子定数を入力してください。
 
 *** FreeRフラグがない [#b6794ec4]
 CELLパラメータが正常に指定されているのにFAILするときはFree-Rフラグがたっていない可能性があります。主に1990年代前半以前のデータの場合に当てはまると思われます。
   MTZDUMP:   NO REFLECTIONS LISTED
  Times: User:       0.2s System:    0.0s Elapsed:     0:00  
  </pre>
  </html>
  
  ***************************************************************************
  * Information from CCP4Interface script
  ***************************************************************************
  Problem with FREE column in input file. All flags apparently identical.
  Check input file.
  ***************************************************************************
 ログを確認すると上記のようなメッセージが最後に出力されています。~
 その時は、GUI中で~
 [x] Create full unique set of reflections and [''generate FreeR data'']~
 にしてみるとうまくいきました。
 Free-Rフラグが設定されているのにうまくいかない場合は[''keep existing FreeR data'']を選択しているのにFree-Rラベル(FreeR column label[''FREE''])の値が間違っていることが考えられますので適切に指定してみて下さい。よくわからない場合は''generate FreeR data''でも特に問題はないと思います(Free-Rに使用する反射に重要な意味がある場合はダメですが)。
 
 * PDBファイル [#j44dcafb]
 ** PDBファイルを1文字表記にしたい [#zb884df1]
 #anno2(2010-03-02 by どぶお)
 :問題|PDBファイルを基にして1文字表記の配列情報を得たい
 :解法|
 CCP4パッケージのPDB_EXTRACTを使います。~
 様々な便利機能があるPDB_EXTRACTですが、ここでは以下のように使います。
  % pdb_extract -pdb foo.pdb -o foo.txt
 これでfoo.txtに配列情報が記録されます。以下の情報は2DSYの出力例です。
  <molecule_entity_id="1" >
  <molecule_entity_type="polypeptide(L)" >
  <molecule_one_letter_sequence="
  (MSE)DG(MSE)GTLTRYLEEA(MSE)ARARYELIADEEPYYGEIPDLPGVWATGKSLKECEANLQAALEDWLLFLLSRGET
  PPPLGEVRIELPHGEAA" >
  < molecule_chain_id="A,B,C,D" >
  < target_DB_id=" " > (if known)
  
  <molecule_entity_id=" " >
  <molecule_entity_type=" " >
  <molecule_one_letter_sequence="  " >
  <molecule_chain_id=" " >
  
  <target_DB_id=" " >  (if known)
 molecule_one_letter_sequenceの中に配列情報が出力されています。XMLっぽく見えますが、XMLじゃないので注意!