sub cdna_coding_start {
my ($self, $transcript) = @_;
assert_ref($transcript, 'Bio::EnsEMBL::Transcript', 'transcript');
my $id = $transcript->dbID();
if(defined $id && exists $self->{cdna_coding_start}->{$id}) {
return $self->{cdna_coding_start}->{$id};
}
my $cdna_coding_start;
my $transcript_coding_start = $transcript->cdna_coding_start();
if(defined $transcript_coding_start) {
my $cdna_start = $self->cdna_start($transcript);
if ( $transcript_coding_start < $cdna_start ) {
# Coding region starts upstream of this exon...
if ( $transcript->cdna_coding_end() < $cdna_start ) {
# ... and also ends upstream of this exon.
$cdna_coding_start = undef;
}
else {
# ... and does not end upstream of this exon.
$cdna_coding_start = $cdna_start;
}
} else {
# Coding region starts either within or downstream of this
# exon.
if ( $transcript_coding_start <= $self->cdna_end($transcript) ) {
# Coding region starts within this exon.
$cdna_coding_start = $transcript_coding_start;
}
else {
# Coding region starts downstream of this exon.
$cdna_coding_start = undef;
}
}
}
else {
$cdna_coding_start = undef;
}
if(defined $id) {
$self->{cdna_coding_start}->{$id} = $cdna_coding_start;
$self->{cdna_coding_end}->{$id} = undef if ! defined $cdna_coding_start;
}
return $cdna_coding_start;
} ## end sub cdna_coding_start