2013年4月18日木曜日

DSSP で求めた二次構造を反映させる PyMOL スクリプトの生成

PyMOLを使ってみよう/クックブック - BioKids Wiki」で書かれているように、タンパク質の構造を詳しく議論したくて DSSP で計算した結果と図の二次構造を合わせたい場合がある。ただ、この PyMOL スクリプトを 1(または数)残基ずつ打ち込むのも面倒なので、自動でスクリプトを生成するプログラムを Ruby で書いてみた。ちなみに、研究室にいる間に研究に使える汎用的なプログラムを書いたのは初めて(笑)

プログラム

ダウンロード:gen-alter-ss-dssp.rb

class Residue
  attr_reader :chain, :num, :ss

  def initialize(chain, num, ss)
    @chain = chain
    @num = num
    @ss = case ss
          when "H", "G", "I"
            "H" # Helix
          when "E"
            "S" # Strand
          else
            "L" # Loop
          end
  end

  def generate_alter_ss
    "alter (chain #{@chain} and resi #{@num}), ss = '#{@ss}'"
  end
end

while line = gets
  break if /#  RESIDUE AA STRUCTURE/ =~ line
end

dssp_body = []
while line = gets
  next unless line[6..9].to_i > 0
  dssp_body << line.chomp
end

residues = []
dssp_body.each do |l|
  num = l[6..9].to_i
  chain = l[11]
  ss = l[16]
  residues << Residue.new(chain, num, ss)
end

# Output
residues.each do |r|
  puts r.generate_alter_ss
end

puts "\nrebuild"

やっていることは、入力された DSSP ファイルを本体まで読み飛ばし、鎖と残基番号で指定した残基の二次構造を前述の BioKids Wiki のページの表に従って変換するスクリプトを出力する、という流れ。DSSP ファイルの固定幅の性質を使っているので、バージョンアップで出力形式が変わったら動かなくなるかも。一応手元の DSSP ファイルではすべて正常に動いた。

使用例

foo.pdb と対応する foo.dssp を用意して

$ ruby gen-alter-ss-dssp.rb foo.dssp > alter-ss.pml

で PyMOL スクリプトファイル alter-ss.pml が生成される。

あとは PyMOL で foo.pdb を読み込んだ後、「File」→「Run...」で alter-ss.pml を読み込むか、

@ alter-ss.pml

とコマンドを打ち込めば、二次構造が DSSP で計算されたものに一気に変わる。

手元で試してみた限りでは、PyMOL の DSS と DSSP では意外と二次構造の割り当てが異なるので、やはり気をつけた方が良いのかも。

0 件のコメント :

コメントを投稿