79 lines
1.7 KiB
Perl
79 lines
1.7 KiB
Perl
#!/usr/bin/env perl
|
|
|
|
use strict;
|
|
use warnings;
|
|
|
|
use FindBin;
|
|
use lib ("$FindBin::RealBin/../../PerlLib", "$FindBin::RealBin/../../PerlLib/KmerGraphLib");
|
|
|
|
use Fasta_reader;
|
|
use StringGraph;
|
|
use StringNode;
|
|
use ColorGradient;
|
|
|
|
my $usage = "usage: $0 Butterfly.fasta\n\n";
|
|
|
|
my $butterfly_fasta_file = $ARGV[0] or die $usage;
|
|
|
|
|
|
main: {
|
|
|
|
my @seqs_n_paths;
|
|
|
|
{
|
|
open (my $fh, $butterfly_fasta_file) or die $!;
|
|
while (<$fh>) {
|
|
if (/^>/) {
|
|
/^>(\S+) .* path=\[(.*)\]/ or die "Error, cannot parse header: $_";
|
|
|
|
my $acc = $1;
|
|
my $path = $2;
|
|
push (@seqs_n_paths, [$acc, $path]);
|
|
}
|
|
}
|
|
close $fh;
|
|
|
|
}
|
|
|
|
my $graph = new StringGraph();
|
|
|
|
my @colors = &ColorGradient::get_RGB_gradient(scalar(@seqs_n_paths));
|
|
@colors = &ColorGradient::convert_RGB_hex(@colors);
|
|
|
|
foreach my $seq_n_path (@seqs_n_paths) {
|
|
my ($acc, $path_text) = @$seq_n_path;
|
|
|
|
my @path_node_names = &get_path_node_names($path_text);
|
|
|
|
my $color = shift @colors;
|
|
|
|
$graph->add_sequence_to_graph($acc, \@path_node_names, 1, $color);
|
|
|
|
}
|
|
|
|
print $graph->toGraphViz();
|
|
|
|
}
|
|
|
|
####
|
|
sub get_path_node_names {
|
|
my ($path_text) = @_;
|
|
|
|
my @node_names;
|
|
|
|
my @parts = split(/\s+/, $path_text);
|
|
foreach my $part (@parts) {
|
|
my ($node_name, $coords) = split(/:/, $part);
|
|
|
|
my ($lend, $rend) = split(/-/, $coords);
|
|
my $length = $rend-$lend + 1;
|
|
|
|
$node_name = "${node_name}_len$length";
|
|
|
|
push (@node_names, $node_name);
|
|
}
|
|
|
|
return(@node_names);
|
|
}
|
|
|