Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations Chriss Miller on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

string mutation script behaving erraticaly

Status
Not open for further replies.

rushadrena

Programmer
Jun 19, 2012
1
IN
Dear all,
I have written a perl program which mutates a a protein sequence ( based on 20 alphabets).
For each character it encounters the program generates a random number between 0 and 1
(#line_46)
Im using hash for the program. But I dont know why this problem. Try running the code.

Perl:
#!/usr/bin/perl -w

use Time::HiRes qw(usleep nanosleep);



%nuc = ( 

F  => [qw( .0001 .0001 .0001 .0000 .0000 .0000 .0000 .0001 .0002 .0008 .0006 .0000 .0004 .9944 .0000 .0000 .0001 .0003 .0028 .0000)],

T  => [qw( .0022 .0002 .0013 .0004 .0001 .0003 .0002 .0002 .0001 .0011 .0002 .0008 .0006 .0001 .0005 .0032 .9874 .0000 .0002 .0009)],

N  => [qw( .0004 .0001 .9867 .0036 .0000 .0004 .0006 .0006 .0021 .0003 .0001 .0013 .0000 .0001 .0002 .0020 .0009 .0001 .0004 .0001)],

V  => [qw( .0013 .0002 .0001 .0001 .0003 .0002 .0002 .0003 .0003 .0057 .0011 .0001 .0017 .0001 .0003 .0002 .0010 .0000 .0002 .9866)], 

K  => [qw( .0002 .0037 .0025 .0006 .0000 .0012 .0007 .0002 .0002 .0004 .0001 .9858 .0020 .0000 .0003 .0008 .0011 .0000 .0001 .0001)],

E  => [qw( .0010 .0000 .0007 .0056 .0000 .0035 .9865 .0004 .0002 .0003 .0001 .0004 .0001 .0000 .0003 .0004 .0002 .0000 .0001 .0002)],

Y  => [qw( .0001 .0000 .0003 .0000 .0003 .0000 .0001 .0000 .0004 .0001 .0001 .0000 .0000 .0021 .0000 .0001 .0001 .0002 .9960 .0001)],

Q  => [qw( .0003 .0010 .0004 .0005 .0000 .9901 .0027 .0001 .0024 .0001 .0003 .0006 .0004 .0000 .0006 .0002 .0002 .0000 .0000 .0001)],

I  => [qw( .0002 .0002 .0003 .0001 .0002 .0001 .0002 .0000 .0000 .9915 .0009 .0002 .0012 .0007 .0000 .0001 .0007 .0000 .0001 .0033)],

C  => [qw( .0001 .0001 .0000 .0000 .9987 .0000 .0000 .0000 .0001 .0001 .0000 .0000 .0000 .0000 .0001 .0005 .0001 .0000 .0000 .0002)],

L  => [qw( .0003 .0001 .0003 .0000 .0000 .0006 .0001 .0001 .0004 .0022 .9871 .0002 .0045 .0013 .0003 .0001 .0003 .0004 .0002 .0015)],

M  => [qw( .0001 .0001 .0000 .0000 .0000 .0002 .0000 .0000 .0000 .0005 .0009 .0005 .9968 .0001 .0000 .0001 .0002 .0000 .0000 .0005)],

A  => [qw( .9799 .0002 .0009 .0010 .0003 .0008 .0017 .0021 .0002 .0006 .0004 .0002 .0006 .0002 .0022 .0035 .0032 .0000 .0002 .0018)],

W  => [qw( .0000 .0002 .0000 .0000 .0000 .0000 .0000 .0000 .0000 .0000 .0000 .0000 .0000 .0001 .0000 .0001 .0000 .9995 .0001 .0000)],

S  => [qw( .0028 .0011 .0034 .0007 .0011 .0004 .0006 .0016 .0002 .0002 .0001 .0007 .0004 .0003 .0017 .9800 .0038 .0005 .0002 .0002)],

P  => [qw( .0013 .0005 .0002 .0001 .0001 .0008 .0003 .0002 .0005 .0001 .0002 .0002 .0001 .0001 .9935 .0012 .0004 .0000 .0000 .0002)],

H  => [qw( .0001 .0008 .0018 .0003 .0001 .0020 .0001 .0000 .9933 .0000 .0001 .0001 .0000 .0002 .0003 .0001 .0001 .0001 .0004 .0001)],

D  => [qw( .0006 .0000 .0042 .9869 .0000 .0006 .0053 .0006 .0004 .0001 .0000 .0003 .0000 .0000 .0001 .0005 .0003 .0000 .0000 .0001)],

R  => [qw( .0001 .9929 .0001 .0000 .0001 .0010 .0000 .0000 .0010 .0003 .0001 .0019 .0004 .0001 .0004 .0006 .0001 .0008 .0000 .0001)],

G  => [qw( .0021 .0001 .0012 .0011 .0001 .0003 .0007 .9906 .0001 .0000 .0001 .0002 .0001 .0001 .0003 .0021 .0003 .0000 .0000 .0005)]);









#SVEQRISTDIGQAYQLQGLGSNLRSIRSKTGAGEVNYIDAAKSVNDNQLLAEIG

$string='AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA';

@seq=split(//,$string);

$size=scalar(@seq);

print "$size\n";



foreach $seq (@seq)

{ 

&mutate($seq) ;

print "##########SEQ=$seq\tRANDOM=$ran\tK=$k################";

usleep (1000000);

 }



$k=0;

$p=0;

sub mutate # Start Of Sub

{

$ran=`awk 'BEGIN {{srand()} {print rand()}}'`;

for ($j = 1; $j <= 20;$j++)

   { $mut[$j]=$nuc{$seq}[$j]; }

for ($i=1; $i<=20; $i++)

{

        print "$mut[$i]\t$ran\t";   

	if ($ran < $mut[$i])

	{#print "\n$mut[$i] \t hello";

        push (@names, $i);

        print "i=$i";

         #push (@names, '-');

	}

	last if $ran < $mut[$i];

        print"\tran=$ran\t muti=$mut[$i]";

        $k =$mut[$i];

        print "K = $k";

} $p++; #counter for serial number

} # End Of Sub





# $nam=join ' ',@names;

 # for ($j = 0; $j <=$size;$j++)

 # {print $names[$j];}

 print"\n";

for ($j = 0; $j < $size;$j++)

{

 if($names[$j]==1)

  {$names[$j]="A";}

  elsif($names[$j]==2)

  {$names[$j]="R";}

  elsif($names[$j]==3)

  {$names[$j]="N";}

  elsif($names[$j]==4)

  {$names[$j]="D";}

  elsif($names[$j]==5)

  {$names[$j]="C";}

  elsif($names[$j]==6)

  {$names[$j]="Q";}

  elsif($names[$j]==7)

  {$names[$j]="E";}

  elsif($names[$j]==8)

  {$names[$j]="G";}

  elsif($names[$j]==9)

  {$names[$j]="H";}

  elsif($names[$j]==10)

  {$names[$j]="I";}

  elsif($names[$j]==11)

  {$names[$j]="L";}

  elsif($names[$j]==12)

  {$names[$j]="K";}

  elsif($names[$j]==13)

  {$names[$j]="M";}

  elsif($names[$j]==14)

  {$names[$j]="F";}

  elsif($names[$j]==15)

  {$names[$j]="P";}

  elsif($names[$j]==16)

  {$names[$j]="S";}

  elsif($names[$j]==17)

  {$names[$j]="T";}

  elsif($names[$j]==18)

  {$names[$j]="W";}

  elsif($names[$j]==19)

  {$names[$j]="Y";}

  else {$names[$j]="V";}

  }

   



print "orig = $string   \nmuta = ";

for ($j = 0; $j <=$size;$j++)

 {print $names[$j];}

 @arr = %nuc;

 print "@arr";
 
I'm not sure what the problem you're having is exactly.

You mention generating a random number between 0 and 1 - is it not supposed to do that? What output are you expecting? What aren't you getting?
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top