my ( $self, $s_obj, $t_obj ) = @_;
my $version = $s_obj->version();
if ( $s_obj->isa('Bio::EnsEMBL::IdMapping::TinyExon') ) {
# increment version if sequence changed
if ( $s_obj->seq() ne $t_obj->seq() ) { ++$version }
}
elsif ( $s_obj->isa('Bio::EnsEMBL::IdMapping::TinyTranscript') ) {
my $change = 0;
# increment version if spliced exon sequence changed
if ( $s_obj->seq_md5_sum() ne $t_obj->seq_md5_sum() ) { $change = 1 }
# Look for changes in exon version
my $source_exon_string;
my $target_exon_string;
foreach my $exon (@{ $s_obj->get_all_Exons() } ) {
$source_exon_string .= $exon->start();
$source_exon_string .= $exon->end();
}
foreach my $exon (@{ $t_obj->get_all_Exons() } ) {
$target_exon_string .= $exon->start();
$target_exon_string .= $exon->end();
}
if ($source_exon_string ne $target_exon_string) { $change = 1; }
# increment version if translation sequence changed
# Can happen if Havana move initiation start site or stop codon
if ($s_obj->translation and $t_obj->translation) {
if ($s_obj->translation->seq ne $t_obj->translation->seq) { $change = 1; }
}
# Look for changes on the region
if ( $s_obj->seq_region_name() ne $t_obj->seq_region_name() ) { $change = 1 }
if ($change) { ++$version }
}
elsif ( $s_obj->isa('Bio::EnsEMBL::IdMapping::TinyTranslation') ) {
# increment version if transcript or translation sequences changed
if ( $s_obj->seq() ne $t_obj->seq() ) { ++$version }
}
elsif ( $s_obj->isa('Bio::EnsEMBL::IdMapping::TinyGene') ) {
# increment version if any transcript changed
my $s_tr_ident = join(
":",
map { $_->stable_id() .
'.' . $_->version() } sort {
$a->stable_id() cmp $b->stable_id()
} @{ $s_obj->get_all_Transcripts() } );
my $t_tr_ident = join(
":",
map { $_->stable_id() .
'.' . $_->version() } sort {
$a->stable_id() cmp $b->stable_id()
} @{ $t_obj->get_all_Transcripts() } );
if ( $s_tr_ident ne $t_tr_ident ) { ++$version }
}
else {
throw( "Unknown object type: " . ref($s_obj) );
}
return $version;