Question: perl script for overlap algo
0
gravatar for zunaira.ehsan21
3.1 years ago by
zunaira.ehsan210 wrote:

i've written the following code for overlap algo but its not giving me an output please help me

perl script for overlap algorithm

#!/usr/bin/perl              
%gencode =
      (TTT => "F", TTC => "F", TTA => "L", TTG => "L",
      TCT => "S", TCC => "S", TCA => "S", TCG => "S",
      TAT => "Y", TAC => "Y", TAA => "*", TAG => "*",
      TGT => "C", TGC => "C", TGA => "*", TGG => "W",
      CTT => "L", CTC => "L", CTA => "L", CTG => "L",
      CCT => "P", CCC => "P", CCA => "P", CCG => "P",
      CAT => "H", CAC => "H", CAA => "Q", CAG => "Q",
      CGT => "R", CGC => "R", CGA => "R", CGG => "R",
      ATT => "I", ATC => "I", ATA => "I", ATG => "M",
      ACT => "T", ACC => "T", ACA => "T", ACG => "T",
      AAT => "N", AAC => "N", AAA => "K", AAG => "K",
      AGT => "S", AGC => "S", AGA => "R", AGG => "R",
      GTT => "V", GTC => "V", GTA => "V", GTG => "V",
      GCT => "A", GCC => "A", GCA => "A", GCG => "A",
      GAT => "D", GAC => "D", GAA => "E", GAG => "E",
      GGT => "G", GGC => "G", GGA => "G", GGG => "G" );
      # The BLOSUM62 amino acid substitution matrix  
%blosum62 =
     #  A  R  N  D  C  Q  E  G  H  I  L  K  M  F  P  S  T  W  Y  V
   ( [  4,-1,-2,-2, 0,-1,-1, 0,-2,-1,-1,-1,-1,-2,-1, 1, 0,-3,-2, 0],  # A
     [ -1, 5, 0,-2,-3, 1, 0,-2, 0,-3,-2, 2,-1,-3,-2,-1,-1,-3,-2,-3],  # R
     [ -2, 0, 6, 1,-3, 0, 0, 0, 1,-3,-3, 0,-2,-3,-2, 1, 0,-4,-2,-3],  # N
     [ -2,-2, 1, 6,-3, 0, 2,-1,-1,-3,-4,-1,-3,-3,-1, 0,-1,-4,-3,-3],  # D
     [  0,-3,-3,-3, 9,-3,-4,-3,-3,-1,-1,-3,-1,-2,-3,-1,-1,-2,-2,-1],  # C
     [ -1, 1, 0, 0,-3, 5, 2,-2, 0,-3,-2, 1, 0,-3,-1, 0,-1,-2,-1,-2],  # Q
     [ -1, 0, 0, 2,-4, 2, 5,-2, 0,-3,-3, 1,-2,-3,-1, 0,-1,-3,-2,-2],  # E
     [  0,-2, 0,-1,-3,-2,-2, 6,-2,-4,-4,-2,-3,-3,-2, 0,-2,-2,-3,-3],  # G
     [ -2, 0, 1,-1,-3, 0, 0,-2, 8,-3,-3,-1,-2,-1,-2,-1,-2,-2, 2,-3],  # H
     [ -1,-3,-3,-3,-1,-3,-3,-4,-3, 4, 2,-3, 1, 0,-3,-2,-1,-3,-1, 3],  # I
     [ -1,-2,-3,-4,-1,-2,-3,-4,-3, 2, 4,-2, 2, 0,-3,-2,-1,-2,-1, 1],  # L
     [ -1, 2, 0,-1,-3, 1, 1,-2,-1,-3,-2, 5,-1,-3,-1, 0,-1,-3,-2,-2],  # K
     [ -1,-1,-2,-3,-1, 0,-2,-3,-2, 1, 2,-1, 5, 0,-2,-1,-1,-1,-1, 1],  # M 
     [ -2,-3,-3,-3,-2,-3,-3,-3,-1, 0, 0,-3, 0, 6,-4,-2,-2, 1, 3,-1],  # F
     [ -1,-2,-2,-1,-3,-1,-1,-2,-2,-3,-3,-1,-2,-4, 7,-1,-1,-4,-3,-2],  # P
     [  1,-1, 1, 0,-1, 0, 0, 0,-1,-2,-2, 0,-1,-2,-1, 4, 1,-3,-2,-2],  # S
     [  0,-1, 0,-1,-1,-1,-1,-2,-2,-1,-1,-1,-1,-2,-1, 1, 5,-2,-2, 0],  # T
     [ -3,-3,-4,-4,-2,-2,-3,-2,-2,-3,-2,-3,-1, 1,-4,-3,-2,11, 2,-3],  # W
     [ -2,-2,-2,-3,-2,-1,-2,-3, 2,-1,-1,-2,-1, 3,-3,-2,-2, 2, 7,-1],  # Y
     [  0,-3,-3,-3,-1,-2,-2,-3,-3, 3, 1,-2, 1,-1,-2,-2, 0,-3,-1, 4]);   # V
     #A  R  N  D  C  Q  E  G  H  I  L  K  M  F  P  S  T  W  Y  V      
     # The amino acids, and a hashmap from amino acid to its index 0-19  

