<html><head><title>Alignment of two DNA or RNA sequences</title></head>
<body bgcolor=FFFFFF>
<?php
if (!$_POST){
print_form();
die(); }
// GET SEQUENCES AND PREPARE THEM
$seqa=strtoupper($_POST["sequence"]);
$seqb=strtoupper($_POST["sequence2"]);
$seqa=preg_replace("/\W|\d/", "", $seqa); // remove useless characters
$seqb=preg_replace("/\W|\d/", "", $seqb); // remove useless characters
$seqa=preg_replace("/U/", "T", $seqa); // from RNA to DNA
$seqb=preg_replace("/U/", "T", $seqb); // from RNA to DNA
$seqa=preg_replace("/X/", "N", $seqa); // substitute X -> N
$seqb=preg_replace("/X/", "N", $seqb); // substitute X -> N
$limit=30000;
if ((strlen($seqa)+strlen($seqb))>$limit){die ("Error:<br>The maximum
length of code accepted for both sequences is $limit nucleotides");}
if
((substr_count($seqa,"A")+substr_count($seqa,"C")+substr_count($seqa,"G
")+substr_count($seqa,"T"))>(strlen($seqa)/2)){
// if A+C+G+T is at least half of the sequence, it is a
DNA
$alignment=align_DNA($seqa,$seqb);
}else{
// else is protein
$alignment=align_proteins($seqa,$seqb);
}
// EXTRACT DATA FROM ALIGNMENT
$align_seqa=$alignment["seqa"];
$align_seqb=$alignment["seqb"];
// COMPARE ALIGNMENTS
$compare=compare_alignment($align_seqa,$align_seqb);
// PRINT RESULTS
print "<div align=right><a href=\"".$_SERVER["PHP_SELF"]."\"><b>New
alignment</b></a></div>\n";
print "<center><H2>Alignment of two DNA sequences</H2>\n";
print "<table><tr><td><HR><pre>\n";
$i=0;
while($i<strlen($align_seqa)){
$ii=$i+100;
if ($ii>strlen($align_seqa)){$ii=strlen($align_seqa);}
print substr($align_seqa,$i,100)." $ii\n";
print substr($compare,$i,100)."\n";
print substr($align_seqb,$i,100)." $ii\n\n";
$i+=100;
}
print "</pre><hr>\n";
print "</td></tr><tr><td align=center>";
print "<table><tr><td>";
print $_POST["id1"]."<br><input type=text value=\"$align_seqa\"
size=100><p>";
print $_POST["id2"]."<br><input type=text value=\"$align_seqb\"
size=100><p>";
print "</td></tr></table><hr>";
print "</td></tr></table></center>\n";
print "<p></body></html>";
// END PRINT RESULTS
function align_DNA($seqa,$seqb){
$match = 2;
$mismatch = -1;
$gap = -4;
$a = preg_split('//', $seqa, -1, PREG_SPLIT_NO_EMPTY);
$b = preg_split('//', $seqb, -1, PREG_SPLIT_NO_EMPTY);
$maxa=sizeof($a);
$maxb=sizeof($b);
$lenn=max ($maxa,$maxb);
$mx=0;
for ($i=0;$i<$maxa;$i++){
for ($j=0;$j<$maxb;$j++){
if($b[$j]==$a[$i]){
$x=$matriz[$j-1][$i-1]+$match;
}else{
$x=max
(0,$matriz[$j-1][$i-1]-1,$matriz[$j][$i-1]-4,$matriz[$j-1][$i]-4);}
$matriz[$j][$i]=$x;
if ($mx<$x){$mx=$x; $mj=$j; $mi=$i;}
} }
$j=$mj;
$i=$mi;
$matrizz[$j][$i]=1;
while ($i>0 or $j>0):
$aa=$matriz[$j-1][$i-1];
$ab=$matriz[$j][$i-1];
$ac=$matriz[$j-1][$i];
if($aa<>'//' or $aa==0){
if($aa>=$ab and $aa>=$ac){
$j=$j-1;
$i=$i-1;
}
if($ab>$aa){$i=$i-1;}
if($ac>$aa){$j=$j-1;}
}else{
if($ab<>'//'){$i=$i-1;}
if($ac<>'//'){$j=$j-1;}
}
if($j<0){$j=0;}
if($i<0){$i=0;}
$matrizz[$j][$i]=1;
endwhile;
$j=$mj;
$i=$mi;
while ($i<strlen($seqa)-1 or $j<strlen($seqb)-1):
$aa=$matriz[$j+1][$i+1];
$ab=$matriz[$j][$i+1];
$ac=$matriz[$j+1][$i];
if($aa<>'//'){
if($aa>=$ab and $aa>=$ac){
$j=$j+1;
$i=$i+1; }
if($ab>$aa){$i=$i+1;}
if($ac>$aa){$j=$j+1;}
}else{
if($ab<>'//'){$i=$i+1;}
if($ac<>'//'){$j=$j+1;}
}
if($j>$lenn){$j=$lenn;}
if($i>$lenn){$i=$lenn;}
$matrizz[$j][$i]=1;
endwhile;
$j=0;
$i=0;
$t=1;
while ($i<strlen($seqa)-2 and $j<strlen($seqb)-2 and $t=1):
$t=0;
if($matrizz[$j+1][$i+1]==1){
$t=1;
$sseqa.=$a[$i];
$sseqb.=$b[$j];
$i=$i+1;
$j=$j+1; }
if($matrizz[$j][$i+1]==1){
$t=1;
$sseqa.=$a[$i];
$sseqb.="-";
$i=$i+1; }
if($matrizz[$j+1][$i]==1){
$t=1;
$sseqa.="-";
$sseqb.=$b[$j];
$j=$j+1; }
endwhile;
if($matrizz[$j+1][$i+1]==1){
$sseqa.=$a[$i];
$sseqb.=$b[$j];
$i=$i+1;
$j=$j+1;
$t=1; }
if($t==0 and $matrizz[$j][$i+1]==1){
$sseqa.=$a[$i];
$sseqb.="-";
$i=$i+1; }
if($t==0 and $matrizz[$j+1][$i]==1){
$sseqa.="-";
$sseqb.=$b[$j];
$j=$j+1; }
if($i+1==$maxa){
for ($ii=$j;$ii<$maxb;$ii++){$sseqb.=$b[$ii];}
$sseqa.=$a[$i];
for ($ii=$j;$ii<$maxb-1;$ii++){$sseqa.="-";} }
if($j+1==$maxb){
for ($ii=$i;$ii<$maxa;$ii++){$sseqa.=$a[$ii];}
$sseqb.=$b[$j];
for ($ii=$i;$ii<$maxa-1;$ii++){$sseqb.="-";} }
$results["seqa"]=substr($sseqa,0,strlen($sseqa)-1);
$results["seqb"]=substr($sseqb,0,strlen($sseqb)-1);
return $results;
}
function compare_alignment($seqa,$seqb){
for ($i=0;$i<strlen($seqa);$i++){
if(substr($seqa,$i,1)==substr($seqb,$i,1)){$compare.="|";}else{$compare
.=" ";} }
return $compare;
}
function print_form (){
?>
<html> <head>
<title>Alignment of two DNA or RNA sequences</title>
</head>
<body bgcolor="white" text="black">
<center> <form name="mydna" method="post" action="<? print
$_SERVER["PHP_SELF"]; ?>">
<table cellpadding="5">
<tbody> <tr> <td>
<b><font size="6">Alignment of two DNA, RNA or protein
sequences</font></b> <br>
<div align="right"><a href="javascript: tidyup ()">Tidy Up
Sequences</a></div>
<br>
<input type=text name=id1 value="Sequence 1" size=30>
<a href="javascript: strcomp1 ()"
onmouseover="window.status='Complementary sequence'; return true"
onmouseout="window.status=''; return true"><font size=-1>C</font></a> <br>
<textarea name="sequence" cols="75" rows="3">GGAGTGAGGG GAGCAGTTGG
CTGAAGATGG TCCCCGCCGA GGGACCGGTG GGCGACGGCG 60
AGCTGTGGCA GACCTGGCTT CCTAACCACG TCCGTGTTCT TGCGGCTCCG GGAGGGACTG
120 </textarea> <br>
<input type=text name=id2 value="Sequence 2" size=30>
<a href="javascript: strcomp2 ()"
onmouseover="window.status='Complementary sequence'; return true"
onmouseout="window.status=''; return true"><font size=-1>C</font></a>
<br>
<textarea name="sequence2" cols="75" rows="3">CGCATGCGGA GTGAGGGGAG
CAGTTGGGAA CAGATGGTCC CCGCCGAGGG ACCGGTGGGC 60
GACGGCCAGC TGTGGCAGAC CTGGCTTCCT AACCACGGAA CGTTCTTTCC GCTCCGGGAG
120 </textarea>
</td></tr></tbody>
</table>
</form>
</center> </body> </html>
<?
}
?>
can u please tell me this for multiple sequence. thanks