### Needs go be re-worked to be generic
### need to speak to Steve (st3) over this one
package Bio::EnsEMBL::GlyphSet::alternative_assembly;
use strict;
use base qw(Bio::EnsEMBL::GlyphSet_simple);
use Bio::EnsEMBL::SimpleFeature;
sub features {
my $self = shift;
my $db = $self->my_config( 'assembly_db' );
my $key = $self->my_config( 'assembly_name' );
# set dnadb to 'vega' so that the assembly mapping is retrieved from there
my $reg = "Bio::EnsEMBL::Registry";
my $species = $self->{'config'}->{'species'};
my $orig_group;
if( my $vega_dnadb = $reg->get_DNAAdaptor($species, "vega") ) {
$orig_group = $vega_dnadb->group;
}
$reg->add_DNAAdaptor($species, "vega", $species, "vega");
# get a Vega slice to do the projection
my $vega_slice = $self->{'container'};
if( my $vega_sa = Bio::EnsEMBL::Registry->get_adaptor($species, "vega", "Slice") ) {
$vega_slice = $vega_sa->fetch_by_region(
( map { $self->{'container'}->$_ } qw( coord_system_name seq_region_name start end strand) ),
$self->{'container'}->coord_system->version
);
}
my $res = [];
my $projection = $vega_slice->project('chromosome', $self->species_defs->ALTERNATIVE_ASSEMBLY);
foreach my $seg ( @$projection ) {
my $slice = $seg->to_Slice;
my $location = $slice->seq_region_name.":".$slice->start."-".$slice->end;
my $f = Bio::EnsEMBL::SimpleFeature->new(
-display_label => $location,
-start => $seg->from_start,
-end => $seg->from_end,
-strand => $slice->strand,
);
push @$res, $f;
}
# set dnadb back to what it was originally
$reg->add_DNAAdaptor($species, "vega", $species, $orig_group) if ($orig_group);
return $res;
}
sub href {
my ($self, $f) = @_;
my ($location) = split /\./ , $f->display_id;
my $species = $self->species;
return "http://vega.sanger.ac.uk/$species/contigview?l=$location";
}
sub feature_label {
my ($self, $f ) = @_;
return ($f->display_id, 'overlaid');
}
sub title {
my ($self, $f ) = @_;
my $title = $f->display_id.'; Assembly: Vega';
}
sub export_feature {
my $self = shift;
my ($feature, $feature_type) = @_;
my $container = $self->{'container'};
return $self->_render_text($feature, $feature_type, {
'headers' => [ 'vega' ],
'values' => [ [$self->feature_label($feature)]->[0] ]
}, {
'seqname' => $container->seq_region_name,
'start' => $feature->start + ($container->strand > 0 ? $container->start : $container->end) - 1,
'end' => $feature->end + ($container->strand > 0 ? $container->start : $container->end) - 1,
'source' => 'Vega'
});
}
1;