AcePerl
view release on metacpan or search on metacpan
Ace/Sequence/Gene.pm view on Meta::CPAN
package Ace::Sequence::Gene;
use strict;
use Ace;
use Ace::Sequence::Feature;
use vars '$AUTOLOAD';
use overload
'""' => 'asString',
;
# autoload delegates everything to the Ace::Sequence::Feature object
# contained in base
sub AUTOLOAD {
my($pack,$func_name) = $AUTOLOAD=~/(.+)::([^:]+)$/;
my $self = shift;
$self->{base}->$func_name(@_);
}
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,
# introns => $introns,
# exons => $exons},$class;
}
sub asString {
shift->{base}->info;
}
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;
}
1;
__END__
=head1 NAME
Ace::Sequence::Gene - Simple "Gene" Object
=head1 SYNOPSIS
# open database connection and get an Ace::Object sequence
use Ace::Sequence;
# get a megabase from the middle of chromosome I
$seq = Ace::Sequence->new(-name => 'CHROMOSOME_I,
-db => $db,
-offset => 3_000_000,
-length => 1_000_000);
# get all the genes
@genes = $seq->genes;
# get the exons from the first one
@exons = $genes[0]->exons;
# get the introns
( run in 0.959 second using v1.01-cache-2.11-cpan-99c4e6809bf )