* スクリプト機能を使う [#td086547]
 PyMOLは強力なスクリプト機能があり、おそらく全ての機能がスクリプトで実行できるようになっています(たぶん)。結局のところ通常使うPyMOLはそのPyMOL内部にアクセスするためのインタフェースに過ぎないのかもしれません。またPyMOLという名前からもわかる通り、Pythonを使って制御することができます。~
 そんなわけでPyMOLの真髄であるスクリプティングを行ってみます。さまざまな機能を制御することができるため、全てを解説することはできませんが(公式ドキュメントってあるのかな?)、その入口について解説します。自分でスクリプトを書かなくても、ネット上には有志による多数のスクリプトが公開されていますのでそういう意味でも有益なんではないかと思います。
 
 - [[ダイアログボックスを表示してみた記録>./ダイアログボックス]]
 
 ** 外部スクリプトの読み込み [#n2f3983e]
 まずは自分で書くにしろ、ダウンロードしたものを使うにしろスクリプトファイルを読むことから始まります。読み込みは至って簡単。
  PyMOL> run test.py
 です。test.pyは対象となるスクリプトファイルを指定します。PyMOLを起動したディレクトリが基準となるようです。読み込んだ後、そのファイル中に定義されているメソッドを使用することができます。
 
 ** スクリプトを書いてみる [#c5bbc420]
 スクリプトを書くといっても難しさは実装する機能次第。ほんの数行で済んでしまうものから、数十行にわたるスクリプトまであるでしょう。ここでは簡単なサンプルとしてCOOTではおなじみのPDBサイトからPDBファイルを取得してそれを読み込むスクリプトを紹介します・・・と思ってたのですが、PyMOLの標準のプラグインでPDB Loader Serviceってのがありましたね。ま、とりあえず機能実装の例ということで・・・&huh;
 #script(get_pdb.py)
 
 :使い方|
 PyMOLを起動した後、
  PyMOL> run get_pdb.py
  PyMOL> get_pdb("2dsy")
 でPDB ID:2dsyの構造が読み込まれます。なお、エラー処理などしてないので存在しないIDだと何も表示されません。
 
 *** PyMOLスクリプトの記述について [#s2772eea]
 スクリプトの記述は特別なことはなく(たぶん)、Pythonで書けば実行可能です。記述したスクリプトからPyMOLのAPIを呼び出す際にはコマンドオブジェクトであるcmdを使います。
  cmd.load("refine.pdb")
 という感じで使えばPyMOLの''load''メソッドを使うことができます。その他、もう少し高度なメソッドもありそうですが、それほど調査していませんので[[PyMOL Wiki>http://pymolwiki.org/]]などを参考にしてみてください。
 
 ** ショートカットキーワードを追加する [#oa9426a3]
 #anno2(2011-08-12)
 上記の設定で関数を追加することは可能ですが、さらにちょっとした技を使えばキーワードとして登録も可能なようです。キーワードとはPyMOLコマンドラインにPython文法ではない形で入力し、コマンドを実行する方法です。例えばselectコマンドがあります。selectコマンドの場合、
  PyMOL> select His192, resi 192 and chain a
 というような形でコマンドを実行することができますが、同様のことを自作コマンドでもできるようにしてみます。例えば上で作成したget_pdbを、
  PyMOL> get_pdb 2dsy
 という形で実行できるようにします。
 
 *** キーワードの追加 [#c998fcff]
 コマンドオブジェクトcmdのkeywordに追加します。
  PyMOL> run get_pdb.py  <-- get_pdbを読み込む
  PyMOL> cmd.keyword["get_pdb"] = [get_pdb, 0, 0, "", parsing.STRICT]
 これで、
  PyMOL> get_pdb 2dsy
 という形でコマンド実行が可能になりました。~
 なお、keywordに渡すリストの内容ですが、
 > [ command, No of min_arg, No of max_arg, separator, mode]
 
 だそうです。~
 詳細はpymol.keywordsのソースを眺めてみて下さい(標準なら/usr/lib/python2.'''X'''/site-packages/pymol/keywords.pyです)。