my $seq1 = "MSTYLNFAAPPPP"; 
my $seq2 = "MSIRYLNPAAK";  
# scoring scheme 
 $gap = -8;  
# initialization 
my @matrix; 
$matrix[0][0]{score}   = 0; 
$matrix[0][0]{pointer} = "none"; 
for( $j = 1; $j <= length($seq1); $j++) {
     $matrix[0][$j]{score}   = 0;
     $matrix[0][$j]{pointer} = "none";
 } 
for ( $i = 1; $i <= length($seq2); $i++) {
     $matrix[$i][0]{score}   = 0;
     $matrix[$i][0]{pointer} = "none"; 
}  
# fill 
$max_i     = 0; 
$max_j     = 0; 
$max_score = 0; 
$scoring_matrix = $blosum62; 
for( $i = 1; $i <= length($seq2); $i++) {
     for( $j = 1; $j <=length($seq1);$j++) {
             $max_i     = $i;
             $max_j     = $j;
             $max_score = $matrix[$i][$j]{score};
         }
     }

# trace-back  
 $align1 = ""; 
 $align2 = "";  
 $j = $max_j; 
 $i = $max_i;  
while (1) {
     last if $matrix[$i][$j]{pointer} eq "none";
     if ($matrix[$i][$j]{pointer} eq "diagonal") {
         $align1 .= substr($seq1, $j-1, 1);
         $align2 .= substr($seq2, $i-1, 1);
         $i--; $j--;
     }elsif ($matrix[$i][$j]{pointer} eq "left") {
         $align1 .= substr($seq1, $j-1, 1);
         $align2 .= "-";
         $j-$gap;
     }elsif($matrix[$i][$j]{pointer} eq "up"){
         $align1 .= "-";
         $align2 .= substr($seq2, $i-1, 1);
         $i-$gap;
     }
}  
$align1 = reverse $align1; 
$align2 = reverse $align2; 
print "$align1"; 
print "$align2"; 
print "&poa ,$align1, $align2";  

sub poa {

    $matches = 0;
     @seq1 = ($seq1);
     @seq2 = ($seq2);
     for($i = 0; $i <= $seq1 ; $i++) {
          if($seq1[$i] eq $seq2[$i]){
               $matches++;
         }
     }
     return $matches;
}
algorithm alignment overlap perl • 1.3k views
ADD COMMENTlink modified 3.1 years ago by Michael Dondrup47k • written 3.1 years ago by zunaira.ehsan210
2

What a mess~

Nobody will help you unless you format the code. Learn more about the markdown format.

ADD REPLYlink written 3.1 years ago by shenwei3565.0k
0
gravatar for lakhujanivijay
3.1 years ago by
lakhujanivijay4.7k
India
lakhujanivijay4.7k wrote:

I agree @shenwei356! On top of that it's PERL, on top of that no documentation/ comments! It seems impossible to understand what's going on (after few weeks/months) even for the person who wrote it!!

ADD COMMENTlink written 3.1 years ago by lakhujanivijay4.7k
0
gravatar for mastal511
3.1 years ago by
mastal5112.0k
mastal5112.0k wrote:

The first line of the script is missing the #. It should be

 #!/usr/bin/perl

If you add the lines

use strict;
use warnings;

after the first line of the script, it will give you useful error messages, and point out what lines have problems with syntax, etc.

if 'score' and 'pointer' are variables, then they should be preceded by a $, plus they don't seem to be defined anywhere in the script.

In the subroutine poa, I assume you want to split the string $seq1 into individual characters and store them in the array. The way to do this in perl is

my @seq1 = split(//, $seq1);
ADD COMMENTlink modified 3.1 years ago • written 3.1 years ago by mastal5112.0k
Please log in to add an answer.

Help
Access

Use of this site constitutes acceptance of our User Agreement and Privacy Policy.
Powered by Biostar version 2.3.0
Traffic: 1223 users visited in the last hour