NAME
Bio::ProteaseI - A base class to build your customized Protease
VERSION
version 1.092570
SYNOPSIS
package My::Protease;
use Moose;
extends qw(Bio::ProteaseI);
augment _cuts => sub {
my ($self, $substrate) = @_;
# some code that decides
# if $peptide should be cut or not
if ( $peptide_should_be_cut ) { return 1 }
else { return }
};
DESCRIPTION
This module describes the interface for Bio::Protease. You only need to use this if you want to build your custom specificity protease and regular expressions won't do; otherwise look at Bio::Protease instead.
All of the methods provided in Bio::Protease are defined here, incluiding a stub of the specificity-determining one, _cuts
. It has to be completed by the subclass with an augment
call.
HOW TO SUBCLASS
Step 1: create a child class.
package My::Protease;
use Moose;
extends qw(Bio::ProteaseI);
1;
Simply create a new Moose class, and inherit from the Bio::ProteaseI interfase using extends
.
Step 2: augment _cuts()
The _cuts
method will be used by the methods digest
, cut
, cleavage_sites
and is_substrate
. It will always be passed a reference to a string of 8 characters; if the method returns true, then the peptide bond between the 4th and 5th residues will be marked as siscile, and the appropiate action will be performed depending on which method was called.
Your specificity logic should only be concerned in deciding whether the 8-residue long peptide passed to it as an argument should be cut between the 4th and 5th residues. This is done by using the augment
method modifier (for more information on Method Modifiers, please read up on Moose::Manual::MethodModifiers), like so:
augment _cuts => sub {
my ( $self, $peptide ) = @_;
# some code that decides
# if $peptide should be cut or not
if ( $peptide_should_be_cut ) { return 1 }
else { return }
};
And that's it. Your class will inherit all the methods mentioned above, and will work according to the specificity logic that you define in your _cuts()
method.
Example: a ridiculously specific protease
Suppose you want to model a protease that only cleaves the sequence MAEL^VIKP
. Your Protease class would be like this:
package My::Ridiculously::Specific::Protease;
use Moose;
extends qw(Bio::ProteaseI);
augment _cuts => sub {
my ( $self, $substrate_ref ) = @_;
if ( $$substrate_ref eq 'MAELVIKP' ) { return 1 }
else { return }
};
1;
Then you can use your class easily in your application:
#!/usr/bin/env perl
use Modern::Perl;
use My::Ridiculously::Specific::Protease;
my $protease = My::Ridiculously::Specific::Protease->new;
my @products = $protease->digest( 'AAAAMAELVIKPYYYYYYY' );
say for @products; # ["AAAAMAEL", "VIKPYYYYYYY"]
Of course, this specificity model is too simple to deserve subclassing, as it could be perfectly defined by a regex and passed to the specificity
attribute of Bio::Protease. It's only used here to serve as an example.
METHODS
cut
Attempt to cleave $peptide at the C-terminal end of the $i-th residue (ie, at the right). If the bond is indeed cleavable (determined by the enzyme's specificity), then a list with the two products of the hydrolysis will be returned. Otherwise, returns false.
my @products = $enzyme->cut($peptide, $i);
digest
Performs a complete digestion of the peptide argument, returning a list with possible products. It does not do partial digests (see method cut
for that).
my @products = $enzyme->digest($protein);
is_substrate
Returns true or false whether the peptide argument is a substrate or not. Esentially, it's equivalent to calling cleavage_sites
in boolean context, but with the difference that this method short-circuits when it finds its first cleavable site. Thus, it's useful for CPU-intensive tasks where the only information required is whether a polypeptide is or not a substrate of a particular enzyme.
cleavage_sites
Returns a list with siscile bonds (bonds susceptible to be cleaved as determined by the enzyme's specificity). Bonds are numbered starting from 1, from N to C-terminal. Takes a string with the protein sequence as an argument:
my @sites = $enzyme->cleavage_sites($peptide);
AUTHOR
Bruno Vecchi <vecchi.b@gmail.com>
COPYRIGHT AND LICENSE
This software is copyright (c) 2009 by Bruno Vecchi.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.