20251125
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
#!/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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user