From a848dead59efcc7d0fc1a98e8e19079e6680b2cc Mon Sep 17 00:00:00 2001 From: Luke Fitzpatrick Date: Thu, 22 Dec 2016 16:40:46 +1100 Subject: [PATCH 01/52] Tabular tree export includes user defined colours Updates #630 --- lib/Biodiverse/GUI/Dendrogram.pm | 21 +++++++++++++++--- lib/Biodiverse/TreeNode.pm | 37 ++++++++++++++++++++++++++++---- 2 files changed, 51 insertions(+), 7 deletions(-) diff --git a/lib/Biodiverse/GUI/Dendrogram.pm b/lib/Biodiverse/GUI/Dendrogram.pm index 67dd0b7c1..3561c9c87 100644 --- a/lib/Biodiverse/GUI/Dendrogram.pm +++ b/lib/Biodiverse/GUI/Dendrogram.pm @@ -1163,6 +1163,8 @@ sub recolour_cluster_lines { } $self->{node_colours_cache}{$node_name} = $colour_ref; + # also store the colour in the node for export + $node_ref->set_colour(colour=>$colour_ref); # if colour is undef then we're clearing back to default $colour_ref ||= DEFAULT_LINE_COLOUR; @@ -1190,9 +1192,15 @@ sub recolour_cluster_lines { foreach my $node_name (keys %{ $self->{recolour_nodes} }) { next NODE if exists $coloured_nodes{$node_name}; - + $self->{node_lines}->{$node_name}->set(fill_color_gdk => DEFAULT_LINE_COLOUR); $self->{node_colours_cache}{$node_name} = DEFAULT_LINE_COLOUR; + + my $node_ref + = $self->get_tree_object()->get_node_ref(node => $node_name); + + $node_ref->set_colour(colour=>DEFAULT_LINE_COLOUR); + } #print "[Dendrogram] Recoloured nodes\n"; } @@ -1214,7 +1222,8 @@ sub colour_line { my $name = $node_ref->get_name; $self->{node_colours_cache}{$name} = $colour_ref; - + $node_ref->set_colour(colour => $colour_ref); + my $line = $self->{node_lines}->{$name}; if ($line) { $self->{node_lines}->{$name}->set(fill_color_gdk => $colour_ref); @@ -1230,7 +1239,8 @@ sub colour_lines { my $name = $node_ref->get_name; $self->{node_colours_cache}{$name} = $colour_ref; - + $node_ref->set_colour(colour => $colour_ref); + $self->{node_lines}->{$name}->set(fill_color_gdk => $colour_ref); $coloured_nodes->{ $name } = $node_ref; # mark as coloured @@ -2035,6 +2045,11 @@ sub clear { $self->{node_lines} = {}; $self->{node_colours_cache} = {}; + # need to clear the colours in each node + foreach my $node ($self->get_tree_object()->get_node_refs()) { + $node->set_colour(DEFAULT_LINE_COLOUR); + } + delete $self->{unscaled_width}; delete $self->{unscaled_height}; delete $self->{tree_node}; diff --git a/lib/Biodiverse/TreeNode.pm b/lib/Biodiverse/TreeNode.pm index 467ea7072..33bcdc198 100644 --- a/lib/Biodiverse/TreeNode.pm +++ b/lib/Biodiverse/TreeNode.pm @@ -1550,7 +1550,32 @@ sub number_nodes { return $number; } -# convert the entire tree to a table structure, using a basestruct object as an intermediate + +# expects a Gdk::Color +sub set_colour { + my ($self, %args) = @_; + + $self->{NODE_VALUES}{COLOUR} = $args{colour}; +} + + +# returns a Gdk::Color +sub get_colour { + my ($self, %args) = @_; + + my $colour_ref = $self->{NODE_VALUES}{COLOUR}; + if($colour_ref) { + return $colour_ref; + } + else { + # choose black to be the default colour + return Gtk2::Gdk::Color->new(0,0,0); + } +} + + +# convert the entire tree to a table structure, using a basestruct +# object as an intermediate sub to_table { my $self = shift; my %args = @_; @@ -1573,8 +1598,8 @@ sub to_table { ); # may need to specify some other params - my @header = qw /TREENAME NODE_NUMBER PARENTNODE LENGTHTOPARENT NAME/; -# push @$data, \@header; + my @header = qw /TREENAME NODE_NUMBER PARENTNODE LENGTHTOPARENT NAME COLOUR/; + my ($parent_num, $taxon_name); @@ -1596,8 +1621,12 @@ sub to_table { } my $number = $node->get_value ('NODE_NUMBER'); my %data; + + my $colour = $node->get_colour()->to_string(); + # add to the basestruct object - @data{@header} = ($treename, $number, $parent_num, $node->get_length || 0, $taxon_name); + @data{@header} = ($treename, $number, $parent_num, + $node->get_length || 0, $taxon_name, $colour); # get the additional list data if requested if (defined $args{sub_list} && $args{sub_list} !~ /(no list)/) { From a6db5c72c75360e3d4c53ff594373af93e4f3d61 Mon Sep 17 00:00:00 2001 From: Luke Fitzpatrick Date: Fri, 23 Dec 2016 09:34:49 +1100 Subject: [PATCH 02/52] Update tests after addition of colour to tabular tree export. --- lib/Biodiverse/TreeNode.pm | 1 + t/21-ReadNexus.t | 11 ++++++----- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/lib/Biodiverse/TreeNode.pm b/lib/Biodiverse/TreeNode.pm index 33bcdc198..e22953649 100644 --- a/lib/Biodiverse/TreeNode.pm +++ b/lib/Biodiverse/TreeNode.pm @@ -14,6 +14,7 @@ use Data::Dumper qw/Dumper/; use List::Util 1.39 qw /min max pairgrep sum any/; use List::MoreUtils qw /uniq/; +use Gtk2; use Biodiverse::BaseStruct; use parent qw /Biodiverse::Common/; diff --git a/t/21-ReadNexus.t b/t/21-ReadNexus.t index 3a60d537b..9b900cc93 100644 --- a/t/21-ReadNexus.t +++ b/t/21-ReadNexus.t @@ -288,13 +288,14 @@ sub test_tabular_tree_from_file { # re-import my $reimport_ref = Biodiverse::ReadNexus->new; my $reimport_map = { - TREENAME_COL => 6, - LENGTHTOPARENT_COL => 2, - NODENUM_COL => 4, - NODENAME_COL => 3, - PARENT_COL => 5, + TREENAME_COL => 7, + LENGTHTOPARENT_COL => 3, + NODENUM_COL => 5, + NODENAME_COL => 4, + PARENT_COL => 6, }; + $result = eval { $reimport_ref->import_tabular_tree ( file => $exported_tabular_file, From 4ec7d03260122db5de6f7ef945d00c909f0c4e4c Mon Sep 17 00:00:00 2001 From: Luke Fitzpatrick Date: Fri, 23 Dec 2016 10:17:37 +1100 Subject: [PATCH 03/52] Clean up node colour implementation in Dendrogram.pm Updates issue #630 --- lib/Biodiverse/GUI/Dendrogram.pm | 104 +++++++++++++++++++++++-------- 1 file changed, 79 insertions(+), 25 deletions(-) diff --git a/lib/Biodiverse/GUI/Dendrogram.pm b/lib/Biodiverse/GUI/Dendrogram.pm index 3561c9c87..bcab3011c 100644 --- a/lib/Biodiverse/GUI/Dendrogram.pm +++ b/lib/Biodiverse/GUI/Dendrogram.pm @@ -1119,6 +1119,45 @@ sub get_colour_not_in_tree { } +sub clear_node_colours { + my $self = shift; + + $self->{node_colours_cache} = {}; + + foreach my $node ($self->get_tree_object()->get_node_refs()) { + $node->set_colour(DEFAULT_LINE_COLOUR); + } +} + +sub set_node_colour { + my ($self, %args) = @_; + my $colour_ref = $args{ colour_ref }; + my $node_name = $args{ node_name }; + + # cache the colour + $self->{node_colours_cache}{$node_name} = $colour_ref; + + # also store it in the node for export purposes + my $node_ref + = $self->get_tree_object()->get_node_ref(node => $node_name); + $node_ref->set_colour(colour=>$colour_ref); +} + +# boolean: has a colour been set for a given node +sub node_has_colour { + my ($self, %args) = @_; + my $node_name = $args{node_name}; + return (exists $self->{node_colours_cache}{$node_name}); +} + +sub get_node_colour { + my ($self, %args) = @_; + my $node_name = $args{node_name}; + + return $self->{node_colours_cache}{$node_name}; +} + + # Colours the dendrogram lines with palette colours sub recolour_cluster_lines { my $self = shift; @@ -1162,9 +1201,11 @@ sub recolour_cluster_lines { die "unknown colouring mode $colour_mode\n"; } - $self->{node_colours_cache}{$node_name} = $colour_ref; - # also store the colour in the node for export - $node_ref->set_colour(colour=>$colour_ref); + $self->set_node_colour( + colour_ref => $colour_ref, + node_name => $node_name, + ); + # if colour is undef then we're clearing back to default $colour_ref ||= DEFAULT_LINE_COLOUR; @@ -1194,13 +1235,11 @@ sub recolour_cluster_lines { next NODE if exists $coloured_nodes{$node_name}; $self->{node_lines}->{$node_name}->set(fill_color_gdk => DEFAULT_LINE_COLOUR); - $self->{node_colours_cache}{$node_name} = DEFAULT_LINE_COLOUR; - - my $node_ref - = $self->get_tree_object()->get_node_ref(node => $node_name); - - $node_ref->set_colour(colour=>DEFAULT_LINE_COLOUR); + $self->set_node_colour( + colour_ref => DEFAULT_LINE_COLOUR, + node_name => $node_name, + ); } #print "[Dendrogram] Recoloured nodes\n"; } @@ -1221,8 +1260,13 @@ sub colour_line { my ($self, $node_ref, $colour_ref, $coloured_nodes) = @_; my $name = $node_ref->get_name; - $self->{node_colours_cache}{$name} = $colour_ref; - $node_ref->set_colour(colour => $colour_ref); + + + $self->set_node_colour ( + colour_ref => $colour_ref, + node_name => $name, + ); + my $line = $self->{node_lines}->{$name}; if ($line) { @@ -1238,8 +1282,11 @@ sub colour_lines { my ($self, $node_ref, $colour_ref, $coloured_nodes) = @_; my $name = $node_ref->get_name; - $self->{node_colours_cache}{$name} = $colour_ref; - $node_ref->set_colour(colour => $colour_ref); + + $self->set_node_colour ( + colour_ref => $colour_ref, + node_name => $name, + ); $self->{node_lines}->{$name}->set(fill_color_gdk => $colour_ref); $coloured_nodes->{ $name } = $node_ref; # mark as coloured @@ -1394,15 +1441,17 @@ sub _dump_line_colours { my ($self, $node_name) = @_; $node_name //= "120___"; - if (exists $self->{node_colours_cache}{$node_name}) { + if ( $self->node_has_colour( node_name=>$node_name ) ) { my $caller = ( caller(1) )[3]; my $caller_line = ( caller(1) )[2]; $caller =~ s/Biodiverse::GUI::Dendrogram:://; print "$node_name ($caller, $caller_line): "; + + my $colour_ref = $self->get_node_colour( node_name=>$node_name ); eval { - say $self->{node_colours_cache}{$node_name}->to_string, + say $colour_ref->to_string, ' ', - $self->{node_lines}{$node_name}->get_property ('fill-color-gdk')->to_string; + $colour_ref->get_property ('fill-color-gdk')->to_string; }; } } @@ -1708,7 +1757,7 @@ sub clear_highlights { # assume node has associated line my $line = $self->{node_lines}->{$node_name}; next if !$line; - my $colour_ref = $self->{node_colours_cache}{$node_name} || DEFAULT_LINE_COLOUR; + my $colour_ref = $self->get_node_colour() || DEFAULT_LINE_COLOUR; $line->set(fill_color_gdk => $colour_ref); } $self->{highlighted_lines} = undef; @@ -1735,7 +1784,12 @@ sub highlight_node { my $node_name = $node_ref->get_name; # avoid some unhandled exceptions when the mouse is hovering and the display is under construction if (my $line = $self->{node_lines}->{$node_name}) { - my $colour_ref = $node_colour || $self->{node_colours_cache}{$node_name} || DEFAULT_LINE_COLOUR; + + my $colour_ref = $node_colour + || $self->get_node_colour(node_name=>$node_name) + || DEFAULT_LINE_COLOUR; + + $line->set(fill_color_gdk => $colour_ref); #$line->set(width_pixels => HIGHLIGHT_WIDTH); $line->raise_to_top; @@ -1764,7 +1818,9 @@ sub highlight_path { # set path to highlighted colour while ($node_ref) { my $line = $self->{node_lines}->{$node_ref->get_name}; - my $colour_ref = $node_colour || $self->{node_colours_cache}{$node_ref->get_name} || DEFAULT_LINE_COLOUR; + my $colour_ref = $node_colour + || $self->get_node_colour(node_name=>$node_ref->get_name) + || DEFAULT_LINE_COLOUR; $line->set(fill_color_gdk => $colour_ref); #$line->set(width_pixels => HIGHLIGHT_WIDTH); $line->raise_to_top; @@ -2042,13 +2098,11 @@ sub clear { $self->zoom_fit; # reset any zooming so we don't wreck any new tree plots } + + $self->{node_lines} = {}; - $self->{node_colours_cache} = {}; - # need to clear the colours in each node - foreach my $node ($self->get_tree_object()->get_node_refs()) { - $node->set_colour(DEFAULT_LINE_COLOUR); - } + $self->clear_node_colours(); delete $self->{unscaled_width}; delete $self->{unscaled_height}; @@ -2305,7 +2359,7 @@ sub draw_node { my $length = $length_func->($node) * $length_scale; my $new_current_xpos = $current_xpos - $length; my $y = $node->get_value('_y') * $height_scale; - my $colour_ref = $self->{node_colours_cache}{$node_name} || DEFAULT_LINE_COLOUR; + my $colour_ref = $self->get_node_colour(node_name=>$node_name) || DEFAULT_LINE_COLOUR; # Draw our horizontal line my $line = $self->draw_line( From 879259e4914dfb0373004ddfab54b3e08a1c9e97 Mon Sep 17 00:00:00 2001 From: Luke Fitzpatrick Date: Fri, 23 Dec 2016 10:20:56 +1100 Subject: [PATCH 04/52] Quick fix to previous commit Updates #630 --- lib/Biodiverse/GUI/Dendrogram.pm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Biodiverse/GUI/Dendrogram.pm b/lib/Biodiverse/GUI/Dendrogram.pm index bcab3011c..abf364d44 100644 --- a/lib/Biodiverse/GUI/Dendrogram.pm +++ b/lib/Biodiverse/GUI/Dendrogram.pm @@ -1757,7 +1757,7 @@ sub clear_highlights { # assume node has associated line my $line = $self->{node_lines}->{$node_name}; next if !$line; - my $colour_ref = $self->get_node_colour() || DEFAULT_LINE_COLOUR; + my $colour_ref = $self->get_node_colour( node_name => $node_name ) || DEFAULT_LINE_COLOUR; $line->set(fill_color_gdk => $colour_ref); } $self->{highlighted_lines} = undef; From d80b2b14edbb6ce97e791eba0698be008b7434eb Mon Sep 17 00:00:00 2001 From: Luke Fitzpatrick Date: Fri, 23 Dec 2016 11:28:40 +1100 Subject: [PATCH 05/52] Minor bug fixes Updates #630 --- lib/Biodiverse/GUI/Dendrogram.pm | 9 ++++++--- lib/Biodiverse/GUI/Project.pm | 2 +- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/lib/Biodiverse/GUI/Dendrogram.pm b/lib/Biodiverse/GUI/Dendrogram.pm index abf364d44..dc2bbfc49 100644 --- a/lib/Biodiverse/GUI/Dendrogram.pm +++ b/lib/Biodiverse/GUI/Dendrogram.pm @@ -1123,9 +1123,12 @@ sub clear_node_colours { my $self = shift; $self->{node_colours_cache} = {}; - - foreach my $node ($self->get_tree_object()->get_node_refs()) { - $node->set_colour(DEFAULT_LINE_COLOUR); + + my $tree = $self->get_tree_object(); + if($tree) { + foreach my $node ($tree->get_node_refs()) { + $node->set_colour(colour => DEFAULT_LINE_COLOUR); + } } } diff --git a/lib/Biodiverse/GUI/Project.pm b/lib/Biodiverse/GUI/Project.pm index fdcbb58d4..49df52aef 100644 --- a/lib/Biodiverse/GUI/Project.pm +++ b/lib/Biodiverse/GUI/Project.pm @@ -597,7 +597,7 @@ sub add_phylogeny { my $phylogenies = shift; my $no_select = shift; - if (is_arrayref($phylogenies)) { + if (!is_arrayref($phylogenies)) { $phylogenies = [$phylogenies]; # make a scalar value an array } From b786fca3f5afdd76a51355502978857d648bc03f Mon Sep 17 00:00:00 2001 From: Luke Fitzpatrick Date: Fri, 23 Dec 2016 16:23:45 +1100 Subject: [PATCH 06/52] User defined colours in newick and nexus export. Yes/No dialog for colour export. Updates #630 --- lib/Biodiverse/GUI/Export.pm | 12 ++++--- lib/Biodiverse/GUI/Tabs/Tab.pm | 22 +++++++++--- lib/Biodiverse/Tree.pm | 3 +- lib/Biodiverse/TreeNode.pm | 62 +++++++++++++++++++++++++++++----- 4 files changed, 81 insertions(+), 18 deletions(-) diff --git a/lib/Biodiverse/GUI/Export.pm b/lib/Biodiverse/GUI/Export.pm index 3dc853225..571696154 100644 --- a/lib/Biodiverse/GUI/Export.pm +++ b/lib/Biodiverse/GUI/Export.pm @@ -21,10 +21,13 @@ use Biodiverse::GUI::GUIManager; use Biodiverse::GUI::ParametersTable; use Biodiverse::GUI::YesNoCancel; +use 5.010; sub Run { - my $object = shift; - my $selected_format = shift // ''; + my ($object, %args) = @_; + + my $selected_format = $args{selected_format}; + my $export_colours = $args{export_colours}; # sometimes we get called on non-objects, # eg if nothing is highlighted @@ -140,8 +143,9 @@ sub Run { eval { $object->export( - format => $selected_format, - file => $filename, + format => $selected_format, + file => $filename, + export_colours => $export_colours, @$params, ) }; diff --git a/lib/Biodiverse/GUI/Tabs/Tab.pm b/lib/Biodiverse/GUI/Tabs/Tab.pm index 4c231e302..5703e6d26 100644 --- a/lib/Biodiverse/GUI/Tabs/Tab.pm +++ b/lib/Biodiverse/GUI/Tabs/Tab.pm @@ -965,12 +965,24 @@ sub update_export_menu { sub do_export { my $args = shift; my $self = $args->[0]; - my @rest_of_args; - if (scalar @$args > 1) { - @rest_of_args = @$args[1..$#$args]; - } - Biodiverse::GUI::Export::Run($self->{output_ref}, @rest_of_args); + my %args_hash; + + my $selected_format = $args->[1] // ''; + + + # ask whether they want to include colours + # TODO: check if colours have actually been changed/selected + my $response = Biodiverse::GUI::YesNoCancel->run({ + header => "Export colours?", + hide_cancel => 1, + }); + + + $args_hash{ export_colours } = ($response eq 'yes'); + $args_hash{ selected_format } = $selected_format; + + Biodiverse::GUI::Export::Run($self->{output_ref}, %args_hash); } diff --git a/lib/Biodiverse/Tree.pm b/lib/Biodiverse/Tree.pm index f4122a095..53e24fab5 100644 --- a/lib/Biodiverse/Tree.pm +++ b/lib/Biodiverse/Tree.pm @@ -709,7 +709,7 @@ sub get_unique_name { sub export { my $self = shift; my %args = @_; - + croak "[TREE] Export: Argument 'file' not specified or null\n" if not defined $args{file} || length ($args{file}) == 0; @@ -1091,6 +1091,7 @@ sub export_tabular_tree { symmetric => 1, name => $name, use_internal_names => 1, + export_colours => $args{export_colours}, %args, ); diff --git a/lib/Biodiverse/TreeNode.pm b/lib/Biodiverse/TreeNode.pm index e22953649..5488d854f 100644 --- a/lib/Biodiverse/TreeNode.pm +++ b/lib/Biodiverse/TreeNode.pm @@ -1574,6 +1574,27 @@ sub get_colour { } } +sub get_colour_string { + my ($self, %args) = @_; + + my @long_format_string = split("", $self->get_colour()->to_string()); + + + # to_string() gives a colour in a 12 digit format e.g. 1F1F 4444 + # 0000. Seems like you can just take the first two digits of each + # colour block? + + my $short_format_string = "#"; + $short_format_string .= $long_format_string[1]; + $short_format_string .= $long_format_string[2]; + $short_format_string .= $long_format_string[5]; + $short_format_string .= $long_format_string[6]; + $short_format_string .= $long_format_string[9]; + $short_format_string .= $long_format_string[10]; + + return $short_format_string; +} + # convert the entire tree to a table structure, using a basestruct # object as an intermediate @@ -1598,7 +1619,7 @@ sub to_table { NAME => $treename, ); # may need to specify some other params - + my @header = qw /TREENAME NODE_NUMBER PARENTNODE LENGTHTOPARENT NAME COLOUR/; @@ -1897,26 +1918,51 @@ sub to_newick { # convert the tree to a newick format. Based on the NEXUS li if (defined $self->get_length) { $string .= ":" . $self->get_length; } + + # build the bootstrap block + my @bootstrap_items = (); if (defined $self->get_value($boot_name)) { - $string .= "[" . $self->get_value($boot_name) . "]"; + push @bootstrap_items, $self->get_value($boot_name); + } + if ($args{export_colours}) { + push @bootstrap_items, "&!color:".$self->get_colour_string(); + } + + if(scalar(@bootstrap_items) > 0) { + $string .= "["; + $string .= join(",", @bootstrap_items); + $string .= "]"; } - } - else { # terminal nodes - #$string .= "'" . $name . "'"; + # terminal nodes + else { $string .= $name; + if (defined $self->get_length) { $string .= ":" . $self->get_length; } - if (defined $self->get_value($boot_name)) { # state at nodes sometimes put as bootstrap values - $string .= "[" . $self->get_value($boot_name) . "]"; + + # build the bootstrap block + my @bootstrap_items = (); + if (defined $self->get_value($boot_name)) { + push @bootstrap_items, $self->get_value($boot_name); + } + if ($args{export_colours}) { + push @bootstrap_items, "&!color:".$self->get_colour_string(); + } + + if(scalar(@bootstrap_items) > 0) { + $string .= "["; + $string .= join(",", @bootstrap_items); + $string .= "]"; } - #$string .= ","; } return $string; } + + sub print { # prints out the tree (for debugging) my $self = shift; my $space = shift || $EMPTY_STRING; From 30ba5b407c8325c4cb0c1654ce602767e3cb392a Mon Sep 17 00:00:00 2001 From: Luke Fitzpatrick Date: Mon, 2 Jan 2017 10:40:26 +1100 Subject: [PATCH 07/52] Quick fix: default values in Export.pm Updates #630 --- lib/Biodiverse/GUI/Export.pm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/Biodiverse/GUI/Export.pm b/lib/Biodiverse/GUI/Export.pm index 571696154..12d24e3f5 100644 --- a/lib/Biodiverse/GUI/Export.pm +++ b/lib/Biodiverse/GUI/Export.pm @@ -25,9 +25,9 @@ use 5.010; sub Run { my ($object, %args) = @_; - - my $selected_format = $args{selected_format}; - my $export_colours = $args{export_colours}; + + my $selected_format = $args{selected_format} || ''; + my $export_colours = $args{export_colours} || 0; # sometimes we get called on non-objects, # eg if nothing is highlighted From ecaf53af99b606c36883ef9522fe0d6657d76a7f Mon Sep 17 00:00:00 2001 From: Luke Fitzpatrick Date: Mon, 2 Jan 2017 11:14:46 +1100 Subject: [PATCH 08/52] Extract method for cluster_colour_mode to aid colour export down the track Updates #630 --- lib/Biodiverse/GUI/Dendrogram.pm | 65 ++++++++++++++++++++------------ 1 file changed, 41 insertions(+), 24 deletions(-) diff --git a/lib/Biodiverse/GUI/Dendrogram.pm b/lib/Biodiverse/GUI/Dendrogram.pm index dc2bbfc49..6aebd0139 100644 --- a/lib/Biodiverse/GUI/Dendrogram.pm +++ b/lib/Biodiverse/GUI/Dendrogram.pm @@ -872,7 +872,7 @@ sub recolour_cluster_elements { my $parent_tab = $self->{parent_tab}; my $colour_for_undef = $parent_tab->get_undef_cell_colour; - my $cluster_colour_mode = $self->{cluster_colour_mode}; + my $cluster_colour_mode = $self->get_cluster_colour_mode(); my $colour_callback; if ($cluster_colour_mode eq 'palette') { @@ -941,7 +941,7 @@ sub recolour_cluster_elements { die "how did I get here?\n"; }; } - + die "Invalid cluster colour mode $cluster_colour_mode\n" if !defined $colour_callback; @@ -956,12 +956,13 @@ sub recolour_cluster_elements { sub in_multiselect_mode { my $self = shift; - return $self->{cluster_colour_mode} eq 'multiselect'; + my $mode = $self->get_cluster_colour_mode() // ''; + return $mode eq 'multiselect'; } sub in_multiselect_clear_mode { my $self = shift; - return ($self->{cluster_colour_mode} // '') eq 'multiselect' + return ($self->get_cluster_colour_mode() // '') eq 'multiselect' && eval {$self->{selector_toggle}->get_active}; } @@ -985,8 +986,10 @@ sub clear_multiselect_colours_from_plot { return if !$self->in_multiselect_mode; - # temp override, as multiselect colour mode has side effects - local $self->{cluster_colour_mode} = 'palette'; + # temp override, as multiselect colour mode has side effects + my $old_mode = $self->get_cluster_colour_mode(); + $self->set_cluster_colour_mode( value=>'palette' ); + #local $self->{cluster_colour_mode} = 'palette'; my $colour_store = $self->get_multiselect_colour_store; if (@$colour_store) { @@ -997,6 +1000,8 @@ sub clear_multiselect_colours_from_plot { $self->recolour_cluster_lines (\@coloured_nodes); } + $self->set_cluster_colour_mode( value=>$old_mode ); + return; } @@ -1127,7 +1132,9 @@ sub clear_node_colours { my $tree = $self->get_tree_object(); if($tree) { foreach my $node ($tree->get_node_refs()) { - $node->set_colour(colour => DEFAULT_LINE_COLOUR); + $self->set_node_colour( node_name => $node->get_name(), + colour_ref => DEFAULT_LINE_COLOUR, + ); } } } @@ -1174,7 +1181,7 @@ sub recolour_cluster_lines { my $list_index = $self->{analysis_list_index}; my $analysis_min = $self->{analysis_min}; my $analysis_max = $self->{analysis_max}; - my $colour_mode = $self->{cluster_colour_mode}; + my $colour_mode = $self->get_cluster_colour_mode(); foreach my $node_ref (@$cluster_nodes) { @@ -1187,7 +1194,8 @@ sub recolour_cluster_lines { $colour_ref = $self->get_current_multiselect_colour; if ($colour_ref || $self->in_multiselect_clear_mode) { $self->store_multiselect_colour ($node_name => $colour_ref); - } + } + } elsif ($colour_mode eq 'list-values') { @@ -1234,26 +1242,23 @@ sub recolour_cluster_lines { # uncolour previously coloured nodes that aren't being coloured this time NODE: foreach my $node_name (keys %{ $self->{recolour_nodes} }) { - next NODE if exists $coloured_nodes{$node_name}; $self->{node_lines}->{$node_name}->set(fill_color_gdk => DEFAULT_LINE_COLOUR); - $self->set_node_colour( colour_ref => DEFAULT_LINE_COLOUR, node_name => $node_name, - ); - } + ); + } + #print "[Dendrogram] Recoloured nodes\n"; } - $self->{recolour_nodes} = \%coloured_nodes; } #else { # my $href = $self->{recolour_nodes} //= {}; # @$href{keys %coloured_nodes} = values %coloured_nodes; #} - return; } @@ -1263,7 +1268,6 @@ sub colour_line { my ($self, $node_ref, $colour_ref, $coloured_nodes) = @_; my $name = $node_ref->get_name; - $self->set_node_colour ( colour_ref => $colour_ref, @@ -1459,6 +1463,18 @@ sub _dump_line_colours { } } +sub set_cluster_colour_mode { + my ($self, %args) = @_; + my $value = $args { value }; + $self->{cluster_colour_mode} = $value; +} + +sub get_cluster_colour_mode { + my ($self) = @_; + my $value = $self->{cluster_colour_mode}; + return $value; +} + # Change of list to display on the map # Can either be the Cluster "list" (coloured by node) or a spatial analysis list sub on_map_list_combo_changed { @@ -1484,7 +1500,7 @@ sub on_map_list_combo_changed { # Selected cluster-palette-colouring mode $self->clear_multiselect_colours_from_plot; - $self->{cluster_colour_mode} = 'palette'; + $self->set_cluster_colour_mode(value => 'palette'); $self->get_parent_tab->on_clusters_changed; @@ -1500,8 +1516,8 @@ sub on_map_list_combo_changed { $self->{graph_slider}->hide; } - $self->{cluster_colour_mode} = 'multiselect'; - + $self->set_cluster_colour_mode(value => 'multiselect'); + $self->set_num_clusters (1, 'no_recolour'); $self->replay_multiselect_store; @@ -1544,7 +1560,8 @@ sub on_combo_map_index_changed { $self->{analysis_max} = $minmax[1]; #print "[Dendrogram] Setting grid to use (spatial) analysis $analysis\n"; - $self->{cluster_colour_mode} = 'list-values'; + + $self->set_cluster_colour_mode(value => "list-values"); $self->recolour_cluster_elements(); $self->recolour_cluster_lines($self->get_processed_nodes); @@ -1572,7 +1589,7 @@ sub select_map_index { $self->{analysis_max} = $minmax[1]; #print "[Dendrogram] Setting grid to use (spatial) analysis $analysis\n"; - $self->{cluster_colour_mode} = 'list-values'; + $self->set_cluster_colour_mode(value => 'list-values'); $self->recolour_cluster_elements(); $self->recolour_cluster_lines($self->get_processed_nodes); @@ -1684,12 +1701,12 @@ sub replay_multiselect_store { # clear current colouring of elements # this is a mess - we should not have to switch to palette mode for this to work - $self->{cluster_colour_mode} = 'palette'; + $self->set_cluster_colour_mode( value=>'palette' ); $self->{element_to_cluster} = {}; $self->{recolour_nodes} = undef; $self->set_processed_nodes (undef); $self->recolour_cluster_elements; - $self->{cluster_colour_mode} = 'multiselect'; + $self->set_cluster_colour_mode( value=>'multiselect' ); # The next bit of code probably does too much # but getting it to work was not simple @@ -2055,7 +2072,7 @@ sub set_cluster { $self->{element_to_cluster} = {}; $self->{selected_list_index} = {}; - $self->{cluster_colour_mode} = 'palette'; + $self->set_cluster_colour_mode( value=>'palette' ); $self->{recolour_nodes} = undef; $self->set_processed_nodes (undef); From d2bae1afaff9b17f1d507d3a64d5f0b9734338b7 Mon Sep 17 00:00:00 2001 From: Luke Fitzpatrick Date: Mon, 2 Jan 2017 11:45:00 +1100 Subject: [PATCH 09/52] Make colour export dialog only appear when in multiselect mode Updates #630 --- lib/Biodiverse/GUI/Tabs/Tab.pm | 32 ++++++++++++++++++++++++-------- lib/Biodiverse/TreeNode.pm | 22 ++++++++++++++++------ 2 files changed, 40 insertions(+), 14 deletions(-) diff --git a/lib/Biodiverse/GUI/Tabs/Tab.pm b/lib/Biodiverse/GUI/Tabs/Tab.pm index 5703e6d26..5464c94b0 100644 --- a/lib/Biodiverse/GUI/Tabs/Tab.pm +++ b/lib/Biodiverse/GUI/Tabs/Tab.pm @@ -969,20 +969,36 @@ sub do_export { my %args_hash; my $selected_format = $args->[1] // ''; - - # ask whether they want to include colours - # TODO: check if colours have actually been changed/selected + $args_hash{ export_colours } + = $self->export_colours_dialog(output_ref => $self->{output_ref}); + + $args_hash{ selected_format } = $selected_format; + + + Biodiverse::GUI::Export::Run($self->{output_ref}, %args_hash); +} + + + +sub export_colours_dialog { + # ask whether they want to include colours + my ($self, %args) = @_; + my $output_ref = $args{output_ref}; + + # check if we are in multiselect mode first + if(!($self->{dendrogram}->get_cluster_colour_mode() eq 'multiselect')) { + return 0; + } + + # TODO: allow choice of colour format for compatibility with other + # packages. my $response = Biodiverse::GUI::YesNoCancel->run({ header => "Export colours?", hide_cancel => 1, }); - - $args_hash{ export_colours } = ($response eq 'yes'); - $args_hash{ selected_format } = $selected_format; - - Biodiverse::GUI::Export::Run($self->{output_ref}, %args_hash); + return $response eq 'yes'; } diff --git a/lib/Biodiverse/TreeNode.pm b/lib/Biodiverse/TreeNode.pm index 5488d854f..37403d436 100644 --- a/lib/Biodiverse/TreeNode.pm +++ b/lib/Biodiverse/TreeNode.pm @@ -1601,6 +1601,7 @@ sub get_colour_string { sub to_table { my $self = shift; my %args = @_; + my $export_colours = $args{export_colours}; my $treename = $args{name} || "TREE"; # assign unique ID numbers if not already done @@ -1620,8 +1621,11 @@ sub to_table { ); # may need to specify some other params - my @header = qw /TREENAME NODE_NUMBER PARENTNODE LENGTHTOPARENT NAME COLOUR/; - + my @header = qw /TREENAME NODE_NUMBER PARENTNODE LENGTHTOPARENT NAME/; + if( $export_colours ) { + push @header, "COLOUR"; + } + my ($parent_num, $taxon_name); @@ -1644,12 +1648,18 @@ sub to_table { my $number = $node->get_value ('NODE_NUMBER'); my %data; - my $colour = $node->get_colour()->to_string(); + my $colour = $node->get_colour_string(); # add to the basestruct object - @data{@header} = ($treename, $number, $parent_num, - $node->get_length || 0, $taxon_name, $colour); - + if( $export_colours ) { + @data{@header} = ($treename, $number, $parent_num, + $node->get_length || 0, $taxon_name, $colour); + } + else { + @data{@header} = ($treename, $number, $parent_num, + $node->get_length || 0, $taxon_name); + } + # get the additional list data if requested if (defined $args{sub_list} && $args{sub_list} !~ /(no list)/) { my $sub_list_ref = $node->get_list_ref (list => $args{sub_list}); From f2cbc448db492618b5f57ae371755381c4dde1ac Mon Sep 17 00:00:00 2001 From: Luke Fitzpatrick Date: Mon, 2 Jan 2017 11:58:42 +1100 Subject: [PATCH 10/52] Minor update to tests for exporting trees Updates #630 --- t/21-ReadNexus.t | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/t/21-ReadNexus.t b/t/21-ReadNexus.t index 9b900cc93..67de99361 100644 --- a/t/21-ReadNexus.t +++ b/t/21-ReadNexus.t @@ -279,7 +279,8 @@ sub test_tabular_tree_from_file { my $export_tree = $phylogeny_array->[0]; $result = eval { - $export_tree->export_tabular_tree(file => $exported_tabular_file); + $export_tree->export_tabular_tree(file => $exported_tabular_file, + export_colours => 1,); }; my $e = $EVAL_ERROR; diag $e if $e; From 7d935a5affce4c6a6eeec2357dd4932bed52e10a Mon Sep 17 00:00:00 2001 From: Luke Fitzpatrick Date: Wed, 18 Jan 2017 15:20:49 +1100 Subject: [PATCH 11/52] Add module to deal with boostrap blocks. Will eventually be added to each tree node, used initially to hold user defined colours. Updates #630 --- lib/Biodiverse/BootstrapBlock.pm | 83 +++++++++++++++++++++++++++ t/32-BootstrapBlock.t | 98 ++++++++++++++++++++++++++++++++ 2 files changed, 181 insertions(+) create mode 100644 lib/Biodiverse/BootstrapBlock.pm create mode 100644 t/32-BootstrapBlock.t diff --git a/lib/Biodiverse/BootstrapBlock.pm b/lib/Biodiverse/BootstrapBlock.pm new file mode 100644 index 000000000..99d547f7c --- /dev/null +++ b/lib/Biodiverse/BootstrapBlock.pm @@ -0,0 +1,83 @@ +package Biodiverse::BootstrapBlock; + +use strict; +use warnings; +use Carp; + +use Cpanel::JSON::XS; +use Data::Structure::Util qw( unbless ); + + +our $VERSION = '1.99_006'; + +sub new { + my $class = shift; + my $self = bless {}, $class; + return $self; +} + +# add or update a key:value pair to this object. +sub set_value { + my ($self, %args) = @_; + my $key = $args{ key }; + my $value = $args{ value }; + + $self->{$key} = $value; + + return $value; +} + +# given a key, get value. Will just return undef if the value hasn't +# been set. +sub get_value { + my ($self, %args) = @_; + my $key = $args{ key }; + + return $self->{$key}; +} + +# given a boostrap block as it was imported, populate this object. +# e.g. "[color:#ffffff,foo:bar]" etc. +sub decode_bootstrap_block { + my ($self, %args) = @_; + my $input = $args{ raw_bootstrap }; + + # will replace first and last use of [ and ] respectively. + $input =~ s/\[/\{/; + $input = scalar reverse $input; # cheeky + $input =~ s/\]/\}/; + $input = scalar reverse $input; + + + # TODO Make this deal with unquoted bootstrap blocks: currently fails. + + my $decoded_hash = decode_json $input; + + foreach my $key (keys %$decoded_hash) { + $self->set_value( key => $key, value => $decoded_hash->{$key} ); + } + +} + +# returns the values in this object formatted so they are ready to be +# written straight to a nexus/newick file. +# e.g. returns "["color":"#ffffff","foo":"bar"]" etc. +sub encode_bootstrap_block { + my ($self, %args) = @_; + + my $json_string = encode_json unbless($self); + + # the json encoder uses { and } to delimit data, but bootstrap + # block uses [ and ]. + + # will replace first and last use of { and } respectively. + $json_string =~ s/\{/\[/; + $json_string = scalar reverse $json_string; # cheeky + $json_string =~ s/\}/\]/; + $json_string = scalar reverse $json_string; + + return $json_string; +} + + +1; diff --git a/t/32-BootstrapBlock.t b/t/32-BootstrapBlock.t new file mode 100644 index 000000000..d323b2184 --- /dev/null +++ b/t/32-BootstrapBlock.t @@ -0,0 +1,98 @@ +#!/usr/bin/perl -w + +use strict; +use warnings; + +local $| = 1; + +use Test::Lib; +use Test::More; +use Test::Exception; + +use Biodiverse::BootstrapBlock; + +use Devel::Symdump; +my $obj = Devel::Symdump->rnew(__PACKAGE__); +my @test_subs = grep { $_ =~ 'main::test_' } $obj->functions(); + +exit main(); + +sub main { + foreach my $sub (@test_subs) { + no strict 'refs'; + $sub->(); + } + + done_testing(); + return 0; +} + +# testing basic set_value/get_value operations on the bootstrap block. +sub test_basic_operations { + my $bootstrap_block = Biodiverse::BootstrapBlock->new(); + + my %hash = ( "foo" => "bar", + "footwo" => "bartwo", + "foothree" => "barthree" ); + + + foreach my $key (keys %hash) { + $bootstrap_block->set_value( key => $key, value => $hash{$key} ); + } + + foreach my $key (keys %hash) { + is ( $bootstrap_block->get_value ( key => $key ), + $hash{ $key }, + "$key maps to $hash{$key}" + ); + } +} + +sub test_decode { + my @raw_inputs = ('["foo":"bar","footwo":"bartwo","foothree":"barthree"]'); + + + my %hash = ( "foo" => "bar", + "footwo" => "bartwo", + "foothree" => "barthree", + ); + + + my $bootstrap_block = Biodiverse::BootstrapBlock->new(); + + foreach my $input (@raw_inputs) { + $bootstrap_block->decode_bootstrap_block( raw_bootstrap => $input ); + + foreach my $key (keys %hash) { + is ( $bootstrap_block->get_value ( key => $key ), + $hash{ $key }, + "$key maps to $hash{$key}" + ); + } + } +} + + +sub test_encode { + my %hash = ( "foo" => "bar", + "footwo" => "bartwo", + "foothree" => "barthree", + ); + + my $bootstrap_block = Biodiverse::BootstrapBlock->new(); + + foreach my $key (keys %hash) { + $bootstrap_block->set_value( key => $key, value => $hash{ $key } ); + } + + my $actual = $bootstrap_block->encode_bootstrap_block(); + + + # we don't know what order the bootstrap block will be written, so + # just look for the pairs we know should be there. + foreach my $key (keys %hash) { + my $expected_string = "\"$key\":\"$hash{$key}\""; + ok (index($actual, $expected_string) != -1, + "Block contained $expected_string") + } +} From 6e9263c7ada1795628e95e9139d2395019e15466 Mon Sep 17 00:00:00 2001 From: Luke Fitzpatrick Date: Thu, 19 Jan 2017 12:49:45 +1100 Subject: [PATCH 12/52] Make colour exports work through the TreeNode bootstrap block. --- lib/Biodiverse/BootstrapBlock.pm | 15 +++-- lib/Biodiverse/TreeNode.pm | 101 +++++++++++-------------------- 2 files changed, 46 insertions(+), 70 deletions(-) diff --git a/lib/Biodiverse/BootstrapBlock.pm b/lib/Biodiverse/BootstrapBlock.pm index 99d547f7c..fc3f3f76c 100644 --- a/lib/Biodiverse/BootstrapBlock.pm +++ b/lib/Biodiverse/BootstrapBlock.pm @@ -21,21 +21,24 @@ sub set_value { my ($self, %args) = @_; my $key = $args{ key }; my $value = $args{ value }; - $self->{$key} = $value; - return $value; } -# given a key, get value. Will just return undef if the value hasn't -# been set. +# given a key, get value. returns undef if the value hasn't been set. sub get_value { my ($self, %args) = @_; - my $key = $args{ key }; - + my $key = $args{ key }; return $self->{$key}; } +# removes given key from the bootstrap block +sub delete_value { + my ($self, %args) = @_; + my $key = $args{ key }; + delete $self->{$key}; +} + # given a boostrap block as it was imported, populate this object. # e.g. "[color:#ffffff,foo:bar]" etc. sub decode_bootstrap_block { diff --git a/lib/Biodiverse/TreeNode.pm b/lib/Biodiverse/TreeNode.pm index 37403d436..812f89c4a 100644 --- a/lib/Biodiverse/TreeNode.pm +++ b/lib/Biodiverse/TreeNode.pm @@ -16,6 +16,7 @@ use List::MoreUtils qw /uniq/; use Gtk2; use Biodiverse::BaseStruct; +use Biodiverse::BootstrapBlock; use parent qw /Biodiverse::Common/; @@ -55,6 +56,8 @@ sub new { $self->add_children(%args); } + $self->set_value( bootstrap_block => Biodiverse::BootstrapBlock->new() ); + return $self; } @@ -1551,51 +1554,27 @@ sub number_nodes { return $number; } - # expects a Gdk::Color sub set_colour { my ($self, %args) = @_; - - $self->{NODE_VALUES}{COLOUR} = $args{colour}; -} - - -# returns a Gdk::Color -sub get_colour { - my ($self, %args) = @_; - - my $colour_ref = $self->{NODE_VALUES}{COLOUR}; - if($colour_ref) { - return $colour_ref; - } - else { - # choose black to be the default colour - return Gtk2::Gdk::Color->new(0,0,0); - } + my $colour_ref = $args{colour}; + return if (!$colour_ref); + + my $colour_string = $colour_ref->to_string(); + my $bootstrap_block = $self->get_value('bootstrap_block'); + $bootstrap_block->set_value( key => "color", value => $colour_string ); } sub get_colour_string { my ($self, %args) = @_; + + my $bootstrap_block = $self->get_value('bootstrap_block'); + my $colour_string = $bootstrap_block->get_value( key => "color" ) + // "$000000000000"; - my @long_format_string = split("", $self->get_colour()->to_string()); - - - # to_string() gives a colour in a 12 digit format e.g. 1F1F 4444 - # 0000. Seems like you can just take the first two digits of each - # colour block? - - my $short_format_string = "#"; - $short_format_string .= $long_format_string[1]; - $short_format_string .= $long_format_string[2]; - $short_format_string .= $long_format_string[5]; - $short_format_string .= $long_format_string[6]; - $short_format_string .= $long_format_string[9]; - $short_format_string .= $long_format_string[10]; - - return $short_format_string; + return $colour_string; } - # convert the entire tree to a table structure, using a basestruct # object as an intermediate sub to_table { @@ -1928,21 +1907,6 @@ sub to_newick { # convert the tree to a newick format. Based on the NEXUS li if (defined $self->get_length) { $string .= ":" . $self->get_length; } - - # build the bootstrap block - my @bootstrap_items = (); - if (defined $self->get_value($boot_name)) { - push @bootstrap_items, $self->get_value($boot_name); - } - if ($args{export_colours}) { - push @bootstrap_items, "&!color:".$self->get_colour_string(); - } - - if(scalar(@bootstrap_items) > 0) { - $string .= "["; - $string .= join(",", @bootstrap_items); - $string .= "]"; - } } # terminal nodes else { @@ -1951,23 +1915,32 @@ sub to_newick { # convert the tree to a newick format. Based on the NEXUS li if (defined $self->get_length) { $string .= ":" . $self->get_length; } + } - # build the bootstrap block - my @bootstrap_items = (); - if (defined $self->get_value($boot_name)) { - push @bootstrap_items, $self->get_value($boot_name); - } - if ($args{export_colours}) { - push @bootstrap_items, "&!color:".$self->get_colour_string(); - } - - if(scalar(@bootstrap_items) > 0) { - $string .= "["; - $string .= join(",", @bootstrap_items); - $string .= "]"; - } + # build the bootstrap block + # if they don't want colours, remove that from the block + my $bootstrap_block = $self->get_value("bootstrap_block"); + if (!$args{export_colours}) { + $bootstrap_block->delete_value(key => "color"); } + my $bootstrap_string = $bootstrap_block->encode_bootstrap_block(); + $string .= $bootstrap_string; + + # # build the bootstrap block + # my @bootstrap_items = (); + # if (defined $self->get_value($boot_name)) { + # push @bootstrap_items, $self->get_value($boot_name); + # } + # if ($args{export_colours}) { + # push @bootstrap_items, "&!color:".$self->get_colour_string(); + # } + # if(scalar(@bootstrap_items) > 0) { + # $string .= "["; + # $string .= join(",", @bootstrap_items); + # $string .= "]"; + # } + return $string; } From ff6ac044d631334296005cc7007c309b9bc98840 Mon Sep 17 00:00:00 2001 From: Luke Fitzpatrick Date: Thu, 19 Jan 2017 13:34:25 +1100 Subject: [PATCH 13/52] Add exclusions to bootstrap block. Updates #630 --- lib/Biodiverse/BootstrapBlock.pm | 9 +++++++-- lib/Biodiverse/TreeNode.pm | 15 +++++++++++---- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/lib/Biodiverse/BootstrapBlock.pm b/lib/Biodiverse/BootstrapBlock.pm index fc3f3f76c..16a57811e 100644 --- a/lib/Biodiverse/BootstrapBlock.pm +++ b/lib/Biodiverse/BootstrapBlock.pm @@ -65,10 +65,15 @@ sub decode_bootstrap_block { # returns the values in this object formatted so they are ready to be # written straight to a nexus/newick file. # e.g. returns "["color":"#ffffff","foo":"bar"]" etc. +# excluded_keys is an array ref of keys not to include in the block sub encode_bootstrap_block { - my ($self, %args) = @_; + my ($self, %args) = @_; + my @excluded_keys = @{$args{exclusions}}; + + my %boot_values = %{unbless($self)}; + delete $boot_values{@excluded_keys}; - my $json_string = encode_json unbless($self); + my $json_string = encode_json \%boot_values; # the json encoder uses { and } to delimit data, but bootstrap # block uses [ and ]. diff --git a/lib/Biodiverse/TreeNode.pm b/lib/Biodiverse/TreeNode.pm index 812f89c4a..47e9b3407 100644 --- a/lib/Biodiverse/TreeNode.pm +++ b/lib/Biodiverse/TreeNode.pm @@ -1918,12 +1918,19 @@ sub to_newick { # convert the tree to a newick format. Based on the NEXUS li } # build the bootstrap block + my @exclusions = (); + # if they don't want colours, remove that from the block - my $bootstrap_block = $self->get_value("bootstrap_block"); - if (!$args{export_colours}) { - $bootstrap_block->delete_value(key => "color"); + if(!$args{export_colours}) { + push @exclusions, "color"; } - my $bootstrap_string = $bootstrap_block->encode_bootstrap_block(); + + my $bootstrap_block = $self->get_value("bootstrap_block"); + say "bootstrap_block is $bootstrap_block"; + + my $bootstrap_string = + $bootstrap_block->encode_bootstrap_block(exclusions => \@exclusions); + $string .= $bootstrap_string; # # build the bootstrap block From e9ff77d3d053879e314c14beafbd23d7c4226be7 Mon Sep 17 00:00:00 2001 From: Luke Fitzpatrick Date: Thu, 19 Jan 2017 13:42:30 +1100 Subject: [PATCH 14/52] Put BootstrapBlock in the TreeNode space. Updates #630 --- lib/Biodiverse/TreeNode.pm | 7 ++++--- lib/Biodiverse/{ => TreeNode}/BootstrapBlock.pm | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) rename lib/Biodiverse/{ => TreeNode}/BootstrapBlock.pm (97%) diff --git a/lib/Biodiverse/TreeNode.pm b/lib/Biodiverse/TreeNode.pm index 47e9b3407..ddfdaa8e0 100644 --- a/lib/Biodiverse/TreeNode.pm +++ b/lib/Biodiverse/TreeNode.pm @@ -16,7 +16,7 @@ use List::MoreUtils qw /uniq/; use Gtk2; use Biodiverse::BaseStruct; -use Biodiverse::BootstrapBlock; +use Biodiverse::TreeNode::BootstrapBlock; use parent qw /Biodiverse::Common/; @@ -56,7 +56,9 @@ sub new { $self->add_children(%args); } - $self->set_value( bootstrap_block => Biodiverse::BootstrapBlock->new() ); + $self->set_value( + bootstrap_block => Biodiverse::TreeNode::BootstrapBlock->new(), + ); return $self; } @@ -1926,7 +1928,6 @@ sub to_newick { # convert the tree to a newick format. Based on the NEXUS li } my $bootstrap_block = $self->get_value("bootstrap_block"); - say "bootstrap_block is $bootstrap_block"; my $bootstrap_string = $bootstrap_block->encode_bootstrap_block(exclusions => \@exclusions); diff --git a/lib/Biodiverse/BootstrapBlock.pm b/lib/Biodiverse/TreeNode/BootstrapBlock.pm similarity index 97% rename from lib/Biodiverse/BootstrapBlock.pm rename to lib/Biodiverse/TreeNode/BootstrapBlock.pm index 16a57811e..30f04fe9f 100644 --- a/lib/Biodiverse/BootstrapBlock.pm +++ b/lib/Biodiverse/TreeNode/BootstrapBlock.pm @@ -1,4 +1,4 @@ -package Biodiverse::BootstrapBlock; +package Biodiverse::TreeNode::BootstrapBlock; use strict; use warnings; From 08dd1865b18aef084210e7849e4e349288e07de6 Mon Sep 17 00:00:00 2001 From: Luke Fitzpatrick Date: Thu, 19 Jan 2017 14:17:06 +1100 Subject: [PATCH 15/52] Change colour functions in TreeNode to just use generic bootstrap functions. Updates #630 --- lib/Biodiverse/GUI/Dendrogram.pm | 9 +++++++-- lib/Biodiverse/TreeNode.pm | 24 +++++++++++------------- 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/lib/Biodiverse/GUI/Dendrogram.pm b/lib/Biodiverse/GUI/Dendrogram.pm index 6aebd0139..1878a81da 100644 --- a/lib/Biodiverse/GUI/Dendrogram.pm +++ b/lib/Biodiverse/GUI/Dendrogram.pm @@ -1150,7 +1150,13 @@ sub set_node_colour { # also store it in the node for export purposes my $node_ref = $self->get_tree_object()->get_node_ref(node => $node_name); - $node_ref->set_colour(colour=>$colour_ref); + + + my $colour_string = $colour_ref ? $colour_ref->to_string() : "#000000"; + + $node_ref->set_bootstrap_value( key => "color", + value => $colour_string ); + } # boolean: has a colour been set for a given node @@ -1167,7 +1173,6 @@ sub get_node_colour { return $self->{node_colours_cache}{$node_name}; } - # Colours the dendrogram lines with palette colours sub recolour_cluster_lines { my $self = shift; diff --git a/lib/Biodiverse/TreeNode.pm b/lib/Biodiverse/TreeNode.pm index c1003fb2f..bf9d623fd 100644 --- a/lib/Biodiverse/TreeNode.pm +++ b/lib/Biodiverse/TreeNode.pm @@ -1568,25 +1568,23 @@ sub number_nodes { return $number; } -# expects a Gdk::Color -sub set_colour { + +sub set_bootstrap_value { my ($self, %args) = @_; - my $colour_ref = $args{colour}; - return if (!$colour_ref); - - my $colour_string = $colour_ref->to_string(); + my $key = $args{ key }; + my $value = $args{ value }; + my $bootstrap_block = $self->get_value('bootstrap_block'); - $bootstrap_block->set_value( key => "color", value => $colour_string ); + $bootstrap_block->set_value( key => $key, value => $value ); } -sub get_colour_string { + +sub get_bootstrap_value { my ($self, %args) = @_; - - my $bootstrap_block = $self->get_value('bootstrap_block'); - my $colour_string = $bootstrap_block->get_value( key => "color" ) - // "$000000000000"; + my $key = $args{ key }; - return $colour_string; + my $bootstrap_block = $self->get_value('bootstrap_block'); + return $bootstrap_block->get_value( key => $key ); } # convert the entire tree to a table structure, using a basestruct From 475916b8f788f2b0d7b8bf86363212e45613a389 Mon Sep 17 00:00:00 2001 From: Luke Fitzpatrick Date: Thu, 19 Jan 2017 14:33:19 +1100 Subject: [PATCH 16/52] Putting back in the proper colour format. Updates #630 --- lib/Biodiverse/GUI/Dendrogram.pm | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/lib/Biodiverse/GUI/Dendrogram.pm b/lib/Biodiverse/GUI/Dendrogram.pm index 1878a81da..5c84cca18 100644 --- a/lib/Biodiverse/GUI/Dendrogram.pm +++ b/lib/Biodiverse/GUI/Dendrogram.pm @@ -1152,11 +1152,12 @@ sub set_node_colour { = $self->get_tree_object()->get_node_ref(node => $node_name); - my $colour_string = $colour_ref ? $colour_ref->to_string() : "#000000"; + my $colour_string = + $colour_ref ? $self->get_proper_colour_format(colour_ref => $colour_ref) + : "#000000"; $node_ref->set_bootstrap_value( key => "color", value => $colour_string ); - } # boolean: has a colour been set for a given node @@ -1173,6 +1174,30 @@ sub get_node_colour { return $self->{node_colours_cache}{$node_name}; } +# convert from a colour_ref to whatever string format we want to use. +# not sure if this function should really be here but there's no +# general colour module? +sub get_proper_colour_format { + my ($self, %args) = @_; + my $colour_ref = $args{colour_ref}; + + # of the form # RRRR GGGG BBBB (without spaces) + my $long_form_string = $colour_ref->to_string(); + + # the way colours are selected in the dendrogram only allows for 2 + # hex digits for each color. Unless this is change, we don't lose + # precision by truncating two of the four digits for each colour + # that are stored in the colour ref. + my $proper_form_string = "#"; + my @wanted_indices = (1, 2, 5, 6, 9, 10); + foreach my $index (@wanted_indices) { + $proper_form_string .= substr($long_form_string, $index, 1); + } + + return $proper_form_string; +} + + # Colours the dendrogram lines with palette colours sub recolour_cluster_lines { my $self = shift; From 588341b20b41baf3c37432916464e680a4175794 Mon Sep 17 00:00:00 2001 From: Luke Fitzpatrick Date: Fri, 20 Jan 2017 10:01:37 +1100 Subject: [PATCH 17/52] Fix export fail when bootstrap block not defined, and silly 'unbless' error. Updates #630 --- lib/Biodiverse/TreeNode.pm | 23 +++++++++++++++++++---- lib/Biodiverse/TreeNode/BootstrapBlock.pm | 2 +- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/lib/Biodiverse/TreeNode.pm b/lib/Biodiverse/TreeNode.pm index bf9d623fd..ac270d959 100644 --- a/lib/Biodiverse/TreeNode.pm +++ b/lib/Biodiverse/TreeNode.pm @@ -1574,19 +1574,34 @@ sub set_bootstrap_value { my $key = $args{ key }; my $value = $args{ value }; - my $bootstrap_block = $self->get_value('bootstrap_block'); + my $bootstrap_block = $self->get_bootstrap_block(); $bootstrap_block->set_value( key => $key, value => $value ); } - sub get_bootstrap_value { my ($self, %args) = @_; my $key = $args{ key }; - my $bootstrap_block = $self->get_value('bootstrap_block'); + my $bootstrap_block = $self->get_bootstrap_block(); return $bootstrap_block->get_value( key => $key ); } +# isolate dealings with the underlying object hash to one function +sub get_bootstrap_block { + my ($self, %args) = @_; + my $bootstrap_block = $self->get_value('bootstrap_block'); + if(!$bootstrap_block) { + $bootstrap_block = Biodiverse::TreeNode::BootstrapBlock->new(); + + $self->set_value ( + bootstrap_block => $bootstrap_block, + ); + } + + return $bootstrap_block; +} + + # convert the entire tree to a table structure, using a basestruct # object as an intermediate sub to_table { @@ -1937,7 +1952,7 @@ sub to_newick { # convert the tree to a newick format. Based on the NEXUS li push @exclusions, "color"; } - my $bootstrap_block = $self->get_value("bootstrap_block"); + my $bootstrap_block = $self->get_bootstrap_block(); my $bootstrap_string = $bootstrap_block->encode_bootstrap_block(exclusions => \@exclusions); diff --git a/lib/Biodiverse/TreeNode/BootstrapBlock.pm b/lib/Biodiverse/TreeNode/BootstrapBlock.pm index 30f04fe9f..c486b2d57 100644 --- a/lib/Biodiverse/TreeNode/BootstrapBlock.pm +++ b/lib/Biodiverse/TreeNode/BootstrapBlock.pm @@ -70,7 +70,7 @@ sub encode_bootstrap_block { my ($self, %args) = @_; my @excluded_keys = @{$args{exclusions}}; - my %boot_values = %{unbless($self)}; + my %boot_values = %$self; delete $boot_values{@excluded_keys}; my $json_string = encode_json \%boot_values; From 188a1904d2ac2b31fb1eabfe0a730db85dc77084 Mon Sep 17 00:00:00 2001 From: Luke Fitzpatrick Date: Fri, 20 Jan 2017 10:24:09 +1100 Subject: [PATCH 18/52] Fix bootstrap block encode exclusions, add test. --- lib/Biodiverse/TreeNode/BootstrapBlock.pm | 12 +++++++---- t/32-BootstrapBlock.t | 26 ++++++++++++++++++----- 2 files changed, 29 insertions(+), 9 deletions(-) diff --git a/lib/Biodiverse/TreeNode/BootstrapBlock.pm b/lib/Biodiverse/TreeNode/BootstrapBlock.pm index c486b2d57..4a561bc6b 100644 --- a/lib/Biodiverse/TreeNode/BootstrapBlock.pm +++ b/lib/Biodiverse/TreeNode/BootstrapBlock.pm @@ -68,11 +68,15 @@ sub decode_bootstrap_block { # excluded_keys is an array ref of keys not to include in the block sub encode_bootstrap_block { my ($self, %args) = @_; - my @excluded_keys = @{$args{exclusions}}; - my %boot_values = %$self; - delete $boot_values{@excluded_keys}; - + + if($args{exclusions}) { + my @excluded_keys = @{$args{exclusions}}; + foreach my $exclusion (@excluded_keys) { + delete $boot_values{$exclusion}; + } + } + my $json_string = encode_json \%boot_values; # the json encoder uses { and } to delimit data, but bootstrap diff --git a/t/32-BootstrapBlock.t b/t/32-BootstrapBlock.t index d323b2184..9ba358ffd 100644 --- a/t/32-BootstrapBlock.t +++ b/t/32-BootstrapBlock.t @@ -9,7 +9,7 @@ use Test::Lib; use Test::More; use Test::Exception; -use Biodiverse::BootstrapBlock; +use Biodiverse::TreeNode::BootstrapBlock; use Devel::Symdump; my $obj = Devel::Symdump->rnew(__PACKAGE__); @@ -29,7 +29,7 @@ sub main { # testing basic set_value/get_value operations on the bootstrap block. sub test_basic_operations { - my $bootstrap_block = Biodiverse::BootstrapBlock->new(); + my $bootstrap_block = Biodiverse::TreeNode::BootstrapBlock->new(); my %hash = ( "foo" => "bar", "footwo" => "bartwo", @@ -58,7 +58,7 @@ sub test_decode { ); - my $bootstrap_block = Biodiverse::BootstrapBlock->new(); + my $bootstrap_block = Biodiverse::TreeNode::BootstrapBlock->new(); foreach my $input (@raw_inputs) { $bootstrap_block->decode_bootstrap_block( raw_bootstrap => $input ); @@ -79,7 +79,7 @@ sub test_encode { "foothree" => "barthree", ); - my $bootstrap_block = Biodiverse::BootstrapBlock->new(); + my $bootstrap_block = Biodiverse::TreeNode::BootstrapBlock->new(); foreach my $key (keys %hash) { $bootstrap_block->set_value( key => $key, value => $hash{ $key } ); @@ -87,7 +87,6 @@ sub test_encode { my $actual = $bootstrap_block->encode_bootstrap_block(); - # we don't know what order the bootstrap block will be written, so # just look for the pairs we know should be there. foreach my $key (keys %hash) { @@ -95,4 +94,21 @@ sub test_encode { ok (index($actual, $expected_string) != -1, "Block contained $expected_string") } + + # also test an encoding with exclusions + my @exclusions = ("foo"); + $actual = + $bootstrap_block->encode_bootstrap_block(exclusions => \@exclusions); + + delete $hash{"foo"}; + foreach my $key (keys %hash) { + my $expected_string = "\"$key\":\"$hash{$key}\""; + ok (index($actual, $expected_string) != -1, + "Block contained $expected_string") + } + ok (index($actual, '"foo":"bar"') == -1, + "Block didn't contain excluded item") + + } + From d9b6c9d3605ada2cc2de94a14485b7d1a21a4194 Mon Sep 17 00:00:00 2001 From: Luke Fitzpatrick Date: Fri, 20 Jan 2017 11:00:28 +1100 Subject: [PATCH 19/52] Make exclusions actually work. Updates #630 --- lib/Biodiverse/GUI/Export.pm | 5 +++-- lib/Biodiverse/TreeNode/BootstrapBlock.pm | 7 +++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/lib/Biodiverse/GUI/Export.pm b/lib/Biodiverse/GUI/Export.pm index 44e15bb46..8af84a892 100644 --- a/lib/Biodiverse/GUI/Export.pm +++ b/lib/Biodiverse/GUI/Export.pm @@ -115,8 +115,9 @@ sub Run { eval { $object->export( - format => $selected_format, - file => $filename, + format => $selected_format, + file => $filename, + export_colours => $export_colours, @$params, ) }; diff --git a/lib/Biodiverse/TreeNode/BootstrapBlock.pm b/lib/Biodiverse/TreeNode/BootstrapBlock.pm index 4a561bc6b..c77c19962 100644 --- a/lib/Biodiverse/TreeNode/BootstrapBlock.pm +++ b/lib/Biodiverse/TreeNode/BootstrapBlock.pm @@ -72,6 +72,7 @@ sub encode_bootstrap_block { if($args{exclusions}) { my @excluded_keys = @{$args{exclusions}}; + # print "Exclusions are: @excluded_keys\n"; foreach my $exclusion (@excluded_keys) { delete $boot_values{$exclusion}; } @@ -87,8 +88,10 @@ sub encode_bootstrap_block { $json_string = scalar reverse $json_string; # cheeky $json_string =~ s/\}/\]/; $json_string = scalar reverse $json_string; - - return $json_string; + + # if we have nothing in this block, we probably don't want to + # write out [], makes the nexus file ugly. + return $json_string eq "[]" ? "" : $json_string; } From 56ef3b57377bc7bc1106ff88a52ffa9d4a0f5e84 Mon Sep 17 00:00:00 2001 From: Luke Fitzpatrick Date: Fri, 20 Jan 2017 11:55:55 +1100 Subject: [PATCH 20/52] Skeleton for unquted bootstrap block import handling. Updates #630 --- lib/Biodiverse/TreeNode/BootstrapBlock.pm | 20 ++++++++++++++--- t/32-BootstrapBlock.t | 26 +++++++++++++++++++---- 2 files changed, 39 insertions(+), 7 deletions(-) diff --git a/lib/Biodiverse/TreeNode/BootstrapBlock.pm b/lib/Biodiverse/TreeNode/BootstrapBlock.pm index c77c19962..a8386b8b5 100644 --- a/lib/Biodiverse/TreeNode/BootstrapBlock.pm +++ b/lib/Biodiverse/TreeNode/BootstrapBlock.pm @@ -45,15 +45,16 @@ sub decode_bootstrap_block { my ($self, %args) = @_; my $input = $args{ raw_bootstrap }; + # fix up unquoted key/value pairs i.e. add quotes because the json + # decoder doesn't work without them. + $input = $self->fix_up_unquoted_bootstrap_block( block => $input ); + # will replace first and last use of [ and ] respectively. $input =~ s/\[/\{/; $input = scalar reverse $input; # cheeky $input =~ s/\]/\}/; $input = scalar reverse $input; - - # TODO Make this deal with unquoted bootstrap blocks: currently fails. - my $decoded_hash = decode_json $input; foreach my $key (keys %$decoded_hash) { @@ -95,4 +96,17 @@ sub encode_bootstrap_block { } + +# add quotes to unquoted bootstrap blocks +# e.g. [key:value,key2:value2] goes to ["key":"value","key2":"value2"] +sub fix_up_unquoted_bootstrap_block { + my ($self, %args) = @_; + my $block = $args{block}; + + # do some crazy regex here + + return $block; +} + + 1; diff --git a/t/32-BootstrapBlock.t b/t/32-BootstrapBlock.t index 9ba358ffd..ecc309f05 100644 --- a/t/32-BootstrapBlock.t +++ b/t/32-BootstrapBlock.t @@ -22,7 +22,6 @@ sub main { no strict 'refs'; $sub->(); } - done_testing(); return 0; } @@ -49,7 +48,7 @@ sub test_basic_operations { } sub test_decode { - my @raw_inputs = ('["foo":"bar","footwo":"bartwo","foothree":"barthree"]'); + my @raw_inputs = ('["foo":"bar",\'footwo\':"bartwo",foothree:barthree]'); my %hash = ( "foo" => "bar", @@ -97,7 +96,7 @@ sub test_encode { # also test an encoding with exclusions my @exclusions = ("foo"); - $actual = + $actual = $bootstrap_block->encode_bootstrap_block(exclusions => \@exclusions); delete $hash{"foo"}; @@ -108,7 +107,26 @@ sub test_encode { } ok (index($actual, '"foo":"bar"') == -1, "Block didn't contain excluded item") +} +sub test_fix_up_unquoted_bootstrap_block { + my $bootstrap_block = Biodiverse::TreeNode::BootstrapBlock->new(); + my %test_hash = ( + '[key:value,key2:value2]' => '["key":"value","key2":"value2"]', + '[key:value]' => '["key":"value"]', + '["key":"value"]' => '["key":"value"]', + '["key":"value",key2:value2,"key3":"value3"]' + => '["key":"value","key2":"value2","key3":"value3"]', + ); + + foreach my $key (keys %test_hash) { + my $result = + $bootstrap_block->fix_up_unquoted_bootstrap_block( block => $key); + + is ( $result, + $test_hash{$key}, + "$key processed correctly", + ); + } } - From 13b51702a6b3ac4ae31d9965ce51f8aae4142270 Mon Sep 17 00:00:00 2001 From: Luke Fitzpatrick Date: Fri, 20 Jan 2017 12:45:53 +1100 Subject: [PATCH 21/52] Make the BootstrapBlock decoder deal with unquoted key/value pairs. Updates #630 --- lib/Biodiverse/TreeNode.pm | 2 +- lib/Biodiverse/TreeNode/BootstrapBlock.pm | 19 ++++++++++++++++--- t/32-BootstrapBlock.t | 2 +- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/lib/Biodiverse/TreeNode.pm b/lib/Biodiverse/TreeNode.pm index ac270d959..9f39172d3 100644 --- a/lib/Biodiverse/TreeNode.pm +++ b/lib/Biodiverse/TreeNode.pm @@ -1654,7 +1654,7 @@ sub to_table { my $number = $node->get_value ('NODE_NUMBER'); my %data; - my $colour = $node->get_colour_string(); + my $colour = $node->get_bootstrap_value(key => "color"); # add to the basestruct object if( $export_colours ) { diff --git a/lib/Biodiverse/TreeNode/BootstrapBlock.pm b/lib/Biodiverse/TreeNode/BootstrapBlock.pm index a8386b8b5..0f4f59965 100644 --- a/lib/Biodiverse/TreeNode/BootstrapBlock.pm +++ b/lib/Biodiverse/TreeNode/BootstrapBlock.pm @@ -47,7 +47,9 @@ sub decode_bootstrap_block { # fix up unquoted key/value pairs i.e. add quotes because the json # decoder doesn't work without them. + print "Input going in $input\n"; $input = $self->fix_up_unquoted_bootstrap_block( block => $input ); + print "After fix up: $input\n"; # will replace first and last use of [ and ] respectively. $input =~ s/\[/\{/; @@ -97,14 +99,25 @@ sub encode_bootstrap_block { -# add quotes to unquoted bootstrap blocks +# add quotes to unquoted bootstrap blocks. Needed for the json decoder # e.g. [key:value,key2:value2] goes to ["key":"value","key2":"value2"] sub fix_up_unquoted_bootstrap_block { my ($self, %args) = @_; my $block = $args{block}; - # do some crazy regex here - + + # Basic idea is to find a block starting and ending with '[' or + # ','. Take what is inside this block, and find a 'key' and + # 'value' separated by a ':'. If these aren't already quoted, put + # quotes around them. We need to do this loop because the final + # comma of one block is the starting comma of the next block. + + my $old = ""; + while(!($old eq $block)) { + $old = $block; + # crazy regex here + $block =~ s/([\[,])([^\"]*?)\:([^\"]*?)([\],])/$1\"$2\":\"$3\"$4/; + } return $block; } diff --git a/t/32-BootstrapBlock.t b/t/32-BootstrapBlock.t index ecc309f05..5d871bb3e 100644 --- a/t/32-BootstrapBlock.t +++ b/t/32-BootstrapBlock.t @@ -48,7 +48,7 @@ sub test_basic_operations { } sub test_decode { - my @raw_inputs = ('["foo":"bar",\'footwo\':"bartwo",foothree:barthree]'); + my @raw_inputs = ('["foo":"bar","footwo":"bartwo",foothree:barthree]'); my %hash = ( "foo" => "bar", From 3ce3da50469954479b16ff73d897d1000e67a7c8 Mon Sep 17 00:00:00 2001 From: Luke Fitzpatrick Date: Fri, 20 Jan 2017 13:53:49 +1100 Subject: [PATCH 22/52] Hook up bootstrap decoding to nexus import. Updates #630 --- data/Example_tree_with_bootstrap.nex | 242 ++++++++++++++++++++++ lib/Biodiverse/TreeNode.pm | 12 +- lib/Biodiverse/TreeNode/BootstrapBlock.pm | 19 +- 3 files changed, 260 insertions(+), 13 deletions(-) create mode 100644 data/Example_tree_with_bootstrap.nex diff --git a/data/Example_tree_with_bootstrap.nex b/data/Example_tree_with_bootstrap.nex new file mode 100644 index 000000000..5368c9561 --- /dev/null +++ b/data/Example_tree_with_bootstrap.nex @@ -0,0 +1,242 @@ +#NEXUS +[ID: Example_site_data_Cluster1] +begin trees; + [Export of a Biodiverse::TreeNode tree using Biodiverse::TreeNode version 1.99_006] + Translate + 0 2650000:650000, + 1 61___, + 2 1950000:1350000, + 3 3550000:1550000, + 4 70___, + 5 3150000:550000, + 6 82___, + 7 73___, + 8 83___, + 9 3750000:2150000, + 10 3350000:950000, + 11 104___, + 12 3450000:1350000, + 13 2250000:1250000, + 14 29___, + 15 89___, + 16 3850000:1750000, + 17 96___, + 18 3250000:2150000, + 19 78___, + 20 36___, + 21 68___, + 22 62___, + 23 3150000:50000, + 24 2650000:850000, + 25 3950000:1750000, + 26 2750000:950000, + 27 2950000:250000, + 28 77___, + 29 14___, + 30 92___, + 31 3850000:1450000, + 32 117___, + 33 2850000:650000, + 34 97___, + 35 3450000:1050000, + 36 116___, + 37 3850000:1650000, + 38 30___, + 39 3750000:1450000, + 40 3250000:250000, + 41 3450000:1450000, + 42 91___, + 43 98___, + 44 3150000:350000, + 45 45___, + 46 88___, + 47 3650000:1550000, + 48 46___, + 49 3650000:1850000, + 50 3250000:3050000, + 51 3850000:1850000, + 52 23___, + 53 3450000:650000, + 54 2350000:1050000, + 55 3350000:2150000, + 56 38___, + 57 3550000:1450000, + 58 3350000:1250000, + 59 3750000:1950000, + 60 2550000:750000, + 61 3350000:750000, + 62 59___, + 63 33___, + 64 20___, + 65 113___, + 66 110___, + 67 3250000:150000, + 68 27___, + 69 2950000:650000, + 70 2550000:950000, + 71 48___, + 72 112___, + 73 3650000:1450000, + 74 99___, + 75 2050000:1350000, + 76 3550000:2250000, + 77 17___, + 78 64___, + 79 2950000:350000, + 80 1950000:1450000, + 81 2850000:750000, + 82 3250000:350000, + 83 2250000:950000, + 84 3350000:850000, + 85 3050000:750000, + 86 3150000:750000, + 87 84___, + 88 2350000:1250000, + 89 3550000:1050000, + 90 81___, + 91 3750000:1650000, + 92 42___, + 93 15___, + 94 39___, + 95 3650000:1750000, + 96 66___, + 97 3550000:950000, + 98 3450000:750000, + 99 3250000:850000, + 100 79___, + 101 2150000:1250000, + 102 80___, + 103 2550000:1050000, + 104 3050000:350000, + 105 101___, + 106 3750000:2050000, + 107 67___, + 108 2350000:1150000, + 109 3150000:2950000, + 110 2650000:950000, + 111 32___, + 112 2950000:50000, + 113 100___, + 114 35___, + 115 41___, + 116 2650000:750000, + 117 3550000:2150000, + 118 74___, + 119 55___, + 120 2950000:750000, + 121 49___, + 122 50___, + 123 37___, + 124 3750000:1850000, + 125 3450000:1550000, + 126 56___, + 127 72___, + 128 114___, + 129 3550000:1950000, + 130 26___, + 131 3650000:1950000, + 132 3150000:650000, + 133 3250000:450000, + 134 65___, + 135 3350000:2050000, + 136 3050000:250000, + 137 71___, + 138 3850000:1950000, + 139 58___, + 140 24___, + 141 105___, + 142 69___, + 143 75___, + 144 2150000:1150000, + 145 63___, + 146 3550000:1250000, + 147 44___, + 148 3650000:1150000, + 149 3850000:1550000, + 150 76___, + 151 3150000:150000, + 152 3250000:2950000, + 153 3450000:850000, + 154 22___, + 155 102___, + 156 2750000:850000, + 157 57___, + 158 3150000:250000, + 159 3450000:2050000, + 160 2450000:1250000, + 161 2250000:1050000, + 162 3250000:950000, + 163 3050000:650000, + 164 122___, + 165 54___, + 166 3750000:1350000, + 167 60___, + 168 3050000:50000, + 169 2550000:850000, + 170 107___, + 171 3350000:650000, + 172 3350000:1050000, + 173 3250000:650000, + 174 3650000:2050000, + 175 3350000:1350000, + 176 3050000:850000, + 177 106___, + 178 3450000:950000, + 179 3650000:1350000, + 180 2450000:1150000, + 181 123___, + 182 3050000:550000, + 183 2150000:1050000, + 184 2450000:950000, + 185 3250000:750000, + 186 119___, + 187 3350000:1150000, + 188 87___, + 189 31___, + 190 118___, + 191 3850000:1350000, + 192 43___, + 193 94___, + 194 2450000:1050000, + 195 3250000:2850000, + 196 3650000:1650000, + 197 121___, + 198 93___, + 199 3450000:1250000, + 200 111___, + 201 115___, + 202 3050000:150000, + 203 90___, + 204 85___, + 205 3550000:1150000, + 206 124___, + 207 40___, + 208 109___, + 209 47___, + 210 3750000:1550000, + 211 25___, + 212 3750000:1750000, + 213 2350000:950000, + 214 3450000:2150000, + 215 103___, + 216 2750000:750000, + 217 86___, + 218 120___, + 219 3150000:850000, + 220 51___, + 221 2750000:650000, + 222 108___, + 223 2050000:1250000, + 224 3650000:1250000, + 225 125___, + 226 3450000:1150000, + 227 95___, + 228 3550000:2050000, + 229 3750000:1250000, + 230 52___, + 231 3650000:2350000, + 232 53___ + ; + Tree Example_site_data_Cluster1 = ((((((((((((((33:0["color":"#e41a1c"],202:0["color":"#e41a1c"],104:0["color":"#e41a1c"],23:0["color":"#e41a1c"],67:0["color":"#e41a1c"])68:0.142857142857143["color":"#e41a1c"],44:0.142857142857143["color":"#e41a1c"])121:0.0793650793650793["color":"#e41a1c"],(168:0["color":"#e41a1c"],133:0["color":"#e41a1c"])140:0.222222222222222["color":"#e41a1c"])22:0.0176587301587302["color":"#e41a1c"],((151:0["color":"#e41a1c"],158:0["color":"#e41a1c"])154:0.142857142857143["color":"#e41a1c"],40:0.142857142857143["color":"#e41a1c"])209:0.0970238095238095["color":"#e41a1c"])145:0.0873917748917748["color":"#e41a1c"],82:0.327272727272727["color":"#e41a1c"])127:0.0510341510341511["color":"#e41a1c"],((221:0["color":"#e41a1c"],182:0["color":"#e41a1c"])123:0.2["color":"#e41a1c"],0:0.2["color":"#e41a1c"])126:0.178306878306878["color":"#e41a1c"])188:0.134040897374231["color":"#e41a1c"],(((((69:0.0909090909090909["color":"#e41a1c"],163:0.0909090909090909["color":"#e41a1c"])92:0.107808857808858["color":"#e41a1c"],85:0.198717948717949["color":"#e41a1c"])165:0.06996891996892["color":"#e41a1c"],(81:0["color":"#e41a1c"],120:0["color":"#e41a1c"],132:0["color":"#e41a1c"])115:0.268686868686869["color":"#e41a1c"])142:0.132616280778046["color":"#e41a1c"],(61:0.333333333333333["color":"#e41a1c"],98:0.333333333333333["color":"#e41a1c"])90:0.0679698161315808["color":"#e41a1c"])15:0.0925918444300797["color":"#e41a1c"],216:0.493894993894994["color":"#e41a1c"])74:0.0184527817861152["color":"#e41a1c"])215:0.113719108823275["color":"#e41a1c"],((((173:0.142857142857143["color":"#e41a1c"],171:0.142857142857143["color":"#e41a1c"])122:0.123809523809524["color":"#e41a1c"],53:0.266666666666667["color":"#e41a1c"])21:0.191005291005291["color":"#e41a1c"],(37:0.333333333333333["color":"#e41a1c"],51:0.333333333333333["color":"#e41a1c"])6:0.124338624338624["color":"#e41a1c"])34:0.100708994708995["color":"#e41a1c"],((103:0["color":"#e41a1c"],79:0["color":"#e41a1c"],112:0["color":"#e41a1c"],5:0["color":"#e41a1c"])38:0.5["color":"#e41a1c"],91:0.5["color":"#e41a1c"])105:0.0583809523809524["color":"#e41a1c"])177:0.0676859321234321["color":"#e41a1c"])66:0.0524022024157472["color":"#e41a1c"],(((((178:0.125["color":"#e41a1c"],89:0.125["color":"#e41a1c"])48:0.075["color":"#e41a1c"],205:0.2["color":"#e41a1c"])157:0.229292929292929["color":"#e41a1c"],(97:0.25["color":"#e41a1c"],148:0.25["color":"#e41a1c"])134:0.179292929292929["color":"#e41a1c"])198:0.0886380286380286["color":"#e41a1c"],(226:0.25["color":"#e41a1c"],153:0.25["color":"#e41a1c"])96:0.267930957930958["color":"#e41a1c"])11:0.133290043290043["color":"#e41a1c"],210:0.651221001221001["color":"#e41a1c"])72:0.0272480856991304["color":"#e41a1c"])128:0.0792086850433544["color":"#e41a1c"],(60:0["color":"#e41a1c"],116:0["color":"#e41a1c"])211:0.757677771963486["color":"#e41a1c"])32:0.102693398472619["color":"#e41a1c"],(((((((213:0["color":"#377eb8"],184:0["color":"#377eb8"])207:0.111111111111111["color":"#377eb8"],83:0.111111111111111["color":"#377eb8"])192:0.133597883597884["color":"#377eb8"],((180:0.142857142857143["color":"#377eb8"],70:0.142857142857143["color":"#377eb8"])220:0.0535714285714285["color":"#377eb8"],194:0.196428571428571["color":"#377eb8"])232:0.0482804232804233["color":"#377eb8"])78:0.0822751322751323["color":"#377eb8"],(144:0["color":"#377eb8"],160:0["color":"#377eb8"],169:0["color":"#377eb8"],24:0["color":"#377eb8"],110:0["color":"#377eb8"])64:0.326984126984127["color":"#377eb8"])137:0.102886002886003["color":"#377eb8"],(54:0.333333333333333["color":"#377eb8"],156:0.333333333333333["color":"#377eb8"])28:0.0965367965367966["color":"#377eb8"])193:0.0812654012654013["color":"#377eb8"],((161:0["color":"#377eb8"],88:0["color":"#377eb8"],26:0["color":"#377eb8"])14:0.333333333333333["color":"#377eb8"],(223:0["color":"#377eb8"],101:0["color":"#377eb8"])63:0.333333333333333["color":"#377eb8"])7:0.177802197802198["color":"#377eb8"])155:0.146800976800977["color":"#377eb8"],((183:0["color":"#377eb8"],108:0["color":"#377eb8"])114:0.333333333333333["color":"#377eb8"],13:0.333333333333333["color":"#377eb8"])118:0.324603174603175["color":"#377eb8"])65:0.202434662499598["color":"#377eb8"])218:0.0453247433367313["color":"#000000"],(((176:0.2["color":"#4daf4a"],99:0.2["color":"#4daf4a"])119:0.208333333333333["color":"#4daf4a"],(86:0.2["color":"#4daf4a"],219:0.2["color":"#4daf4a"])167:0.208333333333333["color":"#4daf4a"])42:0.3["color":"#4daf4a"],(27:0["color":"#4daf4a"],136:0["color":"#4daf4a"])189:0.708333333333333["color":"#4daf4a"])36:0.197362580439503["color":"#4daf4a"])197:0.0534506405199558["color":"#000000"],(((((((55:0["color":"#984ea3"],159:0["color":"#984ea3"])111:0.266666666666667["color":"#984ea3"],(228:0.142857142857143["color":"#984ea3"],76:0.142857142857143["color":"#984ea3"])71:0.123809523809524["color":"#984ea3"])107:0.175["color":"#984ea3"],(109:0["color":"#984ea3"],18:0["color":"#984ea3"])130:0.441666666666667["color":"#984ea3"])17:0.186111111111111["color":"#984ea3"],(195:0["color":"#984ea3"],135:0["color":"#984ea3"],214:0["color":"#984ea3"],117:0["color":"#984ea3"])20:0.627777777777778["color":"#984ea3"])200:0.0645396825396826["color":"#984ea3"],((((131:0.111111111111111["color":"#984ea3"],174:0.111111111111111["color":"#984ea3"])147:0.0444444444444444["color":"#984ea3"],106:0.155555555555556["color":"#984ea3"])230:0.222222222222222["color":"#984ea3"],59:0.377777777777778["color":"#984ea3"])217:0.0269841269841271["color":"#984ea3"],49:0.404761904761905["color":"#984ea3"])203:0.287555555555556["color":"#984ea3"])201:0.228139833711262["color":"#984ea3"],(((((124:0["color":"#984ea3"],191:0["color":"#984ea3"],25:0["color":"#984ea3"])93:0.333333333333333["color":"#984ea3"],138:0.333333333333333["color":"#984ea3"])102:0.1625["color":"#984ea3"],(229:0.333333333333333["color":"#984ea3"],166:0.333333333333333["color":"#984ea3"])19:0.1625["color":"#984ea3"])113:0.0686838624338624["color":"#984ea3"],(((31:0.111111111111111["color":"#984ea3"],16:0.111111111111111["color":"#984ea3"])45:0.180555555555556["color":"#984ea3"],149:0.291666666666667["color":"#984ea3"])4:0.0734126984126984["color":"#984ea3"],224:0.365079365079365["color":"#984ea3"])87:0.199437830687831["color":"#984ea3"])170:0.236554232804233["color":"#984ea3"],(((50:0["color":"#984ea3"],231:0["color":"#984ea3"])56:0.333333333333333["color":"#984ea3"],152:0.333333333333333["color":"#984ea3"])150:0.0555555555555556["color":"#984ea3"],9:0.388888888888889["color":"#984ea3"])46:0.41218253968254["color":"#984ea3"])186:0.119385865457294["color":"#984ea3"])164:0.0232454352343514["color":"#984ea3"],((((((((172:0["color":"#ff7f00"],187:0["color":"#ff7f00"],58:0["color":"#ff7f00"],175:0["color":"#ff7f00"],12:0["color":"#ff7f00"],41:0["color":"#ff7f00"],125:0["color":"#ff7f00"],3:0["color":"#ff7f00"])94:0.333333333333333["color":"#ff7f00"],212:0.333333333333333["color":"#ff7f00"])143:0.0185185185185185["color":"#ff7f00"],57:0.351851851851852["color":"#ff7f00"])8:0.0148148148148148["color":"#ff7f00"],(199:0["color":"#ff7f00"],146:0["color":"#ff7f00"])77:0.366666666666667["color":"#ff7f00"])204:0.0944444444444444["color":"#ff7f00"],(196:0.2["color":"#ff7f00"],95:0.2["color":"#ff7f00"])62:0.261111111111111["color":"#ff7f00"])43:0.0865079365079366["color":"#ff7f00"],129:0.547619047619048["color":"#ff7f00"])141:0.0258518518518518["color":"#ff7f00"],(((73:0["color":"#ff7f00"],47:0["color":"#ff7f00"])52:0.2["color":"#ff7f00"],35:0.2["color":"#ff7f00"])139:0.22989417989418["color":"#ff7f00"],(179:0.2["color":"#ff7f00"],39:0.2["color":"#ff7f00"])1:0.22989417989418["color":"#ff7f00"])227:0.14357671957672["color":"#ff7f00"])222:0.216778087653088["color":"#ff7f00"],(((162:0.333333333333333["color":"#ff7f00"],10:0.333333333333333["color":"#ff7f00"])100:0.0833333333333334["color":"#ff7f00"],84:0.416666666666667["color":"#ff7f00"])30:0.203703703703704["color":"#ff7f00"],185:0.62037037037037["color":"#ff7f00"])208:0.169878616753617["color":"#ff7f00"])190:0.153453742139087["color":"#ff7f00"])181:0.0154438250297185["color":"#000000"])206:0.022036241406132["color":"#000000"],(2:0["color":"#ffff33"],80:0["color":"#ffff33"],75:0["color":"#ffff33"])29:0.981182795698925["color":"#ffff33"])225:0["color":"#000000"]; +end; + diff --git a/lib/Biodiverse/TreeNode.pm b/lib/Biodiverse/TreeNode.pm index 9f39172d3..38023cc60 100644 --- a/lib/Biodiverse/TreeNode.pm +++ b/lib/Biodiverse/TreeNode.pm @@ -56,9 +56,14 @@ sub new { $self->add_children(%args); } - $self->set_value( - bootstrap_block => Biodiverse::TreeNode::BootstrapBlock->new(), - ); + if (exists $args{boot}) { + #say "We found the boot arg, it is $args{boot}"; + my $bootstrap_block = Biodiverse::TreeNode::BootstrapBlock->new(); + $bootstrap_block->decode_bootstrap_block(raw_bootstrap => $args{boot}); + $self->set_value( + bootstrap_block => $bootstrap_block, + ); + } return $self; } @@ -1949,6 +1954,7 @@ sub to_newick { # convert the tree to a newick format. Based on the NEXUS li # if they don't want colours, remove that from the block if(!$args{export_colours}) { + say "EXCLUDING COLOUR"; push @exclusions, "color"; } diff --git a/lib/Biodiverse/TreeNode/BootstrapBlock.pm b/lib/Biodiverse/TreeNode/BootstrapBlock.pm index 0f4f59965..2af99b01e 100644 --- a/lib/Biodiverse/TreeNode/BootstrapBlock.pm +++ b/lib/Biodiverse/TreeNode/BootstrapBlock.pm @@ -45,22 +45,21 @@ sub decode_bootstrap_block { my ($self, %args) = @_; my $input = $args{ raw_bootstrap }; + # get rid of leading and trailing square brackets + $input =~ s/^\[//; + $input =~ s/\[$//; + + $input = "{".$input."}"; + # fix up unquoted key/value pairs i.e. add quotes because the json # decoder doesn't work without them. - print "Input going in $input\n"; $input = $self->fix_up_unquoted_bootstrap_block( block => $input ); - print "After fix up: $input\n"; - - # will replace first and last use of [ and ] respectively. - $input =~ s/\[/\{/; - $input = scalar reverse $input; # cheeky - $input =~ s/\]/\}/; - $input = scalar reverse $input; my $decoded_hash = decode_json $input; foreach my $key (keys %$decoded_hash) { $self->set_value( key => $key, value => $decoded_hash->{$key} ); + #print "Setting $key to be $decoded_hash->{$key}\n"; } } @@ -106,7 +105,7 @@ sub fix_up_unquoted_bootstrap_block { my $block = $args{block}; - # Basic idea is to find a block starting and ending with '[' or + # Basic idea is to find a block starting and ending with '{' or # ','. Take what is inside this block, and find a 'key' and # 'value' separated by a ':'. If these aren't already quoted, put # quotes around them. We need to do this loop because the final @@ -116,7 +115,7 @@ sub fix_up_unquoted_bootstrap_block { while(!($old eq $block)) { $old = $block; # crazy regex here - $block =~ s/([\[,])([^\"]*?)\:([^\"]*?)([\],])/$1\"$2\":\"$3\"$4/; + $block =~ s/([\{,])([^\"]*?)\:([^\"]*?)([\},])/$1\"$2\":\"$3\"$4/; } return $block; } From 50b7f151c80426913fc63d4276500e2836612ca3 Mon Sep 17 00:00:00 2001 From: Luke Fitzpatrick Date: Fri, 20 Jan 2017 14:15:20 +1100 Subject: [PATCH 23/52] Fiddly changes to make bootstrap colour export work. Updates #630 --- lib/Biodiverse/GUI/Export.pm | 4 ++-- lib/Biodiverse/GUI/Tabs/Tab.pm | 4 ++-- lib/Biodiverse/TreeNode.pm | 24 ++++++------------------ 3 files changed, 10 insertions(+), 22 deletions(-) diff --git a/lib/Biodiverse/GUI/Export.pm b/lib/Biodiverse/GUI/Export.pm index 8af84a892..64a478a4c 100644 --- a/lib/Biodiverse/GUI/Export.pm +++ b/lib/Biodiverse/GUI/Export.pm @@ -27,8 +27,8 @@ sub Run { my ($object, %args) = @_; my $selected_format = $args{selected_format} || ''; - my $export_colours = $args{export_colours} || 0; - + my $export_colours = $args{export_colours} || 1; + # sometimes we get called on non-objects, # eg if nothing is highlighted return if ! defined $object; diff --git a/lib/Biodiverse/GUI/Tabs/Tab.pm b/lib/Biodiverse/GUI/Tabs/Tab.pm index 5464c94b0..60661a6b2 100644 --- a/lib/Biodiverse/GUI/Tabs/Tab.pm +++ b/lib/Biodiverse/GUI/Tabs/Tab.pm @@ -997,8 +997,8 @@ sub export_colours_dialog { header => "Export colours?", hide_cancel => 1, }); - - return $response eq 'yes'; + + return $response eq 'yes' ? 1 : 0; } diff --git a/lib/Biodiverse/TreeNode.pm b/lib/Biodiverse/TreeNode.pm index 38023cc60..14e42a665 100644 --- a/lib/Biodiverse/TreeNode.pm +++ b/lib/Biodiverse/TreeNode.pm @@ -1952,9 +1952,12 @@ sub to_newick { # convert the tree to a newick format. Based on the NEXUS li # build the bootstrap block my @exclusions = (); - # if they don't want colours, remove that from the block - if(!$args{export_colours}) { - say "EXCLUDING COLOUR"; + # if they don't want colours, remove that from the block Don't + # change this to if($args{export_colours}) because we want 'undef' + # to result in including the colours. Should probably reimplement + # this as an array of bootstrap block exclusions if there are more + # bootstrap block items that get used. + if($args{export_colours} == 0) { push @exclusions, "color"; } @@ -1964,21 +1967,6 @@ sub to_newick { # convert the tree to a newick format. Based on the NEXUS li $bootstrap_block->encode_bootstrap_block(exclusions => \@exclusions); $string .= $bootstrap_string; - - # # build the bootstrap block - # my @bootstrap_items = (); - # if (defined $self->get_value($boot_name)) { - # push @bootstrap_items, $self->get_value($boot_name); - # } - # if ($args{export_colours}) { - # push @bootstrap_items, "&!color:".$self->get_colour_string(); - # } - - # if(scalar(@bootstrap_items) > 0) { - # $string .= "["; - # $string .= join(",", @bootstrap_items); - # $string .= "]"; - # } return $string; } From 798c089296ac4d70dd8a1d938b4f26fc55ccacf3 Mon Sep 17 00:00:00 2001 From: Luke Fitzpatrick Date: Fri, 20 Jan 2017 14:34:24 +1100 Subject: [PATCH 24/52] Make the tests pass Updates #630 --- lib/Biodiverse/TreeNode.pm | 2 +- lib/Biodiverse/TreeNode/BootstrapBlock.pm | 9 +++++---- t/32-BootstrapBlock.t | 12 ++++++------ 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/lib/Biodiverse/TreeNode.pm b/lib/Biodiverse/TreeNode.pm index 14e42a665..a87f67f26 100644 --- a/lib/Biodiverse/TreeNode.pm +++ b/lib/Biodiverse/TreeNode.pm @@ -1957,7 +1957,7 @@ sub to_newick { # convert the tree to a newick format. Based on the NEXUS li # to result in including the colours. Should probably reimplement # this as an array of bootstrap block exclusions if there are more # bootstrap block items that get used. - if($args{export_colours} == 0) { + if($args{export_colours} && $args{export_colours} == 0) { push @exclusions, "color"; } diff --git a/lib/Biodiverse/TreeNode/BootstrapBlock.pm b/lib/Biodiverse/TreeNode/BootstrapBlock.pm index 2af99b01e..2f9bd087e 100644 --- a/lib/Biodiverse/TreeNode/BootstrapBlock.pm +++ b/lib/Biodiverse/TreeNode/BootstrapBlock.pm @@ -40,11 +40,13 @@ sub delete_value { } # given a boostrap block as it was imported, populate this object. -# e.g. "[color:#ffffff,foo:bar]" etc. +# e.g. "color:#ffffff,foo:bar" etc. sub decode_bootstrap_block { my ($self, %args) = @_; my $input = $args{ raw_bootstrap }; + return if !$input; + # get rid of leading and trailing square brackets $input =~ s/^\[//; $input =~ s/\[$//; @@ -98,13 +100,12 @@ sub encode_bootstrap_block { -# add quotes to unquoted bootstrap blocks. Needed for the json decoder -# e.g. [key:value,key2:value2] goes to ["key":"value","key2":"value2"] +# add quotes to unquoted json blocks. Needed for the json decoder +# e.g. {key:value,key2:value2} goes to {"key":"value","key2":"value2"} sub fix_up_unquoted_bootstrap_block { my ($self, %args) = @_; my $block = $args{block}; - # Basic idea is to find a block starting and ending with '{' or # ','. Take what is inside this block, and find a 'key' and # 'value' separated by a ':'. If these aren't already quoted, put diff --git a/t/32-BootstrapBlock.t b/t/32-BootstrapBlock.t index 5d871bb3e..4b11d6285 100644 --- a/t/32-BootstrapBlock.t +++ b/t/32-BootstrapBlock.t @@ -48,7 +48,7 @@ sub test_basic_operations { } sub test_decode { - my @raw_inputs = ('["foo":"bar","footwo":"bartwo",foothree:barthree]'); + my @raw_inputs = ('"foo":"bar","footwo":"bartwo",foothree:barthree'); my %hash = ( "foo" => "bar", @@ -113,11 +113,11 @@ sub test_encode { sub test_fix_up_unquoted_bootstrap_block { my $bootstrap_block = Biodiverse::TreeNode::BootstrapBlock->new(); my %test_hash = ( - '[key:value,key2:value2]' => '["key":"value","key2":"value2"]', - '[key:value]' => '["key":"value"]', - '["key":"value"]' => '["key":"value"]', - '["key":"value",key2:value2,"key3":"value3"]' - => '["key":"value","key2":"value2","key3":"value3"]', + '{key:value,key2:value2}' => '{"key":"value","key2":"value2"}', + '{key:value}' => '{"key":"value"}', + '{"key":"value"}' => '{"key":"value"}', + '{"key":"value",key2:value2,"key3":"value3"}' + => '{"key":"value","key2":"value2","key3":"value3"}', ); foreach my $key (keys %test_hash) { From 176e3d9e2d9b7c851e8e6948eb04f02a5a06763d Mon Sep 17 00:00:00 2001 From: Luke Fitzpatrick Date: Fri, 20 Jan 2017 15:01:30 +1100 Subject: [PATCH 25/52] Roundtrip test for bootstrap import/export. Updates #630 --- t/13-Tree.t | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/t/13-Tree.t b/t/13-Tree.t index e5d93170d..700a01a08 100644 --- a/t/13-Tree.t +++ b/t/13-Tree.t @@ -493,10 +493,10 @@ sub test_export_tabular_tree { sub test_export_nexus { my $tree = shift // get_site_data_as_tree(); - + _test_export_nexus (tree => $tree, no_translate_block => 0); _test_export_nexus (tree => $tree, no_translate_block => 1, use_internal_names => 1); - + _test_export_nexus (tree => $tree, no_translate_block => 0, check_bootstrap_values => 1); } @@ -506,15 +506,24 @@ sub _test_export_nexus { my $tree = $args{tree}; delete $args{tree}; + if($args{check_bootstrap_values}) { + # add some bootstrap values to export + # get all the nodes + my @tree_nodes = $tree->get_node_refs(); + foreach my $node (@tree_nodes) { + $node->set_bootstrap_value( key => "bootkey", value => "bootvalue" ); + } + } + my $test_suffix = ', args:'; foreach my $key (sort keys %args) { my $val = $args{$key}; $test_suffix .= " $key => $val,"; } chop $test_suffix; - + my $tmp_folder = File::Temp->newdir (TEMPLATE => 'biodiverseXXXX', TMPDIR => 1); - + my $fname = $tmp_folder . '/tree_export_' . int (1000 * rand()) . '.nex'; note "File name is $fname"; my $success = eval { @@ -543,6 +552,7 @@ sub _test_export_nexus { 'Reimported nexus tree matches original' . $test_suffix, ); + my %nodes = $tree->get_node_hash; my %nodes_i = $imported_tree->get_node_hash; @@ -576,7 +586,18 @@ sub _test_export_nexus { }; }; - + # make sure the bootstrap values got through + if($args{check_bootstrap_values}) { + subtest "bootstrap roundtrip" => sub { + my @tree_nodes = $imported_tree->get_node_refs(); + foreach my $node (@tree_nodes) { + is($node->get_bootstrap_value( key => "bootkey" ), + "bootvalue", + "Exported and then imported correct bootstrap value." + ); + } + }; + } return; } @@ -610,7 +631,6 @@ sub test_roundtrip_names_with_quotes_in_newick { } - sub test_equalise_branch_lengths { my $tree = shift // get_site_data_as_tree(); From 3836d9f757176330d48a8df9effad97d2d6b79dc Mon Sep 17 00:00:00 2001 From: Luke Fitzpatrick Date: Mon, 23 Jan 2017 10:04:23 +1100 Subject: [PATCH 26/52] Fix typo in BootstrapBlock.pm Updates #630 --- lib/Biodiverse/TreeNode/BootstrapBlock.pm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Biodiverse/TreeNode/BootstrapBlock.pm b/lib/Biodiverse/TreeNode/BootstrapBlock.pm index 2f9bd087e..8f1ad68c9 100644 --- a/lib/Biodiverse/TreeNode/BootstrapBlock.pm +++ b/lib/Biodiverse/TreeNode/BootstrapBlock.pm @@ -49,7 +49,7 @@ sub decode_bootstrap_block { # get rid of leading and trailing square brackets $input =~ s/^\[//; - $input =~ s/\[$//; + $input =~ s/\]$//; $input = "{".$input."}"; From e7a60f5cb576a9cfa154e97e64eb889702abea6b Mon Sep 17 00:00:00 2001 From: Luke Fitzpatrick Date: Mon, 23 Jan 2017 10:37:26 +1100 Subject: [PATCH 27/52] Add better exclusion handling mechanism to bootstrap block. Sets up for cleaner colour export system. Updates #630 --- lib/Biodiverse/TreeNode/BootstrapBlock.pm | 24 +++++++++++++++-- t/32-BootstrapBlock.t | 33 ++++++++++++++++++----- 2 files changed, 49 insertions(+), 8 deletions(-) diff --git a/lib/Biodiverse/TreeNode/BootstrapBlock.pm b/lib/Biodiverse/TreeNode/BootstrapBlock.pm index 8f1ad68c9..233ea86fd 100644 --- a/lib/Biodiverse/TreeNode/BootstrapBlock.pm +++ b/lib/Biodiverse/TreeNode/BootstrapBlock.pm @@ -74,8 +74,8 @@ sub encode_bootstrap_block { my ($self, %args) = @_; my %boot_values = %$self; - if($args{exclusions}) { - my @excluded_keys = @{$args{exclusions}}; + if($self->{exclusions}) { + my @excluded_keys = @{$self->{exclusions}}; # print "Exclusions are: @excluded_keys\n"; foreach my $exclusion (@excluded_keys) { delete $boot_values{$exclusion}; @@ -122,4 +122,24 @@ sub fix_up_unquoted_bootstrap_block { } +# pass in a string, no bootstrap block value with this string as its +# key will be included in 'encode_bootstrap_block'. +sub add_exclusion { + my ($self, %args) = @_; + my $exclusion = $args{exclusion}; + + my @exclusions = (defined $self->{exclusions}) + ? @{$self->{exclusions}} + : (); + + push @exclusions, $exclusion; + $self->{exclusions} = \@exclusions; +} + + +sub clear_exclusions { + my ($self, %args) = @_; + $self->{exclusions} = undef; +} + 1; diff --git a/t/32-BootstrapBlock.t b/t/32-BootstrapBlock.t index 4b11d6285..961a06c3e 100644 --- a/t/32-BootstrapBlock.t +++ b/t/32-BootstrapBlock.t @@ -94,19 +94,40 @@ sub test_encode { "Block contained $expected_string") } - # also test an encoding with exclusions - my @exclusions = ("foo"); - $actual = - $bootstrap_block->encode_bootstrap_block(exclusions => \@exclusions); + # test an encoding with exclusions + $bootstrap_block->add_exclusion( exclusion => "foo" ); + $bootstrap_block->add_exclusion( exclusion => "footwo" ); + $actual = $bootstrap_block->encode_bootstrap_block(); - delete $hash{"foo"}; + delete $hash{ "foo" }; + delete $hash{ "footwo" }; foreach my $key (keys %hash) { my $expected_string = "\"$key\":\"$hash{$key}\""; ok (index($actual, $expected_string) != -1, "Block contained $expected_string") } ok (index($actual, '"foo":"bar"') == -1, - "Block didn't contain excluded item") + "Block didn't contain excluded item"); + ok (index($actual, '"footwo":"bartwo"') == -1, + "Block didn't contain excluded item"); + + # now test clearing the exclusions + $bootstrap_block->clear_exclusions(); + my $actual = $bootstrap_block->encode_bootstrap_block(); + + %hash = ( "foo" => "bar", + "footwo" => "bartwo", + "foothree" => "barthree", + ); + + + # we don't know what order the bootstrap block will be written, so + # just look for the pairs we know should be there. + foreach my $key (keys %hash) { + my $expected_string = "\"$key\":\"$hash{$key}\""; + ok (index($actual, $expected_string) != -1, + "Block contained $expected_string") + } } From 5771ca4438f3c597c3a7bccdd038d065e59fc2ca Mon Sep 17 00:00:00 2001 From: Luke Fitzpatrick Date: Mon, 23 Jan 2017 11:44:11 +1100 Subject: [PATCH 28/52] Stop passing around an 'export_colours' value, instead add exclusion to the bootstrap block before export. Updates #630 --- lib/Biodiverse/GUI/Export.pm | 2 -- lib/Biodiverse/GUI/Tabs/Tab.pm | 21 +++++++++++++++------ lib/Biodiverse/Tree.pm | 1 - lib/Biodiverse/TreeNode.pm | 19 ++++++------------- lib/Biodiverse/TreeNode/BootstrapBlock.pm | 14 ++++++++++++++ t/21-ReadNexus.t | 3 +-- t/32-BootstrapBlock.t | 7 ++++++- 7 files changed, 42 insertions(+), 25 deletions(-) diff --git a/lib/Biodiverse/GUI/Export.pm b/lib/Biodiverse/GUI/Export.pm index 64a478a4c..f47b1abfc 100644 --- a/lib/Biodiverse/GUI/Export.pm +++ b/lib/Biodiverse/GUI/Export.pm @@ -27,7 +27,6 @@ sub Run { my ($object, %args) = @_; my $selected_format = $args{selected_format} || ''; - my $export_colours = $args{export_colours} || 1; # sometimes we get called on non-objects, # eg if nothing is highlighted @@ -117,7 +116,6 @@ sub Run { $object->export( format => $selected_format, file => $filename, - export_colours => $export_colours, @$params, ) }; diff --git a/lib/Biodiverse/GUI/Tabs/Tab.pm b/lib/Biodiverse/GUI/Tabs/Tab.pm index 60661a6b2..df9f382b5 100644 --- a/lib/Biodiverse/GUI/Tabs/Tab.pm +++ b/lib/Biodiverse/GUI/Tabs/Tab.pm @@ -969,14 +969,24 @@ sub do_export { my %args_hash; my $selected_format = $args->[1] // ''; - - $args_hash{ export_colours } - = $self->export_colours_dialog(output_ref => $self->{output_ref}); + # handle export/non-export of colours + my $export_colours = $self->export_colours_dialog(); + if(!$export_colours) { + my @node_refs = $self->{output_ref}->get_node_refs; + foreach my $node_ref (@node_refs) { + $node_ref->get_bootstrap_block->add_exclusion(exclusion => "color"); + } + } + $args_hash{ selected_format } = $selected_format; - - Biodiverse::GUI::Export::Run($self->{output_ref}, %args_hash); + + # clear any exclusions we set + my @node_refs = $self->{output_ref}->get_node_refs; + foreach my $node_ref (@node_refs) { + $node_ref->get_bootstrap_block->clear_exclusions(); + } } @@ -984,7 +994,6 @@ sub do_export { sub export_colours_dialog { # ask whether they want to include colours my ($self, %args) = @_; - my $output_ref = $args{output_ref}; # check if we are in multiselect mode first if(!($self->{dendrogram}->get_cluster_colour_mode() eq 'multiselect')) { diff --git a/lib/Biodiverse/Tree.pm b/lib/Biodiverse/Tree.pm index 03229869b..78761d369 100644 --- a/lib/Biodiverse/Tree.pm +++ b/lib/Biodiverse/Tree.pm @@ -1150,7 +1150,6 @@ sub export_tabular_tree { symmetric => 1, name => $name, use_internal_names => 1, - export_colours => $args{export_colours}, %args, ); diff --git a/lib/Biodiverse/TreeNode.pm b/lib/Biodiverse/TreeNode.pm index a87f67f26..5fa1f5e2c 100644 --- a/lib/Biodiverse/TreeNode.pm +++ b/lib/Biodiverse/TreeNode.pm @@ -1612,8 +1612,8 @@ sub get_bootstrap_block { sub to_table { my $self = shift; my %args = @_; - my $export_colours = $args{export_colours}; my $treename = $args{name} || "TREE"; + # assign unique ID numbers if not already done defined ($self->get_value ('NODE_NUMBER')) || $self->number_nodes; @@ -1625,6 +1625,10 @@ sub to_table { plot_coords_left_to_right => $args{plot_coords_left_to_right}, ); } + + # figure out if we're meant to be exporting colours or not + my $export_colours + = !$self->get_bootstrap_block->has_exclusion( key => "color" ); # create a BaseStruct object to contain the table my $bs = Biodiverse::BaseStruct->new ( @@ -1950,21 +1954,10 @@ sub to_newick { # convert the tree to a newick format. Based on the NEXUS li } # build the bootstrap block - my @exclusions = (); - - # if they don't want colours, remove that from the block Don't - # change this to if($args{export_colours}) because we want 'undef' - # to result in including the colours. Should probably reimplement - # this as an array of bootstrap block exclusions if there are more - # bootstrap block items that get used. - if($args{export_colours} && $args{export_colours} == 0) { - push @exclusions, "color"; - } - my $bootstrap_block = $self->get_bootstrap_block(); my $bootstrap_string = - $bootstrap_block->encode_bootstrap_block(exclusions => \@exclusions); + $bootstrap_block->encode_bootstrap_block(); $string .= $bootstrap_string; diff --git a/lib/Biodiverse/TreeNode/BootstrapBlock.pm b/lib/Biodiverse/TreeNode/BootstrapBlock.pm index 233ea86fd..73889db77 100644 --- a/lib/Biodiverse/TreeNode/BootstrapBlock.pm +++ b/lib/Biodiverse/TreeNode/BootstrapBlock.pm @@ -81,6 +81,9 @@ sub encode_bootstrap_block { delete $boot_values{$exclusion}; } } + + # also make sure "exclusions:..." isn't in the encoding + delete $boot_values{"exclusions"}; my $json_string = encode_json \%boot_values; @@ -142,4 +145,15 @@ sub clear_exclusions { $self->{exclusions} = undef; } +sub has_exclusion { + my ($self, %args) = @_; + my $key = $args{key}; + + my @exclusions = (defined $self->{exclusions}) + ? @{$self->{exclusions}} + : (); + + return grep( /^$key$/, @exclusions ); +} + 1; diff --git a/t/21-ReadNexus.t b/t/21-ReadNexus.t index 67de99361..9b900cc93 100644 --- a/t/21-ReadNexus.t +++ b/t/21-ReadNexus.t @@ -279,8 +279,7 @@ sub test_tabular_tree_from_file { my $export_tree = $phylogeny_array->[0]; $result = eval { - $export_tree->export_tabular_tree(file => $exported_tabular_file, - export_colours => 1,); + $export_tree->export_tabular_tree(file => $exported_tabular_file); }; my $e = $EVAL_ERROR; diag $e if $e; diff --git a/t/32-BootstrapBlock.t b/t/32-BootstrapBlock.t index 961a06c3e..1a6765925 100644 --- a/t/32-BootstrapBlock.t +++ b/t/32-BootstrapBlock.t @@ -97,6 +97,11 @@ sub test_encode { # test an encoding with exclusions $bootstrap_block->add_exclusion( exclusion => "foo" ); $bootstrap_block->add_exclusion( exclusion => "footwo" ); + + ok($bootstrap_block->has_exclusion( key => "foo" ), "has_exclusion worked" ); + ok($bootstrap_block->has_exclusion( key => "footwo" ), "has_exclusion worked" ); + ok(!$bootstrap_block->has_exclusion( key => "foothree" ), "has_exclusion worked" ); + $actual = $bootstrap_block->encode_bootstrap_block(); delete $hash{ "foo" }; @@ -113,7 +118,7 @@ sub test_encode { # now test clearing the exclusions $bootstrap_block->clear_exclusions(); - my $actual = $bootstrap_block->encode_bootstrap_block(); + $actual = $bootstrap_block->encode_bootstrap_block(); %hash = ( "foo" => "bar", "footwo" => "bartwo", From a4db9ed72db6b7d316676e26a68a63bf72c59ebf Mon Sep 17 00:00:00 2001 From: Shawn Laffan Date: Sat, 4 Feb 2017 10:09:49 +1100 Subject: [PATCH 29/52] Add Data::Structure::Util to the Config checklist Updates #630 --- lib/Biodiverse/Config.pm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Biodiverse/Config.pm b/lib/Biodiverse/Config.pm index 78b56b43d..d93c81976 100644 --- a/lib/Biodiverse/Config.pm +++ b/lib/Biodiverse/Config.pm @@ -122,7 +122,7 @@ BEGIN { . "See https://metacpan.org/pod/Sort::Naturally for more details about what it does."; } # more general solution for anything new - my @reqd = qw /Text::Fuzzy/; + my @reqd = qw /Text::Fuzzy Data::Structure::Util/; foreach my $module (@reqd) { if (not eval "require $module") { my $feedback = <<"END_FEEDBACK" From 7860d7a30da247090f75f170aacf8d1816300639 Mon Sep 17 00:00:00 2001 From: Luke Fitzpatrick Date: Tue, 14 Feb 2017 10:17:59 +1100 Subject: [PATCH 30/52] Add .travis.yml file to this branch. --- .travis.yml | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 000000000..b34265782 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,73 @@ +language: perl +perl: + - '5.24' + - '5.22' +distro: trusty +sudo: required +cache: + directories: + - perl_modules + - gdal_builds +before_install: + + # local::lib target should be cached + - cpanm --notest local::lib + - eval "$(perl -Mlocal::lib=${PWD}/perl_modules)" + + # now we build a gdal if it has not been cached + + # should be able to specify these under env + - export gdal_version=2.1.3 + - export geo_gdal_tar=Geo-GDAL-2.010301.tar.gz + - export geo_gdal_dir=Geo-GDAL-2.010301 + - export gdal_home=$TRAVIS_BUILD_DIR/gdal_builds/${gdal_version} + - echo $gdal_home + + - startdir=`pwd` + - mkdir -p ${gdal_home} + - cd ${gdal_home} + - pwd + - find $gdal_home -name 'gdal-config' -print + - gdalconfig=`find $gdal_home -name 'gdal-config' -print | grep apps | head -1` + - echo $gdalconfig + - if [ -n "$gdalconfig" ]; then build_gdal=false; else build_gdal=true; fi; + - echo $build_gdal + - if [ "$build_gdal" = true ]; then wget http://download.osgeo.org/gdal/${gdal_version}/gdal-${gdal_version}.tar.gz; fi + # should use -C and --strip-components to simplify the dir structure + - if [ "$build_gdal" = true ]; then tar -xzf gdal-${gdal_version}.tar.gz; fi + - if [ "$build_gdal" = true ]; then cd gdal-${gdal_version} && ./configure --prefix=${gdal_home} && make -j4 && make install; fi + - cd ${startdir} + - if [ "$build_gdal" = true ]; then gdalconfig=`find $gdal_home -name 'gdal-config' -print | grep apps | head -1`; fi + - find $gdal_home -name 'gdal-config' -print + # using env vars avoids cpanm parsing the --gdal-config type arguments in cpanm Geo::GDAL + - export PERL_GDAL_NO_DOWNLOADS=1 + - export PERL_GDAL_SOURCE_TREE=${gdal_home}/gdal-${gdal_version} + - echo $PERL_GDAL_SOURCE_TREE + + # Here as well as cpanfile because -v stops travis from timing out and killing the build + # (and -v for the whole install produces a ridiculously large log) + # -v should not be needed now we build our own + - cpanm -v Geo::GDAL + + # Disable Gtk stuff for speed reasons + # Reinstate when we add the GUI variant + # NO - leave in until issue #581 is finalised + # as it has GUI deps + - sudo apt-get install libgnomecanvas2-dev + + # Here as well as cpanfile because of dependency problems if not installed before Gnome2::Canvas + - cpanm --notest ExtUtils::Depends ExtUtils::PkgConfig Glib Gtk2 + + - if [ "$BD_NO_TEST_GUI" = 0 ]; then cpanm --quiet --installdeps --notest --with-all-features .; fi; + +env: + - BD_NO_TEST_GUI=1 + - BD_NO_TEST_GUI=0 +script: prove -l -j4 +# blocklist +branches: + except: + - ppm + # list GUI only branches here since we lack GUI tests + - issue_630_export_user_tree_colours + - issue_633_remove_pixbuf From 108e2370be9a8f1d4a9cba0d6bec7055ae8b6742 Mon Sep 17 00:00:00 2001 From: Luke Fitzpatrick Date: Tue, 14 Feb 2017 10:57:35 +1100 Subject: [PATCH 31/52] Make the bootstrap block export in the form [&!key=value,!key=value]. Also update tests for bootstrap block to reflect change. Updates #630 --- lib/Biodiverse/TreeNode/BootstrapBlock.pm | 24 +++++++++++------------ t/32-BootstrapBlock.t | 10 +++++----- 2 files changed, 16 insertions(+), 18 deletions(-) diff --git a/lib/Biodiverse/TreeNode/BootstrapBlock.pm b/lib/Biodiverse/TreeNode/BootstrapBlock.pm index 73889db77..8a510966c 100644 --- a/lib/Biodiverse/TreeNode/BootstrapBlock.pm +++ b/lib/Biodiverse/TreeNode/BootstrapBlock.pm @@ -4,6 +4,8 @@ use strict; use warnings; use Carp; +use 5.010; + use Cpanel::JSON::XS; use Data::Structure::Util qw( unbless ); @@ -61,7 +63,6 @@ sub decode_bootstrap_block { foreach my $key (keys %$decoded_hash) { $self->set_value( key => $key, value => $decoded_hash->{$key} ); - #print "Setting $key to be $decoded_hash->{$key}\n"; } } @@ -73,6 +74,7 @@ sub decode_bootstrap_block { sub encode_bootstrap_block { my ($self, %args) = @_; my %boot_values = %$self; + if($self->{exclusions}) { my @excluded_keys = @{$self->{exclusions}}; @@ -84,21 +86,17 @@ sub encode_bootstrap_block { # also make sure "exclusions:..." isn't in the encoding delete $boot_values{"exclusions"}; - - my $json_string = encode_json \%boot_values; - - # the json encoder uses { and } to delimit data, but bootstrap - # block uses [ and ]. - - # will replace first and last use of { and } respectively. - $json_string =~ s/\{/\[/; - $json_string = scalar reverse $json_string; # cheeky - $json_string =~ s/\}/\]/; - $json_string = scalar reverse $json_string; + my @bootstrap_strings; + foreach my $key (keys %boot_values) { + my $value = $boot_values{$key}; + push @bootstrap_strings, "!$key=$value"; + } + my $bootstrap_string = "[&" . join(",", @bootstrap_strings) . "]"; + # if we have nothing in this block, we probably don't want to # write out [], makes the nexus file ugly. - return $json_string eq "[]" ? "" : $json_string; + return $bootstrap_string eq "[]" ? "" : $bootstrap_string; } diff --git a/t/32-BootstrapBlock.t b/t/32-BootstrapBlock.t index 1a6765925..b52724d10 100644 --- a/t/32-BootstrapBlock.t +++ b/t/32-BootstrapBlock.t @@ -89,7 +89,7 @@ sub test_encode { # we don't know what order the bootstrap block will be written, so # just look for the pairs we know should be there. foreach my $key (keys %hash) { - my $expected_string = "\"$key\":\"$hash{$key}\""; + my $expected_string = "!$key=$hash{$key}"; ok (index($actual, $expected_string) != -1, "Block contained $expected_string") } @@ -107,13 +107,13 @@ sub test_encode { delete $hash{ "foo" }; delete $hash{ "footwo" }; foreach my $key (keys %hash) { - my $expected_string = "\"$key\":\"$hash{$key}\""; + my $expected_string = "$key=$hash{$key}"; ok (index($actual, $expected_string) != -1, "Block contained $expected_string") } - ok (index($actual, '"foo":"bar"') == -1, + ok (index($actual, '"foo"="bar"') == -1, "Block didn't contain excluded item"); - ok (index($actual, '"footwo":"bartwo"') == -1, + ok (index($actual, '"footwo"="bartwo"') == -1, "Block didn't contain excluded item"); # now test clearing the exclusions @@ -129,7 +129,7 @@ sub test_encode { # we don't know what order the bootstrap block will be written, so # just look for the pairs we know should be there. foreach my $key (keys %hash) { - my $expected_string = "\"$key\":\"$hash{$key}\""; + my $expected_string = "$key=$hash{$key}"; ok (index($actual, $expected_string) != -1, "Block contained $expected_string") } From 0bd21cea34604f20dfed68ac45ff48b6d4cedf7a Mon Sep 17 00:00:00 2001 From: Luke Fitzpatrick Date: Tue, 14 Feb 2017 11:23:26 +1100 Subject: [PATCH 32/52] Make exclamation mark only apply to color block. Updates #630 --- lib/Biodiverse/TreeNode/BootstrapBlock.pm | 5 +++- t/32-BootstrapBlock.t | 28 +++++++++++++++++++++-- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/lib/Biodiverse/TreeNode/BootstrapBlock.pm b/lib/Biodiverse/TreeNode/BootstrapBlock.pm index 8a510966c..dd6947a04 100644 --- a/lib/Biodiverse/TreeNode/BootstrapBlock.pm +++ b/lib/Biodiverse/TreeNode/BootstrapBlock.pm @@ -90,7 +90,10 @@ sub encode_bootstrap_block { my @bootstrap_strings; foreach my $key (keys %boot_values) { my $value = $boot_values{$key}; - push @bootstrap_strings, "!$key=$value"; + if($key eq "color") { + $key = "!"."color"; + } + push @bootstrap_strings, "$key=$value"; } my $bootstrap_string = "[&" . join(",", @bootstrap_strings) . "]"; diff --git a/t/32-BootstrapBlock.t b/t/32-BootstrapBlock.t index b52724d10..ac1905d3a 100644 --- a/t/32-BootstrapBlock.t +++ b/t/32-BootstrapBlock.t @@ -75,7 +75,7 @@ sub test_decode { sub test_encode { my %hash = ( "foo" => "bar", "footwo" => "bartwo", - "foothree" => "barthree", + "foothree" => "barthree", ); my $bootstrap_block = Biodiverse::TreeNode::BootstrapBlock->new(); @@ -89,7 +89,7 @@ sub test_encode { # we don't know what order the bootstrap block will be written, so # just look for the pairs we know should be there. foreach my $key (keys %hash) { - my $expected_string = "!$key=$hash{$key}"; + my $expected_string = "$key=$hash{$key}"; ok (index($actual, $expected_string) != -1, "Block contained $expected_string") } @@ -156,3 +156,27 @@ sub test_fix_up_unquoted_bootstrap_block { ); } } + +# only color export should have an exclamation mark +# e.g. [&blah=blah,!color=red,blah2=blah2] +sub test_colour_specific_export { + my %hash = ( "foo" => "bar", + "footwo" => "bartwo", + "color" => "red", + ); + + my $bootstrap_block = Biodiverse::TreeNode::BootstrapBlock->new(); + + foreach my $key (keys %hash) { + $bootstrap_block->set_value( key => $key, value => $hash{ $key } ); + } + + my $actual = $bootstrap_block->encode_bootstrap_block(); + + # we don't know what order the bootstrap block will be written, so + # just look for the pairs we know should be there. + ok (index($actual, "!color=red") != -1, + "Block contained !color=red") + + +} From 20e63dfc8f18baa515f43c3462431bb7b7410aec Mon Sep 17 00:00:00 2001 From: Luke Fitzpatrick Date: Tue, 14 Feb 2017 16:06:05 +1100 Subject: [PATCH 33/52] Option to export colours is now in the export metadata. Also slight tweaks to bootstrap block encoding/decoding. Updates #630 --- lib/Biodiverse/GUI/Tabs/Tab.pm | 38 ----------------- lib/Biodiverse/Tree.pm | 50 +++++++++++++++++++++-- lib/Biodiverse/TreeNode/BootstrapBlock.pm | 17 +++++--- t/32-BootstrapBlock.t | 10 ++--- 4 files changed, 63 insertions(+), 52 deletions(-) diff --git a/lib/Biodiverse/GUI/Tabs/Tab.pm b/lib/Biodiverse/GUI/Tabs/Tab.pm index df9f382b5..22ee8dbab 100644 --- a/lib/Biodiverse/GUI/Tabs/Tab.pm +++ b/lib/Biodiverse/GUI/Tabs/Tab.pm @@ -969,47 +969,9 @@ sub do_export { my %args_hash; my $selected_format = $args->[1] // ''; - - # handle export/non-export of colours - my $export_colours = $self->export_colours_dialog(); - if(!$export_colours) { - my @node_refs = $self->{output_ref}->get_node_refs; - foreach my $node_ref (@node_refs) { - $node_ref->get_bootstrap_block->add_exclusion(exclusion => "color"); - } - } $args_hash{ selected_format } = $selected_format; Biodiverse::GUI::Export::Run($self->{output_ref}, %args_hash); - - # clear any exclusions we set - my @node_refs = $self->{output_ref}->get_node_refs; - foreach my $node_ref (@node_refs) { - $node_ref->get_bootstrap_block->clear_exclusions(); - } } - - -sub export_colours_dialog { - # ask whether they want to include colours - my ($self, %args) = @_; - - # check if we are in multiselect mode first - if(!($self->{dendrogram}->get_cluster_colour_mode() eq 'multiselect')) { - return 0; - } - - # TODO: allow choice of colour format for compatibility with other - # packages. - my $response = Biodiverse::GUI::YesNoCancel->run({ - header => "Export colours?", - hide_cancel => 1, - }); - - return $response eq 'yes' ? 1 : 0; -} - - - 1; diff --git a/lib/Biodiverse/Tree.pm b/lib/Biodiverse/Tree.pm index 78761d369..44ce7786d 100644 --- a/lib/Biodiverse/Tree.pm +++ b/lib/Biodiverse/Tree.pm @@ -894,6 +894,13 @@ sub get_metadata_export_nexus { type => 'boolean', default => 0, }, + { + name => 'export_colours', + label_text => 'Export colours', + tooltip => 'Place the colours you selected in the nexus bootstrap block', + type => 'boolean', + default => 0, + }, ); for (@parameters) { bless $_, $parameter_metadata_class; @@ -916,13 +923,27 @@ sub export_nexus { open( my $fh, '>', $file ) || croak "Could not open file '$file' for writing\n"; + my $export_colours = $args{export_colours}; + if(!$export_colours) { + my @node_refs = $self->get_node_refs; + foreach my $node_ref (@node_refs) { + $node_ref->get_bootstrap_block->add_exclusion(exclusion => "color"); + } + } + print {$fh} $self->to_nexus( tree_name => $self->get_param('NAME'), %args, ); $fh->close; + # clear any exclusions we set + my @node_refs = $self->get_node_refs; + foreach my $node_ref (@node_refs) { + $node_ref->get_bootstrap_block->clear_exclusions(); + } + return 1; } @@ -930,7 +951,6 @@ sub get_metadata_export_newick { my $self = shift; my @parameters = ( - bless( { name => 'use_internal_names', label_text => 'Label internal nodes', @@ -938,9 +958,18 @@ sub get_metadata_export_newick { type => 'boolean', default => 1, }, - $parameter_metadata_class - ), - ); + { + name => 'export_colours', + label_text => 'Export colours', + tooltip => 'Place the colours you selected in the nexus bootstrap block', + type => 'boolean', + default => 0, + }, + ); + + for (@parameters) { + bless $_, $parameter_metadata_class; + } my %args = ( format => 'Newick', @@ -960,9 +989,22 @@ sub export_newick { open( my $fh, '>', $file ) || croak "Could not open file '$file' for writing\n"; + + my $export_colours = $args{export_colours}; + if(!$export_colours) { + my @node_refs = $self->get_node_refs; + foreach my $node_ref (@node_refs) { + $node_ref->get_bootstrap_block->add_exclusion(exclusion => "color"); + } + } + print {$fh} $self->to_newick(%args); $fh->close; + my @node_refs = $self->get_node_refs; + foreach my $node_ref (@node_refs) { + $node_ref->get_bootstrap_block->clear_exclusions(); + } return 1; } diff --git a/lib/Biodiverse/TreeNode/BootstrapBlock.pm b/lib/Biodiverse/TreeNode/BootstrapBlock.pm index dd6947a04..3f3288746 100644 --- a/lib/Biodiverse/TreeNode/BootstrapBlock.pm +++ b/lib/Biodiverse/TreeNode/BootstrapBlock.pm @@ -99,29 +99,36 @@ sub encode_bootstrap_block { # if we have nothing in this block, we probably don't want to # write out [], makes the nexus file ugly. - return $bootstrap_string eq "[]" ? "" : $bootstrap_string; + return $bootstrap_string eq "[&]" ? "" : $bootstrap_string; } # add quotes to unquoted json blocks. Needed for the json decoder -# e.g. {key:value,key2:value2} goes to {"key":"value","key2":"value2"} +# e.g. {&key=value,key2=value2} goes to {"key":"value","key2":"value2"} sub fix_up_unquoted_bootstrap_block { my ($self, %args) = @_; my $block = $args{block}; # Basic idea is to find a block starting and ending with '{' or # ','. Take what is inside this block, and find a 'key' and - # 'value' separated by a ':'. If these aren't already quoted, put + # 'value' separated by '='. If these aren't already quoted, put # quotes around them. We need to do this loop because the final # comma of one block is the starting comma of the next block. - + + # first remove the leading ampersand + $block =~ s/\{\&/{/; my $old = ""; while(!($old eq $block)) { $old = $block; # crazy regex here - $block =~ s/([\{,])([^\"]*?)\:([^\"]*?)([\},])/$1\"$2\":\"$3\"$4/; + $block =~ s/([\{,])([^\"]*?)\=([^\"]*?)([\},])/$1\"$2\":\"$3\"$4/; } + + # also replace equals signs between quotes with colons so we can + # use a json decoder. + $block =~ s/\"=\"/\":\"/g; + return $block; } diff --git a/t/32-BootstrapBlock.t b/t/32-BootstrapBlock.t index ac1905d3a..9b62dec9e 100644 --- a/t/32-BootstrapBlock.t +++ b/t/32-BootstrapBlock.t @@ -48,7 +48,7 @@ sub test_basic_operations { } sub test_decode { - my @raw_inputs = ('"foo":"bar","footwo":"bartwo",foothree:barthree'); + my @raw_inputs = ('"foo"="bar","footwo"="bartwo",foothree=barthree'); my %hash = ( "foo" => "bar", @@ -139,10 +139,10 @@ sub test_encode { sub test_fix_up_unquoted_bootstrap_block { my $bootstrap_block = Biodiverse::TreeNode::BootstrapBlock->new(); my %test_hash = ( - '{key:value,key2:value2}' => '{"key":"value","key2":"value2"}', - '{key:value}' => '{"key":"value"}', - '{"key":"value"}' => '{"key":"value"}', - '{"key":"value",key2:value2,"key3":"value3"}' + '{key=value,key2=value2}' => '{"key":"value","key2":"value2"}', + '{key=value}' => '{"key":"value"}', + '{"key"="value"}' => '{"key":"value"}', + '{"key"="value",key2=value2,"key3"="value3"}' => '{"key":"value","key2":"value2","key3":"value3"}', ); From c555049fc177bd610b3f93a5c25f3561f37f1b48 Mon Sep 17 00:00:00 2001 From: Shawn Laffan Date: Thu, 16 Feb 2017 16:36:10 +1100 Subject: [PATCH 34/52] Modify tooltip And avoid warnings/failures on recent perls. --- lib/Biodiverse/Tree.pm | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/Biodiverse/Tree.pm b/lib/Biodiverse/Tree.pm index 44ce7786d..3c3a5603d 100644 --- a/lib/Biodiverse/Tree.pm +++ b/lib/Biodiverse/Tree.pm @@ -897,7 +897,7 @@ sub get_metadata_export_nexus { { name => 'export_colours', label_text => 'Export colours', - tooltip => 'Place the colours you selected in the nexus bootstrap block', + tooltip => 'Include user defined colours (in the nexus bootstrap block)', type => 'boolean', default => 0, }, @@ -961,7 +961,7 @@ sub get_metadata_export_newick { { name => 'export_colours', label_text => 'Export colours', - tooltip => 'Place the colours you selected in the nexus bootstrap block', + tooltip => 'Include the user defined colours (in the nexus bootstrap block)', type => 'boolean', default => 0, }, @@ -2667,7 +2667,8 @@ sub remap_labels_from_hash { # the auto-remap logic. sub get_labels { my $self = shift; - return keys( $self->get_named_nodes() ); + my $named_nodes = $self->get_named_nodes; + return wantarray ? keys %$named_nodes : [keys %$named_nodes]; } 1; From 0662b971a2e4877594c6797836649ecec5b17cee Mon Sep 17 00:00:00 2001 From: Shawn Laffan Date: Fri, 17 Feb 2017 09:34:54 +1100 Subject: [PATCH 35/52] Tree exports: Move the bootstrap block to before the length Also some style changes and minor inefficiencies. Updates #630 --- lib/Biodiverse/Tree.pm | 17 +++++++++++------ lib/Biodiverse/TreeNode.pm | 21 ++++++++++----------- lib/Biodiverse/TreeNode/BootstrapBlock.pm | 18 +++++++++++------- 3 files changed, 32 insertions(+), 24 deletions(-) diff --git a/lib/Biodiverse/Tree.pm b/lib/Biodiverse/Tree.pm index 3c3a5603d..d24e7f5f1 100644 --- a/lib/Biodiverse/Tree.pm +++ b/lib/Biodiverse/Tree.pm @@ -990,21 +990,26 @@ sub export_newick { open( my $fh, '>', $file ) || croak "Could not open file '$file' for writing\n"; + my @node_refs = $self->get_node_refs; my $export_colours = $args{export_colours}; + my $added_exclusions; if(!$export_colours) { - my @node_refs = $self->get_node_refs; + $added_exclusions++; foreach my $node_ref (@node_refs) { - $node_ref->get_bootstrap_block->add_exclusion(exclusion => "color"); + $node_ref->get_bootstrap_block->add_exclusion( + exclusion => 'color', + ); } } print {$fh} $self->to_newick(%args); $fh->close; - my @node_refs = $self->get_node_refs; - foreach my $node_ref (@node_refs) { - $node_ref->get_bootstrap_block->clear_exclusions(); - } + if ($added_exclusions) { + foreach my $node_ref (@node_refs) { + $node_ref->get_bootstrap_block->clear_exclusions; + } + } return 1; } diff --git a/lib/Biodiverse/TreeNode.pm b/lib/Biodiverse/TreeNode.pm index 5fa1f5e2c..40f230eb7 100644 --- a/lib/Biodiverse/TreeNode.pm +++ b/lib/Biodiverse/TreeNode.pm @@ -1628,14 +1628,14 @@ sub to_table { # figure out if we're meant to be exporting colours or not my $export_colours - = !$self->get_bootstrap_block->has_exclusion( key => "color" ); + = !$self->get_bootstrap_block->has_exclusion( key => 'color' ); # create a BaseStruct object to contain the table my $bs = Biodiverse::BaseStruct->new ( NAME => $treename, ); # may need to specify some other params - + my @header = qw /TREENAME NODE_NUMBER PARENTNODE LENGTHTOPARENT NAME/; if( $export_colours ) { push @header, "COLOUR"; @@ -1663,7 +1663,7 @@ sub to_table { my $number = $node->get_value ('NODE_NUMBER'); my %data; - my $colour = $node->get_bootstrap_value(key => "color"); + my $colour = $node->get_bootstrap_value (key => 'color'); # add to the basestruct object if( $export_colours ) { @@ -1926,6 +1926,11 @@ sub to_newick { # convert the tree to a newick format. Based on the NEXUS li #$name = "'$name'"; # quote otherwise } + # build the bootstrap block + my $bootstrap_block = $self->get_bootstrap_block(); + + my $bootstrap_string = + $bootstrap_block->encode_bootstrap_block(); if (! $self->is_terminal_node) { # not a terminal node $string .= "("; @@ -1940,6 +1945,7 @@ sub to_newick { # convert the tree to a newick format. Based on the NEXUS li if (defined ($name) && $use_int_names ) { $string .= $name; } + $string .= $bootstrap_string; if (defined $self->get_length) { $string .= ":" . $self->get_length; } @@ -1947,19 +1953,12 @@ sub to_newick { # convert the tree to a newick format. Based on the NEXUS li # terminal nodes else { $string .= $name; + $string .= $bootstrap_string; if (defined $self->get_length) { $string .= ":" . $self->get_length; } } - - # build the bootstrap block - my $bootstrap_block = $self->get_bootstrap_block(); - - my $bootstrap_string = - $bootstrap_block->encode_bootstrap_block(); - - $string .= $bootstrap_string; return $string; } diff --git a/lib/Biodiverse/TreeNode/BootstrapBlock.pm b/lib/Biodiverse/TreeNode/BootstrapBlock.pm index 3f3288746..b3503a613 100644 --- a/lib/Biodiverse/TreeNode/BootstrapBlock.pm +++ b/lib/Biodiverse/TreeNode/BootstrapBlock.pm @@ -85,21 +85,25 @@ sub encode_bootstrap_block { } # also make sure "exclusions:..." isn't in the encoding - delete $boot_values{"exclusions"}; + delete $boot_values{exclusions}; my @bootstrap_strings; foreach my $key (keys %boot_values) { my $value = $boot_values{$key}; - if($key eq "color") { - $key = "!"."color"; + # should test if the value looks like a valid colour value + if ($key eq 'color') { + $key = '!color'; } push @bootstrap_strings, "$key=$value"; } - my $bootstrap_string = "[&" . join(",", @bootstrap_strings) . "]"; - + # if we have nothing in this block, we probably don't want to - # write out [], makes the nexus file ugly. - return $bootstrap_string eq "[&]" ? "" : $bootstrap_string; + # write out [], as it makes the nexus file ugly. + return '' if !scalar @bootstrap_strings; + + my $bootstrap_string = '[&' . join(",", @bootstrap_strings) . ']'; + + return $bootstrap_string; } From 7829900fcee3710e47c99b4c9ffe55f826386fe1 Mon Sep 17 00:00:00 2001 From: Shawn Laffan Date: Fri, 17 Feb 2017 09:35:45 +1100 Subject: [PATCH 36/52] Re-enable travis for this branch --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index b34265782..a91863fb2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -69,5 +69,5 @@ branches: except: - ppm # list GUI only branches here since we lack GUI tests - - issue_630_export_user_tree_colours + # - issue_630_export_user_tree_colours - issue_633_remove_pixbuf From 3c30cfcdf6ea51f6326e6da4124cbd602d36e25e Mon Sep 17 00:00:00 2001 From: Shawn Laffan Date: Fri, 17 Feb 2017 12:06:25 +1100 Subject: [PATCH 37/52] re-enable travis for branch --- .travis.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index b34265782..84c031251 100644 --- a/.travis.yml +++ b/.travis.yml @@ -69,5 +69,4 @@ branches: except: - ppm # list GUI only branches here since we lack GUI tests - - issue_630_export_user_tree_colours - issue_633_remove_pixbuf From d82b0787d74ce7b59c11e8e349e3cafe8b6040a6 Mon Sep 17 00:00:00 2001 From: Shawn Laffan Date: Fri, 17 Feb 2017 14:45:59 +1100 Subject: [PATCH 38/52] disable colour export in newick files, enable in text metadata Updates #630 --- lib/Biodiverse/Tree.pm | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/lib/Biodiverse/Tree.pm b/lib/Biodiverse/Tree.pm index 408b2e364..77bbc1a24 100644 --- a/lib/Biodiverse/Tree.pm +++ b/lib/Biodiverse/Tree.pm @@ -958,13 +958,14 @@ sub get_metadata_export_newick { type => 'boolean', default => 1, }, - { - name => 'export_colours', - label_text => 'Export colours', - tooltip => 'Include the user defined colours (in the nexus bootstrap block)', - type => 'boolean', - default => 0, - }, + # Colours seem unsupported in figtree for newick files + #{ + # name => 'export_colours', + # label_text => 'Export colours', + # tooltip => 'Include the user defined colours (in the nexus bootstrap block)', + # type => 'boolean', + # default => 0, + #}, ); for (@parameters) { @@ -1164,6 +1165,13 @@ sub get_metadata_export_tabular_tree { type => 'boolean', default => 0, }, + { + name => 'export_colours', + label_text => 'Export colours', + tooltip => 'Include the user defined colours (in the nexus bootstrap block)', + type => 'boolean', + default => 0, + }, ); for (@parameters) { From b9ed9bffd92d5bbf3dab2cc5b129f7520a5a96e6 Mon Sep 17 00:00:00 2001 From: Shawn Laffan Date: Sat, 18 Feb 2017 09:47:44 +1100 Subject: [PATCH 39/52] Change a few idioms Updates #630 --- lib/Biodiverse/TreeNode/BootstrapBlock.pm | 28 +++++++++-------------- 1 file changed, 11 insertions(+), 17 deletions(-) diff --git a/lib/Biodiverse/TreeNode/BootstrapBlock.pm b/lib/Biodiverse/TreeNode/BootstrapBlock.pm index b3503a613..3df9f0932 100644 --- a/lib/Biodiverse/TreeNode/BootstrapBlock.pm +++ b/lib/Biodiverse/TreeNode/BootstrapBlock.pm @@ -53,7 +53,7 @@ sub decode_bootstrap_block { $input =~ s/^\[//; $input =~ s/\]$//; - $input = "{".$input."}"; + $input = '{' . $input . '}'; # fix up unquoted key/value pairs i.e. add quotes because the json # decoder doesn't work without them. @@ -69,19 +69,17 @@ sub decode_bootstrap_block { # returns the values in this object formatted so they are ready to be # written straight to a nexus/newick file. -# e.g. returns "["color":"#ffffff","foo":"bar"]" etc. +# e.g. returns [&!color="#ffffff","foo"="bar"] etc. # excluded_keys is an array ref of keys not to include in the block sub encode_bootstrap_block { my ($self, %args) = @_; my %boot_values = %$self; - if($self->{exclusions}) { + if ($self->{exclusions}) { my @excluded_keys = @{$self->{exclusions}}; # print "Exclusions are: @excluded_keys\n"; - foreach my $exclusion (@excluded_keys) { - delete $boot_values{$exclusion}; - } + delete @boot_values{@excluded_keys}; } # also make sure "exclusions:..." isn't in the encoding @@ -141,14 +139,11 @@ sub fix_up_unquoted_bootstrap_block { # key will be included in 'encode_bootstrap_block'. sub add_exclusion { my ($self, %args) = @_; - my $exclusion = $args{exclusion}; - my @exclusions = (defined $self->{exclusions}) - ? @{$self->{exclusions}} - : (); + my $key = $args{exclusion}; + my $exclusions = $self->{exclusions} //= []; - push @exclusions, $exclusion; - $self->{exclusions} = \@exclusions; + push @$exclusions, $key; } @@ -161,11 +156,10 @@ sub has_exclusion { my ($self, %args) = @_; my $key = $args{key}; - my @exclusions = (defined $self->{exclusions}) - ? @{$self->{exclusions}} - : (); - - return grep( /^$key$/, @exclusions ); + my $exclusions = $self->{exclusions}; + return if !$exclusions; + + return grep {$_ eq $key} @$exclusions; } 1; From a21c74e837e4ba2484e27ff6a2be96750e91b96f Mon Sep 17 00:00:00 2001 From: Shawn Laffan Date: Sat, 18 Feb 2017 20:04:17 +1100 Subject: [PATCH 40/52] change a few idioms and some styles --- lib/Biodiverse/TreeNode/BootstrapBlock.pm | 5 +- t/32-BootstrapBlock.t | 117 +++++++++++++--------- 2 files changed, 74 insertions(+), 48 deletions(-) diff --git a/lib/Biodiverse/TreeNode/BootstrapBlock.pm b/lib/Biodiverse/TreeNode/BootstrapBlock.pm index 3df9f0932..a9da6f230 100644 --- a/lib/Biodiverse/TreeNode/BootstrapBlock.pm +++ b/lib/Biodiverse/TreeNode/BootstrapBlock.pm @@ -68,14 +68,13 @@ sub decode_bootstrap_block { } # returns the values in this object formatted so they are ready to be -# written straight to a nexus/newick file. +# written straight to a nexus file. # e.g. returns [&!color="#ffffff","foo"="bar"] etc. # excluded_keys is an array ref of keys not to include in the block sub encode_bootstrap_block { my ($self, %args) = @_; my %boot_values = %$self; - if ($self->{exclusions}) { my @excluded_keys = @{$self->{exclusions}}; # print "Exclusions are: @excluded_keys\n"; @@ -121,7 +120,7 @@ sub fix_up_unquoted_bootstrap_block { # first remove the leading ampersand $block =~ s/\{\&/{/; my $old = ""; - while(!($old eq $block)) { + while($old ne $block) { $old = $block; # crazy regex here $block =~ s/([\{,])([^\"]*?)\=([^\"]*?)([\},])/$1\"$2\":\"$3\"$4/; diff --git a/t/32-BootstrapBlock.t b/t/32-BootstrapBlock.t index 9b62dec9e..937b4911a 100644 --- a/t/32-BootstrapBlock.t +++ b/t/32-BootstrapBlock.t @@ -18,6 +18,20 @@ my @test_subs = grep { $_ =~ 'main::test_' } $obj->functions(); exit main(); sub main { + my @args = @_; + + # run a subset of tests? + if (@args) { + for my $name (@args) { + die "No test method test_$name\n" + if not my $func = (__PACKAGE__->can( 'test_' . $name ) + || __PACKAGE__->can( $name )); + $func->(); + } + done_testing; + return 0; + } + foreach my $sub (@test_subs) { no strict 'refs'; $sub->(); @@ -30,42 +44,45 @@ sub main { sub test_basic_operations { my $bootstrap_block = Biodiverse::TreeNode::BootstrapBlock->new(); - my %hash = ( "foo" => "bar", - "footwo" => "bartwo", - "foothree" => "barthree" ); - + my %hash = ( + "foo" => "bar", + "footwo" => "bartwo", + "foothree" => "barthree" + ); foreach my $key (keys %hash) { $bootstrap_block->set_value( key => $key, value => $hash{$key} ); } foreach my $key (keys %hash) { - is ( $bootstrap_block->get_value ( key => $key ), - $hash{ $key }, - "$key maps to $hash{$key}" - ); + is ( + $bootstrap_block->get_value (key => $key), + $hash{$key}, + "$key maps to $hash{$key}" + ); } } sub test_decode { - my @raw_inputs = ('"foo"="bar","footwo"="bartwo",foothree=barthree'); + my @raw_inputs = (q/"foo"="bar","footwo"="bartwo",foothree=barthree/); + my %hash = ( + "foo" => "bar", + "footwo" => "bartwo", + "foothree" => "barthree", + ); - my %hash = ( "foo" => "bar", - "footwo" => "bartwo", - "foothree" => "barthree", - ); - my $bootstrap_block = Biodiverse::TreeNode::BootstrapBlock->new(); foreach my $input (@raw_inputs) { $bootstrap_block->decode_bootstrap_block( raw_bootstrap => $input ); - + foreach my $key (keys %hash) { - is ( $bootstrap_block->get_value ( key => $key ), - $hash{ $key }, - "$key maps to $hash{$key}" + is ( + $bootstrap_block->get_value ( key => $key ), + $hash{ $key }, + "$key maps to $hash{$key}" ); } } @@ -73,10 +90,11 @@ sub test_decode { sub test_encode { - my %hash = ( "foo" => "bar", - "footwo" => "bartwo", - "foothree" => "barthree", - ); + my %hash = ( + "foo" => "bar", + "footwo" => "bartwo", + "foothree" => "barthree", + ); my $bootstrap_block = Biodiverse::TreeNode::BootstrapBlock->new(); @@ -91,7 +109,8 @@ sub test_encode { foreach my $key (keys %hash) { my $expected_string = "$key=$hash{$key}"; ok (index($actual, $expected_string) != -1, - "Block contained $expected_string") + "Block contained $expected_string", + ); } # test an encoding with exclusions @@ -104,34 +123,37 @@ sub test_encode { $actual = $bootstrap_block->encode_bootstrap_block(); - delete $hash{ "foo" }; - delete $hash{ "footwo" }; + delete @hash{qw/foo footwo/}; foreach my $key (keys %hash) { my $expected_string = "$key=$hash{$key}"; ok (index($actual, $expected_string) != -1, - "Block contained $expected_string") + "Block contained $expected_string", + ); } ok (index($actual, '"foo"="bar"') == -1, - "Block didn't contain excluded item"); + "Block didn't contain excluded item", + ); ok (index($actual, '"footwo"="bartwo"') == -1, - "Block didn't contain excluded item"); + "Block didn't contain excluded item", + ); # now test clearing the exclusions $bootstrap_block->clear_exclusions(); $actual = $bootstrap_block->encode_bootstrap_block(); - %hash = ( "foo" => "bar", - "footwo" => "bartwo", - "foothree" => "barthree", - ); + %hash = ( + "foo" => "bar", + "footwo" => "bartwo", + "foothree" => "barthree", + ); - # we don't know what order the bootstrap block will be written, so # just look for the pairs we know should be there. foreach my $key (keys %hash) { my $expected_string = "$key=$hash{$key}"; ok (index($actual, $expected_string) != -1, - "Block contained $expected_string") + "Block contained $expected_string", + ); } } @@ -150,25 +172,30 @@ sub test_fix_up_unquoted_bootstrap_block { my $result = $bootstrap_block->fix_up_unquoted_bootstrap_block( block => $key); - is ( $result, - $test_hash{$key}, - "$key processed correctly", - ); + is ( + $result, + $test_hash{$key}, + "$key processed correctly", + ); } } # only color export should have an exclamation mark # e.g. [&blah=blah,!color=red,blah2=blah2] sub test_colour_specific_export { - my %hash = ( "foo" => "bar", - "footwo" => "bartwo", - "color" => "red", - ); + my %hash = ( + "foo" => "bar", + "footwo" => "bartwo", + "color" => "red", + ); my $bootstrap_block = Biodiverse::TreeNode::BootstrapBlock->new(); foreach my $key (keys %hash) { - $bootstrap_block->set_value( key => $key, value => $hash{ $key } ); + $bootstrap_block->set_value( + key => $key, + value => $hash{ $key }, + ); } my $actual = $bootstrap_block->encode_bootstrap_block(); @@ -176,7 +203,7 @@ sub test_colour_specific_export { # we don't know what order the bootstrap block will be written, so # just look for the pairs we know should be there. ok (index($actual, "!color=red") != -1, - "Block contained !color=red") + "Block contained !color=red", + ); - } From 7b282735d17cbf95ce7157c07ce09b8774f2a325 Mon Sep 17 00:00:00 2001 From: Shawn Laffan Date: Sun, 19 Feb 2017 11:14:31 +1100 Subject: [PATCH 41/52] separate the colours from the rest of the bootstrap block lists Updates #630 --- lib/Biodiverse/GUI/Dendrogram.pm | 15 +++++----- lib/Biodiverse/Tree.pm | 36 ++++++++++++----------- lib/Biodiverse/TreeNode.pm | 20 ++++++++----- lib/Biodiverse/TreeNode/BootstrapBlock.pm | 29 ++++++++++++++++-- t/32-BootstrapBlock.t | 10 +++++-- 5 files changed, 72 insertions(+), 38 deletions(-) diff --git a/lib/Biodiverse/GUI/Dendrogram.pm b/lib/Biodiverse/GUI/Dendrogram.pm index 5c84cca18..b4b250bd7 100644 --- a/lib/Biodiverse/GUI/Dendrogram.pm +++ b/lib/Biodiverse/GUI/Dendrogram.pm @@ -1149,15 +1149,16 @@ sub set_node_colour { # also store it in the node for export purposes my $node_ref - = $self->get_tree_object()->get_node_ref(node => $node_name); + = $self->get_tree_object->get_node_ref(node => $node_name); + my $colour_string = $colour_ref + ? $self->get_proper_colour_format(colour_ref => $colour_ref) + : DEFAULT_LINE_COLOUR_RGB; - my $colour_string = - $colour_ref ? $self->get_proper_colour_format(colour_ref => $colour_ref) - : "#000000"; - - $node_ref->set_bootstrap_value( key => "color", - value => $colour_string ); + $node_ref->set_bootstrap_value( + key => "color", + value => $colour_string + ); } # boolean: has a colour been set for a given node diff --git a/lib/Biodiverse/Tree.pm b/lib/Biodiverse/Tree.pm index 77bbc1a24..77891e355 100644 --- a/lib/Biodiverse/Tree.pm +++ b/lib/Biodiverse/Tree.pm @@ -897,7 +897,7 @@ sub get_metadata_export_nexus { { name => 'export_colours', label_text => 'Export colours', - tooltip => 'Include user defined colours (in the nexus bootstrap block)', + tooltip => 'Include user defined colours (in the nexus comments blocks)', type => 'boolean', default => 0, }, @@ -991,26 +991,28 @@ sub export_newick { open( my $fh, '>', $file ) || croak "Could not open file '$file' for writing\n"; - my @node_refs = $self->get_node_refs; - my $export_colours = $args{export_colours}; - my $added_exclusions; - if(!$export_colours) { - $added_exclusions++; - foreach my $node_ref (@node_refs) { - $node_ref->get_bootstrap_block->add_exclusion( - exclusion => 'color', - ); - } - } + # Plain newick does not support colours + # We need nexus for that + #my @node_refs = $self->get_node_refs; + #my $export_colours = $args{export_colours}; + #my $added_exclusions; + #if(!$export_colours) { + # $added_exclusions++; + # foreach my $node_ref (@node_refs) { + # $node_ref->get_bootstrap_block->add_exclusion( + # exclusion => 'color', + # ); + # } + #} print {$fh} $self->to_newick(%args); $fh->close; - if ($added_exclusions) { - foreach my $node_ref (@node_refs) { - $node_ref->get_bootstrap_block->clear_exclusions; - } - } + #if ($added_exclusions) { + # foreach my $node_ref (@node_refs) { + # $node_ref->get_bootstrap_block->clear_exclusions; + # } + #} return 1; } diff --git a/lib/Biodiverse/TreeNode.pm b/lib/Biodiverse/TreeNode.pm index 40f230eb7..92ab48175 100644 --- a/lib/Biodiverse/TreeNode.pm +++ b/lib/Biodiverse/TreeNode.pm @@ -1580,7 +1580,12 @@ sub set_bootstrap_value { my $value = $args{ value }; my $bootstrap_block = $self->get_bootstrap_block(); - $bootstrap_block->set_value( key => $key, value => $value ); + if ($key eq 'color' || $key eq 'colour') { + $bootstrap_block->set_colour_aa ($value); + } + else { + $bootstrap_block->set_value( key => $key, value => $value ); + } } sub get_bootstrap_value { @@ -1637,7 +1642,7 @@ sub to_table { my @header = qw /TREENAME NODE_NUMBER PARENTNODE LENGTHTOPARENT NAME/; - if( $export_colours ) { + if ( $export_colours ) { push @header, "COLOUR"; } @@ -1663,10 +1668,9 @@ sub to_table { my $number = $node->get_value ('NODE_NUMBER'); my %data; - my $colour = $node->get_bootstrap_value (key => 'color'); - # add to the basestruct object if( $export_colours ) { + my $colour = $node->get_bootstrap_value (key => 'color'); @data{@header} = ($treename, $number, $parent_num, $node->get_length || 0, $taxon_name, $colour); } @@ -1926,11 +1930,11 @@ sub to_newick { # convert the tree to a newick format. Based on the NEXUS li #$name = "'$name'"; # quote otherwise } - # build the bootstrap block + # build the bootstrap block - should be conditional my $bootstrap_block = $self->get_bootstrap_block(); - - my $bootstrap_string = - $bootstrap_block->encode_bootstrap_block(); + my $bootstrap_string = $bootstrap_block->encode_bootstrap_block( + include_colour => $args{export_colours} || $args{include_colours}, + ); if (! $self->is_terminal_node) { # not a terminal node $string .= "("; diff --git a/lib/Biodiverse/TreeNode/BootstrapBlock.pm b/lib/Biodiverse/TreeNode/BootstrapBlock.pm index a9da6f230..c30967f6b 100644 --- a/lib/Biodiverse/TreeNode/BootstrapBlock.pm +++ b/lib/Biodiverse/TreeNode/BootstrapBlock.pm @@ -41,6 +41,26 @@ sub delete_value { delete $self->{$key}; } +sub set_colour { + my ($self, %args) = @_; + $self->{colour} = $args{colour}; +} + +sub set_colour_aa { + my ($self, $colour) = @_; + $self->{colour} = $colour; +} + +sub get_colour { + my $self = shift; + return $self->{colour}; +} + +sub delete_colour { + my $self= shift; + delete $self->{colour}; +} + # given a boostrap block as it was imported, populate this object. # e.g. "color:#ffffff,foo:bar" etc. sub decode_bootstrap_block { @@ -88,11 +108,14 @@ sub encode_bootstrap_block { foreach my $key (keys %boot_values) { my $value = $boot_values{$key}; # should test if the value looks like a valid colour value - if ($key eq 'color') { - $key = '!color'; - } push @bootstrap_strings, "$key=$value"; } + if ($args{include_colour}) { + my $colour = $self->get_colour; + if (defined $colour) { + unshift @bootstrap_strings, "!color=" . $colour; + } + } # if we have nothing in this block, we probably don't want to # write out [], as it makes the nexus file ugly. diff --git a/t/32-BootstrapBlock.t b/t/32-BootstrapBlock.t index 937b4911a..834b1ea6a 100644 --- a/t/32-BootstrapBlock.t +++ b/t/32-BootstrapBlock.t @@ -9,6 +9,8 @@ use Test::Lib; use Test::More; use Test::Exception; +use rlib; + use Biodiverse::TreeNode::BootstrapBlock; use Devel::Symdump; @@ -186,7 +188,6 @@ sub test_colour_specific_export { my %hash = ( "foo" => "bar", "footwo" => "bartwo", - "color" => "red", ); my $bootstrap_block = Biodiverse::TreeNode::BootstrapBlock->new(); @@ -197,8 +198,11 @@ sub test_colour_specific_export { value => $hash{ $key }, ); } + $bootstrap_block->set_colour_aa('red'); - my $actual = $bootstrap_block->encode_bootstrap_block(); + my $actual = $bootstrap_block->encode_bootstrap_block( + include_colour => 1, + ); # we don't know what order the bootstrap block will be written, so # just look for the pairs we know should be there. @@ -206,4 +210,4 @@ sub test_colour_specific_export { "Block contained !color=red", ); -} +} \ No newline at end of file From 93b74375b9c9617c248b47f3a8ce749ec9dff070 Mon Sep 17 00:00:00 2001 From: Shawn Laffan Date: Sun, 19 Feb 2017 11:15:31 +1100 Subject: [PATCH 42/52] plain newick files do not support complex bootstrap blocks updates #630 --- data/example_data_x64.bps | Bin 476955 -> 344308 bytes lib/Biodiverse/Tree.pm | 19 ------------------- 2 files changed, 19 deletions(-) diff --git a/data/example_data_x64.bps b/data/example_data_x64.bps index 2d1d7188865a57a9dbd9a04e1afbc0bf75195720..4d2ee95c9eedee4a6dc8804cc7bf873429808501 100644 GIT binary patch literal 344308 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�rQK6&*Kl;9vCH3sJ4bb}2^%a@Z2&9hGm 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 literal 476955 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 diff --git a/lib/Biodiverse/Tree.pm b/lib/Biodiverse/Tree.pm index 77891e355..90f55230f 100644 --- a/lib/Biodiverse/Tree.pm +++ b/lib/Biodiverse/Tree.pm @@ -991,28 +991,9 @@ sub export_newick { open( my $fh, '>', $file ) || croak "Could not open file '$file' for writing\n"; - # Plain newick does not support colours - # We need nexus for that - #my @node_refs = $self->get_node_refs; - #my $export_colours = $args{export_colours}; - #my $added_exclusions; - #if(!$export_colours) { - # $added_exclusions++; - # foreach my $node_ref (@node_refs) { - # $node_ref->get_bootstrap_block->add_exclusion( - # exclusion => 'color', - # ); - # } - #} - print {$fh} $self->to_newick(%args); $fh->close; - #if ($added_exclusions) { - # foreach my $node_ref (@node_refs) { - # $node_ref->get_bootstrap_block->clear_exclusions; - # } - #} return 1; } From 89792a316308afb8b5b53a325b34fac50548ec19 Mon Sep 17 00:00:00 2001 From: Shawn Laffan Date: Sun, 19 Feb 2017 12:38:11 +1100 Subject: [PATCH 43/52] shift the colour reformatter into BootstrapBlock.pm Also remove exclusions blocks Updates #630 --- lib/Biodiverse/GUI/Dendrogram.pm | 20 ++++++++---- lib/Biodiverse/Tree.pm | 23 +++++++------ lib/Biodiverse/TreeNode/BootstrapBlock.pm | 20 ++++++++++++ t/13-Tree.t | 40 ++++++++++++++++++----- t/32-BootstrapBlock.t | 13 +++++++- 5 files changed, 91 insertions(+), 25 deletions(-) diff --git a/lib/Biodiverse/GUI/Dendrogram.pm b/lib/Biodiverse/GUI/Dendrogram.pm index b4b250bd7..ef8f87046 100644 --- a/lib/Biodiverse/GUI/Dendrogram.pm +++ b/lib/Biodiverse/GUI/Dendrogram.pm @@ -1118,7 +1118,9 @@ sub increment_multiselect_colour { sub get_colour_not_in_tree { my $self = shift; - my $colour = eval {$self->get_parent_tab->get_excluded_cell_colour} || COLOUR_NOT_IN_TREE; + my $colour = eval { + $self->get_parent_tab->get_excluded_cell_colour + } || COLOUR_NOT_IN_TREE; return $colour; } @@ -1132,9 +1134,10 @@ sub clear_node_colours { my $tree = $self->get_tree_object(); if($tree) { foreach my $node ($tree->get_node_refs()) { - $self->set_node_colour( node_name => $node->get_name(), - colour_ref => DEFAULT_LINE_COLOUR, - ); + $self->set_node_colour( + node_name => $node->get_name(), + colour_ref => DEFAULT_LINE_COLOUR, + ); } } } @@ -1147,12 +1150,14 @@ sub set_node_colour { # cache the colour $self->{node_colours_cache}{$node_name} = $colour_ref; + # needs profiling - we cache the nodes by name somewhere + # also store it in the node for export purposes my $node_ref = $self->get_tree_object->get_node_ref(node => $node_name); my $colour_string = $colour_ref - ? $self->get_proper_colour_format(colour_ref => $colour_ref) + ? $colour_ref->to_string : DEFAULT_LINE_COLOUR_RGB; $node_ref->set_bootstrap_value( @@ -1178,6 +1183,9 @@ sub get_node_colour { # convert from a colour_ref to whatever string format we want to use. # not sure if this function should really be here but there's no # general colour module? +# could shift the logic into TreeNode.pm and have conditional usage +# based on it fitting #RRRRGGGGBBBB +# requires that we always store the string forms sub get_proper_colour_format { my ($self, %args) = @_; my $colour_ref = $args{colour_ref}; @@ -1870,7 +1878,7 @@ sub highlight_path { while ($node_ref) { my $line = $self->{node_lines}->{$node_ref->get_name}; my $colour_ref = $node_colour - || $self->get_node_colour(node_name=>$node_ref->get_name) + || $self->get_node_colour(node_name => $node_ref->get_name) || DEFAULT_LINE_COLOUR; $line->set(fill_color_gdk => $colour_ref); #$line->set(width_pixels => HIGHLIGHT_WIDTH); diff --git a/lib/Biodiverse/Tree.pm b/lib/Biodiverse/Tree.pm index 90f55230f..ced55a327 100644 --- a/lib/Biodiverse/Tree.pm +++ b/lib/Biodiverse/Tree.pm @@ -924,25 +924,28 @@ sub export_nexus { || croak "Could not open file '$file' for writing\n"; my $export_colours = $args{export_colours}; - if(!$export_colours) { - my @node_refs = $self->get_node_refs; - foreach my $node_ref (@node_refs) { - $node_ref->get_bootstrap_block->add_exclusion(exclusion => "color"); + my $sub_list_name = $args{sub_list}; + my $comment_block_hash; + if ($export_colours || defined $sub_list_name) { + my %comments_block; + my $node_refs = $self->get_node_refs; + foreach my $node_ref (@$node_refs) { + my $booter = $node_ref->get_bootstrap_block; + my $boot_text = $booter->encode_bootstrap_block( + include_colour => $export_colours, + ); + $comments_block{$node_ref->get_name} = $boot_text; } + $comment_block_hash = \%comments_block; } print {$fh} $self->to_nexus( tree_name => $self->get_param('NAME'), %args, + comment_block_hash => $comment_block_hash, ); $fh->close; - # clear any exclusions we set - my @node_refs = $self->get_node_refs; - foreach my $node_ref (@node_refs) { - $node_ref->get_bootstrap_block->clear_exclusions(); - } - return 1; } diff --git a/lib/Biodiverse/TreeNode/BootstrapBlock.pm b/lib/Biodiverse/TreeNode/BootstrapBlock.pm index c30967f6b..da7c8e198 100644 --- a/lib/Biodiverse/TreeNode/BootstrapBlock.pm +++ b/lib/Biodiverse/TreeNode/BootstrapBlock.pm @@ -113,6 +113,7 @@ sub encode_bootstrap_block { if ($args{include_colour}) { my $colour = $self->get_colour; if (defined $colour) { + $colour = $self->reformat_colour_spec (colour => $colour); unshift @bootstrap_strings, "!color=" . $colour; } } @@ -127,6 +128,25 @@ sub encode_bootstrap_block { } +sub reformat_colour_spec { + my ($self, %args) = @_; + my $colour = $args{colour}; + + # only worry about #RRRRGGGGBBBB + return $colour if not $colour =~ /^#[a-fA-F\d]{12}$/; + + # the way colours are selected in the dendrogram only allows for 2 + # hex digits for each color. Unless this is change, we don't lose + # precision by truncating two of the four digits for each colour + # that are stored in the colour ref. + my $proper_form_string = "#"; + my @wanted_indices = (1, 2, 5, 6, 9, 10); + foreach my $index (@wanted_indices) { + $proper_form_string .= substr($colour, $index, 1); + } + + return $proper_form_string; +} # add quotes to unquoted json blocks. Needed for the json decoder # e.g. {&key=value,key2=value2} goes to {"key":"value","key2":"value2"} diff --git a/t/13-Tree.t b/t/13-Tree.t index fde393612..3b99b36ea 100644 --- a/t/13-Tree.t +++ b/t/13-Tree.t @@ -493,10 +493,21 @@ sub test_export_tabular_tree { sub test_export_nexus { my $tree = shift // get_site_data_as_tree(); - _test_export_nexus (tree => $tree, no_translate_block => 0); - _test_export_nexus (tree => $tree, no_translate_block => 1, use_internal_names => 1); - _test_export_nexus (tree => $tree, no_translate_block => 0, check_bootstrap_values => 1); - + _test_export_nexus ( + tree => $tree, + no_translate_block => 0, + ); + _test_export_nexus ( + tree => $tree, + no_translate_block => 1, + use_internal_names => 1, + ); + _test_export_nexus ( + tree => $tree, + no_translate_block => 0, + check_bootstrap_values => 1, + ); + } @@ -505,12 +516,19 @@ sub _test_export_nexus { my $tree = $args{tree}; delete $args{tree}; - if($args{check_bootstrap_values}) { + if ($args{check_bootstrap_values}) { # add some bootstrap values to export # get all the nodes my @tree_nodes = $tree->get_node_refs(); foreach my $node (@tree_nodes) { - $node->set_bootstrap_value( key => "bootkey", value => "bootvalue" ); + $node->set_bootstrap_value( + key => "bootkey", + value => "bootvalue", + ); + $node->set_bootstrap_value( + key => "colour", + value => "red", + ); } } @@ -590,13 +608,19 @@ sub _test_export_nexus { subtest "bootstrap roundtrip" => sub { my @tree_nodes = $imported_tree->get_node_refs(); foreach my $node (@tree_nodes) { + my $node_name = $node->get_name; is($node->get_bootstrap_value( key => "bootkey" ), "bootvalue", - "Exported and then imported correct bootstrap value." - ); + "Exported and then imported correct bootstrap value for $node_name." + ); + is($node->get_bootstrap_value( key => "colour" ), + "red", + "Exported and then imported correct colour for $node_name." + ); } }; } + return; } diff --git a/t/32-BootstrapBlock.t b/t/32-BootstrapBlock.t index 834b1ea6a..e7f661d89 100644 --- a/t/32-BootstrapBlock.t +++ b/t/32-BootstrapBlock.t @@ -210,4 +210,15 @@ sub test_colour_specific_export { "Block contained !color=red", ); -} \ No newline at end of file + $bootstrap_block->set_colour_aa('#e4e41a1a1c1c'); + $actual = $bootstrap_block->encode_bootstrap_block( + include_colour => 1, + ); + $actual =~ /\!color=(#[a-fA-F\d]+)/; + my $colour = $1; + like ($colour, + qr/^#[a-fA-F\d]{6}$/, + "Block contained expected colour spec", + ); + +} From 5e9c2c7c43a522b7414a9eb717c8167a17b24c80 Mon Sep 17 00:00:00 2001 From: Shawn Laffan Date: Sun, 19 Feb 2017 13:11:01 +1100 Subject: [PATCH 44/52] Shift the bootstrap data into a subhash, add array args methods The subhash makes the logic cleaner when wrangling colours and the like. It also means we can have a label if appropriate. Updates #630 --- lib/Biodiverse/TreeNode/BootstrapBlock.pm | 70 ++++++++++++++++------- 1 file changed, 49 insertions(+), 21 deletions(-) diff --git a/lib/Biodiverse/TreeNode/BootstrapBlock.pm b/lib/Biodiverse/TreeNode/BootstrapBlock.pm index da7c8e198..827886cc9 100644 --- a/lib/Biodiverse/TreeNode/BootstrapBlock.pm +++ b/lib/Biodiverse/TreeNode/BootstrapBlock.pm @@ -4,11 +4,11 @@ use strict; use warnings; use Carp; -use 5.010; +use 5.016; use Cpanel::JSON::XS; use Data::Structure::Util qw( unbless ); - +use Ref::Util qw /is_arrayref is_hashref/; our $VERSION = '1.99_006'; @@ -21,9 +21,16 @@ sub new { # add or update a key:value pair to this object. sub set_value { my ($self, %args) = @_; - my $key = $args{ key }; + my $key = $args{ key } + // croak "key arg not passed\n"; my $value = $args{ value }; - $self->{$key} = $value; + $self->{_data}{$key} = $value; + return $value; +} + +sub set_value_aa { + my ($self, $key, $value) = @_; + $self->{_data}{$key} = $value; return $value; } @@ -31,14 +38,20 @@ sub set_value { sub get_value { my ($self, %args) = @_; my $key = $args{ key }; - return $self->{$key}; + return $self->{_data}{$key}; } # removes given key from the bootstrap block sub delete_value { my ($self, %args) = @_; my $key = $args{ key }; - delete $self->{$key}; + delete $self->{_data}{$key}; +} + +sub get_data { + my $self = shift; + my $data = $self->{_data} //= {}; + return wantarray ? %$data : $data; } sub set_colour { @@ -61,9 +74,14 @@ sub delete_colour { delete $self->{colour}; } +sub decode_bootstrap_block { + my $self = shift; + return $self->decode (@_); +} + # given a boostrap block as it was imported, populate this object. # e.g. "color:#ffffff,foo:bar" etc. -sub decode_bootstrap_block { +sub decode { my ($self, %args) = @_; my $input = $args{ raw_bootstrap }; @@ -82,37 +100,47 @@ sub decode_bootstrap_block { my $decoded_hash = decode_json $input; foreach my $key (keys %$decoded_hash) { - $self->set_value( key => $key, value => $decoded_hash->{$key} ); + if ($key eq '!color') { + $self->set_colour_aa ($decoded_hash->{$key}); + } + else { + $self->set_value_aa( $key => $decoded_hash->{$key} ); + } } } +sub encode_bootstrap_block { + my $self = shift; + return $self->encode (@_); +} + # returns the values in this object formatted so they are ready to be # written straight to a nexus file. # e.g. returns [&!color="#ffffff","foo"="bar"] etc. # excluded_keys is an array ref of keys not to include in the block -sub encode_bootstrap_block { +sub encode { my ($self, %args) = @_; - my %boot_values = %$self; - - if ($self->{exclusions}) { - my @excluded_keys = @{$self->{exclusions}}; - # print "Exclusions are: @excluded_keys\n"; - delete @boot_values{@excluded_keys}; - } - - # also make sure "exclusions:..." isn't in the encoding - delete $boot_values{exclusions}; + my %boot_values = $self->get_data; my @bootstrap_strings; - foreach my $key (keys %boot_values) { + foreach my $key (sort keys %boot_values) { my $value = $boot_values{$key}; - # should test if the value looks like a valid colour value + if (is_arrayref($value)) { + $value = '{' . join (',', @$value) .'}'; + } + elsif (is_hashref ($value)) { + my @arr + = map {$_ => $value->{$_}} + sort keys %$value; + $value = '{' . join (',', @arr) .'}'; + } push @bootstrap_strings, "$key=$value"; } if ($args{include_colour}) { my $colour = $self->get_colour; if (defined $colour) { + # should test if the value looks like a valid colour value $colour = $self->reformat_colour_spec (colour => $colour); unshift @bootstrap_strings, "!color=" . $colour; } From fdb9ce0f31f5b2becdf87825df254294ce75fe33 Mon Sep 17 00:00:00 2001 From: Shawn Laffan Date: Sun, 19 Feb 2017 13:12:05 +1100 Subject: [PATCH 45/52] Add a round trip test that incudes complex data structures This currently fails as the parser assumes json compatible strings (which is a false assumption on my part) [ci skip] Updates #630 --- t/32-BootstrapBlock.t | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/t/32-BootstrapBlock.t b/t/32-BootstrapBlock.t index e7f661d89..f1524156e 100644 --- a/t/32-BootstrapBlock.t +++ b/t/32-BootstrapBlock.t @@ -222,3 +222,32 @@ sub test_colour_specific_export { ); } + + +sub test_roundtrip { + my %data = ( + aref => [1,3,5], + href => {a => 1, b => 2}, + colour => '#002244', + other => 'blort', + other2 => 'blert15', + ); + + my $booter = Biodiverse::TreeNode::BootstrapBlock->new; + foreach my $key (keys %data) { + next if $key eq 'colour'; + $booter->set_value_aa ($key => $data{$key}); + } + $booter->set_colour_aa ($data{colour}); + my $encoded = $booter->encode (include_colour => 1); + + my $expected + = '[&!color=#002244,aref={1,3,5,7},href={a,1,b,2},' + . 'other=blort,other2=blert15]'; + is ($encoded, $expected, 'encoded expected string'); + + my $booter2 = Biodiverse::TreeNode::BootstrapBlock->new; + $booter2->decode(raw_bootstrap => $encoded); + is_deeply ($booter2, $booter, 'encode-decode roundtrip passed') +} + From 9f01603d36cb96f85d99306548ebdcf1a20ba6c2 Mon Sep 17 00:00:00 2001 From: Shawn Laffan Date: Mon, 20 Feb 2017 11:54:24 +1100 Subject: [PATCH 46/52] Update tests to use colour methods Updates #630 --- t/13-Tree.t | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/t/13-Tree.t b/t/13-Tree.t index 3b99b36ea..e6c0130bc 100644 --- a/t/13-Tree.t +++ b/t/13-Tree.t @@ -521,14 +521,9 @@ sub _test_export_nexus { # get all the nodes my @tree_nodes = $tree->get_node_refs(); foreach my $node (@tree_nodes) { - $node->set_bootstrap_value( - key => "bootkey", - value => "bootvalue", - ); - $node->set_bootstrap_value( - key => "colour", - value => "red", - ); + my $booter = $node->get_bootstrap_block; + $booter->set_value_aa(bootkey => "bootvalue"); + $booter->set_colour_aa("red"); } } @@ -609,11 +604,12 @@ sub _test_export_nexus { my @tree_nodes = $imported_tree->get_node_refs(); foreach my $node (@tree_nodes) { my $node_name = $node->get_name; - is($node->get_bootstrap_value( key => "bootkey" ), + my $booter = $node->get_bootstrap_block; + is ($booter->get_value( key => "bootkey" ), "bootvalue", "Exported and then imported correct bootstrap value for $node_name." ); - is($node->get_bootstrap_value( key => "colour" ), + is ($booter->get_colour, "red", "Exported and then imported correct colour for $node_name." ); From c37dad1636f8dfbebc35177fb15811b89ab6e2a8 Mon Sep 17 00:00:00 2001 From: Shawn Laffan Date: Mon, 20 Feb 2017 11:55:12 +1100 Subject: [PATCH 47/52] Use a non-capturing group Might make a difference when parsing very large trees Updates #630 --- lib/Biodiverse/ReadNexus.pm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Biodiverse/ReadNexus.pm b/lib/Biodiverse/ReadNexus.pm index b66652e81..ce2e2ac40 100644 --- a/lib/Biodiverse/ReadNexus.pm +++ b/lib/Biodiverse/ReadNexus.pm @@ -662,7 +662,7 @@ sub parse_newick { } # we have a comma or are at the end of the string, so we create this node and start a new one - elsif ($string =~ m/ \G (,)/xgcs) { + elsif ($string =~ m/ \G (?:,)/xgcs) { $name //= $tree->get_free_internal_name (exclude => $translate_hash); From 4e26ac91331934081ed720da251060ddd5b695bf Mon Sep 17 00:00:00 2001 From: Shawn Laffan Date: Mon, 20 Feb 2017 11:55:59 +1100 Subject: [PATCH 48/52] Miscellaneous changes Updates #630 --- lib/Biodiverse/Tree.pm | 2 +- lib/Biodiverse/TreeNode.pm | 19 +++++++------------ 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/lib/Biodiverse/Tree.pm b/lib/Biodiverse/Tree.pm index ced55a327..4d69daf40 100644 --- a/lib/Biodiverse/Tree.pm +++ b/lib/Biodiverse/Tree.pm @@ -931,7 +931,7 @@ sub export_nexus { my $node_refs = $self->get_node_refs; foreach my $node_ref (@$node_refs) { my $booter = $node_ref->get_bootstrap_block; - my $boot_text = $booter->encode_bootstrap_block( + my $boot_text = $booter->encode ( include_colour => $export_colours, ); $comments_block{$node_ref->get_name} = $boot_text; diff --git a/lib/Biodiverse/TreeNode.pm b/lib/Biodiverse/TreeNode.pm index 92ab48175..3771fa81a 100644 --- a/lib/Biodiverse/TreeNode.pm +++ b/lib/Biodiverse/TreeNode.pm @@ -56,10 +56,10 @@ sub new { $self->add_children(%args); } - if (exists $args{boot}) { + if (exists $args{boot} && defined $args{boot}) { #say "We found the boot arg, it is $args{boot}"; my $bootstrap_block = Biodiverse::TreeNode::BootstrapBlock->new(); - $bootstrap_block->decode_bootstrap_block(raw_bootstrap => $args{boot}); + $bootstrap_block->decode (raw_bootstrap => $args{boot}); $self->set_value( bootstrap_block => $bootstrap_block, ); @@ -1598,15 +1598,10 @@ sub get_bootstrap_value { # isolate dealings with the underlying object hash to one function sub get_bootstrap_block { - my ($self, %args) = @_; - my $bootstrap_block = $self->get_value('bootstrap_block'); - if(!$bootstrap_block) { - $bootstrap_block = Biodiverse::TreeNode::BootstrapBlock->new(); - - $self->set_value ( - bootstrap_block => $bootstrap_block, - ); - } + my ($self) = @_; + my $bootstrap_block = + $self->{bootstrap_block} + ||= Biodiverse::TreeNode::BootstrapBlock->new; return $bootstrap_block; } @@ -1932,7 +1927,7 @@ sub to_newick { # convert the tree to a newick format. Based on the NEXUS li # build the bootstrap block - should be conditional my $bootstrap_block = $self->get_bootstrap_block(); - my $bootstrap_string = $bootstrap_block->encode_bootstrap_block( + my $bootstrap_string = $bootstrap_block->encode ( include_colour => $args{export_colours} || $args{include_colours}, ); From ebd3a6093baf601b06d3ae79d7a16a35175485b0 Mon Sep 17 00:00:00 2001 From: Shawn Laffan Date: Tue, 21 Feb 2017 13:44:25 +1100 Subject: [PATCH 49/52] set roundtrip test as todo They can be worked on under issue #657 Updates #630 --- t/32-BootstrapBlock.t | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/t/32-BootstrapBlock.t b/t/32-BootstrapBlock.t index f1524156e..2820ad01a 100644 --- a/t/32-BootstrapBlock.t +++ b/t/32-BootstrapBlock.t @@ -242,12 +242,15 @@ sub test_roundtrip { my $encoded = $booter->encode (include_colour => 1); my $expected - = '[&!color=#002244,aref={1,3,5,7},href={a,1,b,2},' + = '[&!color=#002244,aref={1,3,5},href={a,1,b,2},' . 'other=blort,other2=blert15]'; is ($encoded, $expected, 'encoded expected string'); - my $booter2 = Biodiverse::TreeNode::BootstrapBlock->new; - $booter2->decode(raw_bootstrap => $encoded); - is_deeply ($booter2, $booter, 'encode-decode roundtrip passed') + TODO: { + my $booter2 = Biodiverse::TreeNode::BootstrapBlock->new; + $booter2->decode(raw_bootstrap => $encoded); + local $TODO = 'importation not yet implemented'; + is_deeply ($booter2, $booter, 'encode-decode roundtrip passed') + } } From 45da3a309c3941a39403d097fc1054db340f41cc Mon Sep 17 00:00:00 2001 From: Shawn Laffan Date: Tue, 21 Feb 2017 14:03:10 +1100 Subject: [PATCH 50/52] disable a failing roundtrip test It can be dealt with under #657 Updates #630 --- data/example_data_x64.bps | Bin 344308 -> 337417 bytes t/13-Tree.t | 40 +++++++++++++++++++++----------------- 2 files changed, 22 insertions(+), 18 deletions(-) diff --git a/data/example_data_x64.bps b/data/example_data_x64.bps index 4d2ee95c9eedee4a6dc8804cc7bf873429808501..4114e3243850e9df332e0d0ae3f1536851baf5ae 100644 GIT binary patch literal 337417 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 Sbm$O%*`Lil>%=!+JNkcD{DCn5 literal 344308 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�rQK6&*Kl;9vCH3sJ4bb}2^%a@Z2&9hGm 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 diff --git a/t/13-Tree.t b/t/13-Tree.t index e6c0130bc..875e64142 100644 --- a/t/13-Tree.t +++ b/t/13-Tree.t @@ -598,24 +598,28 @@ sub _test_export_nexus { }; }; - # make sure the bootstrap values got through - if($args{check_bootstrap_values}) { - subtest "bootstrap roundtrip" => sub { - my @tree_nodes = $imported_tree->get_node_refs(); - foreach my $node (@tree_nodes) { - my $node_name = $node->get_name; - my $booter = $node->get_bootstrap_block; - is ($booter->get_value( key => "bootkey" ), - "bootvalue", - "Exported and then imported correct bootstrap value for $node_name." - ); - is ($booter->get_colour, - "red", - "Exported and then imported correct colour for $node_name." - ); - } - }; - } + ## make sure the bootstrap values got through + ## comment out since todo results in lots of newlines at the terminal + #if($args{check_bootstrap_values}) { + # TODO: { + # local $TODO = 'round tripping is for issue #657'; + # subtest "bootstrap roundtrip" => sub { + # my @tree_nodes = $imported_tree->get_node_refs(); + # foreach my $node (@tree_nodes) { + # my $node_name = $node->get_name; + # my $booter = $node->get_bootstrap_block; + # is ($booter->get_value( key => "bootkey" ), + # "bootvalue", + # "Exported and then imported correct bootstrap value for $node_name." + # ); + # is ($booter->get_colour, + # "red", + # "Exported and then imported correct colour for $node_name." + # ); + # } + # }; + # } + #} return; } From 4a6b1410230bd97d6858a00d3d1a8b36417df983 Mon Sep 17 00:00:00 2001 From: Shawn Laffan Date: Tue, 21 Feb 2017 14:44:45 +1100 Subject: [PATCH 51/52] store bootstrap/comments objects under private key Otherwise they were appearing in the GUI. Minor tweaks to methods otherwise. Updates #630 --- lib/Biodiverse/Tree.pm | 12 ++---------- lib/Biodiverse/TreeNode.pm | 31 ++++++++++++++++++++----------- 2 files changed, 22 insertions(+), 21 deletions(-) diff --git a/lib/Biodiverse/Tree.pm b/lib/Biodiverse/Tree.pm index 4d69daf40..54db9b6b6 100644 --- a/lib/Biodiverse/Tree.pm +++ b/lib/Biodiverse/Tree.pm @@ -897,7 +897,7 @@ sub get_metadata_export_nexus { { name => 'export_colours', label_text => 'Export colours', - tooltip => 'Include user defined colours (in the nexus comments blocks)', + tooltip => 'Include the branch colours last used to display the tree in the GUI', type => 'boolean', default => 0, }, @@ -961,14 +961,6 @@ sub get_metadata_export_newick { type => 'boolean', default => 1, }, - # Colours seem unsupported in figtree for newick files - #{ - # name => 'export_colours', - # label_text => 'Export colours', - # tooltip => 'Include the user defined colours (in the nexus bootstrap block)', - # type => 'boolean', - # default => 0, - #}, ); for (@parameters) { @@ -1154,7 +1146,7 @@ sub get_metadata_export_tabular_tree { { name => 'export_colours', label_text => 'Export colours', - tooltip => 'Include the user defined colours (in the nexus bootstrap block)', + tooltip => 'Include the branch colours last used to display the tree in the GUI', type => 'boolean', default => 0, }, diff --git a/lib/Biodiverse/TreeNode.pm b/lib/Biodiverse/TreeNode.pm index 3771fa81a..aa35d6238 100644 --- a/lib/Biodiverse/TreeNode.pm +++ b/lib/Biodiverse/TreeNode.pm @@ -1579,13 +1579,10 @@ sub set_bootstrap_value { my $key = $args{ key }; my $value = $args{ value }; - my $bootstrap_block = $self->get_bootstrap_block(); - if ($key eq 'color' || $key eq 'colour') { - $bootstrap_block->set_colour_aa ($value); - } - else { - $bootstrap_block->set_value( key => $key, value => $value ); - } + my $bootstrap_block = $self->get_bootstrap_block; + $bootstrap_block->set_value_aa( $key => $value ); + + return; } sub get_bootstrap_value { @@ -1596,14 +1593,26 @@ sub get_bootstrap_value { return $bootstrap_block->get_value( key => $key ); } +sub set_bootstrap_colour_aa { + my ($self, $colour) = @_; + my $bootstrap_block = $self->get_bootstrap_block; + $bootstrap_block->set_colour_aa ($colour); + return; +} + +sub get_bootstrap_colour { + my ($self) = @_; + my $bootstrap_block = $self->get_bootstrap_block; + return $bootstrap_block->get_colour; +} + + # isolate dealings with the underlying object hash to one function sub get_bootstrap_block { my ($self) = @_; - my $bootstrap_block = - $self->{bootstrap_block} + return + $self->{_bootstrap_block} ||= Biodiverse::TreeNode::BootstrapBlock->new; - - return $bootstrap_block; } From a593117b8ae47184f78d4d5637e3cd19f67825ce Mon Sep 17 00:00:00 2001 From: Shawn Laffan Date: Tue, 21 Feb 2017 15:43:08 +1100 Subject: [PATCH 52/52] remove a Gtk call in the engine code Updates #630 --- lib/Biodiverse/TreeNode.pm | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/Biodiverse/TreeNode.pm b/lib/Biodiverse/TreeNode.pm index aa35d6238..ad3f83760 100644 --- a/lib/Biodiverse/TreeNode.pm +++ b/lib/Biodiverse/TreeNode.pm @@ -14,7 +14,6 @@ use Data::Dumper qw/Dumper/; use List::Util 1.39 qw /min max pairgrep sum any/; use List::MoreUtils qw /uniq/; -use Gtk2; use Biodiverse::BaseStruct; use Biodiverse::TreeNode::BootstrapBlock;