Skip to content

Commit a6031f2

Browse files
committed
Facilitate config of contributing gene trees
1 parent 881c4fc commit a6031f2

File tree

5 files changed

+51
-10
lines changed

5 files changed

+51
-10
lines changed

modules/EnsEMBL/Draw/GlyphSet/genetree.pm

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -839,7 +839,22 @@ sub features {
839839

840840
if ($show_exons) {
841841
my $ref_genetree = $tree->tree;
842-
$ref_genetree = $ref_genetree->alternative_trees->{default} if $ref_genetree->ref_root_id;
842+
843+
if ($ref_genetree->ref_root_id) {
844+
845+
# If $ref_genetree is a contributing tree, we need to fetch the
846+
# corresponding reference tree in order to get exon boundary data.
847+
my @matching_ref_genetrees = grep {
848+
!$_->ref_root_id && $_->root_id == $ref_genetree->ref_root_id
849+
} values %{$ref_genetree->alternative_trees};
850+
851+
# Gene trees are uniquely identified by their root_id, so there can be at
852+
# most one gene tree with a root_id matching $ref_genetree->ref_root_id
853+
if (scalar(@matching_ref_genetrees) > 0) {
854+
$ref_genetree = $matching_ref_genetrees[0];
855+
}
856+
}
857+
843858
unless ($ref_genetree->{_exon_boundaries_hash}) {
844859
my $gtos_adaptor = $tree->adaptor->db->get_GeneTreeObjectStoreAdaptor;
845860
my $json_string = $gtos_adaptor->fetch_by_GeneTree_and_label($ref_genetree, 'exon_boundaries');

modules/EnsEMBL/Web/Command/DataExport/Output.pm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ sub process {
157157
$url_params->{'__clear'} = 1;
158158
## Pass parameters needed for Back button to work
159159
my @core_params = keys %{$hub->core_object('parameters')};
160-
push @core_params, qw(export_action data_type data_action component align g1 node strain hom_id);
160+
push @core_params, qw(export_action data_type data_action component align align_type clusterset_id g1 hom_id node strain);
161161
push @core_params, $self->config_params;
162162
foreach (@core_params) {
163163
my @values = $component->param($_);

modules/EnsEMBL/Web/Component/DataExport/GeneTree.pm

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ sub content {
4141
my $view_config = $self->view_config;
4242

4343
my $settings = $view_config->form_fields('export');
44-
$settings->{'Hidden'} = [qw(align align_type node strain)];
44+
$settings->{'Hidden'} = [qw(align align_type clusterset_id node strain)];
4545

4646
## Add export-specific settings
4747
my $fields_by_format;
@@ -87,9 +87,9 @@ sub content {
8787

8888
## Options per format
8989
$fields_by_format = [{'Tree formats' => {
90-
'Newick' => [qw(newick_mode clusterset_id)],
91-
'NHX' => [qw(nhx_mode clusterset_id)],
92-
'Text' => [qw(scale clusterset_id)],
90+
'Newick' => [qw(newick_mode)],
91+
'NHX' => [qw(nhx_mode)],
92+
'Text' => [qw(scale)],
9393
'OrthoXML' => [],
9494
'PhyloXML' => $self->phyloxml_fields,
9595
}}];

modules/EnsEMBL/Web/Object/Gene.pm

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -941,14 +941,23 @@ sub get_GeneTree {
941941
my $compara_db = shift || 'compara';
942942
my $whole_tree = shift;
943943
my $strain_tree = shift;
944-
my $clusterset_id = $strain_tree || $self->hub->param('clusterset_id') || 'default';
944+
my $clusterset_id = $self->hub->param('clusterset_id') || $strain_tree || 'default';
945+
945946
my $cache_key = sprintf('_protein_tree_%s_%s_%s', $compara_db, $clusterset_id, $strain_tree);
946947

947948
if (!$self->{$cache_key}) {
948949
my $args = {'stable_id' => $self->stable_id, 'cdb' => $compara_db};
949950
my $member = $self->get_compara_Member($args) || return;
950951
my $adaptor = $member->adaptor->db->get_adaptor('GeneTree') || return;
951-
my $tree = $adaptor->fetch_all_by_Member($member, -clusterset_id => $clusterset_id)->[0];
952+
my $tree = $adaptor->fetch_default_for_Member($member, $clusterset_id);
953+
954+
if (!$tree || defined $tree->ref_root_id) {
955+
my $consensus_tree = $adaptor->fetch_default_for_Member($member, $strain_tree);
956+
if (!$tree || $tree->ref_root_id != $consensus_tree->root_id) {
957+
$tree = $consensus_tree;
958+
}
959+
}
960+
952961
unless ($tree) {
953962
$tree = $adaptor->fetch_default_for_Member($member);
954963
}

modules/EnsEMBL/Web/ViewConfig/Gene/ComparaTree.pm

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -155,19 +155,27 @@ sub init_form_non_cacheable {
155155
my $form = $self->SUPER::init_form_non_cacheable(@_);
156156
my %other_clustersets;
157157

158+
my $page_action = $hub->referer->{'ENSEMBL_ACTION'};
159+
my $consensus_clusterset_id = $hub->param('strain') || $page_action =~ /^Strain_/
160+
? $hub->species_defs->get_config($hub->species, 'RELATED_TAXON')
161+
: 'default'
162+
;
163+
158164
if($hub->param('g')) {
159165
my $database = $hub->database($cdb);
160166
my $genome_db = $database->get_GenomeDBAdaptor->fetch_by_name_assembly($hub->species_defs->SPECIES_PRODUCTION_NAME);
161167

162168
my $member = $database->get_GeneMemberAdaptor->fetch_by_stable_id_GenomeDB($hub->core_params->{'g'}, $genome_db);
163169
my $adaptor = $database->get_GeneTreeAdaptor;
164-
my $gene_tree = $adaptor->fetch_default_for_Member($member);
170+
my $gene_tree = $adaptor->fetch_default_for_Member($member, $consensus_clusterset_id);
171+
$consensus_clusterset_id = $gene_tree->clusterset_id if $gene_tree->clusterset_id ne $consensus_clusterset_id;
165172
%other_clustersets = map { $_->clusterset_id => 1 } @{$adaptor->fetch_all_linked_trees($gene_tree)};
166173

167-
delete $other_clustersets{'default'};
174+
delete $other_clustersets{$consensus_clusterset_id};
168175
}
169176

170177
if (my $dropdown = $form->get_elements_by_name('clusterset_id')->[0]) {
178+
$self->_replace_default_clusterset_id_option($dropdown, $consensus_clusterset_id) if $consensus_clusterset_id ne 'default';
171179
$dropdown->add_option({ 'value' => $_, 'caption' => $_ }) for sort keys %other_clustersets;
172180
}
173181

@@ -179,4 +187,13 @@ sub _groups {
179187
return (@{ $_[0]->species_defs->TAXON_ORDER });
180188
}
181189

190+
sub _replace_default_clusterset_id_option {
191+
my ($self, $cset_id_dropdown, $clusterset_id) = @_;
192+
193+
my $default_option = $cset_id_dropdown->get_elements_by_attribute({'value' => 'default'})->[0];
194+
my $cset_id_option = $cset_id_dropdown->dom->create_element('option', {'value' => $clusterset_id, 'inner_HTML' => 'Final (merged) tree'});
195+
$default_option->after($cset_id_option);
196+
$cset_id_dropdown->remove_option('default');
197+
}
198+
182199
1;

0 commit comments

Comments
 (0)