Raw content of Bio::EnsEMBL::IdMapping::TinyExon =head1 LICENSE Copyright (c) 1999-2009 The European Bioinformatics Institute and Genome Research Limited. All rights reserved. This software is distributed under a modified Apache license. For license details, please see /info/about/code_licence.html =head1 CONTACT Please email comments or questions to the public Ensembl developers list at <ensembl-dev@ebi.ac.uk>. Questions may also be sent to the Ensembl help desk at <helpdesk@ensembl.org>. =cut =head1 NAME Bio::EnsEMBL::IdMapping::TinyExon - lightweight exon object =head1 SYNOPSIS # fetch an exon from the db and create a lightweight exon object # from it my $exon = $exon_adaptor->fetch_by_stable_id('ENSE000345437'); my $lightweight_exon = Bio::EnsEMBL::IdMapping::TinyExon->new_fast( [ $exon->dbID, $exon->stable_id, $exon->version, $exon->created_date, $exon->modified_date, $exon->start, $exon->end, $exon->strand, $exon->slice->seq_region_name, $exon->slice->coord_system_name, $exon->slice->coord_system->version, $exon->slice->subseq( $exon->start, $exon->end, $exon->strand ), $exon->phase, $need_project, ] ); =head1 DESCRIPTION This is a lightweight exon object for the stable Id mapping. See the documentation in TinyFeature for general considerations about its design. =head1 METHODS start end strand seq_region_name coord_system_name coord_system_version seq phase need_project common_start common_end common_strand common_sr_name length is_known =cut package Bio::EnsEMBL::IdMapping::TinyExon; # internal data structure (array indices): # # 0-4 see TinyFeature # 5 start # 6 end # 7 strand # 8 seq_region_name # 9 coord_system_name # 10 coord_system_version # 11 seq # 12 phase # 13 need_project # 14 common_start # 15 common_end # 16 common_strand # 17 common_sr_name use strict; use warnings; no warnings 'uninitialized'; use Bio::EnsEMBL::IdMapping::TinyFeature; our @ISA = qw(Bio::EnsEMBL::IdMapping::TinyFeature); use Bio::EnsEMBL::Utils::Exception qw(throw warning); =head2 start Arg[1] : (optional) Int - the exon's start coordinate Description : Getter/setter for the exon's start coordinate. Return type : Int Exceptions : none Caller : general Status : At Risk : under development =cut sub start { my $self = shift; $self->[5] = shift if (@_); return $self->[5]; } =head2 end Arg[1] : (optional) Int - the exon's end coordinate Description : Getter/setter for the exon's end coordinate. Return type : Int Exceptions : none Caller : general Status : At Risk : under development =cut sub end { my $self = shift; $self->[6] = shift if (@_); return $self->[6]; } =head2 strand Arg[1] : (optional) Int - the exon's strand Description : Getter/setter for the exon's strand. Return type : Int Exceptions : none Caller : general Status : At Risk : under development =cut sub strand { my $self = shift; $self->[7] = shift if (@_); return $self->[7]; } =head2 seq_region_name Arg[1] : (optional) String - seq_region name Description : Getter/setter for the seq_region name of the slice the exon is on. Return type : String Exceptions : none Caller : general Status : At Risk : under development =cut sub seq_region_name { my $self = shift; $self->[8] = shift if (@_); return $self->[8]; } =head2 coord_system_name Arg[1] : (optional) String - coord_system name Description : Getter/setter for the coord_system name of the slice the exon is on. Return type : String Exceptions : none Caller : general Status : At Risk : under development =cut sub coord_system_name { my $self = shift; $self->[9] = shift if (@_); return $self->[9]; } =head2 coord_system_version Arg[1] : (optional) String - coord_system version Description : Getter/setter for the coord_system version of the slice the exon is on. Return type : String Exceptions : none Caller : general Status : At Risk : under development =cut sub coord_system_version { my $self = shift; $self->[10] = shift if (@_); return $self->[10]; } =head2 seq Arg[1] : (optional) String - the exon's sequence Description : Getter/setter for the exon's sequence. Return type : String Exceptions : none Caller : general Status : At Risk : under development =cut sub seq { my $self = shift; $self->[11] = shift if (@_); return $self->[11]; } =head2 phase Arg[1] : (optional) Int - the exon's phase Description : Getter/setter for the exon's phase. Return type : Int Exceptions : none Caller : general Status : At Risk : under development =cut sub phase { my $self = shift; $self->[12] = shift if (@_); return $self->[12]; } =head2 need_project Arg[1] : (optional) Boolean - attribute to set Description : Getter/setter for the attribute determining whether an exon needs to be projected onto a common coord_system. You don't need to do so if the native coord_system is common to the source and target assemblies, or if no common coord_system is found (the Cache object has methods to determine this). Return type : Boolean Exceptions : none Caller : general Status : At Risk : under development =cut sub need_project { my $self = shift; $self->[13] = shift if (@_); return $self->[13]; } =head2 common_start Arg[1] : (optional) Int - the exon's start in common coord_system coordinates Description : Getter/setter for the exon's start in common coord_system coordinates. Will return $self->start if no projection to a common coord_system is required. Return type : Int Exceptions : none Caller : general Status : At Risk : under development =cut sub common_start { my $self = shift; # when used as a setter, always set a value $self->[14] = shift if (@_); # when used as a getter if (scalar(@$self) > 14) { # return value for common coord_system if available (but avoid # autovivification gotcha!) return $self->[14]; } elsif ($self->need_project) { # return undef if common value expected but not there (e.g. no projection # found return undef; } else { # return native value return $self->start; } } =head2 common_end Arg[1] : (optional) Int - the exon's end in common coord_system coordinates Description : Getter/setter for the exon's end in common coord_system coordinates. Will return $self->end if no projection to a common coord_system is required. Return type : Int Exceptions : none Caller : general Status : At Risk : under development =cut sub common_end { my $self = shift; # when used as a setter, always set a value $self->[15] = shift if (@_); # when used as a getter if (scalar(@$self) > 14) { # return value for common coord_system if available (but avoid # autovivification gotcha!) return $self->[15]; } elsif ($self->need_project) { # return undef if common value expected but not there (e.g. no projection # found return undef; } else { # return native value return $self->end; } } =head2 common_strand Arg[1] : (optional) Int - the exon's strand in common coord_system coordinates Description : Getter/setter for the exon's strand in common coord_system coordinates. Will return $self->strand if no projection to a common coord_system is required. Return type : Int Exceptions : none Caller : general Status : At Risk : under development =cut sub common_strand { my $self = shift; # when used as a setter, always set a value $self->[16] = shift if (@_); # when used as a getter if (scalar(@$self) > 14) { # return value for common coord_system if available (but avoid # autovivification gotcha!) return $self->[16]; } elsif ($self->need_project) { # return undef if common value expected but not there (e.g. no projection # found return undef; } else { # return native value return $self->strand; } } =head2 common_sr_name Arg[1] : (optional) String - seq_region name of the exon's slice on the common coord_system Description : Getter/setter for the seq_region name of the exon's slice on the common coord_system coordinates. Will return $self->seq_region_name if no projection to a common coord_system is required. Return type : String Exceptions : none Caller : general Status : At Risk : under development =cut sub common_sr_name { my $self = shift; # when used as a setter, always set a value $self->[17] = shift if (@_); # when used as a getter if (scalar(@$self) > 14) { # return value for common coord_system if available (but avoid # autovivification gotcha!) return $self->[17]; } elsif ($self->need_project) { # return undef if common value expected but not there (e.g. no projection # found return undef; } else { # return native value return $self->seq_region_name; } } =head2 length Description : Returns the exon length (distance between start and end). Return type : Int Exceptions : none Caller : general Status : At Risk : under development =cut sub length { my $self = shift; return ($self->end - $self->start + 1); } =head2 is_known Description : Determine whether an exon is known. In the context of stable Id mapping, this is true for all exons. Return type : Boolean Exceptions : none Caller : general Status : At Risk : under development =cut sub is_known { return 1; } 1;