ファイルフォーマット
構造解析のプログラムはいろいろな種類があるのでファイルフォーマットも様々な物があります。しかし、一通り変換手順を覚えてしまえばたいした問題ではありません。ここではそんなファイルフォーマットの変換を取り上げてみます。
電子密度図
位相情報付きMTZから電子密度図を描きたい
CCP4のFFTを使います。
CCP4パッケージ中のFFTを使用することで電子密度図を出力できます。
- 参考: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形式のfileをmapとして読み込みます。
- WRite map file format
- format形式でmapをfileに書き出します。
構造因子ファイル
構造因子ファイルのフォーマットはプログラムの数だけ存在すると言っても過言ではないでしょう。ここでは私が遭遇したフォーマット変換について記述しておきます。
SCAファイル(SCALEPACK)からの変換
SCAファイルをMTZ形式に変換する
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形式に変換する
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]を開きます。開いたら、
- 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にして表示させます。
うまくいかないとき
変換してみたとき、以下のようなエラーが出て失敗しました。
*** 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で.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ファイルを得ることができます。
スクリプトで行う
まず回折データをCNSが利用できる形式で準備します。このファイルは構造因子とσ値が含まれた反射ファイルにクロスバリデーション(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形式に変換する
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に変更して使用します。 出ない場合もあるのかどうかは不明です
なお、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じゃないので注意!