ファイルフォーマット  

構造解析のプログラムはいろいろな種類があるのでファイルフォーマットも様々な物があります。しかし、一通り変換手順を覚えてしまえばたいした問題ではありません。ここではそんなファイルフォーマットの変換を取り上げてみます。

電子密度図  

位相情報付きMTZから電子密度図を描きたい  

CCP4のFFTを使います。
CCP4パッケージ中のFFTを使用することで電子密度図を出力できます。

電子密度図を変換したい  

MAPMANを使います。
電子密度の変換にはUppsala Software FactoryのRAVEパッケージに含まれているMAPMANを使用します。MAPMANはCNSやCCP4だけでなくO(オー)のbrix形式などにも変換することができます。その他、マップを操作するコマンドが提供されています。

MAPMANの基本的な使い方  

コマンドラインで実行して、マップを読み込む→書き出す、という手順を行うだけです。

% mapman
MAPMAN > re m1 refine_2fofc.map cns <-- CNS形式のrefine_2fofc.mapを読み込む
MAPMAN > wr m1 2fofc.map ccp4       <-- CCP4形式で書き出す
MAPMAN > quit

MAPMANコマンドリファレンス  

REad map file format
format形式のfilemapとして読み込みます。
WRite map file format
format形式でmapfileに書き出します。

構造因子ファイル  

構造因子ファイルのフォーマットはプログラムの数だけ存在すると言っても過言ではないでしょう。ここでは私が遭遇したフォーマット変換について記述しておきます。

SCAファイル(SCALEPACK)からの変換  

SCAファイルをMTZ形式に変換する  

HKL2000(DENZO/SCALEPACK)のscaファイルをCCP4iを使ってmtzに変換します。
CCP4iを起動して[Data Reduction]->[Import Merged Data]を開きます。開いたら、

で、Runで変換されます。

SCA形式をCV形式に変換する  

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形式に変換する  

SHELXPROを使います。
SHELXPROのメニュー中の[D] Convert DENZO/SCALEPACK .sca to .hklおよび作成した.hklファイルに対して[V] R(free) filesを使用します。

CVファイルをMTZ形式に変換する  

CNSのFファイルであるcv形式をCCP4iを使ってmtzに変換します。 CCP4iを起動して[Reflection Data Utilities]->[Convert to/modify/extend MTZ]を開きます。開いたら、

で、Runで変換できるはずです。
ディフォルトでは入力ファイルが.hklになってるので.cvにして表示させます。

うまくいかないとき  

変換してみたとき、以下のようなエラーが出て失敗しました。

*** 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ファイルも変換できるようです → CCP4bb #675

FORMATパラメータの書式  

正確に調べたわけではありませんが、Fortran formatの意味は以下の通りだと推測されます。 フィールドはコンマで区切られており、各要素の書式は

[繰返しの回数]Symbol[パラメータ]

のようになっています。
例えば、(6X,3F5.0)なら6Xと3F5.0の要素から構成されています。また、3F5.0は繰り返しの回数が3なのでF5.0,F5.0,F5.0と等価になります。Symbolの意味は以下の通りです。

XパディングIOBS=などのデータとしての意味がない部分を表し、無視される
F浮動小数点型フィールド実数。
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ファイルを作成する  

いくつか方法があります。

mtz_to_cnsとmake_cvを使う  

CNSインストールディレクトリ下のutilsにあるmtz_to_cnsを使います。

% mtz_to_cns infile.mtz outfile.hkl
% cns < make_cv.inp

これで変換されます。ただし、make_cv.inpではFreeRフラグが新たに作成されてしまうので次のCCP4iを使う方がいいかもしれません。

CCP4iを使う  

CCP4i -> Reflection Data Utilities -> Convert from MTZを使用します。実際に実行されるプログラムはMTZ2VARIOUSです。
実行ダイアログでは、

で設定します。MTZを作成したときのカラム名の設定によって名前が異なる場合がありますが、大体はF_とかSIGF_なのでそのような名前のものを選択しましょう。また、FP, SIGFP以外のFPHなどは全部[Unassigned]にするところがポイント。値が入っているとCNSで使えるフォーマットになりません。また、FreeR flagをMTZと同じ条件にしておきたいならFreeRに[FreeR_flag]を選択しておきます。
ここで得られた.hklファイルをCNSのmake_cv.inpで処理するとCVファイルを得ることができます。

スクリプトで行う  

まず回折データをCNSが利用できる形式で準備します。このファイルは構造因子とσ値が含まれた反射ファイルにクロスバリデーション(Cross validation)情報を追加したものです。この時にmake_cv.inpを使用します。

  1. 反射ファイル(.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にセットすることで変換が行われます。
  2. make_cv.inpの編集
    make_cvには格子定数と反射ファイル名、出力ファイル名、分解能などを指定します。

MTZ形式からSHELX HKL形式に変換する  

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

こんな感じで変換されます。この例ではHKLF 3フォーマットを使えという警告が出てますのでSHLEXで流すときはinsファイル中のHKLF 4の部分をHKLF 3に変更して使用します。 出ない場合もあるのかどうかは不明です [smile]
なお、CCP4iのmtz2variousでも変換できますが、私の場合うまくいきませんでした・・・(出力されたhklファイルの内容がおかしかった)

HKL2MAPのPHSファイルをMTZに変換する  

HKL2MAPで配布しているphs2mtzを使うか、CCP4のF2MTZで変換します。
HKL2MAPの位相情報ファイルである.phsはそのままでは使いにくいのでMTZ形式に変換します。HKL2MAPのサイトに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に変換する  

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パラメータがない  

 $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フラグがない  

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ファイル  

PDBファイルを1文字表記にしたい  

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じゃないので注意!