/usr/share/perl5/RG/Reprof/blastPsiMat.pm is in librg-reprof-bundle-perl 1.0.1-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | package RG::Reprof::blastPsiMat;
use strict;
use warnings;
use Carp;
use RG::Reprof::Converter qw(normalize);
sub new {
my ($class, $file) = @_;
my $self = {
raw => [],
normalized => [],
percentage => [],
info => [],
weight => [],
res => [],
};
bless $self, $class;
return $self->parse($file);
}
sub parse {
my ($self, $file) = @_;
open PSSM, $file or croak "Could not open $self->{file} ...\n";
my $to_check = <PSSM>;
$to_check = <PSSM>;
if ($to_check !~ m/^Last position-specific scoring matrix/) {
return undef;
}
my @pssm_cont = grep /^\s*\d+/, (<PSSM>);
chomp @pssm_cont;
close PSSM;
my $length = $self->{_length} = scalar @pssm_cont;
foreach my $line (@pssm_cont) {
$line =~ s/^\s+//;
my @split = split /\s+/, $line;
my $res = $split[1];
push @{$self->{res}}, $res;
my @raws = @split[2..21];
my @norms = map {normalize($_)} @raws;
push @{$self->{raw}}, \@raws;
push @{$self->{normalized}}, \@norms;
my @pcs = @split[22 .. 41];
my @pc_norms = map {$_ / 100} @pcs;
push @{$self->{percentage}}, \@pc_norms;
push @{$self->{info}}, ($split[42]);
if ($split[43] eq "inf") {
push @{$self->{weight}}, 0;
}
else {
push @{$self->{weight}}, ($split[43]);
}
}
return $self;
}
sub res {
my $self = shift;
return @{$self->{res}};
}
sub raw {
my $self = shift;
return @{$self->{raw}};
}
sub normalized {
my $self = shift;
return @{$self->{normalized}};
}
sub percentage {
my $self = shift;
return @{$self->{percentage}};
}
sub info {
my $self = shift;
return @{$self->{info}};
}
sub weight {
my $self = shift;
return @{$self->{weight}};
}
1;
|