1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
|
#!/usr/bin/env perl
# Copyright © 2011, Battelle National Biodefense Institute (BNBI);
# all rights reserved. Authored by: Brian Ondov, Nicholas Bergman, and
# Adam Phillippy
#
# See the LICENSE.txt file included with this software for license information.
use strict;
BEGIN
{
use File::Basename;
use Cwd 'abs_path';
use lib dirname(abs_path($0)) . "/../lib";
use KronaTools;
}
# defaults
#
setOption('out', 'krona.krona.html');
setOption('hueBad', undef);
setOption('hueGood', undef);
setOption('name', undef);
my @options =
qw(
out
name
combine
depth
hueBad
hueGood
url
postUrl
);
getKronaOptions(@options);
if
(
@ARGV < 1
)
{
printUsage
(
"Creates a Krona chart from the data in other Krona charts.",
"krona_chart",
"Krona HTML file created with KronaTools or the Krona Excel Template",
1,
1,
\@options
);
exit 0;
}
my $tree = newTree();
my $dataset = 0;
my $nodeID = 0;
my @attributeNames;
my @attributeDisplayNames;
my %attributeDisplayByNames;
my @datasetNames;
my $line;
foreach my $input (@ARGV)
{
print "Reading $input...\n";
open XML, $input or die "Could not open $input";
while ( $line !~ /<krona/ )
{
$line = <XML>;
}
while ( $line = <XML> )
{
if ( $line =~ /<attribute display="([^"]+)".*>([^<]+)<\/attribute>/ )
{
if ( $dataset == 0 )
{
push @attributeNames, $2;
push @attributeDisplayNames, $1;
$attributeDisplayByNames{$2} = $1;
}
elsif ( ! $attributeDisplayByNames{$2} || $attributeDisplayByNames{$2} ne $1 )
{
ktDie("$input is not compatible with the first chart (\"$ARGV[0]\")");
}
}
elsif ( $line =~ /<dataset>([^<]+)<\/dataset>/ )
{
push @datasetNames, $1;
}
elsif ( $line =~ /<color attribute="score" hueStart="(\d+)" hueEnd="(\d+)"/ )
{
if ( ! defined getOption('hueBad') )
{
setOption('hueBad', $1);
}
if ( ! defined getOption('hueGood') )
{
setOption('hueGood', $2);
}
}
elsif ( $line =~ /<node name="([^"]*)"/ )
{
if ( $dataset == 0 && ! defined getOption('name') )
{
setOption('name', $1);
}
addXML($tree, \*XML, $dataset, $input);
}
}
close XML;
$dataset = @datasetNames;
}
writeTree
(
$tree,
\@attributeNames,
\@attributeDisplayNames,
\@datasetNames,
getOption('hueBad'),
getOption('hueGood')
);
|