Mercurial > repos > mahtabm > ensembl
diff variant_effect_predictor/Bio/Tools/Eponine.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/Eponine.pm Thu Apr 11 02:01:53 2013 -0400 @@ -0,0 +1,299 @@ +# $Id: Eponine.pm,v 1.7 2002/10/22 07:38:45 lapp Exp $ +# +# BioPerl module for Bio::Tools::Eponine +# +# Cared for by Tania Oh <gisoht@nus.edu.sg> +# +# Copyright Tania Oh +# +# You may distribute this module under the same terms as perl itself + +# POD documentation - main docs before the code + +=head1 NAME + +Bio::Tools::Eponine - Results of one Eponine run + +=head1 SYNOPSIS + + use Bio::Tools::Run::Eponine; + use strict; + my $seq = "/data/seq.fa"; + my $threshold = "0.999"; + my @params = ( '-seq' => $seq, + '-threshold' => $threshold); + + my $factory = Bio::Tools::Run::Eponine->new(@params); + # run eponine against fasta + my $r = $factory->run_eponine($seq); + my $parser = Bio::Tools::Eponine->new($r); + + while (my $feat = $parser->next_prediction){ + #$feat contains array of SeqFeature + foreach my $orf($feat) { + print $orf->seq_id. "\n"; + } + } + +=head1 DESCRIPTION + +Parser for Eponine, a probabilistic transcription start site detector +optimized for mammalian genomic sequence. This module inherits off +Bio::Tools::AnalysisResult and therefore implements +Bio::SeqAnalysisParserI (see L<Bio::Tools::AnalysisResult> and +L<Bio::SeqAnalysisParserI>). + +=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 one +of the Bioperl mailing lists. Your participation is much appreciated. + + bioperl-l@bioperl.org - General discussion + http://bio.perl.org/MailList.html - About the mailing lists + +=head2 Reporting Bugs + +Report bugs to the Bioperl bug tracking system to help us keep track +the bugs and their resolution. Bug reports can be submitted via email +or the web: + + bioperl-bugs@bio.perl.org + http://bugzilla.bioperl.org/ + +=head1 AUTHOR - Tania Oh + + +Describe contact details 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::Tools::Eponine; +use vars qw(@ISA); +use strict; + +use Bio::Tools::AnalysisResult; +use Bio::Tools::Prediction::Gene; +use Bio::Tools::Prediction::Exon; + +@ISA = qw(Bio::Tools::AnalysisResult); + +sub _initialize_state { + my($self,@args) = @_; + + # first call the inherited method! + my $make = $self->SUPER::_initialize_state(@args); + + # handle our own parameters + + # our private state variables + $self->{'_preds_parsed'} = 0; + #array of Bio::SeqFeatures + $self->{'_flist'} =[]; +} + +=head2 analysis_method + + Usage : $mzef->analysis_method(); + Purpose : Inherited method. Overridden to ensure that the name matches + /mzef/i. + Returns : String + Argument : n/a + +=cut + +#------------- +sub analysis_method { +#------------- + my ($self, $method) = @_; + if($method && ($method !~ /epo/i)) { + $self->throw("method $method not supported in " . ref($self)); + } + return $self->SUPER::analysis_method($method); +} + +=head2 next_feature + + Title : next_feature + Usage : while($gene = $mzef->next_feature()) { + # do something + } + Function: Returns the next gene structure prediction of the MZEF result + file. Call this method repeatedly until FALSE is returned. + + The returned object is actually a SeqFeatureI implementing object. + This method is required for classes implementing the + SeqAnalysisParserI interface, and is merely an alias for + next_prediction() at present. + + Note that with the present version of MZEF there will only be one + object returned, because MZEF does not predict individual genes + but just potential internal exons. + Example : + Returns : A Bio::Tools::Prediction::Gene object. + Args : + +=cut + +sub next_feature { + my ($self,@args) = @_; + # even though next_prediction doesn't expect any args (and this method + # does neither), we pass on args in order to be prepared if this changes + # ever + return $self->next_prediction(@args); +} + +=head2 next_prediction + + Title : next_prediction + Usage : while($gene = $mzef->next_prediction()) { + # do something + } + Function: Returns the next gene structure prediction of the MZEF result + file. Call this method repeatedly until FALSE is returned. + + Note that with the present version of MZEF there will only be one + object returned, because MZEF does not predict individual genes + but just potential internal exons. + Example : + Returns : A Bio::Tools::Prediction::Gene object. + Args : + +=cut + +sub next_prediction { + my ($self) = @_; + my $gene; + + # if the prediction section hasn't been parsed yet, we do this now + $self->_parse_predictions() unless $self->_predictions_parsed(); + + # return the next gene structure (transcript) + return $self->_prediction(); +} + +=head2 _parse_predictions + + Title : _parse_predictions() + Usage : $obj->_parse_predictions() + Function: Parses the prediction section. Automatically called by + next_prediction() if not yet done. + Example : + Returns : + +=cut + +sub _parse_predictions { + my ($self) = @_; + + while(defined($_ = $self->_readline())) { + if (! /^\#/){ #ignore introductory lines + + my @element = split; + my (%feature); + $feature {name} = $element[0]; + $feature {score} = $element[5]; + $feature {start} = $element[3]; + $feature {end} = $element[4]; + $feature {strand} = $element[6]; + $feature {source}= 'Eponine'; + $feature {primary}= 'TSS'; + $feature {program} = 'eponine-scan'; + $feature {program_version} = '2'; + + $self->create_feature(\%feature); + next; + + } + } + $self->_predictions_parsed(1); +} + +=head2 create_feature + + Title : create_feature + Usage : obj->create_feature($feature) + Function: Returns an array of features + Returns : Returns an array of features + Args : none + +=cut + +sub create_feature { + my ($self, $feat) = @_; + #create and fill Bio::EnsEMBL::Seqfeature object + + my $tss = Bio::SeqFeature::Generic->new + ( -seq_id => $feat->{'name'}, + -start => $feat->{'start'}, + -end => $feat->{'end'}, + -strand => $feat->{'strand'}, + -score => $feat->{'score'}, + -source_tag => $feat->{'source'}, + -primary_tag => $feat->{'primary'}); + + + + if ($tss) { + # add to _flist + push(@{$self->{'_flist'}}, $tss); + } + + #print $tss->gff_string; +} + + + + + + +=head2 _prediction + + Title : _prediction() + Usage : $gene = $obj->_prediction() + Function: internal + Example : + Returns : + +=cut + +sub _prediction { + my ($self) = @_; + + return undef unless(exists($self->{'_flist'}) && @{$self->{'_flist'}}); + return shift(@{$self->{'_flist'}}); +} + +=head2 _predictions_parsed + + Title : _predictions_parsed + Usage : $obj->_predictions_parsed + Function: internal + Example : + Returns : TRUE or FALSE + +=cut + +sub _predictions_parsed { + my ($self, $val) = @_; + + $self->{'_preds_parsed'} = $val if $val; + # array of pre-parsed predictions + if(! exists($self->{'_preds_parsed'})) { + $self->{'_preds_parsed'} = 0; + } + return $self->{'_preds_parsed'}; +} + + +1;