Skip to content

Instantly share code, notes, and snippets.

@nathanhaigh
Created August 27, 2012 03:39
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nathanhaigh/3485308 to your computer and use it in GitHub Desktop.
Save nathanhaigh/3485308 to your computer and use it in GitHub Desktop.
Convert asqg formatted graph into dot format
#!/usr/bin/perl
# Usage: gunzip -c graph.asqg.gz | asqg2dot.pl ['<node_label_regex>'] > graph.dot
use strict;
use warnings;
my $bidirected = 1;
my $highlight_vertex_regex = shift @ARGV || '';
my %vertex_labels;
my $n_vertex = 0;
print "digraph G {\n";
while (<>) {
chomp;
if (/^VT/) {
my ($vertex_type, $vertex_label, $sequence) = split;
my $seqence_length = length($sequence);
$n_vertex++;
my $vertex_id = $n_vertex;
$vertex_labels{$vertex_label} = $vertex_id;
my @vertex_attributes;
if ($vertex_label =~ /$highlight_vertex_regex/) {
push @vertex_attributes, 'color="red"';
}
my $vertex_attributes_string = "@vertex_attributes";
printf " %s [label=\"%s\" %s]\n", $vertex_id, $vertex_label, $vertex_attributes_string;
} elsif (/^ED/) {
my ($edge_type, $vertex_1, $vertex_2, $v1_overlap_start, $v1_overlap_end, $v1_length, $v2_overlap_start, $v2_overlap_end, $v2_length, $v2_reveresed, $n_diff) = split;
my $overlap_length = $v1_overlap_end-$v1_overlap_start+1;
my ($edge_direction, $edge_colour) = ('both', 'black');
if ($v1_overlap_start==0 && $v2_overlap_start==0) {
$edge_colour = "red";
} elsif ($v1_overlap_start==0) {
$edge_colour = "red:black";
} elsif ($v2_overlap_start==0) {
$edge_colour = "black:red";
}
printf " %s -> %s [label=%i dir=%s color=\"%s\"]\n", $vertex_labels{$vertex_1}, $vertex_labels{$vertex_2}, $overlap_length, $edge_direction, $edge_colour;
}
}
print "}\n";
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment