#!/usr/bin/perl -w use strict; my %score_map; my $min_score = 0; my $max_score = -100; ## Read score matrix open(MATRIX,"BLOSUM50.txt"); my $aa1_line = ; chomp($aa1_line); my @aa1_list = split(/\s+/,$aa1_line); while(my $tmp_line = ) { chomp($tmp_line); my @tmp = split(/\s+/,$tmp_line); for(my $i=1; $i< scalar(@tmp); $i++) { #print $i,"\t",$tmp[0],"\t",$aa1_list[$i],"\t",$tmp[$i],"\n"; $score_map{$tmp[0]}->{$aa1_list[$i]} = $tmp[$i]; if( $tmp[0] ne $aa1_list[$i] ) { if( $min_score > $tmp[$i] ) { $min_score = $tmp[$i]; } if( $max_score < $tmp[$i] ) { $max_score = $tmp[$i]; } } } } close(MATRIX); foreach my $a1 (sort keys %score_map) { my $sum_a1 = 0; foreach my $a2 (sort keys %{$score_map{$a1}}) { my $tmp_score = $score_map{$a1}->{$a2}; if( $a1 eq $a2 ) { next; } $sum_a1 += $tmp_score; #print $a1,"\t",$tmp_score,"\t",$min_score,"\n"; if( $tmp_score == $max_score ) { print "Max: ",$a1,"->",$a2,"($tmp_score)\n"; } if( $tmp_score == $min_score ) { print "Min: ",$a1,"->",$a2,"($tmp_score)\n"; } } print "Sum of substitution score ($a1) : ",$sum_a1,"\n"; }