Mercurial > repos > mahtabm > ensembl
diff variant_effect_predictor/Bio/Tools/HMMER/Domain.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/Tools/HMMER/Domain.pm Thu Apr 11 02:01:53 2013 -0400 @@ -0,0 +1,363 @@ +# $Id: Domain.pm,v 1.11 2002/10/08 08:38:34 lapp Exp $ +# +# BioPerl module for Bio::Tools::HMMER::Domain +# +# Cared for by Ewan Birney <birney@sanger.ac.uk> +# +# Copyright Ewan Birney +# +# You may distribute this module under the same terms as perl itself + +# POD documentation - main docs before the code + +=head1 NAME + +Bio::Tools::HMMER::Domain - One particular domain hit from HMMER + +=head1 SYNOPSIS + +Read the Bio::Tools::HMMER::Results docs + +=head1 DESCRIPTION + +A particular domain score. We reuse the Homol SeqFeature system +here, so this inherits off Homol SeqFeature. As this code +originally came from a separate project, there are some backward +compatibility stuff provided to keep this working with old code. + +Don't forget this inherits off Bio::SeqFeature, so all your usual +nice start/end/score stuff is ready for use. + +=head1 CONTACT + +Ewan Birney, birney@ebi.ac.uk + +=head1 CONTRIBUTORS + +Jason Stajich, jason@bioperl.org + +=head1 APPENDIX + +The rest of the documentation details each of the object +methods. Internal methods are usually preceded with a _ + +=cut + +#' +package Bio::Tools::HMMER::Domain; + +use vars qw(@ISA); +use Bio::SeqFeature::FeaturePair; +use Bio::SeqFeature::Generic; +use strict; + + +@ISA = qw(Bio::SeqFeature::FeaturePair); + +sub new { + my($class,@args) = @_; + my $self = $class->SUPER::new(@args); + + $self->{'alignlines'} = []; + + my $hmmf1 = Bio::SeqFeature::Generic->new(@args); + my $hmmf2 = Bio::SeqFeature::Generic->new(@args); + + $self->feature1($hmmf1); + $self->feature2($hmmf2); + + return $self; +} + +=head2 add_alignment_line + + Title : add_alignment_line + Usage : $domain->add_alignment_line($line_from_hmmer_output); + Function: add an alignment line to this Domain object + Returns : Nothing + Args : scalar + + Adds an alignment line, mainly for storing the HMMER alignments +as flat text which can be reguritated. You're right. This is *not +nice* and not the right way to do it. C'est la vie. + +=cut + +sub add_alignment_line { + my $self = shift; + my $line = shift; + push(@{$self->{'alignlines'}},$line); +} + +=head2 each_alignment_line + + Title : each_alignment_line + Usage : foreach $line ( $domain->each_alignment_line ) + Function: reguritates the alignment lines as they were fed in. + only useful realistically for printing. + Example : + Returns : + Args : None + + +=cut + +sub each_alignment_line { + my $self = shift; + return @{$self->{'alignlines'}}; +} + +=head2 get_nse + + Title : get_nse + Usage : $domain->get_nse() + Function: Provides a seqname/start-end format, useful + for unique keys. nse stands for name-start-end + It is used alot in Pfam + Example : + Returns : A string + Args : Optional seperator 1 and seperator 2 (default / and -) + + +=cut + + + +sub get_nse { + my $self = shift; + my $sep1 = shift; + my $sep2 = shift; + + if( !defined $sep2 ) { + $sep2 = "-"; + } + if( !defined $sep1 ) { + $sep1 = "/"; + } + + return sprintf("%s%s%d%s%d",$self->seq_id,$sep1,$self->start,$sep2,$self->end); +} + + +# =head2 start_seq + +# Title : start_seq +# Usage : Backward compatibility with old HMMER modules. +# should use $domain->start +# Function: +# Example : +# Returns : +# Args : + +# =cut + +sub start_seq { + my $self = shift; + my $start = shift; + + $self->warn("Using old domain->start_seq. Should use domain->start"); + return $self->start($start); +} + +# =head2 end_seq + +# Title : end_seq +# Usage : Backward compatibility with old HMMER modules. +# should use $domain->end +# Function: +# Example : +# Returns : +# Args : + +# =cut + +sub end_seq { + my $self = shift; + my $end = shift; + + $self->warn("Using old domain->end_seq. Should use domain->end"); + return $self->end($end); +} + +# =head2 start_hmm + +# Title : start_hmm +# Usage : Backward compatibility with old HMMER modules, and +# for convience. Equivalent to $self->homol_SeqFeature->start +# Function: +# Example : +# Returns : +# Args : + +# =cut + +sub start_hmm { + my $self = shift; + my $start = shift; + $self->warn("Using old domain->start_hmm. Should use domain->hstart"); + return $self->hstart($start); +} + +# =head2 end_hmm + +# Title : end_hmm +# Usage : Backward compatibility with old HMMER modules, and +# for convience. Equivalent to $self->homol_SeqFeature->start +# Function: +# Example : +# Returns : +# Args : + +# =cut + +sub end_hmm { + my $self = shift; + my $end = shift; + + $self->warn("Using old domain->end_hmm. Should use domain->hend"); + return $self->hend($end); +} + +=head2 hmmacc + + Title : hmmacc + Usage : $domain->hmmacc($newacc) + Function: set get for HMM accession number. This is placed in the homol + feature of the HMM + Example : + Returns : + Args : + + +=cut + +sub hmmacc{ + my ($self,$acc) = @_; + if( defined $acc ) { + $self->feature2->add_tag_value('accession',$acc); + } + my @vals = $self->feature2->each_tag_value('accession'); + return shift @vals; +} + +=head2 hmmname + + Title : hmmname + Usage : $domain->hmmname($newname) + Function: set get for HMM accession number. This is placed in the homol + feature of the HMM + Example : + Returns : + Args : + +=cut + +sub hmmname { + my ($self,$hname) = @_; + + + if( defined $hname ) { + $self->hseqname($hname); + } + + return $self->hseqname(); +} + +=head2 bits + + Title : bits + Usage : + Function: backward compatibility. Same as score + Example : + Returns : + Args : + +=cut + +sub bits{ + my ($self,$sc) = @_; + + return $self->score($sc); +} + +=head2 evalue + + Title : evalue + Usage : + Function: $domain->evalue($value); + Example : + Returns : + Args : + +=cut + +sub evalue{ + my ($self,$value) = @_; + + if( defined $value ) { + $self->add_tag_value('evalue',$value); + } + my @vals = $self->each_tag_value('evalue'); + return shift @vals; +} + +=head2 seqbits + + Title : seqbits + Usage : + Function: $domain->seqbits($value); + Example : + Returns : + Args : + +=cut + +sub seqbits { + my ($self,$value) = @_; + if( defined $value ) { + $self->add_tag_value('seqbits',$value); + } + my @vals = $self->each_tag_value('seqbits'); + return shift @vals; +} + +=head2 seq_range + + Title : seq_range + Usage : + Function: Throws an exception to catch scripts which need to upgrade + Example : + Returns : + Args : + +=cut + +sub seq_range{ + my ($self,@args) = @_; + + $self->throw("You have accessed an old method. Please recode your script to the new bioperl HMMER module"); +} + +=head2 hmm_range + + Title : hmm_range + Usage : + Function: Throws an exception to catch scripts which need to upgrade + Example : + Returns : + Args : + + +=cut + +sub hmm_range{ + my ($self,@args) = @_; + + $self->throw("You have accessed an old method. Please recode your script to the new bioperl HMMER module"); +} + +1; # says use was ok +__END__ + + +