biyelunwen/99.scripts/trinity_utils/util/misc/ButterflyFastaToGraphDot.pl

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);
}