General

PCR産物のDNA sequenceを作成するスクリプト

2010年7月26日

分子生物学用のツール。テンプレートと2つのプライマーの塩基配列から、PCR産物の塩基配列を計算して表示する。

始め、VBScript + InputBoxの組み合わせで作っていたが、テンプレート配列をInputBoxで入力させる際に不具合があったので、PHPに移行。PHPを使っている点で汎用的でないので、こちらのブログにメモしておくことにする。

<?php 

$template="
GGCTTTTCATAAAATTCCTTTTAAAATCATAACATAAAAGAATGATTCACATTAACGGAT
CCGTTAACTACGAAAATAGGCAACTTATTCTTAAGGGGCAAGATTAATTTATGTTTTCCC
GTCACCAACGACAAAATTTGCGAGGCTCTTTCCGAAAATAGGGTTGATCTTTGTTGTCAC
TGGATGTACTGTACATCCATACAGTAACTCACAGGGGCTGGATTGATTATGTACACTTCA
GGCTATGCACATCGTTCTTCGTCGTTCTCATCCGCAGCAAGTAAAATTGCGCGTGTCTCT
ACGGAAAACACTACAGCCGGGCTTATCAGTGAAGTTGTCTATCGCGAAGATCAGCCCATG
ATGACGCAACTTCTACTGTTGCCATTGTTACAGCAACTCGGTCAGCAATCGCGCTGGCAA
CTCTGGTTAACACCGCAACAAAAACTGAGTCGGGAATGGGTTCAGGCATCTGGGCTACCC
TTAACGAAAGTAATGCAGATTAGCCAGCTCTCCCCTTGCCACACTGTGGAGTCAATGGTT
CGCGCTTTACGCACGGGCAATTACAGTGTGGTGATCGGTTGGTTGGCAGATGATTTGACT
GAAGAAGAGCATGCTGAACTTGTTGATGCGGCAAATGAAGGTAACGCTATGGGGTTTATT
ATGCGTCCGGTAAGCGCATCCTCTCACGCCACGAGACAACTTTCCGGGCTAAAAATTCAC
TCTAATTTGTATCATTAAGT
";

$primer1="
cgCGGATCCGTTAACTACGAAAATAGGC
";

$primer2="
ccCATggTCAATCCAGCCCCTGTGAG
";

$template=preg_replace('/[^GATC]+/','',strtr($template,'gatc','GATC'));
$primer1=preg_replace('/[^GATC]+/','',strtr($primer1,'gatc','GATC'));
$primer2=preg_replace('/[^GATC]+/','',strtr($primer2,'gatc','GATC'));

$strand=extension($template,$primer1);
if ($strand) {
	$strand=complementary($strand);
	$strand=extension($strand,$primer2);
	if (strlen($strand)==0) exit("Primer2 does not work!\n");
	$strand=complementary($strand);
} else {
	$strand=extension(complementary($template),$primer1);
	if (strlen($strand)==0) exit("Primer1 does not work!\n");
	$strand=complementary($strand);
	$strand=extension($strand,$primer2);
	if (strlen($strand)==0) exit("Primer2 does not work!\n");
	$strand=complementary($strand);
}

echo $strand;

function complementary($sequence){
	$comp='';
	for ($i=strlen($sequence)-1;0<=$i;$i--) $comp.=strtr(substr($sequence,$i,1),'GATC','CTAG');
	return $comp;
}

function extension($template,$primer) {
	for ($i=0;$i<strlen($primer)-10;$i++) {
		$p=substr($primer,$i);
		$p=preg_quote($p,'/');
		if (preg_match('/'.$p.'([GATC]*)$/',$template,$m)) return $primer.$m[1];
	}
	return '';
}

(2010/10/11改定)

コメント

コメントはありません

コメント送信