これまでCLUSTALWによるクラスタリングから系統樹作成はDDBJのサービスを主に使っていたのだけれど、系統樹を描く部分はNjplotというかなり古いソフトをMac上で利用していた。
これがいつまで使えるかわからないし、クラスタリングからの連携も面倒なので、一気にコマンドでやってしまう環境をローカルに構築する方法を調べた。
一つは
$ brew install clustal-w
とインストールしてしまう方法。
もう一つはBiopythonをpython上で使う方法。
ここはやっぱりpythonでやってしまって、webアプリ化してしまうのが良かろう。
Biopyton からClustalW2を使って系統樹を作成する - Qiita
こちらのサイトを参考に
$ python3 Python 3.7.4 (default, Sep 26 2019, 04:54:54) [GCC 5.4.0 20160609] on linux Type "help", "copyright", "credits" or "license" for more information. >>> from Bio.Align.Applications import ClustalwCommandline >>> dir = "/clustalw" >>> input = dir + "/data.fasta" >>> clustalw_cline = ClustalwCommandline("clustalw2", infile=input) >>> stdout, stderr = clustalw_cline() >>> out = dir + "/data.dnd" >>> from Bio import Phylo >>> tree = Phylo.read(out, "newick") >>> Phylo.draw(tree)
ざっとこんな感じ。
最後の行を
>>> Phylo.draw_ascii(tree)
とすると系統樹がasciiアートのテキストデータとして表示される。クレードの長さはちょっと不正確だけれど、コマンドラインだけで完結するのでこれはこれで楽ちんだ。
また
>>> import matplotlib >>> import matplotlib.pyplot as plt >>> matplotlib.rc('font', size=6) >>> Phylo.draw(tree) >>> tree_fig = dir + "/phylo_tree.png" >>> plt.savefig(tree_fig)
このようにmatplotlibを使ってイメージを整形保存することも可能。
これらを例によってFlaskアプリに仕立てる。
どういうわけだかわからないが普通にコンソールからpython3 namage.py runserverで起動したり、flask runで起動したときはちゃんと系統樹がかけるのに、systemdでデーモン起動するとエラーが出て表示できない。pythonをlinuxbrewでインストールしたものがsystemdからうまく利用できていないのか?
とおもってソースからコンパイルしたものを直接インストールしたらライブラリがロードできなくてなんか挙動がおかしいし。
やっぱりclustalwの部分はpythonからshellに出て処理したほうがいいのかもしれない。
解決。
そもそもbiopythonのclustalwはshellのclustalwを呼び出しているだけだった。なので、パスがちゃんと通っていればsystemdからでも動くし、パスが通ってなければインタプリタからでも動かないということらしい。