Mercurial > repos > mahtabm > ensembl
diff variant_effect_predictor/Bio/Ontology/InterProTerm.pm @ 0:1f6dce3d34e0
Uploaded
author | mahtabm |
---|---|
date | Thu, 11 Apr 2013 02:01:53 -0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/variant_effect_predictor/Bio/Ontology/InterProTerm.pm Thu Apr 11 02:01:53 2013 -0400 @@ -0,0 +1,644 @@ +# $Id: InterProTerm.pm,v 1.4.2.2 2003/03/25 12:32:16 heikki Exp $ +# +# BioPerl module for Bio::Ontology::InterProTerm +# +# Cared for by Peter Dimitrov <dimitrov@gnf.org> +# +# Copyright Peter Dimitrov +# (c) Peter Dimitrov, dimitrov@gnf.org, 2002. +# (c) GNF, Genomics Institute of the Novartis Research Foundation, 2002. +# +# You may distribute this module under the same terms as perl itself. +# Refer to the Perl Artistic License (see the license accompanying this +# software package, or see http://www.perl.com/language/misc/Artistic.html) +# for the terms under which you may use, modify, and redistribute this module. +# +# THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED +# WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF +# MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. +# +# POD documentation - main docs before the code + +=head1 NAME + +InterProTerm - Implementation of InterProI term interface + +=head1 SYNOPSIS + + my $term = Bio::Ontology::InterProTerm->new( -interpro_id => "IPR000001", + -name => "Kringle", + -definition => "Kringles are autonomous structural domains ...", + -ontology => "Domain" + ); + print $term->interpro_id(), "\n"; + print $term->name(), "\n"; + print $term->definition(), "\n"; + print $term->is_obsolete(), "\n"; + print $term->ontology->name(), "\n"; + +=head1 DESCRIPTION + +This is a simple extension of L<Bio::Ontology::Term> for InterPro terms. + +=head1 FEEDBACK + +=head2 Mailing Lists + +User feedback is an integral part of the evolution of this and other +Bioperl modules. Send your comments and suggestions preferably to +the Bioperl mailing list. Your participation is much appreciated. + + bioperl-l@bioperl.org - General discussion + http://bioperl.org/MailList.shtml - About the mailing lists + +=head2 Reporting Bugs + +Report bugs to the Bioperl bug tracking system to help us keep track +of the bugs and their resolution. Bug reports can be submitted via +email or the web: + + bioperl-bugs@bioperl.org + http://bugzilla.bioperl.org/ + +=head1 AUTHOR - Peter Dimitrov + +Email dimitrov@gnf.org + +=head1 CONTRIBUTORS + +Additional contributors names and emails here + +=head1 APPENDIX + +The rest of the documentation details each of the object methods. +Internal methods are usually preceded with a _ + +=cut + + +# Let the code begin... + + +package Bio::Ontology::InterProTerm; +use vars qw(@ISA); +use strict; + +use Bio::Ontology::Term; +use Bio::Annotation::Reference; + +use constant INTERPRO_ID_DEFAULT => "IPR000000"; + +@ISA = qw( Bio::Ontology::Term ); + +=head2 new + + Title : new + Usage : $term = Bio::Ontology::InterProTerm->new( -interpro_id => "IPR000002", + -name => "Cdc20/Fizzy", + -definition => "The Cdc20/Fizzy region is almost always ...", + -ontology => "Domain" + ); + + Function: Creates a new Bio::Ontology::InterProTerm. + Example : + Returns : A new Bio::Ontology::InterProTerm object. + Args : + -interpro_id => the InterPro ID of the term. Has the form IPRdddddd, where dddddd is a zero-padded six digit number + -name => the name of this InterPro term [scalar] + -definition => the definition/abstract of this InterPro term [scalar] + -ontology => ontology of InterPro terms [Bio::Ontology::OntologyI] + -comment => a comment [scalar] + +=cut + +sub new{ + my ($class, @args) = @_; + my $self = $class->SUPER::new(@args); + + my ( $interpro_id, + $short_name) + = $self->_rearrange( [qw( INTERPRO_ID + SHORT_NAME + ) + ], @args ); + + $interpro_id && $self->interpro_id( $interpro_id ); + $short_name && $self->short_name( $short_name ); + + return $self; +} + +=head2 init + + Title : init + Usage : $term->init(); + Function: Initializes this InterProTerm to all "" and empty lists. + Example : + Returns : + Args : + + +=cut + +sub init{ + my $self = shift; + + # first call the inherited version to properly chain up the hierarchy + $self->SUPER::init(@_); + + # then only initialize what we implement ourselves here + $self->interpro_id( INTERPRO_ID_DEFAULT ); + $self->short_name(""); + +} + +=head2 _check_interpro_id + + Title : _check_interpro_id + Usage : + Function: Performs simple check in order to validate that its argument has the form IPRdddddd, where dddddd is a zero-padded six digit number. + Example : + Returns : Returns its argument if valid, otherwise throws exception. + Args : String + + +=cut + +sub _check_interpro_id{ + my ($self, $value) = @_; + + $self->throw( "InterPro ID ".$value." is incorrect\n" ) + unless ( $value =~ /^IPR\d{6}$/ || + $value eq INTERPRO_ID_DEFAULT ); + + return $value; +} + +=head2 interpro_id + + Title : interpro_id + Usage : $obj->interpro_id($newval) + Function: Set/get for the interpro_id of this InterProTerm + Example : + Returns : value of interpro_id (a scalar) + Args : new value (a scalar, optional) + + +=cut + +sub interpro_id{ + my ($self, $value) = @_; + + if( defined $value) { + $value = $self->_check_interpro_id($value); + } + + return $self->identifier($value); +} + +=head2 short_name + + Title : short_name + Usage : $obj->short_name($newval) + Function: Set/get for the short name of this InterProTerm. + Example : + Returns : value of short_name (a scalar) + Args : new value (a scalar, optional) + + +=cut + +sub short_name{ + my ($self, $value) = @_; + + if( defined $value) { + $self->{'short_name'} = $value ? $value : undef; + } + + return $self->{'short_name'}; +} + +=head2 protein_count + + Title : protein_count + Usage : $obj->protein_count($newval) + Function: Set/get for the protein count of this InterProTerm. + Example : + Returns : value of protein_count (a scalar) + Args : new value (a scalar, optional) + + +=cut + +sub protein_count{ + my ($self,$value) = @_; + + if( defined $value) { + $self->{'protein_count'} = $value ? $value : undef; + } + + return $self->{'protein_count'}; +} + +=head2 get_references + + Title : get_references + Usage : + Function: Get the references for this InterPro term. + Example : + Returns : An array of L<Bio::Annotation::Reference> objects + Args : + + +=cut + +sub get_references{ + my $self = shift; + + return @{$self->{"_references"}} if exists($self->{"_references"}); + return (); +} + +=head2 add_reference + + Title : add_reference + Usage : + Function: Add one or more references to this InterPro term. + Example : + Returns : + Args : One or more L<Bio::Annotation::Reference> objects. + + +=cut + +sub add_reference{ + my $self = shift; + + $self->{"_references"} = [] unless exists($self->{"_references"}); + push(@{$self->{"_references"}}, @_); +} + +=head2 remove_references + + Title : remove_references + Usage : + Function: Remove all references for this InterPro term. + Example : + Returns : The list of previous references as an array of + L<Bio::Annotation::Reference> objects. + Args : + + +=cut + +sub remove_references{ + my $self = shift; + + my @arr = $self->get_references(); + $self->{"_references"} = []; + return @arr; +} + +=head2 get_members + + Title : get_members + Usage : @arr = get_members() + Function: Get the list of member(s) for this object. + Example : + Returns : An array of Bio::Annotation::DBLink objects + Args : + + +=cut + +sub get_members{ + my $self = shift; + + return @{$self->{'_members'}} if exists($self->{'_members'}); + return (); +} + +=head2 add_member + + Title : add_member + Usage : + Function: Add one or more member(s) to this object. + Example : + Returns : + Args : One or more Bio::Annotation::DBLink objects. + + +=cut + +sub add_member{ + my $self = shift; + + $self->{'_members'} = [] unless exists($self->{'_members'}); + push(@{$self->{'_members'}}, @_); +} + +=head2 remove_members + + Title : remove_members + Usage : + Function: Remove all members for this class. + Example : + Returns : The list of previous members as an array of + Bio::Annotation::DBLink objects. + Args : + + +=cut + +sub remove_members{ + my $self = shift; + + my @arr = $self->get_members(); + $self->{'_members'} = []; + return @arr; +} + +=head2 get_examples + + Title : get_examples + Usage : @arr = get_examples() + Function: Get the list of example(s) for this object. + + This is an element of the InterPro xml schema. + + Example : + Returns : An array of Bio::Annotation::DBLink objects + Args : + + +=cut + +sub get_examples{ + my $self = shift; + + return @{$self->{'_examples'}} if exists($self->{'_examples'}); + return (); +} + +=head2 add_example + + Title : add_example + Usage : + Function: Add one or more example(s) to this object. + + This is an element of the InterPro xml schema. + + Example : + Returns : + Args : One or more Bio::Annotation::DBLink objects. + + +=cut + +sub add_example{ + my $self = shift; + + $self->{'_examples'} = [] unless exists($self->{'_examples'}); + push(@{$self->{'_examples'}}, @_); +} + +=head2 remove_examples + + Title : remove_examples + Usage : + Function: Remove all examples for this class. + + This is an element of the InterPro xml schema. + + Example : + Returns : The list of previous examples as an array of + Bio::Annotation::DBLink objects. + Args : + + +=cut + +sub remove_examples{ + my $self = shift; + + my @arr = $self->get_examples(); + $self->{'_examples'} = []; + return @arr; +} + +=head2 get_external_documents + + Title : get_external_documents + Usage : @arr = get_external_documents() + Function: Get the list of external_document(s) for this object. + + This is an element of the InterPro xml schema. + + Example : + Returns : An array of Bio::Annotation::DBLink objects + Args : + + +=cut + +sub get_external_documents{ + my $self = shift; + + return @{$self->{'_external_documents'}} if exists($self->{'_external_documents'}); + return (); +} + +=head2 add_external_document + + Title : add_external_document + Usage : + Function: Add one or more external_document(s) to this object. + + This is an element of the InterPro xml schema. + + Example : + Returns : + Args : One or more Bio::Annotation::DBLink objects. + + +=cut + +sub add_external_document{ + my $self = shift; + + $self->{'_external_documents'} = [] unless exists($self->{'_external_documents'}); + push(@{$self->{'_external_documents'}}, @_); +} + +=head2 remove_external_documents + + Title : remove_external_documents + Usage : + Function: Remove all external_documents for this class. + + This is an element of the InterPro xml schema. + + Example : + Returns : The list of previous external_documents as an array of + Bio::Annotation::DBLink objects. + Args : + + +=cut + +sub remove_external_documents{ + my $self = shift; + + my @arr = $self->get_external_documents(); + $self->{'_external_documents'} = []; + return @arr; +} + +=head2 class_list + + Title : class_list + Usage : $obj->class_list($newval) + Function: Set/get for class list element of the InterPro xml schema + Example : + Returns : reference to an array of Bio::Annotation::DBLink objects + Args : reference to an array of Bio::Annotation::DBLink objects + + +=cut + +sub class_list{ + my ($self, $value) = @_; + + if( defined $value) { + $self->{'class_list'} = $value; + } + + return $self->{'class_list'}; +} + +=head2 to_string + + Title : to_string() + Usage : print $term->to_string(); + Function: to_string method for InterPro terms. + Returns : A string representation of this InterPro term. + Args : + +=cut + +sub to_string { + my($self) = @_; + my $s = ""; + + $s .= "-- InterPro id:\n"; + $s .= $self->interpro_id()."\n"; + if (defined $self->name) { + $s .= "-- Name:\n"; + $s .= $self->name()."\n"; + $s .= "-- Definition:\n"; + $s .= $self->definition()."\n"; + $s .= "-- Category:\n"; + if ( defined( $self->ontology() ) ) { + $s .= $self->ontology()->name()."\n"; + } else { + $s .= "\n"; + } + $s .= "-- Version:\n"; + $s .= $self->version()."\n"; + $s .= "-- Is obsolete:\n"; + $s .= $self->is_obsolete()."\n"; + $s .= "-- Comment:\n"; + $s .= $self->comment()."\n"; + if (defined $self->references) { + $s .= "-- References:\n"; + foreach my $ref ( @{$self->references} ) { + $s .= $ref->authors."\n".$ref->title."\n".$ref->location."\n\n"; + }; + $s .= "\n"; + } + if (defined $self->member_list) { + $s .= "-- Member List:\n"; + foreach my $ref ( @{$self->member_list} ) { + $s .= $ref->database."\t".$ref->primary_id."\n"; + }; + $s .= "\n"; + } + if (defined $self->external_doc_list) { + $s .= "-- External Document List:\n"; + foreach my $ref ( @{$self->external_doc_list} ) { + $s .= $ref->database."\t".$ref->primary_id."\n"; + }; + $s .= "\n"; + } + if (defined $self->examples) { + $s .= "-- Examples:\n"; + foreach my $ref ( @{$self->examples} ) { + $s .= $ref->database."\t".$ref->primary_id."\t".$ref->comment."\n"; + }; + $s .= "\n"; + } + if (defined $self->class_list) { + $s .= "-- Class List:\n"; + foreach my $ref ( @{$self->class_list} ) { + $s .= $ref->primary_id."\n"; + }; + $s .= "\n"; + } + if ($self->get_secondary_ids) { + $s .= "-- Secondary IDs:\n"; + foreach my $ref ( $self->get_secondary_ids() ) { + $s .= $ref."\n"; + }; + $s .= "\n"; + } + } + else { + $s .= "InterPro term not fully instantiated\n"; + } + return $s; +} + +=head1 Deprecated methods + +These are here for backwards compatibility. + +=cut + +=head2 secondary_ids + + Title : secondary_ids + Usage : $obj->secondary_ids($newval) + Function: This is deprecated. Use get_secondary_ids() or + add_secondary_id() instead. + Example : + Returns : reference to an array of strings + Args : reference to an array of strings + + +=cut + +sub secondary_ids{ + my $self = shift; + my @ids; + + $self->warn("secondary_ids is deprecated. Use ". + "get_secondary_ids/add_secondary_id instead."); + + # set mode? + if(@_) { + my $sids = shift; + if($sids) { + $self->add_secondary_id(@$sids); + @ids = @$sids; + } else { + # we interpret setting to undef as removing the array + $self->remove_secondary_ids(); + } + } else { + # no; get mode + @ids = $self->get_secondary_ids(); + } + return \@ids; +} + +1;