PyMOL

PyMOLクックブック  

PyMOLでお絵描きするための小技集。美麗なイメージを目指せ!

 

コマンドの文法表記は以下のような表記規則に従います(たぶん)。

表記例意味
太字PyMOLコマンド
透明度(0-1)値を指定する。カッコ内は値の範囲など
{H|S|L}どれかを選択(これならH,S,Lのどれか)。
その他、dash_{gap|length}ならdash_gapdash_lengthってこと
[, mode]省略可能なパラメータ

水素結合などの点線を描きたい  

問題
水素結合などを示す点線を描きたい
解法
  1. distanceを使います。

    distance 対象1, 対象2
    distance 名前 = 対象1, 対象2 [, カットオフ [, モード]]

    名前指定でオブジェクト名を付けることができます。省略した場合はdist01,dist02...になります。また、カットオフ値を指定することで表示する最長の距離を指定することができます。モードはなんだかわかりません(ディフォルト0)。
  2. マウスで選択することで作成します。
    Ctrl+真ん中ボタンで線を引きたい2つの原子を選択した後、コマンドラインでdistと入力します。

微妙な結合距離のためか、共有結合が切れている  

2010-04-13 : 追加

問題
共有結合を作りたい
解法
bondを使います。

bond 対象1, 対象2

distanceと同様に対象となる2つの原子を共有結合で結合します。対象はCtrl+真ん中で選択することも可能です。
なお、結合を削除する場合はunbondを使います。

点線のパラメータを調整したい  

2010-01-27 : 色と対象について更新

問題
点線を描いてみたが点の間隔が気に入らない
解法
set dash_gap, set dash_length, set dash_widthで調整します。

set dash_{gap|length|width}, [, 対象]

例えばこんな感じ。
PyMOL> set dash_gap,0.2
PyMOL> set dash_length,0.2
PyMOL> set dash_width,2
PyMOL> set dash_color,tv_blue
rayコマンドでレンダリングするとギャップが狭くなるので確認して下さい。なお、複数選択の場合は以下の感じで。
PyMOL> set dash_color,tv_blue,dist01:dist02
PyMOL> set dash_color,tv_blue,dist*         <-- ワイルドカードも使えるようです
参考

セルを描きたい(作成中)  

問題
単位格子を表す枠を描き、色指定および立体的に描画したい
解法
単位格子を表すセルを描いてみます。任意の場所に出現させるのは現在調査中・・・
この例ではセルを描いて色を変更したりレイトレーシングの時に立体的に描画するようにしています。 まずPDBファイルを開いておきます。開いたPDBのオブジェクト名はmol1とします。以降はスクリプトで。
PyMOL> show cell,mol1             セルを表示
PyMOL> color red,mol1             色を赤にしてみる
PyMOL> util.cbag mol1             分子だけ元の色に戻す
PyMOL> set cgo_line_width=3       セルの線の太さを変更
PyMOL> set cgo_line_radius=0.4    3D描画の際のセルの線の半径を変更
PyMOL> ray                        レイトレース
これはCompiled Graphics Objects(CGOs)という機能を使っているようです。詳しいことはドキュメントにも書いてませんが・・・
参考

オブジェクトを半透明にしたい  

transparency.png
問題
残基の側鎖などを重ねて描くときに、一方を半透明にしたい。
解法
stick_transparencyまたはcartoon_transparencysphere_transparencyを使います。
これらのコマンドで、対象となるオブジェクトのtransparencyの値をセットします。

set stick_transparency, 透明度(0-1)[, 対象]


例えば対象となるオブジェクトがmol1なら、
PyMOL> set stick_transparency,0.5,mol1
で半透明になります。stick_ならstickオブジェクト、cartoon_ならリボン図が対象になります。透明度は1が完全に透明、0が不透明です。
右の例ではstick_transparencyを0.8にセットしてレイトレースしたものです。PyMOL 1.1で試したところstick_transparencyでは対象にセレクトオブジェクト名(selectで作ったオブジェクト)を指定しても効果が適用されませんでした。分子名で指定する必要があるみたいです(たぶん)。sphere_transparencyではセレクトオブジェクトでも半透明になりました。
参考

Sphereの半径を指定したい  

問題
sphereで描いた原子の大きさを調整したい。
解法
  1. 描画比率を変更する
    van der Waals半径と実際の描画との比率を変更することで原子の大きさを変更します。

    set sphere_scale, スケール[, 対象]

    PyMOL内部でvan der Waals半径に対する比率が設定できるのでその値を変更します。この方法だと異なる原子のvan der Waals半径の比を保持したままサイズを変更できます。特定の原子の大きさだけを変更したい場合はalterコマンドを使用します。
    PyMOL> set sphere_scale, 0.2
  2. van der Waals半径の値を変更する
    alterコマンドを使います。

    alter 対象, vdw=VDW半径

    van der Waals半径を指定するという形で調整可能なようです。
    実際に使用する時はalterコマンドの後、rebuildして更新します。
    PyMOL> alter wat, vdw=0.5
    PyMOL> rebuild

立体視用イメージを作成したい  

right_-3_mini.png
left_3_mini.png
問題
立体視用のイメージを作成したいが、マウスで角度を変えたくない。
解法
rayコマンドにオプションを付けて使います。

ray angle=角度

