Raw content of Bio::EnsEMBL::Analysis::Tools::MiniSeq # Spangle version of the ensembl Transcript object # POD documentation - main docs before the code =head1 NAME MiniSeq - an artificially constructed cDNA on a genomic sequence =head1 SYNOPSIS This module is used when we only want to run an analysis over a part or multiple parts of a sequence. =head1 DESCRIPTION Contains details of coordinates of all exons that make up a gene transcript. Creation: my $mini = new Bio::EnsEMBL::Analysis::Tools::MiniSeq(-id => $id, -pairaln => $pairaln); $pairaln is a Bio::EnsEMBL::Analysis::PairAlign object containing one or more feature pairs that represent the mapping of the genomic coords to the cDNA coords Manipulation: my $align = $mini->get_PairAlign; my $cdnaseq = $mini->get_cDNA_sequence; # We now do some analysis on the cdnaseq that puts sequence # features on it. We don't want the coordsin the cDNA frame so # we now pass them back to the miniseq to convert them into # genomic coordinates. my @newfeatures = $mini->convert_FeaturePairs(@featurepairs); =head1 CONTACT 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::EnsEMBL::Analysis::Tools::MiniSeq; use vars qw(@ISA); use strict; use Bio::EnsEMBL::FeaturePair; use Bio::EnsEMBL::Analysis::Tools::PairAlign; use Bio::PrimarySeq; use Bio::EnsEMBL::Utils::Exception qw(throw warning stack_trace_dump verbose); use Bio::EnsEMBL::Utils::Argument qw( rearrange ); @ISA = qw(); sub new { my($class,@args) = @_; my $self = {}; bless $self, $class; my ($id,$pairalign) = rearrange([qw(ID PAIRALIGN)],@args); verbose('warning'); #No defaults $self->id($id); $self->pairAlign($pairalign); throw("No input id for MiniSeq") unless($self->id); throw("No input pairalign for MiniSeq") unless($self->pairAlign); return $self; } =head2 id Title : id Usage : $obj->id($newval) Function: Returns : value of id Args : newvalue (optional) =cut sub id { my ($self,$arg) = @_; if(defined($arg)) { $self->{'_id'} = $arg; } return $self->{'_id'}; } =head2 pairAlign Title : pairAlign Usage : $self->pairAlign($pair) Function: Get/set method for the pairalign object that stores the cDNA-genomic exon mapping Returns : Bio::EnsEMBL::Analysis::PairAlign Args : =cut sub pairAlign { my ($self,$pair) = @_; if ($pair) { if( ! $pair->isa("Bio::EnsEMBL::Analysis::Tools::PairAlign") ) { throw("$pair is not a Bio::EnsEMBL::Analysis::Tools::PairAlign!"); } foreach my $p (@{$pair->eachFeaturePair}) { if ($p->strand != 1) { throw("Can't have a PairAlign object where the strand of the first ". "object is reversed"); } } $self->{'_pair'} = $pair; } return $self->{'_pair'}; } =head2 get_cDNA_sequence Title : get_cDNA_sequence Usage : my $seq = $self->get_cDNA_sequence Function: Returns the cdna sequence corresponding to the cDNA in the pairAlign object Example : Returns : Bio::PrimarySeq Args : none =cut sub get_cDNA_sequence { my ($self) = @_; my $seqstr = ""; my @exons = @{$self->pairAlign->eachFeaturePair}; return unless (scalar @exons > 0); foreach my $exon (@exons) { $seqstr .= $exon->seq; } return new Bio::PrimarySeq('-id' => "genomic" , -seq => $seqstr); } =head2 convert_FeaturePair Title : convert_FeaturePair Usage : my @newfeatures = $self->convert_FeaturePairs($feature) Function: Converts feature pair coordinates on the cDNA sequence into an array of feature pairs on the genomic sequence Example : Returns : Bio::EnsEMBL::FeaturePair Args : Array of Bio::EnsEMBL::FeaturePair =cut sub convert_FeaturePair { my ($self,$feature) = @_; my @newfeatures; my @tmp = @{$self->pairAlign->convert_FeaturePair($feature)}; push(@newfeatures,@tmp); return \@newfeatures; } =head2 convert_SeqFeature Title : convert_FeaturePair Usage : my @newfeatures = $self->convert_FeaturePairs($feature) Function: Converts feature coordinates on the cDNA sequence into an array of features on the genomic sequence Example : Returns : Bio::EnsEMBL::FeaturePair Args : Array of Bio::EnsEMBL::FeaturePair =cut sub convert_SeqFeature { my ($self,$feature) = @_; my @newfeatures; my @tmp = @{$self->pairAlign->convert_cDNA_feature($feature)}; push(@newfeatures,@tmp); return \@newfeatures; } =head2 convert_PepFeaturePair Title : convert_PepFeaturePair Usage : my @newfeatures = $self->convert_PepFeaturePair($feature) Function: Converts feature pair coordinates on the cDNA sequence into an array of feature pairs on the genomic sequence Peptide coordinates are maintained. Example : Returns : Array of Bio::EnsEMBL::FeaturePair Args : Bio::EnsEMBL::FeaturePair =cut sub convert_PepFeaturePair { my ($self,$feature) = @_; my @newfeatures; my @tmp = @{$self->pairAlign->convert_FeaturePair($feature)}; # replace protein coordinates $tmp[0]->hstart($feature->hstart); $tmp[0]->hend($feature->hend); # SMJS strand of peptide should be positive? $tmp[0]->hstrand(1); push(@newfeatures,@tmp); return \@newfeatures; } 1;