MS

 view release on metacpan or  search on metacpan

lib/MS/Protein.pm  view on Meta::CPAN

package MS::Protein;

use strict;
use warnings;

use Carp;
use Exporter qw/import/;
use List::Util qw/sum/;
use List::MoreUtils qw/any uniq/;
use Scalar::Util qw/blessed/;

use MS::Mass qw/:all/;
use MS::CV   qw/:MS regex_for/;
use MS::Peptide;

use parent qw/MS::Peptide/;

BEGIN {

    *ec = \&extinction_coefficient; 
    *pI = \&isoelectric_point; 
    *ai = \&aliphatic_index; 
    *mw = \&molecular_weight; 

}

our @EXPORT_OK = qw/
    digest
    isoelectric_point
    pI
    molecular_weight
    mw
    gravy
    aliphatic_index
    ai
    n_residues
    n_atoms
    extinction_coefficient
    ec
    charge_at_pH
/;

our %EXPORT_TAGS = (
    all => \@EXPORT_OK,
);

# build lookup tables
my $kyte_doolittle = _kyte_doolittle();
my $pK  = _pK();
my $pKt = _pKt();

sub molecular_weight {

    my ($seq, $type) = @_;
    return sum( map {aa_mass($_, $type) // return undef}
        split('', $seq) ) + formula_mass('H2O');

}

sub n_atoms {

    my ($seq) = @_;
    my %counts;
    ++$counts{$_} for (split '', $seq);
    my %atoms = (H => 2, O => 1);
    for my $aa (keys %counts) {
        my $a = atoms('aa' => $aa);
        $atoms{$_} += $a->{$_}*$counts{$aa} for (keys %$a);
    }
    return \%atoms; 

}

sub n_residues {

    my ($seq) = @_;
    my %counts;
    ++$counts{$_} for (split '', $seq);
    return \%counts;

}

sub aliphatic_index {

    my ($seq) = @_;

    $seq = "$seq";
    my $mf_A   = $seq =~ tr/A//;
    my $mf_V   = $seq =~ tr/V//;
    my $mf_IL  = $seq =~ tr/IL//;

    return ($mf_A + 2.9*$mf_V + 3.9*$mf_IL) * 100 / length($seq);

}

sub extinction_coefficient {

    my ($seq, %args) = @_;

    my $is_reduced = $args{reduced};

    $seq = "$seq";
    my $Y = $seq =~ tr/Y//;
    my $W = $seq =~ tr/W//;
    my $C = $seq =~ tr/C//;

    return $is_reduced
        ? 1490*$Y + 5500*$W
        : 1490*$Y + 5500*$W + 125*int($C/2);

}

sub gravy {

    my ($seq) = @_;
    return sum( map {$kyte_doolittle->{$_}} split( '', $seq) )



( run in 0.735 second using v1.01-cache-2.11-cpan-99c4e6809bf )