31 07 2012 bioinformatics Ruby Tweet
プログラムとして実行できるfasta形式のプログラミング言語を作ってみた。いちおうチューリング完全(なはず)。
>HELLO_WORLD ccggaccgcg gggcaccgcc ggcggaccgc cgccggaccg cccggcgacc gccgccccac cgcccgccca ccgcggggga ccgccgcccc accgccgccg gaccgccgcc ggaccgccgg cgcaccgcgg cgggaaccga cacatccata ccacagaacc caaaa
これはatgcというコマンドで解釈して実行します。
$ bin/atgc hello_world.fasta Hello world!
ゲノム的にGCリッチなほうがいいだろうということで0と1にg,cをそれぞれ割り当てて数字を表現するようにしてる。exitコマンドには終止コドンを割り当てようかとも思ったが、なんとなくaaaにしてみた(polyA)。
しかも(というか当たり前だけど)blastでホモロジーサーチがかけられるし、multifastaにしておけばソース管理もできるうえに、データベース化してインデックスはっておけば、NCBIのツール群でコマンド一発で取り出せる。
ただ今回作ったHELLO_WORLDの配列はblastnだといい感じにヒットしなくて悲しかったので、blastxかけたらブラックコットンウッドからなんかひっかかった。
>gb|ABK94795.1| unknown [Populus trichocarpa] Length=229 Score = 33.5 bits (75), Expect = 5.9 Identities = 14/21 (66%), Positives = 15/21 (71%), Gaps = 0/21 (0%) Frame = +1 Query 100 GPPPDRRRTAAGTDTSIPQNP 162 GPPPDRRRT GT S P +P Sbjct 209 GPPPDRRRTRQGTTKSEPASP 22
VMとかは特にいじってないのでEsotericの本を参照のこと。
VMを使った中間言語方式の強力さを理解した。
追記 2012.07.31
ソースをGitHubに移した
$ ./bin/atgc examples/shizuoka.fasta
**
**
****
******
******
********
**** ******
******** ****** ************
******** **************************
**************** **********************
********************** **********************
************************** ************************
************************** **********************
**********************************************************
****************************************** ******************
**************************************** ************
************************************** ****************
************************************ ****************
************************************** ********************
************************************** ************************
************************************ ************************
************************************** **********************
****************************************** ********************
************************************************ ********************
**** ******************************** ********************
**** **************** ************** ****************
************************************** **************
**************************** ******
**********