Biostar Beta. Not for public use.
Question: perl script for overlap algo
0
Entering edit mode

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;
}
ADD COMMENTlink 3.2 years ago zunaira.ehsan21 • 0 • updated 3.2 years ago Michael Dondrup 46k
Entering edit mode
2

What a mess~

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

ADD REPLYlink 3.2 years ago
shenwei356
4.6k
0
Entering edit mode

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 3.2 years ago Vijay Lakhujani 4.1k
0
Entering edit mode

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 3.2 years ago mastal511 ♦ 2.0k

Login before adding your answer.

Similar Posts
Loading Similar Posts
Powered by the version 2.0