MS

 view release on metacpan or  search on metacpan

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

package MS::Peptide;

use strict;
use warnings;

use overload
    '""' => sub{ $_[0]->as_string(fmt => 'original') },
    fallback => 1;

use Carp;
use Storable qw/dclone/;
use List::Util qw/sum/;

use MS::Mass qw/:all/;

my %light = (
    '2H' => 'H',
    '13C' => 'C',
    '15N' => 'N',
    '18O' => 'O',
);

my %heavy = (
    'H' => '2H',
    'C' => '13C',
    'N' => '15N',
    'O' => '18O',
);


sub new {

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

    $seq = uc $seq;
    my $self = bless {seq => $seq} => $class;

    my @atoms = map {atoms('aa', $_)} (split '', $seq);

    $self->{atoms}  = \@atoms;
    $self->{length} = CORE::length $seq;
    $self->{n_mod}  = 0;
    $self->{c_mod}  = 0;

    # these can be undefined if not known or specified
    $self->{prev}  = $args{prev};
    $self->{next}  = $args{next};
    $self->{start} = $args{start};
    $self->{end}   = $args{end};

    return $self;

}

#----------------------------------------------------------------------------#
# accessors
#----------------------------------------------------------------------------#

sub length { return $_[0]->{length} }
sub seq    { return $_[0]->{seq} }

#----------------------------------------------------------------------------#
# accessors/modifiers
#----------------------------------------------------------------------------#

sub prev {

    my ($self, $new_val) = @_;
    $self->{prev} = $new_val if (defined $new_val);
    return $self->{prev};

}

sub next {

    my ($self, $new_val) = @_;
    $self->{next} = $new_val if (defined $new_val);
    return $self->{next};

}

sub start {

    my ($self,$new_val) = @_;
    if (defined $new_val) {
        croak "Value must be numeric\n"
            if ($new_val =~ /\D/);
        $self->{start} = $new_val;
    }
    return $self->{start};

}

sub end {

    my ($self,$new_val) = @_;



( run in 1.359 second using v1.01-cache-2.11-cpan-8f98c5d2c55 )