AcePerl

 view release on metacpan or  search on metacpan

Ace/Sequence/Transcript.pm  view on Meta::CPAN

package Ace::Sequence::Transcript;

use strict;
use Ace;
use Ace::Sequence::Feature;
use vars '$AUTOLOAD';
use overload 
  '""' => 'asString',
  ;

# for compatibility with the Ace::Graphics::Glyph::segments glyph, and
# with Bioperl SeqFeatureI:
*sub_SeqFeature = *merged_segments = *segments = \&exons;

# autoload delegates everything to the Sequence feature
sub AUTOLOAD {
  my($pack,$func_name) = $AUTOLOAD=~/(.+)::([^:]+)$/;
  my $self = shift;
  $self->{base}->$func_name(@_);
}

sub DESTROY { }

sub new {
  my $class = shift;
  my $args = shift;
  bless $args,$class;
  return $args;

# for documentation only
#  my %args = @_;
#  my $introns  = $args{intron};
#  my $exons    = $args{exon};
#  my $sequence = $args{base};  # this is the Ace::Sequence::Feature object
#  return bless {base => $sequence,
#		intron  => $introns,
#		exon    => $exons,
#               cds     => $cds,},$class;

}

sub smapped { 1; }

sub asString {
  shift->{base}->info;
}

sub type {
  return 'Transcript';
}

sub relative {
  my $self = shift;
  my $d = $self->{relative};
  $self->{relative} = shift if @_;
  $d;
}

sub introns {
  my $self = shift;
  return $self->{intron} ? @{$self->{intron}} : () unless $self->relative;
  # otherwise, we have to handle relative coordinates
  my $base   = $self->{base};
  my @e = map {Ace::Sequence->new(-refseq=>$base,-seq=>$_)} @{$self->{intron}};
  return $self->strand < 0 ? reverse @e : @e;
}

sub exons {
  my $self = shift;
  return $self->{exon} ? @{$self->{exon}} : () unless $self->relative;
  # otherwise, we have to handle relative coordinates
  my $base   = $self->{base};
  my @e = map {Ace::Sequence->new(-refseq=>$base,-seq=>$_)} @{$self->{exon}};
  return $self->strand < 0  ? reverse @e : @e;
}

sub cds {
  my $self = shift;
  return $self->{cds} ? @{$self->{cds}} : () unless $self->relative;
  # otherwise, we have to handle relative coordinates
  my $base   = $self->{base};
  my @e = map {Ace::Sequence->new(-refseq=>$base,-seq=>$_)} @{$self->{cds}};
  return $self->strand < 0  ? reverse @e : @e;
}

1;

__END__

=head1 NAME

Ace::Sequence::Transcript - Simple "Gene" Object

=head1 SYNOPSIS



( run in 1.458 second using v1.01-cache-2.11-cpan-99c4e6809bf )