レイトレーシングを行うrayコマンドにangleオプションを付けます。角度は大体2-3°ぐらいがよさそうです。3°で深度が強調されるぐらいで、2°ならほどよい気がします。
PyMOL> ray angle=3    <- たぶん交差法左用
PyMOL> ray angle=-3   <- たぶん交差法右用
なお、右と左は交差法と平行法で逆になりますので注意して下さい。

ラベルのサイズ、相対位置を調整したい  

問題
残基名や距離などのラベルの位置や大きさを変更したい。
解法
  1. External GUIからセットする
    PyMOLではオブジェクトにラベルを表示させることができますが、表示させたラベルのパラメータはExternal GUIの[Setting]->[Edit All...]から調整します。このメニューを選ぶとパラメータが並んだダイアログが開きますので必要なパラメータを変更します。
    このダイアログ中では全てのパラメータが表示されて探すのが大変なので、下にあるFilterにキーワードを入力して絞りこみます。例えば今回はラベルの関連なのでlabelと入力しして絞り込んでみると、関連すると思われるパラメータが表示されますので、その中から必要と思われるパラメータを探して値を変更します。値を変更した後にEnterキーを押さないと反映されないので注意!
    主要なパラメータを下にまとめておきます。
  2. コンソールでセットする
    コンソールで直接セットすることもできます。
    PyMOL> set label_size, 25
    適切な値は表示を見ながら合わせて下さい。

表示を調整するための主要パラメータ  

パラメータ名内容設定例
label_colorラベルの色white, orangeなど
label_font_idフォントの種類数値(環境依存?)
label_outline_color縁取りの色white, orangeなど
label_positionオブジェクトからの相対位置[x,y,z]
label_sizeフォントサイズ数値

他にもいろいろパラメータはありますが、だいたい名前を見れば想像できると思うのでいろいろ試してみて下さい。
ラベル以外のパラメータの中には[Setting]メニューから簡単に設定できるパラメータもあるので確認してみて下さい。

正確にカメラ方位を変更したい  

2010-01-14追加

問題
例えばY軸に対して90度方位を変えた図を描きたいが、マウス操作では正確ではない。
解法
turnメソッドを使います。

turn , 角度

turnメソッドにより視点を回転させることができます。例えば90度横からの図を描きたい、などに有効です。以前、rotateでできると書いていましたが、それだとオブジェクトが回転されてしまうので目的とは異なってました・・・
PyMOL> turn y, 90
Y軸(画面の中心)を基準に90度回転させる。

オブジェクトを回転させたい  

2010-01-14修正

問題
特定のオブジェクトのみを回転させたい
解法
rotateメソッドを使います。

rotate , 角度[, 対象[, カメラ[, オブジェクト[, 座標]]]]

rotateメソッドを使うと回転角度を数値で指定することができるので正確に回転させた図を描くことができます。メソッド中のカメラ、オブジェクト、座標(origin)については詳しくは調べてません・・・回転中心などを指定できるのだと思いますが。
PyMOL> rotate y, 90
Y軸(画面の中心)を基準に90度回転させる。

現在の方位を取得したい  

2009-12-22追加

問題
向きを変えて構造を確認したいが、現在の描画の方位を変更したくない。
解法
External GUIウィンドウのGet Viewボタンをクリックするか、get_viewメソッドを使います。
現在の方位を一度記憶してからモデルを確認するという方法が使えます。方位を取得すると現在の方位パラメータが得られるので、その値を使ってset_viewコマンドで戻すことができます。
PyMOL> get_view
### cut below here and paste into script ###
set_view (\
     0.317731529,    0.080384687,    0.944767177,\
     0.366989166,   -0.929166734,   -0.044363577,\
     0.874280035,    0.360815048,   -0.324725896,\
     0.000000000,    0.000000000, -446.314361572,\
    34.259254456,    0.657300949,   33.577735901,\
   351.877655029,  540.751098633,  -20.000000000 )
### cut above here and paste into script ###
このような出力が得られるので、この部分をコピーしてset_view()を実行すれば元の方位に戻ります。

二次構造を変更したい  

問題
DSSPで計算した二次構造とPyMOLで表現される二次構造が異なっている。
解法
alterメソッドを使います。
DSSPなどの二次構造計算プログラムで計算した結果とPyMOLで自動的に割り当てられる二次構造が異なることがあります。これは構造を詳しく議論したい場合に問題となることがありますので図を合わせておきたいところです。そんなときはalterメソッドを使うことで修正することが可能です。

alter 対象,ss='{H|S|L}'

alterはいろいろな事を変更できるようですが、ここでは二次構造を変更します。Hはへリックス、Sはストランド、Lはループを表します。alterだけでは二次構造が書き換わらないので実行した後rebuildを使用します。
PyMOL> alter (resi 23-25 and chain A),ss='S'
PyMOL> rebuild
これでChain Aの残基番号23-25がストランド表現に変更されます。

変な結合ができる  

2009-12-22追加

pymol_badConnection.png
問題
右の図のように変な結合ができてしまい何だかわからないコトになっている。
解法
PDBファイルのCONECTレコードを削除します。
PDBの内容にもよると思いますが、CONECTレコードが悪さをしていることがあるようです。あまり細かくは検証していませんが、CONECTレコードは原子の連番と結びつけられているようなのでその番号が変わってしまっている、などが考えられます。うまく使えばつながらない結合をつなぐこともできるかもしれません。
添付ファイル: filepymol_badConnection.png 110件 [詳細] fileright_-3_mini.png 128件 [詳細] fileleft_3_mini.png 123件 [詳細] filetransparency.png 130件 [詳細]