塩基配列の翻訳
 

Study C販売のご案内
Study Cのオンライン販売を行っております。
是非ご利用ください。

 塩基配列を翻訳してアミノ酸配列を生成するプログラムを作成します。
対応表はNCBIのページ内では下記のように表記されています。

                                                                               
 Genetic Code [1]

 The Standard Code (transl_table=1)  

    AAs  = FFLLSSSSYY**CC*WLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG
  Starts = ---M---------------M---------------M----------------------------
  Base1  = TTTTTTTTTTTTTTTTCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAGGGGGGGGGGGGGGGG
  Base2  = TTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGG
  Base3  = TCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAG

上の表記は、Base1がコドンの1文字目、Base2がコドンの2文字目、Base3がコドンの3文字目を表し対応するアミノ酸がAAsに記述されています。
たとえば、TTTの場合Base1、Base2、Base3がすべてTの場所(最初の文字)に相当するAAsの先頭の文字Fが対応するアミノ酸となります。 また、CTTならばBase1=C、Base2=T、Base3=Tの場所(17番目)に相当するAAsの文字Lが対応するアミノ酸となります。

今回は、上記の対応表をそのまま使い翻訳を行うプログラムを作成しました(trans_tbl変数にセット)。
翻訳する文字列は、seq変数にセットし、期待する結果のアミノ酸配列をtest変数にセットしました。 外側のループでseq変数の先頭から3文字ずつ取得しtrans_tblのBase1/2/3に一致するものを検索します(内側のループ)。 小文字の場合もあるのでseq内の文字は大文字に変換します。

                                                                               
#include <stdio.h>

char	*trans_tbl[4] = {
	 	"FFLLSSSSYY**CC*WLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG",
		"TTTTTTTTTTTTTTTTCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAGGGGGGGGGGGGGGGG",
		"TTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGG",
		"TCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAG"
	};

main()
{
	char	*test = "MWQLLLPTALLLLVSAGMRTEDLPKAVVFLEPQWYSVLEKDSVTLKCQGAYSPEDNSTQWFHSESLISSQASSYFIDAATVN";
	char	*seq = "atgtggcagctgctcctcccaactgctctgctacttctagtttcagctggc"
		       "atgcggactgaagatctcccaaaggctgtggtgttcctggagcctcaatgg"
		       "tacagcgtgcttgagaaggacagtgtgactctgaagtgccagggagcctac"
		       "tcccctgaggacaattccacacagtggtttcacagtgagagcctcatctca"
		       "agccaggcctcgagctacttcattgacgctgccacagtcaacg";
	int	i1;
	char	cno1, cno2, cno3;
	int	conv;

	for(;;){
		cno1 = *seq;
		cno2 = *(seq+1);
		cno3 = *(seq+2);
		if(cno1 == '\0' || cno2 == '\0' || cno3 == '\0')
			break;

		if(cno1 >= 'a' && cno1 <= 'z'){
			cno1 = cno1 - 'a' + 'A';
		}
		if(cno2 >= 'a' && cno2 <= 'z'){
			cno2 = cno2 - 'a' + 'A';
		}
		if(cno3 >= 'a' && cno3 <= 'z'){
			cno3 = cno3 - 'a' + 'A';
		}
		conv = '*';
		for(i1 = 0; i1 < 64; i1++){
			if(trans_tbl[1][i1] == cno1 &&
			   trans_tbl[2][i1] == cno2 &&
			   trans_tbl[3][i1] == cno3){
				conv = trans_tbl[0][i1];
				break;
			}
		}
		putchar(conv);
		seq += 3;
	}
	printf("\n%s\n", test);
}
Study Cにロードする Study Cにロードし編集する Study Cにロードし実行する ブラウザとの連携機能が使用可能なStudy Cのバージョンなどについて...

 このプログラムは、一文字を調べるためにループを使っています。 実用で使う場合には、trans_tblテーブルをもう少し工夫してループがないように変更したほうがよいでしょう(内側のfor文はなくすことができます)。

お問い合わせ先 バイオインフォマティクスのページに戻る Copyright(C) 2003 潟Iーキッド