2500){die("Error:
In this demo, input sequence is limited to 2.500 characters.");} $sequence=preg_replace("/\\W|\\d/","",$sequence); // maximum length of amplicons $maxlength=$_POST["length"]; // SET PATTERNS FROM PRIMERS // Change N to point in primers $pattern1=str_replace("N", ".", $primer1); $pattern2=str_replace("N", ".", $primer2); // If one missmatch is allowed, create new pattern // example: pattern="ACGT"; to allow one missmatch pattern=".CGT|A.GT|AC.T|ACG." if ($_POST["allowmissmatch"]==1){ $pattern1=includeN($primer1); $pattern2=includeN($primer2); } // SET PATTERN $start_pattern="$pattern1|$pattern2"; $end_pattern=RevComp($start_pattern); // CALL Amplify FUNCTION $results_array=Amplify($start_pattern,$end_pattern,$sequence,$maxlength); // PRINT RESULTS print "
Primer 1: $primer1\\n";
	print "Primer 2: $primer2\\n\\n";
	
	if (sizeof($results_array)>0){	
	print "List of amplicons: position in sequence, length and sequence\\n\\n";
		foreach($results_array as $key => $val){
			print "$key	$val	".substr($sequence,$key,$val)."\\n";
			}
	}else{
	print "No amplification\\n\\n";
	}


// ##############################################################
//                       FUNCTIONS
// ##############################################################
				
function Amplify ($start_pattern,$end_pattern,$sequence,$maxlength){

	// SPLIT SEQUENCE BASED IN $start_pattern (start positions of amplicons)

	$fragments = preg_split("/($start_pattern)/", $sequence,-1,PREG_SPLIT_DELIM_CAPTURE);

	$maxfragments=sizeof($fragments);
	$position=strlen($fragments[0]);
	$mn=0;
	for ($m=1;$m<$maxfragments; $m+=2){
	
		$subfragment_to_maximum=substr($fragments[$m+1],0,$maxlength);
		$fragments2 = preg_split("/($end_pattern)/", $subfragment_to_maximum,-1,PREG_SPLIT_DELIM_CAPTURE);

		if (sizeof($fragments2)>1){
			$lenfragment=strlen($fragments[$m].$fragments2[0].$fragments2[1]);
			$results_array[$position]=$lenfragment;		
			}
		$position+=strlen($fragments[$m])+strlen($fragments[$m+1]);
	}
	
return($results_array);
}




// ####################
	
function RevComp($p2){
$p2=strrev($p2);
$p2=str_replace("A", "t", $p2);
$p2=str_replace("T", "a", $p2);
$p2=str_replace("G", "c", $p2);
$p2=str_replace("C", "g", $p2);
$p2 = strtoupper ($p2);
return $p2;
}

// ####################
function includeN($pattern) {
	if (strlen($pattern)>2){
		$new_pattern=".".substr($pattern,1);
		$pos=1;
		while ($pos


In silico PCR amplification


                              

In silico PCR amplification

">
Sequence

Primer 11    5'- -3'
Primer 21    5'- -3'

Allow one mismatch 2

Maximum lenght of bands
  nucleotides

1 A,T,G,C and N are allowed; A+T+G+C must be 10 or more.
2 One mismatch is allowed in any position of primers.



Source code