<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<?php
function includeN_1($primer,$minus) {
$code=".".substr($primer,1);
$wpos=1;
while ($wpos<strlen($primer)-$minus){
$code.="|".substr($primer,0,$wpos).".".substr($primer,$wpos+1);
$wpos++;
}
return ($code);
}
function includeN_2($primer,$minus) {
$max=strlen($primer)-$minus;
$code="";
for($i=0;$i<$max;$i++){
for($j=0;$j<$max-$i-1;$j++){
$code.="|".substr($primer,0,$i).".";
$resto=substr($primer,$i+1);
$code.=substr($resto,0,$j).".".substr($resto,$j+1);
}
}
$code=substr($code,1);
return ($code);
}
function includeN_3($primer,$minus) {
$max=strlen($primer)-$minus;
$code="";
for($i=0;$i<$max;$i++){
for($j=0;$j<$max-$i-1;$j++){
$code.="|".substr($primer,0,$i).".";
$resto=substr($primer,$i+1);
$code.=substr($resto,0,$j).".".substr($resto,$j+1);
}
}
$code=substr($code,1);
return ($code);
}
function find_microsatellite_repeats($sequence,$min_length,$max_length,$min_repeats,$min_length_of_MR,$mismatches_allowed){
$len_seq=strlen($sequence);
$counter=0;
for ($i=0;$i<$len_seq-3;$i++){
for ($j=$min_length;$j<$max_length+1;$j++){
if (($i+$j)>$len_seq){break;}
$sub_seq=substr($sequence,$i,$j);
$len_sub_seq=strlen ($sub_seq);
$mismatches=floor($len_sub_seq*$mismatches_allowed/100);
if ($mismatches==1){$sub_seq_pattern=includeN_1($sub_seq,0);}
elseif ($mismatches==2){$sub_seq_pattern=includeN_2($sub_seq,0);}
elseif ($mismatches==3){$sub_seq_pattern=includeN_3($sub_seq,0);}
else {$sub_seq_pattern=$sub_seq;}
$matches=1;
while (preg_match_all("/($sub_seq_pattern)/",substr($sequence,($i+$j*$matches),$j),$out)==1){$matches++;}
echo $matches;
if ($matches>=$min_repeats and ($j*$matches)>=$min_length_of_MR){
$results[$counter]["start_position"]=$i;
$results[$counter]["length"]=$j;
$results[$counter]["repeats"]=$matches;
$results[$counter]["sequence"]=substr($sequence,$i,$j*$matches);
$counter++;
$i+=$j*$matches;
}
}
}
return ($results);
}
//echo includeN_2("saifab",1);
//echo "\n";
//echo includeN_3("saifab",1);
$sequence="AACAATGCCATGATGATGATTATTACGACACAACAACACCGCGCTTGACGGCGGCGGATGGATGCCGCGATCAGACGTTCAACGCCCACGTAACGTAACGCAACGTAACCTAACGACACTGTTAACGGTACGAT";
//print_r( find_microsatellite_repeats($sequence,2,6,3,6,0));
find_microsatellite_repeats($sequence,2,6,3,6,0);
?>
</body>
</html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<?php
function includeN_1($primer,$minus) {
$code=".".substr($primer,1);
$wpos=1;
while ($wpos<strlen($primer)-$minus){
$code.="|".substr($primer,0,$wpos).".".substr($primer,$wpos+1);
$wpos++;
}
return ($code);
}
function includeN_2($primer,$minus) {
$max=strlen($primer)-$minus;
$code="";
for($i=0;$i<$max;$i++){
for($j=0;$j<$max-$i-1;$j++){
$code.="|".substr($primer,0,$i).".";
$resto=substr($primer,$i+1);
$code.=substr($resto,0,$j).".".substr($resto,$j+1);
}
}
$code=substr($code,1);
return ($code);
}
function includeN_3($primer,$minus) {
$max=strlen($primer)-$minus;
$code="";
for($i=0;$i<$max;$i++){
for($j=0;$j<$max-$i-1;$j++){
$code.="|".substr($primer,0,$i).".";
$resto=substr($primer,$i+1);
$code.=substr($resto,0,$j).".".substr($resto,$j+1);
}
}
$code=substr($code,1);
return ($code);
}
function find_microsatellite_repeats($sequence,$min_length,$max_length,$min_repeats,$min_length_of_MR,$mismatches_allowed){
$len_seq=strlen($sequence);
$counter=0;
for ($i=0;$i<$len_seq-3;$i++){
for ($j=$min_length;$j<$max_length+1;$j++){
if (($i+$j)>$len_seq){break;}
$sub_seq=substr($sequence,$i,$j);
$len_sub_seq=strlen ($sub_seq);
$mismatches=floor($len_sub_seq*$mismatches_allowed/100);
if ($mismatches==1){$sub_seq_pattern=includeN_1($sub_seq,0);}
elseif ($mismatches==2){$sub_seq_pattern=includeN_2($sub_seq,0);}
elseif ($mismatches==3){$sub_seq_pattern=includeN_3($sub_seq,0);}
else {$sub_seq_pattern=$sub_seq;}
$matches=1;
while (preg_match_all("/($sub_seq_pattern)/",substr($sequence,($i+$j*$matches),$j),$out)==1){$matches++;}
echo $matches;
if ($matches>=$min_repeats and ($j*$matches)>=$min_length_of_MR){
$results[$counter]["start_position"]=$i;
$results[$counter]["length"]=$j;
$results[$counter]["repeats"]=$matches;
$results[$counter]["sequence"]=substr($sequence,$i,$j*$matches);
$counter++;
$i+=$j*$matches;
}
}
}
return ($results);
}
//echo includeN_2("saifab",1);
//echo "\n";
//echo includeN_3("saifab",1);
$sequence="AACAATGCCATGATGATGATTATTACGACACAACAACACCGCGCTTGACGGCGGCGGATGGATGCCGCGATCAGACGTTCAACGCCCACGTAACGTAACGCAACGTAACCTAACGACACTGTTAACGGTACGAT";
//print_r( find_microsatellite_repeats($sequence,2,6,3,6,0));
find_microsatellite_repeats($sequence,2,6,3,6,0);
?>
</body>
</html>
To copy to clipboard, switch view to plain text mode
{
int wpos=1;
while (wpos<primer.size()-minus){
code+="|"+primer.mid(0,wpos)+"."+primer.mid(wpos+1);
wpos++;
}
return code;
}
{
int max=primer.size()-minus;
for(int i=0;i<max;i++){
for(int j=0; j<max-i-1;j++){
code+="|"+primer.mid(0,i)+".";
code+=resto.mid(0,j)+"."+resto.mid(j+1);
}//j
}
code=code.mid(1);
return code;
}
{
int max=primer.size()-minus;
for(int i=0;i<max;i++){
for(int j=0;j<max-i-1;j++){
code+="|"+primer.mid(0,i)+".";
code+=resto.mid(0,j)+"."+resto.mid(j+1);
}
}
code=code.mid(1);
return code;
}
void FindMicrosatelliteRepeats
(QString &seq,
int MinLen,
int MaxLen,
int MinRepeat,
int MRMinLen,
int MismatchesAllowed
) {
int len_seq=seq.size();
int counter=0;
// QString sub_seq_pattern;
for (int i=0;i<len_seq-3;i++){
for (int j=MinLen;j<MaxLen+1;j++){
if ((i+j)>len_seq)
{break;}
int len_sub_seq=sub_seq.size();
int mismatches=floor(len_sub_seq*MismatchesAllowed/100);
if (mismatches==1)
{
sub_seq_pattern=includeN_1(sub_seq,0);
}
else if (mismatches==2){sub_seq_pattern=includeN_2(sub_seq,0);}
else if (mismatches==3){sub_seq_pattern=includeN_3(sub_seq,0);}
else {sub_seq_pattern=sub_seq;}
int matches=1;
if(seq.mid(i+j*matches,j)==sub_seq_pattern==1)
matches++;
// qDebug()<<matches;
if(matches >=MinRepeat && (j*matches) >=MRMinLen)
{
qDebug()<<"yes";
qDebug()<<"start postion = "<<i;
qDebug()<<"length = "<<j;
qDebug()<<"repeats = "<<matches;
qDebug()<<"sequence = "<<seq.mid(i,j*matches);
counter++;
i+=j*matches;
}//j
}
}//i
}
//================================================================
int main(int argc, char *argv[])
{
QString primer
="AACAATGCCATGATGATGATTATTACGACACAACAACACCGCGCTTGACGGCGGCGGATGGATGCCGCGATCAGACGTTCAACGCCCACGTAACGTAACGCAACGTAACCTAACGACACTGTTAACGGTACGAT";
FindMicrosatelliteRepeats(primer,2,6,3,6,0);
return a.exec();
}
QString includeN_1(const QString & primer,int minus)
{
QString code="."+primer.mid(1);
int wpos=1;
while (wpos<primer.size()-minus){
code+="|"+primer.mid(0,wpos)+"."+primer.mid(wpos+1);
wpos++;
}
return code;
}
QString includeN_2(const QString & primer,int minus)
{
int max=primer.size()-minus;
QString code="";
for(int i=0;i<max;i++){
for(int j=0; j<max-i-1;j++){
code+="|"+primer.mid(0,i)+".";
QString resto=primer.mid(i+1);
code+=resto.mid(0,j)+"."+resto.mid(j+1);
}//j
}
code=code.mid(1);
return code;
}
QString includeN_3(const QString & primer,int minus)
{
int max=primer.size()-minus;
QString code="";
for(int i=0;i<max;i++){
for(int j=0;j<max-i-1;j++){
code+="|"+primer.mid(0,i)+".";
QString resto=primer.mid(i+1);
code+=resto.mid(0,j)+"."+resto.mid(j+1);
}
}
code=code.mid(1);
return code;
}
void FindMicrosatelliteRepeats(QString &seq,int MinLen,int MaxLen,int MinRepeat,int MRMinLen,int MismatchesAllowed)
{
int len_seq=seq.size();
int counter=0;
// QString sub_seq_pattern;
for (int i=0;i<len_seq-3;i++){
for (int j=MinLen;j<MaxLen+1;j++){
if ((i+j)>len_seq)
{break;}
QString sub_seq_pattern;
QString sub_seq=seq.mid(i,j) ;
int len_sub_seq=sub_seq.size();
int mismatches=floor(len_sub_seq*MismatchesAllowed/100);
if (mismatches==1)
{
sub_seq_pattern=includeN_1(sub_seq,0);
}
else if (mismatches==2){sub_seq_pattern=includeN_2(sub_seq,0);}
else if (mismatches==3){sub_seq_pattern=includeN_3(sub_seq,0);}
else {sub_seq_pattern=sub_seq;}
int matches=1;
if(seq.mid(i+j*matches,j)==sub_seq_pattern==1)
matches++;
// qDebug()<<matches;
if(matches >=MinRepeat && (j*matches) >=MRMinLen)
{
qDebug()<<"yes";
qDebug()<<"start postion = "<<i;
qDebug()<<"length = "<<j;
qDebug()<<"repeats = "<<matches;
qDebug()<<"sequence = "<<seq.mid(i,j*matches);
counter++;
i+=j*matches;
}//j
}
}//i
}
//================================================================
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QString primer="AACAATGCCATGATGATGATTATTACGACACAACAACACCGCGCTTGACGGCGGCGGATGGATGCCGCGATCAGACGTTCAACGCCCACGTAACGTAACGCAACGTAACCTAACGACACTGTTAACGGTACGAT";
FindMicrosatelliteRepeats(primer,2,6,3,6,0);
return a.exec();
}
To copy to clipboard, switch view to plain text mode
the problem in variable
Bookmarks